4. HFP协议详解(下):呼叫控制AT命令与音频连接

本章深入HFP协议中与车载免提通话直接相关的核心机制:呼叫控制AT命令集、音频连接建立(SCO/eSCO)以及三方通话与呼叫等待处理。掌握这些内容是实现稳定、高质量车载蓝牙通话的关键。

4.1 呼叫控制AT命令(ATD/ATA/ATH)

HFP协议中,车载设备(HF)通过AT命令向手机(AG)发起或控制通话。以下是三个最核心的命令:

AT命令 功能 典型场景 AG响应示例
ATD>number<; 拨打电话 用户通过车载界面输入号码并点击拨号 OK 或 +CLCC: ...
ATA 接听来电 有来电时,用户按下车载接听键 OK
ATH 挂断电话 通话结束或用户主动挂断 OK
关键细节: ATD命令必须以分号结尾(ATD13800138000;),否则AG可能将其视为数据呼叫而非语音呼叫。ATA和ATH无需额外参数。

4.1.1 拨号流程与状态机

车载HF发起拨号时,需遵循以下AT命令交互序列:

  1. HF发送:ATD13800138000;
  2. AG响应:OK(表示拨号已发起)
  3. AG主动上报:+CLCC: 1,1,4,0,0,"13800138000",129(呼叫进行中)
  4. AG主动上报:+CLCC: 1,0,0,0,0,"13800138000",129(呼叫已接通)
  5. HF处理:收到接通状态后,HF应准备建立SCO音频连接。
开发建议: 不要仅依赖ATD的OK响应来判断通话建立成功,必须监听+CLCC上报的呼叫状态变化,才能准确获知对方是否已摘机。

4.2 音频连接建立:SCO与eSCO

通话的音频数据不通过RFCOMM传输,而是通过独立的SCO(同步面向连接)链路传输。eSCO(增强型SCO)是其改进版本。

特性 SCO eSCO
重传机制 无重传 有限重传(提高抗干扰能力)
数据包间隔 固定(如3.75ms) 可配置(如3.75ms/5ms/7.5ms)
音频质量 CVSD(64kbps) CVSD或mSBC(64kbps,支持宽带语音)
适用场景 传统窄带通话 高清语音(WBS)

4.2.1 SCO/eSCO连接建立流程

当AG上报呼叫已接通(+CLCC状态为0)后,HF应主动发起SCO/eSCO连接请求。流程如下:

  1. HF发送:+BCS: 1(选择mSBC编码,用于宽带语音)
  2. AG响应:OK
  3. AG发送:+BCS: 1(确认编码)
  4. HF发送:AT+BCC(请求建立SCO/eSCO连接)
  5. AG响应:OK,随后底层蓝牙协议栈开始建立SCO/eSCO链路。
  6. 链路建立成功:HF和AG之间开始传输音频数据。
常见问题: 如果HF在呼叫接通后未及时发起AT+BCC,AG可能会超时并自动挂断通话。建议在收到+CLCC接通状态后立即触发SCO连接请求。
SCO/eSCO连接建立时序图 车载设备 (HF) 手机 (AG) +BCS: 1 OK +BCS: 1 AT+BCC OK SCO/eSCO 链路建立 说明:HF必须在收到+CLCC接通状态后及时发起AT+BCC,否则AG可能超时挂断

4.3 三方通话与呼叫等待

HFP协议支持多方通话管理,包括呼叫等待(Call Waiting)和三方通话(Three-Way Calling)。车载HF需要处理以下场景:

4.3.1 呼叫等待处理

当用户在通话中,又有新来电时,AG会发送+CCWA通知:

+CCWA: "13800138001",128,1

参数说明:

  • 号码:等待呼叫的来电号码
  • 类型:128(国际格式)或129(国内格式)
  • 线路:0或1

HF收到此通知后,应通过UI提示用户有新的来电等待,并提供以下操作选项:

用户操作 HF发送命令 效果
接听新来电,保持当前通话 AT+CHLD=2 新来电接通,当前通话保持
挂断当前通话,接听新来电 AT+CHLD=1 当前通话挂断,新来电接通
拒绝新来电 AT+CHLD=0 新来电被拒绝

4.3.2 三方通话会议

当用户已有一个保持中的通话和一个激活中的通话时,可以发起三方通话(会议电话):

AT+CHLD=3

AG响应OK后,所有参与者将进入同一通话。HF需要管理以下状态:

  • 激活通话:当前正在通话的参与者
  • 保持通话:被暂时挂起的参与者
  • 会议通话:所有参与者合并后的通话
状态管理要点: HF必须通过+CLCC命令定期轮询当前所有呼叫的状态,以正确更新UI显示。会议通话中,+CLCC会返回多个呼叫条目,其中会议通话的方向字段为5(多方)。
三方通话状态转换图 单通话 1个激活通话 通话+等待 1激活+1等待 保持+激活 1保持+1激活 三方会议 所有参与者 新来电 AT+CHLD=2 AT+CHLD=3 AT+CHLD=1 挂断激活通话

4.4 本章小结

  • AT命令:ATD(拨号)、ATA(接听)、ATH(挂断)是HFP呼叫控制的基础,必须正确处理响应和状态上报。
  • SCO/eSCO:音频链路建立是通话质量的关键,eSCO通过重传机制提供更好的抗干扰能力,支持宽带语音(mSBC编码)。
  • 三方通话:通过AT+CHLD命令管理呼叫等待和会议电话,HF必须持续轮询+CLCC以维护准确的通话状态。
实战要点: 在集成HFP时,建议使用状态机管理通话状态,并实现超时重试机制(如SCO连接失败后重试2-3次),以提升用户体验和系统稳定性。