From d9e1e94de6b5297570018ed792688647999919a3 Mon Sep 17 00:00:00 2001 From: Frank Tucker Date: Tue, 6 Oct 2026 02:01:37 +0000 Subject: [PATCH] Tab5: fix black screen at boot, power the keyboard and WiFi; hold Ctrl to talk - Main task stack 12 KB on both boards (sdkconfig.defaults). The T-Deck had it only in its committed sdkconfig, so the Tab5 got the 3.5 KB default and app_main overflowed while bringing up the SD card, display and terminal screen (black screen, reboot loop). Speed optimization, assertions off and WARN logging moved to the shared defaults the same way; the T-Deck's sdkconfig is unchanged. Guard: main task stack >= 12 KB for both boards. - IO expanders: after the driver's reset every pin is high-impedance, so set_dir/set_level alone never drove the keyboard's 5 V, the ESP32-C6 power or the charger. Outputs are now push-pull, with M5Stack's levels: internal antenna, USB-A 5 V off, no power-off pulse, standard (not quick) charging. - Chat push-to-talk on the Tab5: hold Ctrl on its own (was Ctrl+Space). Another key pressed first makes it a control code; a long hold only deletes a history entry when Ctrl was alone. - sdkconfig.tab5 regenerated from the locked components (LVGL 9.4.0, as the T-Deck). RAM: T-Deck 116,199 bytes static (unchanged), Tab5 98,294. Not yet confirmed on a Tab5. Co-Authored-By: Claude Opus 5.5 --- AI_RULES.md | 8 +- README.md | 4 +- main/board_tab5.cpp | 30 +- main/chat_app.cpp | 2 +- main/include/tab5_keymap.hpp | 7 +- main/tab5_keymap.cpp | 47 ++- sdkconfig.defaults | 10 + sdkconfig.tab5 | 541 +++++++++------------------ test/guards/test_firmware_rules.py | 7 + test/host/tests/test_tab5_keymap.cpp | 34 +- 10 files changed, 285 insertions(+), 405 deletions(-) diff --git a/AI_RULES.md b/AI_RULES.md index f8d64f9..39147b8 100644 --- a/AI_RULES.md +++ b/AI_RULES.md @@ -119,9 +119,11 @@ menu of short prompts; the screen is edge-to-edge text (no borders or decoration touch, detected by the `espressif/m5stack_tab5` BSP), rotated to 1280x720 landscape by the PPA (`LV_DISPLAY_ROTATION_90`, keyboard at the bottom); LVGL buffers in PSRAM. Backlight GPIO 22. System I2C on GPIO 31/32 (BSP): IO expanders, touch, codecs, INA226 battery monitor. -- IO expanders (PI4IOE5V6408), reset by the BSP at init: 0x43 P1 speaker amp, P2 5 V to the - side port (the keyboard needs it), P4 LCD reset, P5 touch reset; 0x44 P0 ESP32-C6 power, - P5 fast-charge (low = on), P7 charger enable. `board::init_power()` sets them: the battery +- IO expanders (PI4IOE5V6408), reset by the BSP at init: 0x43 P0 antenna (low = internal), + P1 speaker amp, P2 5 V to the side port (the keyboard needs it), P4 LCD reset, P5 touch + reset; 0x44 P0 ESP32-C6 power, P3 USB-A 5 V, P4 power-off pulse, P5 quick charge (low = on), + P7 charger enable. The reset leaves every pin high-impedance: an output only drives once set + push-pull (`esp_io_expander_set_output_mode()`). `board::init_power()` sets them: the battery charges only while firmware enables the charger. - Keyboard: STM32 at I2C 0x6D on its own bus (G0 SDA, G1 SCL), INT G50 low while events are queued, raw mode (press/release by row/column; reading 0x20 pops an event, so never retry diff --git a/README.md b/README.md index 8fefa6f..ffc8382 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ OpenAI, and only while you use ChatGPT. the Tab5 keyboard just press them: Ctrl+letter, Tab and Esc go straight to the server. - **History**: roll the trackball left (older) or right (newer). Tab5: Up / Down. - **Disconnect**: type `exit` to return to the menu. -- **ChatGPT**: type to chat, or hold the trackball (Tab5: hold Ctrl+Space) to speak and let +- **ChatGPT**: type to chat, or hold the trackball (Tab5: hold Ctrl) to speak and let go to send. Start talking once `* Recording` shows. Your speech is transcribed by OpenAI's speech-to-text model, then sent as your message to the chat model you picked. If the microphone picks up nothing, the @@ -118,7 +118,7 @@ at a time. Use one-shot commands instead, for example `top -n 1`. | Aa | Hold for capitals; tap for one capital; tap twice for caps lock | | Sym + key | The key's second symbol (`?` `/` `<` `>` `{` `}` `\|` `~` `:` `"` `=` `,`) | | Ctrl + letter | Control code to the server (Ctrl+C, Ctrl+D, Ctrl+Z, Ctrl+L ...) | -| Ctrl+Space (hold) | Talk to ChatGPT; held for a second elsewhere, deletes the shown history entry | +| Ctrl (hold on its own) | Talk to ChatGPT while held; held for a second elsewhere, deletes the shown history entry | Held keys repeat. The keyboard can be attached or removed while SimplrSSH runs, and the Tab5 charges its battery over USB-C while SimplrSSH runs. diff --git a/main/board_tab5.cpp b/main/board_tab5.cpp index edf5492..afbaf0d 100644 --- a/main/board_tab5.cpp +++ b/main/board_tab5.cpp @@ -21,16 +21,19 @@ static const char *TAG = "board"; const char* const board::NAME = "Tab5"; -const char* const board::HINT_TALK = "hold Ctrl+Space"; +const char* const board::HINT_TALK = "hold Ctrl"; const char* const board::HINT_SCROLL = "Sym+Up/Down or drag: scroll."; const char* const board::HINT_HISTORY = "Up/Down: history."; const char* const board::SCREEN_DESC = "a 5-inch tablet with a 1280x720 text screen"; // IO expander pins (M5Stack Tab5 pin map) +static const uint32_t IO_RF_EXTERNAL = IO_EXPANDER_PIN_NUM_0; // 0x43 P0: antenna, low = internal static const uint32_t IO_SPEAKER_EN = IO_EXPANDER_PIN_NUM_1; // 0x43 P1: NS4150B amplifier static const uint32_t IO_EXT5V_EN = IO_EXPANDER_PIN_NUM_2; // 0x43 P2: 5 V to the side port (keyboard) static const uint32_t IO1_WLAN_PWR_EN = IO_EXPANDER_PIN_NUM_0; // 0x44 P0: ESP32-C6 power -static const uint32_t IO1_QC_DISABLE = IO_EXPANDER_PIN_NUM_5; // 0x44 P5: low = fast charge allowed +static const uint32_t IO1_USB5V_EN = IO_EXPANDER_PIN_NUM_3; // 0x44 P3: 5 V out of the USB-A port +static const uint32_t IO1_PWROFF = IO_EXPANDER_PIN_NUM_4; // 0x44 P4: power-off pulse +static const uint32_t IO1_NQC_EN = IO_EXPANDER_PIN_NUM_5; // 0x44 P5: low = quick charge static const uint32_t IO1_CHARGE_EN = IO_EXPANDER_PIN_NUM_7; // 0x44 P7: IP2326 charger on static bool s_wifi_ready = false; @@ -50,23 +53,30 @@ const board::Ui& board::ui() void board::init_power() { - // Both expanders are reset by their driver on first use (all inputs): set what SimplrSSH needs + // Both expanders are reset by their driver on first use: set what SimplrSSH needs esp_io_expander_handle_t io = bsp_io_expander_init(); esp_io_expander_handle_t io1 = bsp_io_expander1_init(); if (!io || !io1) { ESP_LOGE(TAG, "IO expanders not reachable"); return; } - // Speaker amplifier off until audio_tab5.cpp plays something; side-port 5 V on for the keyboard - esp_io_expander_set_dir(io, IO_SPEAKER_EN | IO_EXT5V_EN, IO_EXPANDER_OUTPUT); - esp_io_expander_set_level(io, IO_SPEAKER_EN, 0); + // The driver's reset leaves every pin high-impedance (pulled low): each output must be set + // push-pull, or it never drives. Levels as M5Stack's own firmware sets them. + // Internal antenna; speaker amplifier off until audio_tab5.cpp plays; side-port 5 V on for the keyboard + const uint32_t outs = IO_RF_EXTERNAL | IO_SPEAKER_EN | IO_EXT5V_EN; + esp_io_expander_set_dir(io, outs, IO_EXPANDER_OUTPUT); + esp_io_expander_set_level(io, IO_RF_EXTERNAL | IO_SPEAKER_EN, 0); esp_io_expander_set_level(io, IO_EXT5V_EN, 1); + esp_io_expander_set_output_mode(io, outs, IO_EXPANDER_OUTPUT_MODE_PUSH_PULL); // Power the WiFi co-processor now, so it has booted by the time WiFi is first used. - // The battery only charges while the firmware enables the charger (as the factory firmware does). - esp_io_expander_set_dir(io1, IO1_WLAN_PWR_EN | IO1_QC_DISABLE | IO1_CHARGE_EN, IO_EXPANDER_OUTPUT); - esp_io_expander_set_level(io1, IO1_WLAN_PWR_EN, 1); - esp_io_expander_set_level(io1, IO1_QC_DISABLE, 0); + // The battery only charges while the firmware enables the charger (standard charging, as + // the factory firmware does). USB-A 5 V off, no power-off pulse. + const uint32_t outs1 = IO1_WLAN_PWR_EN | IO1_USB5V_EN | IO1_PWROFF | IO1_NQC_EN | IO1_CHARGE_EN; + esp_io_expander_set_dir(io1, outs1, IO_EXPANDER_OUTPUT); + esp_io_expander_set_level(io1, IO1_USB5V_EN | IO1_PWROFF | IO1_CHARGE_EN, 0); + esp_io_expander_set_level(io1, IO1_WLAN_PWR_EN | IO1_NQC_EN, 1); + esp_io_expander_set_output_mode(io1, outs1, IO_EXPANDER_OUTPUT_MODE_PUSH_PULL); vTaskDelay(pdMS_TO_TICKS(50)); esp_io_expander_set_level(io1, IO1_CHARGE_EN, 1); } diff --git a/main/chat_app.cpp b/main/chat_app.cpp index 6e0b10c..6dea1d6 100644 --- a/main/chat_app.cpp +++ b/main/chat_app.cpp @@ -1,7 +1,7 @@ /* * ChatGPT App * One chat session with an OpenAI model: your messages right-aligned, replies - * left-aligned, the input line at the bottom. Hold the trackball (Tab5: Ctrl+Space) to talk + * left-aligned, the input line at the bottom. Hold the trackball (Tab5: Ctrl) to talk * (Whisper), optionally hear the reply (TTS). Network and audio work runs in a * short-lived worker task, so the screen and keyboard stay responsive. * diff --git a/main/include/tab5_keymap.hpp b/main/include/tab5_keymap.hpp index 155cd5c..f742315 100644 --- a/main/include/tab5_keymap.hpp +++ b/main/include/tab5_keymap.hpp @@ -3,14 +3,14 @@ * Turns the Tab5 Keyboard's raw key presses and releases (row 0-4, column 0-13) into * SimplrSSH keys (input_events.hpp). The keyboard firmware reports only positions; this does * the legends, the Sym layer, Aa (hold = shift, tap = one capital, double tap = caps lock), - * Ctrl codes, auto-repeat and Ctrl+Space push-to-talk. No ESP-IDF headers: tested on the host. + * Ctrl codes, auto-repeat and Ctrl push-to-talk. No ESP-IDF headers: tested on the host. * * Up / Down older / newer command, previous / next menu choice * Left / Right move the cursor; Sym+Left / Sym+Right: start / end of the line * Sym+Up / Sym+Down scroll the screen * Del delete at the cursor * Ctrl+letter control code (Ctrl+C = 3 ...), also Ctrl+[ \ ] ^ _ / - * Ctrl+Space (hold) push-to-talk in ChatGPT; held 1 s elsewhere: delete history entry + * Ctrl (hold alone) push-to-talk in ChatGPT; held 1 s elsewhere: delete history entry */ #ifndef TAB5_KEYMAP_HPP @@ -54,7 +54,8 @@ class Tab5Keymap uint32_t repeat_value = 0; uint32_t repeat_next_ms = 0; - bool talk_down = false; // Ctrl+Space held + bool talk_down = false; // Ctrl held, no other key pressed before HOLD_MS + bool talk_used = false; // Another key pressed while talking bool talk_holding = false; // HOLD_START sent uint32_t talk_pressed_ms = 0; diff --git a/main/tab5_keymap.cpp b/main/tab5_keymap.cpp index 43a2537..54ff1ae 100644 --- a/main/tab5_keymap.cpp +++ b/main/tab5_keymap.cpp @@ -32,7 +32,6 @@ static bool is_sym(int r, int c) { return at(r, c, 3, 0); } static bool is_aa(int r, int c) { return at(r, c, 3, 1); } static bool is_ctrl(int r, int c) { return at(r, c, 4, 0); } static bool is_alt(int r, int c) { return at(r, c, 4, 1); } -static bool is_space(int r, int c) { return at(r, c, 4, 13); } // a - b >= 0 for wrapping millisecond counters static bool reached(uint32_t now, uint32_t when) @@ -101,12 +100,35 @@ void Tab5Keymap::key_event(bool pressed, int row, int col, uint32_t now_ms) if (row < 0 || row >= ROWS || col < 0 || col >= COLS) { return; } - if (is_sym(row, col)) { - sym = pressed; - return; - } if (is_ctrl(row, col)) { ctrl = pressed; + if (pressed) { + // Ctrl on its own is push-to-talk once held for HOLD_MS (tick) + talk_down = true; + talk_holding = false; + talk_used = false; + talk_pressed_ms = now_ms; + } else if (talk_down) { + talk_down = false; + if (talk_holding) { + talk_holding = false; + // A long hold deletes a history entry outside ChatGPT: only when Ctrl was alone + bool long_hold = !talk_used && now_ms - talk_pressed_ms >= LONG_HOLD_MS; + push(KEY_EVENT | (long_hold ? INPUT_HOLD_END_LONG : INPUT_HOLD_END)); + } + } + return; + } + if (pressed && talk_down) { + // Another key with Ctrl: a control code (Ctrl+C ...), not talking + if (talk_holding) { + talk_used = true; + } else { + talk_down = false; + } + } + if (is_sym(row, col)) { + sym = pressed; return; } if (is_alt(row, col)) { @@ -141,25 +163,12 @@ void Tab5Keymap::key_event(bool pressed, int row, int col, uint32_t now_ms) if (id == repeat_key) { repeat_key = -1; } - if (is_space(row, col) && talk_down) { - talk_down = false; - if (talk_holding) { - talk_holding = false; - push(KEY_EVENT | (now_ms - talk_pressed_ms >= LONG_HOLD_MS ? INPUT_HOLD_END_LONG : INPUT_HOLD_END)); - } - } return; } if (aa_down) { aa_used = true; } - if (is_space(row, col) && ctrl) { - talk_down = true; - talk_holding = false; - talk_pressed_ms = now_ms; - return; - } bool repeats = false; uint32_t value = translate(row, col, &repeats); one_shot = false; @@ -191,6 +200,6 @@ void Tab5Keymap::reset() push(KEY_EVENT | INPUT_HOLD_END); // Stop a recording in progress } sym = ctrl = aa_down = aa_used = one_shot = caps_lock = false; - talk_down = talk_holding = false; + talk_down = talk_holding = talk_used = false; repeat_key = -1; } diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 08ab05d..6f355f0 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -12,6 +12,16 @@ CONFIG_LWIP_IPV6=n # libssh2 protocol tracing is never used in production and could log session data CONFIG_LIBSSH2_DEBUG_ENABLE=n +# --- Build and boot (both boards) --------------------------------------------- +# app_main mounts the SD card, starts the display and touch and builds the terminal screen +# before handing over to keypad_task; the 3.5 KB default overflows. Freed when it returns. +CONFIG_ESP_MAIN_TASK_STACK_SIZE=12288 +# Optimize for speed (TLS, SSH crypto, rendering); assertions compiled out +CONFIG_COMPILER_OPTIMIZATION_PERF=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y +# Problems only in the log (AI_RULES.md: ESP_LOGI sparingly) +CONFIG_LOG_DEFAULT_LEVEL_WARN=y + # --- Internal RAM: move bulk buffers to PSRAM -------------------------------- # WiFi/LWIP buffers in PSRAM when possible CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y diff --git a/sdkconfig.tab5 b/sdkconfig.tab5 index ca72aa2..b5673d8 100644 --- a/sdkconfig.tab5 +++ b/sdkconfig.tab5 @@ -783,17 +783,17 @@ CONFIG_SENSORS_EVENT_STACK_SIZE=4096 # # Compiler options # -CONFIG_COMPILER_OPTIMIZATION_DEBUG=y +# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +CONFIG_COMPILER_OPTIMIZATION_PERF=y # CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y # CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=0 # CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set CONFIG_COMPILER_HIDE_PATHS_MACROS=y # CONFIG_COMPILER_CXX_EXCEPTIONS is not set @@ -1530,7 +1530,7 @@ CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=12288 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y # CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set @@ -1731,7 +1731,6 @@ CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 # # Port # -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y # CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set @@ -1768,9 +1767,7 @@ CONFIG_FREERTOS_IN_IRAM=y # CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y # CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=0 CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y CONFIG_HAL_WDT_USE_ROM_IMPL=y # end of Hardware Abstraction Layer (HAL) and Low Level (LL) @@ -1802,15 +1799,16 @@ CONFIG_LOG_VERSION=1 # # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y +CONFIG_LOG_DEFAULT_LEVEL_WARN=y +# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_DEFAULT_LEVEL=2 CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y +# CONFIG_LOG_MAXIMUM_LEVEL_INFO is not set # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 +CONFIG_LOG_MAXIMUM_LEVEL=2 # # Level Settings @@ -1980,7 +1978,6 @@ CONFIG_LWIP_DNS_MAX_SERVERS=3 # end of DNS CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y # # Hooks @@ -3042,40 +3039,44 @@ CONFIG_UVC_CHECK_PAYLOAD_HEADER_EOH=y # end of Wi-Fi Remote over EPPP # -# LVGL +# LVGL configuration # +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set # -# Memory and Standard Library +# Color Settings +# +# CONFIG_LV_COLOR_DEPTH_32 is not set +# CONFIG_LV_COLOR_DEPTH_24 is not set +CONFIG_LV_COLOR_DEPTH_16=y +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=16 +# end of Color Settings + +# +# Memory Settings # -CONFIG_LV_STDLIB_BUILTIN=0 -CONFIG_LV_STDLIB_CLIB=1 -CONFIG_LV_STDLIB_MICROPYTHON=2 -CONFIG_LV_STDLIB_RTTHREAD=3 -CONFIG_LV_STDLIB_CUSTOM=255 # CONFIG_LV_USE_BUILTIN_MALLOC is not set CONFIG_LV_USE_CLIB_MALLOC=y # CONFIG_LV_USE_MICROPYTHON_MALLOC is not set # CONFIG_LV_USE_RTTHREAD_MALLOC is not set # CONFIG_LV_USE_CUSTOM_MALLOC is not set -CONFIG_LV_USE_STDLIB_MALLOC=1 CONFIG_LV_USE_BUILTIN_STRING=y # CONFIG_LV_USE_CLIB_STRING is not set -# CONFIG_LV_USE_RTTHREAD_STRING is not set # CONFIG_LV_USE_CUSTOM_STRING is not set -CONFIG_LV_USE_STDLIB_STRING=0 CONFIG_LV_USE_BUILTIN_SPRINTF=y # CONFIG_LV_USE_CLIB_SPRINTF is not set -# CONFIG_LV_USE_RTTHREAD_SPRINTF is not set # CONFIG_LV_USE_CUSTOM_SPRINTF is not set -CONFIG_LV_USE_STDLIB_SPRINTF=0 -CONFIG_LV_STDINT_INCLUDE="stdint.h" -CONFIG_LV_STDDEF_INCLUDE="stddef.h" -CONFIG_LV_STDBOOL_INCLUDE="stdbool.h" -CONFIG_LV_INTTYPES_INCLUDE="inttypes.h" -CONFIG_LV_LIMITS_INCLUDE="limits.h" -CONFIG_LV_STDARG_INCLUDE="stdarg.h" -# end of Memory and Standard Library +# end of Memory Settings + +# +# HAL Settings +# +CONFIG_LV_DEF_REFR_PERIOD=33 +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings # # Operating System (OS) @@ -3089,55 +3090,17 @@ CONFIG_LV_OS_NONE=y # CONFIG_LV_OS_MQX is not set # CONFIG_LV_OS_SDL2 is not set # CONFIG_LV_OS_CUSTOM is not set -CONFIG_LV_USE_OS=0 # end of Operating System (OS) # # Rendering Configuration # - -# -# Color Settings -# -# CONFIG_LV_COLOR_FORMAT_I1 is not set -# CONFIG_LV_COLOR_FORMAT_L8 is not set -CONFIG_LV_COLOR_FORMAT_RGB565=y -# CONFIG_LV_COLOR_FORMAT_RGB565_SWAPPED is not set -# CONFIG_LV_COLOR_FORMAT_RGB888 is not set -# CONFIG_LV_COLOR_FORMAT_XRGB8888 is not set -# CONFIG_LV_COLOR_FORMAT_ARGB8888 is not set -# CONFIG_LV_COLOR_FORMAT_ARGB8888_PREMULTIPLIED is not set -# CONFIG_LV_COLOR_DEPTH_UNSET is not set -# CONFIG_LV_COLOR_DEPTH_32 is not set -# CONFIG_LV_COLOR_DEPTH_24 is not set -CONFIG_LV_COLOR_DEPTH_16=y -# CONFIG_LV_COLOR_DEPTH_8 is not set -# CONFIG_LV_COLOR_DEPTH_1 is not set -CONFIG_LV_COLOR_DEPTH=16 -CONFIG_LV_COLOR_MIX_ROUND_OFS=128 -# end of Color Settings - -CONFIG_LV_DEF_REFR_PERIOD=33 -CONFIG_LV_DPI_DEF=130 CONFIG_LV_DRAW_BUF_STRIDE_ALIGN=1 CONFIG_LV_DRAW_BUF_ALIGN=4 -# CONFIG_LV_USE_MATRIX is not set CONFIG_LV_DRAW_LAYER_SIMPLE_BUF_SIZE=24576 CONFIG_LV_DRAW_LAYER_MAX_MEMORY=0 -# CONFIG_LV_USE_VECTOR_GRAPHIC is not set -# CONFIG_LV_USE_SNAPSHOT is not set -# CONFIG_LV_USE_THORVG is not set - -# -# SW -# CONFIG_LV_USE_DRAW_SW=y - -# -# Supported color formats -# CONFIG_LV_DRAW_SW_SUPPORT_RGB565=y -CONFIG_LV_DRAW_SW_SUPPORT_RGB565_SWAPPED=y CONFIG_LV_DRAW_SW_SUPPORT_RGB565A8=y CONFIG_LV_DRAW_SW_SUPPORT_RGB888=y CONFIG_LV_DRAW_SW_SUPPORT_XRGB8888=y @@ -3148,128 +3111,32 @@ CONFIG_LV_DRAW_SW_SUPPORT_AL88=y CONFIG_LV_DRAW_SW_SUPPORT_A8=y CONFIG_LV_DRAW_SW_SUPPORT_I1=y CONFIG_LV_DRAW_SW_I1_LUM_THRESHOLD=127 -# end of Supported color formats - +CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT=1 # CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set # CONFIG_LV_USE_NATIVE_HELIUM_ASM is not set CONFIG_LV_DRAW_SW_COMPLEX=y -CONFIG_LV_GRADIENT_MAX_STOPS=2 # CONFIG_LV_USE_DRAW_SW_COMPLEX_GRADIENTS is not set CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE=0 CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE=4 CONFIG_LV_DRAW_SW_ASM_NONE=y # CONFIG_LV_DRAW_SW_ASM_NEON is not set # CONFIG_LV_DRAW_SW_ASM_HELIUM is not set -# CONFIG_LV_DRAW_SW_ASM_RISCV_V is not set -# CONFIG_LV_DRAW_SW_ASM_SVE2 is not set # CONFIG_LV_DRAW_SW_ASM_CUSTOM is not set CONFIG_LV_USE_DRAW_SW_ASM=0 -# end of SW - -# -# VG-Lite -# -# CONFIG_LV_USE_DRAW_VG_LITE is not set -# end of VG-Lite - -# -# Dave2D -# -# CONFIG_LV_USE_DRAW_DAVE2D is not set -# end of Dave2D - -# -# NemaGFX -# -# CONFIG_LV_USE_NEMA_GFX is not set -# end of NemaGFX - -# -# PXP -# # CONFIG_LV_USE_PXP is not set -# CONFIG_LV_USE_DRAW_PXP is not set -# end of PXP - -# -# PPA -# -# CONFIG_LV_USE_PPA is not set -# end of PPA - -# -# DMA2D -# -# CONFIG_LV_USE_DRAW_DMA2D is not set -# end of DMA2D - -# -# EPIC -# -# CONFIG_LV_USE_SIFLI_EPIC is not set -# end of EPIC - -# -# EVE -# -# CONFIG_LV_USE_DRAW_EVE is not set -# end of EVE - -# -# G2D -# # CONFIG_LV_USE_G2D is not set -# CONFIG_LV_USE_DRAW_G2D is not set -# end of G2D - -# -# NanoVG -# -# CONFIG_LV_USE_DRAW_NANOVG is not set -# end of NanoVG - -# -# OpenGL ES -# -# CONFIG_LV_USE_DRAW_OPENGLES is not set -# end of OpenGL ES - -# -# SDL -# +# CONFIG_LV_USE_DRAW_DAVE2D is not set # CONFIG_LV_USE_DRAW_SDL is not set -# end of SDL +# CONFIG_LV_USE_DRAW_VG_LITE is not set +# CONFIG_LV_USE_VECTOR_GRAPHIC is not set +# CONFIG_LV_USE_DRAW_DMA2D is not set +# CONFIG_LV_USE_PPA is not set +# CONFIG_LV_USE_DRAW_EVE is not set # end of Rendering Configuration # -# Input Devices +# Feature Configuration # -CONFIG_LV_INDEV_DEF_SCROLL_LIMIT=10 -CONFIG_LV_INDEV_DEF_SCROLL_THROW=10 -CONFIG_LV_INDEV_DEF_SCROLL_ELASTIC_FACTOR=4 -CONFIG_LV_INDEV_DEF_LONG_PRESS_TIME=400 -CONFIG_LV_INDEV_DEF_LONG_PRESS_REP_TIME=100 -CONFIG_LV_INDEV_DEF_DOUBLE_CLICK_TIME=400 -CONFIG_LV_INDEV_DEF_GESTURE_LIMIT=50 -CONFIG_LV_INDEV_DEF_GESTURE_MIN_VELOCITY=3 -CONFIG_LV_INDEV_DEF_ROTARY_SENSITIVITY=256 -# CONFIG_LV_USE_GRIDNAV is not set -# CONFIG_LV_USE_GESTURE_RECOGNITION is not set -# end of Input Devices - -# -# Core -# -# CONFIG_LV_OBJ_STYLE_CACHE is not set -# CONFIG_LV_USE_OBJ_NAME is not set -# CONFIG_LV_USE_OBJ_ID is not set -# CONFIG_LV_USE_OBJ_PROPERTY is not set -# CONFIG_LV_USE_EXT_DATA is not set -# CONFIG_LV_USE_FLOAT is not set -CONFIG_LV_USE_OBSERVER=y -# CONFIG_LV_USE_TRANSLATION is not set -# CONFIG_LV_USE_COLOR_FILTER is not set -# end of Core # # Logging @@ -3278,52 +3145,56 @@ CONFIG_LV_USE_OBSERVER=y # end of Logging # -# Themes +# Asserts # -CONFIG_LV_USE_THEME_DEFAULT=y -# CONFIG_LV_THEME_DEFAULT_DARK is not set -CONFIG_LV_THEME_DEFAULT_GROW=y -CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 -CONFIG_LV_USE_THEME_SIMPLE=y -# CONFIG_LV_USE_THEME_MONO is not set -# end of Themes +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts # -# Layouts +# Debug # -CONFIG_LV_USE_FLEX=y -CONFIG_LV_USE_GRID=y -# end of Layouts +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_USE_LAYER_DEBUG is not set +# CONFIG_LV_USE_PARALLEL_DRAW_DEBUG is not set +# end of Debug # -# Image Settings +# Others # +# CONFIG_LV_ENABLE_GLOBAL_CUSTOM is not set CONFIG_LV_CACHE_DEF_SIZE=0 CONFIG_LV_IMAGE_HEADER_CACHE_DEF_CNT=0 -# CONFIG_LV_USE_RLE is not set -# CONFIG_LV_USE_LZ4 is not set -# CONFIG_LV_BIN_DECODER_RAM_LOAD is not set -# CONFIG_LV_USE_LODEPNG is not set -# CONFIG_LV_USE_LIBPNG is not set -# CONFIG_LV_USE_BMP is not set -# CONFIG_LV_USE_TJPGD is not set -# CONFIG_LV_USE_LIBJPEG_TURBO is not set -# CONFIG_LV_USE_LIBWEBP is not set -# end of Image Settings +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +# CONFIG_LV_OBJ_STYLE_CACHE is not set +# CONFIG_LV_USE_OBJ_ID is not set +# CONFIG_LV_USE_OBJ_NAME is not set +# CONFIG_LV_USE_OBJ_PROPERTY is not set +# end of Others +# end of Feature Configuration # -# Text & Font Settings +# Compiler Settings # -CONFIG_LV_TXT_ENC_UTF8=y -# CONFIG_LV_TXT_ENC_ASCII is not set -CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_)}" -CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 -CONFIG_LV_TXT_COLOR_CMD="#" -# CONFIG_LV_USE_BIDI is not set -# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_FLOAT is not set +# CONFIG_LV_USE_MATRIX is not set +# CONFIG_LV_USE_PRIVATE_API is not set +# end of Compiler Settings # -# Built-in Fonts +# Font Usage +# + +# +# Enable built-in fonts # # CONFIG_LV_FONT_MONTSERRAT_8 is not set # CONFIG_LV_FONT_MONTSERRAT_10 is not set @@ -3352,10 +3223,8 @@ CONFIG_LV_FONT_MONTSERRAT_20=y # CONFIG_LV_FONT_SOURCE_HAN_SANS_SC_16_CJK is not set # CONFIG_LV_FONT_UNSCII_8 is not set # CONFIG_LV_FONT_UNSCII_16 is not set -# end of Built-in Fonts +# end of Enable built-in fonts -# CONFIG_LV_FONT_USE_CUSTOM_INCLUDE is not set -# CONFIG_LV_USE_CUSTOM_FONT_DEFAULT is not set # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_10 is not set # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set @@ -3386,21 +3255,33 @@ CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y # CONFIG_LV_FONT_FMT_TXT_LARGE is not set # CONFIG_LV_USE_FONT_COMPRESSED is not set CONFIG_LV_USE_FONT_PLACEHOLDER=y -# CONFIG_LV_USE_FONT_MANAGER is not set -# CONFIG_LV_USE_IMGFONT is not set -# CONFIG_LV_USE_FREETYPE is not set -# CONFIG_LV_USE_TINY_TTF is not set -# end of Text & Font Settings # -# Widgets +# Enable static fonts +# +# end of Enable static fonts +# end of Font Usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_)}" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget Usage # CONFIG_LV_WIDGETS_HAS_DEFAULT_VALUE=y CONFIG_LV_USE_ANIMIMG=y CONFIG_LV_USE_ARC=y CONFIG_LV_USE_ARCLABEL=y CONFIG_LV_USE_BAR=y -# CONFIG_LV_USE_BARCODE is not set CONFIG_LV_USE_BUTTON=y CONFIG_LV_USE_BUTTONMATRIX=y CONFIG_LV_USE_CALENDAR=y @@ -3418,23 +3299,6 @@ CONFIG_LV_SATURDAY_STR="Sa" CONFIG_LV_SUNDAY_STR="Su" # end of Days name configuration -# -# Month names configuration -# -CONFIG_LV_JANUARY_STR="January" -CONFIG_LV_FEBRUARY_STR="February" -CONFIG_LV_MARCH_STR="March" -CONFIG_LV_APRIL_STR="April" -CONFIG_LV_MAY_STR="May" -CONFIG_LV_JUNE_STR="June" -CONFIG_LV_JULY_STR="July" -CONFIG_LV_AUGUST_STR="August" -CONFIG_LV_SEPTEMBER_STR="September" -CONFIG_LV_OCTOBER_STR="October" -CONFIG_LV_NOVEMBER_STR="November" -CONFIG_LV_DECEMBER_STR="December" -# end of Month names configuration - CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y # CONFIG_LV_USE_CALENDAR_CHINESE is not set @@ -3442,12 +3306,8 @@ CONFIG_LV_USE_CANVAS=y CONFIG_LV_USE_CHART=y CONFIG_LV_USE_CHECKBOX=y CONFIG_LV_USE_DROPDOWN=y -# CONFIG_LV_USE_FFMPEG is not set -# CONFIG_LV_USE_GIF is not set -# CONFIG_LV_USE_GSTREAMER is not set CONFIG_LV_USE_IMAGE=y CONFIG_LV_USE_IMAGEBUTTON=y -# CONFIG_LV_USE_IME_PINYIN is not set CONFIG_LV_USE_KEYBOARD=y CONFIG_LV_USE_LABEL=y CONFIG_LV_LABEL_TEXT_SELECTION=y @@ -3458,8 +3318,6 @@ CONFIG_LV_USE_LINE=y CONFIG_LV_USE_LIST=y CONFIG_LV_USE_MENU=y CONFIG_LV_USE_MSGBOX=y -# CONFIG_LV_USE_QRCODE is not set -# CONFIG_LV_USE_RLOTTIE is not set CONFIG_LV_USE_ROLLER=y CONFIG_LV_USE_SCALE=y CONFIG_LV_USE_SLIDER=y @@ -3474,139 +3332,107 @@ CONFIG_LV_USE_TABLE=y CONFIG_LV_USE_TABVIEW=y CONFIG_LV_USE_TILEVIEW=y CONFIG_LV_USE_WIN=y -# end of Widgets +# end of Widget Usage # -# Drivers +# Themes # -# CONFIG_LV_USE_LINUX_DRM is not set -# CONFIG_LV_USE_LINUX_FBDEV is not set -# CONFIG_LV_USE_FT81X is not set -# CONFIG_LV_USE_LOVYAN_GFX is not set -# CONFIG_LV_USE_GENERIC_MIPI is not set -# CONFIG_LV_USE_ST7735 is not set -# CONFIG_LV_USE_ST7789 is not set -# CONFIG_LV_USE_ST7796 is not set -# CONFIG_LV_USE_ILI9341 is not set -# CONFIG_LV_USE_NV3007 is not set -# CONFIG_LV_USE_NXP_ELCDIF is not set -# CONFIG_LV_USE_RENESAS_GLCDC is not set -# CONFIG_LV_USE_ST_LTDC is not set -# CONFIG_LV_USE_TFT_ESPI is not set -# CONFIG_LV_USE_EVDEV is not set -# CONFIG_LV_USE_LIBINPUT is not set -# CONFIG_LV_USE_NUTTX is not set -# CONFIG_LV_USE_OPENGLES is not set -# CONFIG_LV_USE_GLFW is not set -# CONFIG_LV_USE_QNX is not set -# CONFIG_LV_USE_SDL is not set -# CONFIG_LV_USE_UEFI is not set -# CONFIG_LV_USE_WAYLAND is not set -# CONFIG_LV_USE_X11 is not set -# CONFIG_LV_USE_NANOVG is not set -# end of Drivers +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_SIMPLE=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts # -# File System +# 3rd Party Libraries # CONFIG_LV_FS_DEFAULT_DRIVER_LETTER=0 # CONFIG_LV_USE_FS_STDIO is not set # CONFIG_LV_USE_FS_POSIX is not set # CONFIG_LV_USE_FS_WIN32 is not set # CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_FS_MEMFS is not set # CONFIG_LV_USE_FS_LITTLEFS is not set # CONFIG_LV_USE_FS_ARDUINO_ESP_LITTLEFS is not set # CONFIG_LV_USE_FS_ARDUINO_SD is not set # CONFIG_LV_USE_FS_UEFI is not set # CONFIG_LV_USE_FS_FROGFS is not set -# CONFIG_LV_USE_FS_MEMFS is not set -# end of File System - -# -# Debugging -# +# CONFIG_LV_USE_LODEPNG is not set +# CONFIG_LV_USE_LIBPNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_TJPGD is not set +# CONFIG_LV_USE_LIBJPEG_TURBO is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_BIN_DECODER_RAM_LOAD is not set +# CONFIG_LV_USE_RLE is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_BARCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_TINY_TTF is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_THORVG is not set +# CONFIG_LV_USE_LZ4 is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries # -# System Monitoring +# Others # +# CONFIG_LV_USE_SNAPSHOT is not set # CONFIG_LV_USE_SYSMON is not set -# end of System Monitoring - -# -# Profiler -# # CONFIG_LV_USE_PROFILER is not set -# CONFIG_LV_USE_PROFILER_BUILTIN is not set -# end of Profiler - -# -# Test Utilities -# -# CONFIG_LV_USE_TEST is not set # CONFIG_LV_USE_MONKEY is not set -# end of Test Utilities - -# -# Debug Rendering -# -# CONFIG_LV_USE_REFR_DEBUG is not set -# CONFIG_LV_USE_LAYER_DEBUG is not set -# CONFIG_LV_USE_PARALLEL_DRAW_DEBUG is not set -# end of Debug Rendering -# end of Debugging - -# -# Others -# +# CONFIG_LV_USE_GRIDNAV is not set # CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +CONFIG_LV_USE_OBSERVER=y +# CONFIG_LV_USE_IME_PINYIN is not set # CONFIG_LV_USE_FILE_EXPLORER is not set -# end of Others - -# -# Build -# +# CONFIG_LV_USE_FONT_MANAGER is not set +# CONFIG_LV_USE_TEST is not set +# CONFIG_LV_USE_TRANSLATION is not set +# CONFIG_LV_USE_XML is not set +# CONFIG_LV_USE_COLOR_FILTER is not set CONFIG_LVGL_VERSION_MAJOR=9 -CONFIG_LVGL_VERSION_MINOR=6 +CONFIG_LVGL_VERSION_MINOR=4 CONFIG_LVGL_VERSION_PATCH=0 -CONFIG_LV_CONF_SKIP=y -# CONFIG_LV_CONF_MINIMAL is not set -# CONFIG_LV_USE_PRIVATE_API is not set -# CONFIG_LV_ENABLE_GLOBAL_CUSTOM is not set - -# -# Asserts -# -# CONFIG_LV_USE_ASSERT is not set -CONFIG_LV_USE_ASSERT_MALLOC=y -CONFIG_LV_USE_ASSERT_NULL=y -# CONFIG_LV_USE_ASSERT_STYLE is not set -# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set -# CONFIG_LV_USE_ASSERT_OBJ is not set -CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" -CONFIG_LV_ASSERT_HANDLER_INCLUDE_IS_NON_EMPTY=y -# CONFIG_LV_DISABLE_ASSERT_HANDLER_INCLUDE_WARNING is not set -# CONFIG_LV_ASSERT_USE_CUSTOM_INCLUDE is not set -# end of Asserts - -# -# Argument Checks -# -CONFIG_LV_USE_CHECK_ARG=y -# CONFIG_LV_CHECK_ARG_ASSERT_ON_FAIL is not set -CONFIG_LV_CHECK_ARG_LOG_MODE_NONE=y -CONFIG_LV_CHECK_ARG_LOG_MODE=0 -# CONFIG_LV_USE_CHECK_OBJ_CLASSTYPE is not set -# CONFIG_LV_USE_CHECK_OBJ_VALIDITY is not set -# end of Argument Checks -# end of Build +# end of Others # -# Compiler Settings +# Devices # -# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set -# CONFIG_LV_ATTRIBUTE_USE_CUSTOM_INCLUDE is not set -# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set -# end of Compiler Settings +# CONFIG_LV_USE_SDL is not set +# CONFIG_LV_USE_X11 is not set +# CONFIG_LV_USE_WAYLAND is not set +# CONFIG_LV_USE_LINUX_FBDEV is not set +# CONFIG_LV_USE_NUTTX is not set +# CONFIG_LV_USE_LINUX_DRM is not set +# CONFIG_LV_USE_TFT_ESPI is not set +# CONFIG_LV_USE_LOVYAN_GFX is not set +# CONFIG_LV_USE_EVDEV is not set +# CONFIG_LV_USE_LIBINPUT is not set +# CONFIG_LV_USE_ST7735 is not set +# CONFIG_LV_USE_ST7789 is not set +# CONFIG_LV_USE_ST7796 is not set +# CONFIG_LV_USE_ILI9341 is not set +# CONFIG_LV_USE_GENERIC_MIPI is not set +# CONFIG_LV_USE_NXP_ELCDIF is not set +# CONFIG_LV_USE_RENESAS_GLCDC is not set +# CONFIG_LV_USE_ST_LTDC is not set +# CONFIG_LV_USE_FT81X is not set +# CONFIG_LV_USE_UEFI is not set +# CONFIG_LV_USE_OPENGLES is not set +# CONFIG_LV_USE_QNX is not set +# end of Devices # # Examples @@ -3618,19 +3444,21 @@ CONFIG_LV_BUILD_EXAMPLES=y # Demos # CONFIG_LV_BUILD_DEMOS=y -# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_WIDGETS is not set # CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set -# CONFIG_LV_USE_DEMO_MUSIC is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set # CONFIG_LV_USE_DEMO_RENDER is not set +# CONFIG_LV_USE_DEMO_SCROLL is not set # CONFIG_LV_USE_DEMO_STRESS is not set -# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_TRANSFORM is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set # CONFIG_LV_USE_DEMO_FLEX_LAYOUT is not set # CONFIG_LV_USE_DEMO_MULTILANG is not set # CONFIG_LV_USE_DEMO_SMARTWATCH is not set # CONFIG_LV_USE_DEMO_EBIKE is not set # CONFIG_LV_USE_DEMO_HIGH_RES is not set # end of Demos -# end of LVGL +# end of LVGL configuration # # libssh2 @@ -3659,15 +3487,15 @@ CONFIG_FLASHMODE_QIO=y # CONFIG_FLASHMODE_DIO is not set # CONFIG_FLASHMODE_DOUT is not set CONFIG_MONITOR_BAUD=115200 -CONFIG_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=y +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=0 # CONFIG_CXX_EXCEPTIONS is not set CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_NORM is not set @@ -3698,7 +3526,7 @@ CONFIG_BROWNOUT_DET_LVL=7 CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_MAIN_TASK_STACK_SIZE=12288 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set @@ -3743,7 +3571,6 @@ CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y -# CONFIG_HAL_ASSERTION_SILIENT is not set # CONFIG_L2_TO_L3_COPY is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 diff --git a/test/guards/test_firmware_rules.py b/test/guards/test_firmware_rules.py index 1539f3f..b06095c 100644 --- a/test/guards/test_firmware_rules.py +++ b/test/guards/test_firmware_rules.py @@ -183,6 +183,13 @@ def test_defaults_applied_to_committed_sdkconfig(self): with self.subTest(sdkconfig=config, option=option): self.assertEqual(committed[option], value, f"{config} overrides its defaults: update both") + def test_main_task_stack_fits_boot(self): + # app_main brings up SD, display, touch and the terminal screen: the 3.5 KB default + # overflowed on the Tab5 (black screen, reboot loop) + for config in BOARD_CONFIGS: + with self.subTest(sdkconfig=config): + self.assertGreaterEqual(int(repo.sdkconfig(config)["CONFIG_ESP_MAIN_TASK_STACK_SIZE"]), 12288) + def test_tab5_sdkconfig_is_for_the_tab5(self): cfg = repo.sdkconfig("sdkconfig.tab5") self.assertEqual(cfg.get("CONFIG_IDF_TARGET"), '"esp32p4"') diff --git a/test/host/tests/test_tab5_keymap.cpp b/test/host/tests/test_tab5_keymap.cpp index 534ae8a..6a76b2e 100644 --- a/test/host/tests/test_tab5_keymap.cpp +++ b/test/host/tests/test_tab5_keymap.cpp @@ -141,36 +141,50 @@ TEST(keymap_enter_and_esc_do_not_repeat) CHECK_EQ(k.pop(), 0u); } -TEST(keymap_ctrl_space_is_push_to_talk) +TEST(keymap_ctrl_hold_is_push_to_talk) { Tab5Keymap k; press(k, CTRL, 0); - press(k, SPACE, 0); CHECK_EQ(k.pop(), 0u); // Nothing typed k.tick(Tab5Keymap::HOLD_MS); CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_START); - release(k, CTRL, 500); // Ctrl may go first - release(k, SPACE, 800); + release(k, CTRL, 800); CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_END); - press(k, CTRL, 2000); - press(k, SPACE, 2000); + press(k, CTRL, 2000); // Held a second: long hold k.tick(2000 + Tab5Keymap::HOLD_MS); CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_START); - release(k, SPACE, 2000 + Tab5Keymap::LONG_HOLD_MS); + release(k, CTRL, 2000 + Tab5Keymap::LONG_HOLD_MS); CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_END_LONG); - press(k, SPACE, 4000); // Short Ctrl+Space: nothing - release(k, SPACE, 4100); + press(k, CTRL, 4000); // Short tap of Ctrl: nothing + release(k, CTRL, 4100); k.tick(5000); CHECK_EQ(k.pop(), 0u); } +TEST(keymap_ctrl_with_a_key_is_not_talking) +{ + Tab5Keymap k; + press(k, CTRL, 0); + CHECK_EQ(tap(k, C, 100), 3u); // Ctrl+C before the hold time + k.tick(5000); // Ctrl still held, slowly let go + CHECK_EQ(k.pop(), 0u); + release(k, CTRL, 6000); + CHECK_EQ(k.pop(), 0u); + + press(k, CTRL, 10000); // Talking, then a key: no long hold + k.tick(10000 + Tab5Keymap::HOLD_MS); + CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_START); + CHECK_EQ(tap(k, C, 10500), 3u); + release(k, CTRL, 10000 + 2 * Tab5Keymap::LONG_HOLD_MS); + CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_END); +} + TEST(keymap_reset_stops_talking_and_modifiers) { Tab5Keymap k; press(k, CTRL, 0); - press(k, SPACE, 0); k.tick(Tab5Keymap::HOLD_MS); CHECK_EQ(k.pop(), KEY_EVENT | INPUT_HOLD_START); k.reset(); // Keyboard pulled off while talking