From 074a141d8151257633fa59192e062b647df86d6a Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 8 Mar 2022 17:13:24 +0100 Subject: [PATCH] UI improvements --- radio/src/gui/colorlcd/radio_hardware.cpp | 80 +++++++++++++------ radio/src/gui/gui_common.cpp | 2 +- radio/src/gui/gui_common.h | 2 +- radio/src/hal/serial_port.h | 1 + radio/src/storage/storage_common.cpp | 4 + .../src/targets/common/arm/stm32/usbd_cdc.cpp | 1 + radio/src/targets/horus/CMakeLists.txt | 2 +- radio/src/targets/horus/board.cpp | 8 ++ radio/src/targets/simu/simpgmspace.cpp | 9 +-- radio/src/targets/taranis/board.cpp | 1 + 10 files changed, 75 insertions(+), 35 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index 9b9226a2d..32b8aa01a 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -197,6 +197,56 @@ class BluetoothConfigWindow : public FormGroup }; #endif +class SerialConfigWindow : public FormGroup +{ + public: + SerialConfigWindow(FormWindow *parent, const rect_t &rect) : + FormGroup(parent, rect, FORWARD_SCROLL | FORM_FORWARD_FOCUS) + { + update(); + } + + void update() + { + FormGridLayout grid; +#if LCD_W > LCD_H + grid.setLabelWidth(180); +#else + grid.setLabelWidth(130); +#endif + clear(); + + bool display_ttl_warning = false; + for (uint8_t port_nr = 0; port_nr < MAX_SERIAL_PORTS; port_nr++) { + auto port = serialGetPort(port_nr); + if (!port || !port->name) continue; + + display_ttl_warning = true; + new StaticText(this, grid.getLabelSlot(true), port->name, 0, + COLOR_THEME_PRIMARY1); + auto aux = new Choice( + this, grid.getFieldSlot(), STR_AUX_SERIAL_MODES, 0, + UART_MODE_MAX, [=]() { return serialGetMode(port_nr); }, + [=](int value) { + serialSetMode(port_nr, value); + serialInit(port_nr, value); + SET_DIRTY(); + }); + aux->setAvailableHandler( + [=](int value) { return isSerialModeAvailable(port_nr, value); }); + grid.nextLine(); + } + + if (display_ttl_warning) { + new StaticText(this, grid.getFieldSlot(), STR_TTL_WARNING, 0, + COLOR_THEME_WARNING); + grid.nextLine(); + } + + getParent()->moveWindowsTop(top() + 1, adjustHeight()); + } +}; + void restartExternalModule() { if (!IS_EXTERNAL_MODULE_ON()) { @@ -373,32 +423,10 @@ void RadioHardwarePage::build(FormWindow * window) } #endif - bool display_ttl_warning = false; - for (uint8_t port_nr = 0; port_nr < MAX_SERIAL_PORTS; port_nr++) { - auto port = serialGetPort(port_nr); - if (!port) continue; - - display_ttl_warning = true; - new StaticText(window, grid.getLabelSlot(), STR_AUX_SERIAL_MODE, 0, - COLOR_THEME_PRIMARY1); - auto aux = new Choice( - window, grid.getFieldSlot(1, 0), STR_AUX_SERIAL_MODES, 0, UART_MODE_MAX, - [=]() { return serialGetMode(port_nr); }, - [=](int value) { - serialSetMode(port_nr, value); - serialInit(port_nr, value); - SET_DIRTY(); - }); - aux->setAvailableHandler( - [=](int value) { return isAuxModeAvailable(port_nr, value); }); - grid.nextLine(); - } - - if (display_ttl_warning) { - new StaticText(window, grid.getFieldSlot(1, 0), STR_TTL_WARNING, 0, - COLOR_THEME_WARNING); - grid.nextLine(); - } + new Subtitle(window, grid.getLineSlot(), STR_AUX_SERIAL_MODE, 0, + COLOR_THEME_PRIMARY1); + grid.nextLine(); + grid.addWindow(new SerialConfigWindow(window, {0, grid.getWindowHeight(), LCD_W, 0})); // ADC filter new StaticText(window, grid.getLabelSlot(), STR_JITTER_FILTER, 0, COLOR_THEME_PRIMARY1); diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 4a5551935..b8491a5b7 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -375,7 +375,7 @@ int hasSerialMode(int mode) return -1; } -bool isAuxModeAvailable(uint8_t port_nr, int mode) +bool isSerialModeAvailable(uint8_t port_nr, int mode) { auto p = hasSerialMode(mode); if (p >= 0 && p != port_nr) return false; diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 470a9cda2..7758dd746 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -86,7 +86,7 @@ bool isSourceAvailableInCustomSwitches(int source); bool isSourceAvailableInResetSpecialFunction(int index); bool isSourceAvailableInGlobalResetSpecialFunction(int index); bool isSwitchAvailable(int swtch, SwitchContext context); -bool isAuxModeAvailable(uint8_t port_nr, int mode); +bool isSerialModeAvailable(uint8_t port_nr, int mode); int hasSerialMode(int mode); bool isSwitchAvailableInLogicalSwitches(int swtch); bool isSwitchAvailableInCustomFunctions(int swtch); diff --git a/radio/src/hal/serial_port.h b/radio/src/hal/serial_port.h index 25bea20a5..2f0eaa767 100644 --- a/radio/src/hal/serial_port.h +++ b/radio/src/hal/serial_port.h @@ -26,6 +26,7 @@ typedef void etx_pwr_driver; typedef struct { + const char* name; const etx_serial_driver_t* uart; void (*set_pwr)(uint8_t on); } etx_serial_port_t; diff --git a/radio/src/storage/storage_common.cpp b/radio/src/storage/storage_common.cpp index 5b791974e..0fc17dbcd 100644 --- a/radio/src/storage/storage_common.cpp +++ b/radio/src/storage/storage_common.cpp @@ -82,6 +82,10 @@ void postRadioSettingsLoad() setDefaultOwnerId(); } #endif +#if defined(PCBX12S) + // AUX2 is hardwired to AUX2 on X12S + serialSetMode(SP_AUX2, UART_MODE_GPS); +#endif } #if defined(EXTERNAL_ANTENNA) && defined(INTERNAL_MODULE_PXX1) diff --git a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp index cc11077b8..7c07367d4 100644 --- a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp +++ b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp @@ -309,6 +309,7 @@ static const etx_serial_driver_t usbSerialDriver = { }; const etx_serial_port_t UsbSerialPort = { + "VCP", &usbSerialDriver, nullptr, }; diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index ce6277b5a..748745757 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -54,6 +54,7 @@ set(INTERNAL_MODULES PXX1;PXX2;MULTI;CRSF CACHE STRING "Internal modules") # VCP CLI set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") set(CLI ON CACHE BOOL "Enable CLI") +set(AUX_SERIAL ON) if (PCB STREQUAL X10) set(PCBREV "STD" CACHE STRING "PCB Revision") @@ -100,7 +101,6 @@ if (PCB STREQUAL X10) set(USB_CHARGER YES) set(DEFAULT_THEME "DARKBLUE") set(SBUS_TRAINER ON) - set(AUX_SERIAL ON) add_definitions(-DMANUFACTURER_RADIOMASTER) if (NOT BLUETOOTH) set(AUX2_SERIAL ON) diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 6eb1d7560..c7d081165 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -349,6 +349,7 @@ void set_aux_pwr(uint8_t on) } const etx_serial_port_t auxSerialPort = { + "AUX1", &AuxSerialDriver, set_aux_pwr, }; @@ -366,6 +367,13 @@ void set_aux2_pwr(uint8_t on) } const etx_serial_port_t aux2SerialPort = { +#if !defined(PCBX12S) + "AUX2", +#else + // AUX2 is hardwired to the internal GPS + // on the X12S, let's hide the setting + nullptr, +#endif &Aux2SerialDriver, set_aux2_pwr, }; diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index c9f55da4e..ddd430b4c 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -747,21 +747,18 @@ void rtcSetTime(const struct gtm * t) } #if defined(USB_SERIAL) -const etx_serial_port_t UsbSerialPort = { - nullptr, - nullptr, -}; +const etx_serial_port_t UsbSerialPort = { "VCP", nullptr, nullptr }; #endif #if defined(AUX_SERIAL) -const etx_serial_port_t auxSerialPort = { nullptr, nullptr }; +const etx_serial_port_t auxSerialPort = { "AUX1", nullptr, nullptr }; #define AUX_SERIAL_PORT &auxSerialPort #else #define AUX_SERIAL_PORT nullptr #endif #if defined(AUX2_SERIAL) -const etx_serial_port_t aux2SerialPort = { nullptr, nullptr }; +const etx_serial_port_t aux2SerialPort = { "AUX2", nullptr, nullptr }; #define AUX2_SERIAL_PORT &aux2SerialPort #else #define AUX2_SERIAL_PORT nullptr diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index bcc4a1658..02b773ca0 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -419,6 +419,7 @@ void initJackDetect(void) #if defined(AUX_SERIAL) const etx_serial_port_t auxSerialPort = { + "AUX1", &AuxSerialDriver, nullptr };