一.HFP SLC
SLC全称Service Level Connection。通俗一点讲就是HFP AG与HF建立连接之间需要提前交互的一堆AT命令。这些AT命令交互完之后,AG与HF就完成了SLC。
根据前文介绍,HFP 架构图:
HFP SLC的建立依赖AG与HF提前建立好RFCOMM连接。也就是AG与HF双方都必须提前建立好RFCOMM data link channel,才能进行HFP SLC的建立。另外HFP SLC的建立在AG与HF端都可以主动发起。
以下章节所讲的为HFP 特性中的第一点,Connection management
二.HFP SLC建立流程
首先直接上整体的连接流程图:
可以看到,其实HFP SLC建立也是在RFCOMM的基础上互发一些必要的AT指令
三.HFP SLC指令解析
1.AT+BRSF
原型:AT+BRSF=<HF supported features>
BRSF(Bluetooth Retrieve Supported Features),此命令就是用于HF和AG互相告知对方支持的特性。
HF支持特性如下:
AG支持特性如下:
2.AT+BAC
原型:AT+BAC=<HF available codecs>
BAC(Bluetooth Available Codecs)用于在SLC建立过程中,HF与AG双方协商后,双方都支持的编码格式
一般就如上两者,CVSD为窄带,mSBC为宽带
3.AT+CIND=?
原型:AT+CIND
CIND,查询支持的indicator列表。在发送完AT+BAC后,HF必须首先发送此AT指令查询AG indicator列表。
注:
AT+CIND=? ,HF向AG查询,AG端支持的indicator列表
+CIND ,AG端回复支持的indicator列表
AT+CIND? ,HF向AG查询,AG当前各个indicator的状态
+CIND ,AG端回复支持的indicator状态
4.AT+CMER
原型:AT+CMER=[<mode>[,<keyp>[,<disp>[,<ind> [,<bfr>]]]]]
CMER:Standard event reporting activation/deactivation AT command。简单来说就是使能或者去使能indicator。如果使能之后,当该indicator状态变化之后,AG要主动使用+CIEV指令向HF更新。HF收到+CIEV后,需要及时更新自己的状态
5.AT+CHLD=?
原型:AT+CHLD=<n>
CHLD:Standard call hold and multiparty handling AT command。该指令用于AG和HF双方都支持三方通话的场景。HF和AG需要使用该指令来确认双方三方通话的状态。
注:
AT+CHLD=? ,HF主动向AG查询三方通话的一些特性
+CHLD: ,AG上报HF,当前三方通话的特性和状态
6.AT+BIND=
原型:AT+BIND= <a>,<b>,<c>,...,<n>
BIND(Bluetooth HF Indicators Feature)。该指令用于HF向AG告知自己支持哪些HF Indicators Feature,以及哪些被使能了。该指令只有在HF和AG都支持BRSF时,才可以使用。
并且其中的值意义我们要到Bluetooth SIG Assigned Numbers [10] web page查询
注:
AT+BIND= ,用于HF向AG告知自己支持的HF Indicators Feature
AT+BIND=? ,用于HF向AG查询,AG侧支持的HF Indicators Feature
+BIND: ,AG向HF上报自己支持的HF Indicators Feature,不同的查询方式,该指令返回格式不一致,如下:
AT+BIND? ,HF向AG发送使能哪些HF Indicators Feature
四.实例解析
ellisys抓的包:
这其中有一些上面没有讲到的AT指令,各位大牛可以查阅HFP手册或者百度都可以轻易查到。其中有些是apple定制的AT指令,可以参考Apple-Accessory-Design-Guidelines_iphone_iOS.pdf手册,也可以查到需要的信息