From f415f38ba673caac1867b667e0bd2a7a561b9746 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 12 Jun 2016 15:27:55 +0200 Subject: [PATCH] Compilation fix --- radio/src/pulses/crossfire.cpp | 33 +++++++++++++++++---------------- radio/src/pulses/pulses_arm.cpp | 18 ++++++++++++++---- radio/src/telemetry/frsky.h | 2 -- radio/src/tests/crossfire.cpp | 7 ++++--- 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/radio/src/pulses/crossfire.cpp b/radio/src/pulses/crossfire.cpp index 261d5b768..ef0e55b86 100644 --- a/radio/src/pulses/crossfire.cpp +++ b/radio/src/pulses/crossfire.cpp @@ -24,25 +24,10 @@ #define CROSSFIRE_CH_BITS 11 // Range for pulses (channels output) is [-1024:+1024] -uint8_t createCrossfireFrame(uint8_t * frame, int16_t * pulses, LuaTelemetryPacket * telemetryPacket) +uint8_t createCrossfireChannelsFrame(uint8_t * frame, int16_t * pulses) { uint8_t * buf = frame; *buf++ = MODULE_ADDRESS; - -#if defined(LUA) - if (telemetryPacket->crossfire.command) { - *buf++ = 2 + telemetryPacket->crossfire.length; // 1(ID) + telemetryPacket->crossfire.length + 1(CRC) - uint8_t * crc_start = buf; - *buf++ = telemetryPacket->crossfire.command; - for (int i=0; icrossfire.length; i++) { - *buf++ = telemetryPacket->crossfire.data[i]; - } - *buf++ = crc8(crc_start, telemetryPacket->crossfire.length + 1); - telemetryPacket->crossfire.clear(); - return buf - frame; - } -#endif - *buf++ = 24; // 1(ID) + 22 + 1(CRC) uint8_t * crc_start = buf; *buf++ = CHANNELS_ID; @@ -61,3 +46,19 @@ uint8_t createCrossfireFrame(uint8_t * frame, int16_t * pulses, LuaTelemetryPack *buf++ = crc8(crc_start, 23); return buf - frame; } + +#if defined(LUA) +uint8_t createCrossfireRequestFrame(uint8_t * frame, LuaTelemetryPacket * telemetryPacket) +{ + uint8_t * buf = frame; + *buf++ = MODULE_ADDRESS; + *buf++ = 2 + telemetryPacket->crossfire.length; // 1(ID) + telemetryPacket->crossfire.length + 1(CRC) + uint8_t * crc_start = buf; + *buf++ = telemetryPacket->crossfire.command; + for (int i=0; icrossfire.length; i++) { + *buf++ = telemetryPacket->crossfire.data[i]; + } + *buf++ = crc8(crc_start, telemetryPacket->crossfire.length + 1); + return buf - frame; +} +#endif diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 97a47dd80..49fb9d4f8 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -29,7 +29,11 @@ ModulePulsesData modulePulsesData[NUM_MODULES] __DMA; TrainerPulsesData trainerPulsesData __DMA; #if defined(CROSSFIRE) -uint8_t createCrossfireFrame(uint8_t * frame, int16_t * pulses, LuaTelemetryPacket * telemetry); +uint8_t createCrossfireChannelsFrame(uint8_t * frame, int16_t * pulses); +#endif + +#if defined(CROSSFIRE) && defined(LUA) +uint8_t createCrossfireRequestFrame(uint8_t * frame, LuaTelemetryPacket * telemetry); #endif uint8_t getRequiredProtocol(uint8_t port) @@ -181,11 +185,17 @@ void setupPulses(uint8_t port) case PROTO_CROSSFIRE: if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE && !init_needed) { uint8_t * crossfire = modulePulsesData[port].crossfire.pulses; + uint8_t len; #if defined(LUA) - uint8_t len = createCrossfireFrame(crossfire, &channelOutputs[g_model.moduleData[port].channelsStart], &luaOutputTelemetryPacket); -#else - uint8_t len = createCrossfireFrame(crossfire, &channelOutputs[g_model.moduleData[port].channelsStart], NULL); + if (luaOutputTelemetryPacket.crossfire.command) { + len = createCrossfireRequestFrame(crossfire, &luaOutputTelemetryPacket); + luaOutputTelemetryPacket.crossfire.clear(); + } + else #endif + { + len = createCrossfireChannelsFrame(crossfire, &channelOutputs[g_model.moduleData[port].channelsStart]); + } sportSendBuffer(crossfire, len); } scheduleNextMixerCalculation(port, CROSSFIRE_FRAME_PERIOD); diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 2518fbe2a..1041570e9 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -524,8 +524,6 @@ struct LuaTelemetryPacket extern Fifo * luaInputTelemetryFifo; extern LuaTelemetryPacket luaOutputTelemetryPacket; void sportSendLuaPacket(LuaTelemetryPacket & packet); -#else -#define LuaTelemetryPacket void #endif #endif // _FRSKY_H_ diff --git a/radio/src/tests/crossfire.cpp b/radio/src/tests/crossfire.cpp index 317a35676..6cf94f8e5 100644 --- a/radio/src/tests/crossfire.cpp +++ b/radio/src/tests/crossfire.cpp @@ -21,17 +21,18 @@ #include "gtests.h" #if defined(CROSSFIRE) -TEST(Crossfire, createCrossfireFrame) +uint8_t createCrossfireChannelsFrame(uint8_t * frame, int16_t * pulses); +TEST(Crossfire, createCrossfireChannelsFrame) { int16_t pulsesStart[NUM_TRAINER]; - uint8_t crossfire[CROSSFIRE_FRAME_LEN]; + uint8_t crossfire[CROSSFIRE_FRAME_MAXLEN]; memset(crossfire, 0, sizeof(crossfire)); for (int i=0; i