fix(watchdog+launcher+sdk): M40 电源键 time64 ABI + 锁屏/叠加残留链
- sdk/meow_time32: 抽出可独立链接的 o32 time32 取时/睡眠设施(不依赖 meow_ui.a, watchdog 等独立静态组件可直接链;可选 -DMEOW_TIME32_LIBC_OVERRIDES 接管 libc 入口) - watchdog: now_ms/usleep 改走 time32(修复 held 变天文数字→每次单击都弹菜单); 阈值读 power.longpress_menu_ms/forceoff_ms(缺省 3000/8000),删除 PWR_TOGGLE_MS==PWR_MENU_MS;新增 wd_power.h 纯判定 + 宿主行为矩阵测试 - launcher: App 前台电源菜单补齐 §10.5(notif 全抑制 + 帧恢复 + SIGCONT 排空 + 标记翻回前台);show_power_menu 恢复进入前背景帧(关闭后不再停留菜单画面); 重绘挪到首轮按键采样之后;activity 标记排空窗 + 会话入口清理 + manual_off 去闩锁 - lock_screen: 电源改按下边沿 + 进场 300ms 才熄屏;电源熄屏退出也恢复底层帧; launcher 在 SIGCONT 前写 /tmp/meow_app_repaint,SDK present 消费并 dirty_full - power_menu: 菜单内强关接 power.forceoff_ms(按 longpress 抵扣),日志不再谎称 8s - 重编 meow_ui.a 并重链 meow_launcherd/ncm/files/hello/reader(picbrowser 无源码) - fw_content.conf: 同步 launcherd/watchdog 新 md5;顺带修正 M35 遗留的 nyai 失效钉值 Host: test_wd_fw 66/66、test_overlay_gate 40/40、test_meow_time64/time/repaint PASS。 真机未验证(设备关机);未刷机、未写设备。
This commit is contained in:
1 parent
b1acc9096b
commit
63b278e13e
28 files changed
+977
-217
No files matched your search
@@ -1,9 +1,10 @@
|
||||
/* test_wd_fw.c — 宿主单测:meow_watchdog 的纯逻辑(M2.86 框架 App 判定 + M20 亮屏亮度)。
|
||||
/* test_wd_fw.c — 宿主单测:meow_watchdog 的纯逻辑(M2.86 框架 App 判定 + M20 亮屏亮度 +
|
||||
* M40 time32 取时/睡眠 + 电源阈值行为矩阵)。
|
||||
*
|
||||
* 编译:#include meow_watchdog.c(去 main 拿 wd_app_is_framework/json_str/from_pid、
|
||||
* wd_bri_decide、wd_settings_brightness、wd_panel_off/on)。
|
||||
* wd_bri_decide、wd_settings_brightness、wd_panel_off/on;wd_power.h 的纯判定)。
|
||||
* gcc -Wall -Wextra -Os -DWd_NO_MAIN -Wno-unused-function -Wno-unused-parameter \
|
||||
* test_wd_fw.c -o test_wd_fw
|
||||
* test_wd_fw.c ../sdk/meow_time32.c -o test_wd_fw
|
||||
* (meow_watchdog.c 含仅 main 使用的静态函数,宿主去 main 后须 -Wno-unused-function 静音;
|
||||
* mips 目标构建不定义 WD_NO_MAIN,不受影响。)
|
||||
* 运行:./test_wd_fw;全 PASS -> exit 0。
|
||||
@@ -223,6 +224,84 @@ static void test_panel_brightness_e2e(void)
|
||||
unsetenv("MEOW_SETTINGS_FILE");
|
||||
}
|
||||
|
||||
/* ---- M40:time32 取时/睡眠(与 libc 正常取时一致;o32 syscall 路径由交叉二进制反汇编验证)---- */
|
||||
static void test_time32(void)
|
||||
{
|
||||
struct meow_time32 t;
|
||||
check("time32 gettime ok", meow_time32_clock_gettime(CLOCK_MONOTONIC, &t) == 0, 1);
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
check("time32 sec == libc sec", t.tv_sec == (int32_t)ts.tv_sec, 1);
|
||||
long dn = (long)t.tv_nsec - (long)ts.tv_nsec;
|
||||
if (dn < 0) dn = -dn;
|
||||
check("time32 nsec == libc nsec (<1ms)", dn < 1000000, 1);
|
||||
|
||||
uint64_t a = meow_time32_monotonic_ms();
|
||||
uint64_t b = meow_time32_monotonic_ms();
|
||||
check("monotonic nonzero", a > 0, 1);
|
||||
check("monotonic nondecreasing", b >= a, 1);
|
||||
check("ms from parts 1135.008s", meow_time_ms_from_parts(1135, 8000000) == 1135008ULL, 1);
|
||||
|
||||
unsigned long long s0 = now_ms();
|
||||
meow_time32_sleep_us(20000);
|
||||
unsigned long long el = now_ms() - s0;
|
||||
check("sleep 20ms actually sleeps (>=15ms)", el >= 15, 1);
|
||||
}
|
||||
|
||||
/* ---- M40:电源阈值/边沿行为矩阵(settings 取不同值)---- */
|
||||
static void test_power_matrix(void)
|
||||
{
|
||||
unsigned long long lp = 0, fo = 0;
|
||||
|
||||
wd_pwr_resolve_thresholds(0, 0, &lp, &fo);
|
||||
check("pwr default longpress=3000", lp == 3000, 1);
|
||||
check("pwr default forceoff=8000", fo == 8000, 1);
|
||||
|
||||
wd_pwr_resolve_thresholds(1500, 5000, &lp, &fo);
|
||||
check("pwr settings longpress=1500", lp == 1500, 1);
|
||||
check("pwr settings forceoff=5000", fo == 5000, 1);
|
||||
|
||||
wd_pwr_resolve_thresholds(-1, 0, &lp, &fo);
|
||||
check("pwr invalid -> default longpress", lp == 3000, 1);
|
||||
check("pwr invalid -> default forceoff", fo == 8000, 1);
|
||||
|
||||
wd_pwr_resolve_thresholds(3000, 2000, &lp, &fo);
|
||||
check("pwr forceoff<=longpress lifted to lp+1000", fo == 4000, 1);
|
||||
|
||||
/* 松开边沿:单击 / 长按但未到阈值 / 到阈值 / 唤醒 / 菜单已请求 */
|
||||
check("release 100ms screen-on -> toggle off",
|
||||
wd_pwr_release_action(0, 0, 100, 3000, 50) == WD_PWR_REL_TOGGLE_OFF, 1);
|
||||
check("release 100ms screen-off -> toggle on",
|
||||
wd_pwr_release_action(0, 0, 100, 3000, 0) == WD_PWR_REL_TOGGLE_ON, 1);
|
||||
check("release 2500ms (<3000) still click -> toggle off",
|
||||
wd_pwr_release_action(0, 0, 2500, 3000, 50) == WD_PWR_REL_TOGGLE_OFF, 1);
|
||||
check("release 3000ms (>=longpress) -> no toggle",
|
||||
wd_pwr_release_action(0, 0, 3000, 3000, 50) == WD_PWR_REL_NONE, 1);
|
||||
check("release after wake -> no toggle",
|
||||
wd_pwr_release_action(1, 0, 100, 3000, 0) == WD_PWR_REL_NONE, 1);
|
||||
check("release after menu req -> no toggle",
|
||||
wd_pwr_release_action(0, 1, 3500, 3000, 50) == WD_PWR_REL_NONE, 1);
|
||||
|
||||
/* 按住 tick:单击窗 / 长按出菜单 / 强关兜底 / 菜单已接管 / 已强关 */
|
||||
check("tick 2999ms -> none",
|
||||
wd_pwr_tick_action(0, 1, 0, 0, 2999, 3000, 8000) == WD_PWR_TICK_NONE, 1);
|
||||
check("tick 3000ms -> menu",
|
||||
wd_pwr_tick_action(0, 1, 0, 0, 3000, 3000, 8000) == WD_PWR_TICK_MENU, 1);
|
||||
check("tick 8000ms menu requested, no takeover -> forceoff",
|
||||
wd_pwr_tick_action(0, 1, 1, 0, 8000, 3000, 8000) == WD_PWR_TICK_FORCEOFF, 1);
|
||||
check("tick 8000ms launcher menu active -> none",
|
||||
wd_pwr_tick_action(1, 1, 1, 0, 8000, 3000, 8000) == WD_PWR_TICK_NONE, 1);
|
||||
check("tick forceoff already done -> none",
|
||||
wd_pwr_tick_action(0, 1, 1, 1, 9000, 3000, 8000) == WD_PWR_TICK_NONE, 1);
|
||||
check("tick not down -> none",
|
||||
wd_pwr_tick_action(0, 0, 0, 0, 9000, 3000, 8000) == WD_PWR_TICK_NONE, 1);
|
||||
/* settings 取短值:1000/2000 */
|
||||
check("tick custom 1000ms -> menu",
|
||||
wd_pwr_tick_action(0, 1, 0, 0, 1000, 1000, 2000) == WD_PWR_TICK_MENU, 1);
|
||||
check("tick custom 2000ms no takeover -> forceoff",
|
||||
wd_pwr_tick_action(0, 1, 1, 0, 2000, 1000, 2000) == WD_PWR_TICK_FORCEOFF, 1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
signal(SIGUSR1, on_sigusr1); /* 捕获 handle_touch 可能发出的 SIGUSR1(测命中) */
|
||||
@@ -270,6 +349,10 @@ int main(void)
|
||||
test_settings_brightness();
|
||||
test_panel_brightness_e2e();
|
||||
|
||||
/* ---- M40:time32 取时/睡眠 + 电源阈值行为矩阵 ---- */
|
||||
test_time32();
|
||||
test_power_matrix();
|
||||
|
||||
/* 清理 */
|
||||
{
|
||||
char path[560];
|
||||
|
||||
Reference in new issue
Block a user