IoAbstraction
Loading...
Searching...
No Matches
BasicIoAbstraction.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 https://www.thecoderscorner.com (Dave Cherry).
3 * This product is licensed under an Apache license, see the LICENSE file in the top-level directory.
4 */
5
6#ifndef _IO_ABSTRACTION_CORE_TYPES
7#define _IO_ABSTRACTION_CORE_TYPES
8
13#include "PlatformDetermination.h"
14#include <TaskManagerIO.h>
15
16#define IO_PIN_NOT_DEFINED 0xFF
17
18#if defined(IOA_USE_MBED)
19# include "mbed/MbedDigitalIO.h"
20#elif defined(ESP32) && defined(IOA_USE_ESP32_EXTRAS)
21# include "esp32/ESP32DigitalIO.h"
22#elif defined(BUILD_FOR_PICO_CMAKE)
23# include "pico/PicoDigitalIO.h"
24#elif defined(BUILD_FOR_STM32CUBE_CMAKE)
25# include "stmCube/StmCubeDigital.h"
26#elif defined(BUILD_FOR_NATIVE_PLATFORM)
27#include "testing/TestDigitalIO.h"
28#else
29# include <Arduino.h>
30#endif //IOA_USE_MBED
31
42class BasicIoAbstraction : public InterruptAbstraction {
43private:
44#ifdef IOA_USE_MBED
45 BtreeList<uint32_t, GpioWrapper> pinCache;
46
47 GpioWrapper *allocatePinIfNeedBe(uint8_t pinToAlloc);
48#endif //IOA_USE_MBED
49public:
50 virtual ~BasicIoAbstraction() = default;
51
58 uint8_t digitalRead(pinid_t p) { return readValue(p); }
59
67 void digitalWrite(pinid_t p, uint8_t v) { return writeValue(p, v); }
68
74 uint8_t digitalReadS(pinid_t p) { runLoop(); return readValue(p); }
75
84 void digitalWriteS(pinid_t p, uint8_t v) { writeValue(p, v); sync(); }
85
92 void writePortS(pinid_t p, uint8_t v) { writePort(p, v); sync(); }
93
100 uint8_t readPortS(pinid_t p) { sync(); return readPort(p); }
101
108 void pinMode(pinid_t pin, uint8_t mode) { pinDirection(pin, mode); }
109
116 bool sync() { return runLoop(); }
117
123 virtual void pinDirection(pinid_t pin, uint8_t mode);
124
130 virtual void writeValue(pinid_t pin, uint8_t value);
131
136 virtual uint8_t readValue(pinid_t pin);
137
145 virtual void attachInterrupt(pinid_t pin, RawIntHandler interruptHandler, uint8_t mode);
146
151 virtual bool runLoop() { return true; }
152
159 virtual void writePort(pinid_t pin, uint8_t portVal);
160
167 virtual uint8_t readPort(pinid_t pin);
168};
169
175
179#ifdef IOA_USE_MBED
180#define pgm_read_byte_near(x) (*(x))
181#elif defined(IOA_USE_ARDUINO)
182#define ioUsingArduino internalDigitalIo
183#endif
184
192
193extern BasicIoAbstraction internalIoAbstraction;
194
199#define internalDigitalDevice() internalIoAbstraction
200
208inline void ioDevicePinMode(IoAbstractionRef ioDev, pinid_t pin, uint8_t dir) { ioDev->pinDirection(pin, dir); }
209
218inline uint8_t ioDeviceDigitalRead(IoAbstractionRef ioDev, pinid_t pin) { return ioDev->readValue(pin); }
219
229inline void ioDeviceDigitalWrite(IoAbstractionRef ioDev, pinid_t pin, uint8_t val) { ioDev->writeValue(pin, (val)); }
230
237inline bool ioDeviceSync(IoAbstractionRef ioDev) { return ioDev->runLoop(); }
238
249inline void ioDeviceAttachInterrupt(IoAbstractionRef ioDev, pinid_t pin, RawIntHandler intHandler, uint8_t mode) {ioDev->attachInterrupt(pin, intHandler, mode) ;}
250
259inline uint8_t ioDeviceDigitalReadS(IoAbstractionRef ioDev, pinid_t pin) { ioDev->runLoop(); return ioDev->readValue(pin); }
260
270inline bool ioDeviceDigitalWriteS(IoAbstractionRef ioDev, pinid_t pin, uint8_t val) { ioDev->writeValue(pin, (val)); return ioDev->runLoop(); }
271
284inline bool ioDeviceDigitalWritePortS(IoAbstractionRef ioDev, pinid_t pinOnPort, uint8_t portVal) { ioDev->writePort(pinOnPort, portVal); return ioDev->runLoop(); }
285
298inline uint8_t ioDeviceDigitalReadPortS(IoAbstractionRef ioDev, pinid_t pinOnPort) { ioDev->runLoop(); return ioDev->readPort(pinOnPort); }
299
311inline void ioDeviceDigitalWritePort(IoAbstractionRef ioDev, pinid_t pinOnPort, uint8_t portVal) { ioDev->writePort(pinOnPort, portVal); }
312
325inline uint8_t ioDeviceDigitalReadPort(IoAbstractionRef ioDev, pinid_t pinOnPort) { return ioDev->readPort(pinOnPort); }
326
327#define asIoRef(x) (&(x))
328
329#endif // _IO_ABSTRACTION_CORE_TYPES
uint8_t ioDeviceDigitalReadPort(IoAbstractionRef ioDev, pinid_t pinOnPort)
Definition BasicIoAbstraction.h:325
bool ioDeviceDigitalWriteS(IoAbstractionRef ioDev, pinid_t pin, uint8_t val)
Definition BasicIoAbstraction.h:270
void ioDeviceDigitalWrite(IoAbstractionRef ioDev, pinid_t pin, uint8_t val)
Definition BasicIoAbstraction.h:229
uint8_t ioDeviceDigitalRead(IoAbstractionRef ioDev, pinid_t pin)
Definition BasicIoAbstraction.h:218
void ioDevicePinMode(IoAbstractionRef ioDev, pinid_t pin, uint8_t dir)
Definition BasicIoAbstraction.h:208
IoAbstractionRef internalDigitalIo()
bool ioDeviceDigitalWritePortS(IoAbstractionRef ioDev, pinid_t pinOnPort, uint8_t portVal)
Definition BasicIoAbstraction.h:284
bool ioDeviceSync(IoAbstractionRef ioDev)
Definition BasicIoAbstraction.h:237
uint8_t ioDeviceDigitalReadPortS(IoAbstractionRef ioDev, pinid_t pinOnPort)
Definition BasicIoAbstraction.h:298
BasicIoAbstraction * IoAbstractionRef
Definition BasicIoAbstraction.h:174
void ioDeviceAttachInterrupt(IoAbstractionRef ioDev, pinid_t pin, RawIntHandler intHandler, uint8_t mode)
Definition BasicIoAbstraction.h:249
void ioDeviceDigitalWritePort(IoAbstractionRef ioDev, pinid_t pinOnPort, uint8_t portVal)
Definition BasicIoAbstraction.h:311
uint8_t ioDeviceDigitalReadS(IoAbstractionRef ioDev, pinid_t pin)
Definition BasicIoAbstraction.h:259
Definition BasicIoAbstraction.h:42
void writePortS(pinid_t p, uint8_t v)
Definition BasicIoAbstraction.h:92
uint8_t digitalReadS(pinid_t p)
Definition BasicIoAbstraction.h:74
virtual void pinDirection(pinid_t pin, uint8_t mode)
virtual void writePort(pinid_t pin, uint8_t portVal)
void pinMode(pinid_t pin, uint8_t mode)
Definition BasicIoAbstraction.h:108
void digitalWriteS(pinid_t p, uint8_t v)
Definition BasicIoAbstraction.h:84
virtual uint8_t readValue(pinid_t pin)
void digitalWrite(pinid_t p, uint8_t v)
Definition BasicIoAbstraction.h:67
uint8_t digitalRead(pinid_t p)
Definition BasicIoAbstraction.h:58
virtual void writeValue(pinid_t pin, uint8_t value)
uint8_t readPortS(pinid_t p)
Definition BasicIoAbstraction.h:100
virtual void attachInterrupt(pinid_t pin, RawIntHandler interruptHandler, uint8_t mode)
virtual bool runLoop()
Definition BasicIoAbstraction.h:151
bool sync()
Definition BasicIoAbstraction.h:116
virtual uint8_t readPort(pinid_t pin)