/* bt_dev.h — 蓝牙 A2DP 设备自识别(DEV 自动更新纯逻辑,宿主可单测)。 * * 背景:/usr/data/alsa.conf 的 `pcm.bluealsa`(plug→bluealsa)需把 DEV/device 钉在当前 * 连接的 A2DP sink 设备 MAC 上才能正确出声。本模块提供两段纯逻辑(无 meow_* / popen / 文件 * I/O —— meow_audiod 负责读文件与执行系统命令): * - bt_dev_detect_mac:从 `bluealsa-cli list-pcms` 输出提取第一个 a2dpsrc 端点的设备 MAC; * - bt_dev_rewrite:幂等改写 alsa.conf 文本,把 `pcm.bluealsa` 块内 `DEV=` 与 * `device ` 两处换成目标 MAC(保留引号风格 / codec / 其余 token)。 * 纯 libc(string / stdlib),独立编译,宿主零链接重。 */ #ifndef BT_DEV_H #define BT_DEV_H #include /* 解析 bluealsa-cli list-pcms 输出,取第一个 a2dpsrc/a2dp_source 端点的设备 MAC。 * 返回 0=找到并写入 mac(NUL 结尾),-1=无 a2dpsrc 端点 / 参数非法。macsz 建议 ≥18。 */ int bt_dev_detect_mac(const char *listpcms, char *mac, size_t macsz); /* 幂等改写 alsa.conf 文本(in_len 不含 NUL):把 `pcm.bluealsa` 块内 `DEV=` 与 * `device ` 两处 MAC 换成 mac(保留引号风格、codec/其它 token 原样)。 * 返回 0=已改动(*out 与 *out_len 给出新文本,调用方负责 free);1=无需改动(两端已一致); * -1=无 pcm.bluealsa / 无 DEV= 或 device token / 参数非法(不动)。 */ int bt_dev_rewrite(const char *in, size_t in_len, const char *mac, char **out, size_t *out_len); #endif /* BT_DEV_H */