HFP简介

1 服务级连接建立

服务级连接可以理解为两个蓝牙设备之间进行信息交换的过程。在此过程中完成以下操作:

  • HF和AG交互支持的特性
    – 由于两个设备支持的蓝牙协议版本不同,或者HF支持的特性不同(例如是否具备输入接口以及接口类型等),在连接建立前需要进行信息的交互,以便于后续操作的执行(例如鉴权等操作会依赖于上述信息)。

  • 通过CIND命令查询并交互indicator信息
    – 所谓Indicator是指蓝牙设备的信息指示器,例如电量指示器,信号强度指示器,以及呼叫状态指示器等。
    – 首先HF通过AT+CIND=?命令查询AG支持的指示器以及其顺序;然后通过AT+CIND命令去读取各个指示器的状态信息。在上述两个过程中,AG都是通过+CIND命令进行应答的。

  • 使能指示器状态更新功能。
    – HF通过AT+CMER=命令去使能指定指示器的状态更新功能(通过参数可以使能指定的指示器)。
    – 后续如果AG的指示器状态发送改变(且该指示器的状态更新功能已经使能),则AG会自动上报新的状态信息,例如,蓝牙信号强度发送改变时,AG会通过+CIEV 5,4类似的方式上报新的信号强度。
    HFP简介_第1张图片

2 链路丢失恢复

蓝牙连接丢失时,HF可能会重新连接。如果是某一端显式断开了连接,HF在等到显式指令前不会发起服务级连接建立流程。
在连接状态下,HF会不断监测链路状态,如果在一段时间(可以配置)内监测不到链路,HF可能会重新发起连接建立过程。需要注意的是,判定链路丢失的”链路超时时间“是可以改变的,按照协议规定,该时间范围为0.625ms到40.9s。

3 服务级连接释放

  • HF或AG都可以发起。
  • 服务级连接释放会导致RFCOMM连接释放。

4 状态指示通信

连接建立后,AG会通过一些命令向HF上报一些状态的变化,包括注册状态,信号强度,漫游状态以及电量等。
状态信息上报需要满足两个条件:1. 存在服务级连接,如果不存在,AG会发起服务级连接建立流程创建;2. 已通过AT+CMER命令使能了相关状态更新功能。

流程 命令 功能
注册状态通信 +CIEV AG通过+CIEV结果码发送注册状态
信号强度指示通信 +CIEV 信号强度变化时,AG通过+CIEV命令通知HF信号强度
漫游状态指示通信 +CIEV AG注册状态改变时,AG通过+CIEV结果码发送注册状态
电量等级指示通信 +CIEV 电池电量发送改变时,AG会通过+CIEV命令通知HF

说明:虽然上面几个流程中都采用相关的命令+CIEV,但是在不同的流程中发送的结果码(指示器的索引)不同,HF通过解析相应的结果码来获取相应的信息。

5. 查询运营商选择

前提:存在服务级连接。
触发条件:内部事件或者HF发起。
步骤:首先通过AT+COPS=3,0命令设置网络名称的格式,然后通过AT+COPS?命令向AG查询当前选择的运营商的名称,AG会通过+COPS返回查询信息。
HFP简介_第2张图片

6 呼入应答

有电话呼入时,AG会不停的向HF发送振铃(RING),直到呼叫被应答或者因为其它原因终止。HF收到RING后会产生本地振铃通知用户。如果AG的SDP表明它支持“带内振铃”的话,AG默认向HF发送带内振铃,后续可以通过+BSIR命令来设置是否采用带内振铃。
呼入电话可以由HF应答(分为带内振铃和非带内振铃),也可以由AG应答。下面分别介绍。

6.1 HF应答-带内振铃

如果AG支持并选择使用带内振铃通知HF时,AG需要首先建立SCO连接,带内振铃承载在SCO连接上。
通过HF应答后,HF会向AG发送ATA命令(应答命令),AG收到该命令后会启动电话接听流程,同时会向AG发送+CIEV命令通知当前状态变化(call setup = 0, call =1)。

6.2 HF应答-非带内振铃

非带内振铃方式和带内振铃方式类似,应答后HF也向AG发送ATA命令,AG通过+CIEV命令向HF通知状态变化。不同之处在于,非带内振铃方式下,应答后通常会有SCO连接建立的过程。

6.3 AG应答

AG应答后会停止振铃并通过+CIEV命令通知HF状态变化。

7. 拒接/挂断电话

拒接电话是在有电话呼入时,通过HF或者AG结束该呼叫的过程。挂断电话操作是在呼叫已经建立后,再终止通话的过程,也可以由HF或者AG完成。
由HF拒接/挂断呼叫时,HF发送AT+CHUP命令,AG收到该命令后停止振铃/执行呼叫断开流程,同时AG会向HF恢复OK,并利用+CIEV命令通知状态变化。
由AG拒接/挂断呼叫后,AG通过+CIEV命令向HF通知状态变化即可。

8 利用HF发起呼叫

HF可以通过多种方式发起呼叫,具体结束如下。

8.1 利用HF提供的电话号码进行呼叫

该过程根据HF发送到AG的号码发起呼叫,该功能需要HF支持输入接口。发起呼叫前,如果没有建立服务级连接,HF需要先发起服务级连接。然后HF会发送ATDdd…dd;命令。后续AG会通过+CIEV命令上报呼叫状态的变化。
该功能要求HF支持电话号码的输入功能。
HFP简介_第3张图片

8.2 HF进行记忆拨号

该过程和8.1所述流程基本一致,但是该流程中发送的命令为ATD>nnn。AG在收到该命令后会利用存储在nnn位置的号码发起呼叫建立过程。
该流程需要AG支持记忆拨号特性。

8.3 HF进行上次号码重播

该功能可以对上次所拨的号码发起呼叫,其基本流程和8.1类似。在该流程中,HF向AG发送的命令为AT+BLDN。

9. 三方呼叫处理

三方呼叫处理分为两种情况:一种是由AG接收第三方呼叫,并利用呼叫等待通知功能将通知发送到HF;另一种是由HF发起第三方呼叫。
需要注意的是,并不是所有情况下都支持三方通话,有时会因为网络原因无法建立三方通话,此时通常会通过+CMR返回错误码(30: 网络资源首先;31:网络超时).

9.1 AG接收第三方呼叫

注意,在AG接收第三方呼叫前,HF必须先通过AT+CCWA命令使能“呼叫等待通知”功能。
如下图流程所示,AG收到第三方呼叫时,会向HF发送AT+CCWA命令通知新的呼叫到达,同时也会通过+CIEV(3,1)命令指示新的呼叫状态。如果用户通过HF接听了电话,则会向AG发送AT+CHLD命令。后续,AG会通过+CIEV命令上报呼叫状态的变化。
注意,如果在上述过程中因为网络原因无法建立三方通话,AG会通过+CMR发送错误码。
HFP简介_第4张图片

9.2 HF发起第三方呼叫

HF通过ATD命令发起呼叫(已经有一个呼叫正在通话中),AG将正在进行的通话保持并启动新呼叫的建立流程,在此过程中AG会通过+CIEV命令上报呼叫状态的改变。

HFP简介_第5张图片
如上图所示,HF可以改变被保持的通话的状态,例如恢复通话等,这是HF会向AG发送AT+CHLD命令。

你可能感兴趣的:(蓝牙)