Harden charge UI draw when ExtFlash asset missing.

Fill dark background first, overlay % at size 24, and fall back if charge bitmap is erased.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-05 20:39:11 +08:00
parent d960d88147
commit 0e57fa452f
2 changed files with 41 additions and 8 deletions

View File

@ -279,6 +279,24 @@ uint8_t app_log_try_command(const char *cmd)
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "UI_BOOT_OK\n"); SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "UI_BOOT_OK\n");
return 1U; return 1U;
} }
if (strncmp(cmd, "ui charge", 9) == 0) {
uint8_t peek[4];
LCD_BLK_Set();
LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
W25Q128_Read(peek, UI0902_CHARGE_SCREEN_ADDR, 4);
if (peek[0] != 0xFF || peek[1] != 0xFF) {
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_CHARGE_SCREEN_W, UI0902_CHARGE_SCREEN_H,
UI0902_CHARGE_SCREEN_ADDR);
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "UI_CHARGE_OK\n");
} else {
Draw_Charging_Icon(120, 150, 2, 0x3D7F);
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "UI_CHARGE_EMPTY\n");
}
LCD_FillByColor(40, 255, 200, 292, UI0902_BG_COLOR);
LCD_ShowString_AutoAlign(0, 240, 264, (uint8_t *)"50%", LCD_ALIGN_CENTER,
WHITE, UI0902_BG_COLOR, 0, 24);
return 1U;
}
return 0U; return 0U;
} }

View File

@ -256,12 +256,27 @@ void IdleProcess(DisplayTaskMessage_Type msg)
static bool s_charge_ui_drawn = false; static bool s_charge_ui_drawn = false;
if(!s_charge_ui_drawn) if(!s_charge_ui_drawn)
{ {
uint8_t peek[4];
BSP_MainPowerEnable(1); BSP_MainPowerEnable(1);
LCD_WR_REG(0x29); //Display on LCD_WR_REG(0x29); /* Display on */
/* 0904 全屏充电画面UI0902 资源包);旧 Charg.bin 160x190 仅作音色包占位 */ /* 先铺设计底色,避免外置 Flash 未烧充电图时整屏 0xFF 灰底 */
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_CHARGE_SCREEN_W, UI0902_CHARGE_SCREEN_H, LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
UI0902_CHARGE_SCREEN_ADDR);
W25Q128_Read(peek, UI0902_CHARGE_SCREEN_ADDR, 4);
if (peek[0] != 0xFF || peek[1] != 0xFF)
{
/* 0904 全屏充电画面UI0902 @ CHARGE_SCREEN% 由固件叠画 */
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_CHARGE_SCREEN_W, UI0902_CHARGE_SCREEN_H,
UI0902_CHARGE_SCREEN_ADDR);
}
else
{
/* 资源未烧录时的兜底:圆环闪电(需稍后 flash ui0902 */
Draw_Charging_Icon(120, 150, 2, 0x3D7F);
LOG_W("UI", "charge flash empty @0x%08lX — flash ui0902",
(unsigned long)UI0902_CHARGE_SCREEN_ADDR);
}
LCD_BLK_Set(); LCD_BLK_Set();
s_charge_ui_drawn = true; s_charge_ui_drawn = true;
} }
@ -269,10 +284,10 @@ void IdleProcess(DisplayTaskMessage_Type msg)
{ {
uint8_t Info[10] = {0,}; uint8_t Info[10] = {0,};
sprintf ((char*)Info, "%d%%", msg.ID); sprintf ((char*)Info, "%d%%", msg.ID);
/* 设计稿百分比约 y270清带避免 9%→100% 残影 */ /* 设计稿约 y270字库仅有 16/24/28用 24 贴近标注 20 */
LCD_FillByColor(40, 265, 200, 298, UI0902_BG_COLOR); LCD_FillByColor(40, 255, 200, 292, UI0902_BG_COLOR);
LCD_ShowString_AutoAlign(0, 240, 270, Info, LCD_ALIGN_CENTER, LCD_ShowString_AutoAlign(0, 240, 264, Info, LCD_ALIGN_CENTER,
WHITE, UI0902_BG_COLOR, 0, 28); WHITE, UI0902_BG_COLOR, 0, 24);
} }
else else
{ {