MCP23S17 Bufferd

Committer:
ryood
Date:
Fri Nov 04 19:59:23 2016 +0000
Revision:
2:930752799dad
Parent:
1:f00bf8a84d56
Child:
3:8be680035a08
Update: ExioInBuffer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:54debc783452 1 /*
ryood 0:54debc783452 2 * ExioInBuffer.h
ryood 0:54debc783452 3 *
ryood 0:54debc783452 4 * Created: 2016.11.05
ryood 0:54debc783452 5 *
ryood 0:54debc783452 6 */
ryood 0:54debc783452 7
ryood 0:54debc783452 8 #ifndef _EXIOINBUFFER_H_
ryood 0:54debc783452 9 #define _EXIOINBUFFER_H_
ryood 0:54debc783452 10
ryood 0:54debc783452 11 #include "mbed.h"
ryood 0:54debc783452 12 #include "rtos.h"
ryood 0:54debc783452 13 #include "ExioMcp23s17.h"
ryood 0:54debc783452 14
ryood 0:54debc783452 15 class ExioInBuffer {
ryood 0:54debc783452 16 public:
ryood 0:54debc783452 17 ExioInBuffer(ExioMcp23s17* device, ExioPort port, uint32_t interval) :
ryood 0:54debc783452 18 _device(device),
ryood 0:54debc783452 19 _port(port),
ryood 0:54debc783452 20 _interval(interval),
ryood 0:54debc783452 21 _buffer(0x00),
ryood 0:54debc783452 22 _timer(&ExioInBuffer::threadHelper, osTimerPeriodic, (void *)this)
ryood 0:54debc783452 23 {
ryood 1:f00bf8a84d56 24 // set the port as input
ryood 2:930752799dad 25 _device->ioDirection(_port, 0xff);
ryood 2:930752799dad 26 _device->ioPullup(_port, 0xff);
ryood 2:930752799dad 27 _device->ioPolarity(_port, 0xff);
ryood 0:54debc783452 28 }
ryood 0:54debc783452 29
ryood 0:54debc783452 30 uint8_t readPort()
ryood 0:54debc783452 31 {
ryood 0:54debc783452 32 return _buffer;
ryood 0:54debc783452 33 }
ryood 0:54debc783452 34
ryood 0:54debc783452 35 void run()
ryood 0:54debc783452 36 {
ryood 0:54debc783452 37 _timer.start(_interval);
ryood 0:54debc783452 38 }
ryood 0:54debc783452 39
ryood 0:54debc783452 40 void stop()
ryood 0:54debc783452 41 {
ryood 0:54debc783452 42 _timer.stop();
ryood 0:54debc783452 43 }
ryood 0:54debc783452 44
ryood 0:54debc783452 45 protected:
ryood 0:54debc783452 46 ExioMcp23s17* _device;
ryood 0:54debc783452 47 ExioPort _port;
ryood 0:54debc783452 48 uint32_t _interval;
ryood 0:54debc783452 49 uint8_t _buffer;
ryood 0:54debc783452 50 RtosTimer _timer;
ryood 0:54debc783452 51
ryood 0:54debc783452 52 static void threadHelper(const void* arg)
ryood 0:54debc783452 53 {
ryood 0:54debc783452 54 ExioInBuffer* instance = (ExioInBuffer*)arg;
ryood 0:54debc783452 55 instance->update();
ryood 0:54debc783452 56 }
ryood 0:54debc783452 57
ryood 0:54debc783452 58 void update() {
ryood 0:54debc783452 59 _buffer = _device->readPort(_port);
ryood 0:54debc783452 60 }
ryood 0:54debc783452 61 };
ryood 0:54debc783452 62
ryood 0:54debc783452 63 #endif //_EXIOINBUFFER_H_