2 #ifndef VRPN_TRACKER_PDI_H 3 #define VRPN_TRACKER_PDI_H 20 #define VRPN_PDI_BUFFER_SIZE 0x1FA400 // 30 seconds of xyzaer+fc 8 sensors at 240 hz 22 #define VRPN_G4_HUB_NAME_SIZE 64 23 #define VRPN_G4_POWERTRAK_BUTTON_COUNT 4 32 class VRPN_API vrpn_Tracker_G4_HubMap_El
35 vrpn_Tracker_G4_HubMap_El(
int nHub )
36 : pBtnSrv(NULL), nHubID(nHub), pNext(NULL), nBtnCount(0)
38 memset(BtnName, 0,
sizeof(BtnName));
40 ~vrpn_Tracker_G4_HubMap_El()
46 void ButtonName(
char * NewName )
52 strncpy(BtnName, NewName, VRPN_G4_HUB_NAME_SIZE);
56 void ButtonCount(
int n )
62 vrpn_Tracker_G4_HubMap_El * Next()
65 void SetNext( vrpn_Tracker_G4_HubMap_El *pn)
68 friend class vrpn_Tracker_G4_HubMap;
69 friend class vrpn_Tracker_G4;
74 vrpn_Tracker_G4_HubMap_El * pNext;
75 char BtnName[VRPN_G4_HUB_NAME_SIZE];
79 typedef vrpn_Tracker_G4_HubMap_El HUBMAP_ENTRY;
81 class VRPN_API vrpn_Tracker_G4_HubMap
84 vrpn_Tracker_G4_HubMap():p_hub_map(NULL){};
86 ~vrpn_Tracker_G4_HubMap()
88 while (p_hub_map != NULL)
90 HUBMAP_ENTRY *next = p_hub_map->Next();
98 HUBMAP_ENTRY *next = p_hub_map;
99 p_hub_map =
new HUBMAP_ENTRY( nHub );
100 p_hub_map->SetNext(next);
103 HUBMAP_ENTRY * Find(
int nHub )
105 HUBMAP_ENTRY * pH = p_hub_map;
106 while (pH && (pH->nHubID != nHub))
111 void ButtonInfo(
int nHub,
char * BtnName,
int nBtnCount )
113 HUBMAP_ENTRY * pHub = Find( nHub );
116 pHub->ButtonName( BtnName );
117 pHub->ButtonCount( nBtnCount );
121 vrpn_Tracker_G4_HubMap_El * Begin()
126 HUBMAP_ENTRY * p_hub_map;
131 vrpn_Tracker_G4 (
const char *name,
vrpn_Connection *cn,
const char *filepath,
132 vrpn_float64 Hz = 10.0,
const char *rcmd = NULL, vrpn_Tracker_G4_HubMap * pHMap=NULL);
134 ~vrpn_Tracker_G4(
void);
137 BOOL Initialize ( VOID );
138 BOOL InitDigIOBtns(
void );
139 BOOL Connect ( VOID );
140 VOID Disconnect ( VOID );
141 BOOL SetupDevice ( VOID );
142 VOID UpdateStationMap ( VOID );
143 BOOL DisplaySingle( timeval ct );
144 BOOL StartCont ( VOID );
145 BOOL StopCont ( VOID );
146 BOOL DisplayCont ( timeval ct );
147 void sendCommand(
char * scmd);
148 void DoBoresightCmd(
char *scmd);
149 void DoFilterCmd(
char *scmd);
150 void SetFilterPreset(
int nLev, CPDIfilter & f,
char **pLevName );
151 void DoFORCmd(
char *scmd );
152 void DoIncrementCmd(
char *scmd );
153 void DoTipOffsetCmd(
char *scmd );
155 void ParseG4NativeFrame( PBYTE pBuf, DWORD dwSize, timeval current_time );
158 vrpn_float64 update_rate;
159 vrpn_float64 pos[3], quat[4];
168 ePDIoriUnits OriUnits;
169 ePDIposUnits PosUnits;
170 vrpn_Tracker_G4_HubMap * m_pHMap;
174 DWORD dwOverflowCount;
175 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
181 vrpn_float64 Hz = 10,
const char * rcmd = NULL,
unsigned int nStylusMap = 0);
183 ~vrpn_Tracker_FastrakPDI(
void);
186 BOOL Initialize ( VOID );
187 BOOL InitStylusBtns();
188 BOOL Connect ( VOID );
189 VOID Disconnect ( VOID );
190 BOOL SetupDevice ( VOID );
191 VOID UpdateStationMap ( VOID );
192 VOID DisplaySingle ( timeval current_time );
193 BOOL StartCont ( VOID );
194 BOOL StopCont ( VOID );
195 BOOL DisplayCont ( timeval current_time );
196 VOID SendCommand(
char *scmd );
198 VOID ParseFastrakFrame ( PBYTE pBuf, DWORD dwSize, timeval current_time );
201 vrpn_float64 update_rate;
202 vrpn_float64 pos[3], d_quat[4];
220 DWORD dwOverflowCount;
221 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
227 vrpn_float64 Hz = 10,
const char * rcmd = NULL,
unsigned int nStylusMap = 0);
229 ~vrpn_Tracker_LibertyPDI(
void);
232 BOOL Initialize ( VOID );
233 BOOL InitStylusBtns();
234 BOOL Connect ( VOID );
235 VOID Disconnect ( VOID );
236 BOOL SetupDevice ( VOID );
237 VOID UpdateStationMap ( VOID );
238 VOID DisplaySingle ( timeval current_time );
239 BOOL StartCont ( VOID );
240 BOOL StopCont ( VOID );
241 BOOL DisplayCont ( timeval current_time );
242 VOID SendCommand(
char *scmd );
244 VOID ParseLibertyFrame ( PBYTE pBuf, DWORD dwSize, timeval current_time );
247 vrpn_float64 update_rate;
248 vrpn_float64 pos[3], d_quat[4];
267 DWORD dwOverflowCount;
268 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
Generic connection class not specific to the transport mechanism.
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
virtual int encode_to(char *buf)