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
@@ -169,6 +169,12 @@ unsigned long long meow_gfx_overlay_suppressed_count(void);
|
||||
* 系统 UI(launcher)恒 0;200ms 节流缓存。meow_ui_gfx.c 实现,input 层复用。 */
|
||||
int meow_ui_overlay_suppressed_active(void);
|
||||
|
||||
/* M40 F5/P5-P6:解锁后强制 App 整帧重画。launcher 在 SIGCONT 前写请求文件;present 层
|
||||
* 调用 meow_ui_repaint_requested():文件存在 → 删除并返回 1(调用方 dirty_full 一次)。
|
||||
* 抑制期也消费(dirty_full 保留到标记翻回前台后的下一帧)。实现见 meow_ui_repaint.h
|
||||
* (static inline,宿主单测只 include 头即可,不必链接渲染栈)。 */
|
||||
#include "meow_ui_repaint.h"
|
||||
|
||||
/* 中文/日文字库(mfont)是否已加载(状态栏「蓝牙」CJK 与回退 "BT" 二选一)。 */
|
||||
int meow_gfx_mfont_ready(void);
|
||||
|
||||
@@ -300,42 +306,9 @@ int meow_ime_handle_event(const meow_input_ev *e);
|
||||
/* 当前 IME 是否拼音模式(供 meow_ui_input.c 决定是否喂长按轮询)。 */
|
||||
int meow_ime_mode_pinyin(void);
|
||||
|
||||
/* ---- 时钟(meow_ui_time.c)---- */
|
||||
/* 秒/纳秒 → 单调毫秒的唯一换算点(meow_ui_time_ms 与宿主单测共用)。 */
|
||||
uint64_t meow_time_ms_from_parts(int64_t sec, int64_t nsec);
|
||||
|
||||
/* ---- mipsel o32 的 time32 结构(内核布局,与 libc 头的 time_t 宽度无关)----
|
||||
* 背景:zig clang 给 32 位目标预定义 __ILP32__,打穿 musl 的 time64 回退守卫,
|
||||
* 一批封装把 16 字节 time64 结构直接交给 time32 系统调用(CLOCK_ABI.md §6)。
|
||||
* 接管这些入口时统一走下面这几个纯转换函数——它们不依赖平台,宿主单测直接覆盖。 */
|
||||
struct meow_time32 {
|
||||
int32_t tv_sec;
|
||||
int32_t tv_nsec;
|
||||
};
|
||||
struct meow_itimerspec32 {
|
||||
struct meow_time32 it_interval;
|
||||
struct meow_time32 it_value;
|
||||
};
|
||||
/* 与 libc 结构解耦的 64 位镜像(避免宿主/交叉两端 time_t 宽度差异进测试)。 */
|
||||
struct meow_time64_spec {
|
||||
int64_t tv_sec;
|
||||
int64_t tv_nsec;
|
||||
};
|
||||
struct meow_time64_itimerspec {
|
||||
struct meow_time64_spec it_interval;
|
||||
struct meow_time64_spec it_value;
|
||||
};
|
||||
|
||||
/* 相对超时(futex / poll / select 的「等多久」):sec 超出 int32 时饱和
|
||||
* (正→INT32_MAX、负→INT32_MIN,与 musl CLAMP 一致),nsec 原样。 */
|
||||
void meow_time32_rel_from_parts(int64_t sec, int64_t nsec, struct meow_time32 *out);
|
||||
/* 绝对时刻(clock_settime / timerfd / utimensat):sec 落不进 int32 返回 -1
|
||||
* (调用方回 ENOTSUP,与 musl time64 路径的判定一致),nsec 原样。 */
|
||||
int meow_time32_abs_from_parts(int64_t sec, int64_t nsec, struct meow_time32 *out);
|
||||
/* itimerspec(timerfd / POSIX timer)转换;任一侧越界返回 -1 且 *out 不变。 */
|
||||
int meow_time32_itimerspec_from_64(const struct meow_time64_itimerspec *in,
|
||||
struct meow_itimerspec32 *out);
|
||||
void meow_time64_itimerspec_from_32(const struct meow_itimerspec32 *in,
|
||||
struct meow_time64_itimerspec *out);
|
||||
/* ---- 时钟(meow_ui_time.c + meow_time32.c)----
|
||||
* 换算/内核 time32 取时/睡眠的唯一实现在 meow_time32.c(独立 TU,系统组件可单独链接);
|
||||
* 本头只把它带进来,SDK 内部仍按原名字使用。 */
|
||||
#include "meow_time32.h"
|
||||
|
||||
#endif /* MEOW_UI_INTERNAL_H */
|
||||
Reference in new issue
Block a user