15#ifdef VRPN_USE_TRIVISIOCOLIBRI
36# include VRPN_TRIVISIOCOLIBRI_H
40# include VRPN_TRIVISIOCOLIBRI_H
44 int numSensors,
int Hz,
int bufLen) :
48 struct TrivisioSensor* sensorList;
49 try { sensorList =
new TrivisioSensor[numSensors]; }
51 printf(
"vrpn_Tracker_TrivisioColibri::vrpn_Tracker_TrivisioColibri: Out of memory\n");
55 int sensorCount = colibriGetDeviceList(sensorList, numSensors);
59 if (sensorCount < 0) {
69 printf(
"Warning: No Colibri sensors found\n");
76 printf(
"%s:\t %s (FW %d.%d)\n", sensorList[i].dev, sensorList[i].ID,
77 sensorList[i].FWver, sensorList[i].FWsubver);
87 float Ka[9] = { 0.68f, 0.00f, 0.00f,
89 0.00f, 0.00f, 0.68f };
90 float Kg[9] = { 0.68f, 0.00f, 0.00f,
92 0.00f, 0.00f, 0.68f };
98 printf(
"vrpn_Tracker_TrivisioColibri::vrpn_Tracker_TrivisioColibri: Out of memory\n");
105 imu[i] = colibriCreate(bufLen);
107 if (colibriOpen(
imu[i], 0, sensorList[i].dev) < 0) {
108 printf(
"Warning: Could not access Colibri device on %s\n", sensorList[i]);
112 struct ColibriConfig conf;
115 colibriGetConfig(
imu[i], &conf);
118 conf.sensor = (ColibriConfig::Sensor)1023;
120 colibriSetConfig(
imu[i], &conf);
122 colibriSetKa(
imu[i], Ka);
123 colibriSetKaStatus(
imu[i], 1);
124 colibriSetKg(
imu[i], Kg);
125 colibriSetKgStatus(
imu[i], 1);
126 colibriSetJitterStatus(
imu[i], 1);
131 printf(
"Colibri IMU %d\n", i);
132 colibriGetID(
imu,
id);
133 printf(
"\tDevice ID: %s\n",
id);
134 printf(
"\tSensor config: %d\n", conf.sensor);
135 printf(
"\tMagnetic div: %d\n", (
unsigned)conf.magDiv);
136 printf(
"\tFrequency: %d\n", conf.freq);
137 printf(
"\tASCII output: %d\n", conf.ascii);
138 printf(
"\tAutoStart: %d\n", conf.autoStart);
139 printf(
"\tRAW mode: %d\n", conf.raw);
140 printf(
"\tJitter reduction: %d\n", colibriGetJitterStatus(
imu[i]));
147 colibriStart(
imu[i]);
159 colibriClose(
imu[i]);
165 fprintf(stderr,
"vrpn_Tracker_TrivisioColibri::~vrpn_Tracker_TrivisioColibri(): delete failed\n");
184 TrivisioIMUData data;
185 colibriGetData(
imu[i], &data);
210 fprintf(stderr,
"Tracker: cannot write message: tossing\n");
vrpn_Connection * d_connection
Connection that this object talks to.
vrpn_int32 d_sender_id
Sender ID registered with the connection.
void server_mainloop(void)
Handles functions that all servers should provide in their mainloop() (ping/pong, for example) Should...
Generic connection class not specific to the transport mechanism.
virtual int pack_message(vrpn_uint32 len, struct timeval time, vrpn_int32 type, vrpn_int32 sender, const char *buffer, vrpn_uint32 class_of_service)
Pack a message that will be sent the next time mainloop() is called. Turn off the RELIABLE flag if yo...
virtual void send_report()
~vrpn_Tracker_TrivisioColibri()
virtual void get_report()
vrpn_Tracker_TrivisioColibri(const char *name, vrpn_Connection *c, int numSensors=1, int Hz=60, int bufLen=0)
virtual void mainloop()
This function should be called each time through the main loop of the server code....
virtual int encode_to(char *buf)
int register_server_handlers(void)
const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY
#define vrpn_gettimeofday
const int vrpn_TRACKER_FAIL