【经典蓝牙】 蓝牙HFP层协议分析

HFP 概述

HFP概念介绍

        HFP(Hands-Free Profile), 是蓝牙免提协议, 可以让蓝牙设备对对端蓝牙设备的通话进行控制,例如蓝牙耳机控制手机通话的接听、 挂断、 拒接、 语音拨号等。HFP中蓝牙两端的数据交互是通过定义好的AT指令来通讯的。



蓝牙架构图:











        由上面架构图可以看出,HFP是定义在RFCOMM协议上的,分为AG(Audio Gateway)和HF(Hand-Free)两个角色。 例如我们平时用的手机中的 HFP 的角色就是 AG,蓝牙耳机中的 HFP 角色就是 HF 。





HFP通讯流程



        HFP通讯首先要建立HFP连接,HFP连接可以由HF端发起,也可以由AG端发起。而且从上面的架构图可以看出,HFP是建立在RFCOMM协议层之上的,所以建立HFP连接的前提是RFCOMM层已经建立起连接。HF端和AG端的通讯流程如下图:









如上图所示:



●步骤一:双方建立HFP连接后,HF端发送AT+BRSF=<HF supported features> 指令,AG 会回复+BRSF=<AG supported features> ,此命令就是用于 HF 和 AG 互相告知对方支持的特性。

●步骤二:根据双方上面交换的特性,如果 HF 和 AG 都支持 BRSF 中的 Codec negotiation ,则HF发送AT+BAC=<HF available codecs> 命令告知AG, 自己支持的 codec是CVSD 编码还是 SBC编码,CVSD编码是窄带通话NBS,采样率是8KHz, SBC为宽带通话WBS,采样率为16KHz。

●步骤三: 双方交换完编码后,HF端发送 AT+CIND=? 问 询 支 持 的 indicators( 包括service/call/callsetup/callheld/signal/roam/ battchg)的 index ,AG返回支持的 indicators,以及对应的index, HF端解析收到的数据。解析后,HF发送 AT+CIND?问询各个 indicators 的 status , AG端返回所有的indicators的status。

●步骤四: HF可以发送AT+CMER 命令来使能(或关闭)各个indicators,发送该命令后,如果某一个indicator有变化,那么AG就会发送+CIEV指令来告知HF端。

●步骤五: 以上命令发送完成后,如果双方都支持三方通话特性,则HF端发送 AT+CHLD= ? 来查询手机三方通话的支持的具体特性都有哪些。

●如果 HF & AG 都支持 HF Indicators 的 feature,那么 :

○HF 发送 AT+BIND=<HF supported HF indicators>来告知 AG 支持那些 indicator

○发送 AT+BIND=?问询 AG 支持哪些 indicator

○发送 AT+BIND?问询 AG 哪些 indicator 是 enable 的

○发送 AT+BIEV 来使能某一个 indicator



HFP特性介绍



HFP支持的所有的特性,列表如下图:















1.Connection management: HFP的连接和断开,HF端和AG端都可以发起

2.Phone status information:手机状态信息特性。 AG端状态改变后会通知到HF端,例如:手机信号强度,手机电量、手机漫游信息,手机通话状态(响铃、接听、挂断)。 HF端也可以通过这个来查询手机的网络状态。

3.Audio connection: 这个是通话数据SCO通道的建立,用来传输电话音频数据的。 这个跟上面HFP通道的建立不是一回事。 HF & AG 都可以建立 Audio 通道,HF 和 AG 也都可以主动断开 SCO, 断开SCO通道是使用 HCI command 来断开的。

4.Accept an incoming voice call : 该指令是用来接听电话的,里面分别包含了,从HF端和AG端接听电话的操作。 需要强调的是,来电后里面有一个 in band ring 的概念,表示是否支持来电铃声从AG端传到HF端。

a.支持 in band ring 的 AG 在 incoming call 的时候,会先建立 audio connection(SCO),然后在 RING AT command 之后传过来声音, 也就是手机铃声, 直到被接听或者挂断, 或者其他原因中断 incoming call 为止。

b.no in band ring是在 call active 的时候才会建立 SCO, 所以此时候 HF 要在 incoming call的时候自己做一个铃声。

5. Reject an Incoming Call : 拒接电话。分为HF端和AG端拒接电话,AG端挂断电话会通过CIEV指令将状态发送到HF端。

6.Terminate a Call Process : 挂断电话。 与拒接电话流程类似。

7.Audio Connection Transfer towards the HF :表示在通话过程中,连接SCO

8.Audio Connection Transfer towards the AG : 表示在通话过程中,断开SCO

9.Place a call with the phone number supplied by the HF :HFP 主动拨号功能

10.Memory Dialing from the HF : 语音信箱功能, 就是我们在手机长按 1 或者 2 或者任意一个数字, 会有自动拨号功能, 通过蓝牙操纵这个 AT command 的前提是手机已经自动设计好了, 比如我们设置的 1 为 10086, 那么我们发送 ATD>1;就会自动拨打 10086 。

11. Last Number Re-Dial from the HF : 拨打最后一次号码的功能

12. Call waiting notification : 通话等待通知。使能后,在通过中在来电AG就会自动发送过来 +CCWA:xxx。

13. Three-Way Call Handling :当三方通话出现的情况下, HF 给 AG 的操纵 AT command,格式为 AT+CHLD=xxxx

14. 1Echo canceling (EC) and noise reduction (NR) : 取消ECHO和降噪。

15. Voice Recognition Activation / Enhanced Voice Recognition Activation : 语音识别的打开和关闭。

16. Attach a Phone Number to a Voice Tag : 将语音标签与呼叫的号码进行绑定。

17. Transmit DTMF Codes : 比如拨打 10086 的时候, 通话中语音会让你选择按键, 此命令就是通 过 HF 端发送按键信息的。

18. Remote Audio Volume Control : 音量和麦克风增益控制。 在手机上控制音量后,可以发送同步给HF端。HF端音量改变后,也可以同步给AG(手机)端。

19. Response and Hold:将来电暂时挂起,该功能限制较多,不常用。

20. Subscriber Number Information : 获取本地手机的号码。

21. Enhanced Call Control Mechanisms : 高级通话控制机制

22. Individual Indicator Activation :分别控制indicator 的开关。

23. Wide Band Speech : 采样率选择。CVSD: 8K采样率 SBC: 16K采样率

24. Codec Negotiation : 编码方式协商,上面介绍过

25.HF Indicators : HF的状态指示,前面介绍过

猜你喜欢

转载自blog.csdn.net/hesuping/article/details/129225199
今日推荐