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
@@ -43,6 +43,7 @@
|
||||
|
||||
#include "meow_ui.h"
|
||||
#include "meow_ui_internal.h"
|
||||
#include "meow_time32.h"
|
||||
|
||||
#if defined(__mips__) && !defined(__mips64) && (__SIZEOF_LONG__ == 4)
|
||||
#define MEOW_TIME32_KERNEL_ABI 1
|
||||
@@ -54,64 +55,11 @@
|
||||
#define MEOW_TIME32_KERNEL_ABI 0
|
||||
#endif
|
||||
|
||||
/* ---- 平台无关的 time64 → 内核 o32 time32 换算(宿主单测直接覆盖)----
|
||||
* 这几个函数不碰系统调用,只为“结构宽度”这件事提供唯一实现;mips 分支的接管入口
|
||||
* 全部经它们转换,宿主 test_meow_time64.c 用同一份代码验边界。 */
|
||||
void meow_time32_rel_from_parts(int64_t sec, int64_t nsec, struct meow_time32 *out)
|
||||
{
|
||||
if (sec > INT32_MAX) sec = INT32_MAX;
|
||||
else if (sec < INT32_MIN) sec = INT32_MIN;
|
||||
out->tv_sec = (int32_t)sec;
|
||||
out->tv_nsec = (int32_t)nsec;
|
||||
}
|
||||
|
||||
int meow_time32_abs_from_parts(int64_t sec, int64_t nsec, struct meow_time32 *out)
|
||||
{
|
||||
if (sec > INT32_MAX || sec < INT32_MIN) return -1;
|
||||
out->tv_sec = (int32_t)sec;
|
||||
out->tv_nsec = (int32_t)nsec;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int meow_time32_itimerspec_from_64(const struct meow_time64_itimerspec *in,
|
||||
struct meow_itimerspec32 *out)
|
||||
{
|
||||
struct meow_itimerspec32 t;
|
||||
if (meow_time32_abs_from_parts(in->it_interval.tv_sec, in->it_interval.tv_nsec,
|
||||
&t.it_interval)) return -1;
|
||||
if (meow_time32_abs_from_parts(in->it_value.tv_sec, in->it_value.tv_nsec,
|
||||
&t.it_value)) return -1;
|
||||
*out = t;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void meow_time64_itimerspec_from_32(const struct meow_itimerspec32 *in,
|
||||
struct meow_time64_itimerspec *out)
|
||||
{
|
||||
out->it_interval.tv_sec = in->it_interval.tv_sec;
|
||||
out->it_interval.tv_nsec = in->it_interval.tv_nsec;
|
||||
out->it_value.tv_sec = in->it_value.tv_sec;
|
||||
out->it_value.tv_nsec = in->it_value.tv_nsec;
|
||||
}
|
||||
|
||||
uint64_t meow_time_ms_from_parts(int64_t sec, int64_t nsec)
|
||||
{
|
||||
return (uint64_t)sec * 1000u + (uint64_t)nsec / 1000000u;
|
||||
}
|
||||
|
||||
/* 换算/取时的唯一实现已抽到 meow_time32.c(不依赖 SDK,系统组件可单独链接)。
|
||||
* 本 TU 只保留「libc 入口接管」与 futex/timerfd/clock_settime 的 time64 修复。 */
|
||||
uint64_t meow_ui_time_ms(void)
|
||||
{
|
||||
#if MEOW_TIME32_KERNEL_ABI
|
||||
struct meow_time32 t;
|
||||
t.tv_sec = 0;
|
||||
t.tv_nsec = 0;
|
||||
if (syscall(SYS_clock_gettime32, CLOCK_MONOTONIC, &t) != 0) return 0;
|
||||
return meow_time_ms_from_parts(t.tv_sec, t.tv_nsec);
|
||||
#else
|
||||
struct timespec ts;
|
||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) return 0;
|
||||
return meow_time_ms_from_parts((int64_t)ts.tv_sec, (int64_t)ts.tv_nsec);
|
||||
#endif
|
||||
return meow_time32_monotonic_ms();
|
||||
}
|
||||
|
||||
#if MEOW_TIME32_KERNEL_ABI
|
||||
@@ -134,9 +82,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts)
|
||||
{
|
||||
struct meow_time32 t;
|
||||
if (!ts) { errno = EFAULT; return -1; }
|
||||
t.tv_sec = 0;
|
||||
t.tv_nsec = 0;
|
||||
if (syscall(SYS_clock_gettime32, clk, &t) != 0) return -1;
|
||||
if (meow_time32_clock_gettime(clk, &t) != 0) return -1;
|
||||
ts->tv_sec = t.tv_sec;
|
||||
ts->tv_nsec = t.tv_nsec;
|
||||
return 0;
|
||||
|
||||
Reference in new issue
Block a user