diff --git a/sw/airborne/subsystems/radio_control/sbus_common.c b/sw/airborne/subsystems/radio_control/sbus_common.c index c6d6c64016..89f66048d1 100644 --- a/sw/airborne/subsystems/radio_control/sbus_common.c +++ b/sw/airborne/subsystems/radio_control/sbus_common.c @@ -32,7 +32,12 @@ * SBUS protocol and state machine status */ #define SBUS_START_BYTE 0x0f -#define SBUS_END_BYTE 0x00 +#define SBUS_END_BYTE_0 0x00 // only possible end byte for SBUS v1 +#define SBUS_END_BYTE_1 0x04 // with SBUS v2 and 14CH mode +#define SBUS_END_BYTE_2 0x14 // end byte is cycling +#define SBUS_END_BYTE_3 0x24 // through the following 4 types +#define SBUS_END_BYTE_4 0x34 // in order +#define SBUS_END_BYTE_5 0x08 // with SBUS v2 and 12CH mode #define SBUS_BIT_PER_CHANNEL 11 #define SBUS_BIT_PER_BYTE 8 #define SBUS_FLAGS_BYTE 22 @@ -128,8 +133,13 @@ void sbus_common_decode_event(struct Sbus *sbus_p, struct uart_periph *dev) sbus_p->buffer[sbus_p->idx] = rbyte; sbus_p->idx++; if (sbus_p->idx == SBUS_BUF_LENGTH) { - // Decode if last byte is the correct end byte - if (rbyte == SBUS_END_BYTE) { + // Decode if last byte is (one of) the correct end byte + if (rbyte == SBUS_END_BYTE_0 || + rbyte == SBUS_END_BYTE_1 || + rbyte == SBUS_END_BYTE_2 || + rbyte == SBUS_END_BYTE_3 || + rbyte == SBUS_END_BYTE_4 || + rbyte == SBUS_END_BYTE_5) { decode_sbus_buffer(sbus_p->buffer, sbus_p->pulses, &sbus_p->frame_available, sbus_p->ppm); } sbus_p->status = SBUS_STATUS_UNINIT;