• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
10 KiB
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 类型与初始化
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 存取(按类型)
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 显示中文标签)
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 变更通知
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 枚举/列表
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 导入/导出(备份)
int meow_settings_export(const char *path); /* 写一份 .conf 到 path(默认 MeowOS/backups/settings/setting.bak) */
int meow_settings_import(const char *path); /* 从 .conf 读入覆盖;逐键校验,记录损坏键(不中断) */
2.7 设置项注册(扩展规范——新增设置照此)
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(与 launchermeow_pkg_install/export同语义,支持镜像源):用法见 APPS.md 附录 §5;部署于卡MeowOS/opt/bin/nyai。
6. 扩展指南(新增功能的必读)
- 命名单一:新域前缀
meow_<域>_;键名小写点分。 - 设置项:只加
meow_setting_def(§2.7),勿动手写存取分支。 - 返回码:复用 §1,不造新码;扩展加在表尾。
- 线程/内存:设置域单写者(主循环)+ listener;跨线程用 eventfd(参考 §18.29 并发模型);字符串拷贝进
MEOW_SET_MAX_LEN缓冲。 - 持久化:只写板载
meow/settings.conf(小文件);大数据(日志/字库/媒体)留 TF 卡。 - 多端一致性:任何设置/接口改动,同步文档本文件 + 四端(实体 UI/web/CLI)。
- 单元可用性:新 API 写进
ANALYSIS.md对应 §,提供--sim/meowcli测试钩子。 - 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)
meowclisettings 命令- MeowPanel
/api/settings*(阶段 C) - 后续 notify/act/svc/media 域按本规范补充(阶段 D)