1 #if !defined(_RADIOLIB_MODULE_H)
2 #define _RADIOLIB_MODULE_H
6 #if defined(RADIOLIB_BUILD_ARDUINO)
19 #if defined(RADIOLIB_BUILD_ARDUINO)
32 Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
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);
64 Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio = RADIOLIB_NC);
94 #if defined(RADIOLIB_INTERRUPT_TIMING)
99 typedef void (*TimerSetupCb_t)(uint32_t len);
104 TimerSetupCb_t TimerSetupCb =
nullptr;
109 volatile bool TimerFlag =
false;
138 int16_t
SPIgetRegValue(uint8_t reg, uint8_t msb = 7, uint8_t lsb = 0);
157 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);
212 void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* dataIn, uint8_t numBytes);
221 RADIOLIB_PIN_TYPE
getCs()
const {
return(_cs); }
228 RADIOLIB_PIN_TYPE
getIrq()
const {
return(_irq); }
235 RADIOLIB_PIN_TYPE
getRst()
const {
return(_rst); }
242 RADIOLIB_PIN_TYPE
getGpio()
const {
return(_gpio); }
261 void setRfSwitchState(RADIOLIB_PIN_STATUS rxPinState, RADIOLIB_PIN_STATUS txPinState);
282 void pinMode(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_MODE mode);
291 void digitalWrite(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS value);
300 RADIOLIB_PIN_STATUS
digitalRead(RADIOLIB_PIN_TYPE pin);
309 void tone(RADIOLIB_PIN_TYPE pin, uint16_t value, uint32_t duration = 0);
316 void noTone(RADIOLIB_PIN_TYPE pin);
327 void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum,
void (*userFunc)(
void), RADIOLIB_INTERRUPT_STATUS mode);
346 void delay(uint32_t ms);
368 uint32_t
pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout);
396 #if defined(RADIOLIB_BUILD_ARDUINO)
400 virtual void SPIbeginTransaction();
402 virtual void SPIendTransaction();
421 static void hexdump(uint8_t* data,
size_t len);
430 void regdump(uint8_t start, uint8_t len);
432 #if !defined(RADIOLIB_GODMODE)
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;
443 #if defined(RADIOLIB_BUILD_ARDUINO)
444 SPIClass* _spi = NULL;
445 SPISettings _spiSettings = RADIOLIB_DEFAULT_SPI_SETTINGS;
446 bool _initInterface =
false;
450 bool _useRfSwitch =
false;
451 RADIOLIB_PIN_TYPE _rxEn = RADIOLIB_NC;
452 RADIOLIB_PIN_TYPE _txEn = RADIOLIB_NC;
454 #if defined(RADIOLIB_INTERRUPT_TIMING)
455 uint32_t _prevTimingLen = 0;
461 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PIN_MODE);
462 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_WRITE);
463 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DIGITAL_READ);
464 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_TONE);
465 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_NO_TONE);
466 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_ATTACH_INTERRUPT);
467 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DETACH_INTERRUPT);
468 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_YIELD);
469 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY);
470 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_DELAY_MICROSECONDS);
471 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MILLIS);
472 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_MICROS);
473 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_PULSE_IN);
475 #if defined(RADIOLIB_BUILD_ARDUINO)
476 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN);
477 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
478 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_TRANSFER);
479 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
480 RADIOLIB_GENERATE_CALLBACK_SPI(RADIOLIB_CB_ARGS_SPI_END);
482 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN);
483 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_BEGIN_TRANSACTION);
484 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_TRANSFER);
485 RADIOLIB_GENERATE_CALLBACK(RADIOLIB_CB_ARGS_SPI_END_TRANSACTION);
486 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:445
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:553
Module(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio=RADIOLIB_NC)
Default constructor.
Definition: Module.cpp:81
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:140
uint32_t pulseIn(RADIOLIB_PIN_TYPE pin, RADIOLIB_PIN_STATUS state, uint32_t timeout)
Arduino core pulseIn override.
Definition: Module.cpp:411
void delayMicroseconds(uint32_t us)
Arduino core delayMicroseconds override.
Definition: Module.cpp:390
static uint16_t flipBits16(uint16_t i)
Function to reflect bits within an integer.
Definition: Module.cpp:500
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:193
uint32_t millis()
Arduino core millis override.
Definition: Module.cpp:397
void yield()
Arduino core yield override.
Definition: Module.cpp:374
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:298
void beginTransaction()
Arduino core SPI beginTransaction override.
Definition: Module.cpp:427
void term()
Terminate low-level module control.
Definition: Module.cpp:117
uint8_t transfer(uint8_t b)
Arduino core SPI transfer override.
Definition: Module.cpp:436
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:279
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:254
void setRfSwitchState(RADIOLIB_PIN_STATUS rxPinState, RADIOLIB_PIN_STATUS txPinState)
Set RF switch state.
Definition: Module.cpp:561
Module & operator=(const Module &mod)
Overload for assignment operator.
Definition: Module.cpp:96
void detachInterrupt(RADIOLIB_PIN_TYPE interruptNum)
Arduino core detachInterrupt override.
Definition: Module.cpp:367
void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t *inBytes)
SPI burst read method.
Definition: Module.cpp:189
void regdump(uint8_t start, uint8_t len)
Function to dump device registers as hex into the debug port.
Definition: Module.cpp:540
RADIOLIB_PIN_STATUS digitalRead(RADIOLIB_PIN_TYPE pin)
Arduino core digitalWrite override that checks RADIOLIB_NC as alias for unused pin.
Definition: Module.cpp:286
static uint8_t flipBits(uint8_t b)
Function to reflect bits within a byte.
Definition: Module.cpp:493
uint8_t SPIreadCommand
Basic SPI read command. Defaults to 0x00.
Definition: Module.h:87
RADIOLIB_PIN_TYPE getIrq() const
Access method to get the pin number of interrupt/GPIO.
Definition: Module.h:228
void attachInterrupt(RADIOLIB_PIN_TYPE interruptNum, void(*userFunc)(void), RADIOLIB_INTERRUPT_STATUS mode)
Arduino core attachInterrupt override.
Definition: Module.cpp:360
void SPIwriteRegisterBurst(uint8_t reg, uint8_t *data, uint8_t numBytes)
SPI burst write method.
Definition: Module.cpp:199
void end()
Arduino core SPI end override.
Definition: Module.cpp:454
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:203
static void hexdump(uint8_t *data, size_t len)
Function to dump data as hex into the debug port.
Definition: Module.cpp:508
void init()
Initialize low-level module control.
Definition: Module.cpp:107
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:130
RADIOLIB_PIN_TYPE getRst() const
Access method to get the pin number of hardware reset pin.
Definition: Module.h:235
RADIOLIB_PIN_TYPE getCs() const
Access method to get the pin number of SPI chip select.
Definition: Module.h:221
uint8_t SPIwriteCommand
Basic SPI write command. Defaults to 0x80.
Definition: Module.h:92
RADIOLIB_PIN_TYPE getGpio() const
Access method to get the pin number of second interrupt/GPIO.
Definition: Module.h:242
void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t *dataOut, uint8_t *dataIn, uint8_t numBytes)
SPI single transfer method.
Definition: Module.cpp:207
void delay(uint32_t ms)
Arduino core delay override.
Definition: Module.cpp:383
uint32_t micros()
Arduino core micros override.
Definition: Module.cpp:404
void begin()
Arduino core SPI begin override.
Definition: Module.cpp:418
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:272
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:333