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  void begin();
340 
344  void beginTransaction();
345 
349  uint8_t transfer(uint8_t b);
350 
354  void endTransaction();
355 
359  void end();
360 
361  // helper functions to set up SPI overrides on Arduino
362  #if defined(RADIOLIB_BUILD_ARDUINO)
363  void SPIbegin();
364  virtual void SPIbeginTransaction();
365  uint8_t SPItransfer(uint8_t b);
366  virtual void SPIendTransaction();
367  void SPIend();
368  #endif
369 
373  static uint8_t flipBits(uint8_t b);
374 
378  static uint16_t flipBits16(uint16_t i);
379 
387  static void hexdump(uint8_t* data, size_t len);
388 
396  void regdump(uint8_t start, uint8_t len);
397 
398  // hardware abstraction layer callbacks
399  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PIN_MODE);
400  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_WRITE);
401  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_READ);
402  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_TONE);
403  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_NO_TONE);
404  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_ATTACH_INTERRUPT);
405  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DETACH_INTERRUPT);
406  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_YIELD);
407  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY);
408  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY_MICROSECONDS);
409  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MILLIS);
410  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MICROS);
411 
412  #if defined(RADIOLIB_BUILD_ARDUINO)
413  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN);
414  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
415  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_TRANSFER);
416  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
417  RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END);
418  #else
419  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN);
420  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
421  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_TRANSFER);
422  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
423  RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END);
424  #endif
425 
426 #if !defined(RADIOLIB_GODMODE)
427  private:
428 #endif
429 
430  // pins
431  RADIOLIB_PIN_TYPE _cs = RADIOLIB_NC;
432  RADIOLIB_PIN_TYPE _irq = RADIOLIB_NC;
433  RADIOLIB_PIN_TYPE _rst = RADIOLIB_NC;
434  RADIOLIB_PIN_TYPE _gpio = RADIOLIB_NC;
435 
436  // SPI interface (Arduino only)
437  #if defined(RADIOLIB_BUILD_ARDUINO)
438  SPIClass* _spi = NULL;
439  SPISettings _spiSettings = RADIOLIB_DEFAULT_SPI_SETTINGS;
440  bool _initInterface = false;
441  #endif
442 
443  // RF switch presence and pins
444  bool _useRfSwitch = false;
445  RADIOLIB_PIN_TYPE _rxEn = RADIOLIB_NC;
446  RADIOLIB_PIN_TYPE _txEn = RADIOLIB_NC;
447 };
448 
449 #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:448
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:390
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:468
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:376
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:397
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:481
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:440
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:404
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:489
Module::SPIreadRegisterBurst
void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t *inBytes)
SPI burst read method.
Definition: Module.cpp:183
Module::flipBits
static uint8_t flipBits(uint8_t b)
Function to reflect bits within a byte.
Definition: Module.cpp:433
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:383
Module::SPIwriteRegisterBurst
void SPIwriteRegisterBurst(uint8_t reg, uint8_t *data, uint8_t numBytes)
SPI burst write method.
Definition: Module.cpp:193