First successful flash: placeholder face live; fix 20MHz PSRAM trap; power ladder
Test, Build and Push / test-gateway (push) Successful in 10s
Test, Build and Push / release (push) Skipped
Test, Build and Push / build-gateway (push) Skipped

- 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:
2026-07-14 20:31:25 +02:00
co-authored by Claude Fable 5
parent 2d5cbd1174
commit 450bac1c81
5 changed files with 119 additions and 29 deletions
+36 -6
View File
@@ -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)");
}