Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* 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