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