diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index e60a24bc6..933b3f02e 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -107,7 +107,7 @@ static uint8_t nullFrameStatus(void) return RX_FRAME_PENDING; } -void serialRxInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig); +bool serialRxInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig); void useRxConfig(const rxConfig_t *rxConfigToUse) { @@ -153,16 +153,13 @@ void resetAllRxChannelRangeConfigurations(rxChannelRangeConfiguration_t *rxChann void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeActivationConditions) { - uint8_t i; - uint16_t value; - useRxConfig(rxConfig); rxRuntimeConfig.rcReadRawFunc = nullReadRawRC; rxRuntimeConfig.rcFrameStatusFunc = nullFrameStatus; rcSampleIndex = 0; needRxSignalMaxDelayUs = DELAY_10_HZ; - for (i = 0; i < MAX_SUPPORTED_RC_CHANNEL_COUNT; i++) { + for (int i = 0; i < MAX_SUPPORTED_RC_CHANNEL_COUNT; i++) { rcData[i] = rxConfig->midrc; rcInvalidPulsPeriod[i] = millis() + MAX_INVALID_PULS_TIME; } @@ -170,10 +167,11 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct rcData[THROTTLE] = (feature(FEATURE_3D)) ? rxConfig->midrc : rxConfig->rx_min_usec; // Initialize ARM switch to OFF position when arming via switch is defined - for (i = 0; i < MAX_MODE_ACTIVATION_CONDITION_COUNT; i++) { + for (int i = 0; i < MAX_MODE_ACTIVATION_CONDITION_COUNT; i++) { const modeActivationCondition_t *modeActivationCondition = &modeActivationConditions[i]; if (modeActivationCondition->modeId == BOXARM && IS_RANGE_USABLE(&modeActivationCondition->range)) { // ARM switch is defined, determine an OFF value + uint16_t value; if (modeActivationCondition->range.startStep > 0) { value = MODE_STEP_TO_CHANNEL_VALUE((modeActivationCondition->range.startStep - 1)); } else { @@ -186,7 +184,11 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct #ifdef SERIAL_RX if (feature(FEATURE_RX_SERIAL)) { - serialRxInit(rxConfig, &rxRuntimeConfig); + const bool enabled = serialRxInit(rxConfig, &rxRuntimeConfig); + if (!enabled) { + featureClear(FEATURE_RX_SERIAL); + rxRuntimeConfig.rcReadRawFunc = nullReadRawRC; + } } #endif @@ -199,11 +201,10 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct #ifdef USE_RX_SPI if (feature(FEATURE_RX_SPI)) { - rxRefreshRate = 10000; - const bool enabled = rxSpiInit(rxConfig, &rxRuntimeConfig, &rcReadRawFunc); + const bool enabled = rxSpiInit(rxConfig, &rxRuntimeConfig); if (!enabled) { featureClear(FEATURE_RX_SPI); - rcReadRawFunc = nullReadRawRC; + rxRuntimeConfig.rcReadRawFunc = nullReadRawRC; } } #endif @@ -216,7 +217,7 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct } #ifdef SERIAL_RX -void serialRxInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig) +bool serialRxInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig) { bool enabled = false; switch (rxConfig->serialrx_provider) { @@ -244,10 +245,7 @@ void serialRxInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig enabled = jetiExBusInit(rxConfig, rxRuntimeConfig); break; } - if (!enabled) { - featureClear(FEATURE_RX_SERIAL); - rxRuntimeConfig->rcReadRawFunc = nullReadRawRC; - } + return enabled; } static uint8_t serialRxFrameStatus(const rxConfig_t *rxConfig) @@ -353,12 +351,12 @@ bool rxUpdate(uint32_t currentTime) #ifdef USE_RX_SPI if (feature(FEATURE_RX_SPI)) { - const uint8_t frameStatus = rxSpiFrameStatus(); + const uint8_t frameStatus = rxRuntimeConfig.rcFrameStatusFunc(); if (frameStatus & RX_FRAME_COMPLETE) { rxDataReceived = true; rxIsInFailsafeMode = false; rxSignalReceived = true; - needRxSignalBefore = currentTime + DELAY_5_HZ; + needRxSignalBefore = currentTime + needRxSignalMaxDelayUs; } } #endif @@ -598,7 +596,7 @@ void parseRcChannels(const char *input, rxConfig_t *rxConfig) } } -void updateRSSIPWM(void) +static void updateRSSIPWM(void) { int16_t pwmRssi = 0; // Read value of AUX channel as rssi @@ -616,7 +614,7 @@ void updateRSSIPWM(void) #define RSSI_ADC_SAMPLE_COUNT 16 //#define RSSI_SCALE (0xFFF / 100.0f) -void updateRSSIADC(uint32_t currentTime) +static void updateRSSIADC(uint32_t currentTime) { #ifndef USE_ADC UNUSED(currentTime); diff --git a/src/main/rx/rx.h b/src/main/rx/rx.h index b6f1f5d3c..0556e626e 100644 --- a/src/main/rx/rx.h +++ b/src/main/rx/rx.h @@ -144,7 +144,8 @@ typedef uint16_t (*rcReadRawDataPtr)(const struct rxRuntimeConfig_s *rxRuntimeCo typedef uint8_t (*rcFrameStatusPtr)(void); typedef struct rxRuntimeConfig_s { - uint8_t channelCount; // number of rc channels as reported by current input driver + uint8_t channelCount; // number of RC channels as reported by current input driver + uint16_t rxRefreshRate; rcReadRawDataPtr rcReadRawFunc; rcFrameStatusPtr rcFrameStatusFunc; } rxRuntimeConfig_t; diff --git a/src/main/rx/rx_spi.c b/src/main/rx/rx_spi.c index 21a4dce23..e7f3bdea0 100644 --- a/src/main/rx/rx_spi.c +++ b/src/main/rx/rx_spi.c @@ -114,7 +114,7 @@ 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. */ -uint8_t rxSpiFrameStatus(void) +static uint8_t rxSpiFrameStatus(void) { if (protocolDataReceived(rxSpiPayload) == RX_SPI_RECEIVED_DATA) { rxSpiNewPacketAvailable = true; @@ -126,7 +126,7 @@ uint8_t rxSpiFrameStatus(void) /* * Set and initialize the RX protocol */ -bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback) +bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig) { bool ret = false; @@ -137,9 +137,11 @@ bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, r ret = true; } rxSpiNewPacketAvailable = false; - if (callback) { - *callback = rxSpiReadRawRC; - } + rxRuntimeConfig->rxRefreshRate = 20000; + + rxRuntimeConfig->rcReadRawFunc = rxSpiReadRawRC; + rxRuntimeConfig->rcFrameStatusFunc = rxSpiFrameStatus; + return ret; } #endif diff --git a/src/main/rx/rx_spi.h b/src/main/rx/rx_spi.h index 1829668d4..5b8b144f0 100644 --- a/src/main/rx/rx_spi.h +++ b/src/main/rx/rx_spi.h @@ -68,5 +68,4 @@ typedef enum { #define RC_CHANNEL_HEADLESS RC_SPI_AUX5 #define RC_CHANNEL_RTH RC_SPI_AUX6 // return to home -uint8_t rxSpiFrameStatus(void); -bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback); +bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig); diff --git a/src/main/target/CJMCU/target.h b/src/main/target/CJMCU/target.h index 2d7872a87..33d3488e6 100644 --- a/src/main/target/CJMCU/target.h +++ b/src/main/target/CJMCU/target.h @@ -81,9 +81,9 @@ #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_SYMA_X5C //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_INAV -//#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_H8_3D +#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_H8_3D //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_CX10A //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_V202_1M