问题描述:播放音乐过程中,打开之前已配对的蓝牙耳机进行回连,耳机与测试机的媒体音频连接失败。
操作步骤:
1,手机成功连接蓝牙耳机
2,关闭蓝牙耳机
3,手机本地播放音乐
4,打开蓝牙耳机
5,手机能自动连接上蓝牙耳机;但是状态是“无媒体”,手机端音乐停止
HCI Log分析:
1.start req 和 start rsp 的 transcation ID 不一样, AVDTP 的 流程不会处理 transcation ID 不一样的结果 ,所以上层超时异常断开A2DP。(Transcation Label 不一样)
2.手机和耳机都在做 start req ,手机 reject了耳机的req,耳机不响应。所以上层超时异常断开A2DP。(Field Truncated or Not Present)
问题原因:
1.收到AVDTP的data时,发现transID不一样, event赋值为AVTP_EVENT_RX_BAD_TRANS_ID
2. callback 不会处理AVTP_EVENT_RX_BAD_TRANS_ID的event。
总结原因:
耳机连接之前有音乐在播放,耳机发起连接上HFP,A2DP后, 手机发起 A2DP start 音乐,对于一些IOT的耳机设备,也会马上发起 A2DP start 。所以也就是手机和耳机设备同时发起A2DP start ,撞到耳机IOT问题。
修改方法:
当手机知道耳机发起了A2DP连接后,会延时发起 A2DP start,等耳机的 start request先进来。
在bt_a2dp_hdl.c中 storeDevInfoFormOpenCnf 下,把 is_opened_by_peer_dev 的赋值注释掉。
// (bt_a2dp_app.a2dp_app_dev[i].is_opened_by_peer_dev == EAL_FALSE)