/* * meow_ui_config.h — SDK 应用配置读写(§9.2,meow_config_*,M2.x 最小可用版)。 * * 原 meow_ui.h 拆分的一部分(config 模块)。App 自有配置读写:与系统设置 meow_settings_* * (板载 settings.conf、系统级、带 schema)明确区分——这是单个 App 自己的键值偏好, * 落 TF 数据目录,不占板载、无 schema。返回码 MEOW_CFG_* 见下。 */ #ifndef MEOW_UI_CONFIG_H #define MEOW_UI_CONFIG_H #ifdef __cplusplus extern "C" { #endif /* meow_config_*(§9.2)专用返回码。数值与 MEOWOS_API.md §1 的同名错误码一致, * 但用 meow_cfg 前缀——因为 MEOW_OK/MEOW_ERR_* 这个命名空间已被共享协议头 * meow_ipc.h(枚举)与 launcher meow_settings.h(宏)占用,SDK 的 meow_notify_ipc.c * 同 TU include meow_ui.h + meow_ipc.h,若在此定义同名宏会导致「宏展开枚举标识符」冲突。 */ #define MEOW_CFG_OK 0 /* 成功 */ #define MEOW_CFG_ERR_INVAL -1 /* 参数/取值非法(空 key、NULL out、outsz<=0 等) */ #define MEOW_CFG_ERR_NOENT -2 /* 键未设/文件不存在 */ #define MEOW_CFG_ERR_IO -5 /* 读写(存储/文件)失败 */ #define MEOW_CFG_ERR_NOMEM -6 /* 路径超长 */ #define MEOW_CFG_ERR_NODEV -10 /* 无数据目录(卡不在/只读/不可建) */ /* ============================================================ */ /* §9.2 应用配置读写(meow_config_*,M2.x 最小可用版) */ /* ============================================================ */ /* App 自有配置读写:与系统设置 meow_settings_*(板载 settings.conf、系统级、带 schema) * 明确区分——这是单个 App 自己的键值偏好,落 TF 数据目录,不占板载、无 schema。 * * - 数据目录:优先 env MEOW_DATA_DIR(launcher 注入 /usr/data/mnt/sd_0/MeowData//data, * 见 app_launcher.c launch_app);无 env(手动跑/宿主测/无卡)回退 /tmp/meowcfg_ * (非持久但仍可写)。meow_config_dir() 返回最终目录;空/不可建返回 NULL。 * - 文件布局:每键一小文件 /.cfg,内容=值字符串(空串=0 字节文件)。 * key 只允许 [A-Za-z0-9._-],其余字符替换为 '_'(杜绝路径穿越);key 上限 64。 * - 轻量:每次 get 读文件(App 配置小),不做大内存缓存;pthread_once 惰性初始化目录。 * - 失败降级:无数据目录/写失败 → 返回负错误码(见上 MEOW_CFG_ERR_*),不崩不阻塞。 * * 返回码:MEOW_CFG_OK(0) 成功;(set) 负=失败;(get) MEOW_CFG_ERR_NOENT(-2)=键未设/文件不存在; * meow_config_int/bool 对任何非 MEOW_CFG_OK 一律返回 def。 * 错误码数值同 MEOWOS_API.md §1 / meow_settings_*(MEOW_ERR_*)一致,便于 App 习惯。 */ const char *meow_config_dir(void); /* 当前 App 数据目录(data);空/不可建 NULL */ int meow_config_set(const char *key, const char *val);/* 写 /.cfg;成功 MEOW_CFG_OK(0) */ int meow_config_get(const char *key, char *out, int outsz); /* 读;未设/不存在返回 MEOW_CFG_ERR_NOENT */ int meow_config_int(const char *key, int def); /* 便捷 int;未设/非法返回 def */ int meow_config_bool(const char *key, int def); /* 便捷 bool;未设/非法返回 def */ void meow_config_remove(const char *key); /* 删键(无该键/无目录则静默) */ #ifdef __cplusplus } #endif #endif /* MEOW_UI_CONFIG_H */