什么是HFP? HFP协议浅析
1. HFP协议概述
1.1 什么是HFP
HFP(Hands-Free Profile)是一种蓝牙免提协议,主要用于实现手机与蓝牙耳机或车载免提设备之间的免提通话功能。相协议定义了支持HFP的两个设备如何点对点交互。手机用来作为音频输入和输出的基础,通过HFP实现典型的电话功能控制,但不操作实际的手机通话。比于HSP(Headset Profile),HFP提供了更多的功能,如来电显示、拒接电话等。
1.2 HFP与HSP的区别
HSP(Headset Profile):提供基本的通话功能,如接听、挂断电话。
HFP(Hands-Free Profile):在HSP基础上增加了来电显示、拒接电话等高级功能。
1.3 HFP协议架构(依赖关系)
在图 1.1 中,展示了蓝牙配置文件结构以及各配置文件之间的依赖关系。如果一个配置文件通过明确引用另一个配置文件的部分内容来重复使用它,那么这个配置文件就依赖于另一个配置文件。这种依赖关系在图 1.1 中有所说明。
图 1.1
此协议架构为免提规范(HFP)与其他蓝牙配置文件(如串口配置文件和通用访问配置文件)之间的关系奠定了基础。HFP 依赖于其他配置文件,意味着在实现 HFP 功能时,需要遵循所依赖配置文件的相关规定和要求,以确保整个蓝牙系统的兼容性和互操作性。例如,HFP 在实现过程中可能会利用串口配置文件中的通信协议来进行数据传输,同时借助通用访问配置文件中的安全机制等功能来保障连接的安全性和稳定性等。
1.4 HFP 的核心功能
语音通话:通过 SCO(Synchronous Connection-Oriented)链路传输音频数据,实现免提设备的通话功能。
通话控制:支持拨号、接听、挂断、重拨、语音拨号等操作。
状态同步:同步手机电量、信号强度、运营商信息等。
2. 规范概述
2.1 协议栈
包含蓝牙基带、链路管理协议(LMP)、逻辑链路控制和适配协议(L2CAP)、射频通信(RFCOMM)、服务发现协议(SDP)等,免提控制基于 AT 命令,音频端口模拟层和音频驱动负责音频相关功能。
2.2 配置和角色
定义了音频网关(AG,如手机)和免提设备(HF,如耳机或车载免提单元)的角色,AG 负责音频输入输出网关,HF 作为远程音频输入输出机制并提供远程控制。
Audio Gateway (AG)(音频网关): 音频网关的作用是用于输入和输出。作为音频网关的典型设备是手机
- Hands-Free unit (HF)(免提设备):作为音频网关的远程音频输入和输出机制的设备。同时还具有远程控制AG端的能力。
2.3 用户需求和场景
规定了 HFP 激活时 AG 和 HF 的强制和可选功能,如音频传输、连接管理、电话状态信息传递等,支持单音频连接,音频连接建立释放可由双方发起,与服务水平连接相关。
2.3.1 用户需求
2.3.2 典型使用场景
2.4 规范基础
LMP 链路建立优先,无固定主从角色,使用 RFCOMM 进行串口模拟传输数据和 AT 命令,AG 和 HF 需同步状态。
2.5 一致性
声称符合规范的设备需支持所有强制功能,可选和条件功能按指示支持,且不能依赖未指定的其他配置文件和协议,相关功能需通过蓝牙认证程序验证。
3. 应用层
3.1 功能要求
表格展示了 HF 和 AG 对连接管理、电话状态信息、音频连接处理等多种功能的支持情况(如接收 / 拒绝 / 终止呼叫、音频连接转移、呼叫等待通知等),部分功能为可选,部分为强制,且与特定操作和指示相关联。
3.2 编解码器要求
支持 CVSD 编解码器(强制),若支持宽带语音则需支持 mSBC 编解码器(条件强制),同时列出了不同编解码器在 HF 和 AG 上对不同链路特征的支持映射。
4. 免提控制互操作性要求
4.1 服务水平连接建立
可由 HF 或 AG 发起,需建立 RFCOMM 连接,建立过程包括初始化程序,涉及功能交换、编解码器协商、AG 指标确定、HF 指标处理等步骤,连接建立成功条件在 HF 和 AG 侧各有规定,需满足特定命令执行和指标信息获取等条件。
4.2 服务水平连接释放
可由 HF 或 AG 因用户请求或特定事件发起,释放连接会移除 RFCOMM 数据链路通道和音频连接,L2CAP 和链路层移除可选,若因音频连接转移导致服务水平连接移除,AG 可能会重新建立。
4.3 注册状态转移
通过 AT + CMER 命令启用 AG 的注册状态更新功能,AG 在注册状态改变时发送 + CIEV 结果代码,HF 可据此确定服务可用性状态,若功能未启用或指标被禁用则不发送结果代码。
4.4 信号强度指示转移
与注册状态转移类似,AG 在信号强度改变时发送 + CIEV 结果代码,HF 可解释代码确定信号强度,前提是相关功能启用且指标未被禁用。
4.5 漫游状态指示转移
同样,AG 在漫游状态改变时发送 + CIEV 结果代码,HF 可据此确定漫游状态,需满足功能启用和指标未禁用条件。
4.6 AG 电池电量指示转移
过程与上述类似,AG 在电池电量变化时发送 + CIEV 结果代码,HF 可获取电池状态信息,功能启用和指标未禁用时有效。
4.7 运营商选择查询
HF 可查询 AG 当前选择的网络运营商名称,需先建立服务水平连接,通过发送 AT + COPS 命令设置格式并查询,AG 以 + COPS 响应返回运营商名称。
4.8 报告扩展音频网关错误结果代码
HF 可启用 / 禁用 AG 的扩展音频网关错误结果代码,通过发送 AT + CMEE 命令控制,AG 在相关错误时发送 + CME ERROR 响应,前提是服务水平连接存在。
4.9 呼叫、呼叫建立和保持呼叫状态转移
通过 AT + CMER 命令启用 AG 的呼叫状态指示更新功能,AG 在呼叫状态改变时发送 + CIEV 结果代码,HF 可解析代码确定呼叫状态,包括呼叫、呼叫建立和保持呼叫状态的指示,同时涉及多种情况(如呼叫建立、释放、转移等)下的状态通知和处理。
4.10 音频连接建立
4.11 音频连接释放
HF 和 AG 可在呼叫过程中或无呼叫时释放音频连接,释放连接会断开同步连接,音频路径会按规定路由,需满足音频连接存在的前提条件。
4.12 接听来电
来电时 AG 向 HF 发送 RING 警报,HF 产生本地警报,用户可通过 HF 或 AG 接听,AG 根据是否支持带内铃声及用户操作进行相应处理,包括音频连接建立、路由和呼叫状态指示更新等。
4.13 拒接来电
用户可在 HF 或 AG 上拒接来电,AG 停止向 HF 发送警报并发送相应结果代码,HF 发送 AT + CHUP 命令(拒接来电)或用户在 AG 上操作均可实现拒接,涉及多种情况和指示更新。
4.14 终止呼叫过程
HF 或 AG 可通过用户操作或其他事件终止呼叫,HF 发送 AT + CHUP 命令,AG 执行相应操作并发送结果代码,包括终止正常呼叫和中断呼叫建立过程,呼叫终止后 AG 发送 + CIEV 结果代码指示呼叫状态变化。
4.15 音频连接向 HF 转移
呼叫过程中音频路径可从 AG 转移到 HF,需满足服务水平连接存在和 AG 有呼叫且音频路径可路由等条件,转移由 HF 或 AG 发起,导致音频连接建立,音频路径路由到 HF,若音频连接已存在则无需此操作。
4.16 音频连接向 AG 转移
4.17 使用 HF 提供的电话号码拨打电话
HF 可通过提供电话号码发起呼出,需建立服务水平连接(必要时)并发送 ATDdd…dd; 命令,AG 根据命令执行呼叫建立过程,涉及多种呼叫状态指示和结果代码发送,包括呼叫建立成功、远程方振铃、呼叫连接等状态,若 AG 支持三方通话且已有呼叫,则新呼叫建立时原呼叫会被保持。
4.18 HF 记忆拨号
HF 可使用 AG 的记忆拨号功能发起呼出,操作过程与使用 HF 提供电话号码拨打电话类似,需注意记忆位置对应号码的有效性,AG 根据情况返回相应结果,若支持三方通话且已有呼叫,新呼叫建立时原呼叫会被保持。
4.19 HF 重拨最后拨打的号码
HF 可通过发送 AT + BLDN 命令重拨 AG 最后拨打的号码,操作流程与记忆拨号类似,包括呼叫建立过程中的各种状态指示和结果代码处理,若支持三方通话且已有呼叫,新呼叫建立时原呼叫会被保持。
4.20 呼叫等待通知激活
HF 可发送 AT + CCWA 命令启用 AG 的呼叫等待通知功能,AG 在有来电等待时发送 + CCWA 结果代码,通知启用后一直有效直到被禁用或服务水平连接断开,需先建立服务水平连接。
4.21 三方通话处理
包括第三方来电等待通知(AG 接收第三方呼叫后通知 HF,HF 可接受或拒绝,接受时有多种操作和状态指示)和 HF 发起第三方呼叫(HF 发起呼叫时 AG 发送相关结果代码,呼叫过程中有多种状态变化和指示更新,HF 可通过 AT + CHLD 命令控制多方通话,包括释放指定呼叫、私人咨询模式等操作,AG 根据命令执行相应操作并报告状态变化,同时涉及错误处理和指示发送)两种情况,需满足服务水平连接和 AG 有呼叫等条件,操作过程遵循特定规范和命令格式,涉及多种呼叫状态和结果代码处理。
4.22 主叫号码识别(CLI)通知
HF 可发送 AT + CLIP 命令启用 AG 的 CLI 通知功能,AG 在来电时若支持且号码信息可用则发送 + CLIP 结果代码,通知启用后持续有效直到被禁用或服务水平连接断开,需先建立服务水平连接。
4.23 HF 请求关闭 AG 的回声消除(EC)和降噪(NR)功能
HF 可通过 AT + NREC 命令禁用 AG 的 EC 和 NR 功能,AG 默认开启,收到命令后若支持则在音频连接时禁用,不支持则返回 ERROR,HF 在建立音频连接前执行此操作,需先建立服务水平连接。
4.24 语音识别激活
HF 或 AG 可激活 / 停用 AG 的语音识别功能,HF 通过 AT + BVRA 命令,AG 通过 + BVRA 结果代码通知 HF,激活后 AG 建立音频连接并开始语音输入序列,功能激活持续时间取决于实现方式,涉及多种情况和命令响应处理,需先建立服务水平连接。
4.25 将电话号码附加到语音标签
HF 可向 AG 请求电话号码用于创建语音标签,AG 根据情况接受或拒绝请求,接受时返回电话号码,拒绝时返回 ERROR,多次执行时 AG 按顺序提供号码,需先建立服务水平连接。
4.26 发送 DTMF 码
HF 在通话中可通过发送 AT + VTS 命令指示 AG 向网络发送 DTMF 码,需满足服务水平连接和 AG 有呼叫的条件。
4.27 远程音频音量控制
AG 可通过 + VGM 和 + VGS 结果代码控制 HF 的麦克风和扬声器增益,HF 需支持至少扬声器音量远程控制,建立服务水平连接后即可进行控制,音频连接不是必要条件;HF 在服务水平连接建立时和增益设置改变时需通过 AT + VGM 和 AT + VGS 命令通知 AG,AG 据此同步音量值,支持相应控制功能时需遵循相关命令和响应格式。
4.28 响应和保持
允许用户将来电置于保持状态并在 HF 或 AG 上接受或拒绝,特定市场适用,涉及查询响应和保持状态(HF 通过 AT + BTRH? 命令查询 AG 状态,AG 根据情况返回相应结果)、将来电置于保持状态(HF 或 AG 在特定条件下可执行,涉及多种命令发送和状态指示更新)、接受或拒绝保持的来电(HF 或 AG 在来电保持时可执行相应操作,涉及命令发送、状态指示更新和结果代码处理)以及来电保持被终止(来电保持时若被呼叫者终止,AG 发送相应结果代码通知 HF)等操作,操作过程遵循特定命令和结果代码格式,涉及多种状态指示和响应处理。
4.29 用户号码信息查询
HF 可通过发送 AT + CNUM 命令查询 AG 的用户号码信息,AG 根据号码可用性返回 + CNUM 响应,若号码不可用则按规定处理,查询完成后 AG 发送 OK 响应,需先建立服务水平连接。
4.30 增强呼叫状态机制
HF 可通过发送 AT + CLCC 命令查询 AG 当前呼叫列表,AG 根据呼叫情况返回 + CLCC 响应,若无呼叫则不发送,查询完成后 AG 发送 OK 响应,需先建立服务水平连接。
4.31 增强呼叫控制机制
包括释放指定呼叫索引(HF 通过发送 AT + CHLD = 1<idx>命令释放 AG 中的特定呼叫,AG 执行操作并报告状态变化,索引无效时报告错误代码)和私人咨询模式(HF 通过发送 AT + CHLD = 2<idx>命令将多方呼叫中的其他方置于保持状态,AG 执行操作并报告状态变化,索引无效时返回错误代码),需先建立服务水平连接,操作遵循特定命令格式和响应处理。
4.32 AT 命令和结果代码
参考 3GPP 27.007 格式和语法规则,定义了 HFP 规范中 AT 命令和结果代码的具体规则,包括命令和结果代码的格式、字符使用、响应方式等,同时列出了从 GSM 07.07 和 3GPP 27.007 重用的 AT 命令和结果代码(如 ATA、ATDdd…dd;、AT + CCWA 等)及其功能、参数和适用情况,以及蓝牙定义的新 AT 命令和结果代码(如 AT + BIA、AT + BINP 等)及其语法、描述、参数和使用方式,明确了 AG 和 HF 对命令和结果代码的处理要求和行为规范,包括命令执行确认、错误处理、未知命令忽略等规则,以及对特定结果代码(如 + CME ERROR)的解释和处理方式。
4.33 指标激活和停用
HF 可通过发送 AT + BIA 命令改变 AG 发送的指标子集,AG 根据命令激活或停用指标,处理正确格式命令后发送 OK 或 ERROR 结果代码,命令效果在当前服务水平连接有效,涉及多种指标相关操作和状态更新,对特定指标(如 call、call status 和 held call)有特殊规定,AG 需支持该命令,HF 可选支持和使用。
4.34 HF 指标
HF 指标功能用于 HF 向 AG 通知特定指标值,包括支持指标转移(HF 在服务水平连接建立时向 AG 发送支持的 HF 指标列表)、AG 支持指标确定(HF 通过 AT + BIND =? 命令获取 AG 支持的 HF 指标)、启用指标转移(HF 通过 AT + BIND? 命令确定 AG 启用的 HF 指标)、指标激活 / 停用(AG 可通过 + BIND 结果代码改变 HF 指标的启用 / 停用状态,HF 在指标状态改变时应同步更新值)以及指标值更新(HF 在指标值变化时通过 AT + BIEV 命令通知 AG,AG 根据情况确认或返回错误代码)等操作,操作过程遵循特定命令和结果代码格式,涉及指标状态同步和错误处理。
5. 串口配置文件
5.1 RFCOMM 互操作性要求
对 RFCOMM 层无额外要求,遵循串口配置文件相关章节规定。
5.2 L2CAP 互操作性要求
对 L2CAP 层无额外要求,遵循串口配置文件相关章节规定。
5.3 SDP 互操作性要求
定义了适用于 HF 和 AG 的服务记录,包括属性(如 SupportedFeatures、Network 等)及其取值,明确了设备支持功能的表示方式和取值范围,规定了与旧版本 HFP 实现的交互方式(如与 0.96 版本实现的服务发现处理、与 1.0 和 1.5 版本实现的编解码器协商兼容性等),确保不同版本设备之间的互操作性,同时涉及属性值与 AT 命令(如 AT + BRSF)和结果代码(如 + BRSF)的关联和映射。
5.4 链路管理器(LM)互操作性要求
采用串口配置文件中对链路管理器的要求,同时强制 AG 和 HF 设备支持同步逻辑传输,需满足特定章节规定的要求。
5.5 链路控制(LC)互操作性要求
列出了与串口配置文件中链路控制器要求的变化,如 HF 对查询功能的支持、AG 对查询扫描功能的支持等,同时规定了实现 HF 角色的设备在设备类别设置方面的要求(如设置 “Audio” 位,可选设置特定的主设备类和次设备类),用于设备发现和过滤。
5.6 基带互操作性要求
支持 eSCO 链路(若支持宽带语音则为强制,否则为可选)和透明数据(条件支持),规定了错误数据传输的条件(仅在支持核心版本 2.1 或更高且用于宽带语音时可选),明确了不同功能的状态(如支持 eSCO 链路为强制,透明数据为条件支持,错误数据传输为条件可选)及其与宽带语音和核心版本的关系。
5.7 编解码器互操作性要求
支持 CVSD 编解码器(强制),支持 mSBC 编解码器(若支持宽带语音则为强制,否则排除),规定了同步连接建立时编解码器的选择逻辑(根据设备支持和协商确定,涉及多种参数配置和传输类型选择),同时涉及编解码器与链路参数的协商(编解码器协商确定使用的编解码器,链路参数由链路管理器协商,推荐了不同编解码器的优选链路参数)以及可选编解码器的支持情况(设备可支持可选编解码器以提高可用性,若使用需支持特定逻辑传输设置,未来可能添加新的可选编解码器)。
5.8 语音质量建议
建议在宽带语音连接的接收端实施某种形式的数据包丢失隐藏(PLC)算法(如附录 C 中的示例算法)以确保语音质量,规定了音频信号的电平标准(如在蓝牙接口上的 CVSD 和宽带语音编解码器的全尺度正弦波 PCM 数据应满足 + 3dBm0 网络电平)和频率响应要求(包括发送和接收灵敏度频率响应的公差掩码,以确保音频质量的一致性和兼容性),同时提及了 AG 和 HF 在信号处理和增益调整方面的责任(AG 调整增益到网络,HF 调整语音信号到蓝牙参考点,测试时建议使用网络模拟器)。