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

Dependencies:   C12832 FXOS8700Q LM75B MMA7660

FrdmK64f_Input.hpp

Committer:
co838_app56
Date:
2016-02-23
Revision:
2:c871dc21467b
Parent:
1:7be9a82f3ab8
Child:
3:1ab88130bb9d

File content as of revision 2:c871dc21467b:

#pragma once

#include "mbed.h"

template <class Parent>
class FrdmK64f_Input : public Parent
{
public: // List of manged Inputs

    enum IDBinaryInput
    {
        ButtonLeft,
        ButtonRight,
        IDBinaryInput_MAX
    };
    
private:

    // Buttons
    InterruptIn         _buttonLeft;
    InterruptIn         _buttonRight;
    bool                _binaryInputEnable[2];
    
public:
    FrdmK64f_Input(void)
        : _buttonLeft(SW3), _buttonRight(SW2)
    {
        memset(_binaryInputEnable, 1, sizeof(_binaryInputEnable));
        
        _buttonLeft.rise(this, &FrdmK64f_Input::onButtonLeftRise);
        _buttonLeft.fall(this, &FrdmK64f_Input::onButtonLeftFall);
        _buttonRight.rise(this, &FrdmK64f_Input::onButtonRightRise);
        _buttonRight.fall(this, &FrdmK64f_Input::onButtonRightFall);
    }
    
    using   Parent::setEnable;
    void    setEnable(FrdmK64f_Input::IDBinaryInput inp, bool act) { _binaryInputEnable[inp] = act; }
    
    // Not interresting section (do not use those methods)
    // Callbacks for joystick
    void    onButtonLeftRise(void) { if (_binaryInputEnable[ButtonLeft]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Rise)); }
    void    onButtonLeftFall(void) { if (_binaryInputEnable[ButtonLeft]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonLeft, Event::Fall)); }
    void    onButtonRightRise(void) { if (_binaryInputEnable[ButtonRight]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Rise)); }
    void    onButtonRightFall(void) { if (_binaryInputEnable[ButtonRight]) Parent::_events.push(Event(Event::FrdmK64f, Event::BinaryInput, ButtonRight, Event::Fall)); }
    
    // Callback for others sensors
    virtual void    chechAnalog(void) { Parent::chechAnalog(); }
};