From feb9aaa227190720565e82e720d6a3227e6b8c1b Mon Sep 17 00:00:00 2001
From: jgromes <jan.gromes@gmail.com>
Date: Wed, 16 Nov 2022 19:21:55 +0100
Subject: [PATCH] [SX127x] Added option to keep received data despite CRC error
 (#610)

---
 src/modules/SX127x/SX127x.cpp | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp
index 3072d925..a3a94345 100644
--- a/src/modules/SX127x/SX127x.cpp
+++ b/src/modules/SX127x/SX127x.cpp
@@ -621,20 +621,18 @@ int16_t SX127x::readData(uint8_t* data, size_t len) {
     length = len;
   }
 
+  // check payload CRC
+  int16_t state = RADIOLIB_ERR_NONE;
+  if(_mod->SPIgetRegValue(RADIOLIB_SX127X_REG_IRQ_FLAGS, 5, 5) == RADIOLIB_SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR) {
+    state = RADIOLIB_ERR_CRC_MISMATCH;
+  }
+
   if(modem == RADIOLIB_SX127X_LORA) {
     // check packet header integrity
-    if(_crcEnabled && (_mod->SPIgetRegValue(RADIOLIB_SX127X_REG_HOP_CHANNEL, 6, 6)) == 0) {
+    if(_crcEnabled && (state == RADIOLIB_ERR_NONE)  && (_mod->SPIgetRegValue(RADIOLIB_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(RADIOLIB_ERR_LORA_HEADER_DAMAGED);
-    }
-
-    // check payload CRC
-    if(_mod->SPIgetRegValue(RADIOLIB_SX127X_REG_IRQ_FLAGS, 5, 5) == RADIOLIB_SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR) {
-      // clear interrupt flags
-      clearIRQFlags();
-      return(RADIOLIB_ERR_CRC_MISMATCH);
+      state = RADIOLIB_ERR_LORA_HEADER_DAMAGED;
     }
 
   } else if(modem == RADIOLIB_SX127X_FSK_OOK) {
@@ -659,7 +657,7 @@ int16_t SX127x::readData(uint8_t* data, size_t len) {
   // clear interrupt flags
   clearIRQFlags();
 
-  return(RADIOLIB_ERR_NONE);
+  return(state);
 }
 
 int16_t SX127x::startChannelScan() {