From b39baa2360b8d80c3f130d65ae575aebbccc8669 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 7 Mar 2022 15:11:33 +0100 Subject: [PATCH] Use USB VCP as a normal serial driver as well --- radio/src/cli.cpp | 118 ++++++++++++++---- radio/src/cli.h | 14 +-- radio/src/cli_traces.h | 27 ---- radio/src/dataconstants.h | 10 ++ radio/src/debug.h | 3 - radio/src/gui/colorlcd/radio_hardware.cpp | 4 +- .../src/gui/common/stdlcd/radio_hardware.cpp | 2 +- radio/src/hal/serial_driver.h | 11 +- radio/src/main.cpp | 11 +- radio/src/sbus.cpp | 23 ++-- radio/src/serial.cpp | 105 ++++++++++++---- radio/src/serial.h | 22 +--- .../common/arm/stm32/aux_serial_driver.cpp | 38 +++--- .../common/arm/stm32/aux_serial_driver.h | 2 - .../targets/common/arm/stm32/board_common.h | 18 --- radio/src/targets/common/arm/stm32/cpu_id.h | 5 +- .../arm/stm32/extmodule_serial_driver.cpp | 4 + .../arm/stm32/intmodule_serial_driver.cpp | 6 +- .../targets/common/arm/stm32/usb_driver.cpp | 24 ++-- .../src/targets/common/arm/stm32/usb_driver.h | 14 +-- .../src/targets/common/arm/stm32/usbd_cdc.cpp | 74 ++++++++--- radio/src/targets/horus/board.cpp | 9 -- radio/src/targets/simu/module_drivers.cpp | 6 +- radio/src/targets/simu/simpgmspace.cpp | 7 +- radio/src/translations/cn.h.txt | 2 +- radio/src/translations/cz.h.txt | 4 +- radio/src/translations/de.h.txt | 4 +- radio/src/translations/en.h.txt | 4 +- radio/src/translations/es.h.txt | 4 +- radio/src/translations/fi.h.txt | 4 +- radio/src/translations/fr.h.txt | 4 +- radio/src/translations/it.h.txt | 4 +- radio/src/translations/nl.h.txt | 4 +- radio/src/translations/pl.h.txt | 4 +- radio/src/translations/pt.h.txt | 4 +- radio/src/translations/se.h.txt | 4 +- radio/src/translations/tw.h.txt | 2 +- 37 files changed, 357 insertions(+), 248 deletions(-) delete mode 100644 radio/src/cli_traces.h diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index 3be2d23c4..d8f23ea29 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -19,8 +19,12 @@ * GNU General Public License for more details. */ +#include +#include + #include "opentx.h" #include "diskio.h" + #include #include #include @@ -55,6 +59,13 @@ void (*cliReceiveCallBack)(uint8_t* buf, uint32_t len) = nullptr; static void (*cliSendCb)(void*, uint8_t) = nullptr; static void* cliSendCtx = nullptr; +static const etx_serial_driver_t* cliSerialDriver = nullptr; +static void* cliSerialDriverCtx = nullptr; + +static uint8_t cliTracesEnabled = false; +static void (*cliTracesOldCb)(void*, uint8_t); +static void* cliTracesOldCbCtx; + void cliSetSendCb(void* ctx, void (*cb)(void*, uint8_t)) { cliSendCb = nullptr; @@ -62,6 +73,57 @@ void cliSetSendCb(void* ctx, void (*cb)(void*, uint8_t)) cliSendCb = cb; } +// Called from receive ISR (either USB or UART) +static void cliReceiveData(uint8_t* buf, uint32_t len) +{ + if (cliReceiveCallBack) + cliReceiveCallBack(buf, len); +} + +// Assumes it is called from ISR... +static void cliDefaultRx(uint8_t *buf, uint32_t len) +{ + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + xStreamBufferSendFromISR(cliRxBuffer, buf, len, &xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); +} + +static void cliEnableDbg() +{ + if (dbgSerialGetSendCb() != cliSendCb) { + cliTracesOldCb = dbgSerialGetSendCb(); + cliTracesOldCbCtx = dbgSerialGetSendCbCtx(); + dbgSerialSetSendCb(nullptr, nullptr); + dbgSerialSetSendCb(cliSendCtx, cliSendCb); + } +} + +static void cliDisableDbg() +{ + if (dbgSerialGetSendCb() == cliSendCb) { + dbgSerialSetSendCb(nullptr, nullptr); + dbgSerialSetSendCb(cliTracesOldCbCtx, cliTracesOldCb); + } +} + +void cliSetSerialDriver(void* ctx, const etx_serial_driver_t* drv) +{ + cliSerialDriver = nullptr; + cliSerialDriverCtx = ctx; + cliSerialDriver = drv; + + if (drv) { + if (drv->setReceiveCb) drv->setReceiveCb(ctx, cliReceiveData); + cliSetSendCb(ctx, drv->sendByte); + if (cliTracesEnabled) { + cliEnableDbg(); + } + } else { + cliSetSendCb(nullptr, nullptr); + cliDisableDbg(); + } +} + static void cliSerialPrintf(const char * format, ...) { va_list arglist; @@ -95,7 +157,28 @@ static void cliSerialCrlf() cliSerialPutc('\n'); } -uint8_t cliTracesEnabled = true; +static uint32_t cliGetBaudRate() +{ + auto drv = cliSerialDriver; + auto ctx = cliSerialDriverCtx; + + if (drv && drv->getBaudrate) { + return drv->getBaudrate(ctx); + } + + return 0; +} + +static void cliSetBaudRateCb(void (*cb)(uint32_t)) +{ + auto drv = cliSerialDriver; + auto ctx = cliSerialDriverCtx; + + if (drv && drv->setBaudrateCb) { + return drv->setBaudrateCb(ctx, cb); + } +} + char cliLastLine[CLI_COMMAND_MAX_LEN+1]; typedef int (* CliFunction) (const char ** args); @@ -753,10 +836,12 @@ int cliTest(const char ** argv) int cliTrace(const char ** argv) { if (!strcmp(argv[1], "on")) { + cliEnableDbg(); cliTracesEnabled = true; } else if (!strcmp(argv[1], "off")) { cliTracesEnabled = false; + cliDisableDbg(); } else { cliSerialPrint("%s: Invalid argument \"%s\"", argv[0], argv[1]); @@ -1012,12 +1097,12 @@ int cliSerialPassthrough(const char **argv) int baudrate = 0; err = toInt(argv, 3, &baudrate); if (err <= 0) { - // use current USB CDC baudrate - baudrate = usbSerialBaudRate(); + // use current baudrate + baudrate = cliGetBaudRate(); if (!baudrate) { // default to 115200 baudrate = 115200; - cliSerialPrint("%s: USB baudrate is 0, default to 115200", argv[0]); + cliSerialPrint("%s: baudrate is 0, default to 115200", argv[0]); } } @@ -1053,7 +1138,7 @@ int cliSerialPassthrough(const char **argv) cliReceiveCallBack = spInternalModuleTx; // setup CDC baudrate callback - usbSerialSetBaudRateCb(spInternalModuleSetBaudRate); + cliSetBaudRateCb(spInternalModuleSetBaudRate); // loop until cable disconnected while (cdcConnected) { @@ -1067,7 +1152,7 @@ int cliSerialPassthrough(const char **argv) timeout--; } - usbSerialPutc(nullptr, data); + cliSerialPutc(data); } // keep us up & running @@ -1075,7 +1160,7 @@ int cliSerialPassthrough(const char **argv) } // restore callsbacks - usbSerialSetBaudRateCb(nullptr); + cliSetBaudRateCb(nullptr); cliReceiveCallBack = backupCB; // and stop module @@ -1643,20 +1728,6 @@ void cliTask(void * pdata) } } -// Called from receive ISR (either USB or UART) -void cliReceiveData(uint8_t* buf, uint32_t len) -{ - if (cliReceiveCallBack) - cliReceiveCallBack(buf, len); -} - -static void cliDefaultRx(uint8_t *buf, uint32_t len) -{ - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xStreamBufferSendFromISR(cliRxBuffer, buf, len, &xHigherPriorityTaskWoken); - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); -} - void cliStart() { // Init stream buffer @@ -1668,11 +1739,6 @@ void cliStart() // Setup consumer callback cliReceiveCallBack = cliDefaultRx; - // Setup USB callbacks - usbSerialSetReceiveDataCb(cliReceiveData); - // usbSerialSetBaudRateCb(...); - // usbSerialSetCtrlLineStateCb(...); - RTOS_CREATE_TASK(cliTaskId, cliTask, "CLI", cliStack, CLI_STACK_SIZE, CLI_TASK_PRIO); } diff --git a/radio/src/cli.h b/radio/src/cli.h index 9a8803852..d52e4b772 100644 --- a/radio/src/cli.h +++ b/radio/src/cli.h @@ -22,20 +22,12 @@ #ifndef _CLI_H_ #define _CLI_H_ -#include - -#include -#include - -#include "cli_traces.h" +#include "hal/serial_driver.h" // CLI task function void cliStart(); -// Called from receive ISR (either USB or UART) -void cliReceiveData(uint8_t* buf, uint32_t len); - -// Set callbacks for sending data back to serial port -void cliSetSendCb(void* ctx, void (*cb)(void*, uint8_t)); +// Connect serial driver to CLI +void cliSetSerialDriver(void* ctx, const etx_serial_driver_t* drv); #endif // _CLI_H_ diff --git a/radio/src/cli_traces.h b/radio/src/cli_traces.h deleted file mode 100644 index 62fd7f8ee..000000000 --- a/radio/src/cli_traces.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#pragma once - -#include - -// Allows for switchable debug prints via CLI -extern uint8_t cliTracesEnabled; diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index ea18eeee5..8fc47dc6e 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -203,6 +203,15 @@ enum TrainerMode { }; #endif +enum SerialPort { + SP_AUX1=0, + SP_AUX2, + SP_VCP, + MAX_SERIAL_PORTS SKIP, +}; + +#define MAX_AUX_SERIAL (SP_AUX2 + 1) + #define TRAINER_MODE_MIN() TRAINER_MODE_MASTER_TRAINER_JACK #if !defined(HARDWARE_EXTERNAL_MODULE) @@ -245,6 +254,7 @@ enum UartModes { UART_MODE_TELEMETRY, UART_MODE_SBUS_TRAINER, UART_MODE_LUA, + UART_MODE_CLI, UART_MODE_COUNT SKIP, UART_MODE_MAX SKIP = UART_MODE_COUNT-1 }; diff --git a/radio/src/debug.h b/radio/src/debug.h index 3c6b9b1f2..e635d79c2 100644 --- a/radio/src/debug.h +++ b/radio/src/debug.h @@ -40,9 +40,6 @@ extern volatile uint32_t g_tmr10ms; #elif defined(SEMIHOSTING) #include #define debugPrintf(...) printf(__VA_ARGS__) -#elif defined(DEBUG) && defined(CLI) - #include "cli_traces.h" - #define debugPrintf(...) do { if (cliTracesEnabled) dbgSerialPrintf(__VA_ARGS__); } while(0) #elif defined(DEBUG) #define debugPrintf(...) do { dbgSerialPrintf(__VA_ARGS__); } while(0) #else diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index abed9ea46..1584f817c 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -380,7 +380,7 @@ void RadioHardwarePage::build(FormWindow * window) UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.auxSerialMode), [](int value) { g_eeGeneral.auxSerialMode = value; - serialInit(0, value); + serialInit(SP_AUX1, value); SET_DIRTY(); }); aux->setAvailableHandler(isAuxModeAvailable); @@ -394,7 +394,7 @@ void RadioHardwarePage::build(FormWindow * window) UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.aux2SerialMode), [](int value) { g_eeGeneral.aux2SerialMode = value; - serialInit(1, value); + serialInit(SP_AUX2, value); SET_DIRTY(); }); aux2->setAvailableHandler(isAux2ModeAvailable); diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index ffa2dadd5..4d6a6893b 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -600,7 +600,7 @@ void menuRadioHardware(event_t event) case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE: g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_AUX_SERIAL_MODE, STR_AUX_SERIAL_MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event); if (attr && checkIncDec_Ret) { - serialInit(0, g_eeGeneral.auxSerialMode); + serialInit(SP_AUX1, g_eeGeneral.auxSerialMode); } break; #endif diff --git a/radio/src/hal/serial_driver.h b/radio/src/hal/serial_driver.h index 947225ba5..2a5658aec 100644 --- a/radio/src/hal/serial_driver.h +++ b/radio/src/hal/serial_driver.h @@ -45,14 +45,14 @@ typedef struct { uint8_t parity; // = ETX_Parity_None; uint8_t stop_bits; // = ETX_StopBits_One; uint8_t word_length; // = ETX_WordLength_8; - bool rx_enable; // = false; + uint8_t rx_enable; // = false; void (*on_receive)(uint8_t data); // = nullptr; void (*on_error)(); // = nullptr; } etx_serial_init; struct etx_serial_callbacks_t { - bool (*on_send)(uint8_t* data); + uint8_t (*on_send)(uint8_t* data); void (*on_receive)(uint8_t data); void (*on_error)(); }; @@ -76,9 +76,12 @@ typedef struct { // Fetch byte from internal buffer int (*getByte)(void* ctx, uint8_t* data); + + // Get current baudrate + uint32_t (*getBaudrate)(void*); // Callbacks - void (*setReceiveCb)(void* ctx, void (*on_receive)(uint8_t data)); - void (*setOnErrorCb)(void* ctx, void (*on_error)()); + void (*setReceiveCb)(void* ctx, void (*on_receive)(uint8_t*, uint32_t)); + void (*setBaudrateCb)(void* ctx, void (*on_set_baudrate)(uint32_t)); } etx_serial_driver_t; diff --git a/radio/src/main.cpp b/radio/src/main.cpp index b562d58c7..d99b76f4f 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -162,14 +162,11 @@ void handleUsbConnection() // TODO: query USB serial mode // -> for now, only CLI / DEBUG / LUA #if defined(CLI) - cliSetSendCb(nullptr, usbSerialPutc); - usbSerialSetReceiveDataCb(cliReceiveData); + serialInit(SP_VCP, UART_MODE_CLI); #elif defined(DEBUG) - dbgSerialSetSendCb(nullptr, usbSerialPutc); - usbSerialSetReceiveDataCb(nullptr); + serialInit(SP_VCP, UART_MODE_DEBUG); #elif defined(LUA) - luaSetSendCb(nullptr, usbSerialPutc); - usbSerialSetReceiveDataCb(luaReceiveData); + serialInit(SP_VCP, UART_MODE_LUA); #endif } #endif @@ -185,6 +182,8 @@ void handleUsbConnection() if (getSelectedUsbMode() == USB_MASS_STORAGE_MODE) { opentxResume(); pushEvent(EVT_ENTRY); + } else if (getSelectedUsbMode() == USB_SERIAL_MODE) { + serialStop(SP_VCP); } TRACE("reset selected USB mode"); setSelectedUsbMode(USB_UNSELECTED_MODE); diff --git a/radio/src/sbus.cpp b/radio/src/sbus.cpp index 1c61f9b74..096bca02d 100644 --- a/radio/src/sbus.cpp +++ b/radio/src/sbus.cpp @@ -96,12 +96,16 @@ void processSbusFrame(uint8_t * sbus, int16_t * pulses, uint32_t size) void processSbusInput() { - uint8_t rxchar; - uint32_t active = 0; + + // TODO: place this outside of the function static uint8_t SbusIndex = 0; static uint16_t SbusTimer; static uint8_t SbusFrame[SBUS_FRAME_SIZE]; + uint32_t active = 0; + + // Drain input first (if existing) + uint8_t rxchar; auto _getByte = sbusGetByte; while (_getByte && (_getByte(&rxchar) > 0)) { active = 1; @@ -110,15 +114,18 @@ void processSbusInput() } SbusFrame[SbusIndex++] = rxchar; } + + // Data has been received if (active) { SbusTimer = getTmr2MHz(); return; - } else { - if (SbusIndex) { - if ((uint16_t)(getTmr2MHz() - SbusTimer) > SBUS_FRAME_GAP_DELAY) { - processSbusFrame(SbusFrame, ppmInput, SbusIndex); - SbusIndex = 0; - } + } + + // Check if end-of-frame is detected + if (SbusIndex) { + if ((uint16_t)(getTmr2MHz() - SbusTimer) > SBUS_FRAME_GAP_DELAY) { + processSbusFrame(SbusFrame, ppmInput, SbusIndex); + SbusIndex = 0; } } } diff --git a/radio/src/serial.cpp b/radio/src/serial.cpp index 8c9460f65..666259a16 100644 --- a/radio/src/serial.cpp +++ b/radio/src/serial.cpp @@ -25,14 +25,28 @@ #include #include "aux_serial_driver.h" #include "hal/serial_port.h" +//#include "cli.h" #define PRINTF_BUFFER_SIZE 128 static void (*dbg_serial_putc)(void*, uint8_t) = nullptr; static void* dbg_serial_ctx = nullptr; +void (*dbgSerialGetSendCb())(void*, uint8_t) +{ + return dbg_serial_putc; +} + +void* dbgSerialGetSendCbCtx() +{ + return dbg_serial_ctx; +} + void dbgSerialSetSendCb(void* ctx, void (*cb)(void*, uint8_t)) { + // Avoid overwriting debug port config + if (cb && dbg_serial_putc) return; + dbg_serial_putc = nullptr; dbg_serial_ctx = ctx; dbg_serial_putc = cb; @@ -70,7 +84,7 @@ extern "C" void dbgSerialCrlf() dbgSerialPutc('\n'); } -static int getAuxSerialMode(uint8_t port_nr) +static int getSerialPortMode(uint8_t port_nr) { #if !defined(BOOT) if (port_nr == 0) { @@ -88,19 +102,19 @@ static int getAuxSerialMode(uint8_t port_nr) return UART_MODE_NONE; } -struct AuxSerialPortState +struct SerialPortState { uint8_t mode; const etx_serial_port_t* port; void* usart_ctx; }; -static AuxSerialPortState auxSerialPortStates[MAX_AUX_SERIAL]; +static SerialPortState serialPortStates[MAX_SERIAL_PORTS]; -static AuxSerialPortState* auxGetPortState(int port_nr) +static SerialPortState* getSerialPortState(int port_nr) { - if (port_nr >= MAX_AUX_SERIAL) return nullptr; - return &auxSerialPortStates[port_nr]; + if (port_nr >= MAX_SERIAL_PORTS) return nullptr; + return &serialPortStates[port_nr]; } // TODO: replace serialSetupCallBacks & serialSetupPort @@ -110,18 +124,28 @@ static void serialSetCallBacks(int mode, void* ctx, const etx_serial_port_t* por { void (*sendByte)(void*, uint8_t) = nullptr; int (*getByte)(void*, uint8_t*) = nullptr; + void (*setRxCb)(void*, void (*)(uint8_t*, uint32_t)) = nullptr; + const etx_serial_driver_t* drv = nullptr; if (port) { - sendByte = port->uart->sendByte; - getByte = port->uart->getByte; - } - + drv = port->uart; + if (drv) { + sendByte = drv->sendByte; + getByte = drv->getByte; + setRxCb = drv->setReceiveCb; + } + } + + // prevent compiler warnings + (void)sendByte; + (void)getByte; + (void)setRxCb; + switch(mode) { #if defined(DEBUG) case UART_MODE_DEBUG: // TODO: should we handle 2 outputs? dbgSerialSetSendCb(ctx, sendByte); - (void)getByte; break; #endif @@ -129,23 +153,37 @@ static void serialSetCallBacks(int mode, void* ctx, const etx_serial_port_t* por #if defined(LUA) case UART_MODE_LUA: luaSetSendCb(ctx, sendByte); - luaSetGetSerialByte(ctx, getByte); + if (getByte) { + luaSetGetSerialByte(ctx, getByte); + } else if (setRxCb) { + setRxCb(ctx, luaReceiveData); + } break; #endif #if defined(SBUS_TRAINER) case UART_MODE_SBUS_TRAINER: sbusSetAuxGetByte(ctx, getByte); + // TODO: setRxCb (see MODE_LUA) break; #endif case UART_MODE_TELEMETRY: telemetrySetGetByte(ctx, getByte); + // TODO: setRxCb (see MODE_LUA) + // de we really need telemetry + // input over USB VCP? break; case UART_MODE_TELEMETRY_MIRROR: telemetrySetMirrorCb(ctx, sendByte); break; + +#if defined(CLI) + case UART_MODE_CLI: + cliSetSerialDriver(ctx, drv); + break; +#endif #endif } } @@ -203,14 +241,20 @@ static void serialSetupPort(int mode, etx_serial_init& params, bool& power_requi void serialInit(int port_nr, int mode) { - if (port_nr >= MAX_AUX_SERIAL) return; - - auto state = auxGetPortState(port_nr); + auto state = getSerialPortState(port_nr); if (!state) return; - auto port = auxSerialGetPort(port_nr); + const etx_serial_port_t* port = nullptr; + if (port_nr != SP_VCP) { + port = auxSerialGetPort(port_nr); + } +#if defined(USB_SERIAL) + else { + port = &UsbSerialPort; + } +#endif if (!port) return; - + if (state->port) { auto drv = state->port->uart; if (drv->deinit) { @@ -218,9 +262,9 @@ void serialInit(int port_nr, int mode) } if (state->mode != 0) { // Clear callbacks - serialSetCallBacks(mode, nullptr, nullptr); + serialSetCallBacks(state->mode, nullptr, nullptr); } - memset(state, 0, sizeof(AuxSerialPortState)); + memset(state, 0, sizeof(SerialPortState)); } etx_serial_init params = { @@ -253,17 +297,17 @@ void serialInit(int port_nr, int mode) void initSerialPorts() { - memset(auxSerialPortStates, 0, sizeof(auxSerialPortStates)); + memset(serialPortStates, 0, sizeof(serialPortStates)); for (int port_nr = 0; port_nr < MAX_AUX_SERIAL; port_nr++) { - auto mode = getAuxSerialMode(port_nr); + auto mode = getSerialPortMode(port_nr); serialInit(port_nr, mode); } } uint8_t serialGetMode(int port_nr) { - auto state = auxGetPortState(port_nr); + auto state = getSerialPortState(port_nr); if (!state) return UART_MODE_NONE; return state->mode; } @@ -279,21 +323,30 @@ uint8_t serialTracesEnabled(int port_nr) void serialStop(int port_nr) { - auto state = auxGetPortState(port_nr); + auto state = getSerialPortState(port_nr); if (!state) return; if (state->port) { - auto drv = state->port->uart; + auto port = state->port; + auto drv = port->uart; if (drv && drv->deinit) { drv->deinit(state->usart_ctx); } - memset(state, 0, sizeof(AuxSerialPortState)); + if (state->mode != 0) { + // Clear callbacks + serialSetCallBacks(state->mode, nullptr, nullptr); + } + if (port->set_pwr) { + // Power OFF + port->set_pwr(0); + } + memset(state, 0, sizeof(SerialPortState)); } } void serialPutc(int port_nr, uint8_t c) { - auto state = auxGetPortState(port_nr); + auto state = getSerialPortState(port_nr); if (!state) return; if (state->port) { diff --git a/radio/src/serial.h b/radio/src/serial.h index a9e8133bf..15ca63e82 100644 --- a/radio/src/serial.h +++ b/radio/src/serial.h @@ -24,8 +24,6 @@ #include -#define MAX_AUX_SERIAL 2 - void initSerialPorts(); uint8_t serialGetMode(int port_nr); uint8_t serialTracesEnabled(int port_nr); @@ -33,22 +31,6 @@ void serialInit(int port_nr, int mode); void serialStop(int port_nr); void serialPutc(int port_nr, uint8_t c); -#if defined(AUX_SERIAL) -#define auxSerialSbusInit() serialInit(0, UART_MODE_SBUS_TRAINER) -#define auxSerialGetMode() serialGetMode(0) -#define auxSerialTracesEnabled() serialTracesEnabled(0) -#define auxSerialStop() serialStop(0) -#define auxSerialPutc(c) serialPutc(0, (c)) -#endif - -#if defined(AUX2_SERIAL) -#define aux2SerialSbusInit() serialInit(1, UART_MODE_SBUS_TRAINER) -#define aux2SerialGetMode() serialGetMode(1) -#define aux2SerialTracesEnabled() serialTracesEnabled(1) -#define aux2SerialStop() serialStop(1) -#define aux2SerialPutc(c) serialPutc(1, (c)) -#endif - // // Functions used by debug.h // @@ -69,5 +51,9 @@ void dbgSerialCrlf(); // Debug serial callback void dbgSerialSetSendCb(void* ctx, void (*cb)(void*, uint8_t)); +// Query debug callback +void (*dbgSerialGetSendCb())(void*, uint8_t); +void* dbgSerialGetSendCbCtx(); + #endif // _SERIAL_H_ diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index 141a896fb..3e080b679 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -135,7 +135,7 @@ AuxSerialState auxSerialState = { }; // TODO: grab context to get buffer -static bool auxSerialOnSend(uint8_t* data) +static uint8_t auxSerialOnSend(uint8_t* data) { return auxSerialTxFifo.pop(*data); } @@ -153,14 +153,15 @@ static void* auxSerialInit(const etx_serial_init* params) } const etx_serial_driver_t AuxSerialDriver = { - .init = auxSerialInit, - .deinit = aux_serial_deinit, - .sendByte = aux_serial_putc, - .sendBuffer = aux_serial_send_buffer, - .waitForTxCompleted = aux_wait_tx_completed, - .getByte = aux_get_byte, - .setReceiveCb = nullptr, - .setOnErrorCb = nullptr, + .init = auxSerialInit, + .deinit = aux_serial_deinit, + .sendByte = aux_serial_putc, + .sendBuffer = aux_serial_send_buffer, + .waitForTxCompleted = aux_wait_tx_completed, + .getByte = aux_get_byte, + .getBaudrate = nullptr, + .setReceiveCb = nullptr, + .setBaudrateCb = nullptr, }; extern "C" void AUX_SERIAL_USART_IRQHandler(void) @@ -206,7 +207,7 @@ AuxSerialState aux2SerialState = { .usart = &aux2USART, }; -static bool aux2SerialOnSend(uint8_t* data) +static uint8_t aux2SerialOnSend(uint8_t* data) { return aux2SerialTxFifo.pop(*data); } @@ -229,14 +230,15 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void) } const etx_serial_driver_t Aux2SerialDriver = { - .init = aux2SerialInit, - .deinit = aux_serial_deinit, - .sendByte = aux_serial_putc, - .sendBuffer = aux_serial_send_buffer, - .waitForTxCompleted = aux_wait_tx_completed, - .getByte = aux_get_byte, - .setReceiveCb = nullptr, - .setOnErrorCb = nullptr, + .init = aux2SerialInit, + .deinit = aux_serial_deinit, + .sendByte = aux_serial_putc, + .sendBuffer = aux_serial_send_buffer, + .waitForTxCompleted = aux_wait_tx_completed, + .getByte = aux_get_byte, + .getBaudrate = nullptr, + .setReceiveCb = nullptr, + .setBaudrateCb = nullptr, }; #endif // AUX2_SERIAL diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.h b/radio/src/targets/common/arm/stm32/aux_serial_driver.h index 6debae13f..2e8625354 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.h +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.h @@ -24,12 +24,10 @@ #include "hal/serial_driver.h" #if defined(AUX_SERIAL) - extern const etx_serial_driver_t AuxSerialDriver; #endif #if defined(AUX2_SERIAL) - extern const etx_serial_driver_t Aux2SerialDriver; #endif diff --git a/radio/src/targets/common/arm/stm32/board_common.h b/radio/src/targets/common/arm/stm32/board_common.h index 13e12bf3f..197d83dfb 100644 --- a/radio/src/targets/common/arm/stm32/board_common.h +++ b/radio/src/targets/common/arm/stm32/board_common.h @@ -80,26 +80,8 @@ #endif -#if defined(__cplusplus) && !defined(SIMU) -extern "C" { -#endif - #include "usb_driver.h" -#if !defined(SIMU) -#include "usbd_cdc_core.h" -#include "usbd_msc_core.h" -#include "usbd_hid_core.h" -#include "usbd_usr.h" -#include "usbd_desc.h" -#include "usb_conf.h" -#include "usbd_conf.h" -#endif - -#if defined(__cplusplus) && !defined(SIMU) -} -#endif - #if defined(SIMU) #include "../simu/simpgmspace.h" #endif diff --git a/radio/src/targets/common/arm/stm32/cpu_id.h b/radio/src/targets/common/arm/stm32/cpu_id.h index 97a78b52d..707f064b8 100644 --- a/radio/src/targets/common/arm/stm32/cpu_id.h +++ b/radio/src/targets/common/arm/stm32/cpu_id.h @@ -20,8 +20,9 @@ */ #include +#include "definitions.h" -void getCPUUniqueID(char * s); +EXTERN_C(void getCPUUniqueID(char * s)); #define LEN_CPU_UID (3*8+2) @@ -29,4 +30,4 @@ void getCPUUniqueID(char * s); extern const uint32_t cpu_uid[3]; #else extern const uint32_t * cpu_uid; -#endif \ No newline at end of file +#endif diff --git a/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp index 648b6464b..3854367ce 100644 --- a/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp @@ -139,6 +139,10 @@ const etx_serial_driver_t ExtmoduleSerialDriver = { .sendByte = extmoduleSendByte, .sendBuffer = extmoduleSendBuffer, .waitForTxCompleted = extmoduleWaitForTxCompleted, + .getByte = nullptr, + .getBaudrate = nullptr, + .setReceiveCb = nullptr, + .setBaudrateCb = nullptr, }; extern "C" void EXTMODULE_USART_IRQHandler(void) diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp index 7e487e2a9..3f38ce167 100755 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -31,7 +31,7 @@ ModuleFifo intmoduleFifo; static uint8_t * intmoduleTxBufferData; static volatile uint8_t intmoduleTxBufferRemaining; -bool intmoduleTxBufferSend(uint8_t* data) +uint8_t intmoduleTxBufferSend(uint8_t* data) { if (intmoduleTxBufferRemaining) { *data = *(intmoduleTxBufferData++); @@ -158,4 +158,8 @@ const etx_serial_driver_t IntmoduleSerialDriver = { .sendByte = intmoduleSendByte, .sendBuffer = intmoduleSendBuffer, .waitForTxCompleted = intmoduleWaitForTxCompleted, + .getByte = nullptr, + .getBaudrate = nullptr, + .setReceiveCb = nullptr, + .setBaudrateCb = nullptr, }; diff --git a/radio/src/targets/common/arm/stm32/usb_driver.cpp b/radio/src/targets/common/arm/stm32/usb_driver.cpp index 5fa56dec0..57a1c9028 100644 --- a/radio/src/targets/common/arm/stm32/usb_driver.cpp +++ b/radio/src/targets/common/arm/stm32/usb_driver.cpp @@ -19,18 +19,24 @@ * GNU General Public License for more details. */ -#if defined(__cplusplus) -extern "C" { -#endif -#include "usb_dcd_int.h" -#include "usb_bsp.h" -#if defined(__cplusplus) -} -#endif - #include "opentx.h" #include "debug.h" +#include "usb_driver.h" + +extern "C" { +#include "usb_conf.h" +#include "usb_dcd_int.h" +#include "usb_bsp.h" + +#include "usbd_cdc_core.h" +#include "usbd_msc_core.h" +#include "usbd_hid_core.h" +#include "usbd_usr.h" +#include "usbd_desc.h" +#include "usbd_conf.h" +} + static bool usbDriverStarted = false; #if defined(BOOT) static usbMode selectedUsbMode = USB_MASS_STORAGE_MODE; diff --git a/radio/src/targets/common/arm/stm32/usb_driver.h b/radio/src/targets/common/arm/stm32/usb_driver.h index a12d319c7..bf3417f4a 100644 --- a/radio/src/targets/common/arm/stm32/usb_driver.h +++ b/radio/src/targets/common/arm/stm32/usb_driver.h @@ -21,6 +21,9 @@ #pragma once +#include "hal/serial_port.h" +#include "definitions.h" + #include #include @@ -47,14 +50,9 @@ void usbStart(); void usbStop(); bool usbStarted(); -int getSelectedUsbMode(); +EXTERN_C(int getSelectedUsbMode()); void setSelectedUsbMode(int mode); -uint32_t usbSerialFreeSpace(); -void usbSerialPutc(void*, uint8_t c); +EXTERN_C(uint32_t usbSerialFreeSpace()); -uint32_t usbSerialBaudRate(void); - -void usbSerialSetReceiveDataCb(void (*cb)(uint8_t* buf, uint32_t len)); -void usbSerialSetCtrlLineStateCb(void (*cb)(uint16_t ctrlLineState)); -void usbSerialSetBaudRateCb(void (*cb)(uint32_t baud)); +extern const etx_serial_port_t UsbSerialPort; diff --git a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp index 2a005a221..cc11077b8 100644 --- a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp +++ b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp @@ -25,11 +25,13 @@ // include STM32 headers and generic board defs #include "board_common.h" +#include "usb_driver.h" extern "C" { /* Includes ------------------------------------------------------------------*/ #include "usb_conf.h" +#include "usbd_cdc_core.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ @@ -76,9 +78,13 @@ extern "C" const CDC_IF_Prop_TypeDef VCP_fops = } // extern "C" -static void (*receiveDataCb)(uint8_t* buf, uint32_t len); -static void (*ctrlLineStateCb)(uint16_t ctrlLineState); -static void (*baudRateCb)(uint32_t baud); +static void (*receiveDataCb)(uint8_t*, uint32_t) = nullptr; +// static void* receiveDataCbCtx; + +//static void (*ctrlLineStateCb)(uint16_t ctrlLineState); + +static void (*baudRateCb)(uint32_t) = nullptr; +// static void* baudRateCbCtx; bool cdcConnected = false; @@ -92,8 +98,8 @@ bool cdcConnected = false; static uint16_t VCP_Init(void) { cdcConnected = true; - ctrlLineStateCb = NULL; - baudRateCb = NULL; + // receiveDataCb = nullptr; + // baudRateCb = nullptr; return USBD_OK; } @@ -107,6 +113,9 @@ static uint16_t VCP_Init(void) static uint16_t VCP_DeInit(void) { cdcConnected = false; + receiveDataCb = nullptr; + baudRateCb = nullptr; + return USBD_OK; } @@ -157,8 +166,10 @@ static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len) case SET_LINE_CODING: if (plc && (Len == sizeof (*plc))) { // If a callback is provided, tell the upper driver of changes in baud rate - if (baudRateCb) { - baudRateCb(plc->bitrate); + auto _cb = baudRateCb; + // auto _ctx = baudRateCbCtx; + if (_cb) { + _cb(/*_ctx,*/ plc->bitrate); } // Copy into structure to save for later ust_cpy(&g_lc, plc); @@ -173,11 +184,11 @@ static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len) case SET_CONTROL_LINE_STATE: // If a callback is provided, tell the upper driver of changes in DTR/RTS state - if (plc && (Len == sizeof (uint16_t))) { - if (ctrlLineStateCb) { - ctrlLineStateCb(*((uint16_t *)Buf)); - } - } + // if (plc && (Len == sizeof (uint16_t))) { + // if (ctrlLineStateCb) { + // ctrlLineStateCb(*((uint16_t *)Buf)); + // } + // } break; case SEND_BREAK: @@ -255,28 +266,51 @@ void usbSerialPutc(void*, uint8_t c) static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len) { auto _rxCb = receiveDataCb; - if (_rxCb) _rxCb(Buf, Len); + // auto _ctx = receiveDataCbCtx; + + if (_rxCb) _rxCb(/*_ctx,*/ Buf, Len); return USBD_OK; } -uint32_t usbSerialBaudRate(void) +uint32_t usbSerialBaudRate(void*) { return g_lc.bitrate; } -void usbSerialSetReceiveDataCb(void (*cb)(uint8_t* buf, uint32_t len)) +void usbSerialSetReceiveDataCb(void*, void (*cb)(uint8_t*, uint32_t)) { + // receiveDataCb = nullptr; + // receiveDataCbCtx = cb_ctx; receiveDataCb = cb; } -void usbSerialSetBaudRateCb(void (*cb)(uint32_t baud)) +void usbSerialSetBaudRateCb(void*, void (*cb)(uint32_t)) { + // baudRateCb = nullptr; + // baudRateCbCtx = cb_ctx; baudRateCb = cb; } -void usbSerialSetCtrlLineStateCb(void (*cb)(uint16_t ctrlLineState)) -{ - ctrlLineStateCb = cb; -} +// void usbSerialSetCtrlLineStateCb(void (*cb)(uint16_t ctrlLineState)) +// { +// ctrlLineStateCb = cb; +// } + +static const etx_serial_driver_t usbSerialDriver = { + nullptr, + nullptr, + usbSerialPutc, + nullptr, + nullptr, + nullptr, + usbSerialBaudRate, + usbSerialSetReceiveDataCb, + usbSerialSetBaudRateCb, +}; + +const etx_serial_port_t UsbSerialPort = { + &usbSerialDriver, + nullptr, +}; // /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 8dbc178fb..5f7be26a2 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -40,15 +40,6 @@ #define ADC_DRIVER x12s_adc_driver #endif -#if defined(__cplusplus) -extern "C" { -#endif -#include "usb_dcd_int.h" -#include "usb_bsp.h" -#if defined(__cplusplus) -} -#endif - extern void flysky_hall_stick_check_init(void); extern void flysky_hall_stick_init(void); extern void flysky_hall_stick_loop( void ); diff --git a/radio/src/targets/simu/module_drivers.cpp b/radio/src/targets/simu/module_drivers.cpp index d369d3324..112de31ee 100644 --- a/radio/src/targets/simu/module_drivers.cpp +++ b/radio/src/targets/simu/module_drivers.cpp @@ -77,8 +77,9 @@ const etx_serial_driver_t IntmoduleSerialDriver = { .sendBuffer = sendBuffer, .waitForTxCompleted = waitForTxCompleted, .getByte = getByte, + .getBaudrate = nullptr, .setReceiveCb = nullptr, - .setOnErrorCb = nullptr, + .setBaudrateCb = nullptr, }; const etx_serial_driver_t ExtmoduleSerialDriver = { @@ -88,6 +89,7 @@ const etx_serial_driver_t ExtmoduleSerialDriver = { .sendBuffer = sendBuffer, .waitForTxCompleted = waitForTxCompleted, .getByte = getByte, + .getBaudrate = nullptr, .setReceiveCb = nullptr, - .setOnErrorCb = nullptr, + .setBaudrateCb = nullptr, }; diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index d4a60c29c..5a8fb7713 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -747,9 +747,10 @@ void rtcSetTime(const struct gtm * t) } #if defined(USB_SERIAL) -void usbSerialPutc(uint8_t c) -{ -} +const etx_serial_port_t UsbSerialPort = { + nullptr, + nullptr, +}; #endif const etx_serial_port_t* auxSerialGetPort(int port_nr) { return nullptr; } diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index d7a50ce8a..696174330 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -63,7 +63,7 @@ #define TR_TRNCHN "CH1CH2CH3CH4" #define LEN_AUX_SERIAL_MODES "\010" -#define TR_AUX_SERIAL_MODES "调试\0 " "回传镜像" "回传输入" "SBUS教练" "LUA脚本\0" +#define TR_AUX_SERIAL_MODES "调试\0 " "回传镜像" "回传输入" "SBUS教练" "LUA脚本\0""CLI\0 " #define LEN_SWTYPES "\004" #define TR_SWTYPES "无\0 " "回弹" "2段\0""3段\0" diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index beeffe0c0..d95491c35 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -62,9 +62,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trenér\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trenér\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "VYP\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trenér\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "VYP\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trenér\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\013" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index feea44349..08b4cf9f7 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Eingang\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Eingang\0""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "AUS\0 ""Telem Mirror\0""Telemetry In\0""SBUS Eingang\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "AUS\0 ""Telem Mirror\0""Telemetry In\0""SBUS Eingang\0""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 68b68db1d..45aba3901 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trainer\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trainer\0""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "OFF\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trainer\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "OFF\0 ""Telem Mirror\0""Telemetry In\0""SBUS Trainer\0""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 30f04adbf..88bc16d12 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetría\0 ""Entrenador SBUS""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetría\0 ""Entrenador SBUS""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "OFF\0 ""Telem Mirror\0""Telemetría\0 ""Entrenador SBUS""LUA\0 " +#define TR_AUX_SERIAL_MODES "OFF\0 ""Telem Mirror\0""Telemetría\0 ""Entrenador SBUS""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\007" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 0cd31e12b..90675ecf1 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Pelik\0""Telemetry In\0""SBUS Trainer\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Pelik\0""Telemetry In\0""SBUS Trainer\0""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "POIS\0 ""S-Port Pelik\0""Telemetry In\0""SBUS Trainer\0""LUA\0 " +#define TR_AUX_SERIAL_MODES "POIS\0 ""S-Port Pelik\0""Telemetry In\0""SBUS Trainer\0""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 1ba53ee0d..a00ccbb54 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -66,9 +66,9 @@ #define LEN_AUX_SERIAL_MODES "\016" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Recopie Telem\0""Télémétrie In\0""Ecolage SBUS\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Recopie Telem\0""Télémétrie In\0""Ecolage SBUS\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "OFF\0 ""Recopie Telem\0""Télémétrie In\0""Ecolage SBUS\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "OFF\0 ""Recopie Telem\0""Télémétrie In\0""Ecolage SBUS\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 8b4ad3dc0..0dc6e8a4c 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -64,9 +64,9 @@ #define LEN_AUX_SERIAL_MODES "\016" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "OFF\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "OFF\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index a5b99a728..a352c4958 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Leerling""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Telem Mirror\0""Telemetry In\0""SBUS Leerling""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "UIT\0 ""Telem Mirror\0""Telemetry In\0""SBUS Leerling""LUA\0 " +#define TR_AUX_SERIAL_MODES "UIT\0 ""Telem Mirror\0""Telemetry In\0""SBUS Leerling""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 701000a9a..bbb62cb3e 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\015" /*13 decimal*/ #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Kopia ""Telemetria\0 ""Trener SBUS\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Kopia ""Telemetria\0 ""Trener SBUS\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "Wyłącz\0 ""S-Port Kopia ""Telemetria\0 ""Trener SBUS\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Wyłącz\0 ""S-Port Kopia ""Telemetria\0 ""Trener SBUS\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index ddb13e1d3..c83d442bd 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -63,9 +63,9 @@ #define LEN_AUX_SERIAL_MODES "\017" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 22eef0f02..e5bd294f7 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -69,9 +69,9 @@ #define LEN_AUX_SERIAL_MODES "\022" #if defined(CLI) || defined(DEBUG) -#define TR_AUX_SERIAL_MODES "Debug\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Debug\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #else -#define TR_AUX_SERIAL_MODES "Av\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""LUA\0 " +#define TR_AUX_SERIAL_MODES "Av\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""LUA\0 ""CLI\0 " #endif #define LEN_SWTYPES "\006" diff --git a/radio/src/translations/tw.h.txt b/radio/src/translations/tw.h.txt index 3e33b315f..61546c07a 100644 --- a/radio/src/translations/tw.h.txt +++ b/radio/src/translations/tw.h.txt @@ -63,7 +63,7 @@ #define TR_TRNCHN "CH1CH2CH3CH4" #define LEN_AUX_SERIAL_MODES "\010" -#define TR_AUX_SERIAL_MODES "調試\0 " "回傳鏡像" "回傳輸入" "SBUS教練" "LUA腳本\0" +#define TR_AUX_SERIAL_MODES "調試\0 " "回傳鏡像" "回傳輸入" "SBUS教練" "LUA腳本\0""CLI\0 " #define LEN_SWTYPES "\004" #define TR_SWTYPES "無\0 " "回彈" "2段\0""3段\0"