From 361eba8ebc5cd4aac056451ce98726b1c3399a51 Mon Sep 17 00:00:00 2001 From: James Smith <james@loopj.com> Date: Sat, 26 Mar 2022 12:53:17 -0700 Subject: [PATCH 1/3] Set RX bandwidth correctly for OOK mode --- src/modules/RF69/RF69.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 8b3f441b..11491f67 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -464,7 +464,7 @@ int16_t RF69::setRxBandwidth(float rxBw) { // calculate exponent and mantissa values for receiver bandwidth for(int8_t e = 7; e >= 0; e--) { for(int8_t m = 2; m >= 0; m--) { - float point = (RADIOLIB_RF69_CRYSTAL_FREQ * 1000000.0)/(((4 * m) + 16) * ((uint32_t)1 << (e + 2))); + float point = (RADIOLIB_RF69_CRYSTAL_FREQ * 1000000.0)/(((4 * m) + 16) * ((uint32_t)1 << (e + (_ook ? 3 : 2)))); if(fabs(rxBw - (point / 1000.0)) <= 0.1) { // set Rx bandwidth state = _mod->SPIsetRegValue(RADIOLIB_RF69_REG_RX_BW, (m << 3) | e, 4, 0); From 2b99b6ec86ab787a8e7a0b7eec9d4dca4b0a0eb8 Mon Sep 17 00:00:00 2001 From: James Smith <james@loopj.com> Date: Sat, 26 Mar 2022 14:45:54 -0700 Subject: [PATCH 2/3] Add enableOOK param to RF69::begin, false by default, mirrors SX127x --- src/modules/RF69/RF69.cpp | 6 +++++- src/modules/RF69/RF69.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 11491f67..fdb83ef8 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -9,7 +9,7 @@ Module* RF69::getMod() { return(_mod); } -int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t preambleLen) { +int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t preambleLen, bool enableOOK) { // set module properties _mod->init(); _mod->pinMode(_mod->getIrq(), INPUT); @@ -54,6 +54,10 @@ int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t powe int16_t state = config(); RADIOLIB_ASSERT(state); + // enable/disable OOK + state = setOOK(enableOOK); + RADIOLIB_ASSERT(state); + // configure publicly accessible settings state = setFrequency(freq); RADIOLIB_ASSERT(state); diff --git a/src/modules/RF69/RF69.h b/src/modules/RF69/RF69.h index 8e4afded..3b313830 100644 --- a/src/modules/RF69/RF69.h +++ b/src/modules/RF69/RF69.h @@ -473,7 +473,7 @@ class RF69: public PhysicalLayer { \returns \ref status_codes */ - int16_t begin(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint8_t preambleLen = 16); + int16_t begin(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint8_t preambleLen = 16, bool enableOOK = false); /*! \brief Reset method. Will reset the chip to the default state using RST pin. From 63ba279fd2b6973e52aad9ac87e602673b7ffa5d Mon Sep 17 00:00:00 2001 From: James Smith <james@loopj.com> Date: Mon, 28 Mar 2022 17:28:01 -0700 Subject: [PATCH 3/3] Call setRxBandwidth again if setOOK is called --- src/modules/RF69/RF69.cpp | 10 +++++----- src/modules/RF69/RF69.h | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 1ae6e1dc..5a388152 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -9,7 +9,7 @@ Module* RF69::getMod() { return(_mod); } -int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t preambleLen, bool enableOOK) { +int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t preambleLen) { // set module properties _mod->init(); _mod->pinMode(_mod->getIrq(), INPUT); @@ -54,10 +54,6 @@ int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t powe int16_t state = config(); RADIOLIB_ASSERT(state); - // enable/disable OOK - state = setOOK(enableOOK); - RADIOLIB_ASSERT(state); - // configure publicly accessible settings state = setFrequency(freq); RADIOLIB_ASSERT(state); @@ -394,10 +390,14 @@ int16_t RF69::setOOK(bool enableOOK) { } else { state = _mod->SPIsetRegValue(RADIOLIB_RF69_REG_DATA_MODUL, RADIOLIB_RF69_FSK, 4, 3, 5); } + if(state == RADIOLIB_ERR_NONE) { _ook = enableOOK; } + // call setRxBandwidth again, since register values differ based on OOK mode being enabled + state |= setRxBandwidth(_rxBw); + return(state); } diff --git a/src/modules/RF69/RF69.h b/src/modules/RF69/RF69.h index 34152b0c..7e13deb6 100644 --- a/src/modules/RF69/RF69.h +++ b/src/modules/RF69/RF69.h @@ -473,7 +473,7 @@ class RF69: public PhysicalLayer { \returns \ref status_codes */ - int16_t begin(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint8_t preambleLen = 16, bool enableOOK = false); + int16_t begin(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint8_t preambleLen = 16); /*! \brief Reset method. Will reset the chip to the default state using RST pin. @@ -744,6 +744,7 @@ class RF69: public PhysicalLayer { /*! \brief Enables/disables OOK modulation instead of FSK. + Note: This function calls setRxBandwidth again, since register values differ based on OOK mode being enabled/disabled \param enableOOK Enable (true) or disable (false) OOK.