From a0b4053e82b9e716c2f57e24547b8e151ab73a11 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 2 Apr 2016 21:05:22 +0200 Subject: [PATCH] [Crossfire] Now the pulses frame is encoded the same way than other Crossfire frames --- radio/src/pulses/crossfire.cpp | 10 +++++----- radio/src/pulses/pulses_arm.h | 2 +- radio/src/telemetry/crossfire.h | 5 ++++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/radio/src/pulses/crossfire.cpp b/radio/src/pulses/crossfire.cpp index 3acce4a3c..a10763cf9 100644 --- a/radio/src/pulses/crossfire.cpp +++ b/radio/src/pulses/crossfire.cpp @@ -18,9 +18,8 @@ * GNU General Public License for more details. */ -#include "../opentx.h" +#include "opentx.h" -#define CROSSFIRE_START_BYTE 0x0F #define CROSSFIRE_CH_CENTER 0x3E0 #define CROSSFIRE_CH_BITS 11 @@ -28,7 +27,9 @@ void createCrossfireFrame(uint8_t * frame, int16_t * pulses) { uint8_t * buf = frame; - *buf++ = CROSSFIRE_START_BYTE; + *buf++ = BROADCAST_ADDRESS; + *buf++ = 24; // 1(ID) + 22 + 1(CRC) + *buf++ = CHANNELS_ID; uint32_t bits = 0; uint8_t bitsavailable = 0; @@ -41,6 +42,5 @@ void createCrossfireFrame(uint8_t * frame, int16_t * pulses) bitsavailable -= 8; } } - *buf++ = 0; - *buf++ = crc16(frame, 24); + *buf = crc8(&frame[2], 24); } diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index eb4f35289..969816142 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -69,7 +69,7 @@ PACK(struct Dsm2PulsesData { #endif #define CROSSFIRE_BAUDRATE 400000 -#define CROSSFIRE_FRAME_LEN 25 +#define CROSSFIRE_FRAME_LEN (3+22+1) #define CROSSFIRE_CHANNELS_COUNT 16 PACK(struct CrossfirePulsesData { uint8_t pulses[CROSSFIRE_FRAME_LEN]; diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index 5fa88a513..37afb7e0b 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -21,7 +21,10 @@ #ifndef _CROSSFIRE_H_ #define _CROSSFIRE_H_ -#define LINK_STATS_ID 0x14 +#define BROADCAST_ADDRESS 0x00 + +#define LINK_STATS_ID 0x14 +#define CHANNELS_ID 0x16 void processCrossfireTelemetryData(uint8_t data); void crossfireSetDefault(int index, uint8_t id, uint8_t subId);