diff --git a/src/main/drivers/rx/rx_sx127x.c b/src/main/drivers/rx/rx_sx127x.c index aa85fd13aa..3bc605e381 100644 --- a/src/main/drivers/rx/rx_sx127x.c +++ b/src/main/drivers/rx/rx_sx127x.c @@ -445,7 +445,9 @@ uint8_t sx127xGetIrqReason(void) { uint8_t irqFlags = sx127xGetIrqFlags(); sx127xClearIrqFlags(); - if ((irqFlags & SX127X_CLEAR_IRQ_FLAG_TX_DONE)) { + if ((irqFlags & SX127X_CLEAR_IRQ_FLAG_TX_DONE) && (irqFlags & SX127X_CLEAR_IRQ_FLAG_RX_DONE)) { + return 3; + } else if ((irqFlags & SX127X_CLEAR_IRQ_FLAG_TX_DONE)) { return 2; } else if ((irqFlags & SX127X_CLEAR_IRQ_FLAG_RX_DONE)) { return 1; diff --git a/src/main/drivers/rx/rx_sx1280.c b/src/main/drivers/rx/rx_sx1280.c index 7d35d88f2e..7d4c141866 100644 --- a/src/main/drivers/rx/rx_sx1280.c +++ b/src/main/drivers/rx/rx_sx1280.c @@ -418,8 +418,11 @@ void sx1280ClearIrqStatus(const uint16_t irqMask) uint8_t sx1280GetIrqReason(void) { uint16_t irqStatus = sx1280GetIrqStatus(); + sx1280ClearIrqStatus(SX1280_IRQ_RADIO_ALL); - if ((irqStatus & SX1280_IRQ_TX_DONE)) { + if ((irqStatus & SX1280_IRQ_TX_DONE) && (irqStatus & SX1280_IRQ_RX_DONE)) { + return 3; + } else if ((irqStatus & SX1280_IRQ_TX_DONE)) { return 2; } else if ((irqStatus & SX1280_IRQ_RX_DONE)) { return 1; diff --git a/src/main/rx/expresslrs.c b/src/main/rx/expresslrs.c index 4991b06e5a..d5d5ddbccc 100644 --- a/src/main/rx/expresslrs.c +++ b/src/main/rx/expresslrs.c @@ -1073,7 +1073,9 @@ rx_spi_received_e expressLrsDataReceived(uint8_t *payload) } uint8_t irqReason = receiver.rxISR(&isrTimeStampUs); - if (irqReason == ELRS_DIO_TX_DONE) { + if (irqReason == ELRS_DIO_RX_AND_TX_DONE) { + startReceiving(); + } else if (irqReason == ELRS_DIO_TX_DONE) { startReceiving(); } else if (irqReason == ELRS_DIO_RX_DONE) { result = processRFPacket(payload, isrTimeStampUs); diff --git a/src/main/rx/expresslrs_impl.h b/src/main/rx/expresslrs_impl.h index 2655cf2c99..fdc6d85484 100644 --- a/src/main/rx/expresslrs_impl.h +++ b/src/main/rx/expresslrs_impl.h @@ -33,7 +33,8 @@ typedef enum { typedef enum { ELRS_DIO_UNKNOWN = 0, ELRS_DIO_RX_DONE = 1, - ELRS_DIO_TX_DONE = 2 + ELRS_DIO_TX_DONE = 2, + ELRS_DIO_RX_AND_TX_DONE = 3, } dioReason_e; typedef enum {