[SX127x] Added check for LoRa header CRC mismatch (#200)
This commit is contained in:
parent
9b5eed83d2
commit
c127712c5e
5 changed files with 17 additions and 2 deletions
src
|
@ -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
|
||||
|
||||
/*!
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue