From b941aa0277c708f6a2d1b5d5fb8c282b9ecb8848 Mon Sep 17 00:00:00 2001 From: "bernet.andre@gmail.com" Date: Sun, 14 Jul 2013 16:45:44 +0000 Subject: [PATCH] [Taranis] Bytestuff was wrong on SPORT! --- src/telemetry/frsky_sport.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/telemetry/frsky_sport.cpp b/src/telemetry/frsky_sport.cpp index 2983859b1..285ee7fef 100644 --- a/src/telemetry/frsky_sport.cpp +++ b/src/telemetry/frsky_sport.cpp @@ -38,7 +38,6 @@ #define START_STOP 0x7e #define BYTESTUFF 0x7d -#define STUFF_MASK 0x20 // FrSky PRIM IDs (1 byte) #define DATA_FRAME 0x10 @@ -390,7 +389,7 @@ void processSportPacket(uint8_t *packet) enum FrSkyDataState { STATE_DATA_IDLE, STATE_DATA_IN_FRAME, - STATE_DATA_XOR, + STATE_DATA_STUFF, }; void processSerialData(uint8_t data) @@ -413,13 +412,17 @@ void processSerialData(uint8_t data) } else { switch (dataState) { - case STATE_DATA_XOR: - frskyRxBuffer[numPktBytes++] = data ^ STUFF_MASK; + case STATE_DATA_STUFF: + if (data == 0x5E) + frskyRxBuffer[numPktBytes++] = 0x7E; + else if (data == 0x5D) + frskyRxBuffer[numPktBytes++] = 0x7D; + dataState = STATE_DATA_IN_FRAME; break; case STATE_DATA_IN_FRAME: if (data == BYTESTUFF) - dataState = STATE_DATA_XOR; // XOR next byte + dataState = STATE_DATA_STUFF; else frskyRxBuffer[numPktBytes++] = data; break;