From 59434cb0251b2cdf3c6fb44ff0cacd4acfebac25 Mon Sep 17 00:00:00 2001 From: jgromes Date: Mon, 6 Jul 2020 11:13:24 +0200 Subject: [PATCH] [RF69] Synced parameters of all FSK modules --- examples/RF69/RF69_Settings/RF69_Settings.ino | 3 ++- src/modules/RF69/RF69.cpp | 25 +++++++++++++++---- src/modules/RF69/RF69.h | 15 +++++++++-- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/examples/RF69/RF69_Settings/RF69_Settings.ino b/examples/RF69/RF69_Settings/RF69_Settings.ino index 49c23e80..f936ee2e 100644 --- a/examples/RF69/RF69_Settings/RF69_Settings.ino +++ b/examples/RF69/RF69_Settings/RF69_Settings.ino @@ -58,7 +58,8 @@ void setup() { // frequency deviation: 60.0 kHz // Rx bandwidth: 250.0 kHz // output power: 17 dBm - state = radio2.begin(868.0, 300.0, 60.0, 250.0, 17); + // preamble length: 32 bits + state = radio2.begin(868.0, 300.0, 60.0, 250.0, 17, 32); if (state == ERR_NONE) { Serial.println(F("success!")); } else { diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 263541a3..ddffc532 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -5,7 +5,7 @@ RF69::RF69(Module* module) : PhysicalLayer(RF69_FREQUENCY_STEP_SIZE, RF69_MAX_PA _mod = module; } -int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power) { +int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t preambleLen) { // set module properties _mod->init(RADIOLIB_USE_SPI); Module::pinMode(_mod->getIrq(), INPUT); @@ -71,21 +71,25 @@ int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t powe state = setOutputPower(power); RADIOLIB_ASSERT(state); + // configure default preamble length + state = setPreambleLength(preambleLen); + RADIOLIB_ASSERT(state); + // set default packet length mode state = variablePacketLengthMode(); RADIOLIB_ASSERT(state); - // default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library - uint8_t syncWord[] = {0x2D, 0x01}; + // set default sync word + uint8_t syncWord[] = {0x12, 0xAD}; state = setSyncWord(syncWord, sizeof(syncWord)); RADIOLIB_ASSERT(state); // set default data shaping - state = setDataShaping(0); + state = setDataShaping(RADIOLIB_SHAPING_NONE); RADIOLIB_ASSERT(state); // set default encoding - state = setEncoding(0); + state = setEncoding(RADIOLIB_ENCODING_NRZ); RADIOLIB_ASSERT(state); // set CRC on by default @@ -580,6 +584,17 @@ int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) { return(ERR_NONE); } +int16_t RF69::setPreambleLength(uint8_t preambleLen) { + // RF69 configures preamble length in bytes + if(preambleLen % 8 != 0) { + return(ERR_INVALID_PREAMBLE_LENGTH); + } + + uint8_t preLenBytes = preambleLen / 8; + _mod->SPIwriteRegister(RF69_REG_PREAMBLE_MSB, 0x00); + return(_mod->SPIsetRegValue(RF69_REG_PREAMBLE_LSB, preLenBytes)); +} + int16_t RF69::setNodeAddress(uint8_t nodeAddr) { // enable address filtering (node only) int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE, 2, 1); diff --git a/src/modules/RF69/RF69.h b/src/modules/RF69/RF69.h index a87752f0..63b63513 100644 --- a/src/modules/RF69/RF69.h +++ b/src/modules/RF69/RF69.h @@ -457,11 +457,13 @@ class RF69: public PhysicalLayer { \param rxBw Receiver bandwidth in kHz. Defaults to 125.0 kHz. - \param power Output power in dBm. Defaults to 13 dBm. + \param power Output power in dBm. Defaults to 10 dBm. + + \param preambleLen Preamble Length in bits. Defaults to 16 bits. \returns \ref status_codes */ - int16_t begin(float freq = 434.0, float br = 48.0, float freqDev = 50.0, float rxBw = 125.0, int8_t power = 13); + int16_t begin(float freq = 434.0, float br = 48.0, float freqDev = 50.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. @@ -670,6 +672,15 @@ class RF69: public PhysicalLayer { */ int16_t setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits = 0); + /*! + \brief Sets preamble length. + + \param preambleLen Preamble length to be set (in bits), allowed values: 16, 24, 32, 48, 64, 96, 128 and 192. + + \returns \ref status_codes + */ + int16_t setPreambleLength(uint8_t preambleLen); + /*! \brief Sets node address. Calling this method will also enable address filtering for node address only.