From 7d915e6fb07ffc111a359717e17c85184c66693c Mon Sep 17 00:00:00 2001 From: "CSBOOK\\44744" <447449914@qq.com> Date: Fri, 26 Jun 2026 21:03:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=B1=8F=E5=B9=95?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/runtime/control_plane_key_input.c | 4 +- .../src/runtime/control_plane_system_events.c | 21 ++ components/domain/include/domain.h | 2 + .../src/runtime/domain_runtime_adapters.c | 24 +- components/platform/CMakeLists.txt | 13 + .../platform/assets/lcd/jichubiaoqing0.rle | Bin 0 -> 23572 bytes .../platform/assets/lcd/jichubiaoqing1.rle | Bin 0 -> 18324 bytes .../platform/assets/lcd/jichubiaoqing2.rle | Bin 0 -> 14604 bytes components/platform/assets/lcd/muyu0.rle | Bin 0 -> 253836 bytes components/platform/assets/lcd/muyu1.rle | Bin 0 -> 254660 bytes components/platform/assets/lcd/muyu2.rle | Bin 0 -> 255576 bytes components/platform/include/platform.h | 1 + .../platform/internal/lcd_direct_assets.h | 1 + components/platform/src/lcd_direct.c | 236 +++++++++++++++--- components/platform/src/lcd_direct_assets.c | 62 ++++- main/Kconfig.projbuild | 2 +- sdkconfig.defaults | 2 +- 17 files changed, 324 insertions(+), 44 deletions(-) create mode 100644 components/platform/assets/lcd/jichubiaoqing0.rle create mode 100644 components/platform/assets/lcd/jichubiaoqing1.rle create mode 100644 components/platform/assets/lcd/jichubiaoqing2.rle create mode 100644 components/platform/assets/lcd/muyu0.rle create mode 100644 components/platform/assets/lcd/muyu1.rle create mode 100644 components/platform/assets/lcd/muyu2.rle diff --git a/components/control_plane/src/runtime/control_plane_key_input.c b/components/control_plane/src/runtime/control_plane_key_input.c index b87397a..e924c22 100644 --- a/components/control_plane/src/runtime/control_plane_key_input.c +++ b/components/control_plane/src/runtime/control_plane_key_input.c @@ -113,9 +113,9 @@ static const control_plane_key_config_t s_key_configs[] = { .long_press_ms = CONFIG_TQ_KEY_LONG_PRESS_MS, .double_click_ms = CONFIG_TQ_KEY_DOUBLE_CLICK_MS, .emit_press_release = true, - .enable_short_press = false, + .enable_short_press = true, .enable_long_press = false, - .enable_double_click = false, + .enable_double_click = true, }, { .key_id = CONTROL_PLANE_KEY_ID_SW2, diff --git a/components/control_plane/src/runtime/control_plane_system_events.c b/components/control_plane/src/runtime/control_plane_system_events.c index 77bc5fd..3b0bd27 100644 --- a/components/control_plane/src/runtime/control_plane_system_events.c +++ b/components/control_plane/src/runtime/control_plane_system_events.c @@ -31,6 +31,7 @@ #endif #define CONTROL_PLANE_PTT_HOLD_STEP_MS 80 +#define CONTROL_PLANE_PTT_HOLD_START_DELAY_MS 320 #define CONTROL_PLANE_PTT_HOLD_TASK_STACK 4096 #define CONTROL_PLANE_PTT_HOLD_TASK_PRIORITY 4 @@ -117,6 +118,14 @@ static void control_plane_ptt_hold_task(void *arg) (void)arg; ESP_LOGI(TAG, "PTT hold task started"); bool start_requested = false; + uint32_t waited_ms = 0; + + while (s_ptt_hold_active && + !s_stop_requested && + waited_ms < CONTROL_PLANE_PTT_HOLD_START_DELAY_MS) { + vTaskDelay(pdMS_TO_TICKS(CONTROL_PLANE_PTT_HOLD_STEP_MS)); + waited_ms += CONTROL_PLANE_PTT_HOLD_STEP_MS; + } while (s_ptt_hold_active && !s_stop_requested) { if (!control_plane_is_sta_connected()) { @@ -223,6 +232,18 @@ static void control_plane_dispatch_key_event(const control_plane_key_event_t *ev break; } + case CONTROL_PLANE_KEY_EVENT_DOUBLE_CLICK: { + const domain_expression_request_t request = { + .id = DOMAIN_EXPRESSION_MUYU, + .trigger = DOMAIN_EXPRESSION_TRIGGER_PTT_DOUBLE_CLICK, + }; + esp_err_t expr_err = domain_runtime_request_expression(&request); + if (expr_err != ESP_OK && expr_err != ESP_ERR_INVALID_STATE) { + ESP_LOGW(TAG, "PTT double-click expression failed: %s", esp_err_to_name(expr_err)); + } + break; + } + default: break; } diff --git a/components/domain/include/domain.h b/components/domain/include/domain.h index dcf13c6..0f56b54 100644 --- a/components/domain/include/domain.h +++ b/components/domain/include/domain.h @@ -87,6 +87,7 @@ typedef enum { DOMAIN_EXPRESSION_WIFI_DISCONNECTED, DOMAIN_EXPRESSION_WEALTH_SPIN, DOMAIN_EXPRESSION_WEALTH_DIRECTION, + DOMAIN_EXPRESSION_MUYU, } domain_expression_id_t; typedef enum { @@ -98,6 +99,7 @@ typedef enum { DOMAIN_EXPRESSION_TRIGGER_WIFI_RECONNECTED, DOMAIN_EXPRESSION_TRIGGER_MODEL_DIRECTION, DOMAIN_EXPRESSION_TRIGGER_DAILY_FORTUNE, + DOMAIN_EXPRESSION_TRIGGER_PTT_DOUBLE_CLICK, } domain_expression_trigger_t; typedef struct { diff --git a/components/domain/src/runtime/domain_runtime_adapters.c b/components/domain/src/runtime/domain_runtime_adapters.c index 3060529..baf948c 100644 --- a/components/domain/src/runtime/domain_runtime_adapters.c +++ b/components/domain/src/runtime/domain_runtime_adapters.c @@ -75,6 +75,8 @@ static const char *TAG = "domain_rt_adapters"; static const uint8_t s_server_error_frame_order[] = {0, 1, 2, 1, 0}; static const uint8_t s_wifi_disconnected_frame_order[] = {0, 1, 2, 3, 2, 1, 0}; +static const uint8_t s_basic_face_frame_order[] = {0, 1, 2}; +static const uint8_t s_muyu_frame_order[] = {0, 1, 2, 1}; /* * Wealth-direction reveal asset directories, indexed parallel to the direction @@ -119,10 +121,15 @@ static const domain_expression_catalog_entry_t s_expression_catalog[] = { { .id = DOMAIN_EXPRESSION_IDLE, .platform_request = { - .kind = PLATFORM_LCD_PRESENTATION_IDLE, + .kind = PLATFORM_LCD_PRESENTATION_ASSET_SEQUENCE, .priority = 120, .interrupt_current = true, .return_to_idle = false, + .asset_dir = "jichubiaoqing", + .frame_order = s_basic_face_frame_order, + .frame_order_count = sizeof(s_basic_face_frame_order) / sizeof(s_basic_face_frame_order[0]), + .repeat_count = 0, + .frame_ms = 100, }, }, { @@ -175,6 +182,21 @@ static const domain_expression_catalog_entry_t s_expression_catalog[] = { .frame_ms = DOMAIN_WEALTH_DIRECTION_FRAME_MS, }, }, + { + .id = DOMAIN_EXPRESSION_MUYU, + .platform_request = { + .kind = PLATFORM_LCD_PRESENTATION_ASSET_SEQUENCE, + .priority = 125, + .interrupt_current = true, + .return_to_idle = true, + .asset_dir = "muyu", + .frame_order = s_muyu_frame_order, + .frame_order_count = sizeof(s_muyu_frame_order) / sizeof(s_muyu_frame_order[0]), + .repeat_count = 25, + .frame_ms = 50, + .duration_ms = 10000, + }, + }, }; static void snapshot_domain_wifi_behavior_hooks(domain_wifi_behavior_hooks_t *out_hooks) diff --git a/components/platform/CMakeLists.txt b/components/platform/CMakeLists.txt index fc6d26d..70b66f9 100644 --- a/components/platform/CMakeLists.txt +++ b/components/platform/CMakeLists.txt @@ -63,6 +63,19 @@ target_add_binary_data(${COMPONENT_LIB} BINARY ) +foreach(lcd_rle_asset + jichubiaoqing0 + jichubiaoqing1 + jichubiaoqing2 + muyu0 + muyu1 + muyu2) + target_add_binary_data(${COMPONENT_LIB} + "assets/lcd/${lcd_rle_asset}.rle" + BINARY + ) +endforeach() + set(platform_audio_prompt_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/assets/audio_prompts") set(platform_asset_image_dir "${CMAKE_CURRENT_BINARY_DIR}/asset_image") set(platform_asset_stage_stamp "${CMAKE_CURRENT_BINARY_DIR}/asset_image.stamp") diff --git a/components/platform/assets/lcd/jichubiaoqing0.rle b/components/platform/assets/lcd/jichubiaoqing0.rle new file mode 100644 index 0000000000000000000000000000000000000000..b53ac88cc821ad8198e0522c083ec577755de4cb GIT binary patch literal 23572 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 CSTrpF literal 0 HcmV?d00001 diff --git a/components/platform/assets/lcd/jichubiaoqing1.rle b/components/platform/assets/lcd/jichubiaoqing1.rle new file mode 100644 index 0000000000000000000000000000000000000000..49de8daebb623b06e6625f87f8343e695672cb6e GIT binary patch literal 18324 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 BM>qfg literal 0 HcmV?d00001 diff --git a/components/platform/assets/lcd/jichubiaoqing2.rle b/components/platform/assets/lcd/jichubiaoqing2.rle new file mode 100644 index 0000000000000000000000000000000000000000..fb7d75f40fdc1b6f6f21ade5bb67db66bf54911a GIT binary patch literal 14604 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 literal 0 HcmV?d00001 diff --git a/components/platform/assets/lcd/muyu1.rle b/components/platform/assets/lcd/muyu1.rle new file mode 100644 index 0000000000000000000000000000000000000000..6329cf6fae05c2964d296a81859078968df26e29 GIT binary patch literal 254660 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 literal 0 HcmV?d00001 diff --git a/components/platform/assets/lcd/muyu2.rle b/components/platform/assets/lcd/muyu2.rle new file mode 100644 index 0000000000000000000000000000000000000000..6676bd0f3875446d568636c033aedcfcc599278b GIT binary patch literal 255576 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 literal 0 HcmV?d00001 diff --git a/components/platform/include/platform.h b/components/platform/include/platform.h index 40afb08..137efad 100644 --- a/components/platform/include/platform.h +++ b/components/platform/include/platform.h @@ -361,6 +361,7 @@ typedef struct { size_t frame_order_count; uint16_t repeat_count; uint32_t frame_ms; + uint32_t duration_ms; } platform_lcd_presentation_request_t; /** diff --git a/components/platform/internal/lcd_direct_assets.h b/components/platform/internal/lcd_direct_assets.h index 4928c98..e77f6e0 100644 --- a/components/platform/internal/lcd_direct_assets.h +++ b/components/platform/internal/lcd_direct_assets.h @@ -34,6 +34,7 @@ typedef struct { #define LCD_DIRECT_DEFAULT_ICON_COUNT 5U const lcd_direct_image_t *lcd_direct_default_image(void); +const lcd_direct_image_t *lcd_direct_asset_frame(const char *asset_dir, uint8_t frame_index); const lcd_direct_icon_t *lcd_direct_icon(uint16_t icon_id); const lcd_direct_icon_draw_t *lcd_direct_default_icon_sequence(size_t *out_count); diff --git a/components/platform/src/lcd_direct.c b/components/platform/src/lcd_direct.c index 7432686..572d9a0 100644 --- a/components/platform/src/lcd_direct.c +++ b/components/platform/src/lcd_direct.c @@ -33,7 +33,6 @@ #define LCD_CMD_MADCTL 0x36 #define LCD_CMD_RAMCTRL 0xB0 -#define LCD_RAMCTRL_LE_BIT (1U << 3) static const char *TAG = "lcd_direct"; @@ -43,8 +42,11 @@ typedef struct { bool interrupt_current; bool return_to_idle; char asset_dir[PLATFORM_LCD_PRESENTATION_ASSET_DIR_MAX]; + uint8_t frame_order[PLATFORM_LCD_PRESENTATION_FRAME_ORDER_MAX]; + size_t frame_order_count; uint16_t repeat_count; uint32_t frame_ms; + uint32_t duration_ms; } lcd_direct_request_t; typedef struct { @@ -84,6 +86,8 @@ static uint32_t s_completion_count; static portMUX_TYPE s_state_lock = portMUX_INITIALIZER_UNLOCKED; static uint16_t s_line_buffer[LCD_DIRECT_PIXELS_PER_TRANSFER]; +static void lcd_direct_signal_completion(void); + static uint16_t lcd_direct_swap_color(uint16_t color) { #if CONFIG_TQ_SCREEN_SWAP_COLOR_BYTES @@ -166,11 +170,7 @@ static esp_err_t lcd_direct_panel_init(void) #else .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB, #endif -#if CONFIG_TQ_SCREEN_SWAP_COLOR_BYTES - .data_endian = LCD_RGB_DATA_ENDIAN_LITTLE, -#else .data_endian = LCD_RGB_DATA_ENDIAN_BIG, -#endif .bits_per_pixel = 16, }; ESP_RETURN_ON_ERROR(esp_lcd_new_panel_st7789(s_panel_io, &panel_config, &s_panel), @@ -207,9 +207,6 @@ static esp_err_t lcd_direct_panel_init(void) madctl |= 0x08; #endif uint8_t ramctrl[] = {0x00, 0xF0}; -#if CONFIG_TQ_SCREEN_SWAP_COLOR_BYTES - ramctrl[1] |= LCD_RAMCTRL_LE_BIT; -#endif ESP_RETURN_ON_ERROR(esp_lcd_panel_io_tx_param(s_panel_io, LCD_CMD_MADCTL, &madctl, 1), TAG, "panel MADCTL failed"); @@ -333,25 +330,6 @@ static void lcd_direct_overlay_icons(uint16_t *pixel_buffer, } } -static void lcd_direct_overlay_boot_marker(uint16_t *pixel_buffer, uint16_t row_start, uint16_t row_count) -{ - const uint16_t marker_color = lcd_direct_swap_color(0xFFFF); - const uint16_t row_end = row_start + row_count; - - for (uint16_t y = row_start; y < row_end; ++y) { - uint16_t local_y = y - row_start; - for (uint16_t x = 0; x < LCD_DIRECT_WIDTH; ++x) { - const bool border = y < 2U || y >= (LCD_DIRECT_HEIGHT - 2U) || - x < 2U || x >= (LCD_DIRECT_WIDTH - 2U); - const bool center_line = (x >= 158U && x <= 161U && y >= 100U && y <= 140U) || - (y >= 118U && y <= 121U && x >= 140U && x <= 180U); - if (border || center_line) { - pixel_buffer[(uint32_t)local_y * LCD_DIRECT_WIDTH + x] = marker_color; - } - } - } -} - static esp_err_t lcd_direct_draw_rle_image(const lcd_direct_image_t *image, const lcd_direct_icon_draw_t *icons, size_t icon_count) @@ -399,7 +377,6 @@ static esp_err_t lcd_direct_draw_rle_image(const lcd_direct_image_t *image, } lcd_direct_overlay_icons(s_line_buffer, row_start, row_count, icons, icon_count); - lcd_direct_overlay_boot_marker(s_line_buffer, row_start, row_count); ESP_RETURN_ON_ERROR(lcd_direct_draw_rows(row_start, row_count), TAG, "write image pixels failed"); @@ -408,12 +385,169 @@ static esp_err_t lcd_direct_draw_rle_image(const lcd_direct_image_t *image, return ESP_OK; } -static esp_err_t lcd_direct_draw_default_image(void) +static esp_err_t lcd_direct_draw_asset_sequence_once(const lcd_direct_request_t *request) { - size_t icon_count = 0; - const lcd_direct_icon_draw_t *icons = lcd_direct_default_icon_sequence(&icon_count); - ESP_LOGI(TAG, "Drawing default LCD image icons=%u", (unsigned)icon_count); - return lcd_direct_draw_rle_image(lcd_direct_default_image(), icons, icon_count); + ESP_RETURN_ON_FALSE(request != NULL, + ESP_ERR_INVALID_ARG, + TAG, + "invalid asset request"); + + const size_t frame_count = request->frame_order_count > 0U ? request->frame_order_count : 1U; + for (size_t i = 0; i < frame_count; ++i) { + bool stop = false; + portENTER_CRITICAL(&s_state_lock); + stop = s_stop_requested || s_pending_valid; + portEXIT_CRITICAL(&s_state_lock); + if (stop) { + return ESP_ERR_INVALID_STATE; + } + + const uint8_t frame_index = request->frame_order_count > 0U ? request->frame_order[i] : (uint8_t)i; + const lcd_direct_image_t *frame = lcd_direct_asset_frame(request->asset_dir, frame_index); + ESP_RETURN_ON_FALSE(frame != NULL, + ESP_ERR_NOT_FOUND, + TAG, + "LCD asset frame not found asset=%s frame=%u", + request->asset_dir, + (unsigned)frame_index); + + ESP_RETURN_ON_ERROR(lcd_direct_draw_rle_image(frame, NULL, 0), + TAG, + "draw asset frame failed"); + + const uint32_t frame_ms = request->frame_ms > 0U ? request->frame_ms : 100U; + vTaskDelay(pdMS_TO_TICKS(frame_ms)); + } + + return ESP_OK; +} + +static esp_err_t lcd_direct_draw_asset_sequence_for_duration(const lcd_direct_request_t *request, + TickType_t start_tick, + TickType_t duration_ticks) +{ + ESP_RETURN_ON_FALSE(request != NULL, + ESP_ERR_INVALID_ARG, + TAG, + "invalid timed asset request"); + + const size_t frame_count = request->frame_order_count > 0U ? request->frame_order_count : 1U; + while ((xTaskGetTickCount() - start_tick) < duration_ticks) { + for (size_t i = 0; i < frame_count; ++i) { + bool stop = false; + portENTER_CRITICAL(&s_state_lock); + stop = s_stop_requested || s_pending_valid; + portEXIT_CRITICAL(&s_state_lock); + if (stop) { + return ESP_ERR_INVALID_STATE; + } + + const uint8_t frame_index = request->frame_order_count > 0U ? request->frame_order[i] : (uint8_t)i; + const lcd_direct_image_t *frame = lcd_direct_asset_frame(request->asset_dir, frame_index); + ESP_RETURN_ON_FALSE(frame != NULL, + ESP_ERR_NOT_FOUND, + TAG, + "LCD asset frame not found asset=%s frame=%u", + request->asset_dir, + (unsigned)frame_index); + + ESP_RETURN_ON_ERROR(lcd_direct_draw_rle_image(frame, NULL, 0), + TAG, + "draw timed asset frame failed"); + + const TickType_t now = xTaskGetTickCount(); + const TickType_t elapsed_ticks = now - start_tick; + if (elapsed_ticks >= duration_ticks) { + return ESP_OK; + } + + const uint32_t frame_ms = request->frame_ms > 0U ? request->frame_ms : 100U; + const TickType_t frame_ticks = pdMS_TO_TICKS(frame_ms); + const TickType_t remaining_ticks = duration_ticks - elapsed_ticks; + vTaskDelay(frame_ticks < remaining_ticks ? frame_ticks : remaining_ticks); + } + } + + return ESP_OK; +} + +static esp_err_t lcd_direct_play_asset_sequence(const lcd_direct_request_t *request) +{ + ESP_RETURN_ON_FALSE(request != NULL, + ESP_ERR_INVALID_ARG, + TAG, + "invalid asset sequence"); + + if (request->asset_dir[0] == '\0' || + lcd_direct_asset_frame(request->asset_dir, + request->frame_order_count > 0U ? request->frame_order[0] : 0U) == NULL) { + ESP_LOGW(TAG, "LCD asset sequence unavailable, fallback to basic face asset=%s", request->asset_dir); + const lcd_direct_request_t fallback = { + .kind = PLATFORM_LCD_PRESENTATION_ASSET_SEQUENCE, + .asset_dir = "jichubiaoqing", + .frame_order = {0, 1, 2}, + .frame_order_count = 3, + .repeat_count = 1, + .frame_ms = 100, + }; + esp_err_t fallback_err = lcd_direct_draw_asset_sequence_once(&fallback); + if (fallback_err == ESP_OK && request->repeat_count > 0U) { + lcd_direct_signal_completion(); + } + return fallback_err; + } + + if (request->duration_ms > 0U) { + const TickType_t start_tick = xTaskGetTickCount(); + const TickType_t duration_ticks = pdMS_TO_TICKS(request->duration_ms); + esp_err_t err = lcd_direct_draw_asset_sequence_for_duration(request, start_tick, duration_ticks); + if (err != ESP_OK) { + return err; + } + lcd_direct_signal_completion(); + return ESP_OK; + } + + uint16_t remaining = request->repeat_count; + do { + esp_err_t err = lcd_direct_draw_asset_sequence_once(request); + if (err != ESP_OK) { + return err; + } + if (request->repeat_count > 0U) { + remaining--; + } + } while (request->repeat_count == 0U || remaining > 0U); + + lcd_direct_signal_completion(); + return ESP_OK; +} + +static esp_err_t lcd_direct_play_basic_face_until_pending(void) +{ + const lcd_direct_request_t request = { + .kind = PLATFORM_LCD_PRESENTATION_ASSET_SEQUENCE, + .asset_dir = "jichubiaoqing", + .frame_order = {0, 1, 2}, + .frame_order_count = 3, + .repeat_count = 0, + .frame_ms = 100, + }; + + while (true) { + bool stop = false; + portENTER_CRITICAL(&s_state_lock); + stop = s_stop_requested || s_pending_valid; + portEXIT_CRITICAL(&s_state_lock); + if (stop) { + return ESP_OK; + } + + esp_err_t err = lcd_direct_draw_asset_sequence_once(&request); + if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) { + return err; + } + } } static void lcd_direct_signal_completion(void) @@ -486,8 +620,6 @@ void lcd_direct_start_render_loop(void) portEXIT_CRITICAL(&s_state_lock); ESP_LOGI(TAG, "Direct LCD render loop started"); - esp_err_t default_draw_err = lcd_direct_draw_default_image(); - ESP_LOGI(TAG, "Direct LCD default image draw result=%s", esp_err_to_name(default_draw_err)); while (true) { bool stop = false; @@ -503,13 +635,33 @@ void lcd_direct_start_render_loop(void) if (xSemaphoreTake(s_lock, pdMS_TO_TICKS(1000)) == pdTRUE) { esp_err_t draw_err = ESP_OK; if (request.kind == PLATFORM_LCD_PRESENTATION_IDLE) { - draw_err = lcd_direct_draw_default_image(); + draw_err = lcd_direct_play_basic_face_until_pending(); + } else if (request.kind == PLATFORM_LCD_PRESENTATION_ASSET_SEQUENCE) { + draw_err = lcd_direct_play_asset_sequence(&request); + if (draw_err == ESP_OK && request.return_to_idle) { + lcd_direct_request_t idle = { + .kind = PLATFORM_LCD_PRESENTATION_IDLE, + }; + portENTER_CRITICAL(&s_state_lock); + s_pending = idle; + s_pending_valid = true; + portEXIT_CRITICAL(&s_state_lock); + } } else { draw_err = lcd_direct_draw_test_pattern(&request); } xSemaphoreGive(s_lock); - if (draw_err == ESP_OK && request.repeat_count > 0U) { - lcd_direct_signal_completion(); + if (draw_err != ESP_OK && draw_err != ESP_ERR_INVALID_STATE) { + ESP_LOGW(TAG, "LCD presentation draw failed: %s", esp_err_to_name(draw_err)); + } + } + } else { + if (xSemaphoreTake(s_lock, pdMS_TO_TICKS(1000)) == pdTRUE) { + esp_err_t idle_err = lcd_direct_play_basic_face_until_pending(); + xSemaphoreGive(s_lock); + if (idle_err != ESP_OK && idle_err != ESP_ERR_INVALID_STATE) { + ESP_LOGW(TAG, "LCD idle draw failed: %s", esp_err_to_name(idle_err)); + vTaskDelay(pdMS_TO_TICKS(100)); } } } @@ -587,10 +739,18 @@ esp_err_t lcd_direct_request_presentation(const platform_lcd_presentation_reques .return_to_idle = request->return_to_idle, .repeat_count = request->repeat_count, .frame_ms = request->frame_ms, + .duration_ms = request->duration_ms, }; if (request->asset_dir != NULL) { strlcpy(copied.asset_dir, request->asset_dir, sizeof(copied.asset_dir)); } + if (request->frame_order != NULL && request->frame_order_count > 0U) { + copied.frame_order_count = request->frame_order_count; + if (copied.frame_order_count > PLATFORM_LCD_PRESENTATION_FRAME_ORDER_MAX) { + copied.frame_order_count = PLATFORM_LCD_PRESENTATION_FRAME_ORDER_MAX; + } + memcpy(copied.frame_order, request->frame_order, copied.frame_order_count); + } TaskHandle_t task = NULL; portENTER_CRITICAL(&s_state_lock); diff --git a/components/platform/src/lcd_direct_assets.c b/components/platform/src/lcd_direct_assets.c index 6fa1413..111fbfc 100644 --- a/components/platform/src/lcd_direct_assets.c +++ b/components/platform/src/lcd_direct_assets.c @@ -1,19 +1,79 @@ -/* Generated from D:\Code\chaowan\lcd(1)\lcd\lcd\main\eye_image.c buyunqian1. */ #include "lcd_direct_assets.h" +#include + extern const uint8_t _binary_buyunqian1_rle_start[] asm("_binary_buyunqian1_rle_start"); extern const uint8_t _binary_buyunqian1_rle_end[] asm("_binary_buyunqian1_rle_end"); +extern const uint8_t _binary_jichubiaoqing0_rle_start[] asm("_binary_jichubiaoqing0_rle_start"); +extern const uint8_t _binary_jichubiaoqing1_rle_start[] asm("_binary_jichubiaoqing1_rle_start"); +extern const uint8_t _binary_jichubiaoqing2_rle_start[] asm("_binary_jichubiaoqing2_rle_start"); +extern const uint8_t _binary_muyu0_rle_start[] asm("_binary_muyu0_rle_start"); +extern const uint8_t _binary_muyu1_rle_start[] asm("_binary_muyu1_rle_start"); +extern const uint8_t _binary_muyu2_rle_start[] asm("_binary_muyu2_rle_start"); static const lcd_direct_image_t s_default_image = { .runs = (const lcd_direct_rle_run_t *)_binary_buyunqian1_rle_start, .run_count = 72552U, }; +static const lcd_direct_image_t s_basic_face_frames[] = { + { + .runs = (const lcd_direct_rle_run_t *)_binary_jichubiaoqing0_rle_start, + .run_count = 5893U, + }, + { + .runs = (const lcd_direct_rle_run_t *)_binary_jichubiaoqing1_rle_start, + .run_count = 4581U, + }, + { + .runs = (const lcd_direct_rle_run_t *)_binary_jichubiaoqing2_rle_start, + .run_count = 3651U, + }, +}; + +static const lcd_direct_image_t s_muyu_frames[] = { + { + .runs = (const lcd_direct_rle_run_t *)_binary_muyu0_rle_start, + .run_count = 63459U, + }, + { + .runs = (const lcd_direct_rle_run_t *)_binary_muyu1_rle_start, + .run_count = 63665U, + }, + { + .runs = (const lcd_direct_rle_run_t *)_binary_muyu2_rle_start, + .run_count = 63894U, + }, +}; + const lcd_direct_image_t *lcd_direct_default_image(void) { return &s_default_image; } +const lcd_direct_image_t *lcd_direct_asset_frame(const char *asset_dir, uint8_t frame_index) +{ + if (asset_dir == NULL) { + return NULL; + } + + if (strcmp(asset_dir, "jichubiaoqing") == 0) { + if (frame_index < sizeof(s_basic_face_frames) / sizeof(s_basic_face_frames[0])) { + return &s_basic_face_frames[frame_index]; + } + return NULL; + } + + if (strcmp(asset_dir, "muyu") == 0) { + if (frame_index < sizeof(s_muyu_frames) / sizeof(s_muyu_frames[0])) { + return &s_muyu_frames[frame_index]; + } + return NULL; + } + + return NULL; +} + const lcd_direct_icon_t *lcd_direct_icon(uint16_t icon_id) { (void)icon_id; diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 804d340..9a48130 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -182,7 +182,7 @@ menu "Example Configuration" config TQ_KEY_DOUBLE_CLICK_MS int "Key double-click threshold (ms)" - default 300 + default 450 range 100 1000 depends on TQ_KEY_INPUT_ENABLE help diff --git a/sdkconfig.defaults b/sdkconfig.defaults index edd27f0..08c12ca 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -30,7 +30,7 @@ CONFIG_TQ_KEY_IRQ_QUEUE_LEN=16 CONFIG_TQ_KEY_INPUT_POLL_MS=20 CONFIG_TQ_KEY_DEBOUNCE_INTERVAL_MS=20 CONFIG_TQ_KEY_LONG_PRESS_MS=800 -CONFIG_TQ_KEY_DOUBLE_CLICK_MS=300 +CONFIG_TQ_KEY_DOUBLE_CLICK_MS=450 # Internal DMA-capable SRAM budget. TLS/auth/fortune flows, hardware AES DMA # bounce buffers, LCD DMA, and worker task stacks all need internal-only memory.