MCP23S17 Bufferd

Committer:
ryood
Date:
Fri Nov 04 23:16:41 2016 +0000
Revision:
6:cc3b65d44e9e
Parent:
3:8be680035a08
Add: Test ExioBufferedPinDetect

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 3:8be680035a08 17 ExioInBuffer(ExioMcp23s17* device, ExioPort port) :
ryood 0:54debc783452 18 _device(device),
ryood 0:54debc783452 19 _port(port),
ryood 0:54debc783452 20 _buffer(0x00),
ryood 0:54debc783452 21 _timer(&ExioInBuffer::threadHelper, osTimerPeriodic, (void *)this)
ryood 0:54debc783452 22 {
ryood 1:f00bf8a84d56 23 // set the port as input
ryood 2:930752799dad 24 _device->ioDirection(_port, 0xff);
ryood 2:930752799dad 25 _device->ioPullup(_port, 0xff);
ryood 2:930752799dad 26 _device->ioPolarity(_port, 0xff);
ryood 0:54debc783452 27 }
ryood 0:54debc783452 28
ryood 0:54debc783452 29 uint8_t readPort()
ryood 0:54debc783452 30 {
ryood 0:54debc783452 31 return _buffer;
ryood 0:54debc783452 32 }
ryood 0:54debc783452 33
ryood 3:8be680035a08 34 void run(uint32_t millsec)
ryood 0:54debc783452 35 {
ryood 3:8be680035a08 36 _timer.start(millsec);
ryood 0:54debc783452 37 }
ryood 0:54debc783452 38
ryood 0:54debc783452 39 void stop()
ryood 0:54debc783452 40 {
ryood 0:54debc783452 41 _timer.stop();
ryood 0:54debc783452 42 }
ryood 0:54debc783452 43
ryood 0:54debc783452 44 protected:
ryood 0:54debc783452 45 ExioMcp23s17* _device;
ryood 0:54debc783452 46 ExioPort _port;
ryood 0:54debc783452 47 uint8_t _buffer;
ryood 0:54debc783452 48 RtosTimer _timer;
ryood 0:54debc783452 49
ryood 0:54debc783452 50 static void threadHelper(const void* arg)
ryood 0:54debc783452 51 {
ryood 0:54debc783452 52 ExioInBuffer* instance = (ExioInBuffer*)arg;
ryood 0:54debc783452 53 instance->update();
ryood 0:54debc783452 54 }
ryood 0:54debc783452 55
ryood 0:54debc783452 56 void update() {
ryood 0:54debc783452 57 _buffer = _device->readPort(_port);
ryood 0:54debc783452 58 }
ryood 0:54debc783452 59 };
ryood 0:54debc783452 60
ryood 0:54debc783452 61 #endif //_EXIOINBUFFER_H_