00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 #ifndef ARJOYHANDLER_H
00028 #define ARJOYHANDLER_H
00029 
00030 #include "ariaTypedefs.h"
00031 #include "ariaUtil.h"
00032 
00033 #ifdef WIN32
00034 #include <mmsystem.h>
00035 #else // if not win32
00036 #include <stdio.h>
00037 #include <unistd.h>
00038 #include <stdlib.h>
00039 #include <sys/ioctl.h>
00040 #include <fcntl.h>
00041 #endif
00042 #ifdef linux
00043 #include <linux/joystick.h>
00044 #endif
00045 
00046 
00047 
00049 
00069 class ArJoyHandler
00070 {
00071  public:
00073   ArJoyHandler(bool useOSCal = true, bool useOldJoystick = false);
00075   ~ArJoyHandler();
00077   bool init(void);
00079   bool haveJoystick(void) { return myInitialized; }
00081   void getDoubles(double *x, double *y, double *z = NULL);
00083   bool getButton(unsigned int button);
00085   bool haveZAxis(void) { return myHaveZ; }
00086 
00088   void setSpeeds(int x, int y, int z = 0) 
00089     { myTopX = x; myTopY = y; myTopZ = z; }
00091   void getAdjusted(int *x, int *y, int *z = NULL);
00092 
00094   unsigned int getNumAxes(void);
00096   double getAxis(unsigned int axis);
00098   unsigned int getNumButtons(void);
00099 
00101   void setUseOSCal(bool useOSCal);
00103   bool getUseOSCal(void);
00105   void startCal(void);
00107   void endCal(void);
00110   void getUnfiltered(int *x, int *y, int *z = NULL);
00112   void getStats(int *maxX, int *minX, int *maxY, int *minY, 
00113                  int *cenX, int *cenY);
00115   void setStats(int maxX, int minX, int maxY, int minY, 
00116                 int cenX, int cenY);
00118   void getSpeeds(int *x, int *y, int *z);
00119  protected:
00120   
00121   void getData(void);
00122   int myMaxX, myMinX, myMaxY, myMinY, myCenX, myCenY, myTopX, myTopY, myTopZ;
00123   bool myHaveZ;
00124 
00125   std::map<unsigned int, int> myAxes;
00126   std::map<unsigned int, bool> myButtons;
00127 
00128   int myPhysMax;
00129   bool myInitialized;
00130   bool myUseOSCal;
00131   bool myUseOld;
00132   bool myFirstData;
00133   ArTime myLastDataGathered;
00134 #ifdef WIN32
00135   unsigned int myJoyID;
00136   int myLastZ;
00137   JOYINFO myJoyInfo;
00138   JOYCAPS myJoyCaps;
00139 #else // if not win32
00140   int myJoyNumber;
00141   char myJoyNameTemp[512];
00142   ArTime myLastOpenTry;
00143   void getOldData(void);
00144   void getNewData(void);
00145   #ifdef linux 
00146   struct JS_DATA_TYPE myJoyData; 
00147   #else
00148   int myJoyData;
00149   #endif
00150   FILE * myOldJoyDesc;
00151   int myJoyDesc;
00152 #endif // linux
00153 };
00154 
00155 
00156 #endif // ARJOYHANDLER_H
00157