First successful flash: placeholder face live; fix 20MHz PSRAM trap; power ladder
- firmware boots to a rendered LVGL face in 1.57s (eyes + smile + tag) - sdkconfig: CONFIG_IDF_EXPERIMENTAL_FEATURES=y unlocks SPIRAM 200MHz (silently degraded to 20MHz before -> MIPI-DSI underrun -> LVGL lock starvation -> task watchdog); mirrors official 08_lvgl_demo_v9 config - architecture.md: power management section (user prime concern) — active/ambient/dormant/night ladder, levers, hard edges, <=300ms wake - AGENTS/CLAUDE: replace stale bring-up warnings with verified commands Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,25 +6,55 @@
|
||||
* 2. Wi-Fi up via ESP32-C6 (ESP-Hosted over SDIO)
|
||||
* 3. WebSocket connection to the DeskLock gateway
|
||||
* 4. Face state machine: idle / listening / thinking / speaking
|
||||
*
|
||||
* Current stage: bring-up — display + a placeholder face.
|
||||
*/
|
||||
|
||||
#include "esp_log.h"
|
||||
#include "bsp/esp-bsp.h"
|
||||
#include "lvgl.h"
|
||||
|
||||
static const char *TAG = "desklock";
|
||||
|
||||
static void show_placeholder_face(void)
|
||||
{
|
||||
bsp_display_lock(0);
|
||||
|
||||
lv_obj_t *scr = lv_screen_active();
|
||||
lv_obj_set_style_bg_color(scr, lv_color_black(), 0);
|
||||
|
||||
lv_obj_t *eyes = lv_label_create(scr);
|
||||
lv_label_set_text(eyes, "- -");
|
||||
lv_obj_set_style_text_color(eyes, lv_color_hex(0xADFFC8), 0);
|
||||
lv_obj_set_style_text_font(eyes, &lv_font_montserrat_48, 0);
|
||||
lv_obj_align(eyes, LV_ALIGN_CENTER, 0, -80);
|
||||
|
||||
lv_obj_t *mouth = lv_label_create(scr);
|
||||
lv_label_set_text(mouth, "\\_/");
|
||||
lv_obj_set_style_text_color(mouth, lv_color_hex(0xADFFC8), 0);
|
||||
lv_obj_set_style_text_font(mouth, &lv_font_montserrat_48, 0);
|
||||
lv_obj_align(mouth, LV_ALIGN_CENTER, 0, 40);
|
||||
|
||||
lv_obj_t *tag = lv_label_create(scr);
|
||||
lv_label_set_text(tag, "DESKLOCK");
|
||||
lv_obj_set_style_text_color(tag, lv_color_hex(0x2F7A4B), 0);
|
||||
lv_obj_align(tag, LV_ALIGN_CENTER, 0, 160);
|
||||
|
||||
bsp_display_unlock();
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "DeskLock starting");
|
||||
|
||||
bsp_display_start();
|
||||
bsp_display_backlight_on();
|
||||
show_placeholder_face();
|
||||
|
||||
/* TODO(bring-up): render placeholder face via LVGL
|
||||
* TODO(bring-up): Wi-Fi via ESP-Hosted (C6)
|
||||
* TODO(voice): mic capture (ES7210) -> WebSocket upstream
|
||||
* TODO(voice): gateway PCM downstream -> ES8311 playback
|
||||
ESP_LOGI(TAG, "DeskLock up (placeholder face)");
|
||||
|
||||
/* TODO(face): full LVGL face state machine per docs/architecture.md
|
||||
* TODO(net): Wi-Fi via ESP-Hosted (C6), WebSocket to gateway
|
||||
* TODO(voice): ES7210 capture upstream, ES8311 playback downstream
|
||||
*/
|
||||
|
||||
ESP_LOGI(TAG, "DeskLock up (display only)");
|
||||
}
|
||||
|
||||
@@ -5,10 +5,19 @@ CONFIG_IDF_TARGET="esp32p4"
|
||||
CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y
|
||||
CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y
|
||||
|
||||
# 32 MB in-package PSRAM (hex mode) — LVGL frame buffers live here
|
||||
# PSRAM at 200 MHz — REQUIRED for the 800x800 MIPI-DSI framebuffer.
|
||||
# 200 MHz is gated behind IDF_EXPERIMENTAL_FEATURES; without it the build
|
||||
# silently falls back to 20 MHz and the DSI underruns (mirrors the official
|
||||
# 08_lvgl_demo_v9 example config).
|
||||
CONFIG_SPIRAM=y
|
||||
CONFIG_SPIRAM_MODE_HEX=y
|
||||
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
|
||||
CONFIG_SPIRAM_SPEED_200M=y
|
||||
CONFIG_SPIRAM_XIP_FROM_PSRAM=y
|
||||
CONFIG_CACHE_L2_CACHE_256KB=y
|
||||
CONFIG_CACHE_L2_CACHE_LINE_128B=y
|
||||
|
||||
CONFIG_COMPILER_OPTIMIZATION_PERF=y
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
|
||||
# LVGL font for the bring-up placeholder face
|
||||
CONFIG_LV_FONT_MONTSERRAT_48=y
|
||||
|
||||
Reference in New Issue
Block a user