pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

sensors/TimeEventHandler.hpp

Committer:
wataloh
Date:
2017-05-29
Revision:
15:2c2c0a7c50c1
Parent:
5:9d5c7ee80f3b
Child:
21:d03c7bbb9f37

File content as of revision 15:2c2c0a7c50c1:

#ifndef _TIME_EVENT_HANDLER_HPP_
#define _TIME_EVENT_HANDLER_HPP_

#include "Preferences.hpp"
#include "DebugIO.hpp"

namespace MaruSolSensorManager
{

template<typename A> class TimeEventHandler
{
protected:
    static A *self;
    static Timeout timeout;
    PACKET packet;
    void (A::*callback)();
    uint32_t nop_i;
    int32_t interval_current;
    inline void nop(){
        if(nop_i>400)
        {
            nop_i = 0;
            SERIAL_PRINT_DBG(".");
        }
        ++nop_i;
    }
    void read()
    {
        callback = &A::go;
    }
    void backToNOP()
    {
        callback = NULL;//&A::nop;
    }
    virtual void checkIntervalUpdate()
    {
    }
public:
    void loop()
    {
        if(callback != NULL)
        {
            (self->*callback)();
        }
        self->checkIntervalUpdate();
    }
    TimeEventHandler(){
        nop_i = 0;
    }
    static A*
    getInstance()
    {
        return self == NULL ? self = new A() : self;
    }
    static void
    deleteInstance()
    {
        timeout.attach(&NOP,10);
        if(self!=NULL)
        {
            delete self;
            self = NULL;
        }
    }
    static void
    onRead()
    {
        self->read();
    }
    static void
    NOP()
    {
    }
};

template<typename A> A* TimeEventHandler<A>::self=NULL;
template<typename A> Timeout TimeEventHandler<A>::timeout;

};

#endif //_TIME_EVENT_HANDLER_HPP_