diff --git a/radio/src/pulses/crossfire.cpp b/radio/src/pulses/crossfire.cpp index ba3781461..348bf2c92 100644 --- a/radio/src/pulses/crossfire.cpp +++ b/radio/src/pulses/crossfire.cpp @@ -50,20 +50,18 @@ uint8_t createCrossfireChannelsFrame(uint8_t * frame, int16_t * pulses) void setupPulsesCrossfire(uint8_t module) { if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) { - uint8_t * crossfire = modulePulsesData[module].crossfire.pulses; - uint8_t len; + uint8_t * pulses = modulePulsesData[module].crossfire.pulses; #if defined(LUA) if (outputTelemetryBufferTrigger != 0x00 && outputTelemetryBufferSize > 0) { - memcpy(crossfire, outputTelemetryBuffer, outputTelemetryBufferSize); - len = outputTelemetryBufferSize; + memcpy(pulses, outputTelemetryBuffer, outputTelemetryBufferSize); + modulePulsesData[module].crossfire.length = outputTelemetryBufferSize; outputTelemetryBufferTrigger = 0x00; outputTelemetryBufferSize = 0; } else #endif { - len = createCrossfireChannelsFrame(crossfire, &channelOutputs[g_model.moduleData[module].channelsStart]); + modulePulsesData[module].crossfire.length = createCrossfireChannelsFrame(pulses, &channelOutputs[g_model.moduleData[module].channelsStart]); } - sportSendBuffer(crossfire, len); } } diff --git a/radio/src/pulses/pulses.h b/radio/src/pulses/pulses.h index dc6021127..f35d0afa6 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -122,6 +122,7 @@ PACK(struct Dsm2TimerPulsesData { #define CROSSFIRE_FRAME_MAXLEN 64 PACK(struct CrossfirePulsesData { uint8_t pulses[CROSSFIRE_FRAME_MAXLEN]; + uint8_t length; }); union ModulePulsesData { diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index dce31acf7..e6af772bd 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -179,11 +179,11 @@ uint32_t isBootloaderStart(const uint8_t * buffer); #else #define IS_UART_MODULE(port) (false) #endif -void init_no_pulses(uint8_t module); -void disable_no_pulses(uint8_t module); + void init_ppm(uint8_t module); void disable_ppm(uint8_t module); void intmoduleSendNextFrame(); +void extmoduleSendNextFrame(); void init_pxx2(uint8_t module); void disable_pxx2(uint8_t module); void init_pxx(uint8_t module); diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index 6e2cfed42..bc405cc49 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -273,6 +273,9 @@ void extmoduleSendNextFrame() EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - modulePulsesData[EXTERNAL_MODULE].dsm2.pulses; EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA } + else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE) { + sportSendBuffer(modulePulsesData[EXTERNAL_MODULE].crossfire.pulses, modulePulsesData[EXTERNAL_MODULE].crossfire.length); + } else { EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; } diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 665c3600e..51bc2e977 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -83,12 +83,10 @@ void sendSynchronousPulses() for (uint8_t module = 0; module < NUM_MODULES; module++) { uint8_t protocol = moduleSettings[module].protocol; if (isProtocolSynchronous(protocol) && setupPulses(module)) { - if (module == INTERNAL_MODULE) { + if (module == INTERNAL_MODULE) intmoduleSendNextFrame(); - } - else { - // TODO - } + else + extmoduleSendNextFrame(); } } }