From b599a35879ab36f1ba5326ba26a2a779450ac297 Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Wed, 6 Nov 2019 01:41:08 +0100 Subject: [PATCH 1/6] Using defined debug port and not Serial --- src/modules/RF69.cpp | 12 ++++++------ src/modules/SX1231.cpp | 12 ++++++------ src/modules/SX127x.cpp | 32 ++++++++++++++++---------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/modules/RF69.cpp b/src/modules/RF69.cpp index 8e7f56b0..029e8eb8 100644 --- a/src/modules/RF69.cpp +++ b/src/modules/RF69.cpp @@ -19,15 +19,15 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe flagFound = true; } else { #ifdef RADIOLIB_DEBUG - Serial.print(F("RF69 not found! (")); - Serial.print(i + 1); - Serial.print(F(" of 10 tries) RF69_REG_VERSION == ")); + RADIOLIB_DEBUG_PRINT(F("RF69 not found! (")); + RADIOLIB_DEBUG_PRINT(i + 1); + RADIOLIB_DEBUG_PRINT(F(" of 10 tries) RF69_REG_VERSION == ")); char buffHex[7]; sprintf(buffHex, "0x%04X", version); - Serial.print(buffHex); - Serial.print(F(", expected 0x0024")); - Serial.println(); + RADIOLIB_DEBUG_PRINT(buffHex); + RADIOLIB_DEBUG_PRINT(F(", expected 0x0024")); + RADIOLIB_DEBUG_PRINTLN(); #endif delay(1000); i++; diff --git a/src/modules/SX1231.cpp b/src/modules/SX1231.cpp index 63767987..c5cdf00b 100644 --- a/src/modules/SX1231.cpp +++ b/src/modules/SX1231.cpp @@ -18,15 +18,15 @@ int16_t SX1231::begin(float freq, float br, float rxBw, float freqDev, int8_t po _chipRevision = version; } else { #ifdef RADIOLIB_DEBUG - Serial.print(F("SX127x not found! (")); - Serial.print(i + 1); - Serial.print(F(" of 10 tries) SX127X_REG_VERSION == ")); + RADIOLIB_DEBUG_PRINT(F("SX127x not found! (")); + RADIOLIB_DEBUG_PRINT(i + 1); + RADIOLIB_DEBUG_PRINT(F(" of 10 tries) SX127X_REG_VERSION == ")); char buffHex[7]; sprintf(buffHex, "0x%04X", version); - Serial.print(buffHex); - Serial.print(F(", expected 0x0021 / 0x0022 / 0x0023")); - Serial.println(); + RADIOLIB_DEBUG_PRINT(buffHex); + RADIOLIB_DEBUG_PRINT(F(", expected 0x0021 / 0x0022 / 0x0023")); + RADIOLIB_DEBUG_PRINTLN(); #endif delay(1000); i++; diff --git a/src/modules/SX127x.cpp b/src/modules/SX127x.cpp index 72fa605a..b3e8603a 100644 --- a/src/modules/SX127x.cpp +++ b/src/modules/SX127x.cpp @@ -955,16 +955,16 @@ bool SX127x::findChip(uint8_t ver) { flagFound = true; } else { #ifdef RADIOLIB_DEBUG - Serial.print(F("SX127x not found! (")); - Serial.print(i + 1); - Serial.print(F(" of 10 tries) SX127X_REG_VERSION == ")); + RADIOLIB_DEBUG_PRINT(F("SX127x not found! (")); + RADIOLIB_DEBUG_PRINT(i + 1); + RADIOLIB_DEBUG_PRINT(F(" of 10 tries) SX127X_REG_VERSION == ")); char buffHex[5]; sprintf(buffHex, "0x%02X", version); - Serial.print(buffHex); - Serial.print(F(", expected 0x00")); - Serial.print(ver, HEX); - Serial.println(); + RADIOLIB_DEBUG_PRINT(buffHex); + RADIOLIB_DEBUG_PRINT(F(", expected 0x00")); + RADIOLIB_DEBUG_PRINT(ver, HEX); + RADIOLIB_DEBUG_PRINTLN(); #endif delay(1000); i++; @@ -1013,23 +1013,23 @@ void SX127x::clearFIFO(size_t count) { #ifdef RADIOLIB_DEBUG void SX127x::regDump() { - Serial.println(); - Serial.println(F("ADDR\tVALUE")); + RADIOLIB_DEBUG_PRINTLN(); + RADIOLIB_DEBUG_PRINTLN(F("ADDR\tVALUE")); for(uint16_t addr = 0x01; addr <= 0x70; addr++) { if(addr <= 0x0F) { - Serial.print(F("0x0")); + RADIOLIB_DEBUG_PRINT(F("0x0")); } else { - Serial.print(F("0x")); + RADIOLIB_DEBUG_PRINT(F("0x")); } - Serial.print(addr, HEX); - Serial.print('\t'); + RADIOLIB_DEBUG_PRINT(addr, HEX); + RADIOLIB_DEBUG_PRINT('\t'); uint8_t val = _mod->SPIreadRegister(addr); if(val <= 0x0F) { - Serial.print(F("0x0")); + RADIOLIB_DEBUG_PRINT(F("0x0")); } else { - Serial.print(F("0x")); + RADIOLIB_DEBUG_PRINT(F("0x")); } - Serial.println(val, HEX); + RADIOLIB_DEBUG_PRINTLN(val, HEX); delay(50); } From 7e42f77c95d6b5c6f36b7c555ae4d66091c48d61 Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Wed, 6 Nov 2019 02:34:40 +0100 Subject: [PATCH 2/6] Added length mode configuration methods and handling --- src/modules/CC1101.cpp | 57 +++++++++++++++++++++++++++++++++++------- src/modules/CC1101.h | 19 ++++++++++++++ 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp index 42fe5d7f..905fcac9 100644 --- a/src/modules/CC1101.cpp +++ b/src/modules/CC1101.cpp @@ -3,6 +3,7 @@ CC1101::CC1101(Module* module) : PhysicalLayer(CC1101_CRYSTAL_FREQ, CC1101_DIV_EXPONENT, CC1101_MAX_PACKET_LENGTH) { _mod = module; _packetLengthQueried = false; + _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; } int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t power) { @@ -20,15 +21,15 @@ int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t po flagFound = true; } else { #ifdef RADIOLIB_DEBUG - Serial.print(F("CC1101 not found! (")); - Serial.print(i + 1); - Serial.print(F(" of 10 tries) CC1101_REG_VERSION == ")); + RADIOLIB_DEBUG_PRINT(F("CC1101 not found! (")); + RADIOLIB_DEBUG_PRINT(i + 1); + RADIOLIB_DEBUG_PRINT(F(" of 10 tries) CC1101_REG_VERSION == ")); char buffHex[7]; sprintf(buffHex, "0x%04X", version); - Serial.print(buffHex); - Serial.print(F(", expected 0x0014")); - Serial.println(); + RADIOLIB_DEBUG_PRINT(buffHex); + RADIOLIB_DEBUG_PRINT(F(", expected 0x0014")); + RADIOLIB_DEBUG_PRINTLN(); #endif delay(1000); i++; @@ -192,8 +193,10 @@ int16_t CC1101::startTransmit(uint8_t* data, size_t len, uint8_t addr) { return(state); } - // write packet length - SPIwriteRegister(CC1101_REG_FIFO, len); + // optionally write packet length + if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) { + SPIwriteRegister(CC1101_REG_FIFO, len); + } // check address filtering uint8_t filter = SPIgetRegValue(CC1101_REG_PKTCTRL1, 1, 0); @@ -477,7 +480,11 @@ uint8_t CC1101::getLQI() { size_t CC1101::getPacketLength(bool update) { if(!_packetLengthQueried && update) { - _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); + + uint8_t format = SPIgetRegValue(CC1101_REG_PKTCTRL0, 1, 0); + if (format == CC1101_LENGTH_CONFIG_VARIABLE) { + _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); + } _packetLengthQueried = true; } @@ -497,6 +504,38 @@ int16_t CC1101::config() { return(state); } +int16_t CC1101::fixedPacketLengthMode(uint8_t len) { + if (len > CC1101_MAX_PACKET_LENGTH) { + return(ERR_PACKET_TOO_LONG); + } + + uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0); + if (state != ERR_NONE) { + return(state); + } + + state = SPIsetRegValue(CC1101_REG_PKTLEN, len); + if (state != ERR_NONE) { + return(state); + } +} + +int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { + if (maxLen > CC1101_MAX_PACKET_LENGTH) { + return(ERR_PACKET_TOO_LONG); + } + + uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0); + if (state != ERR_NONE) { + return(state); + } + + state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen); + if (state != ERR_NONE) { + return(state); + } +} + int16_t CC1101::directMode() { // set mode to standby SPIsendCommand(CC1101_CMD_IDLE); diff --git a/src/modules/CC1101.h b/src/modules/CC1101.h index a2060819..c57a7e6d 100644 --- a/src/modules/CC1101.h +++ b/src/modules/CC1101.h @@ -739,6 +739,24 @@ class CC1101: public PhysicalLayer { */ size_t getPacketLength(bool update = true); + /*! + \brief Set modem in fixed packet length mode. + + \param len Packet length. + + \returns \ref status_codes + */ + int16_t fixedPacketLengthMode(uint8_t len = CC1101_MAX_PACKET_LENGTH); + + /*! + \brief Set modem in variable packet length mode. + + \param len Maximum packet length. + + \returns \ref status_codes + */ + int16_t variablePacketLengthMode(uint8_t maxLen = CC1101_MAX_PACKET_LENGTH); + private: Module* _mod; @@ -748,6 +766,7 @@ class CC1101: public PhysicalLayer { size_t _packetLength; bool _packetLengthQueried; + uint8_t _packetLengthConfig; int16_t config(); int16_t directMode(); From 121110d9f469e224d159572ecb5db7b849107cc5 Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Thu, 7 Nov 2019 17:02:32 +0100 Subject: [PATCH 3/6] Update CC1101.cpp Updating _packetLengthConfig and _packetLength properly --- src/modules/CC1101.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp index 905fcac9..f2227774 100644 --- a/src/modules/CC1101.cpp +++ b/src/modules/CC1101.cpp @@ -480,11 +480,12 @@ uint8_t CC1101::getLQI() { size_t CC1101::getPacketLength(bool update) { if(!_packetLengthQueried && update) { - - uint8_t format = SPIgetRegValue(CC1101_REG_PKTCTRL0, 1, 0); - if (format == CC1101_LENGTH_CONFIG_VARIABLE) { + if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) { _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); - } + } else { + _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); + } + _packetLengthQueried = true; } @@ -509,15 +510,22 @@ int16_t CC1101::fixedPacketLengthMode(uint8_t len) { return(ERR_PACKET_TOO_LONG); } - uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0); + // set to fixed packet length + int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0); if (state != ERR_NONE) { return(state); } + // set max length to register state = SPIsetRegValue(CC1101_REG_PKTLEN, len); if (state != ERR_NONE) { return(state); } + + // all went well: cache the reg value + _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; + + return(state); } int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { @@ -525,15 +533,14 @@ int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { return(ERR_PACKET_TOO_LONG); } - uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0); + int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0); if (state != ERR_NONE) { return(state); } + _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen); - if (state != ERR_NONE) { - return(state); - } + return(state); } int16_t CC1101::directMode() { From 47a45fa0097d7cc8fc7196c956e8bafbb309f64d Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Thu, 7 Nov 2019 20:07:31 +0100 Subject: [PATCH 4/6] Moving CC1101::variablePacketLengthMode and CC1101::fixedPacketLengthMode before CC1101::config so as to maintain the same order as in the header file --- src/modules/CC1101.cpp | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp index f2227774..81952792 100644 --- a/src/modules/CC1101.cpp +++ b/src/modules/CC1101.cpp @@ -56,26 +56,36 @@ int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t po return(state); } + // configure bitrate state = setBitRate(br); if(state != ERR_NONE) { return(state); } + // configure default RX bandwidth state = setRxBandwidth(rxBw); if(state != ERR_NONE) { return(state); } + // configure default frequency deviation state = setFrequencyDeviation(freqDev); if(state != ERR_NONE) { return(state); } + // configure default TX output power state = setOutputPower(power); if(state != ERR_NONE) { return(state); } + // set default packet length mode + state = variablePacketLengthMode(); + if (state != ERR_NONE) { + return(state); + } + // flush FIFOs SPIsendCommand(CC1101_CMD_FLUSH_RX); SPIsendCommand(CC1101_CMD_FLUSH_TX); @@ -163,7 +173,7 @@ int16_t CC1101::receiveDirect() { int16_t CC1101::packetMode() { int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL1, CC1101_CRC_AUTOFLUSH_OFF | CC1101_APPEND_STATUS_ON | CC1101_ADR_CHK_NONE, 3, 0); state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_WHITE_DATA_OFF | CC1101_PKT_FORMAT_NORMAL, 6, 4); - state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_CRC_ON | CC1101_LENGTH_CONFIG_VARIABLE, 2, 0); + state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_CRC_ON | _packetLengthConfig, 2, 0); return(state); } @@ -492,19 +502,6 @@ size_t CC1101::getPacketLength(bool update) { return(_packetLength); } -int16_t CC1101::config() { - // enable automatic frequency synthesizer calibration - int16_t state = SPIsetRegValue(CC1101_REG_MCSM0, CC1101_FS_AUTOCAL_IDLE_TO_RXTX, 5, 4); - if(state != ERR_NONE) { - return(state); - } - - // set packet mode - state = packetMode(); - - return(state); -} - int16_t CC1101::fixedPacketLengthMode(uint8_t len) { if (len > CC1101_MAX_PACKET_LENGTH) { return(ERR_PACKET_TOO_LONG); @@ -543,6 +540,19 @@ int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { return(state); } +int16_t CC1101::config() { + // enable automatic frequency synthesizer calibration + int16_t state = SPIsetRegValue(CC1101_REG_MCSM0, CC1101_FS_AUTOCAL_IDLE_TO_RXTX, 5, 4); + if(state != ERR_NONE) { + return(state); + } + + // set packet mode + state = packetMode(); + + return(state); +} + int16_t CC1101::directMode() { // set mode to standby SPIsendCommand(CC1101_CMD_IDLE); From 87bf46ed34447f65bd3ab1dbe75e5e9ae6e0089f Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Thu, 7 Nov 2019 20:14:29 +0100 Subject: [PATCH 5/6] CC1101::fixedPacketFormat now correctly sets _packetLengthConfig --- src/modules/CC1101.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp index 81952792..bbfbb5a2 100644 --- a/src/modules/CC1101.cpp +++ b/src/modules/CC1101.cpp @@ -520,7 +520,7 @@ int16_t CC1101::fixedPacketLengthMode(uint8_t len) { } // all went well: cache the reg value - _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; + _packetLengthConfig = CC1101_LENGTH_CONFIG_FIXED; return(state); } From a2e64f1645a9f6630e7ef2b9ec9abc7e6c335349 Mon Sep 17 00:00:00 2001 From: Federico Maggi Date: Fri, 8 Nov 2019 15:58:13 +0100 Subject: [PATCH 6/6] Added to keywords.txt, comments, reading fixed len properly --- keywords.txt | 2 ++ src/modules/CC1101.cpp | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/keywords.txt b/keywords.txt index 76cf9f20..4968ef5b 100644 --- a/keywords.txt +++ b/keywords.txt @@ -88,6 +88,8 @@ setDataShaping KEYWORD2 setOOK KEYWORD2 setDataShapingOOK KEYWORD2 setCRC KEYWORD2 +variablePacketLengthMode KEYWORD2 +fixedPacketLengthMode KEYWORD2 # RF69-specific setAESKey KEYWORD2 diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp index bbfbb5a2..657400a0 100644 --- a/src/modules/CC1101.cpp +++ b/src/modules/CC1101.cpp @@ -493,7 +493,7 @@ size_t CC1101::getPacketLength(bool update) { if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) { _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); } else { - _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); + _packetLength = _mod->SPIreadRegister(CC1101_REG_PKTLEN); } _packetLengthQueried = true; @@ -513,7 +513,7 @@ int16_t CC1101::fixedPacketLengthMode(uint8_t len) { return(state); } - // set max length to register + // set length to register state = SPIsetRegValue(CC1101_REG_PKTLEN, len); if (state != ERR_NONE) { return(state); @@ -530,13 +530,20 @@ int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { return(ERR_PACKET_TOO_LONG); } + // set to fixed packet length int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0); if (state != ERR_NONE) { return(state); } - _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; + // set max length to register state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen); + if (state != ERR_NONE) { + return(state); + } + + // all went well: cache the reg value + _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE; return(state); }