Skip to content
Snippets Groups Projects
vrpn_tracker.hpp 1.61 KiB
Newer Older
burneykb's avatar
burneykb committed
/* Author: Jake Drahos
 *
 * VPRN tracker module header file.
 */

#ifndef _MICROCART_VRPN_TRACKER_HPP
#define _MICROCART_VRPN_TRACKER_HPP

#ifdef __cplusplus
#include <mutex>
#include <thread>
#include <functional>
#include <vector>

#include "vrpn_Tracker.h"
#endif

#include <sys/time.h>

#ifdef __cplusplus
extern "C" 
{
#endif
	struct ucart_vrpn_tracker;
	struct ucart_vrpn_TrackerData {
		double x;
		double y;
		double z;

		double pitch;
		double roll;
		double yaw;

		double fps;
		struct timeval timestamp;
	};

	struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance(
			const char * server);

	void ucart_vrpn_tracker_freeInstance(struct ucart_vrpn_tracker * inst);

	int ucart_vrpn_tracker_addCallback(struct ucart_vrpn_tracker * inst,
			void (*cb)(struct ucart_vrpn_TrackerData *));

	int ucart_vrpn_tracker_getData(struct ucart_vrpn_tracker * inst,
			struct ucart_vrpn_TrackerData * td);

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
namespace microcart
{
	struct TrackerData {
		double x;
		double y;
		double z;

		double pitch;
		double roll;
		double yaw;

		double fps;
		timeval timestamp;
	};

	class Tracker {
	public:
		const struct TrackerData getData(void);
		void callback(const vrpn_TRACKERCB t);

		Tracker(std::string server);
		Tracker(const char * server);
		~Tracker();

		void addCallback(std::function<void(const TrackerData &)> cb);
	private:
		int stop_flag;
		TrackerData trackerData;
		std::thread vrpn_thread;
		std::mutex vrpn_mutex;

		vrpn_Tracker_Remote remote;

		void vrpn_loop(void);

		std::vector<std::function<void(const TrackerData &)>> cb_vector;
	};


}
/* __cplusplus */
#endif

#endif