Files
MeowOS-SDK/sdk/meow_ui_vol.h
T
MeowOS f44e3bc6d0 Add 'sdk/' from commit '2e7561d74f75de05dd7fb362f203f600afb451d7'
git-subtree-dir: sdk
git-subtree-mainline: 17a972d46f
git-subtree-split: 2e7561d74f
2026-09-01 21:08:40 +08:00

51 lines
3.1 KiB
C
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.
/*
* 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 */