应用场景
- 好比小明有一个手机(HFP上叫做AG)
- 连上的耳机(HFP上叫做HF)
- 然后十四哥用手机打小明手机。。。小明在蓝牙耳机上接听电话
- 如果这个时候铁柱也用手机打小明手机,小明在蓝牙耳机上选择接铁柱电话挂掉十四哥电话,就是HFP上的三方呼叫
这里有两条链路
- 一条是音频的SCO数据
- 另外一条是ACL链路
- 断线一般是HFP的问题
- 没有声音或者声音吱吱吱或者哔哔哔一般是SCO的问题(msbc或者cvsd参数对不上)
流程
第一步,建立ACL链接,HANDLE是3
![]()
第二步 ,在ACL上建立L2CAP链接,顺便建立了一个SDP
![]()
第三步 ,在L2CAP上建立RFCOMM,这个时候HFP就可以用了,因为本身就是RFCOMM
![]()
第四步,建立SCO链路HANDLE是4
![]()
部分流程
![]()
- AT +BRSF AT+BAC 就是去问一下支持功能版本
- AT + CIND = ? AG支持的状态指示(比如什么通信状态,电量状态,漫游状态什么的)
![]()
- 0 是 "call " 1是 "callsetup" 2是"service" .。。。这些就是AG支持的状态指示,AG会告诉你呼叫通话过程中这些东东发生的变化
- AT+ CMER 这个东西就是用来更新状态参数(就是上述说的地址),如下图让AG 更新状态指示参数
接下来就是实际遇到问题处理
![]()
![]()
![]()
- 呼叫之后,ACL链路进入SNIFF MODE
- 本来开始是放着音乐的,这个很正常
- 然后通电话时,SCO链路维持了8秒
- AG主动断掉链路,所以链路都是正常的
- 首先可以确认是数据拿到了但是播不出来
- 后面发现SCO的PCM接口频率没有调好