docs: 文档一致性整理 (agent-249) — 对齐 M2.90/0.7.85 + ncm A2: SDK 新增 §5.9 meow_audio_* 客户端 API + IME 九键数字盘注记; README 网易云三期+A2 audiod+PCM 挂死已知问题; APPS §3.7/§5 直开 hw:0,0 旧案标注被 meow_audiod 取代; SETTINGS audio.output/音量键 audiod 收口注记; FRAMEWORK §10.1 supervisor 树补 meow_audiod + 头部里程碑 M2.90; PLAN 头部截至 M2.90; SPEC_REF OPEN_QUESTIONS 摘要同步 (#4/#12/#17 清结)
This commit is contained in:
1 parent
697fd6ba9b
commit
57509cd582
7 files changed
+39
-8
No files matched your search
+27
-1
@@ -210,7 +210,7 @@ const char *meow_ime_text(void);
|
||||
**布局(480×720 竖屏)**:键盘占底部约 40% 高(~290px),上方为输入预览行 + 候选区。键位 40×40(够 touch target),触屏点按输入。
|
||||
**物理键辅助**(兼容未来硬件键/可访问性):方向键移动光标、播放/确认键=选择、音量=翻页。B1 以触摸为主,物理键作为可选加分项(SDK 内实现)。
|
||||
|
||||
**[B1 后续 / 不阻塞]**:剪贴板、长按重复等仍留后续。**中文拼音 IME 已落地**(M2.88,agent-229 · `e9b6b69`,设计稿 `devdocs/plan/IME_PINYIN_DESIGN.md`):`meow_pinyin.c` 静态表词库(403 音节 + 329 词,rodata ~20.5KB 零堆)+ 音节切分 DFS+联想引擎,SDK 经 `MEOW_IME_PINYIN` 尾部追加零 ABI 破坏接入(组合条 + 候选栏 + 翻页 + 中英切换,英文零回归)。
|
||||
**[B1 后续 / 不阻塞]**:剪贴板、长按重复等仍留后续。**中文拼音 IME 已落地**(M2.88,agent-229 · `e9b6b69`,设计稿 `devdocs/plan/IME_PINYIN_DESIGN.md`):`meow_pinyin.c` 静态表词库(403 音节 + 329 词,rodata ~20.5KB 零堆)+ 音节切分 DFS+联想引擎,SDK 经 `MEOW_IME_PINYIN` 尾部追加零 ABI 破坏接入(组合条 + 候选栏 + 翻页 + 中英切换,英文零回归)。**数字键盘九键布局**(M2.89,`21ff5e8`):NUM 模式改居中九键(1-9 自上而下 3×3,0 垫底居中,底行 ESC|0|退格+OK),符号行保留;宿主 test_ime_fix/test_pinyin 全 PASS。
|
||||
|
||||
> **实现对齐(M2.73,`meow_ui_ime.c`,以源码为准)**:实现与上表**关键出入**——① 键盘占底部约 **300px**(`KB_TOP=420`,720-420=300),键位 **44×36**(非 40×40);② **回显行 = 实时输入回显**(把 `g_ime_buf` 拼下划线 `"%s_"` 画在面板顶部条),**非候选/联想区**,候选区原留给中文输入法;**中文拼音 IME 已落地**(M2.88 agent-229,候选栏/组合条见 `meow_ime.c`/`meow_pinyin.c`);③ 关闭时**键盘区背景快照/恢复**(`ime_capture`/`ime_restore`,根治关闭后键盘像素残留);④ **配色走主题**(`meow_theme` 语义色,深/浅自动切),不硬编码黑底白键;⑤ **shift 切换大小写**;⑥ 阻塞 `meow_ui_text_input` 打字循环喂 `meow_ui_activity_ping`(重置息屏计时,进度条不卡死);⑦ **OK(回车)= 提交并关闭**(拷贝到 app `ctx->buf`)、**ESC(X)/ 点键盘外背景 = 取消并关闭**;非阻塞 `meow_ui_text_input_async` 用 `meow_ime_active()`/`meow_ime_text()` 轮询(同 close 语义)。上表「布局 40×40 / 物理键辅助 / 候选区」为设计稿表述,已按实际覆盖。
|
||||
|
||||
@@ -725,6 +725,32 @@ meow_widget *meow_layout_spacer(int w, int h);
|
||||
|
||||
---
|
||||
|
||||
### 5.9 音频客户端 API(`meow_audio_*`,M2.90 落地)
|
||||
|
||||
> **权威规范:`devdocs/plan/AUDIOD_DESIGN.md`**(用户定案五项决策)。**已实现**:A1(agent-244/246,audiod+CLI+SDK 客户端,M2.90 入固件)+ A2(ncm 迁 SINK_AUDIOD,e013621)。IPC 号段 `0x00C0-0x00CA` 见 `meow_ipc.h` / docs/MEOWOS_SPEC_REF §4。
|
||||
|
||||
MeowOS 的声卡由**独占音频守护 `meow_audiod`** 持有(`hw:0,0`;M2.90 入固件,svcd 托管,HibyOS 模式不启动)。**App 不再直开 ALSA**,一律经 SDK 客户端 `meow_ui_audio.c`(编进 `meow_ui.a`)喂 PCM:
|
||||
|
||||
```c
|
||||
int meow_audio_open(int rate, int ch, int fmt); /* 返回 stream_id(>0);<0=错误(-EBUSY 被占且被抢等) */
|
||||
int meow_audio_write(const void *pcm, int frames);/* 阻塞(socket 背压);返回写入帧数, <0=流已死 */
|
||||
int meow_audio_pause(int sid, int paused); /* 1=暂停 0=恢复 */
|
||||
int meow_audio_close(int sid); /* 关流 */
|
||||
int meow_audio_query(meow_audio_state *out); /* 当前流/路由/音量/underrun 快照 */
|
||||
/* 被抢占回调(可选):收到 MSG_AUDIO_PREEMPTED 时调(SDK 内部读线程分发) */
|
||||
void meow_audio_on_preempt(void (*cb)(const char *by_app, void *ctx), void *ctx);
|
||||
```
|
||||
|
||||
- **fmt 枚举**:1=S16_LE 2=S24_LE 3=S32_LE 4=FLOAT_LE(v1 实装 S16/S24/S32);服务端做**格式归一 + DAC 原生率跟随**(无 SRC,44.1-192k 全覆盖)。
|
||||
- **独占+抢占**:后开流赢,旧流收 `MSG_AUDIO_PREEMPTED`(App 收到自行暂停 UI);**socket EOF=回收**(客户端崩溃/被 SIGKILL 不泄漏)。流绑定 socket 连接而非 App 前台状态(后台播放见 AUDIOD_DESIGN §3)。
|
||||
- **懒连接 + 断线重连**:open 时连 `/usr/data/meow_audio.sock`;write 遇 EPIPE → 标记流死,App 需重新 open。**不做隐式直开回退**:audiod 不在 → open 返回 -ENOENT;调试可 `MEOW_AUDIO_DIRECT=1` 允许 App 自带直开路径(仅开发用,非正式能力)。
|
||||
- **调试 CLI**(root 免鉴权,ssh 直呼):`meow_audio status` / `meow_audio tone [freq] [ms] [rate]`(正弦测试音,排查无声不用开 App)/ `route <0|2|3>` / `vol [0-100]`。
|
||||
- **⚠️ ALSA UAPI 两坑(真机定位,App 自写直开路径时勿回退)**:① hw_params 须「全放行」初始化(params_any 语义:mask 全 1、interval [0,UINT_MAX]),memset 0 的 interval → HW_PARAMS 恒 EINVAL;② access/format/subformat mask 须**先清零再单点**,留全 1 会被 choose 成 MMAP_INTERLEAVED → write 恒 EINVAL。
|
||||
- **⚠️ 已知问题(2026-09-01 调查中)**:M2.90 内核在 `cs43198_dai_prepare` 后第二次 `hbc3000_start` 硬挂死(驱动对重复 start 不可重入);底稿 `devdocs/plan/AUDIO_HANG_INVESTIGATION.md`。
|
||||
- **ncm 迁移范式(A2,e013621)**:`ncm_app/app/play/audio_out.c` 新增 `SINK_AUDIOD` 后端(与 ALSA/FILE/NULL 并列,**默认 audiod**),被抢占回调→暂停、resume 检测流死自动重开、播放路径全量 `meow_log`;UI/缓存/解码零改动。新 App 照此接。
|
||||
|
||||
---
|
||||
|
||||
## 6. 输入层 / 生命周期(B1 部分 + B2 衔接)
|
||||
|
||||
**B1(本阶段)**:应用不再自读 `/dev/input/event*`,meow_ui 建立输入线程,把按键/触摸翻译成语义事件回调:
|
||||
|
||||
Reference in new issue
Block a user