ST-DEVKIT-LRWAN

Dependents:   DISCO-L072CZ-LRWAN1-base

Fork of SX1276GenericLib by Helmut Tschemernjak

Committer:
Helmut Tschemernjak
Date:
Wed Jul 26 15:18:35 2017 +0200
Revision:
75:7330dd86cdea
Parent:
73:23cc8ba412e0
Child:
77:7f227a4dffe6
Added a default Serial configuration which allows to switch
between Serial and SerialUSB via a single simple define.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut Tschemernjak 40:0165543c0986 1 /*
Helmut Tschemernjak 65:b2d98328fcba 2 * The file is Licensed under the Apache License, Version 2.0
Helmut Tschemernjak 46:e78a1d0391ac 3 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 46:e78a1d0391ac 4 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 46:e78a1d0391ac 5 */
Helmut Tschemernjak 40:0165543c0986 6
Helmut Tschemernjak 65:b2d98328fcba 7
Helmut Tschemernjak 65:b2d98328fcba 8
Helmut Tschemernjak 65:b2d98328fcba 9 #ifdef ARDUINO
Helmut Tschemernjak 65:b2d98328fcba 10 #ifndef __ARDUINO_MBED_H__
Helmut Tschemernjak 65:b2d98328fcba 11 #define __ARDUINO_MBED_H__
Helmut Tschemernjak 40:0165543c0986 12
Helmut Tschemernjak 65:b2d98328fcba 13 #include <arduino.h>
Helmut Tschemernjak 65:b2d98328fcba 14 #include "Callback-A.h"
Helmut Tschemernjak 65:b2d98328fcba 15 #include <SPI.h>
Helmut Tschemernjak 65:b2d98328fcba 16 #undef min
Helmut Tschemernjak 65:b2d98328fcba 17 #undef max
Helmut Tschemernjak 65:b2d98328fcba 18 #undef map
Helmut Tschemernjak 40:0165543c0986 19
Helmut Tschemernjak 65:b2d98328fcba 20 typedef int PinName;
Helmut Tschemernjak 65:b2d98328fcba 21 #define NC -1
Helmut Tschemernjak 65:b2d98328fcba 22 #define wait_ms delay
Helmut Tschemernjak 70:1d496aae2819 23 /* we need to redefine out dprintf because stdio.h uses the same name */
Helmut Tschemernjak 70:1d496aae2819 24 #define dprint dxprintf
Helmut Tschemernjak 69:d440a5b04708 25 #if ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10606
Helmut Tschemernjak 69:d440a5b04708 26 #define MYdigitalPinToInterrupt(x) digitalPinToInterrupt(x)
Helmut Tschemernjak 69:d440a5b04708 27 #else
Helmut Tschemernjak 69:d440a5b04708 28 #define MYdigitalPinToInterrupt(x) (x)
Helmut Tschemernjak 69:d440a5b04708 29 #endif
Helmut Tschemernjak 69:d440a5b04708 30
Helmut Tschemernjak 75:7330dd86cdea 31 void InitSerial(Stream *serial);
Helmut Tschemernjak 75:7330dd86cdea 32 extern Stream *ser;
Helmut Tschemernjak 75:7330dd86cdea 33
Helmut Tschemernjak 69:d440a5b04708 34
Helmut Tschemernjak 68:66251038a897 35 enum PinMode {
Helmut Tschemernjak 68:66251038a897 36 PullUp = 1,
Helmut Tschemernjak 68:66251038a897 37 PullDown = 2,
Helmut Tschemernjak 68:66251038a897 38 };
Helmut Tschemernjak 67:d3afd803f40d 39
Helmut Tschemernjak 65:b2d98328fcba 40 class DigitalInOut {
Helmut Tschemernjak 65:b2d98328fcba 41 public:
Helmut Tschemernjak 65:b2d98328fcba 42 DigitalInOut(PinName pin) {
Helmut Tschemernjak 65:b2d98328fcba 43 _gpioPin = pin;
Helmut Tschemernjak 65:b2d98328fcba 44 }
Helmut Tschemernjak 65:b2d98328fcba 45 void write(int value) {
Helmut Tschemernjak 65:b2d98328fcba 46 digitalWrite(_gpioPin, value == 0 ? LOW : HIGH);
Helmut Tschemernjak 65:b2d98328fcba 47 };
Helmut Tschemernjak 46:e78a1d0391ac 48
Helmut Tschemernjak 65:b2d98328fcba 49 void output() {
Helmut Tschemernjak 65:b2d98328fcba 50 pinMode(_gpioPin, OUTPUT);
Helmut Tschemernjak 65:b2d98328fcba 51 };
Helmut Tschemernjak 46:e78a1d0391ac 52
Helmut Tschemernjak 65:b2d98328fcba 53 void input() {
Helmut Tschemernjak 65:b2d98328fcba 54 pinMode(_gpioPin, INPUT);
Helmut Tschemernjak 65:b2d98328fcba 55 };
Helmut Tschemernjak 46:e78a1d0391ac 56
Helmut Tschemernjak 68:66251038a897 57 void mode(PinMode pull) {
Helmut Tschemernjak 68:66251038a897 58 switch(pull) {
Helmut Tschemernjak 68:66251038a897 59 case PullUp:
Helmut Tschemernjak 68:66251038a897 60 pinMode(_gpioPin, INPUT_PULLUP);
Helmut Tschemernjak 68:66251038a897 61 break;
Helmut Tschemernjak 68:66251038a897 62 case PullDown:
Helmut Tschemernjak 68:66251038a897 63 pinMode(_gpioPin, INPUT_PULLDOWN);
Helmut Tschemernjak 68:66251038a897 64 break;
Helmut Tschemernjak 68:66251038a897 65 }
Helmut Tschemernjak 68:66251038a897 66 }
Helmut Tschemernjak 68:66251038a897 67
Helmut Tschemernjak 65:b2d98328fcba 68 int read() {
Helmut Tschemernjak 65:b2d98328fcba 69 if (digitalRead(_gpioPin) == HIGH)
Helmut Tschemernjak 65:b2d98328fcba 70 return 1;
Helmut Tschemernjak 65:b2d98328fcba 71 else
Helmut Tschemernjak 65:b2d98328fcba 72 return 0;
Helmut Tschemernjak 65:b2d98328fcba 73 };
Helmut Tschemernjak 65:b2d98328fcba 74 operator int() {
Helmut Tschemernjak 65:b2d98328fcba 75 return read();
Helmut Tschemernjak 65:b2d98328fcba 76 };
Helmut Tschemernjak 46:e78a1d0391ac 77
Helmut Tschemernjak 65:b2d98328fcba 78 DigitalInOut& operator= (int value) {
Helmut Tschemernjak 65:b2d98328fcba 79 // Underlying write is thread safe
Helmut Tschemernjak 65:b2d98328fcba 80 write(value);
Helmut Tschemernjak 65:b2d98328fcba 81 return *this;
Helmut Tschemernjak 65:b2d98328fcba 82 }
Helmut Tschemernjak 46:e78a1d0391ac 83
Helmut Tschemernjak 65:b2d98328fcba 84 DigitalInOut& operator= (DigitalInOut& rhs) {
Helmut Tschemernjak 65:b2d98328fcba 85 write(rhs.read());
Helmut Tschemernjak 65:b2d98328fcba 86 return *this;
Helmut Tschemernjak 65:b2d98328fcba 87 }
Helmut Tschemernjak 46:e78a1d0391ac 88
Helmut Tschemernjak 46:e78a1d0391ac 89 private:
Helmut Tschemernjak 65:b2d98328fcba 90 int _gpioPin;
Helmut Tschemernjak 65:b2d98328fcba 91 };
Helmut Tschemernjak 65:b2d98328fcba 92
Helmut Tschemernjak 65:b2d98328fcba 93 class DigitalOut : public DigitalInOut {
Helmut Tschemernjak 65:b2d98328fcba 94 public:
Helmut Tschemernjak 46:e78a1d0391ac 95
Helmut Tschemernjak 65:b2d98328fcba 96 DigitalOut(PinName pin) : DigitalInOut(pin) {
Helmut Tschemernjak 65:b2d98328fcba 97 output();
Helmut Tschemernjak 65:b2d98328fcba 98 }
Helmut Tschemernjak 46:e78a1d0391ac 99
Helmut Tschemernjak 65:b2d98328fcba 100 DigitalOut& operator= (int value) {
Helmut Tschemernjak 65:b2d98328fcba 101 write(value);
Helmut Tschemernjak 65:b2d98328fcba 102 return *this;
Helmut Tschemernjak 65:b2d98328fcba 103 }
Helmut Tschemernjak 46:e78a1d0391ac 104
Helmut Tschemernjak 65:b2d98328fcba 105 };
Helmut Tschemernjak 65:b2d98328fcba 106
Helmut Tschemernjak 65:b2d98328fcba 107 class DigitalIn : public DigitalInOut {
Helmut Tschemernjak 65:b2d98328fcba 108 public:
Helmut Tschemernjak 46:e78a1d0391ac 109
Helmut Tschemernjak 65:b2d98328fcba 110 DigitalIn(PinName pin) : DigitalInOut(pin) {
Helmut Tschemernjak 65:b2d98328fcba 111 input();
Helmut Tschemernjak 65:b2d98328fcba 112 }
Helmut Tschemernjak 65:b2d98328fcba 113 };
Helmut Tschemernjak 65:b2d98328fcba 114
Helmut Tschemernjak 65:b2d98328fcba 115 class XSPI {
Helmut Tschemernjak 65:b2d98328fcba 116 public:
Helmut Tschemernjak 65:b2d98328fcba 117 XSPI(PinName mosi, PinName miso, PinName sclk) {
Helmut Tschemernjak 65:b2d98328fcba 118 _mosi = mosi;
Helmut Tschemernjak 65:b2d98328fcba 119 _miso = miso;
Helmut Tschemernjak 65:b2d98328fcba 120 _sclk = sclk;
Helmut Tschemernjak 65:b2d98328fcba 121 if (mosi == PIN_SPI_MOSI && miso == PIN_SPI_MISO && sclk == PIN_SPI_SCK)
Helmut Tschemernjak 65:b2d98328fcba 122 _spi = &SPI;
Helmut Tschemernjak 65:b2d98328fcba 123 #if SPI_INTERFACES_COUNT > 1
Helmut Tschemernjak 65:b2d98328fcba 124 else if (mosi == PIN_SPI1_MOSI && miso == PIN_SPI1_MISO && sclk == PIN_SPI1_SCK)
Helmut Tschemernjak 65:b2d98328fcba 125 _spi = &SPI1;
Helmut Tschemernjak 65:b2d98328fcba 126 #endif
Helmut Tschemernjak 65:b2d98328fcba 127 #if SPI_INTERFACES_COUNT > 2
Helmut Tschemernjak 65:b2d98328fcba 128 else if (mosi == PIN_SPI2_MOSI && miso == PIN_SPI2_MISO && sclk == PIN_SPI2_SCK)
Helmut Tschemernjak 65:b2d98328fcba 129 _spi = &SPI2;
Helmut Tschemernjak 65:b2d98328fcba 130 #endif
Helmut Tschemernjak 65:b2d98328fcba 131 else {
Helmut Tschemernjak 65:b2d98328fcba 132 _spi = NULL;
Helmut Tschemernjak 65:b2d98328fcba 133 return;
Helmut Tschemernjak 65:b2d98328fcba 134 }
Helmut Tschemernjak 65:b2d98328fcba 135 _hz = 1000000;
Helmut Tschemernjak 65:b2d98328fcba 136 _mode = SPI_MODE0;
Helmut Tschemernjak 65:b2d98328fcba 137 _spi->beginTransaction(SPISettings(_hz, MSBFIRST, _mode));
Helmut Tschemernjak 69:d440a5b04708 138 }
Helmut Tschemernjak 69:d440a5b04708 139 ~XSPI() {
Helmut Tschemernjak 65:b2d98328fcba 140 _spi->endTransaction();
Helmut Tschemernjak 69:d440a5b04708 141 };
Helmut Tschemernjak 46:e78a1d0391ac 142
Helmut Tschemernjak 65:b2d98328fcba 143 void format(int bits, int mode = 0) {
Helmut Tschemernjak 65:b2d98328fcba 144 if (mode == 0)
Helmut Tschemernjak 65:b2d98328fcba 145 _mode = SPI_MODE0;
Helmut Tschemernjak 65:b2d98328fcba 146 else if (mode == 1)
Helmut Tschemernjak 65:b2d98328fcba 147 _mode = SPI_MODE1;
Helmut Tschemernjak 65:b2d98328fcba 148 else if (mode == 2)
Helmut Tschemernjak 65:b2d98328fcba 149 _mode = SPI_MODE2;
Helmut Tschemernjak 65:b2d98328fcba 150 else if (mode == 3)
Helmut Tschemernjak 65:b2d98328fcba 151 _mode = SPI_MODE3;
Helmut Tschemernjak 65:b2d98328fcba 152 else
Helmut Tschemernjak 65:b2d98328fcba 153 _mode = SPI_MODE0;
Helmut Tschemernjak 65:b2d98328fcba 154 _bits = bits;
Helmut Tschemernjak 69:d440a5b04708 155 _spi->endTransaction();
Helmut Tschemernjak 65:b2d98328fcba 156 _spi->beginTransaction(SPISettings(_hz, MSBFIRST, _mode));
Helmut Tschemernjak 65:b2d98328fcba 157 }
Helmut Tschemernjak 65:b2d98328fcba 158 void frequency(int hz) {
Helmut Tschemernjak 65:b2d98328fcba 159 _hz = hz;
Helmut Tschemernjak 69:d440a5b04708 160 _spi->endTransaction();
Helmut Tschemernjak 65:b2d98328fcba 161 _spi->beginTransaction(SPISettings(_hz, MSBFIRST, _mode));
Helmut Tschemernjak 65:b2d98328fcba 162 }
Helmut Tschemernjak 46:e78a1d0391ac 163
Helmut Tschemernjak 65:b2d98328fcba 164 int write(int value) {
Helmut Tschemernjak 65:b2d98328fcba 165 int ret = _spi->transfer(value);
Helmut Tschemernjak 65:b2d98328fcba 166 return ret;
Helmut Tschemernjak 65:b2d98328fcba 167 }
Helmut Tschemernjak 61:08b50780eb91 168
Helmut Tschemernjak 65:b2d98328fcba 169 private:
Helmut Tschemernjak 65:b2d98328fcba 170 SPIClass *_spi;
Helmut Tschemernjak 65:b2d98328fcba 171 int _hz;
Helmut Tschemernjak 65:b2d98328fcba 172 int _mode;
Helmut Tschemernjak 65:b2d98328fcba 173 int _bits;
Helmut Tschemernjak 65:b2d98328fcba 174 int _mosi, _miso, _sclk;
Helmut Tschemernjak 46:e78a1d0391ac 175 };
Helmut Tschemernjak 40:0165543c0986 176
Helmut Tschemernjak 65:b2d98328fcba 177 class InterruptIn {
Helmut Tschemernjak 65:b2d98328fcba 178 public:
Helmut Tschemernjak 65:b2d98328fcba 179 static void donothing(void) {
Helmut Tschemernjak 65:b2d98328fcba 180 }
Helmut Tschemernjak 65:b2d98328fcba 181
Helmut Tschemernjak 65:b2d98328fcba 182 InterruptIn(PinName pin) : _func() {
Helmut Tschemernjak 65:b2d98328fcba 183 _gpioPin = pin;
Helmut Tschemernjak 65:b2d98328fcba 184 _func = InterruptIn::donothing;
Helmut Tschemernjak 65:b2d98328fcba 185 pinMode(_gpioPin, INPUT);
Helmut Tschemernjak 65:b2d98328fcba 186 }
Helmut Tschemernjak 65:b2d98328fcba 187
Helmut Tschemernjak 65:b2d98328fcba 188 ~InterruptIn() {
Helmut Tschemernjak 69:d440a5b04708 189 detachInterrupt(MYdigitalPinToInterrupt(_gpioPin));
Helmut Tschemernjak 65:b2d98328fcba 190 };
Helmut Tschemernjak 65:b2d98328fcba 191
Helmut Tschemernjak 65:b2d98328fcba 192 static void _irq_handler(InterruptIn *id) {
Helmut Tschemernjak 65:b2d98328fcba 193 if (id)
Helmut Tschemernjak 65:b2d98328fcba 194 id->_func();
Helmut Tschemernjak 65:b2d98328fcba 195 }
Helmut Tschemernjak 65:b2d98328fcba 196
Helmut Tschemernjak 65:b2d98328fcba 197 void rise(Callback<void()> func);
Helmut Tschemernjak 65:b2d98328fcba 198
Helmut Tschemernjak 65:b2d98328fcba 199 void fall(Callback<void()> func);
Helmut Tschemernjak 65:b2d98328fcba 200
Helmut Tschemernjak 69:d440a5b04708 201 void mode(PinMode pull) {
Helmut Tschemernjak 69:d440a5b04708 202 switch(pull) {
Helmut Tschemernjak 69:d440a5b04708 203 case PullUp:
Helmut Tschemernjak 69:d440a5b04708 204 pinMode(_gpioPin, INPUT_PULLUP);
Helmut Tschemernjak 69:d440a5b04708 205 break;
Helmut Tschemernjak 69:d440a5b04708 206 case PullDown:
Helmut Tschemernjak 69:d440a5b04708 207 pinMode(_gpioPin, INPUT_PULLDOWN);
Helmut Tschemernjak 69:d440a5b04708 208 break;
Helmut Tschemernjak 69:d440a5b04708 209 }
Helmut Tschemernjak 69:d440a5b04708 210 }
Helmut Tschemernjak 65:b2d98328fcba 211 private:
Helmut Tschemernjak 65:b2d98328fcba 212 int _gpioPin;
Helmut Tschemernjak 65:b2d98328fcba 213 Callback<void()> _func;
Helmut Tschemernjak 65:b2d98328fcba 214 };
Helmut Tschemernjak 65:b2d98328fcba 215
Helmut Tschemernjak 70:1d496aae2819 216 extern uint32_t s_getTicker(void);
Helmut Tschemernjak 67:d3afd803f40d 217 extern uint32_t ms_getTicker(void);
Helmut Tschemernjak 66:fbb2da34bd9a 218 extern uint32_t us_getTicker(void);
Helmut Tschemernjak 67:d3afd803f40d 219 extern uint64_t ns_getTicker(void);
Helmut Tschemernjak 67:d3afd803f40d 220 extern void sleep(void);
Helmut Tschemernjak 67:d3afd803f40d 221 extern void deepsleep(void);
Helmut Tschemernjak 67:d3afd803f40d 222
Helmut Tschemernjak 66:fbb2da34bd9a 223
Helmut Tschemernjak 65:b2d98328fcba 224 class Timer {
Helmut Tschemernjak 65:b2d98328fcba 225 public:
Helmut Tschemernjak 65:b2d98328fcba 226 void start(void) {
Helmut Tschemernjak 67:d3afd803f40d 227 _time = ns_getTicker();
Helmut Tschemernjak 67:d3afd803f40d 228 }
Helmut Tschemernjak 67:d3afd803f40d 229 uint32_t read_sec(void) {
Helmut Tschemernjak 67:d3afd803f40d 230 int64_t n = ns_getTicker() - (uint64_t)_time;
Helmut Tschemernjak 67:d3afd803f40d 231 n /= (uint64_t)1000000000;
Helmut Tschemernjak 67:d3afd803f40d 232 return n;
Helmut Tschemernjak 65:b2d98328fcba 233 }
Helmut Tschemernjak 67:d3afd803f40d 234 uint32_t read_ms(void) {
Helmut Tschemernjak 67:d3afd803f40d 235 int64_t n = ns_getTicker() - (uint64_t)_time;
Helmut Tschemernjak 67:d3afd803f40d 236 n /= (uint64_t)1000000;
Helmut Tschemernjak 67:d3afd803f40d 237 return n;
Helmut Tschemernjak 65:b2d98328fcba 238 }
Helmut Tschemernjak 67:d3afd803f40d 239 uint32_t read_us(void) {
Helmut Tschemernjak 67:d3afd803f40d 240 int64_t n = ns_getTicker() - (uint64_t)_time;
Helmut Tschemernjak 67:d3afd803f40d 241 n /= (uint64_t)1000;
Helmut Tschemernjak 67:d3afd803f40d 242 return n;
Helmut Tschemernjak 65:b2d98328fcba 243 }
Helmut Tschemernjak 65:b2d98328fcba 244 private:
Helmut Tschemernjak 67:d3afd803f40d 245 uint64_t _time;
Helmut Tschemernjak 65:b2d98328fcba 246 };
Helmut Tschemernjak 65:b2d98328fcba 247
Helmut Tschemernjak 65:b2d98328fcba 248
Helmut Tschemernjak 65:b2d98328fcba 249 class Timeout {
Helmut Tschemernjak 65:b2d98328fcba 250 public:
Helmut Tschemernjak 65:b2d98328fcba 251 Timeout() : _func() {
Helmut Tschemernjak 65:b2d98328fcba 252 }
Helmut Tschemernjak 65:b2d98328fcba 253 ~Timeout() {
Helmut Tschemernjak 65:b2d98328fcba 254 detach();
Helmut Tschemernjak 65:b2d98328fcba 255 }
Helmut Tschemernjak 65:b2d98328fcba 256
Helmut Tschemernjak 67:d3afd803f40d 257 void attach_sec(Callback<void()> func, uint32_t secs) {
Helmut Tschemernjak 67:d3afd803f40d 258 if (secs == 0)
Helmut Tschemernjak 67:d3afd803f40d 259 return detach();
Helmut Tschemernjak 67:d3afd803f40d 260 _func = func;
Helmut Tschemernjak 67:d3afd803f40d 261 _timeout = ns_getTicker() + (uint64_t)secs * (uint64_t)1000000000;
Helmut Tschemernjak 67:d3afd803f40d 262 insert();
Helmut Tschemernjak 67:d3afd803f40d 263 restart();
Helmut Tschemernjak 67:d3afd803f40d 264 }
Helmut Tschemernjak 67:d3afd803f40d 265
Helmut Tschemernjak 67:d3afd803f40d 266 void attach(Callback<void()> func, uint32_t msecs) {
Helmut Tschemernjak 65:b2d98328fcba 267 if (msecs == 0)
Helmut Tschemernjak 65:b2d98328fcba 268 return detach();
Helmut Tschemernjak 65:b2d98328fcba 269 _func = func;
Helmut Tschemernjak 67:d3afd803f40d 270 _timeout = ns_getTicker() + (uint64_t)msecs * (uint64_t)1000000;
Helmut Tschemernjak 65:b2d98328fcba 271 insert();
Helmut Tschemernjak 65:b2d98328fcba 272 restart();
Helmut Tschemernjak 65:b2d98328fcba 273 }
Helmut Tschemernjak 65:b2d98328fcba 274
Helmut Tschemernjak 65:b2d98328fcba 275 void attach_us(Callback<void()> func, long usecs) {
Helmut Tschemernjak 65:b2d98328fcba 276 if (usecs == 0)
Helmut Tschemernjak 65:b2d98328fcba 277 return detach();
Helmut Tschemernjak 65:b2d98328fcba 278 _func = func;
Helmut Tschemernjak 67:d3afd803f40d 279 _timeout = ns_getTicker() + (uint64_t)usecs * (uint64_t)1000;
Helmut Tschemernjak 65:b2d98328fcba 280 insert();
Helmut Tschemernjak 65:b2d98328fcba 281 restart();
Helmut Tschemernjak 65:b2d98328fcba 282 }
Helmut Tschemernjak 65:b2d98328fcba 283
Helmut Tschemernjak 67:d3afd803f40d 284 void detach(void) {
Helmut Tschemernjak 65:b2d98328fcba 285 _func = NULL;
Helmut Tschemernjak 65:b2d98328fcba 286 remove();
Helmut Tschemernjak 65:b2d98328fcba 287 restart();
Helmut Tschemernjak 65:b2d98328fcba 288 }
Helmut Tschemernjak 65:b2d98328fcba 289
Helmut Tschemernjak 65:b2d98328fcba 290 static void _irq_handler(Timeout *tp) {
Helmut Tschemernjak 65:b2d98328fcba 291 if (tp) {
Helmut Tschemernjak 65:b2d98328fcba 292 tp->_func();
Helmut Tschemernjak 65:b2d98328fcba 293 }
Helmut Tschemernjak 65:b2d98328fcba 294 }
Helmut Tschemernjak 65:b2d98328fcba 295
Helmut Tschemernjak 67:d3afd803f40d 296 static void restart(void);
Helmut Tschemernjak 67:d3afd803f40d 297 uint64_t _timeout; // in ns this lasts for 539 years.
Helmut Tschemernjak 65:b2d98328fcba 298 protected:
Helmut Tschemernjak 65:b2d98328fcba 299 void insert(void);
Helmut Tschemernjak 65:b2d98328fcba 300 void remove(void);
Helmut Tschemernjak 65:b2d98328fcba 301 private:
Helmut Tschemernjak 65:b2d98328fcba 302 Callback<void()> _func;
Helmut Tschemernjak 65:b2d98328fcba 303 };
Helmut Tschemernjak 65:b2d98328fcba 304
Helmut Tschemernjak 65:b2d98328fcba 305 #endif // __ARDUINO_MBED_H__
Helmut Tschemernjak 65:b2d98328fcba 306
Helmut Tschemernjak 40:0165543c0986 307 #endif // ARDUINO