HFP(Hands-Free Profile)是蓝牙协议中用于实现免提通话功能的规范,主要应用于车载系统、蓝牙耳机/音箱等设备。它基于RFCOMM协议,使用AT指令集进行控制,同时通过SCO/eSCO链路传输音频。HFP协议定义了两个核心角色:AG(Audio Gateway,音频网关,通常是手机)和HF(Hands-Free Device,免提设备,如耳机或车载系统)。
一、HFP AT命令基础
1.1 通信格式规范
| 方向 | 格式 | 说明 |
|---|---|---|
| HF → AG | AT<command><CR> |
以AT开头,回车符(0x0D)结尾 |
| AG → HF | <CR><LF><result code><CR><LF> |
回车换行包裹结果码 |
| AG响应 | OK / ERROR / +CME ERROR |
命令执行结果 |
二、服务级连接(SLC)建立流程
SLC(Service Level Connection)是HFP控制信道建立的基础,必须在RFCOMM连接之上进行。
音频网关(AG) 免提设备(HF) 音频网关(AG) 免提设备(HF) RFCOMM连接已建立 1. 能力交换 (BRSF) 2. 编解码器协商 (可选,HFP 1.6+) alt [双方都支持Codec Negotiation] 3. 状态指示器配置 4. 三方通话支持查询 (可选) alt [双方都支持三方通话] 5. HF指示器配置 (可选,HFP 1.7+) alt [双方都支持HF Indicators] 6. 音量同步 SLC建立完成,进入待机状态 AT+BRSF=<HF支持的特性> +BRSF:<AG支持的特性> OK AT+BAC=<HF可用编解码器> OK AT+CIND=? +CIND: (call,(0,1)),(callsetup,(0-3)),... OK AT+CIND? +CIND: 0,0,1,5,0,5,0 OK AT+CMER=3,0,0,1 OK AT+CHLD=? +CHLD: 0,1,1x,2,2x,3,4 OK AT+BIND=<HF支持的指示器> OK AT+BIND=? +BIND: 1,2 AT+BIND? +BIND: 1,1 / +BIND: 2,0 OK AT+VGS=<增益值> OK AT+VGM=<增益值> OK
三、来电处理完整流程
3.1 带内铃声(In-band Ringing)场景
音频网关(AG) 免提设备(HF) 音频网关(AG) 免提设备(HF) SLC已建立,音频连接已存在 AG通过音频通道播放铃声 opt [支持来电显示(CLIP)] HF本地产生提示音 loop [铃声持续] 通话建立,语音通过SCO传输 alt [用户通过HF接听] [用户通过AG接听] [用户通过HF拒接] RING (周期性发送) +CLIP: "<号码>",129 RING AT+ATA OK +CIEV: callsetup,0 +CIEV: call,1 +CIEV: callsetup,0 +CIEV: call,1 AT+CHUP OK +CIEV: callsetup,0
3.2 不带内铃声(No In-band Ringing)场景
音频网关(AG) 免提设备(HF) 音频网关(AG) 免提设备(HF) SLC已建立,无音频连接 HF本地产生铃声 opt [支持来电显示] 建立音频连接(SCO) 通话建立 RING (周期性发送) +CLIP: "<号码>",129 AT+ATA (用户接听) OK +CIEV: callsetup,0 +CIEV: call,1
四、去电(呼出)流程
音频网关(AG) 免提设备(HF) 音频网关(AG) 免提设备(HF) alt [通过号码拨号] [重拨最后一个号码] [记忆拨号] 建立音频连接(SCO) alt [对方接听] [对方拒接/取消] ATD<号码> AT+BLDN ATD><记忆位置> OK +CIEV: callsetup,2 (拨号中) +CIEV: callsetup,3 (响铃中/远端提醒) +CIEV: callsetup,0 +CIEV: call,1 (通话中) +CIEV: callsetup,0 +CIEV: call,0
五、三方通话(多路呼叫)管理
音频网关(AG) 免提设备(HF) 音频网关(AG) 免提设备(HF) 当前已有活跃通话 当前通话保持,被保持通话激活 多方通话建立 alt [接听新来电,保持当前通话] [挂断当前通话,接听新来电] [拒接等待中的来电] [切换两路通话] [合并通话(会议)] +CIEV: callsetup,1 (新来电等待) RING AT+CHLD=2 OK +CIEV: call,1 +CIEV: callheld,1 (有通话被保持) AT+CHLD=1 OK +CIEV: callsetup,0 +CIEV: call,1 AT+CHLD=0 OK +CIEV: callsetup,0 AT+CHLD=2 OK AT+CHLD=3 OK
六、关键AT命令速查表
| 命令 | 功能 | 方向 | 关键响应 |
|---|---|---|---|
AT+BRSF |
能力交换 | HF→AG | +BRSF:<bitmap> |
AT+BAC |
编解码器能力通知 | HF→AG | OK |
AT+CIND |
指示器查询/配置 | AG→HF | +CIND: |
AT+CMER |
事件报告启用 | HF→AG | OK |
AT+CHLD |
呼叫保持控制 | HF→AG | +CHLD:(测试) |
AT+ATA |
接听来电 | HF→AG | OK |
AT+CHUP |
挂断电话 | HF→AG | OK |
ATD<number>; |
拨号 | HF→AG | OK |
AT+BLDN |
重拨 | HF→AG | OK |
AT+VGS |
扬声器音量 | HF→AG | OK |
AT+VGM |
麦克风增益 | HF→AG | OK |
AT+BIND |
HF指示器配置 | HF→AG | +BIND: |
AT+BIEV |
指示器值更新 | HF→AG | OK |
RING |
来电提醒 | AG→HF | - |
+CLIP |
来电号码显示 | AG→HF | - |
+CIEV |
指示器值变化 | AG→HF | - |
七、状态指示器(CIND)详解
| 指示器 | 取值范围 | 含义 |
|---|---|---|
| service | 0,1 | 网络服务状态 (0=无服务, 1=有服务) |
| call | 0,1 | 通话状态 (0=无通话, 1=通话中) |
| callsetup | 0-3 | 呼叫建立状态 (0=无, 1=来电, 2=去电拨号中, 3=远端响铃) |
| callheld | 0-2 | 保持状态 (0=无保持, 1=通话保持, 2=活跃+保持) |
| signal | 0-5 | 信号强度 (0-5级) |
| roam | 0,1 | 漫游状态 (0=非漫游, 1=漫游) |
| battchg | 0-5 | 电池电量 (0-5级) |