Files
MeowOS-For-R3P2/MEOWOS_API.md
T
MeowOS Dev 245bee2946 MeowOS for HiBy R3 Pro II — 公共发布版本(历史已重置)
• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC)
• 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库)
• 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo
增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
2026-08-30 01:12:34 +08:00

182 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MeowOS API 参考(MEOWOS_API.md)
> 状态:设计稿 v1(2026-08-28)。作为后续开发(系统设置 / 通知中心 / MeowPanel / Activity 框架)的**统一 API 蓝本**。
> 原则:**命名统一、类型明确、返回码一致、可扩展**。所有新增 API 必须按本文命名与返回约定,保证多端(实体 UI / Web / CLI/MCP)一致。
---
## 0. 命名约定(全局)
| 范畴 | 规则 | 例 |
|---|---|---|
| C API 前缀(后端) | `meow_<域>_<动作>`(下划线,小写) | `meow_settings_get_int`、`meow_notify_push` |
| 域(domain) | 全局命名空间:`settings` / `notify` / `act` / `svc` / `nav` / `media` / `sys` / `panel` | — |
| 设备属性 | 属 `sys` 域子域 `device`(`meow_sys_devattr` + `meow_devattr_*`);只读属性 + 可控 kcontrol 白名单 | `meow_devattr_set("out.port", 3)` |
| 结构体 | `meow_<域>_t`(typedef 别名),字段下划线 | `struct meow_settings_bool { int v; }` |
| 枚举 | `MEOW_<域>_<NAME>` | `MEOW_BOOT_MEOW` |
| 常量/宏 | `MEOW_<DOMAIN>_<NAME>` | `MEOW_LOG_LEVEL_INFO`、`MEOW_SET_MAX_LEN` |
| 键名(设置/配置) | 小写点分:`域.子.名` | `display.brightness`、`boot.default`、`input.hotkey_seq` |
| REST 路径 | `/api/<域>/<资源>`(kebab-case 资源) | `/api/settings`、`/api/settings/export` |
| HTTP 方法 | GET=读、POST=写/动作 | — |
| 返回值(C 函数) | `int`,0=成功,负=错误码 | 见 §4 |
## 1. 返回码(统一错误码)
| 宏 | 值 | 含义 |
|---|---|---|
| `MEOW_OK` | 0 | 成功 |
| `MEOW_ERR_INVAL` | -1 | 参数/取值非法 |
| `MEOW_ERR_NOENT` | -2 | 键/资源不存在 |
| `MEOW_ERR_EXISTS` | -3 | 已存在(如重复注册) |
| `MEOW_ERR_PERM` | -4 | 无权限(本机信任模型下少用,保留) |
| `MEOW_ERR_IO` | -5 | 读写(存储/文件)失败 |
| `MEOW_ERR_NOMEM` | -6 | 内存不足 |
| `MEOW_ERR_NOTINIT` | -7 | 未初始化(如 settings 未 init) |
| `MEOW_ERR_BUSY` | -8 | 忙(如服务已运行) |
| `MEOW_ERR_TIMEOUT` | -9 | 超时 |
| `MEOW_ERR_NODEV` | -10 | 设备不存在(如无卡) |
| `MEOW_ERR_INTERNAL` | -255 | 内部错误 |
> C 函数返回上述;HTTP 层映射为 HTTP 状态码 + `{"code": <meow_err>, "msg": "..."}`。
## 2. 设置子系统 C API(`meow_settings.h`)
### 2.1 类型与初始化
```c
typedef enum { SET_INT, SET_STR, SET_ENUM, SET_BOOL } meow_set_type;
int meow_settings_init(void); /* 加载存储,注册默认;重复调用幂等 */
int meow_settings_shutdown(void); /* 保存 + 清理 */
void meow_settings_dump(const char *log_prefix); /* 调试:打印当前全部键 */
```
### 2.2 存取(按类型)
```c
int meow_settings_get_int (const char *key, int *out);
int meow_settings_get_str (const char *key, char *buf, int buf_len);
int meow_settings_get_enum(const char *key, int *out);
int meow_settings_get_bool(const char *key, bool *out);
int meow_settings_set_int (const char *key, int v); /* clamp 到取值域 */
int meow_settings_set_str (const char *key, const char *v);/* 长度截断 MEOW_SET_MAX_LEN(256) */
int meow_settings_set_enum(const char *key, int v); /* 校验枚举合法 */
int meow_settings_set_bool(const char *key, bool v);
```
- **所有 clamp/校验集中在 set**(亮度 clamp ≥ `display.brightness_min` 默认 25、枚举越界拒绝、str 截断)。
- set 成功后**自动 `settings_save()` 落盘**(板载 /usr/data/meow/settings.conf)并**通知 listener**。
### 2.3 枚举辅助(供 UI/web 显示中文标签)
```c
int meow_settings_enum_label(const char *key, int idx, char *buf, int buf_len); /* 中文标签 */
int meow_settings_enum_count(const char *key); /* 选项数 */
int meow_settings_enum_index_of_name(const char *key, const char *name); /* 名字→索引 */
void meow_settings_enum_names(const char *key, const char **out_names, int *n); /* 全名数组 */
```
### 2.4 变更通知
```c
typedef void (*meow_settings_listener)(const char *key); /* key 变化时回调,UI 据此重绘 */
int meow_settings_add_listener(meow_settings_listener cb);
int meow_settings_remove_listener(meow_settings_listener cb);
```
### 2.5 枚举/列表
```c
int meow_settings_list(int (*cb)(const char *key, meow_set_type t, void *ctx), void *ctx);
int meow_settings_get_default(const char *key, char *buf, int len); /* 默认值(复位用) */
int meow_settings_reset(const char *key); /* 单键复位默认 */
int meow_settings_reset_all(void); /* 全量复位 */
```
### 2.6 导入/导出(备份)
```c
int meow_settings_export(const char *path); /* 写一份 .conf 到 path(默认 MeowOS/backups/settings/setting.bak) */
int meow_settings_import(const char *path); /* 从 .conf 读入覆盖;逐键校验,记录损坏键(不中断) */
```
### 2.7 设置项注册(扩展规范——新增设置照此)
```c
typedef struct meow_setting_def {
const char *key; /* 如 "display.brightness" */
meow_set_type type;
const char *def; /* 默认值字符串(int/str/enum/bool 统一字符串) */
int min, max; /* SET_INT 取值域;其他 0 */
const char *enum_names; /* SET_ENUM:逗号分隔选项名,如 "panel,black" */
const char *enum_labels; /* 对应中文标签,如 "面板下电,背光全黑双击" */
} meow_setting_def;
int meow_settings_register(const meow_setting_def *def); /* 注册一个设置(启动时批量注册) */
```
- 新增设置 = 加一个 `meow_setting_def` 注册 + 存储自动处理;实体 UI / web / CLI 依据 `meow_settings_list` 与 `enum_*` 自动生成控件,**四端零新增**。
## 3. 设置存储格式
文件(板载 `/usr/data/meow/settings.conf`):
```
# meow-settings 1
display.brightness = 101
display.brightness_min = 25
display.screen_off_mode = panel
boot.default = meow
input.hotkey_seq = volup,volup,volup
log.level = info
...
```
- 单行 `key = value`;`#` 注释;未知键忽略;读入时 `clamp/校验` 与 set 一致。
## 4. Web(MeowPanel)HTTP API 映射
REST 路径,HTTP 层调 C API(本机)。
| 方法 | 路径 | C API | 说明 |
|---|---|---|---|
| GET | `/api/settings` | `meow_settings_list`+`get_*` | 返回全部键值 |
| POST | `/api/settings` | `meow_settings_set_*` | body `{key,value}` |
| GET | `/api/settings/keys` | `meow_settings_list` | 键/schema 描述(供前端生成控件) |
| POST | `/api/settings/reset` | `meow_settings_reset`/`reset_all` | body `{key?}` |
| GET | `/api/settings/export` | `meow_settings_export(path)` | 下载 settings.conf |
| POST | `/api/settings/import` | `meow_settings_import(path)` | 上传覆盖 |
| GET | `/api/status` | `meow_sys_status()` | 实时性能/电量/亮度/WiFi |
| GET | `/api/device` | `meow_sys_devattr_refresh()` | 设备属性域全量(输出口/3.5·4.4 插入/按输出口分级音量上限(增益代理)/音量/DAC/蓝牙/电源;采样率·DSD·CPU温度=`MEOW_ERR_NOENT`,见 SYSTEM_SETTINGS 附B) |
| POST | `/api/device` | `meow_devattr_set()` | body `{field,value}`;白名单可控(out.port 1-4、vol、filter/nos/dre/dop/mute、bt.powered) |
| GET | `/api/device/outport-label` | `meow_devattr_enum_label()` | `out.port` 1-4 中文标签 |
| GET | `/api/notify` | `meow_notify_list` | 通知列表 |
| POST | `/api/notify/dismiss` | `meow_notify_dismiss` | 清一条 |
| GET | `/api/screen` | `meow_screen_capture()` | 实时画面(fb → PNG) |
| POST | `/api/key` | `meow_input_inject()` | 远程按键(注:播放器级注入受内核限制,MeowOS 菜单/应用可用) |
响应统一:`{"code":0,"data":...}` 或 `{"code":-1,"msg":"..."}`。
## 5. CLI/MCP(调试/自动化)
`meowcli settings get|set|list|export|import <key> [value]`;`meowcli notify list|dismiss`;`meowcli status`。与 C API 一一对应。
**launcher 自测钩子(M2.16 渲染/刷新率调度/防抖)**:`meow_launcherd` 增加 `--scan`(`state=1 napps=0`)、`--sysdump`(含 `render: eff_rate cfg always_max frames`,eff_rate=有效帧率 / cfg=display.refresh_rate / always_max=refresh_always_max / frames=累计呈现帧数)、`--sim-vol N`(音量渐变 N=1/2/5,长按 clamp)、`--sim-hotkey/-tap/-exit[-tap]/-power-*/-no-exec`、`--appinfo <app.json>`、`--ipc-only N --ipc-sock <path>`(配合 `meow_ipc` 验 HELLO→ACK / ACT_QUERY→链路)。渲染为 **RAM 离屏后备缓冲 `back_buf` + `meow_present(vsync+原子 blit 脏区)`**,刷新率调度入 PERF_SCHEDULER.md(`meow_sched_fps()` 归口);设置键 `display.refresh_rate`(60/30/15)/`display.refresh_always_max` 见 SYSTEM_SETTINGS.md。
> 软件包管理另有独立 CLI `nyai`(与 launcher `meow_pkg_install/export` 同语义,支持镜像源):用法见 APPS.md 附录 §5;部署于卡 `MeowOS/opt/bin/nyai`。
## 6. 扩展指南(新增功能的必读)
1. **命名单一**:新域前缀 `meow_<域>_`;键名小写点分。
2. **设置项**:只加 `meow_setting_def`(§2.7),勿动手写存取分支。
3. **返回码**:复用 §1,不造新码;扩展加在表尾。
4. **线程/内存**:设置域单写者(主循环)+ listener;跨线程用 eventfd(参考 §18.29 并发模型);字符串拷贝进 `MEOW_SET_MAX_LEN` 缓冲。
5. **持久化**:只写板载 `meow/settings.conf`(小文件);大数据(日志/字库/媒体)留 TF 卡。
6. **多端一致性**:任何设置/接口改动,同步文档本文件 + 四端(实体 UI/web/CLI)。
7. **单元可用性**:新 API 写进 `ANALYSIS.md` 对应 §,提供 `--sim`/`meowcli` 测试钩子。
8. **line-out 保守默认(无实测,2026-08-29)**:`out.port=1`(line-out) 按**固定满幅电平**处理——MeowOS 侧不响应音量键、不套 lock_vol 上限,UI 标注"固定电平输出";仅设置显式开启"line-out 可调"才放开。`out.gain`(高/低) 标记 **Unsupported/只读**(选择值存 `user.ini`,读不干净、写有完整性风险,禁写);信息透出只用 `out.vol_max_headset/balance`(=lock_vol,可读)响应度分级代理。详见 SYSTEM_SETTINGS 附 B。实现前再读该节,避免与 HibyOS 播放器设定冲突。
## 7. 待实现清单(按此文档开发)
- `meow_settings` 存储+核心 API+注册机制(阶段 B2a 后端,先于阶段 B)
- 实体系统设置页(分组列表+控件,调 API)
- `meowcli` settings 命令
- MeowPanel `/api/settings*`(阶段 C)
- 后续 notify/act/svc/media 域按本规范补充(阶段 D)