From 0f10855837838cf951a65d5527db734c0f60cfdf Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Sat, 8 Nov 2014 01:12:51 +0000 Subject: [PATCH] Support 16 channel SBus receivers. Tested with FrSky X4RSB and Taranis+. See also: https://github.com/opentx/opentx/issues/1701 --- src/main/rx/sbus.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/rx/sbus.c b/src/main/rx/sbus.c index fb68ec43b..2a042d80e 100644 --- a/src/main/rx/sbus.c +++ b/src/main/rx/sbus.c @@ -35,7 +35,7 @@ #include "rx/rx.h" #include "rx/sbus.h" -#define SBUS_MAX_CHANNEL 12 +#define SBUS_MAX_CHANNEL 16 #define SBUS_FRAME_SIZE 25 #define SBUS_SYNCBYTE 0x0F #define SBUS_OFFSET 988 @@ -85,6 +85,10 @@ struct sbus_dat { unsigned int chan9 : 11; unsigned int chan10 : 11; unsigned int chan11 : 11; + unsigned int chan12 : 11; + unsigned int chan13 : 11; + unsigned int chan14 : 11; + unsigned int chan15 : 11; } __attribute__ ((__packed__)); typedef union { @@ -127,7 +131,7 @@ bool sbusFrameComplete(void) return false; } sbusFrameDone = false; - if ((sbus.in[22] >> 3) & 0x0001) { + if ((sbus.in[SBUS_FRAME_SIZE - 3] >> 3) & 0x0001) { // internal failsafe enabled and rx failsafe flag set return false; } @@ -143,6 +147,10 @@ bool sbusFrameComplete(void) sbusChannelData[9] = sbus.msg.chan9; sbusChannelData[10] = sbus.msg.chan10; sbusChannelData[11] = sbus.msg.chan11; + sbusChannelData[12] = sbus.msg.chan12; + sbusChannelData[13] = sbus.msg.chan13; + sbusChannelData[14] = sbus.msg.chan14; + sbusChannelData[15] = sbus.msg.chan15; return true; }