129 RFM95(
int device_index = 0);
136 RFM95(std::unique_ptr<SPIInterface> spi_interface);
175 void setTxPower(
int level,
bool use_pa_boost =
true);
274 void setLNA(
int lna_gain = -1,
bool lna_boost =
true);
382 bool send(
const std::vector<uint8_t> &data,
bool invert_iq =
false);
391 std::vector<uint8_t>
receive(
float timeout = 5.0,
bool invert_iq =
false);
475 void setDIOMapping(uint8_t _dio3 = 0x40, uint8_t _dio4 = 0x00);
499 bool setBeaconMode(
int interval_ms,
const std::vector<uint8_t> &payload);
536 std::unique_ptr<SPIInterface>
spi;
Header file for the CH341SPI class, which implements the SPIInterface for the CH341 USB to SPI adapte...
Class for handling RFM95 LoRa module.
Definition RFM95.hpp:54
static constexpr uint8_t REG_DIO_MAPPING_1
Definition RFM95.hpp:90
static constexpr uint8_t PA_BOOST
Definition RFM95.hpp:103
std::vector< uint8_t > receive(float timeout=5.0, bool invert_iq=false)
Receive data packet.
Definition RFM95.cpp:443
static constexpr uint8_t MODE_RX_CONTINUOUS
Definition RFM95.hpp:99
void checkOperatingMode()
Check and print current operating mode.
Definition RFM95.cpp:763
static constexpr uint8_t REG_MODEM_CONFIG_3
Definition RFM95.hpp:80
bool getValidHeader()
Check if valid header flag is set.
Definition RFM95.cpp:341
static constexpr uint8_t IRQ_PAYLOAD_CRC_ERROR_MASK
Definition RFM95.hpp:111
static constexpr uint8_t REG_DETECTION_OPTIMIZE
Definition RFM95.hpp:85
void setTxPower(int level, bool use_pa_boost=true)
Set transmit power level.
Definition RFM95.cpp:125
static constexpr uint8_t REG_PREAMBLE_LSB
Definition RFM95.hpp:78
static constexpr uint8_t MODE_STDBY
Definition RFM95.hpp:97
void setLNA(int lna_gain=-1, bool lna_boost=true)
Set LNA gain and boost.
Definition RFM95.cpp:263
bool getAutoAGC()
Check if automatic gain control is enabled.
Definition RFM95.cpp:301
void clearIRQFlagRxDone()
Clear RX done flag.
Definition RFM95.cpp:321
static constexpr uint8_t REG_IRQ_FLAGS
Definition RFM95.hpp:71
void sleepMode()
Set sleep mode.
Definition RFM95.cpp:556
static constexpr uint8_t REG_FREQ_ERROR_LSB
Definition RFM95.hpp:83
void setDIOMapping(uint8_t _dio3=0x40, uint8_t _dio4=0x00)
Configure DIO pins for TX/RX indication.
Definition RFM95.cpp:645
static constexpr uint8_t REG_FIFO_ADDR_PTR
Definition RFM95.hpp:66
~RFM95()
Destructor.
Definition RFM95.cpp:40
static constexpr uint8_t IRQ_RX_TIMEOUT_MASK
Definition RFM95.hpp:108
float getBandwidth()
Get current bandwidth in kHz.
Definition RFM95.cpp:194
bool calibrateTemperature(float actual_temp)
Calibrate temperature sensor with a reference temperature.
Definition RFM95.cpp:662
bool getTxDone()
Check if TX done flag is set.
Definition RFM95.cpp:331
void clearIRQFlags()
Clear all IRQ flags.
Definition RFM95.cpp:306
static constexpr uint8_t MODE_SLEEP
Definition RFM95.hpp:96
bool getRxError()
Check if RX error flag is set.
Definition RFM95.cpp:336
static constexpr uint8_t REG_DIO_MAPPING_2
Definition RFM95.hpp:91
void setInvertIQ(bool invert=false)
Set IQ inversion (used for LoRaWAN downlinks)
Definition RFM95.cpp:232
void standbyMode()
Set standby mode.
Definition RFM95.cpp:551
float getRSSI()
Get current RSSI in dBm.
Definition RFM95.cpp:598
static constexpr uint8_t REG_INVERTIQ
Definition RFM95.hpp:86
void setSpreadingFactor(int sf)
Set spreading factor (6-12)
Definition RFM95.cpp:149
void receiveMode()
Put the module in continuous receive mode.
Definition RFM95.cpp:626
static constexpr uint8_t DIO4_RX_DONE
Definition RFM95.hpp:120
static constexpr uint8_t REG_FRF_LSB
Definition RFM95.hpp:61
std::vector< uint8_t > readPayload()
Read received data packet.
Definition RFM95.cpp:578
static constexpr uint8_t IRQ_CAD_DETECTED_MASK
Definition RFM95.hpp:107
void stopBeaconMode()
Stop beacon mode.
Definition RFM95.cpp:758
int getSpreadingFactor()
Get current spreading factor.
Definition RFM95.cpp:169
static constexpr uint8_t REG_FRF_MSB
Definition RFM95.hpp:59
bool begin()
Initialize RFM95 module.
Definition RFM95.cpp:45
static constexpr uint8_t REG_PREAMBLE_MSB
Definition RFM95.hpp:77
uint8_t readRegister(uint8_t address)
Read a register value.
Definition RFM95.cpp:609
void setCodingRate(int denominator)
Set coding rate denominator (5-8, giving rates of 4/5, 4/6, 4/7, 4/8)
Definition RFM95.cpp:202
void resetPtrRx()
Reset RX pointer.
Definition RFM95.cpp:563
static constexpr uint8_t MODE_TX
Definition RFM95.hpp:98
static constexpr uint8_t REG_SYNC_WORD
Definition RFM95.hpp:88
uint8_t getFifoRxCurrentAddr()
Get current RX FIFO address.
Definition RFM95.cpp:568
static constexpr uint8_t IRQ_RX_DONE_MASK
Definition RFM95.hpp:112
static constexpr uint8_t REG_MODEM_CONFIG_1
Definition RFM95.hpp:75
float getSNR()
Get last packet SNR in dB.
Definition RFM95.cpp:603
float getFrequency()
Get current frequency in MHz.
Definition RFM95.cpp:109
uint8_t getSyncWord()
Get current sync word.
Definition RFM95.cpp:258
static constexpr uint8_t REG_RX_NB_BYTES
Definition RFM95.hpp:72
bool testCommunication()
Test basic SPI communication.
Definition RFM95.cpp:796
static constexpr uint8_t REG_FIFO_RX_BASE_ADDR
Definition RFM95.hpp:68
static constexpr uint8_t REG_OP_MODE
Definition RFM95.hpp:58
static constexpr uint8_t MODE_RX_SINGLE
Definition RFM95.hpp:100
static constexpr uint8_t REG_INVERTIQ2
Definition RFM95.hpp:89
int getCodingRate()
Get current coding rate denominator.
Definition RFM95.cpp:212
bool send(const std::vector< uint8_t > &data, bool invert_iq=false)
Send data packet.
Definition RFM95.cpp:376
static constexpr uint8_t REG_PA_DAC
Definition RFM95.hpp:93
static constexpr uint8_t REG_FRF_MID
Definition RFM95.hpp:60
static constexpr uint8_t REG_OCP
Definition RFM95.hpp:64
bool getCADDone()
Check if CAD done flag is set.
Definition RFM95.cpp:346
static constexpr uint8_t DIO3_TX_DONE
Definition RFM95.hpp:119
std::unique_ptr< SPIInterface > spi
Unique pointer to SPI interface implementation.
Definition RFM95.hpp:536
void checkIRQFlags()
Check and print IRQ flags.
Definition RFM95.cpp:771
static constexpr uint8_t REG_PAYLOAD_LENGTH
Definition RFM95.hpp:79
void setPreambleLength(int length)
Set preamble length (6-65535)
Definition RFM95.cpp:219
static constexpr uint8_t REG_RSSI_WIDEBAND
Definition RFM95.hpp:84
uint8_t readVersionRegister()
Read VERSION register (0x42) directly.
Definition RFM95.cpp:808
uint8_t getRxNbBytes()
Get number of received bytes.
Definition RFM95.cpp:573
void end()
Close the connection.
Definition RFM95.cpp:94
static constexpr uint8_t DIO0_RX_DONE
Definition RFM95.hpp:116
static constexpr uint8_t REG_FREQ_ERROR_MSB
Definition RFM95.hpp:81
static constexpr uint8_t DIO1_RX_TIMEOUT
Definition RFM95.hpp:118
static constexpr uint8_t IRQ_VALID_HEADER_MASK
Definition RFM95.hpp:110
static constexpr uint8_t REG_PKT_SNR_VALUE
Definition RFM95.hpp:73
void printRegisters()
Print key registers for debugging.
Definition RFM95.cpp:785
static constexpr uint8_t REG_IRQ_FLAGS_MASK
Definition RFM95.hpp:70
static constexpr uint8_t REG_FREQ_ERROR_MID
Definition RFM95.hpp:82
uint8_t getIRQFlags()
Get current IRQ flags.
Definition RFM95.cpp:311
bool setBeaconMode(int interval_ms, const std::vector< uint8_t > &payload)
Configure beacon mode with automatic periodic transmission.
Definition RFM95.cpp:724
void setSyncWord(uint8_t sync_word)
Set sync word.
Definition RFM95.cpp:253
static constexpr uint8_t REG_VERSION
Definition RFM95.hpp:92
bool getPayloadCRCError()
Check if payload CRC error flag is set.
Definition RFM95.cpp:356
static constexpr uint8_t REG_FIFO
Definition RFM95.hpp:57
int getPreambleLength()
Get current preamble length.
Definition RFM95.cpp:225
void clearIRQFlagTxDone()
Clear TX done flag.
Definition RFM95.cpp:316
static constexpr uint8_t DIO0_TX_DONE
Definition RFM95.hpp:117
static constexpr uint8_t REG_FIFO_RX_CURRENT_ADDR
Definition RFM95.hpp:69
bool getRxDone()
Check if RX done flag is set.
Definition RFM95.cpp:326
static constexpr uint8_t REG_PKT_RSSI_VALUE
Definition RFM95.hpp:74
static constexpr uint8_t REG_DETECTION_THRESHOLD
Definition RFM95.hpp:87
void setLoRaMode(bool enable=true)
Enable or disable LoRa mode.
Definition RFM95.cpp:361
float readTemperature()
Read calibrated temperature.
Definition RFM95.cpp:691
void setAutoAGC(bool enable)
Enable or disable automatic gain control.
Definition RFM95.cpp:289
static constexpr uint8_t REG_MODEM_CONFIG_2
Definition RFM95.hpp:76
static constexpr uint8_t IRQ_TX_TIMEOUT_MASK
Definition RFM95.hpp:113
static constexpr uint8_t IRQ_TX_DONE_MASK
Definition RFM95.hpp:109
int getTxPower()
Get current transmit power level.
Definition RFM95.cpp:139
static constexpr uint8_t REG_PA_CONFIG
Definition RFM95.hpp:62
uint8_t getLNA()
Get current LNA settings.
Definition RFM95.cpp:284
void setBandwidth(float bw_khz)
Set bandwidth in kHz (7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125, 250, 500)
Definition RFM95.cpp:175
static constexpr uint8_t REG_LNA
Definition RFM95.hpp:65
static constexpr uint8_t DIO_RX_PIN
Definition RFM95.hpp:122
static constexpr uint8_t REG_PA_RAMP
Definition RFM95.hpp:63
bool getInvertIQ()
Check if IQ inversion is enabled.
Definition RFM95.cpp:248
static constexpr uint8_t REG_FIFO_TX_BASE_ADDR
Definition RFM95.hpp:67
void writeRegister(uint8_t address, uint8_t value)
Write a register value.
Definition RFM95.cpp:620
static constexpr uint8_t DIO_TX_PIN
Definition RFM95.hpp:121
bool getCADDetected()
Check if CAD detected flag is set.
Definition RFM95.cpp:351
void setContinuousReceive()
Set continuous receive mode.
Definition RFM95.cpp:522
void setFrequency(float freq_mhz)
Set frequency in MHz.
Definition RFM95.cpp:99
static constexpr uint8_t IRQ_CAD_DONE_MASK
Definition RFM95.hpp:106