fix(launcher/amsd): amsd MSG_AMS_START 拉起缺口——pending-start 抽 meow_ams_start 模块复用启动链 + 负错误码符修复
根因(真机日志实证,M2.92 遗留):meow_ams_pending_start_set 误返回正错误码 (-MEOW_ERR_BUSY=+8/-MEOW_ERR_INVAL=+1),ipc_dispatch 的 rc<0?-rc:MEOW_OK 把「有前台 App 拒绝/空包名非法」误判为 OK(0) → amsd 报 OK 但 pending 未置位 → App 永不拉起(am start 报 OK 但界面没出现/进程未起)。 launcher: - 新增自包含模块 meow_ams_start.c/.h(ops 注入 launch=launch_app/launch_activity、 resolve=resolve_chain、log=logmsg):pending 状态 + 拉起决策 + picker 上下文。 - set 统一返回负 MEOW_ERR_*(根因修复);consume 复用既有启动链路真正拉起目标 App, 列表未就绪(state!=0)保留 pending 待 2s 重扫重试,不再静默丢弃。 - main_menu run_menu 改经 meow_ams_start_consume 消费(保留 launch_fail_toast/菜单收尾); app_launcher 移除旧 g_ams_start/g_ams_pick_* 迁入模块;util meow_ipc_process 顶部同步 busy、 meow_ipc_init 末尾 meow_ams_launcher_init()。 - build_launcher.sh 编入 meow_ams_start.c;meow_launcher_internal.h 更新挂点声明。 amsd(协议层归属说明):cmd_start 的 busy 判定对照 launcher ACK 正幅度(busy=8), 原 (uint32_t)MEOW_ERR_BUSY=0xFFFFFFF8 永不匹配 → busy 落入 launcher offline,改 (uint32_t)(-MEOW_ERR_BUSY)。 验证:宿主 test_ams_start.c 33 断言全 PASS(合法->拉起链、activity chain 透传、空包名/非法/busy 不拉起不崩、列表未就绪保留 pending、无路由 NO ROUTE、启动失败 idx 回报、picker 取回); launcher 目录全量回归 test_media/bgplay/depends/notif_panel/notif_tf/settings_brightness/ vol_ramp_jack/host_icon + test_font_tier/weight 全 PASS;mipsel -Wall -Wextra 0 warning。 新 md5:meow_launcherd a8200ae1b0aa68d7262749db87377d49、meow_amsd 7ddc677ce7938bc9b95c83c17bc78295。(M2.98 待打包,未刷机)
This commit is contained in:
1 parent
7e7e45ae26
commit
980d161972
13 files changed
+446
-101
No files matched your search
@@ -670,16 +670,23 @@ void meow_nav_exit(void); /* 清栈(应用退出/EXIT) */
|
||||
void meow_nav_request_exit(void); /* MSG_NAV{EXIT}:置位让前台 waitpid 循环终止 app */
|
||||
int meow_nav_exit_pending(void); /* 读取并清除退出请求(前台 launch_* 循环轮询) */
|
||||
/* ---- amsd 控制挂点(AMSD_DESIGN §4.3 / §6.2 二期):主循环单写者,跨模块声明 ----
|
||||
* pending-start/kill 仅在主循环上下文写入与消费(ipc_dispatch 写、run_menu 前台循环/菜单循环读)。 */
|
||||
int meow_ams_pending_start_set(const char *pkg, const char *act); /* 有前台 App 时拒绝(返回 -MEOW_ERR_BUSY) */
|
||||
int meow_ams_take_start(char *pkg, int pn, char *act, int an); /* 1=取到待拉起 App(清位);0=无 */
|
||||
* pending-start 状态/拉起决策在 meow_ams_start.c(自包含、可单测,见 meow_ams_start.h);
|
||||
* pending-kill 在 app_launcher.c。仅在主循环上下文写入与消费(ipc_dispatch 写、
|
||||
* run_menu 前台循环/菜单循环读)。 */
|
||||
void meow_ams_pending_kill_set(const char *pkg); /* 请求终止某 pkg */
|
||||
int meow_ams_kill_pending(const char *pkg); /* 匹配则清除并返回 1(前台循环轮询) */
|
||||
/* §6.2 二期:带 picker 上下文的 pending-start(amsd `am picker` 经 MSG_AMS_START 扩载荷)。
|
||||
* pick_action 非空 → launch_app_chain 注入 MEOW_PICKER_ACTION/REQ_ID/CALLER 到子进程。 */
|
||||
int meow_ams_pending_start_set_ex(const char *pkg, const char *act,
|
||||
const char *pick_action, uint32_t pick_req,
|
||||
const char *pick_caller);
|
||||
/* run_menu 消费 pending-start:复用 launch_app/launch_activity 链真正拉起目标 App。
|
||||
* 返回 0=无 pending/busy;1=已消费(拉起成功/拒绝);2=列表未就绪(pending 保留待重扫)。
|
||||
* app_ran=1=app 已运行(据以设 touch 冷却);idx_out>=0 且 app_ran=0 → 启动失败,打 launch_fail_toast。 */
|
||||
int meow_ams_start_consume(const char *const *ids, int napps, int state,
|
||||
char *toast, int toast_len, int *app_ran, int *idx_out);
|
||||
/* launch_app_chain 入口拾取 picker 上下文(一次性清位)。 */
|
||||
int meow_ams_take_picker(char *action, int action_len,
|
||||
char *caller, int caller_len, uint32_t *req);
|
||||
/* 组装 amsd-start ops(生产=launch_app/launch_activity+resolve_chain+logmsg;meow_ipc_init 末尾调)。 */
|
||||
void meow_ams_launcher_init(void);
|
||||
/* 供 run_menu/idle 挂当前 apps[] 上下文(ops.launch 的 idx→app 映射用)。 */
|
||||
void meow_ams_ctx_set(struct app *apps, int napps);
|
||||
/* §6.2 二期:amsd 上报通道(best-effort,app_launcher.c 的 ams_send 公开包装)。
|
||||
* util.c 转发运行时 declare 与 picker call/result 给 amsd 用。 */
|
||||
void meow_ams_send(const char *payload, int len);
|
||||
|
||||
Reference in new issue
Block a user