RadioLib
Universal wireless communication library for Arduino
Module.h
1 #if !defined(_RADIOLIB_MODULE_H)
2 #define _RADIOLIB_MODULE_H
3 
4 #include "TypeDef.h"
5 
6 #if defined(RADIOLIB_BUILD_ARDUINO)
7  #include <SPI.h>
8 #endif
9 
16 class Module {
17  public:
18 
19  #if defined(RADIOLIB_BUILD_ARDUINO)
20 
32  Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
33 
49  Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio, SPIClass& spi, SPISettings spiSettings = RADIOLIB_DEFAULT_SPI_SETTINGS);
50 
51  #else
52 
64  Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
65 
66  #endif
67 
73  Module(const Module& mod);
74 
80  Module& operator=(const Module& mod);
81 
82  // public member variables
83 
87  uint8_t SPIreadCommand = 0b00000000;
88 
92  uint8_t SPIwriteCommand = 0b10000000;
93 
94  // basic methods
95 
99  void init();
100 
104  void term();
105 
106  // SPI methods
107 
119  int16_t SPIgetRegValue(uint8_t reg, uint8_t msb = 7, uint8_t lsb = 0);
120 
138  int16_t SPIsetRegValue(uint8_t reg, uint8_t value, uint8_t msb = 7, uint8_t lsb = 0, uint8_t checkInterval = 2, uint8_t checkMask = 0xFF);
139 
149  void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t* inBytes);
150 
158  uint8_t SPIreadRegister(uint8_t reg);
159 
169  void SPIwriteRegisterBurst(uint8_t reg, uint8_t* data, uint8_t numBytes);
170 
178  void SPIwriteRegister(uint8_t reg, uint8_t data);
179 
193  void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* dataIn, uint8_t numBytes);
194 
195  // pin number access methods
196 
202  RADIOLIB_PIN_TYPE getCs() const { return(_cs); }
203 
209  RADIOLIB_PIN_TYPE getIrq() const { return(_irq); }
210 
216  RADIOLIB_PIN_TYPE getRst() const { return(_rst); }
217 
223  RADIOLIB_PIN_TYPE getGpio() const { return(_gpio); }
224 
233  void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn);
234 
242  void setRfSwitchState(RADIOLIB_PIN_STATUS rxPinState, RADIOLIB_PIN_STATUS txPinState);
243 
244  // Arduino core overrides
245 
253  void pinMode(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_MODE mode);
254 
262  void digitalWrite(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS value);
263 
271  RADIOLIB_PIN_STATUS digitalRead(RADIOLIB_PIN_TYPE pin);
272 
280  void tone(RADIOLIB_PIN_TYPE pin, uint16_t value, uint32_t duration = 0);
281 
287  void noTone(RADIOLIB_PIN_TYPE pin);
288 
298  void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum, void (*userFunc)(void), RADIOLIB_INTERRUPT_STATUS mode);
299 
305  void detachInterrupt(RADIOLIB_PIN_TYPE interruptNum);
306 
310  void yield();
311 
317  void delay(uint32_t ms);
318 
324  void delayMicroseconds(uint32_t us);
325 
329  uint32_t millis();
330 
334  uint32_t micros();
335 
339  uint32_t pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout);
340 
344  void begin();
345 
349  void beginTransaction();
350 
354  uint8_t transfer(uint8_t b);
355 
359  void endTransaction();
360 
364  void end();
365 
366  // helper functions to set up SPI overrides on Arduino
367  #if defined(RADIOLIB_BUILD_ARDUINO)
368  void SPIbegin();
369  virtual void SPIbeginTransaction();
370  uint8_t SPItransfer(uint8_t b);
371  virtual void SPIendTransaction();
372  void SPIend();
373  #endif
374 
378  static uint8_t flipBits(uint8_t b);
379 
383  static uint16_t flipBits16(uint16_t i);
384 
392  static void hexdump(uint8_t* data, size_t len);
393 
401  void regdump(uint8_t start, uint8_t len);
402 
403  // hardware abstraction layer callbacks
404  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PIN_MODE);
405  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_WRITE);
406  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_READ);
407  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_TONE);
408  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_NO_TONE);
409  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_ATTACH_INTERRUPT);
410  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DETACH_INTERRUPT);
411  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_YIELD);
412  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY);
413  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY_MICROSECONDS);
414  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MILLIS);
415  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MICROS);
416  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PULSE_IN);
417 
418  #if defined(RADIOLIB_BUILD_ARDUINO)
419  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN);
420  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
421  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_TRANSFER);
422  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
423  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END);
424  #else
425  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN);
426  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
427  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_TRANSFER);
428  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
429  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END);
430  #endif
431 
432 #if !defined(RADIOLIB_GODMODE)
433  private:
434 #endif
435 
436  // pins
437  RADIOLIB_PIN_TYPE _cs = RADIOLIB_NC;
438  RADIOLIB_PIN_TYPE _irq = RADIOLIB_NC;
439  RADIOLIB_PIN_TYPE _rst = RADIOLIB_NC;
440  RADIOLIB_PIN_TYPE _gpio = RADIOLIB_NC;
441 
442  // SPI interface (Arduino only)
443  #if defined(RADIOLIB_BUILD_ARDUINO)
444  SPIClass* _spi = NULL;
445  SPISettings _spiSettings = RADIOLIB_DEFAULT_SPI_SETTINGS;
446  bool _initInterface = false;
447  #endif
448 
449  // RF switch presence and pins
450  bool _useRfSwitch = false;
451  RADIOLIB_PIN_TYPE _rxEn = RADIOLIB_NC;
452  RADIOLIB_PIN_TYPE _txEn = RADIOLIB_NC;
453 };
454 
455 #endif
Module::pinMode
void pinMode(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_MODE mode)
Arduino core pinMode override that checks RADIOLIB_NC as alias for unused pin.
Definition: Module.cpp:248
Module::hexdump
static void hexdump(uint8_t *data, size_t len)
Function to dump data as hex into the debug port.
Definition: Module.cpp:455
Module::getIrq
RADIOLIB_PIN_TYPE getIrq() const
Access method to get the pin number of interrupt/GPIO.
Definition: Module.h:209
Module::digitalRead
RADIOLIB_PIN_STATUS digitalRead(RADIOLIB_PIN_TYPE pin)
Arduino core digitalWrite override that checks RADIOLIB_NC as alias for unused pin.
Definition: Module.cpp:262
Module::SPItransfer
void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t *dataOut, uint8_t *dataIn, uint8_t numBytes)
SPI single transfer method.
Definition: Module.cpp:201
Module::transfer
uint8_t transfer(uint8_t b)
Arduino core SPI transfer override.
Definition: Module.cpp:397
Module::init
void init()
Initialize low-level module control.
Definition: Module.cpp:105
Module::SPIgetRegValue
int16_t SPIgetRegValue(uint8_t reg, uint8_t msb=7, uint8_t lsb=0)
SPI read method that automatically masks unused bits. This method is the preferred SPI read mechanism...
Definition: Module.cpp:124
Module::regdump
void regdump(uint8_t start, uint8_t len)
Function to dump device registers as hex into the debug port.
Definition: Module.cpp:475
Module::getRst
RADIOLIB_PIN_TYPE getRst() const
Access method to get the pin number of hardware reset pin.
Definition: Module.h:216
Module::begin
void begin()
Arduino core SPI begin override.
Definition: Module.cpp:383
Module::SPIwriteCommand
uint8_t SPIwriteCommand
Basic SPI write command. Defaults to 0x80.
Definition: Module.h:92
Module::delay
void delay(uint32_t ms)
Arduino core delay override.
Definition: Module.cpp:348
Module::yield
void yield()
Arduino core yield override.
Definition: Module.cpp:339
Module::digitalWrite
void digitalWrite(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS value)
Arduino core digitalWrite override that checks RADIOLIB_NC as alias for unused pin.
Definition: Module.cpp:255
Module::micros
uint32_t micros()
Arduino core micros override.
Definition: Module.cpp:369
Module::getCs
RADIOLIB_PIN_TYPE getCs() const
Access method to get the pin number of SPI chip select.
Definition: Module.h:202
Module::SPIsetRegValue
int16_t SPIsetRegValue(uint8_t reg, uint8_t value, uint8_t msb=7, uint8_t lsb=0, uint8_t checkInterval=2, uint8_t checkMask=0xFF)
Overwrite-safe SPI write method with verification. This method is the preferred SPI write mechanism.
Definition: Module.cpp:134
Module::tone
void tone(RADIOLIB_PIN_TYPE pin, uint16_t value, uint32_t duration=0)
Arduino core tone override that checks RADIOLIB_NC as alias for unused pin and RADIOLIB_TONE_UNSUPPOR...
Definition: Module.cpp:269
Module::SPIwriteRegister
void SPIwriteRegister(uint8_t reg, uint8_t data)
SPI basic write method. Use of this method is reserved for special cases, SPIsetRegValue should be us...
Definition: Module.cpp:197
Module::noTone
void noTone(RADIOLIB_PIN_TYPE pin)
Arduino core noTone override that checks RADIOLIB_NC as alias for unused pin and RADIOLIB_TONE_UNSUPP...
Definition: Module.cpp:299
Module::endTransaction
void endTransaction()
Arduino core SPI endTransaction override.
Definition: Module.cpp:404
Module::setRfSwitchPins
void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn)
Some modules contain external RF switch controlled by two pins. This function gives RadioLib control ...
Definition: Module.cpp:488
Module::getGpio
RADIOLIB_PIN_TYPE getGpio() const
Access method to get the pin number of second interrupt/GPIO.
Definition: Module.h:223
Module::Module
Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio=RADIOLIB_NC)
Default constructor.
Definition: Module.cpp:79
Module::flipBits16
static uint16_t flipBits16(uint16_t i)
Function to reflect bits within an integer.
Definition: Module.cpp:447
Module::SPIreadRegister
uint8_t SPIreadRegister(uint8_t reg)
SPI basic read method. Use of this method is reserved for special cases, SPIgetRegValue should be use...
Definition: Module.cpp:187
Module
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:16
Module::operator=
Module & operator=(const Module &mod)
Overload for assignment operator.
Definition: Module.cpp:94
Module::end
void end()
Arduino core SPI end override.
Definition: Module.cpp:411
Module::term
void term()
Terminate low-level module control.
Definition: Module.cpp:113
Module::SPIreadCommand
uint8_t SPIreadCommand
Basic SPI read command. Defaults to 0x00.
Definition: Module.h:87
Module::detachInterrupt
void detachInterrupt(RADIOLIB_PIN_TYPE interruptNum)
Arduino core detachInterrupt override.
Definition: Module.cpp:332
Module::setRfSwitchState
void setRfSwitchState(RADIOLIB_PIN_STATUS rxPinState, RADIOLIB_PIN_STATUS txPinState)
Set RF switch state.
Definition: Module.cpp:496
Module::SPIreadRegisterBurst
void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t *inBytes)
SPI burst read method.
Definition: Module.cpp:183
Module::pulseIn
uint32_t pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout)
Arduino core pulseIn override.
Definition: Module.cpp:376
Module::flipBits
static uint8_t flipBits(uint8_t b)
Function to reflect bits within a byte.
Definition: Module.cpp:440
Module::millis
uint32_t millis()
Arduino core millis override.
Definition: Module.cpp:362
Module::delayMicroseconds
void delayMicroseconds(uint32_t us)
Arduino core delayMicroseconds override.
Definition: Module.cpp:355
Module::attachInterrupt
void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum, void(*userFunc)(void), RADIOLIB_INTERRUPT_STATUS mode)
Arduino core attachInterrupt override.
Definition: Module.cpp:325
Module::beginTransaction
void beginTransaction()
Arduino core SPI beginTransaction override.
Definition: Module.cpp:390
Module::SPIwriteRegisterBurst
void SPIwriteRegisterBurst(uint8_t reg, uint8_t *data, uint8_t numBytes)
SPI burst write method.
Definition: Module.cpp:193