43#define STATUS_MSG_SECS 600
51 char *slavePortArray[],
52 bool invertQuaternion) :
56 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel: must ask for pos num "
61 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel: starting up ...");
63 if (!slavePortArray) {
64 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel: null slave port array.");
70 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel: initing slave %d ...", i);
71 if (!slavePortArray[i]) {
72 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel:slave %d: null port array"
77 sprintf(rgch,
"flockSlave%d", i);
96 fprintf(stderr,
"vrpn_Tracker_Flock_Parallel::~vrpn_Tracker_Flock_Parallel(): delete failed\n");
166 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel: problems resetting ... check that: a) all cables are attached, b) all units have FLY/STANDBY switches in FLY mode, and c) no receiver is laying too close to the transmitter. When done checking, power cycle the flock.\nWill attempt to reset in 15 seconds.\n");
171 "\nvrpn_Tracker_Flock_Parallel: tracker failed, trying to reset ...");
198 char *port,
long baud,
205 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: starting up ...",
218 unsigned char rgch [2];
224 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: shutting down ...",
d_sensor);
230 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: "
231 "failed writing sleep cmd to tracker",
d_sensor);
237 fprintf(stderr,
" done.\n");
242fprintf(stderr,"."); \
243if (vrpn_write_characters(serial_fd, (const unsigned char *) &chPoint, 1 )!=1) {\
244 fprintf(stderr,"\nvrpn_Tracker_Flock_Parallel_Slave %d: failed writing set mode cmds to tracker", d_sensor);\
245 status = vrpn_TRACKER_FAIL;\
248vrpn_gettimeofday(×tamp, NULL);\
272 unsigned char reset[3];
273 reset[resetLen++]=
'B';
277 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: "
278 "failed writing poll cmd to tracker",
d_sensor);
299 reset[resetLen++] =
'@';
302 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: "
303 "failed writing set mode cmds to tracker",
d_sensor);
314 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: "
315 "done with reset ... running.\n",
d_sensor);
325#define MAX_TIME_INTERVAL (VRPN_FLOCK_MAX_SENSORS*1000000)
348 struct timeval current_time;
351 fprintf(stderr,
"Tracker failed to read... current_time=%ld:%ld, timestamp=%ld:%ld\n",
352 current_time.tv_sec,
static_cast<long>(current_time.tv_usec),
365 fprintf(stderr,
"\nvrpn_Tracker_Flock_Parallel_Slave %d: tracker "
366 "failed, trying to reset ...",
d_sensor);
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...
int send_text_message(const char *msg, struct timeval timestamp, vrpn_TEXT_SEVERITY type=vrpn_TEXT_NORMAL, vrpn_uint32 level=0)
Sends a NULL-terminated text message from the device d_sender_id.
Generic connection class not specific to the transport mechanism.
virtual ~vrpn_Tracker_Flock_Parallel_Slave()
virtual void reset()
Reset the tracker.
virtual void mainloop()
Uses the get_report, send_report, and reset routines to implement a server.
vrpn_Tracker_Flock_Parallel_Slave(char *name, vrpn_Connection *c, char *port, long baud, vrpn_int32 vrpnMasterID, int iSensorID)
virtual int get_report(void)
Gets a report if one is available, returns 0 if not, 1 if complete report.
virtual void reset()
Reset the tracker.
vrpn_Tracker_Flock_Parallel(char *name, vrpn_Connection *c, int cSensors, char *port, long baud, char *slavePortArray[], bool invertQuaternion=false)
virtual void mainloop()
Uses the get_report, send_report, and reset routines to implement a server.
virtual ~vrpn_Tracker_Flock_Parallel()
vrpn_Tracker_Flock_Parallel_Slave * rgSlaves[VRPN_FLOCK_MAX_SENSORS]
virtual void reset()
Reset the tracker.
virtual int get_report(void)
Gets a report if one is available, returns 0 if not, 1 if complete report.
virtual void send_report(void)
char portname[VRPN_TRACKER_BUF_SIZE]
#define MAX_TIME_INTERVAL
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
int vrpn_write_characters(int comm, const unsigned char *buffer, size_t bytes)
Write the buffer to the serial port.
int vrpn_close_commport(int comm)
int vrpn_flush_input_buffer(int comm)
Throw out any characters within the input buffer.
int vrpn_drain_output_buffer(int comm)
Wait until all of the characters in the output buffer are sent, then return.
int vrpn_flush_output_buffer(int comm)
Throw out any characters (do not send) within the output buffer.
int vrpn_open_commport(const char *portname, long baud, int charsize, vrpn_SER_PARITY parity, bool rts_flow)
Open a serial port, given its name and baud rate.
vrpn_Serial: Pulls all the serial port routines into one file to make porting to new operating system...
unsigned long vrpn_TimevalDuration(struct timeval endT, struct timeval startT)
Return number of microseconds between startT and endT.
void vrpn_SleepMsecs(double dMilliSecs)
#define vrpn_gettimeofday
const int vrpn_TRACKER_FAIL
const int vrpn_TRACKER_RESETTING
const int vrpn_TRACKER_SYNCING
const int vrpn_TRACKER_PARTIAL