AskaEth
6e2774ff5c
fix(bt): M54 入站 ACL(> ACL)解析 — 耳机自主回连后 connected=0 而声音正常
bt_acl_parse 原先只认行内 "< ACL ",而 hcitool con 对**远端发起**的连接打的是
"> ACL "。耳机自动回连(最常见的连接方式)时于是:bt connected 空、bt status
connected=0、bt connect 报「未生效(hcitool con 无该 ACL)」,而 audiod 用
strstr("ACL") 认得出、声音正常从耳机出 —— 用户看到的就是「看不出到底连没连」。
改法:白名单取代裸子串匹配 —— 行首(可带空白)→ '<' 或 '>' → ' ' → "ACL" → ' '
→ 17 字符 BD_ADDR(且必须在此断词:再跟 hex/':' 不算)。因此 SCO 行、表头、
截断行都不收。MAC 统一大写(与 audiod bt_dev_acl_macs / bluetoothctl 一致)。
单一解析器:bt_acl_macs / bt_acl_has_tri(写后真态复查)/ bt_connected_text /
bt_status.connected_n 全部经 bt_acl_parse,无第二套。
单测用真机原始字节(od -c 校对):
入站 0.8.50 设备 10.58.215.50 2026-11-11 20:53 "\t> ACL 33:DE:2E:21:AD:30
handle 11 state 1 lm MASTER AUTH ENCRYPT \n"
出站 devdocs/evidence/m50_bt_result_20261111.log:8 "\t< ACL ... handle 0
state 5 lm MASTER \n"
覆盖 >/</>SCO/<SCO/表头/空/NULL/无方向符/截断(行中与行尾)/伪 MAC/大小写/CRLF/
max 裁剪,另加端到端:入站时 connected、status connected=1、connect 不报未生效、
SCO-only 不计连接、disconnect 假成功对入站 ACL 也报「仍有该 ACL」。
用旧解析器跑同一套测试 18 条 FAIL(证明用例不是自证)。
真机验证:同一时刻 0.8.50 旧二进制 bt status connected=0,而按新源码交叉编译
(mipsel 静态)的探针在设备上对**实时 > ACL** 链路报 connected=1 且
bt_connected_text 列出 "Device 33:DE:2E:21:AD:30 MOONDROP Pudding"。
2026-11-11 21:50:28 +08:00
..
2026-11-11 19:15:00 +08:00
2026-11-11 20:29:21 +08:00
2026-09-02 16:19:40 +08:00
2026-11-11 21:50:28 +08:00
2026-09-01 19:55:26 +08:00
2026-09-02 16:19:40 +08:00
2026-09-01 19:55:26 +08:00
2026-09-01 22:08:10 +08:00
2026-11-11 21:50:28 +08:00
2026-09-02 16:19:40 +08:00
2026-09-02 16:19:40 +08:00
2026-09-02 16:19:40 +08:00
2026-09-01 22:08:10 +08:00
2026-09-02 16:19:40 +08:00
2026-09-02 16:19:40 +08:00
2026-11-11 19:15:00 +08:00
2026-11-11 18:56:06 +08:00