feat(lcd): add cached listening animation and asset guidelines
This commit is contained in:
@@ -1,20 +1,24 @@
|
||||
# 待机恢复与时间 / 电量状态栏
|
||||
|
||||
完整现行说明见 [GFX 表情显示应用与开发指南](GFX表情显示应用与开发指南.md)。
|
||||
本文保留待机、状态栏和历次优化记录;旧 lcd-expressions.md 中的测试图案、
|
||||
本文保留待机、状态栏和历次优化记录;以下历史数字主要针对待机,listening 的
|
||||
独立资源/时间线见新指南。旧 lcd-expressions.md 中的测试图案、
|
||||
优先级仲裁描述不代表当前运行行为。正常播放现在是缓存图像,不是逐帧网格。
|
||||
|
||||
## 返回待机
|
||||
|
||||
- 开机 / 默认空闲、显式 IDLE 请求、有限动画 return_to_idle、缺失素材回退和
|
||||
非取消的播放错误都进入同一个待机后端。
|
||||
- CONFIG_TQ_LCD_EMOTE_GFX_TEST 启用且初始化成功时使用单纹理网格眨眼;
|
||||
- CONFIG_TQ_LCD_EMOTE_GFX_TEST 启用且初始化成功时优先播放初始化生成的眼型缓存;
|
||||
待机缓存失败保留实时网格。网格与闭眼弧线通常只用于待机缓存生成。
|
||||
禁用或初始化失败才使用历史三帧 PNG 安全后备。
|
||||
- 历史 jichubiaoqing 请求(duration_ms=0)也适配到 GFX。
|
||||
有限播放保留 repeat_count,每轮为 frame_ms 睁眼停留 + 12 个 34ms 眨眼步骤;
|
||||
不承诺与旧 PNG 完全相同的持续时间。服务错误因此不再临时退回三帧。
|
||||
- 自动恢复只在没有 pending 请求且未停止时排入 IDLE,不能覆盖新来的请求。
|
||||
- 其他表情仍为 PNG / step sequence,未改动其图像或动画顺序。
|
||||
- listening 也已迁移为 GFX 局部缓存,复用引擎/传输/HUD,缓存失败回退旧 PNG;
|
||||
保持睁眼约 2.4 秒、眨眼目标 300ms,直到业务新请求或停止,不自行回待机。
|
||||
- 除待机/listening 外,其他表情仍为 PNG / step sequence,未改动其图像或动画顺序。
|
||||
pending 仍是单槽替换,不是完整优先级状态机。
|
||||
|
||||
## 状态栏
|
||||
@@ -23,7 +27,8 @@
|
||||
- 右上百分比和电池;未知值显示 --%,充电绿色并带闪电缺口,低电量红色。
|
||||
- SOC、有效性和充电状态来自现有 domain battery 服务,不从 ADC 重算。
|
||||
- GFX 顶部 320x40 RGB565 图层,常驻 25,600 B PSRAM;只在分钟或电池状态
|
||||
改变时使图层失效并刷新,眨眼主要改变眼睛网格,接近闭合时切换为程序绘制的抗锯齿弧线,不解码新 PNG。
|
||||
改变时使图层失效并刷新。正常待机/listening 眨眼切换缓存,不重新解码 PNG;
|
||||
实时网格与程序闭眼弧线属于待机缓存生成或缓存失败后备路径。
|
||||
- PNG 表情复用相同点阵 / 电池绘制器,在每帧合成时更新;二维码和 LCD
|
||||
边界测试页面不显示状态栏。PNG 无限等待期间不会独立重绘状态栏。
|
||||
- 不需要字体包或新图片。旧 PNG 低电量底部告警保留;旧充电 PNG 不再自动
|
||||
@@ -61,7 +66,8 @@ AddressSanitizer / UndefinedBehaviorSanitizer 检查 808 组有效性、充电
|
||||
|
||||
主机传输/闭眼回归:`python3 tools/test_lcd_emote_transport.py`,检查 320 种
|
||||
区域宽度、DMA 分块/数据顺序、错误/超时处理及闭眼对称性。当前 RTOS tick
|
||||
为 10ms,实际眨眼间隔仍有 tick 量化及任务调度抖动,日志不是实测 FPS。
|
||||
为 10ms,实际眨眼间隔仍有 tick 量化及任务调度抖动;日志测量步骤/图像更新
|
||||
吞吐率,不是面板扫描率。
|
||||
|
||||
## 可开关的实测帧率日志
|
||||
|
||||
@@ -73,13 +79,14 @@ menuconfig 的屏幕配置中 `Log measured GFX blink FPS` 对应
|
||||
|
||||
- blink_us:实际整轮眨眼墙钟耗时,包含计算、SPI、等待和任务调度,
|
||||
不包含此前约 2 秒的静止睁眼时间,也不包含该条日志输出时间。
|
||||
- step_fps:12 个时序步骤 / 实测眨眼秒数,闭眼保持也算步骤。
|
||||
- step_fps:本轮步骤数 / 实测眨眼秒数(待机 12 步、listening 10 步),闭眼保持也算步骤。
|
||||
- eye_updates:步骤的刷新调用确实完成至少一个区域传输才计一次;
|
||||
一帧多个区域/多个 DMA 块不会重复计数,保持帧和等待期间的 HUD 更新不计。
|
||||
- update_fps:eye_updates / 相同的 blink_us,是本轮眼睛画面更新吞吐率,
|
||||
不是面板扫描率,也不是仅统计运动段的瞬时 FPS。
|
||||
- draw_avg_us / draw_max_us:步骤绘制及锁等待耗时,平均包含无需传输的保持步骤。
|
||||
- late_steps:绘制耗时达到或超过 34ms 帧预算的步骤数。
|
||||
- late_steps:绘制耗时达到或超过相应步长预算的步骤数(待机 34ms、listening 30ms)。
|
||||
- face:idle/listening,区分当前表情。
|
||||
|
||||
示例:blink_us=570000 steps=12,则 step_fps=21.05;如果 eye_updates=9,
|
||||
update_fps=15.78。没有 TE,这些指标不测量屏幕实际扫描或保证无撕裂。
|
||||
@@ -87,7 +94,7 @@ update_fps=15.78。没有 TE,这些指标不测量屏幕实际扫描或保证
|
||||
### 分项耗时 emote_cost
|
||||
|
||||
同一开关下,每轮 emote_fps 后追加一条 emote_cost,各项均输出 avg_us / max_us。
|
||||
平均按 12 个步骤计算,包含不传输的闭眼保持步骤;各项最大值可能来自不同步骤,
|
||||
平均按本轮步骤数计算(待机 12、listening 10),包含不传输的闭眼保持步骤;各项最大值可能来自不同步骤,
|
||||
不能相加。累计计数和快照都在 GFX 渲染锁内,不计静止/HUD 更新的耗时。
|
||||
|
||||
- lock:调用 gfx_emote_lock 到获取锁的墙钟耗时。
|
||||
|
||||
Reference in New Issue
Block a user