MCP23S17 Bufferd

ExioInBuffer.h

Committer:
ryood
Date:
2016-11-04
Revision:
0:54debc783452
Child:
1:f00bf8a84d56

File content as of revision 0:54debc783452:

/*
 * ExioInBuffer.h
 *
 * Created: 2016.11.05
 *
 */
 
#ifndef _EXIOINBUFFER_H_
#define _EXIOINBUFFER_H_

#include "mbed.h"
#include "rtos.h"
#include "ExioMcp23s17.h"

class ExioInBuffer {
public:
    ExioInBuffer(ExioMcp23s17* device, ExioPort port, uint32_t interval) :
        _device(device),
        _port(port),
        _interval(interval),
        _buffer(0x00),
        _timer(&ExioInBuffer::threadHelper, osTimerPeriodic, (void *)this)
    {

    }
    
    uint8_t readPort()
    {
        return _buffer;
    }
    
    void run()
    {
        _timer.start(_interval);
    }
    
    void stop()
    {
        _timer.stop();
    }

protected:
    ExioMcp23s17* _device;
    ExioPort _port;
    uint32_t _interval;
    uint8_t _buffer;
    RtosTimer _timer;
    
    static void threadHelper(const void* arg)
    {
        ExioInBuffer* instance = (ExioInBuffer*)arg;
        instance->update();
    }
    
    void update() {
        _buffer = _device->readPort(_port);
    }
};

#endif //_EXIOINBUFFER_H_