[SX127x] Added check for LoRa header CRC mismatch ()

This commit is contained in:
jgromes 2020-11-19 17:07:32 +01:00
parent 9b5eed83d2
commit c127712c5e
5 changed files with 17 additions and 2 deletions

View file

@ -283,6 +283,11 @@
*/
#define ERR_INVALID_ENCODING -23
/*!
\brief LoRa packet header has been damaged.
*/
#define ERR_LORA_HEADER_DAMAGED -24
// RF69-specific status codes
/*!

View file

@ -361,6 +361,7 @@ float SX1272::getRSSI() {
int16_t SX1272::setCRC(bool enableCRC) {
if(getActiveModem() == SX127X_LORA) {
// set LoRa CRC
SX127x::_crcEnabled = enableCRC;
if(enableCRC) {
return(_mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_2, SX1272_RX_CRC_MODE_ON, 2, 2));
} else {

View file

@ -439,6 +439,7 @@ float SX1278::getRSSI() {
int16_t SX1278::setCRC(bool enableCRC) {
if(getActiveModem() == SX127X_LORA) {
// set LoRa CRC
SX127x::_crcEnabled = enableCRC;
if(enableCRC) {
return(_mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_2, SX1278_RX_CRC_MODE_ON, 2, 2));
} else {

View file

@ -490,11 +490,18 @@ int16_t SX127x::readData(uint8_t* data, size_t len) {
length = getPacketLength();
}
// check integrity CRC
// check packet header integrity
if(_crcEnabled && (_mod->SPIgetRegValue(SX127X_REG_HOP_CHANNEL, 6, 6)) == 0) {
// CRC is disabled according to packet header and enabled according to user
// most likely damaged packet header
clearIRQFlags();
return(ERR_LORA_HEADER_DAMAGED);
}
// check payload CRC
if(_mod->SPIgetRegValue(SX127X_REG_IRQ_FLAGS, 5, 5) == SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR) {
// clear interrupt flags
clearIRQFlags();
return(ERR_CRC_MISMATCH);
}

View file

@ -950,6 +950,7 @@ class SX127x: public PhysicalLayer {
float _br = 0;
float _rxBw = 0;
bool _ook = false;
bool _crcEnabled = false;
int16_t setFrequencyRaw(float newFreq);
int16_t config();