/* * dg2lib.h - header file for the DG2 library libdg2.a * * copyright 1988-92 VPL Research Inc. * */ /******** error returns from the library */ extern int DG2_error; /* for error information */ extern float DG2_lib_version; /* for the library version */ extern int DG2_box_version; /* for the firmware version */ extern int DG2_glove_sensors; /* for the number of sensors in the glove */ /* defines for DG2_error values */ #define DG2_AOK 0 #define DG2_SETTINGS_FILE -1 #define DG2_SERIAL_OPEN -2 #define DG2_SERIAL_PORT -4 #define DG2_RESET -6 #define DG2_PARAMETER -7 #define DG2_FILE_IO -8 #define DG2_CALIBRATION_FILE -9 #define DG2_GESTURE_FILE -10 #define DG2_CAL_GEST_FILES -11 /* defines for DG2_response() */ #define DATAGLOVE 1 #define POLHEMUS 2 #define GESTURE 8 #define DG2_60Hz 1 #define DG2_30Hz 2 #define DG2_oneShot 3 /* defines for DG2_DataGlove_select() */ #define THUMB_INNER 0x1 #define THUMB_OUTER 0x2 #define INDEX_INNER 0x4 #define INDEX_OUTER 0x8 #define MIDDLE_INNER 0x10 #define MIDDLE_OUTER 0x20 #define RING_INNER 0x40 #define RING_OUTER 0x80 #define LITTLE_INNER 0x100 #define LITTLE_OUTER 0x200 #define NORMAL_JOINTS 0x3ff #define FLEX11 0x400 #define FLEX12 0x800 #define FLEX13 0x1000 #define FLEX14 0x2000 #define FLEX15 0x4000 #define FLEX16 0x8000 /* defines for DG2_DataGlove_trans_select() */ #define DG2_TRANSLATED 5 #define DG2_RAW 6 /* defines for DG2_Polhemus_units() */ #define POL_RAW 0 #define POL_INCHES 1 #define POL_CM 2 /* defines for DG2_user_IRQ() */ #define IRQ_ON 1 #define IRQ_OFF 2 /* defines for DG2_get_data() */ #define DG2_report 1 #define DG2_userport 2 /* dg2 command codes*/ #define LEADINGBYTE 0x24 #define RPT60 0x41 /* repeat 60 */ #define RPT30 0x42 /* repeat 30 */ #define ONESHOT 0x43 /* one shot */ #define SYSID 0x44 /* system ID */ #define EPTBUF 0x45 /* empty buffer */ #define USRRD 0x46 /* user read */ #define USRIRQ 0x47 /* user IRQ */ #define QBRT 0x48 /* query bright */ #define CDRST 0x49 /* cold reset */ #define WMRST 0x4A /* warm reset */ #define MEMALLO 0x4B /* memory alloc */ #define DLTSND 0x4C /* delta send */ #define SETBRT 0x4D /* set bright */ #define SETDIM 0x4E /* set dim */ #define FILBUF 0x4F /* fill buffer */ #define LDTBL 0x50 /* load table */ #define LDPOL 0x51 /* send up to 63 bytes to Polhemus */ #define ANGLE 0x52 /* angles */ #define NSNSR 0x53 /* num sensors */ #define SETFB 0x54 /* set feedback */ #define QCUT 0X55 /* query cutoff*/ #define SETCUT 0X56 /* set cutoff */ #define FLXVAL 0X57 /* raw flex values */ #define USRWR 0X58 /* user write */ #define JNTMAP 0X59 /* joint map */ #define ERRMESS 0XFF /* error in command input */ #define TIMOUT 0XFE /* timed out during command */ /* response structure */ typedef struct DG2_data { char gesture; double location[3]; /* X,Y,Z */ double orientation[3]; /* yaw, pitch, roll */ short flex[16]; char gesture_name[20]; short reserved[16]; /* user port data: */ char user_nibble; char user_analog[3]; } DG2_data; /**************function prototypes*************/ /*NOTE: all DG2_ functions return -1 on error*/ extern int DG2_open(char *portname, int baud); extern int DG2_close(int filedes); extern int DG2_direct(int filedes,char *message,int count); extern int DG2_response(int filedes,int devices,int rate); extern int DG2_DataGlove_select(int filedes,int flex_sensors); extern int DG2_DataGlove_translation(int filedes,int flex_sensors,char table[16][256]); extern int DG2_DataGlove_trans_select(int filedes,int status); extern int DG2_DataGlove_LED_set(int filedes,int LED); extern int DG2_DataGlove_LED_read(int filedes); extern int DG2_Polhemus_units(int filedes,char type); extern int DG2_Polhemus_direct(int filedes,char *message,int count); extern int DG2_user_write(int filedes,int nibble); extern int DG2_user_IRQ(int filedes,int mode); extern int DG2_user_read(int filedes,DG2_data *data); extern int DG2_get_data(int filedes,DG2_data *data); extern int DG2_gesture_load(int filedes,char *calib,char *gest); /*use this with caution since it does not return until it gets a correct *response from the DG2 */ extern int DG2U_get_reply(int filedes,char *buff,int response,int size);