diff --git a/radio/src/targets/common/arm/stm32/serial2_driver.cpp b/radio/src/targets/common/arm/stm32/serial2_driver.cpp index cb39d4173..719b2432f 100644 --- a/radio/src/targets/common/arm/stm32/serial2_driver.cpp +++ b/radio/src/targets/common/arm/stm32/serial2_driver.cpp @@ -89,6 +89,12 @@ void serial2Init(unsigned int mode, unsigned int protocol) switch (mode) { case UART_MODE_TELEMETRY_MIRROR: +#if defined(CROSSFIRE) + if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) { + uart3Setup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false); + break; + } +#endif uart3Setup(FRSKY_SPORT_BAUDRATE, false); break; #if defined(DEBUG) || defined(CLI) diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index 786fe71ef..71cd7fa3e 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -176,6 +176,12 @@ void processCrossfireTelemetryFrame() void processCrossfireTelemetryData(uint8_t data) { +#if defined(SERIAL2) + if (g_eeGeneral.serial2Mode == UART_MODE_TELEMETRY_MIRROR) { + serial2Putc(data); + } +#endif + if (telemetryRxBufferCount == 0 && data != RADIO_ADDRESS) { TRACE("[XF] address 0x%02X error", data); return; diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index 6be331a90..c627d580e 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -88,12 +88,13 @@ const uint8_t CROSSFIRE_PERIODS[] = { 4, 16, }; -#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate] -#define CROSSFIRE_PERIOD CROSSFIRE_PERIODS[g_eeGeneral.telemetryBaudrate] +#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate] +#define CROSSFIRE_PERIOD CROSSFIRE_PERIODS[g_eeGeneral.telemetryBaudrate] #else #define CROSSFIRE_BAUDRATE 400000 #define CROSSFIRE_PERIOD 4 // 4ms #endif +#define CROSSFIRE_TELEM_MIRROR_BAUDRATE 115200 #endif // _CROSSFIRE_H_