HFP协议
HFP在协议栈里面的层级关系
在这里插入图片描述
HFP存在角色的概念
AG(Audio Getway);音频流输入和输出的网关设备。典型的就是手机
HF (Hand Free):音频网关远程音频输入和输出的设备。它还提供了一些远程控制手段。(简单说就是免提设备)
示例:比如说耳机去连接手机,那么手机就是AG,耳机就是HF。
在这里插入图片描述
下面介绍一下HFP几个版本都更新了什么:
v1.0-v1.5:

  • 回应和保持
  • 用户号码信息
  • 增强呼叫状态
  • 增强呼叫控制

v1.5-v1.6

  • 增加WBS(宽带语音编解码器)
  • 编码器协商(选择WBS或者NBS(narrow band speech 窄带通话))
  • 个人指示器开关(不太理解这个,后续查阅资料补充修改)

v1.6-v1.7

  • 增加HF Indicators (例如电量通知,手机通知蓝牙设备当前手机还剩多少电量)

v1.7-v1.8

  • 增强语言识别激活(类似通过耳机唤醒siri识别语音并回复的功能)

在这里插入图片描述
这边大致介绍一下hfp 的 feature

  1. Connection management 连接管理
  2. Phone status information 电话状态信息
  3. Audio Connection handling 音频连接处理
  4. Accept an incoming voice call 接听来电
  5. Reject an incoming voice call 拒接来电
  6. Terminate a call 终止通话
  7. Audio Connection transfer during an ongoing call 设置音频通道
  8. Place a call with a phone number supplied by the HF HF拨打电话
  9. Place a call using memory dialing 用 HF 提供的电话号码打电话(类似长按1拨打A联系人这种)
  10. Place a call to the last number dialed 末号拨打
  11. Call waiting notification 来电等待通知
  12. Three-way calling 三方通话
  13. Calling Line Identification 主叫线路识别(CLI)
  14. . Echo canceling (EC) and noise reduction(NR) 回声降噪(ENCR)
  15. Voice recognition activation 语音识别激活
  16. Attach a Phone number to a voice tag 将电话号码附加到语音标签上
  17. Ability to transmit DTMF codes 传输 DTMF 码的能力(按键功能)
  18. Remote audio volume control 远程音频音量控制
  19. Respond and Hold 回应并保持
  20. Subscriber Number Information 用户号码信息
  21. Enhanced Call Status 增强呼叫状态
  22. Enhanced Call Controls 增强呼叫控制
  23. Individual Indicator Activation 个人指示器激活
  24. Wide Band Speech 宽带通话
  25. Codec Negotiation 编解码器协商
  26. HF Indicators HF指示器
    在这里插入图片描述
    在这里插入图片描述

1.Connection Management(HFP_v1.8.pdf 4.2)

Service Level Connection Establishment(SLC)
HF或者AG都可以发起,SLC的连接要建立在一个存在的RFCOMM Connection上面。(也就是HF和AG之前的RFCOMM Connection)

SLC Init 流程

  • Supported features exchange : 必须是HF向AG发送:AT+BRSF=< HF support feture > ,然后AG会回复HF:+BRSR:< AG support feature>

  • Codec Negotiation: 如果说HF支持codec NC的话,那么就要检查AG回复的support feature里面是否也支持codec NC.如果双方都支持的话,HF发送AT+BAC=< HF vailable codecs> HF支持的codec 有下面两种.CVSD和mSBC的区别在这里插入图片描述

  • AG Indicators:再确认了AG support feature之后我们要确认AG支持那些Indicators,HF获取AG Indicators 通过:AT+CIND=? , 然后AG会回复 +CIND:(AG Indicators) 然后HF再次发送**AT+CIND?** 获取AG Indicators的值,AG回复:+CIND:(AG Indicators 具体值)。如果说AG Indicators 发生了改变那么AG会使用:+CIEV:id,value 上报给HF

  • HF Indicators: 如果HF 支持HF Indicators 那么就要去人AG端是否也支持HF Indicators,如果都支持,那么HF 会发送:AT+BIND=? 查询AG所支持的HF Indicators。然后AG 依次使用:+BINC:HF Indicators,value 回复 HF,AG所支持的HF Indicators。下图是HF Indicators 的类型
    在这里插入图片描述
    这是SLC的一个具体的连接链路图
    在这里插入图片描述
    下面我们用一份btsnoop来具体分析一下上面的流程
    1.HF 发送 AT+BRSF=1023 (在btsnoop中是ASCII码形式的),该命令是通知AG,HF support feature 有哪些。

    在这里插入图片描述
    1023表示的是0011 1111 1111,下图是每一位具体的含义:
    在这里插入图片描述
    在这里插入图片描述
    然后AG会回复 +BRSF:3943 通知HF,AG所支持feature。
    在这里插入图片描述
    3943表示的是1111 0110 0111,下图是每一位具体的含义:
    在这里插入图片描述

2.从第一步的BRSF中我们可以看到,AG跟HF都是支持 Codec negotiation, 那么HF就要发送 AT+BAC=1 命令选择对应的codec。
在这里插入图片描述
codec的值见下图。
在这里插入图片描述

3.设置玩codec之后我们需要获取到AG 支持哪些 Indicators。HF发送命令: AT+CIND=? 询问AG所支持的Indicators。
在这里插入图片描述
然后AG会回复 +CIND: ("call",(0,1)),("callsetup",(0-3)),("service",(0-1)),("signal",(0-5)),("roam",(0,1)),("battchg",(0-5)),("callheld",(0-2)) 冒号后面表示 支持的Indicators 以及Indicators值的范围。我们可以看到所有的Indicators 都是带有编号的 AG在Indicators发送变化时通知HF,依赖就是这个编号,这个编号是从1开始的这个解析是有误的,不要被误导了,在介绍 +CIEV: 命令的时候可以看到
在这里插入图片描述

4.当获取到AG 所支持的Indicators时,HF需要在发送一次 AT+CIND? 获取AG Indicators 的具体值是多少
在这里插入图片描述
然后AG会回复 +CIND: 0,0,0,0,0,1,0 来通知HF各个Indicators 的值
在这里插入图片描述
下面介绍一下具体的每个Indicators 的值是表示什么意思

  • Call Status(是否存在通话)
    0: 当前不存在通话
    1:当前存在通话 在这里插入图片描述

  • Callsetup Status (AG呼叫设置状态发生变化值)
    0: 没有正在进行的call setup
    1: 来电的call setup
    2: 拨号状态下的去电call setup
    3: 发出呼叫设置处于响铃状态在这里插入图片描述

  • Service availability (服务可用性)
    0 表示没有服务。没有 Home/Roam 网络。
    1 表示服务存在。提供家庭/漫游网络。在这里插入图片描述

  • single(信号强度)
    在这里插入图片描述

  • Roaming(漫游)
    0:没有漫游
    1:有漫游
    在这里插入图片描述

  • Battery Charge Level(电池电量等级,5级)
    在这里插入图片描述

  • call held
    0:没有通话
    1:通话被搁置或激活/保留通话交换
    2:通话被挂起,没有活跃通话。
    在这里插入图片描述

5.当我们获取到AG 所支持的Indicators 之后我们需要通过 AT+CMER=3,0,0,1 来使能所有的Indicators 。
在这里插入图片描述
参数值3,0,0,1 表示使能所有的Indicators
3,0,0,0 表示失能。
在这里插入图片描述

6.如果HF&AG都支持三方通话,那么发送**AT+CHLD=?** 询问三方通话执行的特性有哪些。
在这里插入图片描述
AG 会回复 +CHLC: 通知HF 支持的特性
这些是CHLD支持的特性
0 = 相当于此时正在通话中,又有一通电话来,拒接来电
1 = 挂断所有在通话中的电话,接听来电
1< idx> =挂断idx的通话中的电话
2 =把所有通话中的电话设置为hold状态,然后接听电话
2< idx> =请求接受标识电话,让其它电话保持。
3 = 增加一个保持电话到对话中
4 = 连接两个电话并且断开两个电话的订阅。HF侧可选。02

在这里插入图片描述
在这里插入图片描述

7.如果HF & AG都支持HF Indicators的feature,那么HF发送**AT+BIND=< HF supported HF indicators >** 来告知AG支持那些indicator HF支持的Indicators在上面有介绍。
在这里插入图片描述
然后发送**AT+BIND=?** 问询AG支持哪些indicator 。AG回复的**+BIND:(x,x)** x表示AG 支持的HF indicators。
在这里插入图片描述
然后再次发送 AT+BIND? 问询AG哪些indicator是enable的,AG会回复 +BIND:x,s x表indicator s表示是否使能。
在这里插入图片描述
HF 可以通过 AT+BIEV= < assigned number >,< value > 来使能某一个indicator。

8.最后介绍一下 AG indicator 变化通知HF 的命令 +CIEV: id,value
在这里插入图片描述
在这里插入图片描述

Service Level Connection Release

断开RFCOMM link即可
在这里插入图片描述

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐