2 * dg2lib.h - header file for the DG2 library libdg2.a
4 * copyright 1988-92 VPL Research Inc.
10 /******** error returns from the library */
12 extern int DG2_error; /* for error information */
13 extern float DG2_lib_version; /* for the library version */
14 extern int DG2_box_version; /* for the firmware version */
15 extern int DG2_glove_sensors; /* for the number of sensors in the glove */
17 /* defines for DG2_error values */
20 #define DG2_SETTINGS_FILE -1
21 #define DG2_SERIAL_OPEN -2
22 #define DG2_SERIAL_PORT -4
24 #define DG2_PARAMETER -7
25 #define DG2_FILE_IO -8
26 #define DG2_CALIBRATION_FILE -9
27 #define DG2_GESTURE_FILE -10
28 #define DG2_CAL_GEST_FILES -11
29 /* defines for DG2_response() */
39 /* defines for DG2_DataGlove_select() */
41 #define THUMB_INNER 0x1
42 #define THUMB_OUTER 0x2
43 #define INDEX_INNER 0x4
44 #define INDEX_OUTER 0x8
45 #define MIDDLE_INNER 0x10
46 #define MIDDLE_OUTER 0x20
47 #define RING_INNER 0x40
48 #define RING_OUTER 0x80
49 #define LITTLE_INNER 0x100
50 #define LITTLE_OUTER 0x200
51 #define NORMAL_JOINTS 0x3ff
60 /* defines for DG2_DataGlove_trans_select() */
62 #define DG2_TRANSLATED 5
65 /* defines for DG2_Polhemus_units() */
71 /* defines for DG2_user_IRQ() */
77 /* defines for DG2_get_data() */
80 #define DG2_userport 2
83 /* dg2 command codes*/
84 #define LEADINGBYTE 0x24
85 #define RPT60 0x41 /* repeat 60 */
86 #define RPT30 0x42 /* repeat 30 */
87 #define ONESHOT 0x43 /* one shot */
88 #define SYSID 0x44 /* system ID */
89 #define EPTBUF 0x45 /* empty buffer */
90 #define USRRD 0x46 /* user read */
91 #define USRIRQ 0x47 /* user IRQ */
92 #define QBRT 0x48 /* query bright */
93 #define CDRST 0x49 /* cold reset */
94 #define WMRST 0x4A /* warm reset */
95 #define MEMALLO 0x4B /* memory alloc */
96 #define DLTSND 0x4C /* delta send */
97 #define SETBRT 0x4D /* set bright */
98 #define SETDIM 0x4E /* set dim */
99 #define FILBUF 0x4F /* fill buffer */
100 #define LDTBL 0x50 /* load table */
101 #define LDPOL 0x51 /* send up to 63 bytes to Polhemus */
102 #define ANGLE 0x52 /* angles */
103 #define NSNSR 0x53 /* num sensors */
104 #define SETFB 0x54 /* set feedback */
105 #define QCUT 0X55 /* query cutoff*/
106 #define SETCUT 0X56 /* set cutoff */
107 #define FLXVAL 0X57 /* raw flex values */
108 #define USRWR 0X58 /* user write */
109 #define JNTMAP 0X59 /* joint map */
110 #define ERRMESS 0XFF /* error in command input */
111 #define TIMOUT 0XFE /* timed out during command */
113 /* response structure */
115 typedef struct DG2_data {
117 double location[3]; /* X,Y,Z */
118 double orientation[3]; /* yaw, pitch, roll */
120 char gesture_name[20];
122 /* user port data: */
128 /**************function prototypes*************/
129 /*NOTE: all DG2_ functions return -1 on error*/
131 extern int DG2_open(char *portname, int baud);
132 extern int DG2_close(int filedes);
133 extern int DG2_direct(int filedes,char *message,int count);
134 extern int DG2_response(int filedes,int devices,int rate);
135 extern int DG2_DataGlove_select(int filedes,int flex_sensors);
136 extern int DG2_DataGlove_translation(int filedes,int flex_sensors,char table[16][256]);
137 extern int DG2_DataGlove_trans_select(int filedes,int status);
138 extern int DG2_DataGlove_LED_set(int filedes,int LED);
139 extern int DG2_DataGlove_LED_read(int filedes);
140 extern int DG2_Polhemus_units(int filedes,char type);
141 extern int DG2_Polhemus_direct(int filedes,char *message,int count);
142 extern int DG2_user_write(int filedes,int nibble);
143 extern int DG2_user_IRQ(int filedes,int mode);
144 extern int DG2_user_read(int filedes,DG2_data *data);
145 extern int DG2_get_data(int filedes,DG2_data *data);
146 extern int DG2_gesture_load(int filedes,char *calib,char *gest);
148 /*use this with caution since it does not return until it gets a correct
149 *response from the DG2
151 extern int DG2U_get_reply(int filedes,char *buff,int response,int size);