diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 4c0e15ed..5a388152 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -390,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); } @@ -468,7 +472,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); diff --git a/src/modules/RF69/RF69.h b/src/modules/RF69/RF69.h index 42c36b14..7e13deb6 100644 --- a/src/modules/RF69/RF69.h +++ b/src/modules/RF69/RF69.h @@ -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.