62 lines
2.4 KiB
C
62 lines
2.4 KiB
C
#pragma once
|
|
|
|
#define PWM_RANGE_ZERO 0 // FIXME should all usages of this be changed to use PWM_RANGE_MIN?
|
|
#define PWM_RANGE_MIN 1000
|
|
#define PWM_RANGE_MAX 2000
|
|
|
|
#define DEFAULT_SERVO_MIN 1020
|
|
#define DEFAULT_SERVO_MIDDLE 1500
|
|
#define DEFAULT_SERVO_MAX 2000
|
|
|
|
typedef enum {
|
|
SERIALRX_SPEKTRUM1024 = 0,
|
|
SERIALRX_SPEKTRUM2048 = 1,
|
|
SERIALRX_SBUS = 2,
|
|
SERIALRX_SUMD = 3,
|
|
SERIALRX_PROVIDER_MAX = SERIALRX_SUMD
|
|
} SerialRXType;
|
|
|
|
#define SERIALRX_PROVIDER_COUNT (SERIALRX_PROVIDER_MAX + 1)
|
|
|
|
#define MAX_SUPPORTED_RC_PPM_CHANNEL_COUNT 12
|
|
#define MAX_SUPPORTED_RC_PARALLEL_PWM_CHANNEL_COUNT 8
|
|
#define MAX_SUPPORTED_RC_CHANNEL_COUNT (18)
|
|
|
|
#if MAX_SUPPORTED_RC_PARALLEL_PWM_CHANNEL_COUNT > MAX_SUPPORTED_RC_PPM_CHANNEL_COUNT
|
|
#define MAX_SUPPORTED_RX_PARALLEL_PWM_OR_PPM_CHANNEL_COUNT MAX_SUPPORTED_RC_PARALLEL_PWM_CHANNEL_COUNT
|
|
#else
|
|
#define MAX_SUPPORTED_RX_PARALLEL_PWM_OR_PPM_CHANNEL_COUNT MAX_SUPPORTED_RC_PPM_CHANNEL_COUNT
|
|
#endif
|
|
|
|
extern const char rcChannelLetters[];
|
|
|
|
extern int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000]
|
|
|
|
typedef struct rxConfig_s {
|
|
uint8_t rcmap[8]; // mapping of radio channels to internal RPYTA+ order
|
|
uint8_t serialrx_provider; // type of UART-based receiver (0 = spek 10, 1 = spek 11, 2 = sbus). Must be enabled by FEATURE_RX_SERIAL first.
|
|
uint16_t midrc; // Some radios have not a neutral point centered on 1500. can be changed here
|
|
uint16_t mincheck; // minimum rc end
|
|
uint16_t maxcheck; // maximum rc end
|
|
uint8_t rssi_channel;
|
|
} rxConfig_t;
|
|
|
|
#define REMAPPABLE_CHANNEL_COUNT (sizeof(((rxConfig_t *)0)->rcmap) / sizeof(((rxConfig_t *)0)->rcmap[0]))
|
|
|
|
typedef struct rxRuntimeConfig_s {
|
|
uint8_t channelCount; // number of rc channels as reported by current input driver
|
|
} rxRuntimeConfig_t;
|
|
|
|
extern rxRuntimeConfig_t rxRuntimeConfig;
|
|
|
|
void useRxConfig(rxConfig_t *rxConfigToUse);
|
|
|
|
typedef uint16_t (*rcReadRawDataPtr)(rxRuntimeConfig_t *rxRuntimeConfig, uint8_t chan); // used by receiver driver to return channel data
|
|
|
|
void updateRx(void);
|
|
bool shouldProcessRx(uint32_t currentTime);
|
|
void calculateRxChannelsAndUpdateFailsafe(uint32_t currentTime);
|
|
|
|
void parseRcChannels(const char *input, rxConfig_t *rxConfig);
|
|
bool isSerialRxFrameComplete(rxConfig_t *rxConfig);
|