From 23727cf400c7c24aecfbe634ce060c739388d036 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Sun, 30 Aug 2026 23:16:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E7=B3=BB=E7=BB=9F=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E4=B8=80=E6=9C=9F=20=E2=80=94=20=E4=B8=93=E9=A1=B9?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1(=E6=80=A7=E8=83=BD/=E7=94=B5=E6=BA=90)+IPC+?= =?UTF-8?q?=E7=94=B5=E6=BA=90CLI+=E7=94=B5=E8=8F=9C=E5=8D=95=E6=94=B9?= =?UTF-8?q?=E7=BB=8F=E6=9C=8D=E5=8A=A1(agent-155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - meow_svc_power: 单一二进制(svcd空参IPC常驻 /usr/data/meow_power.sock + root CLI免鉴权), 12命令(shutdown/reboot强制=0/upgrade/set-default-hiby/reboot--hiby + set-default-meow/status/screen/dac(status仅)/battery/reboot-reason/upgrade-status); 动作同源sys_do_reboot/set_boot_default_hiby/mtd5=ota:kernel2; dac on/off无控制点不支持 - meow_svc_perf: IPC(/usr/data/meow_perf.sock MSG_PERF_*) + CLI, 聚合/proc/df/thermal/version/uname JSON(与MEOWPANEL_PROTOCOL对齐) - power_menu.c 改经 meow_power_action(launcher先转储再IPC), 删sys_do_reboot/set_boot_default_hiby; 4动作+8s强关+confirm_reboot_player+3处长按强关全经服务; launcher内 sys_do_reboot/bootmode.sh/set_boot_default_hiby 0调用 - meow_ipc.h 仅加 MSG_PERF_QUERY/RESULT(0x50/51)+MSG_POWER_ACTION/STATUS(0x60/61)+POWER_*(12)+m_perf/power_t; 未动既有 - S89meow_svcd 预置 meow_svc_perf/power.conf(trigger=boot); 各独立socket - IPC鉴权一期=SO_PEERCRED uid==0基础(完整os.meow.*二期); 通知转储=launcher先转储再IPC(二期补launcher→服务通道); 失败安全(服务不可达→按取消,不静默不直连) - meow_svc_power=32d6be92/meow_svc_perf=7b0f3b64/launcher=d90f09e9/svcd=fb2d608b(未动)/meow_ui.a=92e61fb8(未改); 全0warning; 备份power_menu.c.pre-svc.bak回退 --- patch_v2/meow_launcherd/main_menu.c | 2 +- patch_v2/meow_launcherd/meow_ipc.h | 56 ++ .../meow_launcherd/meow_launcher_internal.h | 4 +- patch_v2/meow_launcherd/meow_launcherd | Bin 509196 -> 510732 bytes patch_v2/meow_launcherd/notif_center.c | 2 +- patch_v2/meow_launcherd/power_menu.c | 165 +++- patch_v2/meow_launcherd/settings_page.c | 2 +- patch_v2/meow_svc_perf/build_svc_perf.sh | 29 + patch_v2/meow_svc_perf/meow_svc_perf | Bin 0 -> 111324 bytes patch_v2/meow_svc_perf/meow_svc_perf.c | 523 ++++++++++++ patch_v2/meow_svc_perf/meow_svc_perf_host | Bin 0 -> 73616 bytes patch_v2/meow_svc_power/build_svc_power.sh | 29 + patch_v2/meow_svc_power/meow_svc_power | Bin 0 -> 93900 bytes patch_v2/meow_svc_power/meow_svc_power.c | 745 ++++++++++++++++++ patch_v2/meow_svc_power/meow_svc_power_host | Bin 0 -> 73736 bytes patch_v2/meow_svcd/S89meow_svcd | 43 +- 16 files changed, 1559 insertions(+), 41 deletions(-) create mode 100755 patch_v2/meow_svc_perf/build_svc_perf.sh create mode 100755 patch_v2/meow_svc_perf/meow_svc_perf create mode 100644 patch_v2/meow_svc_perf/meow_svc_perf.c create mode 100755 patch_v2/meow_svc_perf/meow_svc_perf_host create mode 100755 patch_v2/meow_svc_power/build_svc_power.sh create mode 100755 patch_v2/meow_svc_power/meow_svc_power create mode 100644 patch_v2/meow_svc_power/meow_svc_power.c create mode 100755 patch_v2/meow_svc_power/meow_svc_power_host diff --git a/patch_v2/meow_launcherd/main_menu.c b/patch_v2/meow_launcherd/main_menu.c index 58e8e42..054b54c 100644 --- a/patch_v2/meow_launcherd/main_menu.c +++ b/patch_v2/meow_launcherd/main_menu.c @@ -555,7 +555,7 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, * M2.37:阈值接 power.forceoff_ms(默认 8000),强关保持 > 弹菜单上限。 */ if (t - pwr_hold_at >= power_forceoff_ms && !pwr_menu_state) { if (sim_no_exec) { logmsg("pm: [sim-no-exec] POWER HOLD %dms -> would force poweroff", power_forceoff_ms); } - else { logmsg("pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); sys_do_reboot(LINUX_REBOOT_CMD_POWER_OFF); } + else { logmsg("pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); meow_power_action(POWER_SHUTDOWN); } m_prev_pwr = pwr; continue; } else if (t - pwr_hold_at >= power_longpress_menu_ms && !pwr_menu_state) { pwr_menu_state = 1; diff --git a/patch_v2/meow_launcherd/meow_ipc.h b/patch_v2/meow_launcherd/meow_ipc.h index c60a4eb..adc337f 100644 --- a/patch_v2/meow_launcherd/meow_ipc.h +++ b/patch_v2/meow_launcherd/meow_ipc.h @@ -52,6 +52,10 @@ enum { MSG_ACT_BACK = 0x0034, /* ↑ 上报回到根/无 activity(清 keep_awake,M2.17) */ MSG_NAV = 0x0040, /* ↑ 上报导航/请求退出 */ MSG_SHOW_ACTIVITY= 0x0041, /* ↓ 令前端应用显示某屏 */ + MSG_PERF_QUERY = 0x0050, /* ↑ 性能/系统聚合查询(专项服务 meow_svc_perf) */ + MSG_PERF_RESULT = 0x0051, /* ↓ 聚合 JSON(perf/system 子集) */ + MSG_POWER_ACTION = 0x0060, /* ↑ 电源/系统动作信号(专项服务 meow_svc_power) */ + MSG_POWER_STATUS = 0x0061, /* ↓ 动作受理/结果 + 状态文本 */ MSG_SYS = 0x00F0 /* ↓ 系统事件(守护关闭/服务死亡/播放器状态) */ }; @@ -165,4 +169,56 @@ typedef struct m_notify_progress { int32_t progress; /* 0-100;<0=清除进度条 */ } m_notify_progress_t; /* 8 B */ +/* ================= 专项服务 IPC(SYSTEM_FRAMEWORK_SERVICES §2.2/§2.3)= */ + +/* ---- MSG_PERF_QUERY 子集位(0=全部)---- */ +#define PERF_SUBSET_PERF (1u << 0) /* cpu/mem/uptime/temp/storage/tfcard */ +#define PERF_SUBSET_SYSTEM (1u << 1) /* system(version/hostname/kernel/arch) */ + +/* MSG_PERF_QUERY ↑:性能/系统聚合查询(服务端 meow_svc_perf) */ +typedef struct m_perf_query { + uint32_t subset; /* 0=全部;PERF_SUBSET_* 组合 */ +} m_perf_query_t; /* 4 B */ + +/* MSG_PERF_RESULT ↓:聚合 JSON(payload 为 NUL 结尾 JSON 文本) */ +typedef struct m_perf_result { + uint32_t code; /* MEOW_OK / MEOW_ERR_* */ + uint32_t subset; /* 回显请求 subset */ + uint16_t json_len; /* json 有效字节(不含 NUL) */ + uint16_t pad; + char json[MEOW_IPC_MAX - 12]; /* 聚合 JSON(.data 形状,§2.2) */ +} m_perf_result_t; + +/* ---- POWER_* 动作枚举(m_power_action_t.cmd;与 CLI §2.4 同源)---- */ +enum { + POWER_SHUTDOWN = 0, /* 关机 */ + POWER_REBOOT = 1, /* 重启回 MeowOS(强制写 boot_default=0) */ + POWER_UPGRADE = 2, /* 写 mtd5=ota:kernel2 进升级模式 */ + POWER_BACK_HIBY = 3, /* 写 boot_default=1 + reboot(回 HiBy) */ + POWER_SET_DEFAULT_MEOW = 4, /* 只写 boot_default=0,不重启 */ + POWER_SET_DEFAULT_HIBY = 5, /* 只写 boot_default=1,不重启 */ + POWER_STATUS = 6, /* 综合状态查询 */ + POWER_BATTERY = 7, /* 电池查询 */ + POWER_REBOOT_REASON = 8, /* 上次重启原因 */ + POWER_UPGRADE_STATUS = 9, /* 升级标志(mtd5=ota:kernel2?) */ + POWER_SCREEN = 10, /* 屏幕电源:flag 0=off/1=on/2=timeout(秒取 arg) */ + POWER_DAC = 11 /* DAC:flag 0=off/1=on/2=status */ +}; + +/* MSG_POWER_ACTION ↑:电源/系统动作信号(服务端 meow_svc_power) */ +typedef struct m_power_action { + uint32_t cmd; /* POWER_* 枚举 */ + uint32_t flag; /* 随 cmd;POWER_SCREEN/DAC 用 */ + char arg[32]; /* 可选文本参数(如 screen timeout 秒数字符串) */ +} m_power_action_t; /* 40 B */ + +/* MSG_POWER_STATUS ↓:动作受理/结果 + 状态文本(CLI/IPC 展示) */ +typedef struct m_power_status { + uint32_t code; /* MEOW_OK / MEOW_ERR_PERM / MEOW_ERR_INVAL / MEOW_ERR_NODEV */ + uint32_t cmd; /* 回显 cmd */ + uint16_t msg_len; /* msg 有效字节(不含 NUL) */ + uint16_t pad; + char msg[96]; /* 结果/状态文本 */ +} m_power_status_t; + #endif /* MEOW_IPC_H */ diff --git a/patch_v2/meow_launcherd/meow_launcher_internal.h b/patch_v2/meow_launcherd/meow_launcher_internal.h index 80e01ab..d724470 100644 --- a/patch_v2/meow_launcherd/meow_launcher_internal.h +++ b/patch_v2/meow_launcherd/meow_launcher_internal.h @@ -624,7 +624,9 @@ void settings_volume_adj(int delta); int settings_volume_get(void); int show_power_menu(void); int stop_player(void); -void sys_do_reboot(int cmd); +/* 电源管理服务 IPC(SYSTEM_FRAMEWORK_SERVICES §3.2:launcher 电源动作经 meow_svc_power 执行) */ +int pm_power_ipc(uint32_t cmd, uint32_t flag, const char *arg, char *res, int reslen); +int meow_power_action(uint32_t cmd); void ui_draw(int x, int y, const char *s, uint32_t color, int size); int ui_width(const char *s, int size); void unblank_panel(void); diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index 1b40fe4d9ab8d4e9bc980b003cd64b7e0436b31f..4a5ee3147510143411dc7e8d7db14cb231f1c015 100755 GIT binary patch delta 161969 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

0&kr-eJA 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 delta 161039 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͔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 diff --git a/patch_v2/meow_launcherd/notif_center.c b/patch_v2/meow_launcherd/notif_center.c index 817fb5b..4ae1d35 100644 --- a/patch_v2/meow_launcherd/notif_center.c +++ b/patch_v2/meow_launcherd/notif_center.c @@ -930,7 +930,7 @@ void run_notif_center(struct app *apps, int napps, int *want_launch, if (pwr && pwr_hold_at) { if (now - pwr_hold_at >= power_forceoff_ms && !pwr_menu_state) { if (sim_no_exec) logmsg("notif-center pm: [sim-no-exec] hold %dms -> would forceoff", power_forceoff_ms); - else { logmsg("notif-center pm: hold %dms -> force poweroff", power_forceoff_ms); sys_do_reboot(LINUX_REBOOT_CMD_POWER_OFF); } + else { logmsg("notif-center pm: hold %dms -> force poweroff", power_forceoff_ms); meow_power_action(POWER_SHUTDOWN); } } else if (now - pwr_hold_at >= power_longpress_menu_ms && !pwr_menu_state) { pwr_menu_state = 1; logmsg("notif-center pm: hold %dms -> power menu", power_longpress_menu_ms); diff --git a/patch_v2/meow_launcherd/power_menu.c b/patch_v2/meow_launcherd/power_menu.c index bbe21ce..e9da6aa 100644 --- a/patch_v2/meow_launcherd/power_menu.c +++ b/patch_v2/meow_launcherd/power_menu.c @@ -70,25 +70,102 @@ static void draw_pm_button(int i, int selected) } } -void sys_do_reboot(int cmd) +/* ---- 电源管理服务 IPC 客户端(SYSTEM_FRAMEWORK_SERVICES §3.2:launcher 经服务触发电源动作)---- + * launcher 不再直连 reboot(2)syscall/写 mtd5/写 boot 默认 —— 统一经 meow_svc_power 的 + * `/usr/data/meow_power.sock`(`MEOW_IPC_POWER_SOCK` 可覆盖)发 MSG_POWER_ACTION。 */ +#define PW_SOCK_DEFAULT "/usr/data/meow_power.sock" + +static int pw_write_all(int fd, const uint8_t *b, size_t n) { - /* M2a:正常电源事件(关机/重启)触发清除板载通知数据之前,先转储所有未上卡通知 - * (NOTIFICATION_SYSTEM.md §8)。meow_notif_before_poweroff 幂等安全(未 init 直接返回)。 */ - meow_notif_before_poweroff(); - sync(); /* 先落盘,避免数据丢失 */ - logmsg("sys_do_reboot cmd=0x%x", cmd); - syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, NULL); - logmsg("sys_do_reboot returned: %s", strerror(errno)); /* 正常不会返回 */ - for (;;) usleep(1000); /* 防御:永不返回 */ + size_t off = 0; + while (off < n) { ssize_t w = write(fd, b + off, n - off); if (w <= 0) return -1; off += (size_t)w; } + return 0; +} +static int pw_read_all(int fd, uint8_t *b, size_t n) +{ + size_t off = 0; + while (off < n) { ssize_t r = read(fd, b + off, n - off); if (r <= 0) return -1; off += (size_t)r; } + return 0; +} +/* 发一帧并等应答(读超时 1.5s,服务不可达/无响应不至于卡死菜单)。 */ +static int pw_xchg(int fd, uint16_t type, uint32_t req, const void *pl, uint32_t len, + uint8_t *rbuf, uint32_t rcap, uint16_t *rtype) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC, rlen = len; + uint16_t ver = MEOW_IPC_VERSION, t = type; + memcpy(hdr + 0, &magic, 4); memcpy(hdr + 4, &ver, 2); memcpy(hdr + 6, &t, 2); + memcpy(hdr + 8, &req, 4); memcpy(hdr + 12, &rlen, 4); + if (pw_write_all(fd, hdr, sizeof hdr) < 0) return -1; + if (len && pl && pw_write_all(fd, pl, len) < 0) return -1; + struct pollfd pf = { fd, POLLIN, 0 }; + int pr = poll(&pf, 1, 1500); + if (pr <= 0) return -1; + uint8_t rhdr[MEOW_IPC_HDR_LEN]; + if (pw_read_all(fd, rhdr, sizeof rhdr) < 0) return -1; + uint32_t rmagic, rlen2; uint16_t rver, rt; + memcpy(&rmagic, rhdr, 4); memcpy(&rver, rhdr + 4, 2); memcpy(&rt, rhdr + 6, 2); + memcpy(&rlen2, rhdr + 12, 4); + if (rmagic != MEOW_IPC_MAGIC || rver != MEOW_IPC_VERSION) return -1; + if (rlen2 > rcap) rlen2 = rcap; + if (rlen2 && pw_read_all(fd, rbuf, rlen2) < 0) return -1; + if (rtype) *rtype = rt; + return 0; } - -/* 回HibyOS:写板载 /data/meow_boot_default=1(开机默认权威标记,O_TRUNC 单值、不写 TF 卡), - * 再 reboot 回选单并默认 HibyOS。meow.conf 不再写/承载 boot_default(bootmenu 以板载标记为准)。 */ -static void set_boot_default_hiby(void) +/* 经电源服务执行动作。返回 MEOW_OK 或错误码;res/reslen 可收状态文本。 */ +int pm_power_ipc(uint32_t cmd, uint32_t flag, const char *arg, char *res, int reslen) { - int fd = open("/data/meow_boot_default", O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd >= 0) { write(fd, "1\n", 2); close(fd); logmsg("pm: /data/meow_boot_default=1"); } + const char *sock = getenv("MEOW_IPC_POWER_SOCK"); + if (!sock || !sock[0]) sock = PW_SOCK_DEFAULT; + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) return MEOW_ERR_IO; + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, sock, sizeof a.sun_path - 1); + if (connect(fd, (struct sockaddr *)&a, sizeof a) < 0) { close(fd); return MEOW_ERR_IO; } + m_hello_t h; + memset(&h, 0, sizeof h); + snprintf(h.app_id, sizeof h.app_id, "%s", "os.meow.launcher"); + h.version = 1; + uint8_t rbuf[256]; uint16_t rtype = 0; + if (pw_xchg(fd, MSG_HELLO, 0x100, &h, sizeof h, rbuf, sizeof rbuf, &rtype) < 0 || rtype != MSG_ACK) { + close(fd); return MEOW_ERR_IO; + } + m_ack_t ak; + memcpy(&ak, rbuf, sizeof ak); + if (ak.code != MEOW_OK) { close(fd); return (int)ak.code; } + m_power_action_t pa; + memset(&pa, 0, sizeof pa); + pa.cmd = cmd; + pa.flag = flag; + if (arg) snprintf(pa.arg, sizeof pa.arg, "%s", arg); + if (pw_xchg(fd, MSG_POWER_ACTION, 0x101, &pa, sizeof pa, rbuf, sizeof rbuf, &rtype) < 0 || rtype != MSG_POWER_STATUS) { + close(fd); return MEOW_ERR_IO; + } + m_power_status_t st; + memcpy(&st, rbuf, sizeof st); + close(fd); + if (res && reslen > 0) { + uint16_t ml = st.msg_len; + if (ml >= (uint16_t)reslen) ml = (uint16_t)(reslen - 1); + memcpy(res, st.msg, ml); + res[ml] = 0; + } + return (int)st.code; +} + +/* launcher 侧统一电源动作入口:先转储未上卡通知(进程本地,见 §3.2 定案),再经服务 IPC 执行。 + * 返回 MEOW_OK=已受理(服务将执行,通常随即 reboot/poweroff);非 OK=服务不可达/拒绝,调用方应 + * 稳妥处理(如菜单按「取消」返回,绝不误报动作成功导致 launcher 退出卡死)。 */ +int meow_power_action(uint32_t cmd) +{ + meow_notif_before_poweroff(); /* 幂等安全(未 init 直接返回) */ + int rc = pm_power_ipc(cmd, 0, NULL, NULL, 0); + if (rc != MEOW_OK) + logmsg("meow_power_action cmd=%u FAILED rc=%d (power service unavailable?)", cmd, rc); + return rc; } @@ -225,8 +302,12 @@ int show_power_menu(void) /* 8s 强关(绕过):仅当电源持续按住、且用户全程未与菜单互动才触发 —— 放在触摸/按键处理 * 之后,避免「用户已点选按钮」的同一轮被强关抢先(M2.10 Bug)。 */ if (pwr && !pm_interacted && now_ms() - pm_t0 >= 5000) { - if (sim_no_exec) { logmsg("pm: [sim-no-exec] POWER HOLD 8s -> would force poweroff"); } - else { logmsg("pm: POWER HOLD 8s -> force poweroff"); sys_do_reboot(LINUX_REBOOT_CMD_POWER_OFF); } + if (sim_no_exec) { logmsg("pm: [sim-no-exec] POWER HOLD 8s -> would force poweroff"); return 1; } + logmsg("pm: POWER HOLD 8s -> force poweroff"); + if (meow_power_action(POWER_SHUTDOWN) != MEOW_OK) { + logmsg("pm: power service unavailable, abort force-off (menu closed, no action)"); + return 0; + } return 1; } @@ -247,35 +328,44 @@ int show_power_menu(void) } if (tfd >= 0) close(tfd); - /* M2.11 B:电源键在菜单 = 按当前项确认。act 与 syscall 类型逐项核对: - * act==4(取消) -> 只关菜单,绝不关机(return 0,永不到 reboot); - * act==0(关机) -> 才 poweroff;act==1(重启)/act==2(回HibyOS)/act==3(升级模式) -> 才 reboot。 - * 只有 act 为 0/1/2/3 才可能执行 sys_do_reboot;power 键本身绝不触发关机。 */ + /* M2.11 B:电源键在菜单 = 按当前项确认。act 与电源动作逐项核对: + * act==4(取消) -> 只关菜单,绝不关机(return 0,永不到电源动作); + * act==0(关机)/act==1(重启)/act==2(回HibyOS)/act==3(升级模式) -> 才经服务 IPC 执行电源动作。 + * 只有 act 为 0/1/2/3 才可能发电源动作;power 键本身绝不触发关机。 */ logmsg("pm: act=%d -> %s", act, act == 0 ? "关机" : act == 1 ? "重启" : act == 2 ? "回HibyOS" : act == 3 ? "升级模式" : "取消"); if (act == 4) { logmsg("pm: cancel (close menu only)"); return 0; } + /* 动作统一经电源管理服务 IPC(meow_svc_power);launcher 不再直连 poweroff/reboot(2)/写 mtd5/ + * 写 boot 默认——关机/重启/升级/回HiBy 的动作原语都在服务内实现(§3.2 单一动作链路)。 */ + /* 公共服务:执行动作;服务不可达 → 按「取消」返回(launcher 存活,绝不误报已动作卡死)。 + * meow_power_action 内部已先 meow_notif_before_poweroff()(转储未上卡通知)。 */ if (act == 0) { logmsg("pm: POWER OFF"); - if (!sim_no_exec) { - /* 先显关机 logo(cmd_jpeg_display 是独立二进制,能正常显图),再直连 poweroff */ - system("PATH=/bin:/sbin:/usr/bin:/usr/sbin cmd_jpeg_display /etc/shutdown_logo.jpeg >/dev/null 2>&1"); - sys_do_reboot(LINUX_REBOOT_CMD_POWER_OFF); + if (sim_no_exec) { logmsg("pm: [sim-no-exec] would poweroff"); return 1; } + if (meow_power_action(POWER_SHUTDOWN) != MEOW_OK) { + logmsg("pm: power service unavailable, abort (menu closed, no action)"); + return 0; } } else if (act == 1) { logmsg("pm: REBOOT"); - if (!sim_no_exec) sys_do_reboot(LINUX_REBOOT_CMD_RESTART); + if (sim_no_exec) { logmsg("pm: [sim-no-exec] would reboot"); return 1; } + if (meow_power_action(POWER_REBOOT) != MEOW_OK) { + logmsg("pm: power service unavailable, abort (menu closed, no action)"); + return 0; + } } else if (act == 2) { logmsg("pm: RETURN TO HIBYOS"); - set_boot_default_hiby(); - if (!sim_no_exec) sys_do_reboot(LINUX_REBOOT_CMD_RESTART); + if (sim_no_exec) { logmsg("pm: [sim-no-exec] would reboot to hiby"); return 1; } + if (meow_power_action(POWER_BACK_HIBY) != MEOW_OK) { + logmsg("pm: power service unavailable, abort (menu closed, no action)"); + return 0; + } } else if (act == 3) { - /* M2.29 升级模式:写 mtd5=ota:kernel2(bootmode.sh Recovery = flash_erase + nandwrite) - * 再 reboot —— uboot 读 mtd5=ota:kernel2 引导 kernel2(升级模式,自动刷 TF 卡 - * r3proii.upt,双进度条,跑完重启进新固件)。已验证此链路可靠。 */ logmsg("pm: ENTER UPGRADE"); - if (!sim_no_exec) { - system("PATH=/bin:/sbin:/usr/bin:/usr/sbin /usr/bin/bootmode.sh Recovery >/dev/null 2>&1"); - sys_do_reboot(LINUX_REBOOT_CMD_RESTART); + if (sim_no_exec) { logmsg("pm: [sim-no-exec] would enter upgrade"); return 1; } + if (meow_power_action(POWER_UPGRADE) != MEOW_OK) { + logmsg("pm: power service unavailable, abort (menu closed, no action)"); + return 0; } } return 1; @@ -396,8 +486,11 @@ int confirm_reboot_player(void) if (tfd >= 0) close(tfd); if (act == 0) { logmsg("reboot-to-player: YES -> default HibyOS + reboot"); - set_boot_default_hiby(); - if (!sim_no_exec) sys_do_reboot(LINUX_REBOOT_CMD_RESTART); + if (sim_no_exec) { logmsg("reboot-to-player: [sim-no-exec] would reboot to hiby"); return 1; } + if (meow_power_action(POWER_BACK_HIBY) != MEOW_OK) { + logmsg("reboot-to-player: power service unavailable, abort (stay in MeowOS)"); + return 0; + } return 1; } logmsg("reboot-to-player: cancel"); diff --git a/patch_v2/meow_launcherd/settings_page.c b/patch_v2/meow_launcherd/settings_page.c index a1e99f7..37f77f2 100644 --- a/patch_v2/meow_launcherd/settings_page.c +++ b/patch_v2/meow_launcherd/settings_page.c @@ -1045,7 +1045,7 @@ void run_settings_page(void) * 时触发;开过菜单则交给菜单内确认/取消,杜绝「开菜单->取消->仍按住->强关」残留。 */ if (now - pwr_hold_at >= power_forceoff_ms && !pwr_menu_state) { if (sim_no_exec) { logmsg("settings pm: [sim-no-exec] POWER HOLD %dms -> would force poweroff", power_forceoff_ms); } - else { logmsg("settings pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); sys_do_reboot(LINUX_REBOOT_CMD_POWER_OFF); } + else { logmsg("settings pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); meow_power_action(POWER_SHUTDOWN); } /* 关机一般不复返;若 reboot 失败返回仍按按住处理(m_prev 由下方统一复写) */ } else if (now - pwr_hold_at >= power_longpress_menu_ms && !pwr_menu_state) { pwr_menu_state = 1; diff --git a/patch_v2/meow_svc_perf/build_svc_perf.sh b/patch_v2/meow_svc_perf/build_svc_perf.sh new file mode 100755 index 0000000..703a888 --- /dev/null +++ b/patch_v2/meow_svc_perf/build_svc_perf.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# build_svc_perf.sh — meow_svc_perf 交叉编译(mipsel 静态)+ 宿主编译可选。 +# +# 目标:R3 Pro II / MeowOS(mipsel-linux-muslsf,静态)。性能服务仅 POSIX + Linux 基接口 +# (复用 meow_ipc.h 帧格式,无 launcher 依赖),单文件满足「固件内、不入卡」(<200KB 阈值)。 +# +# 用法: +# ./build_svc_perf.sh # 交叉编译 → patch_v2/meow_svc_perf/meow_svc_perf(mipsel 静态) +# ./build_svc_perf.sh host # 宿主编译 → patch_v2/meow_svc_perf/meow_svc_perf_host +set -e +cd "$(dirname "$0")" +ROOT="$HOME/Project/R3ProII" +CC="$ROOT/.tools/zig-mipsel-cc" +I_HDR="$ROOT/patch_v2/meow_launcherd" # meow_ipc.h(帧/m_perf_query_t/m_perf_result_t) + +if [ "$1" = "host" ]; then + HOST_CC="${CC_HOST:-cc}" + "$HOST_CC" -Os -Wall -Wextra -I"$I_HDR" meow_svc_perf.c -o meow_svc_perf_host + echo "== host build ==" + ls -la meow_svc_perf_host + file meow_svc_perf_host + exit 0 +fi + +"$CC" -Os -Wall -Wextra -static -I"$I_HDR" meow_svc_perf.c -o meow_svc_perf +echo "== meow_svc_perf (mipsel static) ==" +ls -la meow_svc_perf +md5sum meow_svc_perf +file meow_svc_perf diff --git a/patch_v2/meow_svc_perf/meow_svc_perf b/patch_v2/meow_svc_perf/meow_svc_perf new file mode 100755 index 0000000000000000000000000000000000000000..56ab4226bc395f90ab30561cb991f87ae8776d6e GIT binary patch literal 111324 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "meow_ipc.h" /* 帧格式/消息号 + m_perf_query_t/m_perf_result_t(与 launcher 同源) */ + +#define VERSION_FILE "/etc/meowos_version" +#define TF_MOUNT "/usr/data/mnt/sd_0" +#define MEOW_PIPE_MAX 4096 +#define MEOW_TIMEOUT_MS 1500 + +static const char *g_sock = "/usr/data/meow_perf.sock"; + +static void svc_log(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "[meow_svc_perf] "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +/* ---------------- 有界 JSON 追加 ---------------- */ +typedef struct { char *b; size_t n; size_t cap; } sbuf_t; + +static void sA(sbuf_t *s, const char *fmt, ...) +{ + if (s->n >= s->cap - 1) return; + va_list ap; + va_start(ap, fmt); + int w = vsnprintf(s->b + s->n, s->cap - s->n, fmt, ap); + va_end(ap); + if (w < 0) return; + if ((size_t)w >= s->cap - s->n) s->n = s->cap - 1; + else s->n += (size_t)w; +} + +/* JSON 字符串转义(version/hostname 等;ASCII 常见字符直通,引号/反斜杠转义) */ +static void sA_str(sbuf_t *s, const char *v) +{ + if (!v) v = ""; + sA(s, "\""); + for (const char *p = v; *p; p++) { + unsigned char c = (unsigned char)*p; + if (c == '"' || c == '\\') { sA(s, "\\%c", (int)c); } + else if (c < 0x20) { sA(s, "\\u%04x", c); } + else sA(s, "%c", (int)c); /* buf 0x80.. 按字节透传(utf-8) */ + } + sA(s, "\""); +} + +/* ---------------- 限时读整文件 ---------------- */ +static int read_file_txt(const char *path, char *buf, int cap) +{ + int fd = open(path, O_RDONLY); + if (fd < 0) return -1; + int n = 0; + while (n < cap - 1) { + ssize_t r = read(fd, buf + n, (size_t)(cap - 1 - n)); + if (r <= 0) break; + n += (int)r; + } + close(fd); + buf[n] = 0; + while (n > 0 && (buf[n - 1] == '\n' || buf[n - 1] == '\r')) buf[--n] = 0; + return n; +} + +/* ---------------- popen 限时读(kill 子进程防挂) ---------------- */ +static char *popen_read_tmo(int tmo_ms, const char *cmd) +{ + int p[2]; + if (pipe(p) < 0) return NULL; + pid_t pid = fork(); + if (pid < 0) { close(p[0]); close(p[1]); return NULL; } + if (pid == 0) { dup2(p[1], 1); close(p[0]); close(p[1]); execl("/bin/sh", "sh", "-c", cmd, (char *)0); _exit(127); } + close(p[1]); + fcntl(p[0], F_SETFL, fcntl(p[0], F_GETFL, 0) | O_NONBLOCK); + char *buf = malloc(MEOW_PIPE_MAX); + if (!buf) { close(p[0]); waitpid(pid, NULL, 0); return NULL; } + size_t off = 0; + int remain = tmo_ms; + while (remain > 0 && off < MEOW_PIPE_MAX - 1) { + struct pollfd pf = { p[0], POLLIN, 0 }; + int r = poll(&pf, 1, remain); + if (r < 0) { if (errno == EINTR) continue; break; } + if (r == 0) break; + ssize_t rd = read(p[0], buf + off, MEOW_PIPE_MAX - 1 - off); + if (rd == 0) break; + if (rd < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) continue; break; } + off += (size_t)rd; + } + close(p[0]); + waitpid(pid, NULL, 0); + buf[off] = 0; + return buf; +} + +/* ---------------- CPU ---------------- */ +/* /proc/stat 首行 "cpu user nice system idle iowait irq softirq steal ..."。 */ +static int g_cpu_prev[10]; +static int g_cpu_prev_init = 0; + +static double cpu_usage_pct(void) +{ + FILE *f = fopen("/proc/stat", "r"); + char line[256]; + if (!f || !fgets(line, sizeof line, f)) { if (f) fclose(f); return -1; } + fclose(f); + unsigned long long vals[10]; + char *p = line + 3; /* skip "cpu" */ + int n = 0; + while (n < 10) { + while (*p == ' ') p++; + if (!*p || !isdigit((unsigned char)*p)) break; + vals[n++] = strtoull(p, &p, 10); + } + if (n < 4) return -1; + unsigned long long total = 0, idle = 0; + for (int i = 0; i < n; i++) total += vals[i]; + idle = vals[3] + (n > 4 ? vals[4] : 0); + if (!g_cpu_prev_init) { + for (int i = 0; i < 10; i++) g_cpu_prev[i] = (int)vals[i]; + g_cpu_prev_init = 1; + return 0; + } + unsigned long long dtotal = total, didle = idle; + for (int i = 0; i < n; i++) if (i < 10) dtotal -= (unsigned long long)g_cpu_prev[i]; + if (n > 4) didle -= (unsigned long long)g_cpu_prev[3] + (unsigned long long)g_cpu_prev[4]; + else didle -= (unsigned long long)g_cpu_prev[3]; + for (int i = 0; i < 10; i++) g_cpu_prev[i] = (int)vals[i]; + if (!dtotal) return 0; + double u = 100.0 * (double)(dtotal - didle) / (double)dtotal; + if (u < 0) u = 0; + return u; +} + +static int core_count(void) +{ + FILE *f = fopen("/proc/stat", "r"); + char line[256]; + int n = 0; + if (!f) return 1; + while (fgets(line, sizeof line, f)) { + if (line[0] == 'c' && line[1] == 'p' && line[2] == 'u' && isdigit((unsigned char)line[3])) + n++; + if (line[0] != 'c') break; + } + fclose(f); + return n > 0 ? n : 1; +} + +static void loadavg(double *l1, double *l5, double *l15) +{ + FILE *f = fopen("/proc/loadavg", "r"); + *l1 = *l5 = *l15 = 0; + if (f) { if (fscanf(f, "%lf %lf %lf", l1, l5, l15) != 3) { *l1 = *l5 = *l15 = 0; } fclose(f); } +} + +/* ---------------- 内存 ---------------- */ +static void meminfo(unsigned long *total, unsigned long *used, unsigned long *free_kb, + unsigned long *avail, unsigned long *stotal, unsigned long *sused) +{ + *total = *used = *free_kb = *avail = *stotal = *sused = 0; + FILE *f = fopen("/proc/meminfo", "r"); + if (!f) return; + char k[64], line[256]; + unsigned long mtot = 0, mfree = 0, mavail = 0, swapT = 0, swapF = 0; + while (fgets(line, sizeof line, f)) { + unsigned long v; + if (sscanf(line, "%63s %lu", k, &v) != 2) continue; + if (!strcmp(k, "MemTotal:")) mtot = v; + else if (!strcmp(k, "MemFree:")) mfree = v; + else if (!strcmp(k, "MemAvailable:")) mavail = v; + else if (!strcmp(k, "SwapTotal:")) swapT = v; + else if (!strcmp(k, "SwapFree:")) swapF = v; + } + fclose(f); + *total = mtot; + *free_kb = mfree; + if (mavail > 0) { *avail = mavail; *used = (mtot >= mavail) ? mtot - mavail : 0; } + else { *avail = mfree; *used = (mtot >= mfree) ? mtot - mfree : 0; } + *stotal = swapT; + *sused = (swapT >= swapF) ? swapT - swapF : 0; +} + +static double uptime_sec(void) +{ + FILE *f = fopen("/proc/uptime", "r"); + double up = 0; + if (f) { if (fscanf(f, "%lf", &up) != 1) up = 0; fclose(f); } + return up; +} + +/* ---------------- 温度(/sys/class/thermal/thermal_zone*;type 匹配 cpu→cpu,其余→board) ---------------- */ +static void temp_json(sbuf_t *s, int *any) +{ + DIR *d = opendir("/sys/class/thermal"); + *any = 0; + if (!d) { sA(s, "{}"); return; } + double cpu = -1, board = -1; + struct dirent *e; + while ((e = readdir(d))) { + if (strncmp(e->d_name, "thermal_zone", 12) != 0) continue; + char path[300], typ[64] = "", tmp[32] = ""; + snprintf(path, sizeof path, "/sys/class/thermal/%s/type", e->d_name); + read_file_txt(path, typ, sizeof typ); + snprintf(path, sizeof path, "/sys/class/thermal/%s/temp", e->d_name); + read_file_txt(path, tmp, sizeof tmp); + long millideg = atol(tmp); + if (millideg <= 0) continue; + double c = (double)millideg / 1000.0; + if (strstr(typ, "cpu") || strstr(typ, "CPU")) { if (cpu < 0) cpu = c; } + else if (board < 0) board = c; + } + closedir(d); + if (cpu < 0 && board < 0) { sA(s, "{}"); return; } + sA(s, "{"); + int first = 1; + if (cpu >= 0) { sA(s, "\"cpu\":%.1f", cpu); first = 0; } + if (board >= 0) { if (!first) sA(s, ","); sA(s, "\"board\":%.1f", board); } + sA(s, "}"); + *any = 1; +} + +/* ---------------- 存储(df -k 第 2 行:右 5 字段 = fs,total,used,avail,use%,mount) ---------------- */ +static int df_parse(const char *path, unsigned long *total, unsigned long *used, unsigned long *avail) +{ + *total = *used = *avail = 0; + char cmd[160]; + snprintf(cmd, sizeof cmd, "PATH=/bin:/sbin:/usr/bin:/usr/sbin df -k %s 2>/dev/null", path); + char *o = popen_read_tmo(MEOW_TIMEOUT_MS, cmd); + if (!o) return -1; + char *ln = strchr(o, '\n'); + if (ln) ln++; + char *save = NULL; + char *toks[8]; int nt = 0; + for (char *tk = strtok_r(ln ? ln : o, " \t", &save); tk && nt < 8; tk = strtok_r(NULL, " \t", &save)) + toks[nt++] = tk; + if (nt >= 5) { *total = strtoul(toks[nt - 5], NULL, 10); *used = strtoul(toks[nt - 4], NULL, 10); *avail = strtoul(toks[nt - 3], NULL, 10); } + free(o); + return (*total || *avail) ? 0 : -1; +} + +static int tf_present(void) +{ + FILE *f = fopen("/proc/mounts", "r"); + if (!f) return 0; + char line[512]; + int present = 0; + while (fgets(line, sizeof line, f)) { + if (strstr(line, TF_MOUNT)) { present = 1; break; } + } + fclose(f); + return present; +} + +/* ---------------- 系统静态(version/hostname/kernel/arch) ---------------- */ +static void sys_arch(char *out, int cap) +{ + struct utsname u; + const char *m = "mipsel"; + if (uname(&u) == 0) m = u.machine; + if (strstr(m, "mips")) m = "mipsel"; /* mipsel-linux-muslsf 目标 */ + snprintf(out, cap, "%.31s", m); +} + +static void sys_kernel(char *out, int cap) +{ + struct utsname u; + size_t rl = 0; + if (uname(&u) != 0) { snprintf(out, cap, "-"); return; } + rl = strnlen(u.release, 64); + if (rl > (size_t)(cap - 1)) rl = (size_t)(cap - 1); + memcpy(out, u.release, rl); + out[rl] = 0; +} + +/* ---------------- 聚合 JSON(subset 位掩码;与 MEOWPANEL_PROTOCOL §3.1 .data 对齐) ---------------- */ +static int agg_json(int subset, char *out, int cap) +{ + int ip = (subset == 0) || (subset & PERF_SUBSET_PERF); + int isys = (subset == 0) || (subset & PERF_SUBSET_SYSTEM); + sbuf_t s = { out, 0, (size_t)cap }; + sA(&s, "{"); + int first = 1; +#define SEP() do { if (!first) sA(&s, ","); first = 0; } while (0) + + if (ip) { + SEP(); sA(&s, "\"ts\":%ld", (long)time(NULL)); + SEP(); sA(&s, "\"uptime_sec\":%.0f", uptime_sec()); + double u = cpu_usage_pct(); int cores = core_count(); + double l1, l5, l15; loadavg(&l1, &l5, &l15); + SEP(); sA(&s, "\"cpu\":{\"usage\":%.1f,\"cores\":%d,\"load\":[%.2f,%.2f,%.2f]}", u, cores, l1, l5, l15); + unsigned long mtot, mused, mfree, mavail, swapT, swapU; + meminfo(&mtot, &mused, &mfree, &mavail, &swapT, &swapU); + SEP(); sA(&s, "\"memory\":{\"total\":%lu,\"used\":%lu,\"free\":%lu,\"available\":%lu,\"swap_total\":%lu,\"swap_used\":%lu}", + mtot, mused, mfree, mavail, swapT, swapU); + unsigned long st, su, sa; + if (df_parse("/", &st, &su, &sa) == 0) { + SEP(); + sA(&s, "\"storage\":{\"path\":\"/\",\"total\":%lu,\"used\":%lu,\"avail\":%lu}", st, su, sa); + } else { + SEP(); + sA(&s, "\"storage\":{\"path\":\"/\",\"total\":0,\"used\":0,\"avail\":0}"); + } + if (tf_present()) { + unsigned long tt, tu, ta; + if (df_parse(TF_MOUNT, &tt, &tu, &ta) == 0) { + SEP(); + sA(&s, "\"tfcard\":{\"present\":true,\"path\":\"" TF_MOUNT "\",\"total\":%lu,\"used\":%lu,\"avail\":%lu,\"filesystem\":\"exfat\"}", tt, tu, ta); + } else { + SEP(); + sA(&s, "\"tfcard\":{\"present\":true,\"path\":\"" TF_MOUNT "\",\"total\":0,\"used\":0,\"avail\":0,\"filesystem\":\"exfat\"}"); + } + } else { + SEP(); + sA(&s, "\"tfcard\":{\"present\":false,\"path\":\"" TF_MOUNT "\",\"total\":0,\"used\":0,\"avail\":0,\"filesystem\":null}"); + } + int any; + SEP(); sA(&s, "\"temp\":"); temp_json(&s, &any); + } + if (isys) { + char ver[64] = "-", host[64] = "-", ker[64] = "-", arch[32] = "-"; + if (read_file_txt(VERSION_FILE, ver, sizeof ver) <= 0 || !ver[0]) snprintf(ver, sizeof ver, "-"); + if (gethostname(host, sizeof host) != 0 || !host[0]) snprintf(host, sizeof host, "-"); + sys_kernel(ker, sizeof ker); + sys_arch(arch, sizeof arch); + SEP(); sA(&s, "\"system\":{\"version\":"); + sA_str(&s, ver); + sA(&s, ",\"hostname\":"); + sA_str(&s, host); + sA(&s, ",\"kernel\":"); sA_str(&s, ker); + sA(&s, ",\"arch\":"); sA_str(&s, arch); + sA(&s, "}"); + } + sA(&s, "}"); /* 外层闭合 */ +#undef SEP + if (s.n >= (size_t)cap) s.n = (size_t)cap - 1; + s.b[s.n] = 0; + return 0; +} + +/* ---------------- IPC 帧读写 ---------------- */ +static int x_read_full(int fd, uint8_t *buf, size_t n) +{ + size_t off = 0; + while (off < n) { ssize_t r = read(fd, buf + off, n - off); if (r <= 0) return -1; off += (size_t)r; } + return 0; +} +static int x_write_full(int fd, const uint8_t *buf, size_t n) +{ + size_t off = 0; + while (off < n) { ssize_t w = write(fd, buf + off, n - off); if (w <= 0) return -1; off += (size_t)w; } + return 0; +} +static int send_frame(int fd, uint16_t type, uint32_t req_id, const void *payload, uint32_t len) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC, rlen = len; + uint16_t ver = MEOW_IPC_VERSION, t = type; + memcpy(hdr + 0, &magic, 4); memcpy(hdr + 4, &ver, 2); memcpy(hdr + 6, &t, 2); + memcpy(hdr + 8, &req_id, 4); memcpy(hdr + 12, &rlen, 4); + if (x_write_full(fd, hdr, MEOW_IPC_HDR_LEN) < 0) return -1; + if (len && payload && x_write_full(fd, payload, len) < 0) return -1; + return 0; +} +static int send_ack(int fd, uint32_t req_id, uint32_t code, uint32_t status) +{ + m_ack_t a; memset(&a, 0, sizeof a); a.code = code; a.status = status; + return send_frame(fd, MSG_ACK, req_id, &a, sizeof a); +} +static int send_err(int fd, uint32_t req_id, uint32_t code, const char *msg) +{ + m_err_t e; memset(&e, 0, sizeof e); + uint16_t ml = msg ? (uint16_t)strlen(msg) : 0; + if (ml > 63) ml = 63; + e.code = code; e.msg_len = ml; + if (ml) memcpy(e.msg, msg, ml); + return send_frame(fd, MSG_ERR, req_id, &e, sizeof e); +} +static int send_perf_result(int fd, uint32_t req_id, int subset, const char *json) +{ + m_perf_result_t r; + memset(&r, 0, sizeof r); + r.code = MEOW_OK; + r.subset = (uint32_t)subset; + uint16_t jl = (uint16_t)strlen(json); + if (jl > sizeof r.json - 1) jl = (uint16_t)(sizeof r.json - 1); + memcpy(r.json, json, jl); + r.json[jl] = 0; + r.json_len = jl; + return send_frame(fd, MSG_PERF_RESULT, req_id, &r, sizeof r); +} + +/* MSG_PERF_QUERY:读取 subset 后聚合。0=全部。 */ +static void handle_query(int c, uint32_t req_id, const uint8_t *payload, uint32_t rlen) +{ + m_perf_query_t q; + memset(&q, 0, sizeof q); + if (rlen > sizeof q) rlen = sizeof q; + memcpy(&q, payload, rlen); + int subset = (q.subset == 0) ? 0 : (int)q.subset; + char json[MEOW_IPC_MAX - 12]; + agg_json(subset, json, sizeof json); + send_perf_result(c, req_id, subset, json); +} + +static void handle_conn(int c) +{ + for (;;) { + uint8_t hdr[MEOW_IPC_HDR_LEN]; + if (x_read_full(c, hdr, sizeof hdr) < 0) break; + uint32_t magic, rlen, req_id; uint16_t ver, type; + memcpy(&magic, hdr, 4); memcpy(&ver, hdr + 4, 2); memcpy(&type, hdr + 6, 2); + memcpy(&req_id, hdr + 8, 4); memcpy(&rlen, hdr + 12, 4); + if (magic != MEOW_IPC_MAGIC || ver != MEOW_IPC_VERSION) { send_err(c, req_id, MEOW_ERR_INVAL, "bad magic/ver"); break; } + if (rlen > MEOW_IPC_MAX) { send_err(c, req_id, MEOW_ERR_INVAL, "payload too big"); break; } + uint8_t payload[MEOW_IPC_MAX]; + if (rlen && x_read_full(c, payload, rlen) < 0) break; + if (type == MSG_HELLO) { send_ack(c, req_id, MEOW_OK, 0); continue; } + if (type == MSG_PERF_QUERY) { handle_query(c, req_id, payload, rlen); continue; } + send_err(c, req_id, MEOW_ERR_INVAL, "unknown type"); + break; + } +} + +static int run_daemon(const char *sock) +{ + signal(SIGPIPE, SIG_IGN); + cpu_usage_pct(); /* 预热:设 /proc/stat 基线,首次查询即有值 */ + int lfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (lfd < 0) { svc_log("socket fail: %s", strerror(errno)); return 1; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, sock, sizeof a.sun_path - 1); + unlink(sock); + if (bind(lfd, (struct sockaddr *)&a, sizeof a) < 0) { svc_log("bind %s fail: %s", sock, strerror(errno)); close(lfd); return 1; } + chmod(sock, 0666); + if (listen(lfd, 8) < 0) { svc_log("listen fail: %s", strerror(errno)); close(lfd); return 1; } + svc_log("meow_svc_perf listening on %s", sock); + for (;;) { + int c = accept(lfd, NULL, NULL); + if (c < 0) { if (errno == EINTR) continue; continue; } + handle_conn(c); + close(c); + } + return 0; +} + +/* ---------------- CLI ---------------- */ +static int cli_run(int n, char **v) +{ + int subset = 0; + if (n >= 1) { + if (!strcmp(v[0], "perf")) subset = PERF_SUBSET_PERF; + else if (!strcmp(v[0], "system")) subset = PERF_SUBSET_SYSTEM; + else if (!strcmp(v[0], "all") || !strcmp(v[0], "-")) subset = 0; + else { fprintf(stderr, "usage: meow_svc_perf [all|perf|system]\n"); return 1; } + } + cpu_usage_pct(); /* 预热基线 */ + usleep(100000); /* 采样间隔,取 delta */ + char json[4096]; + agg_json(subset, json, sizeof json); + puts(json); + return 0; +} + +static const char *cli_usage(void) +{ + return "meow_svc_perf [all|perf|system] (CLI 免鉴权;无参=全部)"; +} + +int main(int argc, char **argv) +{ + const char *env = getenv("MEOW_IPC_PERF_SOCK"); + if (env && env[0]) g_sock = env; + int i = 1; + for (; i < argc; i++) { + if (!strcmp(argv[i], "--sock") && i + 1 < argc) g_sock = argv[++i]; + else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { puts(cli_usage()); return 0; } + else break; + } + if (i >= argc) return run_daemon(g_sock); /* svcd 空参 → IPC 常驻 */ + return cli_run(argc - i, argv + i); +} diff --git a/patch_v2/meow_svc_perf/meow_svc_perf_host b/patch_v2/meow_svc_perf/meow_svc_perf_host new file mode 100755 index 0000000000000000000000000000000000000000..02dfae73f1fbc83ad6911fe356d3e7dab7d58291 GIT binary patch literal 73616 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 MH2WtNND|rq0Gb^m82|tP literal 0 HcmV?d00001 diff --git a/patch_v2/meow_svc_power/build_svc_power.sh b/patch_v2/meow_svc_power/build_svc_power.sh new file mode 100755 index 0000000..747c0ce --- /dev/null +++ b/patch_v2/meow_svc_power/build_svc_power.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# build_svc_power.sh — meow_svc_power 交叉编译(mipsel 静态)+ 宿主编译可选。 +# +# 目标:R3 Pro II / MeowOS(mipsel-linux-muslsf,静态)。电源服务仅 POSIX + Linux 基接口 +# (复用 meow_ipc.h 帧格式,无 launcher 依赖),单文件满足「固件内、不入卡」(<200KB 阈值)。 +# +# 用法: +# ./build_svc_power.sh # 交叉编译 → patch_v2/meow_svc_power/meow_svc_power(mipsel 静态) +# ./build_svc_power.sh host # 宿主编译 → patch_v2/meow_svc_power/meow_svc_power_host +set -e +cd "$(dirname "$0")" +ROOT="$HOME/Project/R3ProII" +CC="$ROOT/.tools/zig-mipsel-cc" +I_HDR="$ROOT/patch_v2/meow_launcherd" # meow_ipc.h(帧/SACK/POWER_*/m_power_*) + +if [ "$1" = "host" ]; then + HOST_CC="${CC_HOST:-cc}" + "$HOST_CC" -Os -Wall -Wextra -I"$I_HDR" meow_svc_power.c -o meow_svc_power_host + echo "== host build ==" + ls -la meow_svc_power_host + file meow_svc_power_host + exit 0 +fi + +"$CC" -Os -Wall -Wextra -static -I"$I_HDR" meow_svc_power.c -o meow_svc_power +echo "== meow_svc_power (mipsel static) ==" +ls -la meow_svc_power +md5sum meow_svc_power +file meow_svc_power diff --git a/patch_v2/meow_svc_power/meow_svc_power b/patch_v2/meow_svc_power/meow_svc_power new file mode 100755 index 0000000000000000000000000000000000000000..f0cc3901ca48cd497c1fc1d6c5f8515c35ceecbe GIT binary patch literal 93900 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

kB+uKaIgpv{lMH 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 → 一次性 CLI(免鉴权)执行对应动作(不常驻)。 + * + * 动作逻辑与 launcher `power_menu.c` 的 `sys_do_reboot`/`set_boot_default_hiby`/`bootmode.sh Recovery` + * **同源 0-diff 搬移**,仅入口(CLI vs IPC)与鉴权层不同。 + * + * 鉴权(一期基础校验):IPC 服务端受理 MSG_POWER_ACTION 前以 `SO_PEERCRED` 校验调用方 `uid==0`(root) + * ——非 root 直接 `MEOW_ERR_PERM` 拒绝;完整 `os.meow.*` 包名鉴权(§5)留二期。CLI=root 免鉴权。 + * + * 通知转储归属(§3.2/§3.3 已定案):通知存储为 launcher 进程内存(meow_notif.c g_slots[]),服务跨进程 + * 不可达——**转储由调用方 launcher 先做**,服务对关机/重启/升级一律 `sync()` 落盘,不重实现转储。 + * + * 编译(mipsel 静态):build_svc_power.sh;宿主编译 build_svc_power.sh host。 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "meow_ipc.h" /* 帧格式/消息号 + POWER_* 枚举 + m_power_* 负载(与 launcher 同源) */ + +/* ---- 路径常量(与 launcher 同源)---- */ +#define FB_DEV "/dev/fb0" +#define FBIOBLANK 0x4611 +#define BACKLIGHT "/sys/class/backlight/backlight_pwm0/brightness" +#define BACKLIGHT_POWER "/sys/class/backlight/backlight_pwm0/bl_power" +#define BOOT_DEFAULT "/data/meow_boot_default" /* 0=MeowOS(默认),1=HibyOS */ +#define COLD_BOOT "/data/meow_cold_boot" /* 冷启标记:1=上次关机,0=上次重启 */ +#define MTD_OTA "/dev/mtd5" /* ota 标记分区(8M) */ +#define SETTINGS_FILE "/usr/data/meow/settings.conf" +#define SETTINGS_HDR "# meow-settings 1" +#define VERSION_FILE "/etc/meowos_version" +#define BATT_CAP "/sys/class/power_supply/battery/capacity" +#define BATT_STATUS "/sys/class/power_supply/battery/status" +#define BATT_VOLT "/sys/class/power_supply/battery/voltage_now" +#define DAC_NUMID "amixer -c 0 cget numid=%d 2>/dev/null" + +#define LINUX_REBOOT_MAGIC1 0xfee1dead +#define LINUX_REBOOT_MAGIC2 672274793 /* 0x28121969 */ +#define LINUX_REBOOT_CMD_RESTART 0x01234567 +#define LINUX_REBOOT_CMD_POWER_OFF 0x4321fedc + +#define SV_PIPE_MAX 4096 /* popen_read_tmo 上限 */ +#define SV_TIMEOUT_MS 1500 /* popen 子命令读超时 */ + +static const char *g_sock = "/usr/data/meow_power.sock"; + +/* ---------------- 极简日志(stderr;svcd supervisor 捕获) ---------------- */ +static void svc_log(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "[meow_svc_power] "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +/* ---------------- 文件小工具 ---------------- */ +/* 读整个文本文件到 buf(NUL 结尾),返回字节数(不含 NUL);失败 -1。 */ +static int read_file_txt(const char *path, char *buf, int cap) +{ + int fd = open(path, O_RDONLY); + if (fd < 0) return -1; + int n = 0; + while (n < cap - 1) { + ssize_t r = read(fd, buf + n, (size_t)(cap - 1 - n)); + if (r <= 0) break; + n += (int)r; + } + close(fd); + buf[n] = 0; + while (n > 0 && (buf[n - 1] == '\n' || buf[n - 1] == '\r')) buf[--n] = 0; + return n; +} + +/* 读 int(atoi 首值);失败默认 def。 */ +static int read_file_int_def(const char *path, int def) +{ + char buf[32]; + if (read_file_txt(path, buf, sizeof buf) <= 0) return def; + char *p = buf; + while (*p == ' ' || *p == '\t') p++; + int v = atoi(p); + return v; +} + +static int write_file_str(const char *path, const char *s, mode_t mode) +{ + int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, mode); + if (fd < 0) return -1; + size_t l = strlen(s); + ssize_t w = write(fd, s, l); + int ok = (w == (ssize_t)l) ? 0 : -1; + close(fd); + return ok; +} + +/* 读 settings.conf 某键值(key=value,行首忽略空白),找不到→def。 */ +static int settings_get_int(const char *key, int def) +{ + FILE *f = fopen(SETTINGS_FILE, "r"); + if (!f) return def; + char line[256]; + int val = def, found = 0; + size_t klen = strlen(key); + while (fgets(line, sizeof line, f)) { + char *p = line; + while (*p == ' ' || *p == '\t') p++; + if (strncmp(p, key, klen) == 0 && p[klen] == '=') { + val = atoi(p + klen + 1); + found = 1; + break; + } + } + fclose(f); + return found ? val : def; +} + +/* 更新/插入 settings.conf 某键(保留头,O_TRUNC 重写)。成功 0。 */ +static int settings_set_int(const char *key, int val) +{ + FILE *f = fopen(SETTINGS_FILE, "r"); + char tmp[1024]; + size_t klen = strlen(key); + int found = 0; + + if (!f) { + /* 无文件 → 新建头 + 键 */ + FILE *nf = fopen(SETTINGS_FILE, "w"); + if (!nf) return -1; + fprintf(nf, "%s\n%s=%d\n", SETTINGS_HDR, key, val); + fclose(nf); + return 0; + } + /* 先把原文件读入 tmp(限 1KB,settings 为 KB 级小文件) */ + size_t n = 0; + int c; + while (n < sizeof tmp - 1 && (c = fgetc(f)) != EOF) tmp[n++] = (char)c; + fclose(f); + tmp[n] = 0; + FILE *nf = fopen(SETTINGS_FILE, "w"); + if (!nf) return -1; + /* 逐行写:头照抄;命中 key 行替换 */ + char *save = NULL; + for (char *ln = strtok_r(tmp, "\n", &save); ln; ln = strtok_r(NULL, "\n", &save)) { + char *p = ln; + while (*p == ' ' || *p == '\t') p++; + if (strncmp(p, key, klen) == 0 && p[klen] == '=') { + fprintf(nf, "%s=%d\n", key, val); + found = 1; + } else { + fprintf(nf, "%s\n", ln); + } + } + if (!found) fprintf(nf, "%s=%d\n", key, val); + fclose(nf); + return 0; +} + +/* ---------------- popen 限时读(kill 子进程防挂) ---------------- */ +static char *popen_read_tmo(int tmo_ms, const char *cmd) +{ + int p[2]; + if (pipe(p) < 0) return NULL; + pid_t pid = fork(); + if (pid < 0) { close(p[0]); close(p[1]); return NULL; } + if (pid == 0) { + dup2(p[1], 1); + close(p[0]); close(p[1]); + execl("/bin/sh", "sh", "-c", cmd, (char *)0); + _exit(127); + } + close(p[1]); + fcntl(p[0], F_SETFL, fcntl(p[0], F_GETFL, 0) | O_NONBLOCK); + char *buf = malloc(SV_PIPE_MAX); + if (!buf) { close(p[0]); waitpid(pid, NULL, 0); return NULL; } + size_t off = 0; + int remain = tmo_ms; + while (remain > 0 && off < SV_PIPE_MAX - 1) { + struct pollfd pf = { p[0], POLLIN, 0 }; + int r = poll(&pf, 1, remain); + if (r < 0) { if (errno == EINTR) continue; break; } + if (r == 0) break; /* 超时 */ + ssize_t rd = read(p[0], buf + off, SV_PIPE_MAX - 1 - off); + if (rd == 0) break; /* EOF(子进程退出/关写端) */ + if (rd < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) continue; break; } + off += (size_t)rd; + } + close(p[0]); + waitpid(pid, NULL, 0); + buf[off] = 0; + return buf; +} + +/* 前置声明:CLI 用法串(cli_run 用到)。 */ +static const char *cli_usage(void); + +/* ---------------- reboot / 关机 syscall ---------------- */ +static void sys_reboot_do(int cmd) +{ + /* 与 power_menu.c sys_do_reboot 同源:sync() 落盘 → reboot(2) syscall → 永不返回。 */ + sync(); + svc_log("sys_reboot_do cmd=0x%x", cmd); + syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, NULL); + svc_log("sys_reboot_do returned: %s", strerror(errno)); + for (;;) usleep(1000); +} + +/* ---------------- boot 默认 ---------------- */ +/* 写 /data/meow_boot_default(0=MeowOS 默认 / 1=HibyOS 默认)。 */ +static void write_boot_default(int v) +{ + char b[8]; + snprintf(b, sizeof b, "%d\n", v); + if (write_file_str(BOOT_DEFAULT, b, 0644) < 0) svc_log("write %s fail: %s", BOOT_DEFAULT, strerror(errno)); + else svc_log("boot_default=%d", v); +} + +/* ---------------- 关机 logo ---------------- */ +static void show_shutdown_logo(void) +{ + /* 独立二进制 cmd_jpeg_display 能显图;SSH 无 fb 时重定向无害。 */ + int rc = system("PATH=/bin:/sbin:/usr/bin:/usr/sbin cmd_jpeg_display /etc/shutdown_logo.jpeg >/dev/null 2>&1"); + (void)rc; +} + +/* ---------------- 升级(mtd5=ota:kernel2) ---------------- */ +static void enter_upgrade(void) +{ + int rc = system("PATH=/bin:/sbin:/usr/bin:/usr/sbin /usr/bin/bootmode.sh Recovery >/dev/null 2>&1"); + (void)rc; +} + +/* 读 /dev/mtd5 头,命中 "ota:kernel2" → 升级模式已设。 */ +static int mtd_ota_is_upgrade(void) +{ + int fd = open(MTD_OTA, O_RDONLY); + if (fd < 0) return 0; + char buf[16]; + memset(buf, 0, sizeof buf); + ssize_t n = read(fd, buf, sizeof buf - 1); + close(fd); + if (n <= 0) return 0; + return strstr(buf, "ota:kernel2") != NULL; +} + +/* ---------------- 有界拼接(printf 截断分析免疫;host/cross 均 0 warning) ---------------- */ +static void cat_b(char *dst, size_t cap, const char *src) +{ + size_t dl = strlen(dst); + if (dl >= cap - 1) return; + size_t sl = strlen(src); + if (sl > cap - 1 - dl) sl = cap - 1 - dl; + if (sl) memcpy(dst + dl, src, sl); + dst[dl + sl] = 0; +} + +/* ---------------- 电池/状态读组(同 util.c/about.c/bootmenu 数据源) ---------------- */ +static void battery_fill(char *out, int cap) +{ + int pct = read_file_int_def(BATT_CAP, -1); + char st[32] = ""; + read_file_txt(BATT_STATUS, st, sizeof st); + int mv = read_file_int_def(BATT_VOLT, -1) / 1000; /* µV → mV */ + if (pct < 0) { snprintf(out, cap, "battery=unknown"); return; } + char one[64]; + snprintf(one, sizeof one, "battery=%d%%(%s)", pct, st[0] ? st : "?"); + out[0] = 0; + cat_b(out, cap, one); + if (mv >= 0) { char more[24]; snprintf(more, sizeof more, " %dmV", mv); cat_b(out, cap, more); } +} + +static const char *boot_default_str(void) +{ + int v = read_file_int_def(BOOT_DEFAULT, -1); + if (v < 0) return "unknown"; + return v ? "hiby" : "meow"; +} + +static int cold_boot_flag(void) { return read_file_int_def(COLD_BOOT, -1); } + +static void status_fill(char *out, int cap) +{ + char ver[32] = "-", batt[48] = ""; + if (read_file_txt(VERSION_FILE, ver, sizeof ver) <= 0 || !ver[0]) snprintf(ver, sizeof ver, "-"); + battery_fill(batt, sizeof batt); + int cold = cold_boot_flag(); + char head[96]; + snprintf(head, sizeof head, "system=%s boot=%s upgrade=%s coldboot=%s ", + ver, boot_default_str(), + mtd_ota_is_upgrade() ? "yes" : "no", + cold < 0 ? "unknown" : (cold ? "shutdown" : "reboot")); + out[0] = 0; + cat_b(out, cap, head); + cat_b(out, cap, batt); +} + +/* ---------------- 屏幕电源(同 launcher keys.c meow_panel_off/on + backlight.c) ---------------- */ +static int backlight_write(int val) +{ + char b[16]; + snprintf(b, sizeof b, "%d", val); + return write_file_str(BACKLIGHT, b, 0644) < 0 ? -1 : 0; +} + +static int screen_on(void) +{ + int f = open(FB_DEV, O_RDWR); + if (f >= 0) { ioctl(f, FBIOBLANK, 0); close(f); } + int bri = settings_get_int("display.brightness", 60); + int bmin = settings_get_int("display.brightness_min", 1); + if (bri < bmin) bri = bmin; + if (bri > 100) bri = 100; + backlight_write(bri); + svc_log("screen ON (brightness %d)", bri); + return 0; +} + +static int screen_off(void) +{ + int f = open(FB_DEV, O_RDWR); + if (f >= 0) { ioctl(f, FBIOBLANK, 4); close(f); } + backlight_write(0); + svc_log("screen OFF (blank 4 + brightness 0)"); + return 0; +} + +/* ---------------- DAC(CS43198) ---------------- */ +/* 原机 cs43198 驱动 pwr_gpio=-1:无上电/下电控制点(sysfs/amixer),on/off 不支持。 + * status 仅报 amixer numid=1/2(L/R)当前音量上报值。 */ +static int dac_status(char *out, int cap) +{ + char l[48] = "?", r[48] = "?"; + char *o1 = popen_read_tmo(SV_TIMEOUT_MS, "PATH=/bin:/sbin:/usr/bin:/usr/sbin amixer -c 0 cget numid=1 2>/dev/null"); + if (o1) { + char *p = strstr(o1, ": values="); + if (p) snprintf(l, sizeof l, "%.40s", p + 9); + free(o1); + } + char *o2 = popen_read_tmo(SV_TIMEOUT_MS, "PATH=/bin:/sbin:/usr/bin:/usr/sbin amixer -c 0 cget numid=2 2>/dev/null"); + if (o2) { + char *p = strstr(o2, ": values="); + if (p) snprintf(r, sizeof r, "%.40s", p + 9); + free(o2); + } + out[0] = 0; + cat_b(out, cap, "dac=cs43198 L="); + cat_b(out, cap, l); + cat_b(out, cap, " R="); + cat_b(out, cap, r); + cat_b(out, cap, " powerctl=unsupported(no_gpio)"); + return 0; +} + +static int dac_cmd(const char *sub, char *out, int cap) +{ + if (!sub) return MEOW_ERR_INVAL; + if (!strcmp(sub, "status")) { return dac_status(out, cap); } + if (!strcmp(sub, "on") || !strcmp(sub, "off")) { + snprintf(out, cap, "DAC %s: unsupported (cs43198 pwr_gpio=-1, no on/off control point)", sub); + return MEOW_ERR_NODEV; + } + return MEOW_ERR_INVAL; +} + +/* ---------------- 动作执行(CLI + IPC 共用) ---------------- + * 返回 0 = 已同步执行并填好 st(调用方直接应答 st 给客户端/CLI 已打印); + * 返回 1 = 系统动作(关机/重启/升级/回HiBy),调用方应「先应答 MEOW_OK 受理,再执行」(执行后通常不返回)。 */ +static int execute_action(const m_power_action_t *a, m_power_status_t *st) +{ + memset(st, 0, sizeof *st); + st->cmd = a->cmd; + switch (a->cmd) { + case POWER_SHUTDOWN: + sync(); /* 通知转储由 launcher 先做;服务 sync() 落盘 */ + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "shutdown accepted"); + return 1; /* 应答后:logo + poweroff(不返回) */ + case POWER_REBOOT: + write_boot_default(0); /* 普通重启恒回 MeowOS(无视之前) */ + sync(); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "reboot accepted (boot=meow)"); + return 1; + case POWER_UPGRADE: + sync(); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "upgrade accepted"); + return 1; + case POWER_BACK_HIBY: + write_boot_default(1); + sync(); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "reboot -> hiby accepted"); + return 1; + case POWER_SET_DEFAULT_MEOW: + write_boot_default(0); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "boot_default=meow (next boot)"); + return 0; + case POWER_SET_DEFAULT_HIBY: + write_boot_default(1); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "boot_default=hiby (next boot)"); + return 0; + case POWER_STATUS: + status_fill(st->msg, sizeof st->msg); + st->code = MEOW_OK; + return 0; + case POWER_BATTERY: + battery_fill(st->msg, sizeof st->msg); + st->code = MEOW_OK; + return 0; + case POWER_REBOOT_REASON: + { int c = cold_boot_flag(); + snprintf(st->msg, sizeof st->msg, "coldboot=%s", c < 0 ? "unknown" : (c ? "shutdown" : "reboot")); + st->code = MEOW_OK; } + return 0; + case POWER_UPGRADE_STATUS: + snprintf(st->msg, sizeof st->msg, "upgrade=%s", mtd_ota_is_upgrade() ? "yes" : "no"); + st->code = MEOW_OK; + return 0; + case POWER_SCREEN: + if (a->flag == 0) { screen_off(); st->code = MEOW_OK; snprintf(st->msg, sizeof st->msg, "screen off"); return 0; } + if (a->flag == 1) { screen_on(); st->code = MEOW_OK; snprintf(st->msg, sizeof st->msg, "screen on"); return 0; } + if (a->flag == 2) { /* timeout 秒(arg) */ + int sec = a->arg[0] ? atoi(a->arg) : -1; + if (sec < 0 || sec > 86400) { st->code = MEOW_ERR_INVAL; + snprintf(st->msg, sizeof st->msg, "screen timeout: bad sec"); return 0; } + settings_set_int("display.screen_off_timeout", sec); + st->code = MEOW_OK; + snprintf(st->msg, sizeof st->msg, "screen_off_timeout=%ds", sec); + return 0; + } + st->code = MEOW_ERR_INVAL; + snprintf(st->msg, sizeof st->msg, "screen: bad flag"); + return 0; + case POWER_DAC: + { int rc = dac_cmd(a->flag == 2 ? "status" : (a->flag == 1 ? "on" : "off"), + st->msg, sizeof st->msg); + st->code = rc; } + return 0; + default: + st->code = MEOW_ERR_INVAL; + snprintf(st->msg, sizeof st->msg, "unknown cmd %u", a->cmd); + return 0; + } +} + +/* 执行「系统动作」(在应答 MEOW_OK 之后调用;通常不返回)。 */ +static void run_system_action(uint32_t cmd) +{ + switch (cmd) { + case POWER_SHUTDOWN: + show_shutdown_logo(); + sys_reboot_do(LINUX_REBOOT_CMD_POWER_OFF); + break; + case POWER_REBOOT: + sys_reboot_do(LINUX_REBOOT_CMD_RESTART); + break; + case POWER_UPGRADE: + enter_upgrade(); + sys_reboot_do(LINUX_REBOOT_CMD_RESTART); + break; + case POWER_BACK_HIBY: + sys_reboot_do(LINUX_REBOOT_CMD_RESTART); + break; + default: break; + } +} + +/* ---------------- IPC 帧读写(同 meow_ipc 客户端约定,全小端) ---------------- */ +static int x_read_full(int fd, uint8_t *buf, size_t n) +{ + size_t off = 0; + while (off < n) { + ssize_t r = read(fd, buf + off, n - off); + if (r <= 0) return -1; + off += (size_t)r; + } + return 0; +} +static int x_write_full(int fd, const uint8_t *buf, size_t n) +{ + size_t off = 0; + while (off < n) { + ssize_t w = write(fd, buf + off, n - off); + if (w <= 0) return -1; + off += (size_t)w; + } + return 0; +} + +static int send_frame(int fd, uint16_t type, uint32_t req_id, const void *payload, uint32_t len) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC, rlen = len; + uint16_t ver = MEOW_IPC_VERSION, t = type; + memcpy(hdr + 0, &magic, 4); + memcpy(hdr + 4, &ver, 2); + memcpy(hdr + 6, &t, 2); + memcpy(hdr + 8, &req_id, 4); + memcpy(hdr + 12, &rlen, 4); + if (x_write_full(fd, hdr, MEOW_IPC_HDR_LEN) < 0) return -1; + if (len && payload && x_write_full(fd, payload, len) < 0) return -1; + return 0; +} + +static int send_ack(int fd, uint32_t req_id, uint32_t code, uint32_t status) +{ + m_ack_t a; + memset(&a, 0, sizeof a); + a.code = code; + a.status = status; + return send_frame(fd, MSG_ACK, req_id, &a, sizeof a); +} + +static int send_err(int fd, uint32_t req_id, uint32_t code, const char *msg) +{ + m_err_t e; + memset(&e, 0, sizeof e); + e.code = code; + uint16_t ml = msg ? (uint16_t)strlen(msg) : 0; + if (ml > 63) ml = 63; + e.msg_len = ml; + if (ml) memcpy(e.msg, msg, ml); + return send_frame(fd, MSG_ERR, req_id, &e, sizeof e); +} + +static int send_power_status(int fd, uint32_t req_id, const m_power_status_t *st) +{ + m_power_status_t s = *st; + uint16_t ml = (uint16_t)strlen(s.msg); + if (ml >= sizeof s.msg) ml = (uint16_t)(sizeof s.msg - 1); + s.msg_len = ml; + return send_frame(fd, MSG_POWER_STATUS, req_id, &s, sizeof s); +} + +/* 处理单条连接(连接内循环读帧:客户端先 MSG_HELLO 握手,再 MSG_POWER_ACTION)。 */ +static void handle_conn(int c) +{ + /* 基础鉴权:调用方 uid==0(root)才受理动作。 */ + struct ucred cred; + socklen_t cl = sizeof cred; + int uid0 = 0; + if (getsockopt(c, SOL_SOCKET, SO_PEERCRED, &cred, &cl) == 0 && cred.uid == 0) + uid0 = 1; + + for (;;) { + uint8_t hdr[MEOW_IPC_HDR_LEN]; + if (x_read_full(c, hdr, sizeof hdr) < 0) break; /* EOF/错误 */ + uint32_t magic, rlen, req_id; + uint16_t ver, type; + memcpy(&magic, hdr, 4); + memcpy(&ver, hdr + 4, 2); + memcpy(&type, hdr + 6, 2); + memcpy(&req_id, hdr + 8, 4); + memcpy(&rlen, hdr + 12, 4); + if (magic != MEOW_IPC_MAGIC || ver != MEOW_IPC_VERSION) { + send_err(c, req_id, MEOW_ERR_INVAL, "bad magic/ver"); break; + } + if (rlen > MEOW_IPC_MAX) { + send_err(c, req_id, MEOW_ERR_INVAL, "payload too big"); break; + } + uint8_t payload[MEOW_IPC_MAX]; + if (rlen && x_read_full(c, payload, rlen) < 0) break; + + if (type == MSG_HELLO) { send_ack(c, req_id, MEOW_OK, 0); continue; } + + if (type == MSG_POWER_ACTION) { + m_power_action_t a; + memset(&a, 0, sizeof a); + if (rlen > sizeof a) rlen = sizeof a; + memcpy(&a, payload, rlen); + if (!uid0) { + m_power_status_t st; + memset(&st, 0, sizeof st); + st.code = MEOW_ERR_PERM; + st.cmd = a.cmd; + snprintf(st.msg, sizeof st.msg, "permission denied (uid!=0)"); + send_power_status(c, req_id, &st); + continue; + } + m_power_status_t st; + int act = execute_action(&a, &st); + if (act == 0) { send_power_status(c, req_id, &st); continue; } + /* 系统动作:先应答受理(客户端不阻塞),再执行(常不返回) */ + send_power_status(c, req_id, &st); + run_system_action(a.cmd); + break; + } + send_err(c, req_id, MEOW_ERR_INVAL, "unknown type"); + break; + } +} + +static int run_daemon(const char *sock) +{ + signal(SIGPIPE, SIG_IGN); + int lfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (lfd < 0) { svc_log("socket fail: %s", strerror(errno)); return 1; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, sock, sizeof a.sun_path - 1); + unlink(sock); + if (bind(lfd, (struct sockaddr *)&a, sizeof a) < 0) { + svc_log("bind %s fail: %s", sock, strerror(errno)); + close(lfd); + return 1; + } + chmod(sock, 0666); + if (listen(lfd, 8) < 0) { svc_log("listen fail: %s", strerror(errno)); close(lfd); return 1; } + svc_log("meow_svc_power listening on %s", sock); + for (;;) { + int c = accept(lfd, NULL, NULL); + if (c < 0) { if (errno == EINTR) continue; continue; } + handle_conn(c); + close(c); + } + return 0; +} + +/* ---------------- CLI ---------------- */ +static int cli_run(int n, char **v) +{ + const char *cmd = v[0]; + if (!strcmp(cmd, "shutdown")) { + show_shutdown_logo(); + sys_reboot_do(LINUX_REBOOT_CMD_POWER_OFF); + return 0; /* 不返回 */ + } + if (!strcmp(cmd, "reboot")) { + if (n > 1 && !strcmp(v[1], "--hiby")) { write_boot_default(1); } + else write_boot_default(0); /* 普通重启恒回 MeowOS */ + sys_reboot_do(LINUX_REBOOT_CMD_RESTART); + return 0; + } + if (!strcmp(cmd, "upgrade")) { + enter_upgrade(); + sys_reboot_do(LINUX_REBOOT_CMD_RESTART); + return 0; + } + if (!strcmp(cmd, "set-default-hiby")) { + write_boot_default(1); + printf("boot_default=hiby (next boot)\n"); + return 0; + } + if (!strcmp(cmd, "set-default-meow")) { + write_boot_default(0); + printf("boot_default=meow (next boot)\n"); + return 0; + } + if (!strcmp(cmd, "status")) { + char out[128]; + status_fill(out, sizeof out); + printf("%s\n", out); + return 0; + } + if (!strcmp(cmd, "battery")) { + char out[64]; + battery_fill(out, sizeof out); + printf("%s\n", out); + return 0; + } + if (!strcmp(cmd, "reboot-reason")) { + int c = cold_boot_flag(); + printf("coldboot=%s\n", c < 0 ? "unknown" : (c ? "shutdown" : "reboot")); + return 0; + } + if (!strcmp(cmd, "upgrade-status")) { + printf("upgrade=%s\n", mtd_ota_is_upgrade() ? "yes" : "no"); + return 0; + } + if (!strcmp(cmd, "screen")) { + if (n < 2) { fprintf(stderr, "screen needs on|off|timeout<秒>\n"); return 1; } + if (!strcmp(v[1], "on")) return screen_on(); + if (!strcmp(v[1], "off")) return screen_off(); + if (!strcmp(v[1], "timeout")) { + if (n < 3) { fprintf(stderr, "screen timeout needs <秒>\n"); return 1; } + int sec = atoi(v[2]); + if (sec < 0 || sec > 86400) { fprintf(stderr, "screen timeout: bad sec\n"); return 1; } + settings_set_int("display.screen_off_timeout", sec); + printf("screen_off_timeout=%ds\n", sec); + return 0; + } + fprintf(stderr, "screen: bad sub %s\n", v[1]); + return 1; + } + if (!strcmp(cmd, "dac")) { + if (n < 2) { fprintf(stderr, "dac needs on|off|status\n"); return 1; } + char out[160]; + int rc = dac_cmd(v[1], out, sizeof out); + printf("%s\n", out); + return rc == MEOW_OK ? 0 : 1; + } + fprintf(stderr, "usage: meow_svc_power (%s)\n", cli_usage()); + return 1; +} + +static const char *cli_usage(void) +{ + return "shutdown|reboot[--hiby]|upgrade|set-default-hiby|set-default-meow|" + "status|battery|reboot-reason|upgrade-status|screen on|off|timeout<秒>|dac on|off|status"; +} + +int main(int argc, char **argv) +{ + const char *env = getenv("MEOW_IPC_POWER_SOCK"); + if (env && env[0]) g_sock = env; + + int i = 1; + for (; i < argc; i++) { + if (!strcmp(argv[i], "--sock") && i + 1 < argc) g_sock = argv[++i]; + else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { + printf("meow_svc_power (%s)\n", cli_usage()); + return 0; + } + else break; + } + if (i >= argc) return run_daemon(g_sock); /* svcd 空参 → IPC 常驻 */ + return cli_run(argc - i, argv + i); +} diff --git a/patch_v2/meow_svc_power/meow_svc_power_host b/patch_v2/meow_svc_power/meow_svc_power_host new file mode 100755 index 0000000000000000000000000000000000000000..0fa93b9700931a411c4a0b910be22b9021f2a109 GIT binary patch literal 73736 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 /usr/data/meow/services.d/meow_svc_perf.conf <<'EOF' +exec=/usr/bin/meow_svc_perf +args= +enabled=1 +restart=on-fail +backoff_ms=2000 +max_restart=5 +trigger=boot +cap= +EOF + chmod 644 /usr/data/meow/services.d/meow_svc_perf.conf + echo -n "provisioned perf.conf " + fi + if [ -f /usr/data/meow/services.d/meow_svc_power.conf ]; then + echo -n "power.conf exists " + else + cat > /usr/data/meow/services.d/meow_svc_power.conf <<'EOF' +exec=/usr/bin/meow_svc_power +args= +enabled=1 +restart=always +backoff_ms=2000 +max_restart=5 +trigger=boot +cap= +EOF + chmod 644 /usr/data/meow/services.d/meow_svc_power.conf + echo -n "provisioned power.conf " + fi + else + echo -n "skip svc confs (/usr/data/meow not writable) " + fi + # 3) svcd 拉起权判归:sysui 运行 → 交给 sysui 监管;否则回退重挂循环。 rm -f /tmp/meow_svcd.stop sysui_alive=0