2#ifndef VRPN_TRACKER_PDI_H
3#define VRPN_TRACKER_PDI_H
6#include "vrpn_Configure.h"
7#include "vrpn_Tracker.h"
8#include "vrpn_Button.h"
20#define VRPN_PDI_BUFFER_SIZE 0x1FA400
22#define VRPN_G4_HUB_NAME_SIZE 64
23#define VRPN_G4_POWERTRAK_BUTTON_COUNT 4
32class 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 fprintf(stderr,
"vrpn_Tracker_G4_HubMap_El::~vrpn_Tracker_G4_HubMap_El(): delete failed\n");
52 void ButtonName(
char * NewName )
56 vrpn_strcpy(BtnName, NewName);
60 void ButtonCount(
int n )
66 vrpn_Tracker_G4_HubMap_El * Next()
69 void SetNext( vrpn_Tracker_G4_HubMap_El *pn)
72 friend class vrpn_Tracker_G4_HubMap;
73 friend class vrpn_Tracker_G4;
78 vrpn_Tracker_G4_HubMap_El * pNext;
79 char BtnName[VRPN_G4_HUB_NAME_SIZE];
83typedef vrpn_Tracker_G4_HubMap_El HUBMAP_ENTRY;
85class VRPN_API vrpn_Tracker_G4_HubMap
88 vrpn_Tracker_G4_HubMap():p_hub_map(NULL){};
90 ~vrpn_Tracker_G4_HubMap()
92 while (p_hub_map != NULL)
94 HUBMAP_ENTRY *next = p_hub_map->Next();
98 fprintf(stderr,
"vrpn_Tracker_G4_HubMap::~vrpn_Tracker_G4_HubMap(): delete failed\n");
107 HUBMAP_ENTRY *next = p_hub_map;
108 p_hub_map =
new HUBMAP_ENTRY(nHub);
109 p_hub_map->SetNext(next);
112 HUBMAP_ENTRY * Find(
int nHub )
114 HUBMAP_ENTRY * pH = p_hub_map;
115 while (pH && (pH->nHubID != nHub))
120 void ButtonInfo(
int nHub,
char * BtnName,
int nBtnCount )
122 HUBMAP_ENTRY * pHub = Find( nHub );
125 pHub->ButtonName( BtnName );
126 pHub->ButtonCount( nBtnCount );
130 vrpn_Tracker_G4_HubMap_El * Begin()
135 HUBMAP_ENTRY * p_hub_map;
140 vrpn_Tracker_G4 (
const char *name,
vrpn_Connection *cn,
const char *filepath,
141 vrpn_float64 Hz = 10.0,
const char *rcmd = NULL, vrpn_Tracker_G4_HubMap * pHMap=NULL);
143 ~vrpn_Tracker_G4(
void);
144 virtual void mainloop();
145 int encode_to(
char *buf);
146 BOOL Initialize ( VOID );
147 BOOL InitDigIOBtns(
void );
148 BOOL Connect ( VOID );
149 VOID Disconnect ( VOID );
150 BOOL SetupDevice ( VOID );
151 VOID UpdateStationMap ( VOID );
152 BOOL DisplaySingle( timeval ct );
153 BOOL StartCont ( VOID );
154 BOOL StopCont ( VOID );
155 BOOL DisplayCont ( timeval ct );
156 void sendCommand(
char * scmd);
157 void DoBoresightCmd(
char *scmd);
158 void DoFilterCmd(
char *scmd);
159 void SetFilterPreset(
int nLev, CPDIfilter & f,
char **pLevName );
160 void DoFORCmd(
char *scmd );
161 void DoIncrementCmd(
char *scmd );
162 void DoTipOffsetCmd(
char *scmd );
164 void ParseG4NativeFrame( PBYTE pBuf, DWORD dwSize, timeval current_time );
167 vrpn_float64 update_rate;
168 vrpn_float64 pos[3], quat[4];
177 ePDIoriUnits OriUnits;
178 ePDIposUnits PosUnits;
179 vrpn_Tracker_G4_HubMap * m_pHMap;
183 DWORD dwOverflowCount;
184 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
189class VRPN_API vrpn_Tracker_FastrakPDI:
public vrpn_Tracker {
192 vrpn_float64 Hz = 10,
const char * rcmd = NULL,
unsigned int nStylusMap = 0);
194 ~vrpn_Tracker_FastrakPDI(
void);
195 virtual void mainloop();
196 int encode_to(
char *buf);
197 BOOL Initialize ( VOID );
198 BOOL InitStylusBtns();
199 BOOL Connect ( VOID );
200 VOID Disconnect ( VOID );
201 BOOL SetupDevice ( VOID );
202 VOID UpdateStationMap ( VOID );
203 VOID DisplaySingle ( timeval current_time );
204 BOOL StartCont ( VOID );
205 BOOL StopCont ( VOID );
206 BOOL DisplayCont ( timeval current_time );
207 VOID SendCommand(
char *scmd );
209 VOID ParseFastrakFrame ( PBYTE pBuf, DWORD dwSize, timeval current_time );
212 vrpn_float64 update_rate;
213 vrpn_float64 pos[3], d_quat[4];
231 DWORD dwOverflowCount;
232 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
237class VRPN_API vrpn_Tracker_LibertyPDI:
public vrpn_Tracker {
240 vrpn_float64 Hz = 10,
const char * rcmd = NULL,
unsigned int nStylusMap = 0);
242 ~vrpn_Tracker_LibertyPDI(
void);
243 virtual void mainloop();
244 int encode_to(
char *buf);
245 BOOL Initialize ( VOID );
246 BOOL InitStylusBtns();
247 BOOL Connect ( VOID );
248 VOID Disconnect ( VOID );
249 BOOL SetupDevice ( VOID );
250 VOID UpdateStationMap ( VOID );
251 VOID DisplaySingle ( timeval current_time );
252 BOOL StartCont ( VOID );
253 BOOL StopCont ( VOID );
254 BOOL DisplayCont ( timeval current_time );
255 VOID SendCommand(
char *scmd );
257 VOID ParseLibertyFrame ( PBYTE pBuf, DWORD dwSize, timeval current_time );
260 vrpn_float64 update_rate;
261 vrpn_float64 pos[3], d_quat[4];
280 DWORD dwOverflowCount;
281 BYTE pMotionBuf[VRPN_PDI_BUFFER_SIZE];
Generic connection class not specific to the transport mechanism.
定义 vrpn_Connection.h:562