qafJoystickSystem.h

Go to the documentation of this file.
00001 /* 
00002 ** Qaf Framework 1.2
00003 ** June 2006
00004 ** 
00005 ** Pedro Luchini de Moraes, Public Domain - Free Lunch Code
00006 */
00007 
00012 #ifndef QAF_JOYSTICKSYSTEM_H
00013 #define QAF_JOYSTICKSYSTEM_H
00014 
00015 #include "qafutil/qafContainer.h"
00016 
00017 #define DIRECTINPUT_VERSION 0x0800
00018 #include <dinput.h>
00019 
00020 
00021 namespace qaf {
00022     
00028     enum JoystickObject {
00029         QAF_JOY_NONE = 0,         
00030         QAF_JOY_X_AXIS,          
00031         QAF_JOY_Y_AXIS,          
00032         QAF_JOY_Z_AXIS,          
00033         QAF_JOY_X_AXIS_ROTATION, 
00034         QAF_JOY_Y_AXIS_ROTATION,
00035         QAF_JOY_Z_AXIS_ROTATION,
00036         QAF_JOY_SLIDER_0,
00037         QAF_JOY_SLIDER_1,         
00038         QAF_JOY_POV_0,           
00039         QAF_JOY_POV_1,
00040         QAF_JOY_POV_2,
00041         QAF_JOY_POV_3,            
00042         QAF_JOY_BUTTON_0,        
00043         QAF_JOY_BUTTON_1,
00044         QAF_JOY_BUTTON_2,
00045         QAF_JOY_BUTTON_3,
00046         QAF_JOY_BUTTON_4,
00047         QAF_JOY_BUTTON_5,
00048         QAF_JOY_BUTTON_6,
00049         QAF_JOY_BUTTON_7,
00050         QAF_JOY_BUTTON_8,
00051         QAF_JOY_BUTTON_9,
00052         QAF_JOY_BUTTON_10,
00053         QAF_JOY_BUTTON_11,
00054         QAF_JOY_BUTTON_12,
00055         QAF_JOY_BUTTON_13,
00056         QAF_JOY_BUTTON_14,
00057         QAF_JOY_BUTTON_15,
00058         QAF_JOY_BUTTON_16,
00059         QAF_JOY_BUTTON_17,
00060         QAF_JOY_BUTTON_18,
00061         QAF_JOY_BUTTON_19,
00062         QAF_JOY_BUTTON_20,
00063         QAF_JOY_BUTTON_21,
00064         QAF_JOY_BUTTON_22,
00065         QAF_JOY_BUTTON_23,
00066         QAF_JOY_BUTTON_24,
00067         QAF_JOY_BUTTON_25,
00068         QAF_JOY_BUTTON_26,
00069         QAF_JOY_BUTTON_27,
00070         QAF_JOY_BUTTON_28,
00071         QAF_JOY_BUTTON_29,
00072         QAF_JOY_BUTTON_30,
00073         QAF_JOY_BUTTON_31,
00074         QAF_JOY_BUTTON_32,
00075         QAF_JOY_BUTTON_33,
00076         QAF_JOY_BUTTON_34,
00077         QAF_JOY_BUTTON_35,
00078         QAF_JOY_BUTTON_36,
00079         QAF_JOY_BUTTON_37,
00080         QAF_JOY_BUTTON_38,
00081         QAF_JOY_BUTTON_39,
00082         QAF_JOY_BUTTON_40,
00083         QAF_JOY_BUTTON_41,
00084         QAF_JOY_BUTTON_42,
00085         QAF_JOY_BUTTON_43,
00086         QAF_JOY_BUTTON_44,
00087         QAF_JOY_BUTTON_45,
00088         QAF_JOY_BUTTON_46,
00089         QAF_JOY_BUTTON_47,
00090         QAF_JOY_BUTTON_48,
00091         QAF_JOY_BUTTON_49,
00092         QAF_JOY_BUTTON_50,
00093         QAF_JOY_BUTTON_51,
00094         QAF_JOY_BUTTON_52,
00095         QAF_JOY_BUTTON_53,
00096         QAF_JOY_BUTTON_54,
00097         QAF_JOY_BUTTON_55,
00098         QAF_JOY_BUTTON_56,
00099         QAF_JOY_BUTTON_57,
00100         QAF_JOY_BUTTON_58,
00101         QAF_JOY_BUTTON_59,
00102         QAF_JOY_BUTTON_60,
00103         QAF_JOY_BUTTON_61,
00104         QAF_JOY_BUTTON_62,
00105         QAF_JOY_BUTTON_63,
00106         QAF_JOY_BUTTON_64,
00107         QAF_JOY_BUTTON_65,
00108         QAF_JOY_BUTTON_66,
00109         QAF_JOY_BUTTON_67,
00110         QAF_JOY_BUTTON_68,
00111         QAF_JOY_BUTTON_69,
00112         QAF_JOY_BUTTON_70,
00113         QAF_JOY_BUTTON_71,
00114         QAF_JOY_BUTTON_72,
00115         QAF_JOY_BUTTON_73,
00116         QAF_JOY_BUTTON_74,
00117         QAF_JOY_BUTTON_75,
00118         QAF_JOY_BUTTON_76,
00119         QAF_JOY_BUTTON_77,
00120         QAF_JOY_BUTTON_78,
00121         QAF_JOY_BUTTON_79,
00122         QAF_JOY_BUTTON_80,
00123         QAF_JOY_BUTTON_81,
00124         QAF_JOY_BUTTON_82,
00125         QAF_JOY_BUTTON_83,
00126         QAF_JOY_BUTTON_84,
00127         QAF_JOY_BUTTON_85,
00128         QAF_JOY_BUTTON_86,
00129         QAF_JOY_BUTTON_87,
00130         QAF_JOY_BUTTON_88,
00131         QAF_JOY_BUTTON_89,
00132         QAF_JOY_BUTTON_90,
00133         QAF_JOY_BUTTON_91,
00134         QAF_JOY_BUTTON_92,
00135         QAF_JOY_BUTTON_93,
00136         QAF_JOY_BUTTON_94,
00137         QAF_JOY_BUTTON_95,
00138         QAF_JOY_BUTTON_96,
00139         QAF_JOY_BUTTON_97,
00140         QAF_JOY_BUTTON_98,
00141         QAF_JOY_BUTTON_99,
00142         QAF_JOY_BUTTON_100,
00143         QAF_JOY_BUTTON_101,
00144         QAF_JOY_BUTTON_102,
00145         QAF_JOY_BUTTON_103,
00146         QAF_JOY_BUTTON_104,
00147         QAF_JOY_BUTTON_105,
00148         QAF_JOY_BUTTON_106,
00149         QAF_JOY_BUTTON_107,
00150         QAF_JOY_BUTTON_108,
00151         QAF_JOY_BUTTON_109,
00152         QAF_JOY_BUTTON_110,
00153         QAF_JOY_BUTTON_111,
00154         QAF_JOY_BUTTON_112,
00155         QAF_JOY_BUTTON_113,
00156         QAF_JOY_BUTTON_114,
00157         QAF_JOY_BUTTON_115,
00158         QAF_JOY_BUTTON_116,
00159         QAF_JOY_BUTTON_117,
00160         QAF_JOY_BUTTON_118,
00161         QAF_JOY_BUTTON_119,
00162         QAF_JOY_BUTTON_120,
00163         QAF_JOY_BUTTON_121,
00164         QAF_JOY_BUTTON_122,
00165         QAF_JOY_BUTTON_123,
00166         QAF_JOY_BUTTON_124,
00167         QAF_JOY_BUTTON_125,
00168         QAF_JOY_BUTTON_126,      
00169         QAF_JOY_BUTTON_127       
00170     };
00174     #define QAF_JOY_MAX_OBJECTS   (QAF_JOY_BUTTON_127 - QAF_JOY_X_AXIS + 1)
00175     
00177     #define QAF_JOY_ISAXIS(obj)   (obj >= QAF_JOY_X_AXIS   && obj <= QAF_JOY_SLIDER_1  )
00178     
00180     #define QAF_JOY_ISPOV(obj)    (obj >= QAF_JOY_POV_0    && obj <= QAF_JOY_POV_3     )
00181     
00183     #define QAF_JOY_ISBUTTON(obj) (obj >= QAF_JOY_BUTTON_0 && obj <= QAF_JOY_BUTTON_127)
00184     
00187     #define QAF_JOY_BUTTON(n)     ((JoystickObject) (QAF_JOY_BUTTON_0 + n))
00188     
00199     class Joystick {
00200         public:
00207             Joystick ( LPDIRECTINPUTDEVICE8 pJoystick, HWND hWindow );
00208             virtual ~Joystick ();
00209             
00214             bool isInitialized ();
00215             
00225             bool poll ();
00226             
00243             int getObjectState ( JoystickObject obj );
00244             
00252             const char * getObjectName ( JoystickObject obj );
00253             
00258             const char * getDeviceName ();
00259             
00266             bool setHWND ( HWND hWindow );
00267             
00291             bool setAxesParameters ( bool absolute, int minValue, int maxValue, float deadZone, float saturation );
00292             
00309             int createVibrationEffect ( float magnitude, float duration, float period );
00310             
00320             bool changeVibrationMagnitude ( int effectID, float newMagnitude, float newPeriod );
00321             
00329             bool deleteEffect ( int effectID );
00330             
00338             bool playEffect ( int effectID, int repetitions );
00339             
00340         private:
00341             void * pHGE;
00342             
00343             bool initialized;
00344             LPDIRECTINPUTDEVICE8 pJoystick; // Pointer to the joystick interface
00345             HWND hWindow; // Window handle used to set cooperative levels
00346             
00347             DIJOYSTATE2 state; // Joystick state
00348             
00349             Container<GUID> effectGUIDs; // Supported force-feedback effects
00350             Container<DWORD> effectAxesOfs; // Axes that support force-feedback, initialized in the constructor
00351             Container<IDirectInputEffect *> createdEffects;
00352             
00353             char deviceName[MAX_PATH];
00354             char * objNames[QAF_JOY_MAX_OBJECTS]; // Joystick object names
00355             void resetStates ();
00356             
00357             // Callback used to enumerate joystick axes:
00358             static BOOL CALLBACK enumAxesCallback ( const DIDEVICEOBJECTINSTANCE * pdidoi, void * pContext );
00359             
00360             // Callback used to enumerate joystick axes that support
00361             // force-feedback:
00362             static BOOL CALLBACK enumFFAxesCallback ( const DIDEVICEOBJECTINSTANCE * pdidoi, void * pContext );
00363             
00364             // Callback used to enumerate force-feedback effects and store
00365             // their GUIDs:
00366             static BOOL CALLBACK enumEffectsCallback ( LPCDIEFFECTINFO pei, void * pContext );
00367     };
00368     
00369     
00370     
00377     class JoystickSystem {
00378         public:
00379             JoystickSystem ();
00380             virtual ~JoystickSystem ();
00381             
00390             bool initialize ( HWND hWindow );
00391             
00396             void shutdown ();
00397             
00402             int getNumberOfJoysticks ();
00403             
00409             Joystick * getJoystick ( int i );
00410             
00411         private:
00412             void * pHGE;
00413             
00414             LPDIRECTINPUT8 pDI; // Pointer to the DirectInput object
00415             
00416             Container<Joystick *> joysticks; // Available joysticks
00417             
00418             // Callback used to enumerate available joysticks:
00419             static BOOL CALLBACK enumJoysticksCallback ( const DIDEVICEINSTANCE * pdidInstance, void * pContext);
00420             
00421     };
00422     
00423     
00424 }
00425 
00426 
00427 #endif

Generated on Sun Mar 25 12:32:12 2007 for Qaf Framework by  doxygen 1.5.1-p1