IO is an event based input manager which permit to select which composents are manged on your system

Dependencies:   C12832 FXOS8700Q LM75B MMA7660

Revision:
1:7be9a82f3ab8
Parent:
0:2ac59c564ab0
Child:
2:c871dc21467b
--- a/FrdmK64f_Input.hpp	Tue Feb 23 17:25:07 2016 +0000
+++ b/FrdmK64f_Input.hpp	Tue Feb 23 18:38:27 2016 +0000
@@ -5,31 +5,43 @@
 template <class Parent>
 class FrdmK64f_Input : public Parent
 {
-    // Buttons
-    InterruptIn         _buttonLeft;
-    InterruptIn         _buttonRight;
-    
-public:
+public: // List of manged Inputs
 
     enum IDBinaryInput
     {
         ButtonLeft,
-        ButtonRight
+        ButtonRight,
+        IDBinaryInput_MAX
     };
+    
+private:
 
+    // Buttons
+    InterruptIn         _buttonLeft;
+    InterruptIn         _buttonRight;
+    bool                _buttonEnable[2];
+    
+public:
     FrdmK64f_Input(void)
-        : _buttonLeft(SW2), _buttonRight(SW3)
+        : _buttonLeft(SW3), _buttonRight(SW2)
     {
+        memset(_buttonEnable, 1, sizeof(_buttonEnable));
+        
         _buttonLeft.rise(this, &FrdmK64f_Input::onButtonLeftRise);
         _buttonLeft.fall(this, &FrdmK64f_Input::onButtonLeftFall);
         _buttonRight.rise(this, &FrdmK64f_Input::onButtonRightRise);
         _buttonRight.fall(this, &FrdmK64f_Input::onButtonRightFall);
     }
     
-    void    onButtonLeftRise(void) { Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Rise)); }
-    void    onButtonLeftFall(void) { Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Fall)); }
-    void    onButtonRightRise(void) { Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Rise)); }
-    void    onButtonRightFall(void) { Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Fall)); }
+    using   Parent::setEnable;
+    void    setEnable(FrdmK64f_Input::IDBinaryInput inp, bool act) { _buttonEnable[inp] = act; }
+    
+    // Not interresting section (do not use those methods)
+    // Callbacks for joystick
+    void    onButtonLeftRise(void) { if (_buttonEnable[ButtonLeft]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Rise)); }
+    void    onButtonLeftFall(void) { if (_buttonEnable[ButtonLeft]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Fall)); }
+    void    onButtonRightRise(void) { if (_buttonEnable[ButtonRight]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Rise)); }
+    void    onButtonRightFall(void) { if (_buttonEnable[ButtonRight]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Fall)); }
     
     // Callback for others sensors
     virtual void    chechAnalog(void) { Parent::chechAnalog(); }