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

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

HFP 概述

HFP概念介绍

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


蓝牙架构图:




image.gif编辑



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



HFP通讯流程


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



image.gif编辑



如上图所示:


●步骤一:双方建立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支持的所有的特性,列表如下图:


image.gif编辑

image.gif编辑





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的状态指示,前面介绍过

目录
相关文章
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
|
3天前
|
传感器 物联网 芯片
低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别
如何选择适合的蓝牙协议以实现最佳的无线通信效果。
205 0
|
10月前
|
开发框架 JSON 物联网
Nanoframework 操作单片机蓝牙配置WIFI的案例
通过`Nanoframework`的蓝牙配置Wifi的名称和密码
94 0
|
10月前
蓝牙技术简介(英语演讲)
蓝牙技术简介(英语演讲)
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
3175 4
一文带你认识蓝牙 GATT 协议
Adurion两个HCO5蓝牙模块之间互相通信
Adurion两个HCO5蓝牙模块之间互相通信
|
编解码
【经典蓝牙】蓝牙AVRCP协议分析
蓝牙AVRCP协议是蓝牙设备之间音视频的控制协议。定义了音频/视频的控制、浏览、查询、通知等一系列的命令集。常用来蓝牙耳机对手机的音乐进行控制,以及获取手机的音乐信息等场景。AVRCP协议有两个角色,分别是controller(CT)和 target(TG)。CT: 发送控制命令到对端,控制对端媒体播放器的设备,例如蓝牙耳机,蓝牙遥控器等。TG:接收对端的控制命令,并执行操作,进行回复的设备,例如手机,电脑等。
2045 0
【经典蓝牙】蓝牙AVRCP协议分析
|
编解码 算法 数据格式
【经典蓝牙】蓝牙 A2DP协议分析
A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议, 用于传输单声道, 双声道音乐(一般在 A2DP 中用于 stereo 双声道) , 典型应用为蓝牙耳机。         A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。
1539 0
【经典蓝牙】蓝牙 A2DP协议分析
|
小程序 API Android开发
微信小程序使用蓝牙通信协议连接硬件整理总结(蓝牙连接、获取设备UUID、开水器notify及关闭蓝牙)
微信小程序使用蓝牙通信协议连接硬件整理总结(蓝牙连接、获取设备UUID、开水器notify及关闭蓝牙)
2719 0
微信小程序使用蓝牙通信协议连接硬件整理总结(蓝牙连接、获取设备UUID、开水器notify及关闭蓝牙)
|
物联网 Android开发 开发者
蓝牙模块手机APP通信|学习笔记
快速学习蓝牙模块手机APP通信
769 0
蓝牙模块手机APP通信|学习笔记