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,
70 static int VRPN_CALLBACK
72 static int VRPN_CALLBACK
74 static int VRPN_CALLBACK
80 vrpn_int32 position_m_id;
81 vrpn_int32 velocity_m_id;
82 vrpn_int32 accel_m_id;
83 vrpn_int32 tracker2room_m_id;
84 vrpn_int32 unit2sensor_m_id;
85 vrpn_int32 request_t2r_m_id;
86 vrpn_int32 request_u2s_m_id;
87 vrpn_int32 request_workspace_m_id;
88 vrpn_int32 workspace_m_id;
89 vrpn_int32 update_rate_id;
90 vrpn_int32 connection_dropped_m_id;
91 vrpn_int32 reset_origin_m_id;
95 vrpn_float64 pos[3], d_quat[4];
96 vrpn_float64 vel[3], vel_quat[4];
97 vrpn_float64 vel_quat_dt;
98 vrpn_float64 acc[3], acc_quat[4];
99 vrpn_float64 acc_quat_dt;
100 struct timeval timestamp;
101 vrpn_int32 frame_count;
111 struct timeval watchdog_timestamp;
113 vrpn_float64 tracker2room[3], tracker2room_quat[4];
114 vrpn_int32 num_sensors;
118 vrpn_Tracker_Pos *unit2sensor;
119 vrpn_Tracker_Quat *unit2sensor_quat;
120 unsigned num_unit2sensors;
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);
250 vrpn_int32 sensors = 1, vrpn_float64 reportRateHz = 1.0,
251 vrpn_float64 axisX = 0, vrpn_float64 axisY = 0,
252 vrpn_float64 axisZ = 1, vrpn_float64 spinRateHz = 0.5);
256 vrpn_float64 update_rate;
257 vrpn_float64 x, y, z, spin_rate_Hz;
258 struct timeval start;
276 vrpn_int32 sensors = 1);
284 const int sensor,
const struct timeval t,
285 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
286 const vrpn_uint32 class_of_service = vrpn_CONNECTION_LOW_LATENCY);
287 virtual int report_pose_velocity(
288 const int sensor,
const struct timeval t,
289 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
290 const vrpn_float64 interval,
291 const vrpn_uint32 class_of_service = vrpn_CONNECTION_LOW_LATENCY);
292 virtual int report_pose_acceleration(
293 const int sensor,
const struct timeval t,
294 const vrpn_float64 position[3],
const vrpn_float64 quaternion[4],
295 const vrpn_float64 interval,
296 const vrpn_uint32 class_of_service = vrpn_CONNECTION_LOW_LATENCY);
401 int request_t2r_xform(
void);
403 int request_u2s_xform(
void);
405 int request_workspace(
void);
408 int set_update_rate(vrpn_float64 samplesPerSecond);
412 int reset_origin(
void);
421 virtual int register_change_handler(
void *userdata,
422 vrpn_TRACKERCHANGEHANDLER handler,
423 vrpn_int32 sensor = vrpn_ALL_SENSORS);
424 virtual int unregister_change_handler(
void *userdata,
425 vrpn_TRACKERCHANGEHANDLER handler,
426 vrpn_int32 sensor = vrpn_ALL_SENSORS);
429 virtual int register_change_handler(
void *userdata,
430 vrpn_TRACKERVELCHANGEHANDLER handler,
431 vrpn_int32 sensor = vrpn_ALL_SENSORS);
432 virtual int unregister_change_handler(
void *userdata,
433 vrpn_TRACKERVELCHANGEHANDLER handler,
434 vrpn_int32 sensor = vrpn_ALL_SENSORS);
437 virtual int register_change_handler(
void *userdata,
438 vrpn_TRACKERACCCHANGEHANDLER handler,
439 vrpn_int32 sensor = vrpn_ALL_SENSORS);
440 virtual int unregister_change_handler(
void *userdata,
441 vrpn_TRACKERACCCHANGEHANDLER handler,
442 vrpn_int32 sensor = vrpn_ALL_SENSORS);
446 register_change_handler(
void *userdata,
447 vrpn_TRACKERUNIT2SENSORCHANGEHANDLER handler,
448 vrpn_int32 sensor = vrpn_ALL_SENSORS);
450 unregister_change_handler(
void *userdata,
451 vrpn_TRACKERUNIT2SENSORCHANGEHANDLER handler,
452 vrpn_int32 sensor = vrpn_ALL_SENSORS);
457 register_change_handler(
void *userdata,
458 vrpn_TRACKERWORKSPACECHANGEHANDLER handler)
460 return d_workspacechange_list.register_handler(userdata, handler);
463 unregister_change_handler(
void *userdata,
464 vrpn_TRACKERWORKSPACECHANGEHANDLER handler)
466 return d_workspacechange_list.unregister_handler(userdata, handler);
471 register_change_handler(
void *userdata,
472 vrpn_TRACKERTRACKER2ROOMCHANGEHANDLER handler)
474 return d_tracker2roomchange_list.register_handler(userdata, handler);
477 unregister_change_handler(
void *userdata,
478 vrpn_TRACKERTRACKER2ROOMCHANGEHANDLER handler)
480 return d_tracker2roomchange_list.unregister_handler(userdata, handler);
487 unsigned num_sensor_callbacks;
488 bool ensure_enough_sensor_callbacks(
unsigned num);
494 static int VRPN_CALLBACK
496 static int VRPN_CALLBACK
498 static int VRPN_CALLBACK
500 static int VRPN_CALLBACK
502 static int VRPN_CALLBACK
504 static int VRPN_CALLBACK
virtual int report_pose(const int sensor, const struct timeval t, const vrpn_float64 position[3], const vrpn_float64 quaternion[4], const vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY)