inp_joystick.hh

Go to the documentation of this file.
00001 /*
00043  * LEGAL:   COPYRIGHT (C) 2004 JIM E. BROOKS
00044  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00045  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
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             // Either.
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     // Only derivative can construct this (not even Global).
00133                     Joystick( void );
00134     virtual         ~Joystick();
00135 
00136 // Interface for client:
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 // Interface for InputQueue:
00152 private:
00153     void            PollAndEnqueueEvents( const uint limit = JOY_EVENT_ENQUEUE_LIMIT );  
00154 protected:
00155     virtual bool    PollEvent( Event& event ) = 0;
00156 
00157 // Template Method:
00158 protected:
00159     virtual bool    Open( void ) = 0;
00160     virtual void    Close( void ) = 0;
00161 
00162 // Private methods:
00163 private:
00164     int             CheckMin( int val );
00165     int             CheckMax( int val );
00166 
00167 // Data members:
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 } // namespace inp
00186 
00187 #endif // INP_JOYSTICK_HH
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:11 2007