diff --git a/src/main/rx/nrf24_cx10.c b/src/main/rx/nrf24_cx10.c index 2434d1259c..322b0f7982 100644 --- a/src/main/rx/nrf24_cx10.c +++ b/src/main/rx/nrf24_cx10.c @@ -32,6 +32,7 @@ #include "drivers/rx_xn297.h" #include "drivers/system.h" +#include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_cx10.h" diff --git a/src/main/rx/nrf24_h8_3d.c b/src/main/rx/nrf24_h8_3d.c index 9ffa1dcf47..8bffc39c52 100644 --- a/src/main/rx/nrf24_h8_3d.c +++ b/src/main/rx/nrf24_h8_3d.c @@ -33,6 +33,7 @@ #include "drivers/rx_xn297.h" #include "drivers/system.h" +#include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_h8_3d.h" diff --git a/src/main/rx/nrf24_inav.c b/src/main/rx/nrf24_inav.c index 35b526f6ac..673a150b98 100644 --- a/src/main/rx/nrf24_inav.c +++ b/src/main/rx/nrf24_inav.c @@ -29,6 +29,7 @@ #include "drivers/rx_nrf24l01.h" #include "drivers/system.h" +#include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_inav.h" diff --git a/src/main/rx/nrf24_syma.c b/src/main/rx/nrf24_syma.c index b08cfaa275..afc2380726 100644 --- a/src/main/rx/nrf24_syma.c +++ b/src/main/rx/nrf24_syma.c @@ -31,6 +31,7 @@ #include "drivers/rx_nrf24l01.h" #include "drivers/system.h" +#include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_syma.h" diff --git a/src/main/rx/nrf24_v202.c b/src/main/rx/nrf24_v202.c index be724469f3..2fca7fd5f1 100644 --- a/src/main/rx/nrf24_v202.c +++ b/src/main/rx/nrf24_v202.c @@ -31,6 +31,7 @@ #include "drivers/rx_nrf24l01.h" #include "drivers/system.h" +#include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_v202.h" diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index 2b26282af6..e60a24bc65 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -200,8 +200,7 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct #ifdef USE_RX_SPI if (feature(FEATURE_RX_SPI)) { rxRefreshRate = 10000; - const rx_spi_type_e spiType = feature(FEATURE_SOFTSPI) ? RX_SPI_SOFTSPI : RX_SPI_HARDSPI; - const bool enabled = rxSpiInit(spiType, rxConfig, &rxRuntimeConfig, &rcReadRawFunc); + const bool enabled = rxSpiInit(rxConfig, &rxRuntimeConfig, &rcReadRawFunc); if (!enabled) { featureClear(FEATURE_RX_SPI); rcReadRawFunc = nullReadRawRC; @@ -354,11 +353,12 @@ bool rxUpdate(uint32_t currentTime) #ifdef USE_RX_SPI if (feature(FEATURE_RX_SPI)) { - rxDataReceived = rxSpiDataReceived(); - if (rxDataReceived) { - rxSignalReceived = true; + const uint8_t frameStatus = rxSpiFrameStatus(); + if (frameStatus & RX_FRAME_COMPLETE) { + rxDataReceived = true; rxIsInFailsafeMode = false; - needRxSignalBefore = currentTime + DELAY_10_HZ; + rxSignalReceived = true; + needRxSignalBefore = currentTime + DELAY_5_HZ; } } #endif diff --git a/src/main/rx/rx_spi.c b/src/main/rx/rx_spi.c index c7397fbfd9..21a4dce23a 100644 --- a/src/main/rx/rx_spi.c +++ b/src/main/rx/rx_spi.c @@ -25,6 +25,10 @@ #include "build/build_config.h" #include "drivers/rx_nrf24l01.h" + +#include "config/config.h" +#include "config/feature.h" + #include "rx/rx.h" #include "rx/rx_spi.h" #include "rx/nrf24_cx10.h" @@ -110,21 +114,23 @@ STATIC_UNIT_TESTED bool rxSpiSetProtocol(rx_spi_protocol_e protocol) * Called from updateRx in rx.c, updateRx called from taskUpdateRxCheck. * If taskUpdateRxCheck returns true, then taskUpdateRxMain will shortly be called. */ -bool rxSpiDataReceived(void) +uint8_t rxSpiFrameStatus(void) { if (protocolDataReceived(rxSpiPayload) == RX_SPI_RECEIVED_DATA) { rxSpiNewPacketAvailable = true; - return true; + return RX_FRAME_COMPLETE; } - return false; + return RX_FRAME_PENDING; } /* * Set and initialize the RX protocol */ -bool rxSpiInit(rx_spi_type_e spiType, const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback) +bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback) { bool ret = false; + + const rx_spi_type_e spiType = feature(FEATURE_SOFTSPI) ? RX_SPI_SOFTSPI : RX_SPI_HARDSPI; rxSpiDeviceInit(spiType); if (rxSpiSetProtocol(rxConfig->rx_spi_protocol)) { protocolInit(rxConfig, rxRuntimeConfig); diff --git a/src/main/rx/rx_spi.h b/src/main/rx/rx_spi.h index 48b7f0a54f..1829668d45 100644 --- a/src/main/rx/rx_spi.h +++ b/src/main/rx/rx_spi.h @@ -20,8 +20,6 @@ #include #include -#include "rx/rx.h" - typedef enum { NRF24RX_V202_250K = 0, NRF24RX_V202_1M, @@ -70,7 +68,5 @@ typedef enum { #define RC_CHANNEL_HEADLESS RC_SPI_AUX5 #define RC_CHANNEL_RTH RC_SPI_AUX6 // return to home -bool rxSpiDataReceived(void); -struct rxConfig_s; -struct rxRuntimeConfig_s; -bool rxSpiInit(rx_spi_type_e spiType, const struct rxConfig_s *rxConfig, struct rxRuntimeConfig_s *rxRuntimeConfig, rcReadRawDataPtr *callback); +uint8_t rxSpiFrameStatus(void); +bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback); diff --git a/src/main/target/CJMCU/target.h b/src/main/target/CJMCU/target.h index 7c2bb3738c..2d7872a870 100644 --- a/src/main/target/CJMCU/target.h +++ b/src/main/target/CJMCU/target.h @@ -81,8 +81,8 @@ #define USE_RX_SYMA #define USE_RX_V202 //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_SYMA_X5 -//#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_SYMA_X5C -#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_INAV +#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_SYMA_X5C +//#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_INAV //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_H8_3D //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_CX10A //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_V202_1M