docs: 仓库文档同步 M6.6(0.8.6)——README 版本行 + M6.5/M6.6 演进;SPEC_REF 补 SDK §10.1 矢量字 meow_ft/audiod 315 孤儿回收/锁屏 310 三期;FIRMWARE_BINARIES 按 fw_content.conf 更新到 M6.6

- README:版本行 M6.4→M6.6(新增 M6.5 audiod 孤儿回收 + M6.6 §310 三期锁屏);新增「M6.5-6.6 新增」演进条目(SDK 矢量字/audiod 孤儿回收/流媒体客户端 314 SIGSEGV 根因+317 封面链分诊+兜底链+318 track/all 否决+319 接口地图+320 风控加固);应用生态更新到 2026-09-02 批次。
- SPEC_REF §3.5:补 §10.1 矢量字 `meow_ft_*`(316,上收阅读器 FreeType 管线)+签名蓝本扩到 meow_ui_ft.h;audiod 段补 315 孤儿会话两段式回收;锁屏 PIN 段补 310 二期 EVIOCGRAB + 三期(M6.6)。
- FIRMWARE_BINARIES:按 conf 更新 meow_launcherd(M6.6)/meow_audiod(M6.5)/meow_amsd(M6.2)/S89(M6.2) + 当前基线标注 M6.6。
This commit is contained in:
AskaEth committed 2026-09-02 13:04:58 +08:00
1 parent ea645ce2a6
commit a70bcaac95
3 files changed
+16 -14

No files matched your search

+4 -3
View File
@@ -3,7 +3,7 @@
> 把 HiBy R3 Pro II 便携播放器(君正 X1600,MIPS32r2 / mipsel / musl 静态软浮点,480×720,无 GPU 软渲染)变成一个可扩展的「第二系统 + 应用框架」。 > 把 HiBy R3 Pro II 便携播放器(君正 X1600,MIPS32r2 / mipsel / musl 静态软浮点,480×720,无 GPU 软渲染)变成一个可扩展的「第二系统 + 应用框架」。
> MeowOS 与官方 HibyOS 共存于同一台设备:开机由引导选单二选一;启动后 MeowOS 作为主控层,提供自己的桌面 UI、应用框架、服务管理与系统组件。 > MeowOS 与官方 HibyOS 共存于同一台设备:开机由引导选单二选一;启动后 MeowOS 作为主控层,提供自己的桌面 UI、应用框架、服务管理与系统组件。
> >
> 版本:**M6.4(0.8.4,已自刷验收)**(M6.1→M6.4 全链自刷验收——**M6.1**:netmgrd 期3/powermgr 期2/面板 PIN 鉴权+首页仪表盘/WiFi 录入 UI/服务名统一 meow_*;**M6.2**:锁屏 PIN 全量(`system.pin` 同源面板)+VOL_DOWN×3 框架门控+显示名 name[49](amsd/launcher UTF-8 整序列截断);**M6.3**:设置页 5s 修复(309 网络异步步骤机+跳过字体 sha 校验)+310 锁屏三连(输入穿透/解锁状态栏消失/App 死亡残影);**M6.4**:310 二期 **EVIOCGRAB 锁屏独占触控**(未冻结 App 锁屏输入隔离)+主界面应用名截断;历史:M2.69→M2.96 全链路自刷验收:控件库/主界面 MD3 双布局/M3 导航栈/M5 通知跳转/媒体会话/Now Playing/SDK nav+media 封装/字库启动竞态修复**/M2.84-88**:installed 图标修复+残帧pan加固/物理键EVIOCGKEY双源/签名鉴权 2B/meow_route 音频路由/amsd 二期(picker 契约)/流媒体客户端二期(封面·歌词后台·大歌单分页)/MeowPanel 实时画面+遥控+通知实时化/中文拼音 IME**/M2.89**:开机选单抢屏回归修复+watchdog SIGUSR1 不误杀框架 App+amsd 失联修复+顶部下滑手势分流**/M2.90**:**meow_audiod 独占音频守护**(AUDIOD_DESIGN,meow_route 并入退役)+MIUIx 顶级主题+流媒体客户端文案中文化+面板字体库 tar.gz 导入导出**/M2.91-96**:audiod 开机武装 hbc3000 FPGA(根治 PCM 启动内核死锁)+svc_power 充电态权威链(mp2731)+amsd 注册自愈(`am rescan`)/Now Playing 死循环修复+状态栏充电闪电+插孔消抖(三路)/audiod 长流护栏+ALSA 几何收窄 period=1024×4(根治长流停摆)+watchdog 音量存盘毁设置修复/音量反转四路统一(CS43198 寄存器=衰减量,`dac=255-pct*255/100`)+炸耳安全修复(dac_vol_mute 写 255 真静音);**M6.0-6.1**:网络管理服务 **meow_netmgrd** 期1-3(接口统一层+连接普查三实体+DNS 代理+策略引擎防自锁+WiFi 录入 UI)+功耗管理服务 **meow_powermgr** 期0-2(查看/功耗分解 top/历史/事件/mp2731 实测充电功率)+MeowPanel 增强(4 位 PIN 鉴权+首页仪表盘/电源页/进程服务页)+服务名统一 meow_*(audiod/mdnsd→meow_audiod/meow_mdns))。版本号单点 = 板上 `/etc/meowos_version`,见「构建」。本仓库是一个**自带 SDK、包管理、媒体会话、独占音频服务、网页面板、流媒体客户端的完整第三方系统**。 > 版本:**M6.6(0.8.6,已自刷验收)**(M6.1→M6.6 全链自刷验收——**M6.1**:netmgrd 期3/powermgr 期2/面板 PIN 鉴权+首页仪表盘/WiFi 录入 UI/服务名统一 meow_*;**M6.2**:锁屏 PIN 全量(`system.pin` 同源面板)+VOL_DOWN×3 框架门控+显示名 name[49](amsd/launcher UTF-8 整序列截断);**M6.3**:设置页 5s 修复(309 网络异步步骤机+跳过字体 sha 校验)+310 锁屏三连(输入穿透/解锁状态栏消失/App 死亡残影);**M6.4**:310 二期 **EVIOCGRAB 锁屏独占触控**(未冻结 App 锁屏输入隔离)+主界面应用名截断;**M6.5**:audiod 315 孤儿会话两段式回收(客户端崩溃/OOM 杀/正常退出后会话完整回收,STATE 回干净无流基线);**M6.6**:锁屏 310 三期——App 内手动息屏也触发锁屏 + 锁屏脏区全屏不透明底 + 300ms 重铺;历史:M2.69→M2.96 全链路自刷验收:控件库/主界面 MD3 双布局/M3 导航栈/M5 通知跳转/媒体会话/Now Playing/SDK nav+media 封装/字库启动竞态修复**/M2.84-88**:installed 图标修复+残帧pan加固/物理键EVIOCGKEY双源/签名鉴权 2B/meow_route 音频路由/amsd 二期(picker 契约)/流媒体客户端二期(封面·歌词后台·大歌单分页)/MeowPanel 实时画面+遥控+通知实时化/中文拼音 IME**/M2.89**:开机选单抢屏回归修复+watchdog SIGUSR1 不误杀框架 App+amsd 失联修复+顶部下滑手势分流**/M2.90**:**meow_audiod 独占音频守护**(AUDIOD_DESIGN,meow_route 并入退役)+MIUIx 顶级主题+流媒体客户端文案中文化+面板字体库 tar.gz 导入导出**/M2.91-96**:audiod 开机武装 hbc3000 FPGA(根治 PCM 启动内核死锁)+svc_power 充电态权威链(mp2731)+amsd 注册自愈(`am rescan`)/Now Playing 死循环修复+状态栏充电闪电+插孔消抖(三路)/audiod 长流护栏+ALSA 几何收窄 period=1024×4(根治长流停摆)+watchdog 音量存盘毁设置修复/音量反转四路统一(CS43198 寄存器=衰减量,`dac=255-pct*255/100`)+炸耳安全修复(dac_vol_mute 写 255 真静音);**M6.0-6.1**:网络管理服务 **meow_netmgrd** 期1-3(接口统一层+连接普查三实体+DNS 代理+策略引擎防自锁+WiFi 录入 UI)+功耗管理服务 **meow_powermgr** 期0-2(查看/功耗分解 top/历史/事件/mp2731 实测充电功率)+MeowPanel 增强(4 位 PIN 鉴权+首页仪表盘/电源页/进程服务页)+服务名统一 meow_*(audiod/mdnsd→meow_audiod/meow_mdns))。版本号单点 = 板上 `/etc/meowos_version`,见「构建」。本仓库是一个**自带 SDK、包管理、媒体会话、独占音频服务、网页面板、流媒体客户端的完整第三方系统**。
> >
> 许可证:Apache-2.0(见 [`LICENSE`](LICENSE))。本仓库为非官方第三方项目。 > 许可证:Apache-2.0(见 [`LICENSE`](LICENSE))。本仓库为非官方第三方项目。
> >
@@ -19,7 +19,7 @@
- **应用框架**:一套 C 应用 SDK(`meow_ui`),第三方 App 用统一控件 / 输入 / 主题 / 字体 / 通知 API 开发,无需自读帧缓冲、自读输入、自管返回——把每个 App 都要踩一遍的坑收口到框架里。 - **应用框架**:一套 C 应用 SDK(`meow_ui`),第三方 App 用统一控件 / 输入 / 主题 / 字体 / 通知 API 开发,无需自读帧缓冲、自读输入、自管返回——把每个 App 都要踩一遍的坑收口到框架里。
- **系统组件**:状态栏、通知中心、电源菜单、全局左缘返回手势、主界面(应用列表,**MD3/MIUIx 顶级主题×明暗**,卡片宫格/列表双布局)、设置页、服务管理器、mDNS 广播;系统进程总监 `meow_sysui`;专项子服务 `meow_svc_perf`(性能/系统只读聚合,含真实 network)与 `meow_svc_power`(关机/重启/升级/回 HiBy,含升级写保护 + dac 真实音量 + 读级鉴权放宽);**独占音频守护 `meow_audiod`**(M2.90:App 经 SDK `meow_audio_*` 喂 PCM,守护独占 `hw:0,0`——DAC 原生率跟随无 SRC、格式归一、4.4/3.5 路由自动跟随插孔、抢占+EOF 回收、CLI status/tone/route/vol,规范 `devdocs/plan/AUDIOD_DESIGN.md`);系统级崩溃捕获 `meow_crash` + App 崩溃直报;.mpk **Ed25519 签名验签** `meow_verify`(见 §2.9);**网络管理服务 `meow_netmgrd`**(M6.0 期1 / M6.1 期3:接口统一层/连接普查三实体/DNS 代理/策略引擎防自锁,HibyOS 只读)与**功耗管理服务 `meow_powermgr`**(M6.0 期1 / M6.1 期2:功耗查看/分解/历史/事件,HibyOS 只读);MeowPanel 外部管理面板(HTTP/JSON 后端 + Web 前端,支持可选密码鉴权 + 4 位 PIN 访问级鉴权 + 首页仪表盘 + 字体库 tar.gz 导入导出,见 §2.10)。 - **系统组件**:状态栏、通知中心、电源菜单、全局左缘返回手势、主界面(应用列表,**MD3/MIUIx 顶级主题×明暗**,卡片宫格/列表双布局)、设置页、服务管理器、mDNS 广播;系统进程总监 `meow_sysui`;专项子服务 `meow_svc_perf`(性能/系统只读聚合,含真实 network)与 `meow_svc_power`(关机/重启/升级/回 HiBy,含升级写保护 + dac 真实音量 + 读级鉴权放宽);**独占音频守护 `meow_audiod`**(M2.90:App 经 SDK `meow_audio_*` 喂 PCM,守护独占 `hw:0,0`——DAC 原生率跟随无 SRC、格式归一、4.4/3.5 路由自动跟随插孔、抢占+EOF 回收、CLI status/tone/route/vol,规范 `devdocs/plan/AUDIOD_DESIGN.md`);系统级崩溃捕获 `meow_crash` + App 崩溃直报;.mpk **Ed25519 签名验签** `meow_verify`(见 §2.9);**网络管理服务 `meow_netmgrd`**(M6.0 期1 / M6.1 期3:接口统一层/连接普查三实体/DNS 代理/策略引擎防自锁,HibyOS 只读)与**功耗管理服务 `meow_powermgr`**(M6.0 期1 / M6.1 期2:功耗查看/分解/历史/事件,HibyOS 只读);MeowPanel 外部管理面板(HTTP/JSON 后端 + Web 前端,支持可选密码鉴权 + 4 位 PIN 访问级鉴权 + 首页仪表盘 + 字体库 tar.gz 导入导出,见 §2.10)。
- **媒体会话 / Now Playing**:`MSG_META`/`MSG_PLAYCTL`(0x72/0x73)媒体会话(最近活跃源,30s 超时回收)+ 通知中心**媒体卡片** + 主界面左滑 **Now Playing 大页**;媒体键路由到最近活跃媒体会话。 - **媒体会话 / Now Playing**:`MSG_META`/`MSG_PLAYCTL`(0x72/0x73)媒体会话(最近活跃源,30s 超时回收)+ 通知中心**媒体卡片** + 主界面左滑 **Now Playing 大页**;媒体键路由到最近活跃媒体会话。
- **应用生态**:**流媒体客户端 dev.player.ncm**(`core/`:mbedtls+jsmn+qrcodegen+minimp3 ≈438KB;复古 UI:登录二维码/我创建的·我收藏的双页签/搜索/歌单详情/黑胶播放页/设置,登录 803 已通;二期:专辑封面/歌词后台加载/大歌单分页;三期:歌单真分页/真实专辑封面/歌词锁修复/搜索接拼音 IME 中文搜索/设置页(音质 5 档+缓存上限+清理缓存)/缓存 LRU 淘汰接生产路径/文案全中文;三期续:歌曲对象瘦身 1324B→608B+256 首滑动窗口(任意长度歌单)/封面与缓冲 UX 修复(消除 worker 忙等 100% CPU)/FLAC 无损(dr_flac)+缓存键=歌曲 ID+音质档位/物理播放键 toggle 全链路)。**A2 起音频输出走 `meow_audiod`**(SINK_AUDIOD 默认后端,SDK `meow_audio_*` 客户端,被抢占回调→暂停;旧 ALSA 直开仅 `MEOW_AUDIO_DIRECT=1` 调试);外置**系统文件管理器 os.meow.files**;`meow_ui` SDK 配套结构化列表 `W_LISTVIEW`、通用长按、SDK nav/media 封装、视图框架(可嵌套 view + 事件路由 + 绘制期 clip);App 通知查询/清除 IPC(0x25-27)与**点击通知跳转路由**(route_status)。 - **应用生态**:**流媒体客户端 dev.player.ncm**(`core/`:mbedtls+jsmn+qrcodegen+minimp3 ≈438KB;复古 UI:登录二维码/我创建的·我收藏的双页签/搜索/歌单详情/黑胶播放页/设置,登录 803 已通;二期:专辑封面/歌词后台加载/大歌单分页;三期:歌单真分页/真实专辑封面/歌词锁修复/搜索接拼音 IME 中文搜索/设置页(音质 5 档+缓存上限+清理缓存)/缓存 LRU 淘汰接生产路径/文案全中文;三期续:歌曲对象瘦身 1324B→608B+256 首滑动窗口(任意长度歌单)/封面与缓冲 UX 修复(消除 worker 忙等 100% CPU)/FLAC 无损(dr_flac)+缓存键=歌曲 ID+音质档位/物理播放键 toggle 全链路;2026-09-02 批次:真机四连症状(豆腐/歌词一行/封面加载/音量键 SIGKILL)+返回首页竞态 staging+内存瘦身(封面 8.28MB→0.78MB)+流媒体专项六项(档位保真/封面 4xx 不重试/收藏显隐/缓存命名迁移/topbar 位图图标)+三死因闭环(OOM/误杀/歌词栈溢出)+封面链分诊+风控加固(接口 120s 缓存+游客令牌))。**A2 起音频输出走 `meow_audiod`**(SINK_AUDIOD 默认后端,SDK `meow_audio_*` 客户端,被抢占回调→暂停;旧 ALSA 直开仅 `MEOW_AUDIO_DIRECT=1` 调试);外置**系统文件管理器 os.meow.files**;`meow_ui` SDK 配套结构化列表 `W_LISTVIEW`、通用长按、SDK nav/media 封装、视图框架(可嵌套 view + 事件路由 + 绘制期 clip);App 通知查询/清除 IPC(0x25-27)与**点击通知跳转路由**(route_status)。
- **进程隔离**:系统 UI 渲染进程与 App 进程相互独立,App 卡死不会冻结整个 UI。 - **进程隔离**:系统 UI 渲染进程与 App 进程相互独立,App 卡死不会冻结整个 UI。
- **包管理**:`nyai`(固件内置 `/usr/bin/nyai`)支持 .mpk 安装/升级/导出/列表/索引,走 **version_code 安卓式版本规则**(缺 code 拒装、防降级)+ 签名分级(有签必验、`os.meow.*` 无签拒装、第三方直装告警)+ 导出过滤与体检。 - **包管理**:`nyai`(固件内置 `/usr/bin/nyai`)支持 .mpk 安装/升级/导出/列表/索引,走 **version_code 安卓式版本规则**(缺 code 拒装、防降级)+ 签名分级(有签必验、`os.meow.*` 无签拒装、第三方直装告警)+ 导出过滤与体检。
@@ -116,7 +116,8 @@ init (rcS)
- **M2.89/90 新增**:**开机选单抢屏回归修复**(sysui S70 早拉 launcher 误入主屏→改怠速等 mode 文件,HibyOS 选单/热键链路恢复);**watchdog SIGUSR1 仅裸沉浸 App** + SDK sigusr1 护栏(修框架 App 误杀);**amsd 失联三修**(陈旧 revents 丢连接/收发超时/自动重连);**MIUIx 顶级主题**(ui.style 一键切换,暖底橙调大圆角);**meow_audiod 独占音频守护**(A1 全量,含 SDK 客户端与 `meow_audio` CLI;meow_route 并入退役);**MeowPanel 字体库 tar.gz 导入/导出** + 文件管理自然排序;**流媒体客户端**:搜索接拼音 IME、设置页(音质/缓存上限/清理缓存)、缓存 LRU 淘汰接线、文案全中文。 - **M2.89/90 新增**:**开机选单抢屏回归修复**(sysui S70 早拉 launcher 误入主屏→改怠速等 mode 文件,HibyOS 选单/热键链路恢复);**watchdog SIGUSR1 仅裸沉浸 App** + SDK sigusr1 护栏(修框架 App 误杀);**amsd 失联三修**(陈旧 revents 丢连接/收发超时/自动重连);**MIUIx 顶级主题**(ui.style 一键切换,暖底橙调大圆角);**meow_audiod 独占音频守护**(A1 全量,含 SDK 客户端与 `meow_audio` CLI;meow_route 并入退役);**MeowPanel 字体库 tar.gz 导入/导出** + 文件管理自然排序;**流媒体客户端**:搜索接拼音 IME、设置页(音质/缓存上限/清理缓存)、缓存 LRU 淘汰接线、文案全中文。
- **M2.91-96 新增**:**audiod 开机武装 hbc3000 FPGA**(路由线程启动无条件写 Output Port Switch,根治「未烧 FPGA 时 PCM 第二次 start 内核死锁」);**svc_power 充电态权威链**(mp2731-charger/status,修 battery/status 恒 Discharging)+ 状态栏充电闪电图标;**amsd 注册自愈**(开机早于卡挂载扫空→3s 快重试+30s 合并重扫+`am rescan`);**Now Playing 死循环修复**(空态 100% CPU/卡死)+ NP 页电源键/自动息屏;**插孔消抖**(4.4/3.5 插拔 ADC 幽灵音量键:launcher/watchdog/SDK 三路 800ms 消抖窗 + ramp 3s 上限);**audiod 长流护栏 + 几何收窄 period=1024×4**(根治长流 ~12s 停摆:ring 有界等待/timedwait/popen 有界收割/O_NONBLOCK+poll 写/wedge 自救/心跳 watchdog);**watchdog `wd_vol_save` O_TRUNC 毁 settings.conf 修复**(读改写单键+去重);**音量反转四路统一**(CS43198 音量寄存器=衰减量:0 最响/255 静音,launcher/audiod/watchdog/SDK 统一 `dac=255-pct*255/100`);**炸耳安全修复**(`dac_vol_mute` 旧写 0=最大响度 → 改 255 真静音);**SDK 插孔消抖补齐**(meow_ui.a 12cdd5d7)+ **物理播放/暂停键(164) 改发 PLAYCTL cmd=6 toggle** + App 前台状态栏音量%实时刷新。 - **M2.91-96 新增**:**audiod 开机武装 hbc3000 FPGA**(路由线程启动无条件写 Output Port Switch,根治「未烧 FPGA 时 PCM 第二次 start 内核死锁」);**svc_power 充电态权威链**(mp2731-charger/status,修 battery/status 恒 Discharging)+ 状态栏充电闪电图标;**amsd 注册自愈**(开机早于卡挂载扫空→3s 快重试+30s 合并重扫+`am rescan`);**Now Playing 死循环修复**(空态 100% CPU/卡死)+ NP 页电源键/自动息屏;**插孔消抖**(4.4/3.5 插拔 ADC 幽灵音量键:launcher/watchdog/SDK 三路 800ms 消抖窗 + ramp 3s 上限);**audiod 长流护栏 + 几何收窄 period=1024×4**(根治长流 ~12s 停摆:ring 有界等待/timedwait/popen 有界收割/O_NONBLOCK+poll 写/wedge 自救/心跳 watchdog);**watchdog `wd_vol_save` O_TRUNC 毁 settings.conf 修复**(读改写单键+去重);**音量反转四路统一**(CS43198 音量寄存器=衰减量:0 最响/255 静音,launcher/audiod/watchdog/SDK 统一 `dac=255-pct*255/100`);**炸耳安全修复**(`dac_vol_mute` 旧写 0=最大响度 → 改 255 真静音);**SDK 插孔消抖补齐**(meow_ui.a 12cdd5d7)+ **物理播放/暂停键(164) 改发 PLAYCTL cmd=6 toggle** + App 前台状态栏音量%实时刷新。
- **M6.0-6.1 新增**:**网络管理服务 `meow_netmgrd`**(期1 接口统一层 WiFi/BT/rfkill/IP/DNS 只读 + 期2 连接普查三实体(app:/svc:/proc:)+DNS 代理 127.0.0.1:53 双行 resolv 零断流 + 期3 策略引擎防自锁(dropbear/wpa_supplicant/udhcpc 等拒 block)/SOCK_DESTROY 真机 no-op→仅 DNS 层生效/面板白名单/WiFi save_config;CLI `meow_net`,M6.0 期1/M6.1 期3,设计见 `devdocs/plan/NETMGR_DESIGN.md`);**功耗管理服务 `meow_powermgr`**(期0 调研 current_now/cpufreq 不存在/背光 0-101 + 期1 权威充电链复用/经验模型 14 系数 + 期2 history 30s 环形/top 功耗分解/events/mp2731 current_now 实测充电功率(放电仍 estimated);CLI `meow_power`,M6.0 期1/M6.1 期2,设计见 `devdocs/plan/POWER_MANAGER_DESIGN.md`);**设置页迁 netmgr IPC + WiFi 新网络录入 UI**(扫 SSID→IME 输密码→connect,286);**服务名统一 meow_***(S89 迁移 audiod.conf/mdnsd.conf→meow_audiod.conf/meow_mdns.conf,用户定案 cd4e2c2);**MeowPanel 增强**(4 位 PIN 访问级鉴权 + 首页仪表盘 `/api/overview` + 电源/进程服务页 + 系统页补强,PANEL_ENHANCE_PLAN 批1)。 - **M6.0-6.1 新增**:**网络管理服务 `meow_netmgrd`**(期1 接口统一层 WiFi/BT/rfkill/IP/DNS 只读 + 期2 连接普查三实体(app:/svc:/proc:)+DNS 代理 127.0.0.1:53 双行 resolv 零断流 + 期3 策略引擎防自锁(dropbear/wpa_supplicant/udhcpc 等拒 block)/SOCK_DESTROY 真机 no-op→仅 DNS 层生效/面板白名单/WiFi save_config;CLI `meow_net`,M6.0 期1/M6.1 期3,设计见 `devdocs/plan/NETMGR_DESIGN.md`);**功耗管理服务 `meow_powermgr`**(期0 调研 current_now/cpufreq 不存在/背光 0-101 + 期1 权威充电链复用/经验模型 14 系数 + 期2 history 30s 环形/top 功耗分解/events/mp2731 current_now 实测充电功率(放电仍 estimated);CLI `meow_power`,M6.0 期1/M6.1 期2,设计见 `devdocs/plan/POWER_MANAGER_DESIGN.md`);**设置页迁 netmgr IPC + WiFi 新网络录入 UI**(扫 SSID→IME 输密码→connect,286);**服务名统一 meow_***(S89 迁移 audiod.conf/mdnsd.conf→meow_audiod.conf/meow_mdns.conf,用户定案 cd4e2c2);**MeowPanel 增强**(4 位 PIN 访问级鉴权 + 首页仪表盘 `/api/overview` + 电源/进程服务页 + 系统页补强,PANEL_ENHANCE_PLAN 批1)。
- **M6.2-6.4 新增(SDK 演进批次,meow_ui.a 逐批重链四 App,API 全部追加式零改动)**:**公共头拆分**(278:`meow_ui.h` 922→67 行伞头 + `include/` 16 子头,API 零改动、`meow_ui.a` md5 不变、三 App 免重链);**布局/滚动/动画基座**(292:`meow_box` 线性布局纯计算器(固定/weight/wrap/对齐/嵌套,opt-in `meow_view_set_layout`)+ `meow_scroll` 滚动物理(速度采样+fling+边界回弹+snap)+ `meow_anim` 动画基座(静态池≤16+缓动+脏区联动,挂 on_tick 零开销));**事件分发形式化**(293 §6.4:单一仲裁者——z 序自顶向下命中+模态哨兵+down 捕获+唯一焦点,dialog/sheet/list/scroll 已迁,穿透矩阵 M1-M4 全 PASS);**ListView 虚拟化**(295 §5.5:vsource count/bind 数据源+固定 item 池(视口+2)+多行富 item+完全自绘钩子);**字符串资源 i18n**(299 §13:`meow_str`/`meow_strf`/`meow_str_set_locale`,内嵌 zh_cn/en_us 双语+TF 覆盖表+locale 持久化);**sb_icons 动作图标 + topbar 位图**(307:15 个 MD3 动作图标 `MEOW_ICON_*` + `meow_topappbar_set_item_icon`);**`meow_img_downscale`**(308:图片降采样 ≤maxdim,ncm 封面 8.28MB→0.78MB)。详见 `MEOW_APP_SDK.md` §5.5/§6.4/§12/§13 与 `docs/MEOWOS_SPEC_REF.md` §3。 - **M6.2-6.4 新增(SDK 演进批次,meow_ui.a 逐批重链四 App,API 全部追加式零改动)**:**公共头拆分**(278:`meow_ui.h` 922→67 行伞头 + `include/` 16 子头,API 零改动、`meow_ui.a` md5 不变、三 App 免重链);**布局/滚动/动画基座**(292:`meow_box` 线性布局纯计算器(固定/weight/wrap/对齐/嵌套,opt-in `meow_view_set_layout`)+ `meow_scroll` 滚动物理(速度采样+fling+边界回弹+snap)+ `meow_anim` 动画基座(静态池≤16+缓动+脏区联动,挂 on_tick 零开销));**事件分发形式化**(293 §6.4:单一仲裁者——z 序自顶向下命中+模态哨兵+down 捕获+唯一焦点,dialog/sheet/list/scroll 已迁,穿透矩阵 M1-M4 全 PASS);**ListView 虚拟化**(295 §5.5:vsource count/bind 数据源+固定 item 池(视口+2)+多行富 item+完全自绘钩子);**字符串资源 i18n**(299 §13:`meow_str`/`meow_strf`/`meow_str_set_locale`,内嵌 zh_cn/en_us 双语+TF 覆盖表+locale 持久化);**sb_icons 动作图标 + topbar 位图**(307:15 个 MD3 动作图标 `MEOW_ICON_*` + `meow_topappbar_set_item_icon`);**`meow_img_downscale`**(308:图片降采样 ≤maxdim,流媒体客户端封面 8.28MB→0.78MB)。详见 `MEOW_APP_SDK.md` §5.5/§6.4/§12/§13 与 `docs/MEOWOS_SPEC_REF.md` §3。
- **M6.5-6.6 新增**:**SDK 矢量字**(316:`meow_ft_*` §10.1——把阅读器 R1/R2 已验证的 FreeType 管线整体上收到 SDK,按需读文件零整载 + glyph LRU 512 + 灰阶 blend565,与位图字库**并存**、App 显式调 `meow_ft_*` 才用,加载失败/无卡自动降级位图(不豆腐不崩);不调 ft 的 App **链接零增量**(独立 .o + vendor 裁剪构建);**SDK 演进主体收官**);**audiod 孤儿会话两段式回收**(315,M6.5:客户端崩溃/OOM 杀(sig=9)/正常退出后会话完整回收,STATE 回干净无流基线);**流媒体客户端 2026-09-02 批次**:**SIGSEGV 根因**(314:歌词解析栈上 227KB 临时数组 vs 128KB 线程栈→挪堆,真机复现修前 3.7s/修后连播两次过);**封面链分诊与修复**(317:Referer+桌面 UA 解 403 + webp 魔数内容型先判不解码 + 200 解码失败=源站死对象返 JSON 错误体实锤 + 死链/403/webp 幂等快跳不重试 + 缩略图 `param=300y300`)+**封面死链兜底链**(原 picUrl 失败→web 端 song/detail 免登录重取活链→歌单封面兜底)+**歌词页封面等比居中**(contain,四周主题底,方图不再变形);**`track/all` 接口验证否决**(318:该接口在服务端不存在,8 形态全业务码 404,维持 detail+song_detail 现状);**外部接口地图**(319:流媒体客户端外部 API 调研笔记落盘 `devdocs/plan/`);**风控加固**(320:接口响应 120s 短 TTL 缓存 + 游客 MUSIC_A 匿名令牌 + 死代码清理)。详见 `MEOW_APP_SDK.md` §10.1 与 `docs/MEOWOS_SPEC_REF.md` §3.5。
- **M2.80-83 已落地**:M3 导航栈+M5 通知跳转(M2.80)、媒体会话+Now Playing(M2.81)、SDK nav/media 封装(M2.82)、字库启动竞态修复(M2.83)。 - **M2.80-83 已落地**:M3 导航栈+M5 通知跳转(M2.80)、媒体会话+Now Playing(M2.81)、SDK nav/media 封装(M2.82)、字库启动竞态修复(M2.83)。
- 既有 `meow_btn/slider/switch/list_create` 签名一字不改(向后兼容),Options/状态机走新增挂载器。 - 既有 `meow_btn/slider/switch/list_create` 签名一字不改(向后兼容),Options/状态机走新增挂载器。
+5 -5
View File
@@ -1,12 +1,12 @@
# MeowOS 固件内置(板载)二进制/组件清单 # MeowOS 固件内置(板载)二进制/组件清单
> **本文件由 `scripts/build/fw_content.conf` 生成/手工同步——改固件内容改 conf,别改本文件。** > **当前基线:M6.6(0.8.6)**。**本文件由 `scripts/build/fw_content.conf` 生成/手工同步——改固件内容改 conf,别改本文件。**
> 基线 = 官方 squashfs 解包 + 下表组件。打包入口 `scripts/build/build_fw_apps.sh`(见 scripts/build/README.md)。 > 基线 = 官方 squashfs 解包 + 下表组件。打包入口 `scripts/build/build_fw_apps.sh`(见 scripts/build/README.md)。
| 固件内路径 | 仓库源 | 说明 | | 固件内路径 | 仓库源 | 说明 |
|---|---|---| |---|---|---|
| `/usr/bin/meow_bootmenu` | `patch_v2/bootmenu/meow_bootmenu` | 引导选单 M2.85(sysui让位 agent-216) | | `/usr/bin/meow_bootmenu` | `patch_v2/bootmenu/meow_bootmenu` | 引导选单 M2.85(sysui让位 agent-216) |
| `/usr/bin/meow_launcherd` | `patch_v2/meow_launcherd/meow_launcherd` | 主屏 launcher M6.1(M4 后台播放+depends+274 amsd 拉起修复+286 设置页迁 netmgr IPC/WiFi 录入 UI+服务名统一 start meow_audiod) | | `/usr/bin/meow_launcherd` | `patch_v2/meow_launcherd/meow_launcherd` | 主屏 launcher M6.6(M6.4 全量+310 三期:App 内手动息屏也触发锁屏+锁屏脏区全屏不透明底+300ms 重铺) |
| `/usr/bin/meow_watchdog` | `patch_v2/meow_watchdog/meow_watchdog` | 应用看门狗 M2.97(音量反转 + DS1039 平方锥度 + 插孔消抖) | | `/usr/bin/meow_watchdog` | `patch_v2/meow_watchdog/meow_watchdog` | 应用看门狗 M2.97(音量反转 + DS1039 平方锥度 + 插孔消抖) |
| `/usr/bin/meow_svcd` | `patch_v2/meow_svcd/meow_svcd` | 服务管理器 M2.77(+崩溃上报 meow_crash agent-187) | | `/usr/bin/meow_svcd` | `patch_v2/meow_svcd/meow_svcd` | 服务管理器 M2.77(+崩溃上报 meow_crash agent-187) |
| `/usr/bin/meow_mdns` | `mips-repo/bins/meow_mdns/bin/meow_mdns` | mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194) | | `/usr/bin/meow_mdns` | `mips-repo/bins/meow_mdns/bin/meow_mdns` | mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194) |
@@ -16,15 +16,15 @@
| `/usr/bin/meow_verify` | `patch_v2/meow_verify/meow_verify` | II期验签 2B(多公钥+v2签名块 agent-221) | | `/usr/bin/meow_verify` | `patch_v2/meow_verify/meow_verify` | II期验签 2B(多公钥+v2签名块 agent-221) |
| `/usr/bin/meow_crash` | `patch_v2/meow_crash/meow_crash` | 系统级崩溃捕获 (agent-187) | | `/usr/bin/meow_crash` | `patch_v2/meow_crash/meow_crash` | 系统级崩溃捕获 (agent-187) |
| `/usr/bin/meow_svc_perf` | `patch_v2/meow_svc_perf/meow_svc_perf` | 性能专项服务 M2.75(net_json 补 network 闭合括号,修 /api/system JSON 解析失败) | | `/usr/bin/meow_svc_perf` | `patch_v2/meow_svc_perf/meow_svc_perf` | 性能专项服务 M2.75(net_json 补 network 闭合括号,修 /api/system JSON 解析失败) |
| `/usr/bin/meow_audiod` | `patch_v2/meow_audiod/meow_audiod` | 独占音频守护 M2.97(+DAC 数字域电平表 rms/peak + 1s 监控日志 audio_monitor_<bootts>.log + DS1039 平方锥度音量映射) | | `/usr/bin/meow_audiod` | `patch_v2/meow_audiod/meow_audiod` | 独占音频守护 M6.5(M6.0 全量+315 孤儿会话两段式回收:客户端崩溃/OOM 杀后 STATE 回干净无流基线) |
| `/usr/bin/meow_audio` | `patch_v2/meow_audiod/meow_audio` | audiod 用户侧 CLI M2.97(+monitor 实时电平表/文本电平条;status 补 rms/peak) | | `/usr/bin/meow_audio` | `patch_v2/meow_audiod/meow_audio` | audiod 用户侧 CLI M2.97(+monitor 实时电平表/文本电平条;status 补 rms/peak) |
| `/usr/bin/meow_powermgr` | `patch_v2/meow_powermgr/meow_powermgr` | 功耗管理专项服务期2 M6.1(期1+history/top/events+mp2731 current_now 实测充电功率+WiFi 未关联档/BT rfkill 细化+系数路径 /data/meow/powermgr/;IPC 0xD0-D7) | | `/usr/bin/meow_powermgr` | `patch_v2/meow_powermgr/meow_powermgr` | 功耗管理专项服务期2 M6.1(期1+history/top/events+mp2731 current_now 实测充电功率+WiFi 未关联档/BT rfkill 细化+系数路径 /data/meow/powermgr/;IPC 0xD0-D7) |
| `/usr/bin/meow_power` | `patch_v2/meow_powermgr/meow_powermgr` | meow_powermgr 的 CLI 形态(同二进制双形态,argv[0]=meow_power 即 CLI:status/estimate/model/history/top/events,policy 期3桩) | | `/usr/bin/meow_power` | `patch_v2/meow_powermgr/meow_powermgr` | meow_powermgr 的 CLI 形态(同二进制双形态,argv[0]=meow_power 即 CLI:status/estimate/model/history/top/events,policy 期3桩) |
| `/usr/bin/meow_netmgrd` | `patch_v2/meow_netmgrd/meow_netmgrd` | 网络管理服务期3 M6.1(期1 接口层+期2 连接普查/DNS 代理+期3 策略引擎防自锁/SOCK_DESTROY 实测 no-op 记档/面板白名单/WiFi save_config;IPC 0xE0-EB;agent-276) | | `/usr/bin/meow_netmgrd` | `patch_v2/meow_netmgrd/meow_netmgrd` | 网络管理服务期3 M6.1(期1 接口层+期2 连接普查/DNS 代理+期3 策略引擎防自锁/SOCK_DESTROY 实测 no-op 记档/面板白名单/WiFi save_config;IPC 0xE0-EB;agent-276) |
| `/usr/bin/meow_net` | `patch_v2/meow_netmgrd/meow_netmgrd` | meow_netmgrd 的 CLI 形态(同二进制双形态,argv[0]=meow_net 即 CLI:status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help) | | `/usr/bin/meow_net` | `patch_v2/meow_netmgrd/meow_netmgrd` | meow_netmgrd 的 CLI 形态(同二进制双形态,argv[0]=meow_net 即 CLI:status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help) |
| `/etc/init.d/S70meow_sysui` | `patch_v2/meow_sysui/S70meow_sysui` | sysui 自启 M2.85(launcher.conf enabled=1+迁移) | | `/etc/init.d/S70meow_sysui` | `patch_v2/meow_sysui/S70meow_sysui` | sysui 自启 M2.85(launcher.conf enabled=1+迁移) |
| `/etc/init.d/S89meow_svcd` | `patch_v2/meow_svcd/S89meow_svcd` | svcd 自启 M6.1(+服务名统一 meow_*:旧 audiod.conf/mdnsd.conf 迁移为 meow_audiod.conf/meow_mdns.conf,用户定案) | | `/etc/init.d/S89meow_svcd` | `patch_v2/meow_svcd/S89meow_svcd` | svcd 自启 M6.2(+amsd.conf 热更 exec→/usr/bin 迁移) |
| `/usr/bin/meow_amsd` | `patch_v2/meow_amsd/meow_amsd` | 活动管理器 M2.91(注册表自愈:卡未挂载扫空 3s 快重试+30s 合并重扫+am rescan;兼容旧 launcher 5 段 EV LAUNCH;agent-250);M6.0 待打包:am start busy 识别修复(对照 launcher ACK 正幅度 busy=8,bool 误判二补 0xFFFFFFF8 导致 busy 落入 launcher offline) | | `/usr/bin/meow_amsd` | `patch_v2/meow_amsd/meow_amsd` | 活动管理器 M6.2(注册表自愈 3s 快重试+30s 合并重扫+am rescan + busy 识别修复 + 显示名 UTF-8 整序列 name[49] 修面板 overview 非法 UTF-8) |
| `/usr/bin/am` | `patch_v2/meow_amsd/am` | amsd 用户侧CLI(+resolve/picker/rescan) | | `/usr/bin/am` | `patch_v2/meow_amsd/am` | amsd 用户侧CLI(+resolve/picker/rescan) |
| `/etc/init.d/S90meow_bootmenu` | `patch_v2/bootmenu/S90meow_bootmenu` | bootmenu 自启 M2.85(注释同步) | | `/etc/init.d/S90meow_bootmenu` | `patch_v2/bootmenu/S90meow_bootmenu` | bootmenu 自启 M2.85(注释同步) |
| `/etc/init.d/S92_03_start_music_player` | `patch_v2/bootmenu/S92_03_start_music_player` | §4.3 兜底 patch(rcS 正常路径被 S90 阻塞不执行) | | `/etc/init.d/S92_03_start_music_player` | `patch_v2/bootmenu/S92_03_start_music_player` | §4.3 兜底 patch(rcS 正常路径被 S90 阻塞不执行) |
+7 -6
View File
@@ -14,7 +14,7 @@
- `/etc/meowos_version`:版本唯一来源(launcher 运行时 `load_meowos_version` 读;`MEOWOS_VERSION` 宏仅作 dev 占位兜底)`[DEV_NOTES #4]` - `/etc/meowos_version`:版本唯一来源(launcher 运行时 `load_meowos_version` 读;`MEOWOS_VERSION` 宏仅作 dev 占位兜底)`[DEV_NOTES #4]`
- **`/data/meow_boot_default`:开机默认权威标记(O_TRUNC 单值:`0`=MeowOS / `1`=HiByOS)**。由 launcher `meow_settings_save()` 在保存 `boot.default` 时同步写;bootmenu `set_boot_default_meow()`(写 0)/ launcher `set_boot_default_hiby()`(写 1)同文件同语义;bootmenu 开机读它定默认;init 读入不触发、不反向覆盖;`meow.conf` 不再承担 boot_default `[M2.61 同步修复][README][meow_settings.c][meow_bootmenu.c]` - **`/data/meow_boot_default`:开机默认权威标记(O_TRUNC 单值:`0`=MeowOS / `1`=HiByOS)**。由 launcher `meow_settings_save()` 在保存 `boot.default` 时同步写;bootmenu `set_boot_default_meow()`(写 0)/ launcher `set_boot_default_hiby()`(写 1)同文件同语义;bootmenu 开机读它定默认;init 读入不触发、不反向覆盖;`meow.conf` 不再承担 boot_default `[M2.61 同步修复][README][meow_settings.c][meow_bootmenu.c]`
- `/tmp`:tmpfs,开机清空;开机模式标记 `/tmp/meow_boot_mode`、电源菜单 `/tmp/meow_power_menu{,_active}`、app 沉浸 `/tmp/meowapp_state`、**锁屏** `/tmp/meow_pin_unlock_once`(一次性解锁恢复口,launcher 锁屏页消费放行一次、重启自消)/`/tmp/meow_pin_locked`(电源菜单「主动锁」标志,重启消失)`[BOOT_SELECTOR §1][KEY_CONTROL §9][APPS §3.5][WORK_STATE 2026-09-02]` - `/tmp`:tmpfs,开机清空;开机模式标记 `/tmp/meow_boot_mode`、电源菜单 `/tmp/meow_power_menu{,_active}`、app 沉浸 `/tmp/meowapp_state`、**锁屏** `/tmp/meow_pin_unlock_once`(一次性解锁恢复口,launcher 锁屏页消费放行一次、重启自消)/`/tmp/meow_pin_locked`(电源菜单「主动锁」标志,重启消失)`[BOOT_SELECTOR §1][KEY_CONTROL §9][APPS §3.5][WORK_STATE 2026-09-02]`
- **锁屏 PIN(M6.2 起,与面板同源 `system.pin`,规范 `SYSTEM_SETTINGS` 锁屏小节)**:设置键 `system.pin`=`<salt_hex>:<sha256_hex(salt||pin)>`(sha256+salt,格式与面板 `panel.pin` 全等,**绝无明文**;空=未设=锁屏关;`panel.pin` 已设时锁屏接受并首次验证成功后并入本键)+`system.pin_lock_on_wake`(息屏唤醒后锁屏,int 0/1,默认 1=开;开机不锁)+`system.pin_lock_until`(错 PIN 锁定的 epoch 截止戳,持久化防 launcher 重启清零)+`system.pin_fails`(连续错 PIN 计数 0-4,达 5 触发锁定并清零,持久化)。清/改:设置「安全→锁屏 PIN」页——设/改需旧 PIN 一次、**清除免旧 PIN**(物理持机即授权,仅二次确认)、`system.pin_lock_on_wake` 开关;**兜底**:SSH root 删 `system.pin` 键即解锁(无其它后门)。`[SYSTEM_SETTINGS §1][WORK_STATE 2026-09-02]` - **锁屏 PIN(M6.2 起,与面板同源 `system.pin`,规范 `SYSTEM_SETTINGS` 锁屏小节)**:设置键 `system.pin`=`<salt_hex>:<sha256_hex(salt||pin)>`(sha256+salt,格式与面板 `panel.pin` 全等,**绝无明文**;空=未设=锁屏关;`panel.pin` 已设时锁屏接受并首次验证成功后并入本键)+`system.pin_lock_on_wake`(息屏唤醒后锁屏,int 0/1,默认 1=开;开机不锁)+`system.pin_lock_until`(错 PIN 锁定的 epoch 截止戳,持久化防 launcher 重启清零)+`system.pin_fails`(连续错 PIN 计数 0-4,达 5 触发锁定并清零,持久化)。清/改:设置「安全→锁屏 PIN」页——设/改需旧 PIN 一次、**清除免旧 PIN**(物理持机即授权,仅二次确认)、`system.pin_lock_on_wake` 开关;**兜底**:SSH root 删 `system.pin` 键即解锁(无其它后门)。**锁屏模态演进**:M6.4 §310 二期 **EVIOCGRAB 独占触控**(锁屏层独占 grab,下层 App 完全收不到锁屏触摸)+主界面应用名截断;M6.6 §310 三期——**App 内手动息屏也触发锁屏** + **锁屏脏区全屏不透明底** + **300ms 重铺**。`[SYSTEM_SETTINGS §1][WORK_STATE 2026-09-02]`
- 日志启动缓冲 `/tmp/meow_boot.log`(256KB 滚动,卡出现后自动迁卡)`[APPS §4.5]` - 日志启动缓冲 `/tmp/meow_boot.log`(256KB 滚动,卡出现后自动迁卡)`[APPS §4.5]`
- IPC socket:`/usr/data/meow_ipc.sock`(AF_UNIX SOCK_STREAM,0666,backlog 4)`[FRAMEWORK_DESIGN §1][WORK_STATE]` - IPC socket:`/usr/data/meow_ipc.sock`(AF_UNIX SOCK_STREAM,0666,backlog 4)`[FRAMEWORK_DESIGN §1][WORK_STATE]`
- 专项服务 IPC socket:`/usr/data/meow_perf.sock`(meow_svc_perf,收 `MSG_PERF_QUERY→RESULT`)与 `/usr/data/meow_power.sock`(meow_svc_power,收 `MSG_POWER_ACTION→STATUS`),均 0666、可 `--sock`/`MEOW_IPC_{PERF,POWER}_SOCK` 覆盖;power 服务端以 `SO_PEERCRED uid==0` 基础鉴权 `[meow_svc_perf.c][meow_svc_power.c][meow_ipc.h]` - 专项服务 IPC socket:`/usr/data/meow_perf.sock`(meow_svc_perf,收 `MSG_PERF_QUERY→RESULT`)与 `/usr/data/meow_power.sock`(meow_svc_power,收 `MSG_POWER_ACTION→STATUS`),均 0666、可 `--sock`/`MEOW_IPC_{PERF,POWER}_SOCK` 覆盖;power 服务端以 `SO_PEERCRED uid==0` 基础鉴权 `[meow_svc_perf.c][meow_svc_power.c][meow_ipc.h]`
@@ -127,8 +127,8 @@
- **兼容**:既有 `meow_btn/slider/switch/list_create` 签名一字不改(Options/状态机走新增挂载器);`meow_ui_theme`/`meow_widget` 结构变化 = **`meow_ui.a` ABI 变化** → 需同步重编 hello(§5.8.8)。 - **兼容**:既有 `meow_btn/slider/switch/list_create` 签名一字不改(Options/状态机走新增挂载器);`meow_ui_theme`/`meow_widget` 结构变化 = **`meow_ui.a` ABI 变化** → 需同步重编 hello(§5.8.8)。
- **主题增强(§8.1)**:主题 = **顶级风格族 `ui.style`(md3/miuix)× 明暗 `display.theme`(dark/light)** 共同决定「整套配色+控件形态+背景底」;`display.background` 为「style×mode」派生的**可选背景底选项集**(非独立维度);状态栏图标随 `ui.style` 换集。⚠️ **`miui`/`miuix` 命名待定案(保留,勿拍板)**:`MEOW_APP_SDK §8.1` 用 `miuix`;`SYSTEM_SETTINGS §1` 注明 `meow_settings.c g_defs` 现值 `"md3,miui"`(label "Material You,MIUI"),实现时把 `g_defs` 的 `miui` 对齐为 `miuix`(**MIUIx 未实现,当前仅 md3 生效**)。 - **主题增强(§8.1)**:主题 = **顶级风格族 `ui.style`(md3/miuix)× 明暗 `display.theme`(dark/light)** 共同决定「整套配色+控件形态+背景底」;`display.background` 为「style×mode」派生的**可选背景底选项集**(非独立维度);状态栏图标随 `ui.style` 换集。⚠️ **`miui`/`miuix` 命名待定案(保留,勿拍板)**:`MEOW_APP_SDK §8.1` 用 `miuix`;`SYSTEM_SETTINGS §1` 注明 `meow_settings.c g_defs` 现值 `"md3,miui"`(label "Material You,MIUI"),实现时把 `g_defs` 的 `miui` 对齐为 `miuix`(**MIUIx 未实现,当前仅 md3 生效**)。
### 3.5 SDK 扩展模块速查(构造/滚动/动画/i18n/图标库/事件分发/ListView 虚拟化/图片降采样) ### 3.5 SDK 扩展模块速查(构造/滚动/动画/i18n/图标库/矢量字/事件分发/ListView 虚拟化/图片降采样)
> 权威签名 = `patch_v2/sdk/include/meow_ui_{box,anim,scroll,str,input,widgets,image}.h`;蓝本 `MEOW_APP_SDK.md` §5.5/§6.4/§12/§13。**本批全部追加式 API**——既有 App/签名零改动,`meow_ui.a` 变化需重链四 App(hello/files/ncm/reader)。 > 权威签名 = `patch_v2/sdk/include/meow_ui_{box,anim,scroll,str,input,widgets,image,ft}.h`;蓝本 `MEOW_APP_SDK.md` §5.5/§6.4/§10.1/§12/§13。**本批全部追加式 API**——既有 App/签名零改动,`meow_ui.a` 变化需重链四 App(hello/files/reader/流媒体客户端)。
- **§12.1 线性布局 `meow_box`(292,纯布局计算器非控件,opt-in `meow_view_set_layout`)**:`meow_box_new(dir)`(`MEOW_BOX_H/V`)/`_free`/`_set_rect`/`_set_padding`/`_set_gap`/`_set_align(main_align,cross_align)`;子项 `meow_box_add(b,w,size,weight)`/`_add_ex`(WRAP 用 min/preferred+measure 回调)/`_add_sub`(嵌套);`size`=`MEOW_BOX_FIXED/WEIGHT/WRAP`;`align`=`START/CENTER/END/SPACE_BETWEEN/AROUND/EVENLY`、`cross`=`START/CENTER/END/STRETCH`;求解 `meow_box_arrange(b)` 把子控件 x/y/w/h 写进 `meow_widget`(`meow_widget_set_rect`)。定长 items(≤`MEOW_BOX_MAX_CHILD=24`)+嵌套深度 ≤16 静态栈,arrange 零 malloc。 - **§12.1 线性布局 `meow_box`(292,纯布局计算器非控件,opt-in `meow_view_set_layout`)**:`meow_box_new(dir)`(`MEOW_BOX_H/V`)/`_free`/`_set_rect`/`_set_padding`/`_set_gap`/`_set_align(main_align,cross_align)`;子项 `meow_box_add(b,w,size,weight)`/`_add_ex`(WRAP 用 min/preferred+measure 回调)/`_add_sub`(嵌套);`size`=`MEOW_BOX_FIXED/WEIGHT/WRAP`;`align`=`START/CENTER/END/SPACE_BETWEEN/AROUND/EVENLY`、`cross`=`START/CENTER/END/STRETCH`;求解 `meow_box_arrange(b)` 把子控件 x/y/w/h 写进 `meow_widget`(`meow_widget_set_rect`)。定长 items(≤`MEOW_BOX_MAX_CHILD=24`)+嵌套深度 ≤16 静态栈,arrange 零 malloc。
- **§12.2 动画基座 `meow_anim`(292)**:`meow_anim_start(const meow_anim_desc*)`(desc:`from/to/duration_ms/ease/update/done/ctx`;start 即 value=from+回调一次 update(0))/`_cancel`(回调 done(canceled=1))/`_active`/`_value`/`_set_region(x,y,w,h)`(动画每 tick 只 flush 影响区,不整屏);`meow_ease`=`LINEAR/OUT/IN_OUT/OVERSHOOT`+`meow_ease_apply(e,t)`;节拍 `meow_anim_tick()`(挂 on_tick / `meow_ui_feed_tick`,无动画零开销)+`meow_anim_count()`;静态池 ≤`MEOW_ANIM_MAX=16`。 - **§12.2 动画基座 `meow_anim`(292)**:`meow_anim_start(const meow_anim_desc*)`(desc:`from/to/duration_ms/ease/update/done/ctx`;start 即 value=from+回调一次 update(0))/`_cancel`(回调 done(canceled=1))/`_active`/`_value`/`_set_region(x,y,w,h)`(动画每 tick 只 flush 影响区,不整屏);`meow_ease`=`LINEAR/OUT/IN_OUT/OVERSHOOT`+`meow_ease_apply(e,t)`;节拍 `meow_anim_tick()`(挂 on_tick / `meow_ui_feed_tick`,无动画零开销)+`meow_anim_count()`;静态池 ≤`MEOW_ANIM_MAX=16`。
@@ -137,7 +137,8 @@
- **§6.4 事件分发形式化(293,单一仲裁者)**:模态作用域 `meow_ui_modal_begin/end/active/depth`(作用域存在时下层收不到触摸,未命中面板的事件由背板消费恒返回哨兵);自上而下命中 `meow_ui_hit_topdown(x,y)`/`meow_ui_widget_hit`;手势捕获 `meow_ui_gesture_begin/owner/end`(down 命中即捕获到 up,move/up 只发捕获目标);唯一焦点 `meow_ui_focus_acquire/release/owner/tap/set_lost_cb`(点外释放+回调+滚动容器转移)。传播矩阵:模态>z 序自顶向下;命中即消费;向下穿透仅当未命中。 - **§6.4 事件分发形式化(293,单一仲裁者)**:模态作用域 `meow_ui_modal_begin/end/active/depth`(作用域存在时下层收不到触摸,未命中面板的事件由背板消费恒返回哨兵);自上而下命中 `meow_ui_hit_topdown(x,y)`/`meow_ui_widget_hit`;手势捕获 `meow_ui_gesture_begin/owner/end`(down 命中即捕获到 up,move/up 只发捕获目标);唯一焦点 `meow_ui_focus_acquire/release/owner/tap/set_lost_cb`(点外释放+回调+滚动容器转移)。传播矩阵:模态>z 序自顶向下;命中即消费;向下穿透仅当未命中。
- **§5.5 ListView 虚拟化(295,W_LISTVIEW 扩展层,API 追加式)**:`meow_listview_set_vsource(lv,count_fn,bind_fn,ctx)`(count 每帧实时查、bind 仅在行进视口时调一次;count_fn/bind_fn 均非 NULL 才切 pool 模式,否则回退 src2);`meow_lv_item{title,subtitle,icon,icon_kind,right,on,enabled,section,user}`;`meow_listview_set_item_renderer(lv,lines,show_icon,show_right)`/`_set_item_tier`(单行 48/双行 56)/`_set_item_draw`(完全自绘覆盖默认 renderer,state=`MEOW_LISTVIEW_ST_{SELECTED,PRESSED,DISABLED}`);固定池=视口+2 槽,行离开视口不销毁、同 index 命中同槽不重绑;段头 `item->section=1`。 - **§5.5 ListView 虚拟化(295,W_LISTVIEW 扩展层,API 追加式)**:`meow_listview_set_vsource(lv,count_fn,bind_fn,ctx)`(count 每帧实时查、bind 仅在行进视口时调一次;count_fn/bind_fn 均非 NULL 才切 pool 模式,否则回退 src2);`meow_lv_item{title,subtitle,icon,icon_kind,right,on,enabled,section,user}`;`meow_listview_set_item_renderer(lv,lines,show_icon,show_right)`/`_set_item_tier`(单行 48/双行 56)/`_set_item_draw`(完全自绘覆盖默认 renderer,state=`MEOW_LISTVIEW_ST_{SELECTED,PRESSED,DISABLED}`);固定池=视口+2 槽,行离开视口不销毁、同 index 命中同槽不重绑;段头 `item->section=1`。
- **图标库 `sb_icons`(307,Material Symbols Rounded / MD3,单通道 alpha 32×32,生成 `tools/gen_action_icons.py`)**:索引只追加——状态栏 `MEOW_SB_ICON_WIFI=0..BATT_CHG=14` 原样保留;**动作** `MEOW_ICON_SETTINGS=15..MEOW_ICON_HEART=29`(设置/刷新/搜索/播放/暂停/上下曲/返回/关闭/添加/勾选/歌词/列表/下载/收藏),经 `meow_topappbar_set_item_icon(w,idx,MEOW_ICON_*)` 使 W_TOPAPPBAR 动作项画位图(`layout 见 meow_ui_widgets.h`)。 - **图标库 `sb_icons`(307,Material Symbols Rounded / MD3,单通道 alpha 32×32,生成 `tools/gen_action_icons.py`)**:索引只追加——状态栏 `MEOW_SB_ICON_WIFI=0..BATT_CHG=14` 原样保留;**动作** `MEOW_ICON_SETTINGS=15..MEOW_ICON_HEART=29`(设置/刷新/搜索/播放/暂停/上下曲/返回/关闭/添加/勾选/歌词/列表/下载/收藏),经 `meow_topappbar_set_item_icon(w,idx,MEOW_ICON_*)` 使 W_TOPAPPBAR 动作项画位图(`layout 见 meow_ui_widgets.h`)。
- **图片降采样 `meow_img_downscale(img,maxdim)`(308)**:把解码图降到 ≤maxdim 边长以省内存(ncm 封面 1448² RGBA 8.28MB→cap≤480px→0.78MB,-7.65MB),返回新 `meow_img*`。 - **图片降采样 `meow_img_downscale(img,maxdim)`(308)**:把解码图降到 ≤maxdim 边长以省内存(流媒体客户端封面 1448² RGBA 8.28MB→cap≤480px→0.78MB,-7.65MB),返回新 `meow_img*`。
- **§10.1 矢量字 `meow_ft_*`(316,上收阅读器已验证的 FreeType 管线,`patch_v2/sdk/meow_ui_ft.c`)**:`meow_ft_new_face(path)`(`FT_New_Face` 按需读文件零整载 anon + glyph LRU 512(key=`(px<<32)|cp`,可配 256/1024)+ 灰阶 blend565);`meow_ft_draw_*`/`meas`/`free`(App **显式**调才用,`meow_ui_text` 位图路径零改动);加载失败/无卡自动降级 `meow_font`(绝不豆腐不崩)。与位图字库**并存**;FreeType 2.14.3 vendor 进 `patch_v2/sdk/vendor/`(gitignore)+ `build_sdk.sh` 裁剪构建(`-DFT_DISABLE_ZLIB/BZIP2/PNG/HARFBUZZ/BROTLI=TRUE`,静态 musl);**不调 `meow_ft_*` 的 App 零增量**(`meow_ui_ft.o`/freetype 链接器不拉取,无任何 FT 符号)。**SDK 演进主体收官**。
--- ---
@@ -166,10 +167,10 @@
- **面板批2 + 加固(2026-09-02)**:崩溃/日志中心 + 音频路由页 + 音量写经 clamp `vol_max` + 后端补 `reboot_reason`;**JSON 输出 UTF-8 加固**(`sA_str_n` 单遍校验、非法序列换 `?`、IPC 原始 JSON 门禁降级,防任一上游坏字节拖垮整页,d7bf62f)。**overview 自校验纪律**:`/api/overview` 服务端发出前先自查(jv_parse)+ 与浏览器口径对齐的**严格平衡检查**,坏则 dump `/tmp/overview_bad.json` + 500(908fc53/67aa5fc/54e737a);前端非 JSON 自动回传原始字节到 `/api/debug/report_bad_json`(落 `/tmp/overview_client_bad.txt`,7a40586/524e5d6);**教训**:后端 `jv_parse` **容忍尾随垃圾**,浏览器 `JSON.parse` **不容忍**——net 块多写一个 `}` 即「Extra data」破页(批2 DNS 并入事故),故自校验必须严格括号/闭合平衡。`[patch_v2/meowpanel/][devdocs/plan/MEOWPANEL_PROTOCOL.md][WORK_STATE 2026-09-02]` - **面板批2 + 加固(2026-09-02)**:崩溃/日志中心 + 音频路由页 + 音量写经 clamp `vol_max` + 后端补 `reboot_reason`;**JSON 输出 UTF-8 加固**(`sA_str_n` 单遍校验、非法序列换 `?`、IPC 原始 JSON 门禁降级,防任一上游坏字节拖垮整页,d7bf62f)。**overview 自校验纪律**:`/api/overview` 服务端发出前先自查(jv_parse)+ 与浏览器口径对齐的**严格平衡检查**,坏则 dump `/tmp/overview_bad.json` + 500(908fc53/67aa5fc/54e737a);前端非 JSON 自动回传原始字节到 `/api/debug/report_bad_json`(落 `/tmp/overview_client_bad.txt`,7a40586/524e5d6);**教训**:后端 `jv_parse` **容忍尾随垃圾**,浏览器 `JSON.parse` **不容忍**——net 块多写一个 `}` 即「Extra data」破页(批2 DNS 并入事故),故自校验必须严格括号/闭合平衡。`[patch_v2/meowpanel/][devdocs/plan/MEOWPANEL_PROTOCOL.md][WORK_STATE 2026-09-02]`
- **mDNS 应答器 = `meow_mdns`(自研,已拍板替代完整 mdnsd)**:`mips-repo/bins/meow_mdns/`,**IPv4-only**(内核无 IPv6,完整 mDNSResponder/SAResponder 均 `socket(AF_INET6)` 失败),mipsel 静态 ~79KB(md5 b23de7ce)。**进固件 `/usr/bin/meow_mdns`**(不入卡),由 meow_svcd 托管(板载 `/usr/data/meow/services.d/meow_mdns.conf`,`trigger=boot`、root 即可绑 5353/组播,`cap=` 空)。功能:join `224.0.0.251:5353`,应答 `<host>.local` A(wlan0 IPv4)/`_ssh._tcp` PTR/SRV/TXT/`_services._dns-sd` PTR;支持 `MEOW_MDNS_HOST`/`_ADDR`/`_PORT`/`_TTL`/`_CF`/`_QD`/`_MCAST`/`_MIF`/`_DBG`。⚠️ **手机热点隔离**:设备→主机组播被热点丢弃,avahi 只收组播应答 → 该热点下 `avahi-resolve <host>.local` 超时(网络层限制,非应答器缺陷),主机需 DNS 兜底 `[mips-repo/bins/meow_mdns/manifest.md][meow_svcd.md]`。 - **mDNS 应答器 = `meow_mdns`(自研,已拍板替代完整 mdnsd)**:`mips-repo/bins/meow_mdns/`,**IPv4-only**(内核无 IPv6,完整 mDNSResponder/SAResponder 均 `socket(AF_INET6)` 失败),mipsel 静态 ~79KB(md5 b23de7ce)。**进固件 `/usr/bin/meow_mdns`**(不入卡),由 meow_svcd 托管(板载 `/usr/data/meow/services.d/meow_mdns.conf`,`trigger=boot`、root 即可绑 5353/组播,`cap=` 空)。功能:join `224.0.0.251:5353`,应答 `<host>.local` A(wlan0 IPv4)/`_ssh._tcp` PTR/SRV/TXT/`_services._dns-sd` PTR;支持 `MEOW_MDNS_HOST`/`_ADDR`/`_PORT`/`_TTL`/`_CF`/`_QD`/`_MCAST`/`_MIF`/`_DBG`。⚠️ **手机热点隔离**:设备→主机组播被热点丢弃,avahi 只收组播应答 → 该热点下 `avahi-resolve <host>.local` 超时(网络层限制,非应答器缺陷),主机需 DNS 兜底 `[mips-repo/bins/meow_mdns/manifest.md][meow_svcd.md]`。
- `meow_settings_*`(设置后端,已定)/`meowcli`/`meow_sys_devattr`/`meow_devattr_set` `[MEOWOS_API]` - `meow_settings_*`(设置后端,已定)/`meowcli`/`meow_sys_devattr`/`meow_devattr_set` `[MEOWOS_API]`
- **独占音频守护 `meow_audiod`(M2.90 已落地,规范 `devdocs/plan/AUDIOD_DESIGN.md`)**:板载 `/usr/bin/meow_audiod`,svcd 托管(板载 `services.d/meow_audiod.conf`,trigger=manual;launcher 确认 MeowOS 模式后拉起;**启动门控:mode≠meow → exit(0),HibyOS 下不存在**)。IPC `/usr/data/meow_audio.sock`(帧层复用 meow_ipc.h,号段 0x00C0-0x00CA:OPEN/OPEN_ACK/WRITE/PAUSE/RESUME/STOP/PREEMPTED/QUERY/STATE/ROUTE/VOLUME)。**独占+抢占**(后开赢,旧流收 PREEMPTED;socket EOF=回收;软混音已否决,留接口位)。**DAC 原生率跟随不做 SRC**;格式归一 S16 直通/S32 升位/mono 复制;切率 mute-重配-恢复。**meow_route 已并入为路由线程并退役独立服务**(⚠️ 退役服务要清板载+TF 双源 conf,否则旧 conf 会双写路由)。**CLI `meow_audio`**(root 免鉴权):`status`/`tone [freq] [ms] [rate]`(正弦测试音,排查无声不开 App)/`route <0|2|3>`/`vol [0-100]`。SDK 客户端 `meow_audio_open/write/pause/close/query/on_preempt`(`meow_ui_audio.c`,懒连接+EPIPE 标死;无 audiod → -ENOENT 不隐式直开,`MEOW_AUDIO_DIRECT=1` 仅调试)。**M2.91-97 加固批**:①**开机武装 hbc3000 FPGA**(M2.91:路由线程启动无条件写 Output Port Switch 4.4→3/3.5→2/无→4,同值先写 5 强制重烧——根治「未烧 FPGA 时 PCM 第二次 `hbc3000_start` 内核硬挂死」,调查底稿 `devdocs/plan/AUDIO_HANG_INVESTIGATION.md`)②**长流护栏**(M2.93:ring 有界等待/cond timedwait/popen 有界收割/O_NONBLOCK+poll 写/wedge 自救/心跳 watchdog)+**几何收窄 period=1024×4**(M2.94:驱动默认巨 buffer 致桥周期中断稀缺 wedge、播 ~12s 停摆;tonepcm2 矩阵 60s 零 stall 实证)③**音量反转**(M2.95:CS43198 音量寄存器=衰减量,四路统一 `dac=255-pct*255/100`)④**炸耳安全**(M2.96:`dac_vol_mute` 写 255 真静音,旧写 0=最大响度)⑤**电平监控**(261,待 M2.97 固件化:播放线程 ~100ms 窗口整数 RMS/peak dBFS(deci-dB,逐帧判边界,-990=-inf)、`MSG_AUDIO_STATE` 追加 `rms=/peak=/lvlseq=`(ABI 兼容)、流活跃时 1s 节拍写 TF `MeowOS/logs/audio_monitor_<bootts>.log`、CLI `meow_audio monitor [秒]` 文本电平条)。`[patch_v2/meow_audiod/]` - **独占音频守护 `meow_audiod`(M2.90 已落地,规范 `devdocs/plan/AUDIOD_DESIGN.md`)**:板载 `/usr/bin/meow_audiod`,svcd 托管(板载 `services.d/meow_audiod.conf`,trigger=manual;launcher 确认 MeowOS 模式后拉起;**启动门控:mode≠meow → exit(0),HibyOS 下不存在**)。IPC `/usr/data/meow_audio.sock`(帧层复用 meow_ipc.h,号段 0x00C0-0x00CA:OPEN/OPEN_ACK/WRITE/PAUSE/RESUME/STOP/PREEMPTED/QUERY/STATE/ROUTE/VOLUME)。**独占+抢占**(后开赢,旧流收 PREEMPTED;socket EOF=回收;软混音已否决,留接口位)。**DAC 原生率跟随不做 SRC**;格式归一 S16 直通/S32 升位/mono 复制;切率 mute-重配-恢复。**meow_route 已并入为路由线程并退役独立服务**(⚠️ 退役服务要清板载+TF 双源 conf,否则旧 conf 会双写路由)。**CLI `meow_audio`**(root 免鉴权):`status`/`tone [freq] [ms] [rate]`(正弦测试音,排查无声不开 App)/`route <0|2|3>`/`vol [0-100]`。SDK 客户端 `meow_audio_open/write/pause/close/query/on_preempt`(`meow_ui_audio.c`,懒连接+EPIPE 标死;无 audiod → -ENOENT 不隐式直开,`MEOW_AUDIO_DIRECT=1` 仅调试)。**M2.91-97 加固批**:①**开机武装 hbc3000 FPGA**(M2.91:路由线程启动无条件写 Output Port Switch 4.4→3/3.5→2/无→4,同值先写 5 强制重烧——根治「未烧 FPGA 时 PCM 第二次 `hbc3000_start` 内核硬挂死」,调查底稿 `devdocs/plan/AUDIO_HANG_INVESTIGATION.md`)②**长流护栏**(M2.93:ring 有界等待/cond timedwait/popen 有界收割/O_NONBLOCK+poll 写/wedge 自救/心跳 watchdog)+**几何收窄 period=1024×4**(M2.94:驱动默认巨 buffer 致桥周期中断稀缺 wedge、播 ~12s 停摆;tonepcm2 矩阵 60s 零 stall 实证)③**音量反转**(M2.95:CS43198 音量寄存器=衰减量,四路统一 `dac=255-pct*255/100`)④**炸耳安全**(M2.96:`dac_vol_mute` 写 255 真静音,旧写 0=最大响度)⑤**电平监控**(261,待 M2.97 固件化:播放线程 ~100ms 窗口整数 RMS/peak dBFS(deci-dB,逐帧判边界,-990=-inf)、`MSG_AUDIO_STATE` 追加 `rms=/peak=/lvlseq=`(ABI 兼容)、流活跃时 1s 节拍写 TF `MeowOS/logs/audio_monitor_<bootts>.log`、CLI `meow_audio monitor [秒]` 文本电平条)⑥**孤儿会话两段式回收**(315,M6.5):客户端崩溃/被杀(sig=9)/正常退出后会话完整回收(死亡即清会话+排空后清统计脚),STATE 回干净无流基线。`[patch_v2/meow_audiod/]`
- **功耗管理服务 `meow_powermgr`(期0 调研 + 期1 骨架 M6.0 已落地,期2 M6.1,规范 `devdocs/plan/POWER_MANAGER_DESIGN.md`)**:板载 `/usr/bin/meow_powermgr`,svcd 托管(板载 `services.d/meow_powermgr.conf`,`trigger=boot`;**HibyOS 模式只读降级**——只采样电池,绝不放策略/不碰 wlan0/bt/声卡)。双形态 CLI **`meow_power`**(同二进制 argv[0] 分流)。**期0 事实**(`devdocs/plan/POWER_HW_FACTS.md`):`battery/current_now` **不存在**→实时功率只能 `derived+estimated` 双轨、`cpufreq` **不存在**→省电档无降频点、**背光量程 0-101**(非 255!「亮度跳 100」=满量程、默认 101=满亮的根因)、`axp_battery` 是幻影设备、**mp2731 有 `current_now`**(充电功率可测)、rfkill×4 存在(期3 控制点)、无 thermal/hwmon。**期1**:权威充电态链复用(mp2731-charger/status)+ 经验模型 14 系数(`/data/meow/powermgr/power_model.conf` 可调)+ IPC 0x00D0-D3(QUERY/RESULT/POLICY_GET/POLICY_SET)+ CLI `status/estimate/model`。**期2(M6.1)**:`history`(**30s 环形、4h 不落盘**)+`top`(功耗分解排序,2s)+`events`(充放电/低电/亮灭屏/背光跳变事件流)+模型细化(**WiFi 未关联档**、**BT rfkill/ACL 档**)+ **mp2731 `current_now` 实测充电功率**(`charge_confidence=measured`;放电仍 `estimated`,诚实区分)。系数/状态路径 = **`/data/meow/powermgr/`**(组件持久化目录定案,SPEC_REF §1.1)。IPC 0x00D4-D7(期2 HISTORY/EVENTS)。`[patch_v2/meow_powermgr/]` - **功耗管理服务 `meow_powermgr`(期0 调研 + 期1 骨架 M6.0 已落地,期2 M6.1,规范 `devdocs/plan/POWER_MANAGER_DESIGN.md`)**:板载 `/usr/bin/meow_powermgr`,svcd 托管(板载 `services.d/meow_powermgr.conf`,`trigger=boot`;**HibyOS 模式只读降级**——只采样电池,绝不放策略/不碰 wlan0/bt/声卡)。双形态 CLI **`meow_power`**(同二进制 argv[0] 分流)。**期0 事实**(`devdocs/plan/POWER_HW_FACTS.md`):`battery/current_now` **不存在**→实时功率只能 `derived+estimated` 双轨、`cpufreq` **不存在**→省电档无降频点、**背光量程 0-101**(非 255!「亮度跳 100」=满量程、默认 101=满亮的根因)、`axp_battery` 是幻影设备、**mp2731 有 `current_now`**(充电功率可测)、rfkill×4 存在(期3 控制点)、无 thermal/hwmon。**期1**:权威充电态链复用(mp2731-charger/status)+ 经验模型 14 系数(`/data/meow/powermgr/power_model.conf` 可调)+ IPC 0x00D0-D3(QUERY/RESULT/POLICY_GET/POLICY_SET)+ CLI `status/estimate/model`。**期2(M6.1)**:`history`(**30s 环形、4h 不落盘**)+`top`(功耗分解排序,2s)+`events`(充放电/低电/亮灭屏/背光跳变事件流)+模型细化(**WiFi 未关联档**、**BT rfkill/ACL 档**)+ **mp2731 `current_now` 实测充电功率**(`charge_confidence=measured`;放电仍 `estimated`,诚实区分)。系数/状态路径 = **`/data/meow/powermgr/`**(组件持久化目录定案,SPEC_REF §1.1)。IPC 0x00D4-D7(期2 HISTORY/EVENTS)。`[patch_v2/meow_powermgr/]`
- **网络管理服务 `meow_netmgrd`(期1 M6.0 已落地,期2/期3 M6.1,规范 `devdocs/plan/NETMGR_DESIGN.md`)**:板载 `/usr/bin/meow_netmgrd`,svcd 托管(板载 `services.d/meow_netmgrd.conf`,`trigger=boot`);双形态 CLI **`meow_net`**(`status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help`)。**HibyOS 模式只读降级**(接口状态可查,绝不下发控制),RSS 预算 ≤1MB。期0 内核事实(`devdocs/plan/NETWORK_HW_FACTS.md`):**无 iptables 用户态/无 cgroup/无 conntrack → 内核级每应用管控不可行**,主杠杆 = **DNS 代理(域名级)+ 连接普查(inet_diag)+ SDK 自愿通道**;**双行 resolv.conf 崩溃零断流**。**期1 = 接口统一层**(iface 枚举+热插拔/WiFi `wpa_cli` 有界收割/BT `hciconfig`+`bluetoothctl`/rfkill/IP 路由 DNS 只读/udhcpc 续租释放仅 MeowOS)。**期2 = 连接普查 + DNS 代理**:2s `/proc/net/{tcp,udp}` 普查(inode→pid→**三实体** `app:<包名>`(查 amsd)/`svc:<服务名>`(查 svcd)/`proc:<comm>` 归因)+ DNS 代理(127.0.0.1:53,双行 resolv.conf+atexit 恢复+5s 自检,真机实测 enabled)+ 事件日志(1min 去重)+ CLI `apps/conns/top/dns`。**期3(M6.1)= 策略引擎**:`/data/meow/netmgrd/net_policy.conf`(组件持久化目录定案,SPEC_REF §1.1)读改写单键+原子写;**防自锁双层**(dropbear/wpa_supplicant/udhcpc/netmgrd/svcd/sysui/init **拒绝置 block** + 策略文件被手工改坏时的加载校验强制复位);**SOCK_DESTROY 真机实测 = no-op(内核 4.4 接受请求但不销毁 socket)→ 连接级管控不可用,仅 DNS 层生效**(`meow_net policy show` 头明示 `enforce=dns_only`);classify_exe 面板白名单 + apps 归因修复 + WiFi `save_config`。日志 `MeowOS/logs/net_<bootts>.log`(无卡降级 /tmp)。`[patch_v2/meow_netmgrd/]` - **网络管理服务 `meow_netmgrd`(期1 M6.0 已落地,期2/期3 M6.1,规范 `devdocs/plan/NETMGR_DESIGN.md`)**:板载 `/usr/bin/meow_netmgrd`,svcd 托管(板载 `services.d/meow_netmgrd.conf`,`trigger=boot`);双形态 CLI **`meow_net`**(`status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help`)。**HibyOS 模式只读降级**(接口状态可查,绝不下发控制),RSS 预算 ≤1MB。期0 内核事实(`devdocs/plan/NETWORK_HW_FACTS.md`):**无 iptables 用户态/无 cgroup/无 conntrack → 内核级每应用管控不可行**,主杠杆 = **DNS 代理(域名级)+ 连接普查(inet_diag)+ SDK 自愿通道**;**双行 resolv.conf 崩溃零断流**。**期1 = 接口统一层**(iface 枚举+热插拔/WiFi `wpa_cli` 有界收割/BT `hciconfig`+`bluetoothctl`/rfkill/IP 路由 DNS 只读/udhcpc 续租释放仅 MeowOS)。**期2 = 连接普查 + DNS 代理**:2s `/proc/net/{tcp,udp}` 普查(inode→pid→**三实体** `app:<包名>`(查 amsd)/`svc:<服务名>`(查 svcd)/`proc:<comm>` 归因)+ DNS 代理(127.0.0.1:53,双行 resolv.conf+atexit 恢复+5s 自检,真机实测 enabled)+ 事件日志(1min 去重)+ CLI `apps/conns/top/dns`。**期3(M6.1)= 策略引擎**:`/data/meow/netmgrd/net_policy.conf`(组件持久化目录定案,SPEC_REF §1.1)读改写单键+原子写;**防自锁双层**(dropbear/wpa_supplicant/udhcpc/netmgrd/svcd/sysui/init **拒绝置 block** + 策略文件被手工改坏时的加载校验强制复位);**SOCK_DESTROY 真机实测 = no-op(内核 4.4 接受请求但不销毁 socket)→ 连接级管控不可用,仅 DNS 层生效**(`meow_net policy show` 头明示 `enforce=dns_only`);classify_exe 面板白名单 + apps 归因修复 + WiFi `save_config`。日志 `MeowOS/logs/net_<bootts>.log`(无卡降级 /tmp)。`[patch_v2/meow_netmgrd/]`
- **音频硬件事实(sndprobe/tonepcm2 真机实测,2026-08-31)**:播放 PCM = `/dev/snd/pcmC0D0p`(`cs43198-hifi-0`);`pcmC0D1p`=snd-soc-dummy(勿用)。能力:S16_LE/S24_LE、1-2ch、8k-768k、buffer 2048-1048576 帧、period 512-262144。⚠️ **ALSA UAPI 两坑**(ncm 无声根因,勿再踩):①hw_params 必须「全放行」初始化(mask 全 1、interval [0,UINT_MAX],params_any 语义)再收窄——memset 0 的 interval=「只能取 0」求交必空 → HW_PARAMS 恒 EINVAL;②access/format/subformat mask 必须**先清零再单点**——留全 1 会被内核 choose 成 MMAP_INTERLEAVED,ch>1 时 write 恒 EINVAL。**CS43198 音量寄存器=衰减量(官方数据手册 DS1039 实证,用户供)**:PCM_VOLUME_A/B(0x0B/0x0C),0=0dB 满幅最大声、255=-127.5dB≈静音(0.5dB/步;DSD 通道独立 DSD_VOLUME_A/B)。**混音器 L/R Playback Volume 读回恒 0 是死镜像**(官方播放器走 sa_hgl_dma 硬直通不经此控制,HibyOS 对照实测同读 0),勿据此判音量。**音量寄存器=衰减量(0=最响 255=静音,M2.95 真机实测方向)**:四路(launcher/audio.c+audiod+watchdog+SDK vol)统一 `dac=255-pct*255/100`;mute 必须写 255 真静音(M2.96 炸耳修复)。混音器清单:numid=1/2 L/R Vol、3 Mute Output、4 Digital Filter、5 Soft Mute、6 NOS_EN、7 DRE_EN、8 Balance Lineout En、9 Output Port Switch(0 空闲/1 lineout/2 3.5/3 4.4/4 SPDIF;0 危险勿写;**5 = audiod 内部「强制重烧 FPGA」约定值**(M2.91 开机武装同值改写路径),非常规路由值,App/面板勿写)、10 DOP_EN。`[patch_v2/tools/sndprobe.c][tonepcm2.c][APPS §3.7]` - **音频硬件事实(sndprobe/tonepcm2 真机实测,2026-08-31)**:播放 PCM = `/dev/snd/pcmC0D0p`(`cs43198-hifi-0`);`pcmC0D1p`=snd-soc-dummy(勿用)。能力:S16_LE/S24_LE、1-2ch、8k-768k、buffer 2048-1048576 帧、period 512-262144。⚠️ **ALSA UAPI 两坑**(流媒体客户端无声根因,勿再踩):①hw_params 必须「全放行」初始化(mask 全 1、interval [0,UINT_MAX],params_any 语义)再收窄——memset 0 的 interval=「只能取 0」求交必空 → HW_PARAMS 恒 EINVAL;②access/format/subformat mask 必须**先清零再单点**——留全 1 会被内核 choose 成 MMAP_INTERLEAVED,ch>1 时 write 恒 EINVAL。**CS43198 音量寄存器=衰减量(官方数据手册 DS1039 实证,用户供)**:PCM_VOLUME_A/B(0x0B/0x0C),0=0dB 满幅最大声、255=-127.5dB≈静音(0.5dB/步;DSD 通道独立 DSD_VOLUME_A/B)。**混音器 L/R Playback Volume 读回恒 0 是死镜像**(官方播放器走 sa_hgl_dma 硬直通不经此控制,HibyOS 对照实测同读 0),勿据此判音量。**音量寄存器=衰减量(0=最响 255=静音,M2.95 真机实测方向)**:四路(launcher/audio.c+audiod+watchdog+SDK vol)统一 `dac=255-pct*255/100`;mute 必须写 255 真静音(M2.96 炸耳修复)。混音器清单:numid=1/2 L/R Vol、3 Mute Output、4 Digital Filter、5 Soft Mute、6 NOS_EN、7 DRE_EN、8 Balance Lineout En、9 Output Port Switch(0 空闲/1 lineout/2 3.5/3 4.4/4 SPDIF;0 危险勿写;**5 = audiod 内部「强制重烧 FPGA」约定值**(M2.91 开机武装同值改写路径),非常规路由值,App/面板勿写)、10 DOP_EN。`[patch_v2/tools/sndprobe.c][tonepcm2.c][APPS §3.7]`
- 后台权限:`MSG_HELLO/MSG_REGISTER.flags` 扩展 `MF_BACKGROUND`/`MF_PLAYBACK`(**已落地 M4**:app.json `background`/`background_audio` 字段 + MSG_REGISTER 校验链;播放中退出转后台保活见 FRAMEWORK_DESIGN §9);`PERF_BACKGROUND`/`PERF_AUDIO_BACKGROUND`(规划)`[FRAMEWORK_DESIGN 附录 A]` - 后台权限:`MSG_HELLO/MSG_REGISTER.flags` 扩展 `MF_BACKGROUND`/`MF_PLAYBACK`(**已落地 M4**:app.json `background`/`background_audio` 字段 + MSG_REGISTER 校验链;播放中退出转后台保活见 FRAMEWORK_DESIGN §9);`PERF_BACKGROUND`/`PERF_AUDIO_BACKGROUND`(规划)`[FRAMEWORK_DESIGN 附录 A]`
--- ---