蓝牙之十四 HFP profile

Profile依赖

图中绘出了蓝牙profile结构和其依赖,profile之间可以存在依赖关系。根据图1可以知道Hands-Free Profile依赖于Serial Port Profile和Generic Access Profile。
 
图1.1 蓝牙profile

HFP协议栈

    基带,LMP以及L2CAP是蓝牙OSI协议的第一和第二层。
RFCOMM是蓝牙的模拟串口,SDP是蓝牙的服务发现协议。
Hands-Free control实现了Hands-Free规范信息控制,该信息基于AT命令格式。

Audio port是模拟Audio Gateway的音频端口,


 
 图1.2 协议栈
    Audio Gateway(AG) 角色是audio 的gateway角色,一个例子是智能手机。
    Hands-Free Unit(HF)-是Audio Gateway远程音频输入和输出设备。如蓝牙耳机等。
HFP协议要求必须支持单声道,CVSD(Continuously variable slope delta modulation)格式的语音传输,
HF(Hands-Free) unit和Audio Gateway都可以发起和断开Audio。
    基带授权和加密对HF unit和Audio Gateway都是可选的。

HFControl层

    HF和AG都可以发起服务层连接,服务层连接能够建立的前提是RFCOMM连接已经建立,也就是HF和AG的之间需要有RFCOMM的数据链路。
    如果在建立服务连接时RFCOMM并未在AG和HF之间建立,则发起方应当先发起RFCOMM建立,RFCOMM的建立是在GAP的SPP中定义的。
    服务层连接的建立过程,HF端首先发送AT+BRSF=命令通知AG其对HF特性的支持情况,同时收到AG的包含其支持特性的+BRSF返回码。
在收到AG支持的特性信息后,HF将会发送AT+CIND=?命令查询AG支持indicator和其顺序,这是因为3GPP 27.007规范定义的AG支持扩充indicator,而这些indicator在HF里也许并不支持。可知道AG支持的indicator以及indicator的顺序。
    在收到支持AG状态的indicator之后,HF将发送AT+CMER命令使能AG的indicator状态更新功能,AG将以OK应答。然后AG可以发送+CIEV非固定结果码指示服务/电话/电话建立等状态变化。HF将使用+CIEV码更新其内部和外部indicator。
    一旦indicator状态更新功能被使能,AG将只在收到AT+CMER或者服务链接断开情况停用该功能。
    如果indicator状态更新功能被使用,如果三方电话功能被HF和AG支持,则HF将会发送AT+CHLD=?查询AG是如何支持呼叫保持以及多方服务支持的。如果HF和AG其中一个不支持三方电话,则AT+CHLD=?命令不会被发送。
    HF在以下情况发生时认为服务连接成功初始化:
  •    在AG和HF的SDP协议里指示都支持三方电话时,收到AG的AT+CHLD应答命令。
  •  在AG或HF不支持三方电话时,在HF成功发送了indicator状态更新的AT+CMER命令。
  AG在以下情况发生时认为服务连接成功建立:
  •   AG成功用+CHLD命令响应多方电话。
  • 成功响应HF发来的AT+CMER命令。

图1.2 服务层连接建立过程

音频连接建立

HF或者AG可以在需要的时刻建立音频连接,音频连接建立过程意味着同步连接。音频连接建立并不依赖任何电话过程。
    一旦HF和AG之间建立好了音频连接,AG会将HF选择作为首选音频端口。AG将会保持音频通路,(voice,alert以及按键音)都可以通过HF放出来。

来电应答

来电时,AG将发送序列的RING alert给HF,RING持续的时间和来电pend时间一直。 HF可以用区别于AG的RING来提示来电。
如果AG的SDP(或+BRSF)显示支持“In-band ring tone”,AG将发送in-band ring tone。

图1.3 HF来电接听-(in-band ring tone)

图1.4 HF来电接听-no in-band ring tone

HF拨号

HF可以发起对外的呼叫,通过把电话号码传给AG。开始电话建立要求服务连接已经建立并且发送ATDdd...dd给AG。AG然后发起打电话过程并返回+CIEV结果码,值为2的码表示电话拨打成功发起。

此处省去若干AT命令提供的功能描述。

AT命令

回车
换行
HF到AG的AT命令格式如下:

AG到HF的OK返回格式如下:
OK
AG到HF的error返回
ERROR
AG到HF不固定的返回结果码如下:


	ATA
标准的电话应答AT命令
	ATDdd...dd;
	HF发送给AG的电话号码,HF侧拨号用
	ATD>nnn...;
	标准ATD扩展命令,使用AG预存储的号码进行拨号,nnn指定哪一个号码
	ERROR
	标准错误指示码,
	OK	
	命令的标准应答
	NO CARRIER, BUSY, NO ANSWER, DELAYED, BLACKLISTED
	AT命令的扩展应答,其实对+CME ERROR:的扩展应答
	RING
	标准的来电指示
	AT+CCWA
	标准的呼叫保持命令。AT+CCWA=[[,[,]]]
	+CCWA
	标准呼叫保持应答码,
	AT+CHLD
标准呼叫保持以及多方电话处理。AT+CHLD=命令相关字段,可取0, 1, 1, 2, 2,3 and 4,它们的意义如下:
0:释放所有保持的电话
1:释放所有激活的电话,并接受其他保持的电话
1:释放idx指定的处于激活的电话
2:将所有激活的电话保持以接听其它电话
2:将除了idx指示的其它电话设置成呼叫保持状态
3:增加一个电话进入会话
4:连接两个电话,断开它们的订阅者。
AT+CHLD=?用于获取电话保持和多方电话的情况。
	AT+CHUP
	标准的挂断AT命令。
	AT+CIND
	更新indicator的AT命令。
	+CIND
	当前电话的indicator 列表
	AT+CLCC
	列出当前电话命令。
	+CLCC
	AG列出当前电话。
	AT+CMER
	事件报告使能/禁止命令,AT+CMER=[[,[,[, [,]]]]]命令中的是和本协议相关的。
	+CIEV
	事件报告,+CIEV: ,
此外还支持bluetooth定义的AT命令
AT+BINP (Bluetooth INPut):用于AG传输数据到HF.
AT+BLDN: Bluetooth Last Dialed Number
AT+BVRA (Bluetooth Voice Recognition Activation)

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