00001
00043
00044
00045
00046
00047
00048 #ifndef INP_JOYSTICK_HH
00049 #define INP_JOYSTICK_HH 1
00050
00051 namespace inp {
00052
00053 class Global;
00054 class InputQueue;
00055
00059 class Joystick
00060 {
00061
00062 friend class Global;
00063 friend class InputQueue;
00064 public:
00066 CLASS_CONST int JOY_LO = 8000;
00067 CLASS_CONST int JOY_HI = 32767;
00068
00069 private:
00070 CLASS_CONST uint JOY_EVENT_ENQUEUE_LIMIT = 20;
00071
00072 public:
00074 enum eAxis
00075 {
00076 eAxis_NONE,
00077 eAxis_LEFT_RIGHT,
00078 eAxis_UP_DOWN,
00079 eAxis_THIRD,
00080 };
00081
00082 public:
00084 enum eButton
00085 {
00086 eButton_NONE,
00087 eButton_1,
00088 eButton_2,
00089 eButton_3,
00090 eButton_4,
00091 eButton_LAST = eButton_4
00092 };
00093
00094 public:
00101 class Event
00102 {
00103
00104 public:
00105 Event( void )
00106 {
00107 Clear();
00108 }
00109
00110 void Clear( void )
00111 {
00112 mAxis = Joystick::eAxis_NONE;
00113 mAxisVal = 0;
00114 mButton = Joystick::eButton_NONE;
00115 mButtonVal = 0;
00116 }
00117
00118 bool IfValid( void ) const
00119 {
00120
00121 return (mAxis != eAxis_NONE) || (mButton != eButton_NONE);
00122 }
00123
00124 public:
00125 Joystick::eAxis mAxis;
00126 int mAxisVal;
00127 Joystick::eButton mButton;
00128 bool mButtonVal;
00129 };
00130
00131 protected:
00132
00133 Joystick( void );
00134 virtual ~Joystick();
00135
00136
00137 public:
00138 virtual void PrintStatus( void ) = 0;
00139 bool Enable( bool flag = true );
00140 bool IfEnabled( void ) { return mEnabled; }
00141 bool CalibrateDefault( void );
00142 bool CalibrateMin( int left, int right,
00143 int up, int down,
00144 int slow, int fast );
00145 bool CalibrateMax( int left, int right,
00146 int up, int down,
00147 int slow, int fast );
00148 bool CalibrateDeadzone( const int dz[3] );
00149 bool CalibrateDirection( const int d[3] );
00150
00151
00152 private:
00153 void PollAndEnqueueEvents( const uint limit = JOY_EVENT_ENQUEUE_LIMIT );
00154 protected:
00155 virtual bool PollEvent( Event& event ) = 0;
00156
00157
00158 protected:
00159 virtual bool Open( void ) = 0;
00160 virtual void Close( void ) = 0;
00161
00162
00163 private:
00164 int CheckMin( int val );
00165 int CheckMax( int val );
00166
00167
00168 protected:
00169 CLASS_VAR int msInstanceCnt;
00170 bool mEnabled;
00171 public:
00172 struct Calibration
00173 {
00174 struct { int mLo; int mHi; } mLeft;
00175 struct { int mLo; int mHi; } mRight;
00176 struct { int mLo; int mHi; } mUp;
00177 struct { int mLo; int mHi; } mDown;
00178 struct { int mLo; int mHi; } mSlow;
00179 struct { int mLo; int mHi; } mFast;
00180 };
00181 Calibration mCalibration;
00182 TinyArray<3,int> mAxisDir;
00183 };
00184
00185 }
00186
00187 #endif // INP_JOYSTICK_HH