From 2bca0c5673f22403c6360d7b3b536dbd560011ce Mon Sep 17 00:00:00 2001 From: yuquanjun Date: Sat, 5 Sep 2026 06:27:12 +0800 Subject: [PATCH] Add full-screen 0904 charge art to UI0902 resource pack. Charge page draws UI0902_CHARGE_SCREEN instead of legacy 160x190 Charg.bin; pack/gen/publish paths keep the asset in sync. Co-authored-by: Cursor --- UI/UI_Idle.c | 10 ++- project/inc/UI0902_Res_Addr.h | 6 +- .../08_充电界面/充电界面-0902-09.png | Bin 0 -> 35006 bytes tools/gen_ui0902_assets.py | 62 ++++++++++-------- tools/pack_extflash_tone_0903.py | 4 +- tools/publish_k1_release.py | 2 +- 6 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 tools/assets_0902/08_充电界面/充电界面-0902-09.png diff --git a/UI/UI_Idle.c b/UI/UI_Idle.c index 5b5cc14..a56d18b 100644 --- a/UI/UI_Idle.c +++ b/UI/UI_Idle.c @@ -259,8 +259,9 @@ void IdleProcess(DisplayTaskMessage_Type msg) BSP_MainPowerEnable(1); LCD_WR_REG(0x29); //Display on - LCD_WR_PIC_FROM_FLASH(40, 50, EXTFLASH_CHARGING_W, EXTFLASH_CHARGING_H, - EXTFLASH_CHARGING_ADDR); + /* 0904 全屏充电画面(UI0902 资源包);旧 Charg.bin 160x190 仅作音色包占位 */ + LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_CHARGE_SCREEN_W, UI0902_CHARGE_SCREEN_H, + UI0902_CHARGE_SCREEN_ADDR); LCD_BLK_Set(); flag = 1; } @@ -268,7 +269,10 @@ void IdleProcess(DisplayTaskMessage_Type msg) { uint8_t Info[10] = {0,}; sprintf ((char*)Info, "%d%%", msg.ID); - LCD_ShowString_AutoAlign(0,240,250,Info,LCD_ALIGN_CENTER,WHITE,BLACK,0,28); + /* 设计稿百分比约 y270;清带避免 9%→100% 残影 */ + LCD_FillByColor(40, 265, 200, 298, UI0902_BG_COLOR); + LCD_ShowString_AutoAlign(0, 240, 270, Info, LCD_ALIGN_CENTER, + WHITE, UI0902_BG_COLOR, 0, 28); } //else //BSP_MainPowerEnable(0); diff --git a/project/inc/UI0902_Res_Addr.h b/project/inc/UI0902_Res_Addr.h index 3029131..4b91bdd 100644 --- a/project/inc/UI0902_Res_Addr.h +++ b/project/inc/UI0902_Res_Addr.h @@ -280,7 +280,11 @@ #define UI0902_BOOT_LOGO_W 240 #define UI0902_BOOT_LOGO_H 320 -#define UI0902_BTN_CANCEL_BIG_ADDR (UI0902_RES_BASE + 0x0AC000UL) /* 11872 bytes */ +#define UI0902_CHARGE_SCREEN_ADDR (UI0902_RES_BASE + 0x0AC000UL) /* 153600 bytes */ +#define UI0902_CHARGE_SCREEN_W 240 +#define UI0902_CHARGE_SCREEN_H 320 + +#define UI0902_BTN_CANCEL_BIG_ADDR (UI0902_RES_BASE + 0x0D2000UL) /* 11872 bytes */ #define UI0902_BTN_CANCEL_BIG_W 106 #define UI0902_BTN_CANCEL_BIG_H 56 diff --git a/tools/assets_0902/08_充电界面/充电界面-0902-09.png b/tools/assets_0902/08_充电界面/充电界面-0902-09.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d6c7379cda2ae0c4aa9a13bb4fcacef6c2d643 GIT binary patch literal 35006 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 literal 0 HcmV?d00001 diff --git a/tools/gen_ui0902_assets.py b/tools/gen_ui0902_assets.py index fd469ee..5b2f47a 100644 --- a/tools/gen_ui0902_assets.py +++ b/tools/gen_ui0902_assets.py @@ -10,6 +10,7 @@ Outputs: """ from PIL import Image, ImageDraw, ImageFont from pathlib import Path +import sys ROOT = Path(__file__).resolve().parents[1] SRC = ROOT / "tools" / "assets_0902" @@ -109,6 +110,9 @@ def make_cancel_button(): # ---------------- internal flash (small, high-frequency icons) ---------------- +# NOTE: MCU-internal icon set in Drv_ILI9341_Lcd_Image_UI0902.c/.h may include +# extra hand-tuned symbols (tri/btn). Prefer --ext-only to refresh ExtFlash map +# without wiping those arrays. INTERNAL = [ ("gImage_UI0902_Volume_20x15", "02_顶部图标/音量图标-10.png"), ("gImage_UI0902_Bluetooth_11x17", "02_顶部图标/蓝牙图标-10.png"), @@ -194,38 +198,45 @@ EXTERNAL = [ ("TXT_RESTORE_V2", "06_控件/文字/文字-25.png"), ("TXT_RESTORE_H", "06_控件/文字/文字-26.png"), ("TXT_RESTORE_CONFIRM", "06_控件/文字/文字-27.png"), - # 整屏开机 Logo(避开旧 0x0 / 充电 0xCB70 区,挂在 ui0902 资源包末尾) + # 整屏开机 Logo / 充电画面(避开旧 0x0 / Charg.bin 0xCB70 区,挂在 ui0902 资源包) ("BOOT_LOGO", "07_开机/开机界面-20.png"), + ("CHARGE_SCREEN", "08_充电界面/充电界面-0902-09.png"), # 0904 最新全屏充电稿;百分比重叠由固件绘制 ] def main(): + ext_only = "--ext-only" in sys.argv + # ---- internal flash C arrays ---- - c_lines = ['#include "Drv_ILI9341_Lcd_Image_UI0902.h"', "", - "/* Auto-generated by tools/gen_ui0902_assets.py. Do not hand-edit. */", ""] - h_lines = ["#ifndef __DRV_ILI9341_LCD_IMAGE_UI0902_H", - "#define __DRV_ILI9341_LCD_IMAGE_UI0902_H", "", - '#include "stdint.h"', ""] - total_int = 0 + if not ext_only: + c_lines = ['#include "Drv_ILI9341_Lcd_Image_UI0902.h"', "", + "/* Auto-generated by tools/gen_ui0902_assets.py. Do not hand-edit. */", ""] + h_lines = ["#ifndef __DRV_ILI9341_LCD_IMAGE_UI0902_H", + "#define __DRV_ILI9341_LCD_IMAGE_UI0902_H", "", + '#include "stdint.h"', ""] + total_int = 0 - data, w, h = rgba_to_rgb565(make_battery_outline()) - emit_c_array(c_lines, "gImage_UI0902_BatteryOutline_29x12", data, w, h) - h_lines.append("extern const unsigned char gImage_UI0902_BatteryOutline_29x12[];") - total_int += len(data) - - data, w, h = rgba_to_rgb565(make_battery_fill()) - emit_c_array(c_lines, "gImage_UI0902_BatteryFill_22x9", data, w, h) - h_lines.append(f"extern const unsigned char gImage_UI0902_BatteryFill_22x9[{len(data)}];") - total_int += len(data) - - for name, rel in INTERNAL: - data, w, h = rgba_to_rgb565(Image.open(SRC / rel)) - emit_c_array(c_lines, name, data, w, h) - h_lines.append(f"extern const unsigned char {name}[{len(data)}];") + data, w, h = rgba_to_rgb565(make_battery_outline()) + emit_c_array(c_lines, "gImage_UI0902_BatteryOutline_29x12", data, w, h) + h_lines.append("extern const unsigned char gImage_UI0902_BatteryOutline_29x12[];") total_int += len(data) - h_lines += ["", "#endif", ""] - OUT_H.write_text("\n".join(h_lines), encoding="utf-8") - OUT_C.write_text("\n".join(c_lines), encoding="utf-8") + + data, w, h = rgba_to_rgb565(make_battery_fill()) + emit_c_array(c_lines, "gImage_UI0902_BatteryFill_22x9", data, w, h) + h_lines.append(f"extern const unsigned char gImage_UI0902_BatteryFill_22x9[{len(data)}];") + total_int += len(data) + + for name, rel in INTERNAL: + data, w, h = rgba_to_rgb565(Image.open(SRC / rel)) + emit_c_array(c_lines, name, data, w, h) + h_lines.append(f"extern const unsigned char {name}[{len(data)}];") + total_int += len(data) + h_lines += ["", "#endif", ""] + OUT_H.write_text("\n".join(h_lines), encoding="utf-8") + OUT_C.write_text("\n".join(c_lines), encoding="utf-8") + print(f"internal flash payload: {total_int} bytes -> {OUT_C.name}") + else: + print("Skip internal C arrays (--ext-only)") # ---- external flash bin ---- addr_lines = ["#ifndef __UI0902_RES_ADDR_H", "#define __UI0902_RES_ADDR_H", "", @@ -239,7 +250,7 @@ def main(): if name in ("ROW_UNIVERSAL_NOT", "ROW_UNIVERSAL_SEL", "ROW_NORMAL_NOT", "ROW_NORMAL_SEL", "ROW_EXPERT_NOT", "ROW_EXPERT_SEL"): im = im.resize(ROW_RESIZE, Image.LANCZOS) data, w, h = rgba_to_rgb565(im) - elif name == "BOOT_LOGO": + elif name in ("BOOT_LOGO", "CHARGE_SCREEN"): if im.size[0] >= 241 and im.size[1] >= 321: im = im.crop((0, 0, 240, 320)) elif im.size != (240, 320): @@ -265,7 +276,6 @@ def main(): OUT_ADDR.write_text("\n".join(addr_lines), encoding="utf-8") OUT_BIN.write_bytes(bytes(blob)) - print(f"internal flash payload: {total_int} bytes -> {OUT_C.name}") print(f"external flash payload: {len(blob)} bytes ({len(entries)} images) -> {OUT_BIN.name}") print(f"addr header -> {OUT_ADDR}") diff --git a/tools/pack_extflash_tone_0903.py b/tools/pack_extflash_tone_0903.py index d6683e2..3ea4b77 100644 --- a/tools/pack_extflash_tone_0903.py +++ b/tools/pack_extflash_tone_0903.py @@ -4,7 +4,7 @@ Layout (absolute W25Q128 offsets): 0x00000000 logo.bin (legacy pad; boot UI uses UI0902 full-screen logo) - 0x0000CB70 Charg.bin (160x190 RGB565 charging art) + 0x0000CB70 Charg.bin (legacy pad; charge UI uses UI0902_CHARGE_SCREEN full-screen) 0x0001B8F0 1.bin 普通/专业 31 rhythms 0x0009D07D 2.bin 海阔天空 0x000A8607 3.bin 万能模式 @@ -42,7 +42,7 @@ def main() -> None: ziliao = find_ziliao() parts = [ ("LOGO", ziliao / "logo.bin", 0x00000000, "legacy pad; boot uses UI0902_BOOT_LOGO"), - ("CHARGING", ziliao / "Charg.bin", 0x0000CB70, "160x190 RGB565"), + ("CHARGING", ziliao / "Charg.bin", 0x0000CB70, "legacy pad; UI uses UI0902_CHARGE_SCREEN"), ("BIN1_RHYTHM", TONE_DIR / "1.bin", 0x0001B8F0, "普通/专业 31 条节奏"), ("BIN2_SONG_HAITIAN", TONE_DIR / "2.bin", None, "本地曲目 海阔天空"), ("BIN3_UNIVERSAL", TONE_DIR / "3.bin", None, "万能模式"), diff --git a/tools/publish_k1_release.py b/tools/publish_k1_release.py index 6e22e8c..fc7e55e 100644 --- a/tools/publish_k1_release.py +++ b/tools/publish_k1_release.py @@ -143,7 +143,7 @@ def main() -> None: "说明:", " - 只刷音色 .res、不刷 UI0902 时,模式选择页会花屏(读图地址在 0x100000)。", " - 本机开发板若早已刷过 UI0902,只更新音色+MCU 仍可能正常;同事空片/整片擦除会中招。", - " - 开机全屏 Logo 在 UI0902,不在音色包里的 logo.bin 占位。", + " - 开机全屏 Logo、关机充电全屏画面在 UI0902,不在音色包里的 logo.bin/Charg.bin 占位。", " - AutoBand 0x9EB5F 本版未重排。", "", "附件: SoundWalkerIAP.exe / 升级步骤.docx / FLASH_MAP.txt",