From 57fab02e2047c9748281f9fb0d550a37dae484a0 Mon Sep 17 00:00:00 2001 From: jgromes Date: Fri, 22 Nov 2019 13:29:33 +0100 Subject: [PATCH] [RF69] Extracted common packet mode code --- src/modules/RF69/RF69.cpp | 71 +++++++++++++++------------------------ src/modules/RF69/RF69.h | 5 +-- 2 files changed, 29 insertions(+), 47 deletions(-) diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 1c308030..1f236485 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -9,7 +9,7 @@ RF69::RF69(Module* module) : PhysicalLayer(RF69_CRYSTAL_FREQ, RF69_DIV_EXPONENT, _promiscuous = false; - _syncWordLength = RF69_DEFAULT_SYNC_WORD_LENGTH; + _syncWordLength = 2; } int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) { @@ -92,7 +92,7 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe } // default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library - uint8_t syncWord[] = RF69_DEFAULT_SYNC_WORD; + uint8_t syncWord[] = {0x2D, 0x01}; state = setSyncWord(syncWord, sizeof(syncWord)); if(state != ERR_NONE) { return(state); @@ -506,7 +506,7 @@ int16_t RF69::setOutputPower(int8_t power) { int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) { // check constraints - if((maxErrBits > 7) || (len > RF69_MAX_SYNC_WORD_LENGTH)) { + if((maxErrBits > 7) || (len > 8)) { return(ERR_INVALID_SYNC_WORD); } @@ -603,49 +603,11 @@ size_t RF69::getPacketLength(bool update) { } int16_t RF69::fixedPacketLengthMode(uint8_t len) { - if (len > RF69_MAX_PACKET_LENGTH) { - return(ERR_PACKET_TOO_LONG); - } - - // set to fixed packet length - int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_FIXED, 7, 7); - if (state != ERR_NONE) { - return(state); - } - - // set length to register - state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len); - if (state != ERR_NONE) { - return(state); - } - - // all went well: cache the reg value - _packetLengthConfig = RF69_PACKET_FORMAT_FIXED; - - return(state); + return(setPacketMode(RF69_PACKET_FORMAT_FIXED, len)); } int16_t RF69::variablePacketLengthMode(uint8_t maxLen) { - if (maxLen > RF69_MAX_PACKET_LENGTH) { - return(ERR_PACKET_TOO_LONG); - } - - // set to variable packet length - int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_VARIABLE, 7, 7); - if (state != ERR_NONE) { - return(state); - } - - // set max length to register - state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, maxLen); - if (state != ERR_NONE) { - return(state); - } - - // all went well: cache the reg value - _packetLengthConfig = RF69_PACKET_FORMAT_VARIABLE; - - return(state); + return(setPacketMode(RF69_PACKET_FORMAT_VARIABLE, maxLen)); } int16_t RF69::enableSyncWordFiltering(uint8_t maxErrBits) { @@ -792,6 +754,29 @@ int16_t RF69::config() { return(ERR_NONE); } +int16_t RF69::setPacketMode(uint8_t mode, uint8_t len) { + // check length + if (len > RF69_MAX_PACKET_LENGTH) { + return(ERR_PACKET_TOO_LONG); + } + + // set to fixed packet length + int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, mode, 7, 7); + if (state != ERR_NONE) { + return(state); + } + + // set length to register + state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len); + if (state != ERR_NONE) { + return(state); + } + + // update the cached value + _packetLengthConfig = mode; + return(state); +} + int16_t RF69::setMode(uint8_t mode) { return(_mod->SPIsetRegValue(RF69_REG_OP_MODE, mode, 4, 2)); } diff --git a/src/modules/RF69/RF69.h b/src/modules/RF69/RF69.h index 992cc17e..fbe8abb2 100644 --- a/src/modules/RF69/RF69.h +++ b/src/modules/RF69/RF69.h @@ -10,10 +10,6 @@ #define RF69_CRYSTAL_FREQ 32.0 #define RF69_DIV_EXPONENT 19 #define RF69_MAX_PACKET_LENGTH 64 -#define RF69_MAX_PREAMBLE_LENGTH 4 -#define RF69_MAX_SYNC_WORD_LENGTH 8 -#define RF69_DEFAULT_SYNC_WORD_LENGTH 2 -#define RF69_DEFAULT_SYNC_WORD { 0x2D, 0x01 } // RF69 register map #define RF69_REG_FIFO 0x00 @@ -781,6 +777,7 @@ class RF69: public PhysicalLayer { int16_t config(); int16_t directMode(); + int16_t setPacketMode(uint8_t mode, uint8_t len); #ifndef RADIOLIB_GODMODE private: