1 #if !defined(_RADIOLIB_MODULE_H)
2 #define _RADIOLIB_MODULE_H
6 #if defined(RADIOLIB_BUILD_ARDUINO)
67 #if defined(RADIOLIB_BUILD_ARDUINO)
80 Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
97 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);
112 Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
159 #if defined(RADIOLIB_INTERRUPT_TIMING)
164 typedef void (*TimerSetupCb_t)(uint32_t len);
169 TimerSetupCb_t TimerSetupCb =
nullptr;
174 volatile bool TimerFlag =
false;
203 int16_t
SPIgetRegValue(uint8_t reg, uint8_t msb = 7, uint8_t lsb = 0);
222 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);
277 void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* dataIn, uint8_t numBytes);
300 int16_t
SPItransferStream(uint8_t* cmd, uint8_t cmdLen,
bool write, uint8_t* dataOut, uint8_t* dataIn, uint8_t numBytes,
bool waitForGpio, uint32_t timeout);
309 RADIOLIB_PIN_TYPE
getCs()
const {
return(_cs); }
316 RADIOLIB_PIN_TYPE
getIrq()
const {
return(_irq); }
323 RADIOLIB_PIN_TYPE
getRst()
const {
return(_rst); }
330 RADIOLIB_PIN_TYPE
getGpio()
const {
return(_gpio); }
450 void pinMode(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_MODE mode);
459 void digitalWrite(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS value);
468 RADIOLIB_PIN_STATUS
digitalRead(RADIOLIB_PIN_TYPE pin);
477 void tone(RADIOLIB_PIN_TYPE pin, uint16_t value, uint32_t duration = 0);
484 void noTone(RADIOLIB_PIN_TYPE pin);
495 void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum,
void (*userFunc)(
void), RADIOLIB_INTERRUPT_STATUS mode);
514 void delay(uint32_t ms);
536 uint32_t
pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout);
564 #if defined(RADIOLIB_BUILD_ARDUINO)
568 virtual void SPIbeginTransaction();
570 virtual void SPIendTransaction();
589 static void hexdump(uint8_t* data,
size_t len);
598 void regdump(uint8_t start, uint8_t len);
600 #if !defined(RADIOLIB_GODMODE)
605 RADIOLIB_PIN_TYPE _cs = RADIOLIB_NC;
606 RADIOLIB_PIN_TYPE _irq = RADIOLIB_NC;
607 RADIOLIB_PIN_TYPE _rst = RADIOLIB_NC;
608 RADIOLIB_PIN_TYPE _gpio = RADIOLIB_NC;
611 #if defined(RADIOLIB_BUILD_ARDUINO)
612 SPIClass* _spi = NULL;
613 SPISettings _spiSettings = RADIOLIB_DEFAULT_SPI_SETTINGS;
614 bool _initInterface =
false;
618 RADIOLIB_PIN_TYPE _rfSwitchPins[
RFSWITCH_MAX_PINS] = { RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC };
619 const RfSwitchMode_t *_rfSwitchTable =
nullptr;
621 #if defined(RADIOLIB_INTERRUPT_TIMING)
622 uint32_t _prevTimingLen = 0;
628 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PIN_MODE);
629 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_WRITE);
630 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_READ);
631 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_TONE);
632 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_NO_TONE);
633 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_ATTACH_INTERRUPT);
634 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DETACH_INTERRUPT);
635 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_YIELD);
636 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY);
637 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY_MICROSECONDS);
638 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MILLIS);
639 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MICROS);
640 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PULSE_IN);
642 #if defined(RADIOLIB_BUILD_ARDUINO)
643 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN);
644 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
645 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_TRANSFER);
646 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
647 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END);
649 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN);
650 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
651 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_TRANSFER);
652 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
653 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END);
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:16
void endTransaction()
Arduino core SPI endTransaction override.
Definition: Module.cpp:573
static const size_t RFSWITCH_MAX_PINS
The maximum number of pins supported by the RF switch code.
Definition: Module.h:27
void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition: Module.cpp:681
Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio=RADIOLIB_NC)
Default constructor.
Definition: Module.cpp:83
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:142
uint32_t pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout)
Arduino core pulseIn override.
Definition: Module.cpp:539
void delayMicroseconds(uint32_t us)
Arduino core delayMicroseconds override.
Definition: Module.cpp:518
static uint16_t flipBits16(uint16_t i)
Function to reflect bits within an integer.
Definition: Module.cpp:628
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:195
uint32_t millis()
Arduino core millis override.
Definition: Module.cpp:525
void yield()
Arduino core yield override.
Definition: Module.cpp:502
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:426
bool SPIstreamType
Whether the SPI interface is stream-type (e.g. SX126x) or register-type (e.g. SX127x)....
Definition: Module.h:146
void beginTransaction()
Arduino core SPI beginTransaction override.
Definition: Module.cpp:555
void term()
Terminate low-level module control.
Definition: Module.cpp:119
uint8_t transfer(uint8_t b)
Arduino core SPI transfer override.
Definition: Module.cpp:564
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:407
void waitForMicroseconds(uint32_t start, uint32_t len)
Wait for time to elapse, either using the microsecond timer, or the TimerFlag. Note that in interrupt...
Definition: Module.cpp:382
static const RfSwitchMode_t END_OF_MODE_TABLE
Definition: Module.h:65
Module & operator=(const Module &mod)
Overload for assignment operator.
Definition: Module.cpp:98
const RfSwitchMode_t * findRfSwitchMode(uint8_t mode) const
Find a mode in the RfSwitchTable.
Definition: Module.cpp:703
OpMode_t
Definition: Module.h:46
@ MODE_TX
Definition: Module.h:56
@ MODE_IDLE
Definition: Module.h:52
@ MODE_RX
Definition: Module.h:54
@ MODE_END_OF_TABLE
Definition: Module.h:50
void detachInterrupt(RADIOLIB_PIN_TYPE interruptNum)
Arduino core detachInterrupt override.
Definition: Module.cpp:495
void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t *inBytes)
SPI burst read method.
Definition: Module.cpp:191
void regdump(uint8_t start, uint8_t len)
Function to dump device registers as hex into the debug port.
Definition: Module.cpp:668
int16_t SPItransferStream(uint8_t *cmd, uint8_t cmdLen, bool write, uint8_t *dataOut, uint8_t *dataIn, uint8_t numBytes, bool waitForGpio, uint32_t timeout)
SPI single transfer method for modules with stream-type SPI interface (SX126x, SX128x etc....
Definition: Module.cpp:256
RADIOLIB_PIN_STATUS digitalRead(RADIOLIB_PIN_TYPE pin)
Arduino core digitalWrite override that checks RADIOLIB_NC as alias for unused pin.
Definition: Module.cpp:414
static uint8_t flipBits(uint8_t b)
Function to reflect bits within a byte.
Definition: Module.cpp:621
uint8_t SPIreadCommand
Basic SPI read command. Defaults to 0x00.
Definition: Module.h:135
void setRfSwitchTable(const RADIOLIB_PIN_TYPE(&pins)[RFSWITCH_MAX_PINS], const RfSwitchMode_t table[])
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition: Module.cpp:696
RADIOLIB_PIN_TYPE getIrq() const
Access method to get the pin number of interrupt/GPIO.
Definition: Module.h:316
void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum, void(*userFunc)(void), RADIOLIB_INTERRUPT_STATUS mode)
Arduino core attachInterrupt override.
Definition: Module.cpp:488
int16_t(* SPIparseStatusCb_t)(uint8_t in)
SPI status parsing callback typedef.
Definition: Module.h:151
void SPIwriteRegisterBurst(uint8_t reg, uint8_t *data, uint8_t numBytes)
SPI burst write method.
Definition: Module.cpp:201
void end()
Arduino core SPI end override.
Definition: Module.cpp:582
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:205
static void hexdump(uint8_t *data, size_t len)
Function to dump data as hex into the debug port.
Definition: Module.cpp:636
void init()
Initialize low-level module control.
Definition: Module.cpp:109
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:132
RADIOLIB_PIN_TYPE getRst() const
Access method to get the pin number of hardware reset pin.
Definition: Module.h:323
RADIOLIB_PIN_TYPE getCs() const
Access method to get the pin number of SPI chip select.
Definition: Module.h:309
uint8_t SPIwriteCommand
Basic SPI write command. Defaults to 0x80.
Definition: Module.h:140
RADIOLIB_PIN_TYPE getGpio() const
Access method to get the pin number of second interrupt/GPIO.
Definition: Module.h:330
void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t *dataOut, uint8_t *dataIn, uint8_t numBytes)
SPI single transfer method.
Definition: Module.cpp:209
void delay(uint32_t ms)
Arduino core delay override.
Definition: Module.cpp:511
uint32_t micros()
Arduino core micros override.
Definition: Module.cpp:532
void begin()
Arduino core SPI begin override.
Definition: Module.cpp:546
SPIparseStatusCb_t SPIparseStatusCb
Callback to function that will parse the module-specific status codes to RadioLib status codes....
Definition: Module.h:157
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:400
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:461
void setRfSwitchState(uint8_t mode)
Set RF switch state.
Definition: Module.cpp:713