From 08f92cdd291d3aa2e394ca7843eadc22a927055c Mon Sep 17 00:00:00 2001 From: StevenCellist Date: Fri, 16 Aug 2024 00:04:52 +0200 Subject: [PATCH] [SX127x] Generalize IRQ checks --- src/modules/SX127x/SX127x.cpp | 25 +++++++++++++++++++++---- src/modules/SX127x/SX127x.h | 6 +++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp index eaa8c46f..621d2ee8 100644 --- a/src/modules/SX127x/SX127x.cpp +++ b/src/modules/SX127x/SX127x.cpp @@ -1302,10 +1302,27 @@ int16_t SX127x::irqRxDoneRxTimeout(uint32_t &irqFlags, uint32_t &irqMask) { return(RADIOLIB_ERR_NONE); } -bool SX127x::isRxTimeout() { - uint16_t irq = getIRQFlags(); - bool rxTimedOut = irq & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_TIMEOUT; - return(rxTimedOut); +bool SX127x::isIrqSet(uint8_t irq) { + uint16_t flags = getIRQFlags(); + switch(irq) { + case RADIOLIB_IRQ_TX_DONE: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_TX_DONE); + case RADIOLIB_IRQ_RX_DONE: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_DONE); + case RADIOLIB_IRQ_HEADER_VALID: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_VALID_HEADER); + case RADIOLIB_IRQ_CRC_ERR: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR); + case RADIOLIB_IRQ_CAD_DONE: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DONE); + case RADIOLIB_IRQ_CAD_DETECTED: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DETECTED); + case RADIOLIB_IRQ_TIMEOUT: + return(flags & RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_TIMEOUT); + default: + return(false); + } + return(false); } int16_t SX127x::setCrcFiltering(bool enable) { diff --git a/src/modules/SX127x/SX127x.h b/src/modules/SX127x/SX127x.h index 7e8d5e5a..34dba0b8 100644 --- a/src/modules/SX127x/SX127x.h +++ b/src/modules/SX127x/SX127x.h @@ -1073,10 +1073,10 @@ class SX127x: public PhysicalLayer { int16_t irqRxDoneRxTimeout(uint32_t &irqFlags, uint32_t &irqMask) override; /*! - \brief Check whether the IRQ bit for RxTimeout is set - \returns Whether RxTimeout IRQ is set + \brief Check whether a specific IRQ bit is set (e.g. RxTimeout, CadDone). + \returns Whether requested IRQ is set. */ - bool isRxTimeout() override; + bool isIrqSet(uint8_t irq) override; /*! \brief Enable CRC filtering and generation.