5DT Data Glove plugin 1.0

D:/SVN/Scol/trunk/plugins/glove5DT/fglove/fglove.h

00001 /*--------------------------------------------------------------------------*/
00002 // fglove.h
00003 //
00004 // 5DT Data Glove driver SDK
00005 // Version 2.1
00006 //
00007 // Copyright (C) 2000-2005, 5DT <Fifth Dimension Technologies>
00008 // http://www.5dt.com/
00009 /*--------------------------------------------------------------------------*/
00010 
00011 #pragma once
00012 
00013 /*--------------------------------------------------------------------------*/
00014 
00015 //--8<--- SNIP BEGIN
00016 // Release versions of this driver should have everything between "SNIP BEGIN"
00017 // and "SNIP END" pairs chopped out.
00018 // Also, all FGLOVEAPI should be snipped out.
00019 
00020 #include <string>
00021 
00022 #ifdef WIN32
00023 #define FGLOVEAPI __declspec( dllexport )
00024 #else
00025 #define FGLOVEAPI
00026 #endif
00027 
00028 #ifndef LPVOID
00029 #define LPVOID void*
00030 #endif
00031 
00032 #ifndef SOCKET
00033 #define SOCKET unsigned int
00034 #endif
00035 
00036 #ifndef HANDLE
00037 #define HANDLE void*
00038 #endif
00039 
00040 // Uncomment the debug level you want -
00041 #define USER_DEBUG 0    // level 0 = user debug
00042 #define DEV_DEBUG 1     // level 1 = development debug
00043 
00044 #define DEBUG_LEVEL USER_DEBUG
00045 //#define DEBUG_LEVEL DEV_DEBUG
00046 
00047 #define VENDOR_ID_5DT 0x5d70
00048 
00049 // Glove type / capability defines for DG14 Ultra
00050 #define DG14U_R                 0x00
00051 #define DG14U_L                 0x01
00052 #define DG14U_RW                0x02
00053 #define DG14U_LW                0x03
00054 #define DG14U_RW_SLAVE  0x06
00055 #define DG14U_LW_SLAVE  0x07
00056 #define DG5U_R                  0x10
00057 #define DG5U_L                  0x11
00058 #define DG5U_RW                 0x12
00059 #define DG5U_LW                 0x13
00060 #define DG5U_RW_SLAVE   0x16
00061 #define DG5U_LW_SLAVE   0x17
00062 #define DG14U_INFO              0x80            // Mask for info packet
00063 #define MASK_WIRELESS   0x02
00064 
00065 // The packet size for DG14 Ultra
00066 #define PACKET_SIZE_DG14U       29
00067 // Serial Number length
00068 #define LENGTH_SERIAL_NUMBER 11
00069 // Length of date strings
00070 #define LENGTH_DATE 8
00071 
00072 #ifdef WIN32
00073 // Network defines
00074 #define NETWORK_REQUESTUPDATE "UPDATE_REQUEST"
00075 #define NETWORK_REQUESTGLOVEINFO "GLOVEINFO_REQUEST"
00076 #define NETWORK_ACKNOWLEDGE "ACKNOWLEDGE"
00077 #define NETWORK_REQUESTDISCONNECT "DISCONNECT_REQUEST"
00078 #define NETWORK_CONNECTACCEPT "CONNECTION_ACCEPTED"
00079 #define NETWORK_CONNECTREJECT "CONNECTION_REJECTED"
00080 
00081 enum EfdRecvState
00082 {
00083         STATE_REQUESTNONE,                      // No requests (used only at init)
00084         STATE_REQUESTSETUP,                     // Request for a glove initial setup packet
00085         STATE_REQUESTDATA,                      // A data packet request state.
00086         STATE_REQUESTDISCONNECT,        // Request for disconnect
00087 };
00088 
00089 enum EfdNetworkType
00090 {
00091         FD_NONE,
00092         FD_SERVER,
00093         FD_CLIENT,
00094         FD_DISCONNECTED
00095 };
00096 
00097 // The network packet for the glove
00098 typedef struct
00099 {
00100         unsigned short  usHeader;
00101         unsigned short  usVersion;
00102         unsigned int    uiSequence;
00103         int                             nGloveType;
00104         int                             nGloveHand;
00105         int                             nCurrentGesture;
00106         unsigned char   acSerialNumber[11];
00107         unsigned short  pRaw[18];
00108         unsigned short  pCalibLow[18];
00109         unsigned short  pCalibHigh[18];
00110         unsigned short  usFooter;
00111 } GloveNetPacket;
00112 
00113 // This packet is used to setup the initial parameters for this glove from a glove host.
00114 typedef struct
00115 {
00116         int             nSensors;
00117         float   fSensorMax;
00118         float   fSensorScaled;
00119         float   fUpperThr;
00120         float   fLowerThr;
00121         int             nGestures;
00122         int             nGestIndex;
00123 } GloveSetupPacket;
00124 #endif
00125 
00126 /*--------------------------------------------------------------------------*/
00127 //--8<--- SNIP END
00128 
00129 enum EfdGloveHand
00130 {
00131         FD_HAND_LEFT,   // left-handed glove
00132         FD_HAND_RIGHT   // right-handed glove
00133 };
00134 
00135 enum EfdGloveTypes
00136 {
00137         FD_GLOVENONE,   // no glove
00138         FD_GLOVE5U,             // DG5 Ultra serial
00139         FD_GLOVE5UW,    // DG5 Ultra serial, wireless
00140         FD_GLOVE5U_USB, // DG5 Ultra USB
00141         FD_GLOVE7,      // 7-sensor
00142         FD_GLOVE7W,     // 7-sensor, wireless
00143         FD_GLOVE16,     // 16-sensor
00144         FD_GLOVE16W,    // 16-sensor, wireless
00145         FD_GLOVE14U,    // DG14 Ultra serial
00146         FD_GLOVE14UW,   // DG14 Ultra serial, wireless
00147         FD_GLOVE14U_USB // DG14 Ultra USB
00148 };
00149 
00150 enum EfdSensors
00151 {
00152         FD_THUMBNEAR=0,
00153         FD_THUMBFAR,
00154         FD_THUMBINDEX,
00155         FD_INDEXNEAR,
00156         FD_INDEXFAR,
00157         FD_INDEXMIDDLE,
00158         FD_MIDDLENEAR,
00159         FD_MIDDLEFAR,
00160         FD_MIDDLERING,
00161         FD_RINGNEAR,
00162         FD_RINGFAR,
00163         FD_RINGLITTLE,
00164         FD_LITTLENEAR,
00165         FD_LITTLEFAR,
00166         FD_THUMBPALM,
00167         FD_WRISTBEND,
00168         FD_PITCH,
00169         FD_ROLL
00170 };
00171 
00172 /*--------------------------------------------------------------------------*/
00173 
00174 typedef struct
00175 {
00176         // The contents of this struct are platform-dependent and subject to
00177         // change. You should not manipulate the contents of this struct directly.
00178 
00179         /*New stuff*/
00180 //      HWND                    m_hWnd;
00181 //      HDEVNOTIFY              m_hDevNotify;
00182 
00183 } fdGlove;
00184 
00185 /*--------------------------------------------------------------------------*/
00186 
00187 FGLOVEAPI fdGlove *fdOpen(char *pPort, bool bOnlyAllowSingleConnection = false);        
00188 FGLOVEAPI int   fdClose(fdGlove *pFG);
00189 FGLOVEAPI int   fdGetGloveHand(fdGlove *pFG);
00190 FGLOVEAPI int   fdGetGloveType(fdGlove *pFG);
00191 FGLOVEAPI int   fdGetNumSensors(fdGlove *pFG);
00192 FGLOVEAPI void  fdGetSensorRawAll(fdGlove *pFG, unsigned short *pData);
00193 FGLOVEAPI unsigned short fdGetSensorRaw(fdGlove *pFG, int nSensor);
00194 FGLOVEAPI void  fdSetSensorRawAll(fdGlove *pFG, unsigned short *pData);
00195 FGLOVEAPI void  fdSetSensorRaw(fdGlove *pFG, int nSensor, unsigned short nRaw);
00196 FGLOVEAPI void  fdGetSensorScaledAll(fdGlove *pFG, float *pData);
00197 FGLOVEAPI float fdGetSensorScaled(fdGlove *pFG, int nSensor);
00198 FGLOVEAPI int   fdGetNumGestures(fdGlove *pFG);
00199 FGLOVEAPI int   fdGetGesture(fdGlove *pFG);
00200 FGLOVEAPI void  fdGetCalibrationAll(fdGlove *pFG, unsigned short *pUpper, unsigned short *pLower);
00201 FGLOVEAPI void  fdGetCalibration(fdGlove *pFG, int nSensor, unsigned short *pUpper, unsigned short *pLower);
00202 FGLOVEAPI void  fdSetCalibrationAll(fdGlove *pFG, unsigned short *pUpper, unsigned short *pLower);
00203 FGLOVEAPI void  fdSetCalibration(fdGlove *pFG, int nSensor, unsigned short nUpper, unsigned short nLower);
00204 FGLOVEAPI void  fdResetCalibration(fdGlove *pFG, int nSensor);
00205 FGLOVEAPI void  fdResetCalibration(fdGlove *pFG);
00206 FGLOVEAPI void  fdGetSensorMaxAll(fdGlove *pFG, float *pMax);
00207 FGLOVEAPI float fdGetSensorMax(fdGlove *pFG, int nSensor);
00208 FGLOVEAPI void  fdSetSensorMaxAll(fdGlove *pFG, float *pMax);
00209 FGLOVEAPI void  fdSetSensorMax(fdGlove *pFG, int nSensor, float fMax);
00210 FGLOVEAPI void  fdGetThresholdAll(fdGlove *pFG, float *pUpper, float *pLower);
00211 FGLOVEAPI void  fdGetThreshold(fdGlove *pFG, int nSensor, float *pUpper, float *pLower);
00212 FGLOVEAPI void  fdSetThresholdAll(fdGlove *pFG, float *pUpper, float *pLower);
00213 FGLOVEAPI void  fdSetThreshold(fdGlove *pFG, int nSensor, float fUpper, float fLower);
00214 FGLOVEAPI void  fdGetGloveInfo(fdGlove *pFG, unsigned char *pData);
00215 FGLOVEAPI void  fdGetDriverInfo(fdGlove *pFG, unsigned char *pData);
00216 FGLOVEAPI void  fdSetCallback(fdGlove *pFG,void *pFunc, LPVOID param);
00217 FGLOVEAPI void  fdRemoveCallback(fdGlove *pFG);
00218 FGLOVEAPI int   fdGetPacketRate(fdGlove *pFG);
00219 FGLOVEAPI bool  fdNewData(fdGlove *pFG);
00220 FGLOVEAPI int   fdGetFWVersionMajor(fdGlove *pFG);
00221 FGLOVEAPI int   fdGetFWVersionMinor(fdGlove *pFG);
00222 FGLOVEAPI bool  fdGetAutoCalibrate(fdGlove *pFG);
00223 FGLOVEAPI bool  fdSetAutoCalibrate(fdGlove *pFG, bool bAutoCalibrate);
00224 FGLOVEAPI bool  fdSaveCalibration(fdGlove *pFG, const char *pFileName);
00225 FGLOVEAPI bool  fdLoadCalibration(fdGlove *pFG, const char *pFileName);
00226 FGLOVEAPI int   fdScanUSB(unsigned short *aPID, int &nNumMax);
00227 FGLOVEAPI int   fdScanUSB();
00228 FGLOVEAPI bool fdGetSerialNumber(fdGlove *pFG, char *pData);
00229