58 const char *tracker_cfg_file_name = NULL);
62 int read_config_file(FILE *config_file,
const char *tracker_name);
63 void print_latest_report(
void);
66 int register_server_handlers(
void);
67 void get_local_t2r(vrpn_float64 *vec, vrpn_float64 *quat);
68 void get_local_u2s(vrpn_int32 sensor, vrpn_float64 *vec,
95 vrpn_float64 pos[3], d_quat[4];
96 vrpn_float64 vel[3], vel_quat[4];
98 vrpn_float64 acc[3], acc_quat[4];
100 struct timeval timestamp;
111 struct timeval watchdog_timestamp;
113 vrpn_float64 tracker2room[3], tracker2room_quat[4];
121 bool ensure_enough_unit2sensors(
unsigned num);
127 vrpn_float64 workspace_min[3], workspace_max[3];
132 virtual int encode_to(
char *buf);
134 virtual int encode_vel_to(
char *buf);
135 virtual int encode_acc_to(
char *buf);
136 virtual int encode_tracker2room_to(
char *buf);
137 virtual int encode_unit2sensor_to(
char *buf);
138 virtual int encode_workspace_to(
char *buf);
141 #ifndef VRPN_CLIENT_ONLY 142 #define VRPN_TRACKER_BUF_SIZE 100 147 const char *port =
"/dev/ttyS1",
long baud = 38400);
161 virtual int get_report(
void) = 0;
164 virtual void send_report(
void);
167 virtual void reset(
void) = 0;
176 #if defined(VRPN_USE_LIBUSB_1_0) 177 struct libusb_device_handle;
178 struct libusb_context;
179 #define VRPN_TRACKER_USB_BUF_SIZE 1000 184 vrpn_uint16 product,
long baud = 115200);
200 virtual int get_report(
void) = 0;
203 virtual void send_report(
void);
206 virtual void reset(
void) = 0;
217 #endif // VRPN_CLIENT_ONLY 228 vrpn_int32 sensors = 1, vrpn_float64 Hz = 1.0);
254 vrpn_int32 sensors = 1);
261 virtual int report_pose(
262 const int sensor,
const struct timeval t,
263 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
265 virtual int report_pose_velocity(
266 const int sensor,
const struct timeval t,
267 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
268 const vrpn_float64 interval,
270 virtual int report_pose_acceleration(
271 const int sensor,
const struct timeval t,
272 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
273 const vrpn_float64 interval,
284 typedef struct _vrpn_TRACKERCB {
285 struct timeval msg_time;
288 vrpn_float64 quat[4];
297 typedef struct _vrpn_TRACKERVELCB {
298 struct timeval msg_time;
301 vrpn_float64 vel_quat[4];
311 typedef struct _vrpn_TRACKERACCCB {
312 struct timeval msg_time;
315 vrpn_float64 acc_quat[4];
326 typedef struct _vrpn_TRACKERTRACKER2ROOMCB {
327 struct timeval msg_time;
328 vrpn_float64 tracker2room[3];
329 vrpn_float64 tracker2room_quat[4];
334 typedef struct _vrpn_TRACKERUNIT2SENSORCB {
335 struct timeval msg_time;
337 vrpn_float64 unit2sensor[3];
338 vrpn_float64 unit2sensor_quat[4];
343 typedef struct _vrpn_TRACKERWORKSPACECB {
344 struct timeval msg_time;
345 vrpn_float64 workspace_min[3];
346 vrpn_float64 workspace_max[3];
388 int request_t2r_xform(
void);
390 int request_u2s_xform(
void);
392 int request_workspace(
void);
395 int set_update_rate(vrpn_float64 samplesPerSecond);
399 int reset_origin(
void);
408 virtual int register_change_handler(
void *userdata,
411 virtual int unregister_change_handler(
void *userdata,
416 virtual int register_change_handler(
void *userdata,
419 virtual int unregister_change_handler(
void *userdata,
424 virtual int register_change_handler(
void *userdata,
427 virtual int unregister_change_handler(
void *userdata,
433 register_change_handler(
void *userdata,
437 unregister_change_handler(
void *userdata,
447 return d_workspacechange_list.register_handler(userdata, handler);
453 return d_workspacechange_list.unregister_handler(userdata, handler);
461 return d_tracker2roomchange_list.register_handler(userdata, handler);
467 return d_tracker2roomchange_list.unregister_handler(userdata, handler);
475 bool ensure_enough_sensor_callbacks(
unsigned num);
const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY
const int vrpn_ALL_SENSORS
vrpn_float64 vrpn_Tracker_Pos[3]
vrpn_int32 workspace_m_id
vrpn_Tracker_Sensor_Callbacks * sensor_callbacks
const int vrpn_TRACKER_REPORT_READY
#define VRPN_TRACKER_USB_BUF_SIZE
vrpn_int32 tracker2room_m_id
vrpn_int32 update_rate_id
virtual int unregister_change_handler(void *userdata, vrpn_TRACKERWORKSPACECHANGEHANDLER handler)
void(VRPN_CALLBACK * vrpn_TRACKERCHANGEHANDLER)(void *userdata, const vrpn_TRACKERCB info)
vrpn_int32 request_workspace_m_id
vrpn_int32 connection_dropped_m_id
virtual int register_change_handler(void *userdata, vrpn_TRACKERWORKSPACECHANGEHANDLER handler)
vrpn_Callback_List< vrpn_TRACKERVELCB > d_velchange
vrpn_int32 reset_origin_m_id
void(VRPN_CALLBACK * vrpn_TRACKERACCCHANGEHANDLER)(void *userdata, const vrpn_TRACKERACCCB info)
Generic connection class not specific to the transport mechanism.
vrpn_RedundantTransmission * d_redundancy
virtual int register_types(void)=0
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail.
const int vrpn_TRACKER_FAIL
void(VRPN_CALLBACK * vrpn_TRACKERTRACKER2ROOMCHANGEHANDLER)(void *userdata, const vrpn_TRACKERTRACKER2ROOMCB info)
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
const int vrpn_TRACKER_RESETTING
vrpn_float64 vrpn_Tracker_Quat[4]
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
vrpn_int32 unit2sensor_m_id
const int vrpn_TRACKER_PARTIAL
vrpn_Callback_List< vrpn_TRACKERACCCB > d_accchange
vrpn_Callback_List< vrpn_TRACKERCB > d_change
struct libusb_device_handle * _device_handle
void(VRPN_CALLBACK * vrpn_TRACKERUNIT2SENSORCHANGEHANDLER)(void *userdata, const vrpn_TRACKERUNIT2SENSORCB info)
This structure is what is passed to a vrpn_Connection message callback.
vrpn_Tracker_Quat * unit2sensor_quat
virtual int unregister_change_handler(void *userdata, vrpn_TRACKERTRACKER2ROOMCHANGEHANDLER handler)
struct libusb_context * _context
const int vrpn_TRACKER_SYNCING
vrpn_Tracker_Pos * unit2sensor
vrpn_int32 request_t2r_m_id
virtual int register_change_handler(void *userdata, vrpn_TRACKERTRACKER2ROOMCHANGEHANDLER handler)
unsigned num_unit2sensors
void(VRPN_CALLBACK * vrpn_TRACKERWORKSPACECHANGEHANDLER)(void *userdata, const vrpn_TRACKERWORKSPACECB info)
const int vrpn_TRACKER_AWAITING_STATION
vrpn_int32 request_u2s_m_id
vrpn_Callback_List< vrpn_TRACKERTRACKER2ROOMCB > d_tracker2roomchange_list
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
void(VRPN_CALLBACK * vrpn_TRACKERVELCHANGEHANDLER)(void *userdata, const vrpn_TRACKERVELCB info)
#define VRPN_TRACKER_BUF_SIZE
vrpn_Callback_List< vrpn_TRACKERWORKSPACECB > d_workspacechange_list
Helper class for vrpn_Connection that automates redundant transmission for unreliable (low-latency) m...
void operator=(const vrpn_Tracker_Sensor_Callbacks &from)
unsigned num_sensor_callbacks
vrpn_Callback_List< vrpn_TRACKERUNIT2SENSORCB > d_unit2sensorchange