Better alignment of serial and SPI receiver code

This commit is contained in:
Martin Budden 2016-09-16 20:47:25 +01:00
parent c44e0796ae
commit 1273ce8923
9 changed files with 25 additions and 18 deletions

View File

@ -32,6 +32,7 @@
#include "drivers/rx_xn297.h" #include "drivers/rx_xn297.h"
#include "drivers/system.h" #include "drivers/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_cx10.h" #include "rx/nrf24_cx10.h"

View File

@ -33,6 +33,7 @@
#include "drivers/rx_xn297.h" #include "drivers/rx_xn297.h"
#include "drivers/system.h" #include "drivers/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_h8_3d.h" #include "rx/nrf24_h8_3d.h"

View File

@ -29,6 +29,7 @@
#include "drivers/rx_nrf24l01.h" #include "drivers/rx_nrf24l01.h"
#include "drivers/system.h" #include "drivers/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_inav.h" #include "rx/nrf24_inav.h"

View File

@ -31,6 +31,7 @@
#include "drivers/rx_nrf24l01.h" #include "drivers/rx_nrf24l01.h"
#include "drivers/system.h" #include "drivers/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_syma.h" #include "rx/nrf24_syma.h"

View File

@ -31,6 +31,7 @@
#include "drivers/rx_nrf24l01.h" #include "drivers/rx_nrf24l01.h"
#include "drivers/system.h" #include "drivers/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_v202.h" #include "rx/nrf24_v202.h"

View File

@ -200,8 +200,7 @@ void rxInit(const rxConfig_t *rxConfig, const modeActivationCondition_t *modeAct
#ifdef USE_RX_SPI #ifdef USE_RX_SPI
if (feature(FEATURE_RX_SPI)) { if (feature(FEATURE_RX_SPI)) {
rxRefreshRate = 10000; rxRefreshRate = 10000;
const rx_spi_type_e spiType = feature(FEATURE_SOFTSPI) ? RX_SPI_SOFTSPI : RX_SPI_HARDSPI; const bool enabled = rxSpiInit(rxConfig, &rxRuntimeConfig, &rcReadRawFunc);
const bool enabled = rxSpiInit(spiType, rxConfig, &rxRuntimeConfig, &rcReadRawFunc);
if (!enabled) { if (!enabled) {
featureClear(FEATURE_RX_SPI); featureClear(FEATURE_RX_SPI);
rcReadRawFunc = nullReadRawRC; rcReadRawFunc = nullReadRawRC;
@ -354,11 +353,12 @@ bool rxUpdate(uint32_t currentTime)
#ifdef USE_RX_SPI #ifdef USE_RX_SPI
if (feature(FEATURE_RX_SPI)) { if (feature(FEATURE_RX_SPI)) {
rxDataReceived = rxSpiDataReceived(); const uint8_t frameStatus = rxSpiFrameStatus();
if (rxDataReceived) { if (frameStatus & RX_FRAME_COMPLETE) {
rxSignalReceived = true; rxDataReceived = true;
rxIsInFailsafeMode = false; rxIsInFailsafeMode = false;
needRxSignalBefore = currentTime + DELAY_10_HZ; rxSignalReceived = true;
needRxSignalBefore = currentTime + DELAY_5_HZ;
} }
} }
#endif #endif

View File

@ -25,6 +25,10 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "drivers/rx_nrf24l01.h" #include "drivers/rx_nrf24l01.h"
#include "config/config.h"
#include "config/feature.h"
#include "rx/rx.h" #include "rx/rx.h"
#include "rx/rx_spi.h" #include "rx/rx_spi.h"
#include "rx/nrf24_cx10.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. * Called from updateRx in rx.c, updateRx called from taskUpdateRxCheck.
* If taskUpdateRxCheck returns true, then taskUpdateRxMain will shortly be called. * If taskUpdateRxCheck returns true, then taskUpdateRxMain will shortly be called.
*/ */
bool rxSpiDataReceived(void) uint8_t rxSpiFrameStatus(void)
{ {
if (protocolDataReceived(rxSpiPayload) == RX_SPI_RECEIVED_DATA) { if (protocolDataReceived(rxSpiPayload) == RX_SPI_RECEIVED_DATA) {
rxSpiNewPacketAvailable = true; rxSpiNewPacketAvailable = true;
return true; return RX_FRAME_COMPLETE;
} }
return false; return RX_FRAME_PENDING;
} }
/* /*
* Set and initialize the RX protocol * 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; bool ret = false;
const rx_spi_type_e spiType = feature(FEATURE_SOFTSPI) ? RX_SPI_SOFTSPI : RX_SPI_HARDSPI;
rxSpiDeviceInit(spiType); rxSpiDeviceInit(spiType);
if (rxSpiSetProtocol(rxConfig->rx_spi_protocol)) { if (rxSpiSetProtocol(rxConfig->rx_spi_protocol)) {
protocolInit(rxConfig, rxRuntimeConfig); protocolInit(rxConfig, rxRuntimeConfig);

View File

@ -20,8 +20,6 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "rx/rx.h"
typedef enum { typedef enum {
NRF24RX_V202_250K = 0, NRF24RX_V202_250K = 0,
NRF24RX_V202_1M, NRF24RX_V202_1M,
@ -70,7 +68,5 @@ typedef enum {
#define RC_CHANNEL_HEADLESS RC_SPI_AUX5 #define RC_CHANNEL_HEADLESS RC_SPI_AUX5
#define RC_CHANNEL_RTH RC_SPI_AUX6 // return to home #define RC_CHANNEL_RTH RC_SPI_AUX6 // return to home
bool rxSpiDataReceived(void); uint8_t rxSpiFrameStatus(void);
struct rxConfig_s; bool rxSpiInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig, rcReadRawDataPtr *callback);
struct rxRuntimeConfig_s;
bool rxSpiInit(rx_spi_type_e spiType, const struct rxConfig_s *rxConfig, struct rxRuntimeConfig_s *rxRuntimeConfig, rcReadRawDataPtr *callback);

View File

@ -81,8 +81,8 @@
#define USE_RX_SYMA #define USE_RX_SYMA
#define USE_RX_V202 #define USE_RX_V202
//#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_SYMA_X5 //#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_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_CX10A
//#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_V202_1M //#define RX_SPI_DEFAULT_PROTOCOL NRF24RX_V202_1M