From 8bcca878a3ea5e0bfd72e313733d9919ed6ee8ad Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Tue, 21 Jul 2026 14:42:08 +0200 Subject: [PATCH 01/12] SDL Windows MUI --- src/graphics/tftSetup.cpp | 33 +++++++++++++++--------- src/main.cpp | 4 +-- src/platform/portduino/PortduinoGlue.h | 4 +-- variants/native/portduino/platformio.ini | 27 ++++++++++++++++--- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 708cd896747..57c875c4a7b 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -38,6 +38,15 @@ void tft_task_handler(void *param = nullptr) } } +#if defined(ARCH_PORTDUINO) +void tft_thread_entry(void) +{ + // SDL expects window/event/render work on a single thread. + deviceScreen->init(new PacketClient); + tft_task_handler(); +} +#endif + void tftSetup(void) { #ifndef ARCH_PORTDUINO @@ -47,27 +56,28 @@ void tftSetup(void) #else if (portduino_config.displayPanel != no_screen) { DisplayDriverConfig displayConfig; - static char *panels[] = {"NOSCREEN", "X11", "FB", "ST7789", "ST7735", "ST7735S", - "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D"}; + static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", + "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D"}; static char *touch[] = {"NOTOUCH", "XPT2046", "STMPE610", "GT911", "FT5x06"}; -#if defined(USE_X11) - if (portduino_config.displayPanel == x11) { + if (portduino_config.displayPanel == sdl) { + if (portduino_config.displayWidth && portduino_config.displayHeight) + displayConfig = DisplayDriverConfig(DisplayDriverConfig::device_t::SDL, (uint16_t)portduino_config.displayWidth, + (uint16_t)portduino_config.displayHeight); + else + displayConfig.device(DisplayDriverConfig::device_t::SDL); + } else if (portduino_config.displayPanel == x11) { if (portduino_config.displayWidth && portduino_config.displayHeight) displayConfig = DisplayDriverConfig(DisplayDriverConfig::device_t::X11, (uint16_t)portduino_config.displayWidth, (uint16_t)portduino_config.displayHeight); else displayConfig.device(DisplayDriverConfig::device_t::X11); - } else -#elif defined(USE_FRAMEBUFFER) - if (portduino_config.displayPanel == fb) { + } else if (portduino_config.displayPanel == fb) { if (portduino_config.displayWidth && portduino_config.displayHeight) displayConfig = DisplayDriverConfig(DisplayDriverConfig::device_t::FB, (uint16_t)portduino_config.displayWidth, (uint16_t)portduino_config.displayHeight); else displayConfig.device(DisplayDriverConfig::device_t::FB); - } else -#endif - { + } else { displayConfig.device(DisplayDriverConfig::device_t::CUSTOM_TFT) .panel(DisplayDriverConfig::panel_config_t{.type = panels[portduino_config.displayPanel], .panel_width = (uint16_t)portduino_config.displayWidth, @@ -121,7 +131,6 @@ void tftSetup(void) } deviceScreen = &DeviceScreen::create(&displayConfig); PacketAPI::create(PacketServer::init()); - deviceScreen->init(new PacketClient); } else { LOG_INFO("Running without TFT display!"); } @@ -133,7 +142,7 @@ void tftSetup(void) endSleepObserver.observe(¬ifyLightSleepEnd); xTaskCreatePinnedToCore(tft_task_handler, "tft", TFT_TASK_STACK_SIZE, NULL, 1, NULL, 0); #elif defined(ARCH_PORTDUINO) - std::thread *tft_task = new std::thread([] { tft_task_handler(); }); + std::thread *tft_task = new std::thread([] { tft_thread_entry(); }); #endif } } diff --git a/src/main.cpp b/src/main.cpp index 37ed61e561e..d85e96b2f8d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1454,8 +1454,8 @@ void loop() rebootAtMsec = millis() + 25; } } -#if HAS_TFT - if (screen && portduino_config.displayPanel == x11 && +#if HAS_TFT && !defined(_WIN32) + if (screen && (portduino_config.displayPanel == sdl) && config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) { auto dispdev = screen->getDisplayDevice(); if (dispdev) diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index b5a47787e12..63d1e49edb8 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -34,7 +34,7 @@ inline const std::unordered_map configProducts = { {"RAK6421-13300-S1", "lora-RAK6421-13300-slot1.yaml"}, {"RAK6421-13300-S2", "lora-RAK6421-13300-slot2.yaml"}}; -enum screen_modules { no_screen, x11, fb, st7789, st7735, st7735s, st7796, ili9341, ili9342, ili9486, ili9488, hx8357d, hub75 }; +enum screen_modules { no_screen, x11, sdl, fb, st7789, st7735, st7735s, st7796, ili9341, ili9342, ili9486, ili9488, hx8357d, hub75 }; enum touchscreen_modules { no_touchscreen, xpt2046, stmpe610, gt911, ft5x06 }; enum portduino_log_level { level_error, level_warn, level_info, level_debug, level_trace }; enum lora_module_enum { @@ -80,7 +80,7 @@ extern struct portduino_config_struct { {use_simradio, "sim"}, {use_autoconf, "auto"}, {use_rf95, "RF95"}, {use_sx1262, "sx1262"}, {use_sx1268, "sx1268"}, {use_sx1280, "sx1280"}, {use_lr1110, "lr1110"}, {use_lr1120, "lr1120"}, {use_lr1121, "lr1121"}, {use_llcc68, "LLCC68"}}; - std::map screen_names = {{x11, "X11"}, {fb, "FB"}, {st7789, "ST7789"}, + std::map screen_names = {{x11, "X11"}, {sdl, "SDL"}, {fb, "FB"}, {st7789, "ST7789"}, {st7735, "ST7735"}, {st7735s, "ST7735S"}, {st7796, "ST7796"}, {ili9341, "ILI9341"}, {ili9342, "ILI9342"}, {ili9486, "ILI9486"}, {ili9488, "ILI9488"}, {hx8357d, "HX8357D"}, {hub75, "HUB75"}}; diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 22ac4ff5f4a..5300a1a18a6 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -261,7 +261,7 @@ lib_ignore = ${env:native-macos.lib_ignore} ; firmware builds as gnu17/gnu++17 with GNU extensions throughout. ; ; Prerequisites (MSYS2, https://www.msys2.org/): -; pacman -S --needed mingw-w64-ucrt-x86_64-{gcc,pkgconf,yaml-cpp,libuv,jsoncpp,openssl,libusb} +; pacman -S --needed mingw-w64-ucrt-x86_64-{gcc,pkgconf,yaml-cpp,libuv,jsoncpp,openssl,libusb,SDL2} ; ; argp is not packaged for MSYS2's mingw environments (msys/libargp links the ; msys-2.0.dll emulation layer and can't be used for a native binary), yet @@ -305,7 +305,24 @@ build_flags = ${portduino_base.build_flags_common} ; screen renderer; EXCLUDE_SCREEN gates the `screen->...` hooks in the sensors. -DHAS_SCREEN=0 -DMESHTASTIC_EXCLUDE_SCREEN=1 + ; MUI + -D RAM_SIZE=16384 + -D HAS_TFT=1 + -D USE_SDL=1 + -D LV_USE_LOG=1 + -D LV_USE_EVDEV=1 +; -D LV_CACHE_DEF_SIZE=6291456 + -D LV_BUILD_TEST=0 + -D LV_LVGL_H_INCLUDE_SIMPLE + -D LV_CONF_INCLUDE_SIMPLE + -D LV_COMP_CONF_INCLUDE_SIMPLE + -D USE_LOG_DEBUG + -D LOG_DEBUG_INC=\"DebugConfiguration.h\" + -D USE_PACKET_API + -D VIEW_320x240 !pkg-config --cflags --libs openssl --silence-errors || : + !pkg-config --cflags-only-I --libs --static sdl2 --silence-errors || : + -Wl,-subsystem,console build_unflags = -fPIC ; ignored on Windows, where all code is position-independent ; Static link, so meshtasticd.exe stands alone and can't be hijacked by a stray @@ -320,12 +337,14 @@ build_src_filter = ${native_base.build_src_filter} - - - -; LovyanGFX includes and is only needed by the TFT variants. The pine64 -; libch341 is the libusb backend that libpinedio_ch341dll.c replaces; keeping both + +lib_deps = + ${native_base.lib_deps} + ${device-ui_base.lib_deps} +; Pine libch341 is the libusb backend that libpinedio_ch341dll.c replaces; keeping both ; would duplicate every pinedio_* symbol. lib_ignore = ${portduino_base.lib_ignore} - LovyanGFX Pine libch341-spi Userspace library ; --------------------------------------------------------------------------- From f8908703396d3d2c4cecc331211e573c556c21ef Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Tue, 21 Jul 2026 15:05:16 +0200 Subject: [PATCH 02/12] disable lvgl logging --- variants/native/portduino/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 5300a1a18a6..7231b49892e 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -309,7 +309,7 @@ build_flags = ${portduino_base.build_flags_common} -D RAM_SIZE=16384 -D HAS_TFT=1 -D USE_SDL=1 - -D LV_USE_LOG=1 + -D LV_USE_LOG=0 -D LV_USE_EVDEV=1 ; -D LV_CACHE_DEF_SIZE=6291456 -D LV_BUILD_TEST=0 From 6b9a7e5632ee6b2499e3661488ada7eb7d974e90 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Tue, 21 Jul 2026 15:05:30 +0200 Subject: [PATCH 03/12] update device-ui commit --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index dcd27e8c860..9f5b5e90422 100644 --- a/platformio.ini +++ b/platformio.ini @@ -127,7 +127,7 @@ lib_deps = [device-ui_base] lib_deps = # renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master - https://github.com/meshtastic/device-ui/archive/ef573c368767625ffbe8c32cf921ea7366f2dd53.zip + https://github.com/meshtastic/device-ui/archive/b5555f1238354ce63b3578462c4a00f0e2b313af.zip ; Common libs for environmental measurements in telemetry module [environmental_base] From 74c9729d2638b84e7e1927894645fc6e2cd105f9 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Tue, 21 Jul 2026 18:54:26 +0200 Subject: [PATCH 04/12] trunk fmt --- src/graphics/tftSetup.cpp | 4 ++-- src/platform/portduino/PortduinoGlue.h | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 57c875c4a7b..cbd6f72d3d6 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -56,8 +56,8 @@ void tftSetup(void) #else if (portduino_config.displayPanel != no_screen) { DisplayDriverConfig displayConfig; - static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", - "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D"}; + static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", + "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D"}; static char *touch[] = {"NOTOUCH", "XPT2046", "STMPE610", "GT911", "FT5x06"}; if (portduino_config.displayPanel == sdl) { if (portduino_config.displayWidth && portduino_config.displayHeight) diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index 63d1e49edb8..04d66edd410 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -34,7 +34,22 @@ inline const std::unordered_map configProducts = { {"RAK6421-13300-S1", "lora-RAK6421-13300-slot1.yaml"}, {"RAK6421-13300-S2", "lora-RAK6421-13300-slot2.yaml"}}; -enum screen_modules { no_screen, x11, sdl, fb, st7789, st7735, st7735s, st7796, ili9341, ili9342, ili9486, ili9488, hx8357d, hub75 }; +enum screen_modules { + no_screen, + x11, + sdl, + fb, + st7789, + st7735, + st7735s, + st7796, + ili9341, + ili9342, + ili9486, + ili9488, + hx8357d, + hub75 +}; enum touchscreen_modules { no_touchscreen, xpt2046, stmpe610, gt911, ft5x06 }; enum portduino_log_level { level_error, level_warn, level_info, level_debug, level_trace }; enum lora_module_enum { @@ -80,10 +95,10 @@ extern struct portduino_config_struct { {use_simradio, "sim"}, {use_autoconf, "auto"}, {use_rf95, "RF95"}, {use_sx1262, "sx1262"}, {use_sx1268, "sx1268"}, {use_sx1280, "sx1280"}, {use_lr1110, "lr1110"}, {use_lr1120, "lr1120"}, {use_lr1121, "lr1121"}, {use_llcc68, "LLCC68"}}; - std::map screen_names = {{x11, "X11"}, {sdl, "SDL"}, {fb, "FB"}, {st7789, "ST7789"}, - {st7735, "ST7735"}, {st7735s, "ST7735S"}, {st7796, "ST7796"}, - {ili9341, "ILI9341"}, {ili9342, "ILI9342"}, {ili9486, "ILI9486"}, - {ili9488, "ILI9488"}, {hx8357d, "HX8357D"}, {hub75, "HUB75"}}; + std::map screen_names = { + {x11, "X11"}, {sdl, "SDL"}, {fb, "FB"}, {st7789, "ST7789"}, {st7735, "ST7735"}, + {st7735s, "ST7735S"}, {st7796, "ST7796"}, {ili9341, "ILI9341"}, {ili9342, "ILI9342"}, {ili9486, "ILI9486"}, + {ili9488, "ILI9488"}, {hx8357d, "HX8357D"}, {hub75, "HUB75"}}; lora_module_enum lora_module; bool has_rfswitch_table = false; From 58f3fbf746bd5322ad966f2f197d8976260cb4b5 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Tue, 21 Jul 2026 19:03:21 +0200 Subject: [PATCH 05/12] re-add native-tft SDL support --- variants/native/portduino/platformio.ini | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 7231b49892e..8ca57ec1f12 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -34,12 +34,14 @@ lib_deps = ${device-ui_base.lib_deps} build_flags = ${native_base.build_flags} -Os -lX11 -linput -lxkbcommon -ffunction-sections -fdata-sections -Wl,--gc-sections -D RAM_SIZE=16384 - -D USE_X11=1 -D HAS_TFT=1 -D HAS_SCREEN=1 - -D LV_CACHE_DEF_SIZE=6291456 - -D LV_BUILD_TEST=0 + -D USE_X11=1 + -D USE_SDL=1 + -D LV_USE_EVDEV=1 -D LV_USE_LIBINPUT=1 +; -D LV_CACHE_DEF_SIZE=6291456 + -D LV_BUILD_TEST=0 -D LV_LVGL_H_INCLUDE_SIMPLE -D LV_CONF_INCLUDE_SIMPLE -D LV_COMP_CONF_INCLUDE_SIMPLE From f1d10ce7a271fd0bde417ae02f9823f193407b06 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Tue, 21 Jul 2026 19:15:03 +0200 Subject: [PATCH 06/12] HAS_SCREEN --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index e98786571fa..6b5cf3d6e27 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1457,7 +1457,7 @@ void loop() rebootAtMsec = millis() + 25; } } -#if HAS_TFT && !defined(_WIN32) +#if HAS_TFT && HAS_SCREEN if (screen && (portduino_config.displayPanel == sdl) && config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) { auto dispdev = screen->getDisplayDevice(); From 7535014be24b59158239100a686c95f53cde0d8f Mon Sep 17 00:00:00 2001 From: Manuel Date: Thu, 23 Jul 2026 20:10:13 +0200 Subject: [PATCH 07/12] add display zoom for SDL scaling --- src/graphics/tftSetup.cpp | 2 +- src/platform/portduino/PortduinoGlue.cpp | 1 + src/platform/portduino/PortduinoGlue.h | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index cbd6f72d3d6..2718a52160b 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -62,7 +62,7 @@ void tftSetup(void) if (portduino_config.displayPanel == sdl) { if (portduino_config.displayWidth && portduino_config.displayHeight) displayConfig = DisplayDriverConfig(DisplayDriverConfig::device_t::SDL, (uint16_t)portduino_config.displayWidth, - (uint16_t)portduino_config.displayHeight); + (uint16_t)portduino_config.displayHeight, portduino_config.displayZoom); else displayConfig.device(DisplayDriverConfig::device_t::SDL); } else if (portduino_config.displayPanel == x11) { diff --git a/src/platform/portduino/PortduinoGlue.cpp b/src/platform/portduino/PortduinoGlue.cpp index 750396769a7..4efd2f85b05 100644 --- a/src/platform/portduino/PortduinoGlue.cpp +++ b/src/platform/portduino/PortduinoGlue.cpp @@ -1050,6 +1050,7 @@ bool loadConfig(const char *configPath) } portduino_config.displayHeight = yamlConfig["Display"]["Height"].as(0); portduino_config.displayWidth = yamlConfig["Display"]["Width"].as(0); + portduino_config.displayZoom = yamlConfig["Display"]["Zoom"].as(1.0); readGPIOFromYaml(yamlConfig["Display"]["DC"], portduino_config.displayDC, -1); readGPIOFromYaml(yamlConfig["Display"]["CS"], portduino_config.displayCS, -1); diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index 04d66edd410..070797230cd 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -149,6 +149,7 @@ extern struct portduino_config_struct { screen_modules displayPanel = no_screen; int displayWidth = 0; int displayHeight = 0; + float displayZoom = 1.0; bool displayRGBOrder = false; bool displayBacklightInvert = false; bool displayRotate = false; @@ -446,6 +447,8 @@ extern struct portduino_config_struct { out << YAML::Key << "Width" << YAML::Value << displayWidth; if (displayHeight) out << YAML::Key << "Height" << YAML::Value << displayHeight; + if (displayZoom != 1.0) + out << YAML::Key << "Zoom" << YAML::Value << displayZoom; if (displayRGBOrder) out << YAML::Key << "RGBOrder" << YAML::Value << true; if (displayBacklightInvert) @@ -460,7 +463,6 @@ extern struct portduino_config_struct { out << YAML::Key << "OffsetY" << YAML::Value << displayOffsetY; out << YAML::Key << "OffsetRotate" << YAML::Value << displayOffsetRotate; - if (displayPanel == hub75) { out << YAML::Key << "HUB75" << YAML::Value << YAML::BeginMap; out << YAML::Key << "HardwareMapping" << YAML::Value << hub75_hardware_mapping; From 15995de35f188a366de356bc7449831b4dcbe422 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 25 Jul 2026 02:17:21 +0200 Subject: [PATCH 08/12] Update device-ui library dependency URL --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 230f824cfbf..f0eac1e8729 100644 --- a/platformio.ini +++ b/platformio.ini @@ -128,7 +128,7 @@ lib_deps = [device-ui_base] lib_deps = # renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master - https://github.com/meshtastic/device-ui/archive/b5555f1238354ce63b3578462c4a00f0e2b313af.zip + https://github.com/meshtastic/device-ui/archive/58abaa541411eb38d813c925c4b3296f0a297169.zip ; Common libs for environmental measurements in telemetry module [environmental_base] From 8f3d39e47339924e6470e6cd55c8e54052e06a70 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Sat, 25 Jul 2026 15:00:17 +0200 Subject: [PATCH 09/12] fix native-windows build (libcurl) --- variants/native/portduino/platformio.ini | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 8ca57ec1f12..bd27ae12e70 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -322,8 +322,12 @@ build_flags = ${portduino_base.build_flags_common} -D LOG_DEBUG_INC=\"DebugConfiguration.h\" -D USE_PACKET_API -D VIEW_320x240 - !pkg-config --cflags --libs openssl --silence-errors || : - !pkg-config --cflags-only-I --libs --static sdl2 --silence-errors || : + ; NOTE: PlatformIO invokes this env with a Windows shell, use `cmd /c exit 0` as a Windows-safe fallback. + ; pkg-config must be in user environment path, e.g. C:\msys64\ucrt64\bin + ; and the .pc files must be in PKG_CONFIG_PATH, e.g. C:\msys64\ucrt64\lib\pkgconfig + !pkg-config --cflags --libs openssl --silence-errors || cmd /c exit 0 + !pkg-config --cflags-only-I --libs --static sdl2 --silence-errors || cmd /c exit 0 + !pkg-config --cflags --libs --static libcurl --silence-errors || cmd /c exit 0 -Wl,-subsystem,console build_unflags = -fPIC ; ignored on Windows, where all code is position-independent From b1a4dbb9de4f5fe6889132493b4426b21629a026 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Sat, 25 Jul 2026 16:31:35 +0200 Subject: [PATCH 10/12] add HUB75 --- src/graphics/tftSetup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 2718a52160b..36c82112ed8 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -57,7 +57,7 @@ void tftSetup(void) if (portduino_config.displayPanel != no_screen) { DisplayDriverConfig displayConfig; static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", - "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D"}; + "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D", "HUB75"}; static char *touch[] = {"NOTOUCH", "XPT2046", "STMPE610", "GT911", "FT5x06"}; if (portduino_config.displayPanel == sdl) { if (portduino_config.displayWidth && portduino_config.displayHeight) From a56ae6037cb42da50996d40a31931ab04a889675 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 25 Jul 2026 18:46:52 +0200 Subject: [PATCH 11/12] add SDL lib to workflow windows build --- .github/workflows/build_windows_bin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_windows_bin.yml b/.github/workflows/build_windows_bin.yml index 5348a11630f..b72b06f70ec 100644 --- a/.github/workflows/build_windows_bin.yml +++ b/.github/workflows/build_windows_bin.yml @@ -48,6 +48,7 @@ jobs: mingw-w64-ucrt-x86_64-jsoncpp mingw-w64-ucrt-x86_64-openssl mingw-w64-ucrt-x86_64-libusb + mingw-w64-ucrt-x86_64-SDL2 mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja git From e5edb934db3f0f55b62bf44fedebfa22403d98a5 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:10:45 +0200 Subject: [PATCH 12/12] trunk fmt --- src/graphics/tftSetup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 36c82112ed8..abe32d4d030 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -56,7 +56,7 @@ void tftSetup(void) #else if (portduino_config.displayPanel != no_screen) { DisplayDriverConfig displayConfig; - static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", + static char *panels[] = {"NOSCREEN", "X11", "SDL", "FB", "ST7789", "ST7735", "ST7735S", "ST7796", "ILI9341", "ILI9342", "ILI9486", "ILI9488", "HX8357D", "HUB75"}; static char *touch[] = {"NOTOUCH", "XPT2046", "STMPE610", "GT911", "FT5x06"}; if (portduino_config.displayPanel == sdl) {