fix(ui/wave): 回放页切通道/切段后不重绘——key_cb 接管键后补失效

回放页 v1.0 建的键处理返回 true(接管全部键),但从未调
ui_content_page_invalidate():框架只在 key_cb 返回 false 时才替页面
失效,于是「键送达、状态已切、屏上纹丝不动」。该病被枚举缺陷完全
遮住(整页恒空、没有可切的画面),随本波枚举修复首次上板才暴露:
真机按 ←/→/↑/↓ 帧字节完全不变(同帧哈希),布局与状态机无问题。

- 上/下切通道、左/右切段成功路径、空态再探路径,各补一次
  ui_content_page_invalidate()(与 ui_page_clock / ui_page_password
  等已接管键的页面同纪律);
- 切段失败仍保持「按了没动」的诚实语义(不重绘、不把忙态清成空);
- 修改记录 v1.1。

/keil-build 0 错误 0 警告(Code 247,288 B,+4 B),RAM 不变;
台账 / 同码凭证同批刷新。

Refs #38
This commit is contained in:
2026-11-02 18:21:34 +08:00
parent d6253aa974
commit 046097918d
5 changed files with 20 additions and 10 deletions
+10
View File
@@ -29,6 +29,10 @@
* 创建日期:2026-10-29
* 修改记录:
* v1.0 2026-10-29 DTU 项目组 创建(故障录波道 UI 侧)
* v1.1 2026-11-02 DTU 项目组 按键切通道/切段补 ui_content_page_invalidate:
* 本页 key_cb 返回 true(接管键),框架不再替本页失效重绘,状态变了
* 屏上却纹丝不动——该病在枚举修复前整页恒空、从未有键可切,故随
* 2026-11-02 回放页修复首次上板才暴露(真机实证见 PR #67)。
*/
/* 头文件包含区 */
@@ -394,11 +398,16 @@ static bool pg_key(lv_key_t a_key) {
s_state = (rc == UI_WAVE_BAD) ? WP_ST_BAD : WP_ST_IDLE;
}
}
/* 状态已变必须显式失效:框架只在 key_cb 返回 false 时自己 invalidate,
* 本页接管了键(true),不失效就永远画旧画面(2026-11-02 真机实证:
* 键送达、状态已切、屏上纹丝不动——该病随枚举修复首次上板才暴露) */
ui_content_page_invalidate();
return true;
case LV_KEY_LEFT:
case LV_KEY_RIGHT:
if (s_state == WP_ST_IDLE) {
wp_ensure(); /* 空态下按左右 = 再探一次盘(新段可能已落) */
ui_content_page_invalidate();
return true;
}
rc = (a_key == LV_KEY_RIGHT) ? ui_data_wave_seg_next(s_idx, &next)
@@ -407,6 +416,7 @@ static bool pg_key(lv_key_t a_key) {
s_idx = next;
s_state = WP_ST_IDLE; /* 先回空态再载,坏段不会留着旧画面 */
wp_load_seg();
ui_content_page_invalidate(); /* 理由同上:切段成功要重绘 */
}
return true;
default: