hfp
我。。。。
HFP是啥东西,是啥东西。。我也不知道
咋不能只是说这个东西是啥,应该说一下应用场景
好比小明有一个手机(HFP上叫做AG)和一个手机蓝牙连上的耳机(HFP上叫做HF) 连上
然后十四哥用手机打小明手机。。。小明在蓝牙耳机上接听电话,就是HFP使用的场景
如果这个时候铁柱也用手机打小明手机,小明在蓝牙耳机上选择接铁柱电话挂掉十四哥电话,就是HFP上的三方呼叫了
注意:所以这里有两条链路 :一条是音频的SCO数据,另外一条是ACL链路,不要总认为HFP场景是一条链路,哪怕SCO走的是ACL,其实都要看两个部分,很多时候,经常出问题都是在SCO上面
断线一般是HFP的问题,
没有声音或者声音吱吱吱或者哔哔哔一般是SCO的问题(比如PCM的接口都没调通就去玩)
尼玛怎么用
其实概括起来是HF上发指令,AG上发状态
不罗比锁了,实例说。
1、第一步,建立ACL链接,handle是3
2、第二步 ,在ACL上建立L2CAP链接,顺便建立了一个SDP
3、第三步 ,在L2CAP上建立RFCOMM,这个时候HFP就可以用了,因为本身就是RFCOMM
4、第四步,建立SCO链路HANDLE是4
建立起RFCOMM和SCO就可以用了
先做一些准备工作
为什么要准备,为什么要问?兄弟,为什么你们通信老是要先问问,不管是LMP 的各种信息或者MTU什么
原因是:手机的蓝牙芯片和蓝牙耳机芯片他妈肯定不一样,软件支持也不一样,那肯定问清楚版本支持协议各种,
不然他妈我问了你不知道。
1、 AT +BRSF AT+BAC 就是去问一下支持功能版本这些,返回OK就可以了,不用管
2、AT + CIND = ? 这个就非常重要了,这一句可以说是HFP的重点,去问AG支持的状态指示(比如什么通信状态,电量状态,漫游状态什么的)
这个就是AG反馈回来的,支持的状态指示,而且有地址的喔
0 是 "call " 1是 "callsetup" 2是"service" .。。。这些就是AG支持的状态指示,AG会告诉你呼叫通话过程中这些东东发生的变化
3、AT+ CMER 这个东西就是用来更新状态参数(就是上述说的地址),如下图让AG 更新状态指示参数
接下来就是实际遇到问题了
打电话没有声音,看到,是从AG上去接电话的,
呼叫之后,ACL链路进入SNIFF MODE,本来开始是放着音乐的,这个很正常
然后通电话时,SCO链路维持了8秒,AG主动断掉链路,所以链路都是正常的
首先可以确认是数据拿到了但是播不出来
后面发现SCO的PCM接口频率没有调好