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/system.h"
#include "rx/rx.h"
#include "rx/rx_spi.h"
#include "rx/nrf24_cx10.h"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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);

View File

@ -20,8 +20,6 @@
#include <stdbool.h>
#include <stdint.h>
#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);

View File

@ -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