meow_ui.a→3e0ee8f7 launcher→9d0efc2f hello→9609ea6e files→90f5cf07 ncm→be8be221(均已上卡); 真机截图证据 .tmp/meowbug/fix1.png+fix_b2_after.png
51 lines
3.1 KiB
C
51 lines
3.1 KiB
C
/*
|
||
* meow_ui_vol.h — SDK 状态栏音量换算/读取(meow_ui_vol.c)。
|
||
* 不随 meow_ui.h 发布给应用;仅供 meow_ui_sys.c 与宿主单测(test_meow_ui_vol.c)使用。
|
||
*/
|
||
#ifndef MEOW_UI_VOL_H
|
||
#define MEOW_UI_VOL_H
|
||
|
||
/* 音量语义常量(与 launcher MEOW_VOL_MAX/DEFAULT、meow_settings 表逐一致):
|
||
* audio.volume 默认 60,取值域 0-100(硬上限 MEOW_UI_VOL_MAX);
|
||
* audio.volume_max 默认 100(软上限,clamp 上限,用户可调小);
|
||
* audio.volume_step 默认 1(跳步;只影响「每次音量键改多少」,与状态栏展示无关——
|
||
* SDK 只读当前值,步进由改动方(launcher)承担)。 */
|
||
#define MEOW_UI_VOL_DEFAULT 60
|
||
#define MEOW_UI_VOL_MAX 100
|
||
#define MEOW_UI_VOL_MAX_DEF 100
|
||
|
||
/* 纯函数:把软件音量夹到 [0, MEOW_UI_VOL_MAX],再夹到 volume_max 软上限。
|
||
* 语义与 launcher 的 vol_clamp(audio.c)一致:
|
||
* - 硬上限 100(0-100 口径);
|
||
* - 尊重 audio.volume_max(用户把上限调小则音量被夹到该值);
|
||
* - volume_max 异常(<0)兜底为 0(不进负值)。
|
||
* 无文件/全局依赖,宿主 gcc 可直接测。 */
|
||
int meow_ui_vol_clamp(int vol, int vol_max);
|
||
|
||
/* 读 settings.conf 里一个 int 键。扁平 "key=value" 格式(launcher meow_settings.c
|
||
* 落盘为 "key = value",带空格;这里兼容无空格/多空格两种写式)。
|
||
* 解析:'=' 切分,key/value 去首尾空白,key 精确匹配(避免 audio.volume 误配
|
||
* audio.volume_max)。未命中/打开失败/键缺失回退 def。
|
||
* path 由调用方传入(设备传导 MEOW_SETTINGS_FILE;宿主单测指向临时文件)。 */
|
||
int meow_ui_vol_read(const char *path, const char *key, int def);
|
||
|
||
/* 改 settings.conf 里一个 int 键(地址更新/新增;**保留其余行**——与 launcher 落盘格式
|
||
* "key = value"(带空格)一致;键缺失则追加)。用临时文件 + rename 原子替换,失败返回 -1。
|
||
* 用途:SDK 输入层调系统音量时写 audio.volume(绝不像 watchdog wd_vol_save 那样整文件
|
||
* O_TRUNC,避免删掉 display.* 等其它设置)。 */
|
||
int meow_ui_vol_set(const char *path, const char *key, int val);
|
||
|
||
/* 读 audio.volume + audio.volume_max + audio.volume_step,按 dir(±1)迈一步(绝对跨度
|
||
* = volume_step),clamp 到 [0, MEOW_UI_VOL_MAX] 再 clamp 到 volume_max(同 meow_ui_vol_clamp
|
||
* 语义,与 launcher 设置页/watchdog 一致),经 meow_ui_vol_set 持久化到 audio.volume。
|
||
* 返回写入 DAC 的映射值(= 夹后新卷值);已在上下限未变则返回当前值(不写)。
|
||
* 仅做 settings 逻辑(不改 DAC);DAC 写入由调用方用 meow_ui_vol_dac_write 做。 */
|
||
int meow_ui_vol_step(const char *path, int dir);
|
||
|
||
/* 写真实 DAC(CS43198, numid 1/2, pct→0-255),与 launcher meow_dac_vol_write / watchdog
|
||
* wd_vol_write 同路径(amixer cset = SNDRV_CTL_IOCTL_ELEM_WRITE)。无副作用前提:宿主上
|
||
* amixer 不存在 → system() 静默失败(拼音量的宿主单测只测 meow_ui_vol_step,不测写 DAC)。 */
|
||
void meow_ui_vol_dac_write(int pct);
|
||
|
||
#endif /* MEOW_UI_VOL_H */
|