基于Android P版本分析
协议架构

Profile Dependencies

在蓝牙电话的数据传输中使用的是SCO协议(同步定向链接)。支持对时延敏感的信息如语音。
使用保留带宽进行同步通信,即两台设备在LMP层利用保留时隙在物理信道上周期传送数据包,这种类型的链接主要用于传送SCO包(语音数据)。SCO不包括CRC码,且不进行重传,主要支持传输有时间限制的信息,例如声音。
仅仅在ACL链接已经建立之后,才可以建立SCO链接;
-
AT CMD:AT指令是应用于终端设备和PC应用之间的连接与通信的指令;
-
SPP:蓝牙串口协议,在蓝牙设备之间建立虚拟的串口进行数据通信,简单的说就是两个蓝牙设备对端发送自定义数据;iPhone不支持SPP协议;
-
GAP:通用访问配置文件,该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接;GAP定义了蓝牙设备如何发现和建立与其他设备的安全/不安全连接,它处理一些一般模式的业务(询问、命名和搜索)和一些安全性问题;GAP一般有4个作用:
- Profile Role
- 可发现模式和过程
- 连接模式和过程
- 安全模式和过程
-
eSCO:可以简单的理解为和SCO不同点:支持数据包的重传;
-
incoming call:由Phone Network到AG的通话,即称为来电;
-
outgoing call:由AG到Phone Network的通话,即称为拨号,去电;
HFP Protocol Stack
针对蓝牙电话,涉及到的协议有:HFP、RFCOMM;

目前HFP的使用场景常见的有车载蓝牙、耳机、PDA(Personal Digital Assistant - 掌上电脑,类似于智能手机、平板电脑、手持游戏机等),其中HFP协议中定义了AG和HFP两种角色:
- AG(Audio Gate):音频网关 - 音频设备输入输出网关;
- HF(Hands Free):免提 - 该设备作为音频网关的远程音频输入 / 输出机制,并可提供若干遥控功能;
在车载领域,手机侧为AG,车载侧为HF,在Android源码定义中,通常将AG称为HFP/AG,将HF称为HFPClient/HF;
HFP功能支持情况
(M代表强制支持,O代表可选)
Num | function | HF | AG | Num | function | HF | AG |
---|---|---|---|---|---|---|---|
1 | 连接管理 | M | M | 14 | 噪声抑制回声消除 | O | O |
2 | 电话状态信息 | M | M | 15 | 语音识别 | O | O |
3 | 音频连接处理 | M | M | 16 | 号码绑定语音标签 | O | O |
4 | 接收语音来电 | M | M | 17 | 传输多音频能力 | O | M |
5 | 拒绝语音来电 | M | O | 18 | 远程音量控制 | O | O |
6 | 中断电话 | M | M | 19 | 回复和保持 | O | O |
7 | 通话中音频链路切换 | M | M | 20 | 描述号码信息 | O | M |
8 | 免提设备拨号 | O | M | 21a | 扩展电话状态 | O | M |
9 | 历史列表拨号 | O | M | 21b | 扩展电话控制 | O | O |
10 | 拨打最后一个电话 | O | M | 22 | 特有指示 | O | M |
11 | 拨号等待通知 | O | M | 23 | 宽频语音 | O | O |
12 | 三方通话 | O | O | 24 | 编解码器协商 | O | O |
13 | CLI(呼叫线路识别) | O | M | 25 | 手持设备指示器 | O | O |
AT 指令集
GSM 07.07 & 3GPP 27.077 重用的 AT 功能
CMD | 发送方 | Syntax | Response | Name | Description |
---|---|---|---|---|---|
ATA | OK | 标准呼叫应答命令 | |||
ATDdd...dd | 车机 | OK | 标准AT命令,用于拨打电话号码 | 本规范仅包括语音通话 | |
ATD>nnn... | 车机 | OK | 标准ATD命令的扩展,用于内存拨号 | 本规范仅涉及语音通话 | |
ERROR | 标准错误指示代码 | ||||
OK | 对命令执行的标准确认 | ||||
NO CARRIER, BUSY, NO ANSWER, DELAYED, BLACKLISTED | AT命令的扩展响应指示代码 | 这些指令由AG向HF发送,作为对HF向AG发出的AT命令的响应,或从AG发出,作为未经请求的结果代码 | |||
RING | 标准来电指示 | ||||
AT+CCWA | 车机 | AT+CCWA=[[,[,]]] | +CCWA | 标准的呼叫等待通知AT命令 | 在该规范中,仅适用参数启动/禁用呼叫等待通知主动结果代码 |
+CCWA | 手机 | 标准"呼叫等待通知"主动结果代码 | 该规范中仅包含两个属性:number和type number:文本字符串,并应始终包含在双引号内 type:字段指定提供的电话号码的格式 | ||
AT+CHLD | 车机 | AT+CHLD= | 标准呼叫保持和多方处理AT命令 | 的取值范围: 0:释放所有保持的呼叫或将用户确定的用于忙(UDUB)设置为等待呼叫 1:释放所有活动呼叫(如果存在),并接收其他呼叫(保持或等待) 1:释放具有指定索引(索引值为值)的调用 2:保持所有活动呼叫(如果存在)并接受另一个(保持或等待)呼叫 2:使用指定呼叫()请求私人咨询模式。(将所有呼叫置于保持状态,指示的呼叫除外) 3:将保持的呼叫添加到对话中 4:连接两个呼叫并断开用于与两个呼叫的连接(显式呼叫转移)。 | |
AT+CHUP | 车机 | 标准挂起AT命令 | 执行命令使AG终止当前活动的调用 | ||
AT+CIND | 车机 | AT+CIND=?:获取对方特性支持情况 AT+CIND?:获取对方特性值 | +CIND | 标准指示更新AT命令 | |
+CIND | 手机 | 当前电话指示器的标准列表 | |||
AT+CLCC | 车机 | OK | 标准列表当前呼叫命令 | ||
+CLCC | 手机 | OK | 标准列表当前调用结果代码 | ||
AT+COPS | 车机 | +COPS:,, | 用于读取网络运营商信息 | :包含当前模式并且不提供有关操作员名称的信息 :指定参数字符串的格式,在本规范中应始终为0 :以字母数据格式指定带引号的字符串,表示网络运营商的名称。该字符串不得超过16个字符 | |
AT+CMEE | 车机 | 标准AT命令用于启用 | |||
+CME ERROR | +CME ERROR: | 扩展音频网关错误结果代码响应 | 使用结果代码+CME ERROR:作为与AG功能相关的错误的指示 | ||
AT+CLIP | 车机 | AT+CLIP= | +CLIP | 标准呼叫线路识别通知激活AT命令 | 它启用/禁用呼叫线路识别通知主动结果代码 +CLIP |
+CLIP | 手机 | +CLIP: , type> [,, [,[] [,]]] | 标准呼叫线路识别通知主动结果代码 | :参数应为文本字符串,并应始终包含在双引号内 :字段指定提供的电话号码的格式 | |
AT+CMER | 车机 | AT+CMER=[[,[,[, [,]]]]] | OK | 标准事件报告激活/停用AT命令 | :该参数一般情况下value = 3 :分为两种情况:0代表禁用,1代表激活 |
+CIEV | 手机 | +CIEV: , | 标准的指标事件报告主动结果代码 | :AT+CIND=?命令。列表的第一个元素应具有=1 :指标的当前状态 | |
AT+VTS | 车机 | AT+VTS= | 标准DTMF生成AT命令 | ||
AT+CNUM | 车机 | AT+CNUM AT+CNUM=? | +CNUM | 检索用户号码信息 测试用户号码信息 - 未实施 | HF为AG中的"用户号码信息"功能发出的命令。仅使用AT+CNUM格式的动作命令 |
+CNUM | 手机 | +CNUM: [],, ,[ ,] | 将"订户号码信息"从AG发送到HF的标准响应 | :不支持此可选字段,应留空 :包含电话号码的引用字符串,格式由指定 :字段指定提供的电话号码的格式 :不支持此可选字段,应留空 :表示此电话号码与哪个服务相关,4代表语音,5代表传真 |
蓝牙定义的 AT 功能
CMD | 发送方 | Syntax | Response | Desc | |
---|---|---|---|---|---|
AT+BIA | 车机 | AT+BIA=[<indrep 1>[,...[,[]]]]]] | 蓝牙指示激活,单独激活或停用指示器 | :代表了指标x的状态,1代表激活,0代表禁用 | |
AT+BINP | 车机 | AT+BINP= | +BINP: ... | 蓝牙输入,用于从AG请求某些特定数据输入的命令 | 收到此命令后,AG应执行适当的操作,以便使用+BINP响应将请求的信息发送回HF :数据请求,其中value = 1对应于HF中记录的最后一个语音标签的电话号码 :AG返回的数据参数。该参数内容取决于,一般情况下为Phone number |
AT+BLDN | 车机 | AT+BLDN | 蓝牙最后拨打的号码 | 用于呼叫最后拨打的电话号码。收到此命令后,AG应建立对最后拨打的电话号码的语音呼叫。 | |
AT+BVRA | 车机 | AT+BVRA= | +BVRA | 蓝牙语音识别激活 | 启用/禁用AG中的语音识别功能,如果支持增强语音识别状态功能,则此命令用于向AG指示HF已准备号呈现音频输出 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别,2代表仅当AG和HF都支持增强语音识别状态功能时才应使用该值 |
+BVRA | 手机 | +BVRA: [,](#CMD 发送方 Syntax Response Desc AT+BIA 车机 AT+BIA=[<indrep 1>[,…[,[]]]]]] 蓝牙指示激活,单独激活或停用指示器 :代表了指标x的状态,1代表激活,0代表禁用 AT+BINP 车机 AT+BINP= +BINP: … 蓝牙输入,用于从AG请求某些特定数据输入的命令 收到此命令后,AG应执行适当的操作,以便使用+BINP响应将请求的信息发送回HF :数据请求,其中value = 1对应于HF中记录的最后一个语音标签的电话号码 :AG返回的数据参数。该参数内容取决于,一般情况下为Phone number AT+BLDN 车机 AT+BLDN 蓝牙最后拨打的号码 用于呼叫最后拨打的电话号码。收到此命令后,AG应建立对最后拨打的电话号码的语音呼叫。 AT+BVRA 车机 AT+BVRA= +BVRA 蓝牙语音识别激活 启用/禁用AG中的语音识别功能,如果支持增强语音识别状态功能,则此命令用于向AG指示HF已准备号呈现音频输出 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别,2代表仅当AG和HF都支持增强语音识别状态功能时才应使用该值 +BVRA 手机 +BVRA: , 蓝牙语音识别激活 当AG中的语音识别功能由AG自主激活/停用时,用于通知HF的非请求结果代码 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别 :反映AG上语音识别引擎当前状态的位掩码 :仅当AG和HF都支持语音识别文本功能,才会出现 AT+BRSF 车机 AT+BRSF= +BRSF 蓝牙检索支持的功能 通知AG HF中可用的支持功能,并请求有关AG中支持的功能的信息。支持的特性应以十进制值表示 0:EC / NR 功能 1:三方通话 2:CLI演示功能 3:语音识别激活 4:远程音量控制 5:增强的通话状态 6:增强的呼叫控制 7:编解码器协商 8:HF 指标 9:支持的eSCO S4 设置 10:增强的语音识别状态 11:语音识别文本 12-31:留作将来使用 +BRSF 手机 +BRSF: 蓝牙检索支持的功能 AG响应AT+BRSF命令发送的结果码,用于通知HF AG支持哪些功能。支持的特性应以十进制值表示 0:三方通话 1:EC / NR 功能 2:语音识别功能 3:带内铃声功能 4:将号码附加到语音标签 5:拒绝来电的功能 6:增强的通话状态 7:增强的呼叫控制 8:扩展错误结果代码 9:编解码器协商 10:HF 指标 11:支持的 eSCO S4 设置 12:增强的语音识别状态 13:语音识别文本 14-31:留作将来使用 AT+NREC 车机 AT+NREC= 降噪和回声消除 发出命令以禁用嵌入AG中的任何回声消除和降噪功能 :0代表了在AG中禁用 EC / NR AT+VGM 车机 AT+VGM= +VGM= 麦克风增益 HF发出的命令,用于向AG报告其当前的麦克风增益级别设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的麦克风增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15 AT+VGS 车机 AT+VGS= +VGS= 扬声器增益 HF发出的命令,用于向AG报告其当前的扬声器增益水平设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的扬声器增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15 +VGM 手机 +VGM= 麦克风增益 由AG主动发出的结果代码,用于设置HF的麦克风增益。 +VGS 手机 +VGS= 扬声器增益 由AG主动发出的结果代码,用于设置HF的扬声器增益 +BSIR 手机 +BSIR: 带内铃声的蓝牙设置 由AG发出的主动结果代码,用于向HF指示带内铃声设置已在本地更改。HF可以通过改变自己的警报方法作出响应的反应 :0代表了AG不提供带内铃声,1代表AG提供带内铃声 AT+BTRH 车机 AT+BTRH=:设置指令 AT+BTRH?:读取当前状态 +BTRH 蓝牙响应和保持功能 HF为AG中的“响应和保持”功能发出的命令。本规范定义了set和read命令的使用,AT+BTRH ? HF应使用命令来查询 AG 的当前“响应和保持”状态 :0代表保留来电,1代表接受保持的来电,2代表拒绝保持的来电 +BTRH 手机 +BTRH= 蓝牙响应和保持功能 每当来电被搁置或接受或拒绝时,用于通知HF的结果代码。对于AT+BTRH,AG是否也应回复此响应 ? 来自 HF 的命令 :0代表了来电在 AG中保持,1代表了在AG中接受保持的来电,2代表了在AG中拒绝保持的来电 AT+BCC 车机 AT+BCC 蓝牙编解码连接 HF使用该命令请求AG启动编解码器连接过程 AT+BCS 车机 AT+BCS= 蓝牙编解码器选择 此命令向远程设备(AG)确认编解码器,并隐含地确认将在同步连接上使用哪个同步协议,如果不包含任何值,则该命令无效 :所有可能的Codec ID,将AT+BAC的定义 +BCS 手机 +BCS: 蓝牙编解码器选择 该命令将编解码器通知给远程设备(HF),并隐含地通知将在同步连接上使用哪种同步协议 :所有可能的Codec ID,将AT+BAC的定义 AT+BAC 车机 AT+BAC= [[,[,...[,]]]] (u1,u2, ..., un are a codec IDs) OK 蓝牙可用编解码器 此命令通知远程设备(AG)HF支持哪些编解码器 :所有可能的Codec ID,将AT+BAC的定义 AT+BIND 车机 AT+BIND= ,,,...,:列出HF支持的指标 AT+BIND=?:阅读AG支持的指标 AT+BIND?:读取指示的AG启用/禁用状态 +BIND 蓝牙HF指示功能 该命令使HF能够通知AG支持哪些HF到AG指示符。指示器可以启用或禁用。除非“HF 指示器”功能的 AG 和 HF BRSF 位都设置为1,否则不应使用AT+BIND命令 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。 +BIND 手机 +BIND: (,,,...,):响应AT+BIND=? +BIND: ,:主动或响应AT+BIND? 蓝牙HF指示功能 该响应使AG能够通知HF支持哪些HF指示器及其状态,启用或禁用。 除非“HF 指示器”功能的AG和HF BRSF为都设置为1,否则不应使用+BIND响应 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。 :0 - 1,其中0代表了指示器被禁用,不应为此指示器发送值更改,1代表了指示器已启用,可以为该指示器发送值更改 AT+BIEV 车机 AT+BIEV= , 蓝牙HF指示功能 此命令使HF能够将启用的HF指示器的更新值发送到AG "#") | 蓝牙语音识别激活 | 当AG中的语音识别功能由AG自主激活/停用时,用于通知HF的非请求结果代码 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别 :反映AG上语音识别引擎当前状态的位掩码 :仅当AG和HF都支持语音识别文本功能,才会出现 | |
AT+BRSF | 车机 | AT+BRSF= | +BRSF | 蓝牙检索支持的功能 | 通知AG HF中可用的支持功能,并请求有关AG中支持的功能的信息。支持的特性应以十进制值表示 0:EC / NR 功能 1:三方通话 2:CLI演示功能 3:语音识别激活 4:远程音量控制 5:增强的通话状态 6:增强的呼叫控制 7:编解码器协商 8:HF 指标 9:支持的eSCO S4 设置 10:增强的语音识别状态 11:语音识别文本 12-31:留作将来使用 |
+BRSF | 手机 | +BRSF: | 蓝牙检索支持的功能 | AG响应AT+BRSF命令发送的结果码,用于通知HF AG支持哪些功能。支持的特性应以十进制值表示 0:三方通话 1:EC / NR 功能 2:语音识别功能 3:带内铃声功能 4:将号码附加到语音标签 5:拒绝来电的功能 6:增强的通话状态 7:增强的呼叫控制 8:扩展错误结果代码 9:编解码器协商 10:HF 指标 11:支持的 eSCO S4 设置 12:增强的语音识别状态 13:语音识别文本 14-31:留作将来使用 | |
AT+NREC | 车机 | AT+NREC= | 降噪和回声消除 | 发出命令以禁用嵌入AG中的任何回声消除和降噪功能 :0代表了在AG中禁用 EC / NR | |
AT+VGM | 车机 | AT+VGM= | +VGM= | 麦克风增益 | HF发出的命令,用于向AG报告其当前的麦克风增益级别设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的麦克风增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15 |
AT+VGS | 车机 | AT+VGS= | +VGS= | 扬声器增益 | HF发出的命令,用于向AG报告其当前的扬声器增益水平设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的扬声器增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15 |
+VGM | 手机 | +VGM= | 麦克风增益 | 由AG主动发出的结果代码,用于设置HF的麦克风增益。 | |
+VGS | 手机 | +VGS= | 扬声器增益 | 由AG主动发出的结果代码,用于设置HF的扬声器增益 | |
+BSIR | 手机 | +BSIR: | 带内铃声的蓝牙设置 | 由AG发出的主动结果代码,用于向HF指示带内铃声设置已在本地更改。HF可以通过改变自己的警报方法作出响应的反应 :0代表了AG不提供带内铃声,1代表AG提供带内铃声 | |
AT+BTRH | 车机 | AT+BTRH=:设置指令 AT+BTRH?:读取当前状态 | +BTRH | 蓝牙响应和保持功能 | HF为AG中的"响应和保持"功能发出的命令。本规范定义了set和read命令的使用,AT+BTRH ? HF应使用命令来查询 AG 的当前"响应和保持"状态 :0代表保留来电,1代表接受保持的来电,2代表拒绝保持的来电 |
+BTRH | 手机 | +BTRH= | 蓝牙响应和保持功能 | 每当来电被搁置或接受或拒绝时,用于通知HF的结果代码。对于AT+BTRH,AG是否也应回复此响应 ? 来自 HF 的命令 :0代表了来电在 AG中保持,1代表了在AG中接受保持的来电,2代表了在AG中拒绝保持的来电 | |
AT+BCC | 车机 | AT+BCC | 蓝牙编解码连接 | HF使用该命令请求AG启动编解码器连接过程 | |
AT+BCS | 车机 | AT+BCS= | 蓝牙编解码器选择 | 此命令向远程设备(AG)确认编解码器,并隐含地确认将在同步连接上使用哪个同步协议,如果不包含任何值,则该命令无效 :所有可能的Codec ID,将AT+BAC的定义 | |
+BCS | 手机 | +BCS: | 蓝牙编解码器选择 | 该命令将编解码器通知给远程设备(HF),并隐含地通知将在同步连接上使用哪种同步协议 :所有可能的Codec ID,将AT+BAC的定义 | |
AT+BAC | 车机 | AT+BAC= [[,[,...[,]]]] (u1,u2, ..., un are a codec IDs) | OK | 蓝牙可用编解码器 | 此命令通知远程设备(AG)HF支持哪些编解码器 :所有可能的Codec ID,将AT+BAC的定义 |
AT+BIND | 车机 | AT+BIND= ,,,...,:列出HF支持的指标 AT+BIND=?:阅读AG支持的指标 AT+BIND?:读取指示的AG启用/禁用状态 | +BIND | 蓝牙HF指示功能 | 该命令使HF能够通知AG支持哪些HF到AG指示符。指示器可以启用或禁用。除非"HF 指示器"功能的 AG 和 HF BRSF 位都设置为1,否则不应使用AT+BIND命令 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。 |
+BIND | 手机 | +BIND: (,,,...,):响应AT+BIND=? +BIND:,:主动或响应AT+BIND? | 蓝牙HF指示功能 | 该响应使AG能够通知HF支持哪些HF指示器及其状态,启用或禁用。 除非"HF 指示器"功能的AG和HF BRSF为都设置为1,否则不应使用+BIND响应 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。 :0 - 1,其中0代表了指示器被禁用,不应为此指示器发送值更改,1代表了指示器已启用,可以为该指示器发送值更改 | |
AT+BIEV | 车机 | AT+BIEV= , | 蓝牙HF指示功能 | 此命令使HF能够将启用的HF指示器的更新值发送到AG |
AT+CIND 相关 indicators及范围
indicator | index | index 范围 | Desc |
---|---|---|---|
call:Call Status indicator | 1 | 0 1 | there are no calls in progress --- 没有电话在进行中 at least one call is in progress --- 至少有一个电话在进行中 |
callsetup:Call set up status indicator | 2 | 0 1 2 3 | not currently in call set up --- 当前没在呼叫中设置 an incoming call process ongoing --- 来电进行中 an outgoing call set up is ongoing --- 正在设置一个传出呼叫 remote party being alerted in an outgoing call --- 呼叫的对方正在响铃 |
service:Service availability indication | 3 | 0 1 | No Home/Roam network available --- 没有信号 Home/Roam network available --- 有信号服务 |
signal:Signal Strength indicator | 4 | 0~5 | 电话信号质量 |
roam:Roaming Status indicator | 5 | 0 1 | roaming is not active --- 没有漫游 a roaming is active --- 漫游中 |
battchg:Battery Charge indicator of AG | 6 | 0~5 | AG侧的电量值 |
callheld:Call hold status indicator | 7 | 0 1 2 | No calls held Call is placed on hold or active/held calls swapped(The AG has both an active AND a held call) --- 电话被设置为保持或者电话切换中 Call on hold, no active call --- 电话保持中,没有电话处于通话中 |
AT+CLCC
HF请求当前的电话信息列表,构造格式:+CLCC: < idx >,< dir >,< status >,< mode >,< mpty >,< number >,< type >,AG侧回复当前的电话信息列表。如果当前没有电话,AG侧也需回复OK指令,不然将电话信息以列表形式发送给HF;
-
< idx >:当前电话是第几路,从 1 开始计数
-
< dir >:电话方向,0代表往外拨打的电话outgoing;1代表来电incoming;
-
< status >:电话状态
- 0:Active
- 1:Held
- 2:Dialing(outgoing calls only)
- 3:Alerting(outgoing calls only)
- 4:Incoming(incoming calls only)
- 5:Waiting(incoming calls only)
- 6:Call held by Response and Hold
-
< mode >:电话模式
- 0:voice
- 1:data
- 2:FAX
-
< mpty >:是否为多方通话的电话
- 0:this call is NOT a member of a multi-party(conference)call
- 1:this call is a member of a multi-party(conference)call
-
< number >:可选项,电话号码
-
< type >:可选项,电话类型
AT 指令详解
AT+BRSF & +BRSF
yaml
Frame 443: 26 bytes on wire (208 bits), 26 bytes captured (208 bits)
Encapsulation type: Bluetooth H4 with linux header (99)
Arrival Time: Jan 1, 2020 00:02:46.903888000 CST
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1577808166.903888000 seconds
[Time delta from previous captured frame: 0.000048000 seconds]
[Time delta from previous displayed frame: 0.000048000 seconds]
[Time since reference or first frame: 20.797399000 seconds]
Frame Number: 443
Frame Length: 26 bytes (208 bits)
Capture Length: 26 bytes (208 bits)
[Frame is marked: False]
[Frame is ignored: False]
Point-to-Point Direction: Sent (0)
[Protocols in frame: bluetooth:hci_h4:bthci_acl:btl2cap:btrfcomm:bthfp]
Bluetooth
[Source: BarrotTe_50:67:20 (04:7f:0e:50:67:20)]
[Destination: HuaweiDe_42:c7:dd (30:aa:e4:42:c7:dd)]
Bluetooth HCI H4
[Direction: Sent (0x00)]
HCI Packet Type: ACL Data (0x02)
Bluetooth HCI ACL Packet
.... 0000 0000 0001 = Connection Handle: 0x001
..10 .... .... .... = PB Flag: First Automatically Flushable Packet (2)
00.. .... .... .... = BC Flag: Point-To-Point (0)
Data Total Length: 21
Data
[Connect in frame: 115]
[Source BD_ADDR: BarrotTe_50:67:20 (04:7f:0e:50:67:20)]
[Source Device Name: HAVAL_6720]
[Source Role: Slave (2)]
[Destination BD_ADDR: HuaweiDe_42:c7:dd (30:aa:e4:42:c7:dd)]
[Destination Device Name: dupz]
[Destination Role: Master (1)]
[Last Role Change in Frame: 111]
[Current Mode: Active Mode (0)]
[Last Mode Change in Frame: 400]
Bluetooth L2CAP Protocol
Length: 17
CID: Dynamically Allocated Channel (0x0041)
[Connect in frame: 416]
[PSM: RFCOMM (0x0003)]
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 1, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..1. = C/R Flag: Command (0x1)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 12
Credits: 3
Frame Check Sequence: 0x93
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+BRSF=767\r
Command 0: +BRSF
Command Line Prefix: AT
Command: +BRSF (Bluetooth Retrieve Supported Features)
Type: Action Command (0x003d)
Parameters
HS supported features bitmask: 767
.... .... .... .... .... .... .... ...1 = EC and/or NR function: True
.... .... .... .... .... .... .... ..1. = Call waiting or 3-way calling: True
.... .... .... .... .... .... .... .1.. = CLI Presentation: True
.... .... .... .... .... .... .... 1... = Voice Recognition Activation: True
.... .... .... .... .... .... ...1 .... = Remote Volume Control: True
.... .... .... .... .... .... ..1. .... = Enhanced Call Status: True
.... .... .... .... .... .... .1.. .... = Enhanced Call Control: True
.... .... .... .... .... .... 1... .... = Codec Negotiation: True
.... .... .... .... .... ...0 .... .... = HF Indicators: False
.... .... .... .... .... ..1. .... .... = eSCO S4 (and T2) Settings Support: True
0000 0000 0000 0000 0000 00.. .... .... = Reserved: 0x000000
上述的数据包中,Frame、Bluetooth、Bluetooth HCI H4、Bluetooth HCI ACL Packet信息基本上和之前描述蓝牙音乐模块描述的信息一致,主要是用来表述数据包Frame、Source Device Info 和 Destination Device Info信息;
其中PSM 中执行协议为 RFCOMM,代表了使用了RFCOMM协议为 L2CAP 建立连接的;
核心的模块为BLuetooth HFP Profile模块信息的描述;
-
Command Line Prefix:AT,用于代表了命令前缀;
-
Command:+BSRF,用于一方向另一方通知该设备支持的服功能情况;
-
Parameters:用于描述HS 支持的 features;
- EC and/or NR function(EC / NR 功能):true
- Call waiting or 3-way calling(三方通话):true
- CLI Presentation(CLI演示功能):true
- Voice Recognition Activation(语音识别激活):true
- Remote Volume Control(远程音量控制):true
- Enhanced Call Status(增强的通话状态):true
- Enhanced Call Control(增强的呼叫控制):true
- Codec Negotiation(编解码器协商):true
- HF Indicators(HF 指标):true
- eSCO S4 (and T2) Settings Support(支持的eSCO S4 设置):true
上述的Parameters用于描述HF侧支持的功能并告知AG侧,同时也向AG侧发起了支持功能的请求,通过 +BSRF 来响应 AT+BSRF 指令;
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 0, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..0. = C/R Flag: Response (0x0)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 14
Credits: 4
Frame Check Sequence: 0x49
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+BRSF: 879\r\n
Command 0: +BRSF
Command: +BRSF (Bluetooth Retrieve Supported Features)
Type: Response (0x003a)
Parameters
AG supported features bitmask: 879
.... .... .... .... .... .... .... ...1 = Three Way Calling: True
.... .... .... .... .... .... .... ..1. = EC and/or NR function: True
.... .... .... .... .... .... .... .1.. = Voice Recognition Function: True
.... .... .... .... .... .... .... 1... = In-band Ring Tone: True
.... .... .... .... .... .... ...0 .... = Attach Number to Voice Tag: False
.... .... .... .... .... .... ..1. .... = Ability to Reject a Call: True
.... .... .... .... .... .... .1.. .... = Enhanced Call Status: True
.... .... .... .... .... .... 0... .... = Enhanced Call Control: False
.... .... .... .... .... ...1 .... .... = Extended Error Result Codes: True
.... .... .... .... .... ..1. .... .... = Codec Negotiation: True
.... .... .... .... .... .0.. .... .... = HF Indicators: False
.... .... .... .... .... 0... .... .... = eSCO S4 (and T2) Settings Support: False
0000 0000 0000 0000 0000 .... .... .... = Reserved: 0x00000
-
Command:+BRSF,代表了AT+BRSF指令的响应;
-
Type:Response,表明了+BRSF指令的类型为响应;
-
Parameters:和AT+BRSF指令类似,都是用于描述对应侧,这里指AG侧支持的功能;
- Three Way Calling:true
- EC and/or NR function:true
- Voice Recognition Function:true
- In-band Ring Tone:true
- Attach Number to Voice Tag:false
- Ability to Reject a Call:true
- Enhanced Call Status:true
- Enhanced Call Control:false
- Extended Error Result Codes:true
- Codec Indicators:false
- eSCO S4 (and T2) Settings Support:false
AT+BAC
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 1, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..1. = C/R Flag: Command (0x1)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 11
Credits: 2
Frame Check Sequence: 0x93
Bluetooth HFP Profile
[Role: HS - Headset (2)]+BIND
AT Stream: AT+BAC=1,2\r
Command 0: +BAC
Command Line Prefix: AT
Command: +BAC (Bluetooth Available Codecs)
Type: Action Command (0x003d)
Parameters
Codec: CVSD (1)
Codec: mSBC (2)
- Command:+BAC,蓝牙可用编解码器,此指令通知AG HF支持哪些编解码器;
- Codec = CVSD (1):该编码方式的数据传输使用SCO或eSCO链路。链路的选取是根据本端Controller是否支持Enhanced Setup Synchronous Connection指令来决定的,如果支持该命令则创建语音音频链路时使用eSCO,否则创建SCO链路;
- Codec = mSBC (2):该编码方式的数据传输只能使用eSCO链路;
这里提及到了音频编解码的选择,我们简单描述一下蓝牙中涉及到的编解码方式;
- 媒体音频:播放蓝牙音乐的数据,这种音频对指令要求高,数据发送有重传机制,从而以L2CAP的数据形式走ACL链路。编码方式有SBC、AAC、APTX、APTX_HD、LDAC这五种编码方式,最基础的编码方式是SBC,支持蓝牙多媒体播放的设备必须支持该编码方式,编码质量最好的是LDAC。编码方式的选取需要蓝牙连接设备间的互相协商确定;
- 电话音频:蓝牙通话过程的语音数据,这种音频对时效性有高要求,一般通过特殊的SCO或eSCO链路传输数据。编码方式有:CVSD、mSBC。最基础的编码方式为CVSD,免提蓝牙设备都需支持该编码方式,支持宽带语音的设备可选mSBC编码数据;
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 0, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..0. = C/R Flag: Response (0x0)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 6
Credits: 1
Frame Check Sequence: 0x49
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\nOK\r\n
Command 0: OK
Command: OK (OK)
Type: Response (0x0d0a)
Parameters: No
这个就是AT+BAC指令对应的Response;
AT+CIND=? & +CIND
AT+CIND指令有两种Syntax:AT+CIND=? 和 AT+CIND?,其中AT+CIND=?代表了获取对方特性支持情况,并不会给出当前具体的状态情况值;
yaml
..............................
Bluetooth L2CAP Protocol
Length: 15
CID: Dynamically Allocated Channel (0x0041)
[Connect in frame: 416]
[PSM: RFCOMM (0x0003)]
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 1, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..1. = C/R Flag: Command (0x1)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 10
Credits: 1
Frame Check Sequence: 0x93
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CIND=?\r
Command 0: +CIND
Command Line Prefix: AT
Command: +CIND (Phone Indicators)
Type: Test Command (0x3d3f)
Parameters: No
- type:Test Command
对应的Response为:
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 0, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..0. = C/R Flag: Response (0x0)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 132
Credits: 1
Frame Check Sequence: 0x49
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CIND: ("call",(0,1)),("callsetup",(0-3)),("service",(0-1)),("signal",(0-5)),("roam",(0,1)),("battchg",(0-5)),("callheld",(0-2))\r\n
Command 0: +CIND
Command: +CIND (Phone Indicators)
Type: Response (0x003a)
Parameters
Indicator 1: ("call",(0,1))
Indicator 2: ("callsetup",(0-3))
Indicator 3: ("service",(0-1))
Indicator 4: ("signal",(0-5))
Indicator 5: ("roam",(0,1))
Indicator 6: ("battchg",(0-5))
Indicator 7: ("callheld",(0-2))
- Indicator 1:call,取值范围:0~1,表明了当前电话是否在通话中;
- Indicator 2:callsetup,取值范围:0~3,表明了当前电话的通话状态;
- Indicator 3:service,取值范围:0~1,表明了当前Phone是否有信号服务;
- Indicator 4:signal,取值范围:0~5,代表了电话信号质量;
- Indicator 5:roam,取值范围:0~1,代表当前Phone是否处于漫游状态;
- Indicator 6:battchg,取值范围:0~5,AG侧(Phone)电量值情况;
- Indicator 7:callheld,取值范围:0~2,代表了当前Phone的保持状态;
AT+CIND? & +CIND
与AT+CIND=?不同,该指令用于获取设备当前具体的状态情况;
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 1, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..1. = C/R Flag: Command (0x1)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 9
Credits: 2
Frame Check Sequence: 0x93
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CIND?\r
Command 0: +CIND
Command Line Prefix: AT
Command: +CIND (Phone Indicators)
Type: Read Command (0x003f)
Parameters: No
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 0, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..0. = C/R Flag: Response (0x0)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 24
Credits: 1
Frame Check Sequence: 0x49
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CIND: 0,0,1,5,0,4,0\r\n
Command 0: +CIND
Command: +CIND (Phone Indicators)
Type: Response (0x003a)
Parameters
Indicator 1: 0
Indicator 2: 0
Indicator 3: 1
Indicator 4: 5
Indicator 5: 0
Indicator 6: 4
Indicator 7: 0
对AT+CIND=?指令的+CIND Response不同,AT+CIND?指令对应的+CIND响应的Indicator为具体的状态情况:
- Indicator 1: 0,call = 0,表明当前没有电话在进行中;
- Indicator 2: 0,callsetup = 0,表明当前没在呼叫中;
- Indicator 3: 1,service = 1,表明当前Phone有信号服务;
- Indicator 4: 5,signal = 5,表明当前的电话信号质量满格;
- Indicator 5: 0,roam = 0,表明当前Phone没有处于漫游中;
- Indicator 6: 4,battchg = 4,将100%电量分为5个层次,0-20%、20-40%、40-60%、60-80%、80-100%5个档次,当前Phone的电量状态为60%-80%之间;
- Indicator 7: 0,callheld = 0,表明当前没有电话在保持中;
AT+CMER
AT+CMER代表了标准事件报告激活/停用AT命令,即移动设备事件报告。这个命令决定是否允许在键按下时是否主动发送结果代码;
yaml
..............................
Bluetooth RFCOMM Protocol
Address: E/A flag: 1, C/R flag: 1, Direction: 0, Channel: 3
0001 10.. = DLCI: 0x06 (Direction: 0, Channel: 3)
0001 1... = Channel: 3
.... .0.. = Direction: 0x0
.... ..1. = C/R Flag: Command (0x1)
.... ...1 = EA Flag: Last field octet (0x1)
Control: Frame type: Unnumbered Information with Header check (UIH) (0xef), P/F flag: 1
...1 .... = P/F flag: 0x1
111. 1111 = Frame type: Unnumbered Information with Header check (UIH) (0xef)
Payload length: 16
Credits: 2
Frame Check Sequence: 0x93
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CMER=3,0,0,1\r
Command 0: +CMER
Command Line Prefix: AT
Command: +CMER (Event Reporting Activation/Deactivation)
Type: Action Command (0x003d)
Parameters
Mode: 3
Keypad: 0
Display: 0
Indicator: 1
我们看到在Parameters中涉及到了4个参数,但是在HFP协议中只有Mode和Indicator这两个参数是有效的,其他参数无效;
- Mode = 3:一般情况下,Mode value都为3;
- Indicator = 1:表明激活AG侧主动通知电话状态变化信息,0为禁用电话状态通知;
yaml
..............................
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\nOK\r\n
Command 0: OK
Command: OK (OK)
Type: Response (0x0d0a)
Parameters: No
AT+CMER指令对应的Response同样为OK;
AT+CHLD=? & +CHLD
AT+CHLD=?,标准呼叫保持和多方处理AT命令;
的取值范围:
- 0:挂掉所有保持中的电话或者拒接来电等待中的电话;
- 1:挂掉所有通话中的电话并且接听其他保持或者来电等待中的电话;
- 1:只挂掉第路标志的通话中的电话;
- 2:设置所有通话中的电话为保持状态且接听其他保持或来电等待中的电话;
- 2:设置所有通话中的电话为保持状态,除了第路标示出来的电话
- 3:将一个保持中的电话加入会谈;
- 4:连接两个呼叫并断开用于与两个呼叫的连接(显式呼叫转移)。
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CHLD=?\r
Command 0: +CHLD
Command Line Prefix: AT
Command: +CHLD (Call Hold and Multiparty Handling)
Type: Test Command (0x3d3f)
Parameters: No
yaml
..............................
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CHLD: (0,1,2,3)\r\n
Command 0: +CHLD
Command: +CHLD (Call Hold and Multiparty Handling)
Type: Response (0x003a)
Parameters
Supported Modes: (0,1,2,3)
+CHLD Response的motes范围:
- 0、1、2、3
暂不支持1、2和4这3中Mode;
yaml
..............................
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\nOK\r\n
Command 0: OK
Command: OK (OK)
Type: Response (0x0d0a)
Parameters: No
最后又响应了OK Response;
AT+BIA
代表了蓝牙指示器激活,激活或停用单个指示器;
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+BIA=1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0\r
Command 0: +BIA
Command Line Prefix: AT
Command: +BIA (Bluetooth Indicators Activation)
Type: Action Command (0x003d)
Parameters
Indicator 1: Activate (1)
Indicator 2: Activate (1)
Indicator 3: Activate (1)
Indicator 4: Activate (1)
Indicator 5: Activate (1)
Indicator 6: Activate (1)
Indicator 7: Activate (1)
Indicator 8: Deactivate (0)
Indicator 9: Deactivate (0)
Indicator 10: Deactivate (0)
Indicator 11: Deactivate (0)
Indicator 12: Deactivate (0)
Indicator 13: Deactivate (0)
Indicator 14: Deactivate (0)
Indicator 15: Deactivate (0)
Indicator 16: Deactivate (0)
Indicator 17: Deactivate (0)
Indicator 18: Deactivate (0)
Indicator 19: Deactivate (0)
Indicator 20: Deactivate (0)
针对上述的0、1:
- 0:代表停用
- 1:代表激活
上述涉及到了20个indicators,即代表了指示器数量最大为20;
其中,有7项为激活状态,其余的indicator为停用状态。
实际允许的指标数量由AT+CIND命令定义。在AT+CIND中,我们涉及到了同样也是7个indicator:
call、callsetup、service、signal、roam、battchg、callheld;
AT+BIA指令的Response为OK;
AT+CCWA & +CCWA
标准的呼叫等待通知AT命令,在该规范中,仅适用参数启动/禁用呼叫等待通知主动结果代码;
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CCWA=1\r
Command 0: +CCWA
Command Line Prefix: AT
Command: +CCWA (Call Waiting Notification)
Type: Action Command (0x003d)
Parameters
Show Result Code Presentation Status: Enabled (1)
- Command:+CCWA
- Show Result Code Presentation Status:Enabled (1),代表了是否启用呼叫等待通知主动上报;
对应的Response为OK;
AT+CMEE
标准AT命令用于启用,用于设置终端错误报告,使能后当发送AT执行错误时终端会返回错误编码,这样便于定位问题;
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CMEE=1\r
Command 0: +CMEE
Command Line Prefix: AT
Command: +CMEE (Mobile Equipment Error)
Type: Action Command (0x003d)
Parameters
Mode: Enabled (1)
- Command:+CMEE
- Mode:Enabled (1),代表了开启错误码上报;
对应的Response为OK;
而错误码上报的方式为:+CME ERROR:,该指令对应的Error Code非常多,每一种Error对应一个错误,我们举几个简单的例子:
Error | Error Description | |
---|---|---|
CME ERROR: 0 | Phone failure | 电话故障 |
CME ERROR: 1 | No connection to phone | 电话不通 |
CME ERROR: 2 | Phone adapter link reserved | 保留电话适配器链接 |
CME ERROR: 3 | Operation not allowed | 操作不允许 |
CME ERROR: 4 | Operation not supported | 操作不支持 |
............ | ............ | ............ |
AT+COPS=?,?
运营商选择状态
yaml
........................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+COPS=3,0\r
Command 0: +COPS
Command Line Prefix: AT
Command: +COPS (Reading Network Operator)
Type: Action Command (0x003d)
Parameters
Mode: Set Only Format (3)
Format: Long Format Alphanumeric (0)
-
Mode:模式
- 0:自动注册,忽略、参数
- 1:手动注册
- 2:强制注销
- 3:设置格式模式
- 4:先手动再自动
-
Format:
- 0:长字符格式
- 1:短字符格式
- 2:数字格式
AT+COPS=3,0代表的含义:设置查询格式,format为长字符格式;
对应的Response为OK;
AT+BTRH?
AT+BTRH对应了两种Syntax:
- AT+BTRH=:设置指令
- AT+BTRH?:读取当前状态
蓝牙响应和保持功能,HF为AG中的"响应和保持"功能发出的命令。本规范定义了set和read命令的使用,AT+BTRH ? HF应使用命令来查询 AG 的当前"响应和保持"状态,值定义:
- 0:代表保留来电
- 1:代表接受保持的来电
- 2:代表拒绝保持的来电
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+BTRH?\r
Command 0: +BTRH
Command Line Prefix: AT
Command: +BTRH (Bluetooth Response and Hold Feature)
Type: Read Command (0x003f)
Parameters: No
发送读取当前call状态的指令;
yaml
..............................
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CME ERROR: 4\r\n
Command 0: +CME ERROR
Command: +CME ERROR (Extended Audio Gateway Error Result Code)
Type: Response (0x003a)
Parameters
CME Error: Operation not Supported (4)
AT+BTRH?指令的Response为+CME ERROR,对应的Error Code为4,操作不支持;
AT+CLIP & +CLIP
标准呼叫线路识别通知激活AT命令,它启用/禁用呼叫线路识别通知主动结果代码 +CLIP;
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CLIP=1\r
Command 0: +CLIP
Command Line Prefix: AT
Command: +CLIP (Calling Line Identification Notification)
Type: Action Command (0x003d)
Parameters
Mode: Enabled (1)
- Mode:Enabled (1),启用呼叫线路识别通知激活,0代表禁用;
对应的Response为OK;
AT+NREC
表示噪音和回显的开关,0代表关闭,1代表开启;
yaml
..............................
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+NREC=0\r
Command 0: +NREC
Command Line Prefix: AT
Command: +NREC (Noise Reduction and Echo Canceling)
Type: Action Command (0x003d)
Parameters
Noise Reduction: Disable EC/NR in the AG (0)
- Noise Reduction:Disable EC/NR in the AG (0),禁用;
对应的Response为OK;
AT+COPS? & +COPS
运营商查询,对应的Response为+COPS;
yaml
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+COPS?\r
Command 0: +COPS
Command Line Prefix: AT
Command: +COPS (Reading Network Operator)
Type: Read Command (0x003f)
Parameters: No
yaml
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+COPS: 0,0,"China Mobile"\r\n
Command 0: +COPS
Command: +COPS (Reading Network Operator)
Type: Response (0x003a)
Parameters
Mode: Automatic (0)
Format: Long Format Alphanumeric (0)
Operator: "China Mobile"
对应的Response如上,其中包含了几个参数;
- Mode:自动注册,对应的value = 0;
- Format:长字符格式,对应了之前的 AT+COPS=3,0 指令;
- Operator:China Mobile,中国移动;
+COPS 指令 Response完成之后,紧接着返回对应的Response为OK;
AT+CNUM & +CNUM
签署者号码,简单理解为本机号码,对应了 +CNUM Response;
yaml
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CNUM\r
Command 0: +CNUM
Command Line Prefix: AT
Command: +CNUM (Subscriber Number Information)
Type: Action Command (0x000d)
Parameters: No
swift
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CNUM: ,"+86182xxxxxxxx",145,,4\r\n
Command 0: +CNUM
Command: +CNUM (Subscriber Number Information)
Type: Response (0x003a)
Parameters
Alpha:
Number: "+86182xxxxxxxx"
Type: The phone number format is an international number, including the country code prefix. If the plus sign ("+") is not included as part of the number and shall be added by the AG as needed. (145)
Speed: autobauding (0)
Service: Voice (4)
-
Alpha:不支持这个可选字段,应该留空。
-
Number:+86182xxxxxxxx,本机号码,这个不方便显示;
-
Type:字段指定提供的电话号码的格式,145,电话号码格式为国际号码,包含国家代码前缀;该参数有3个范围定义;
- 128-143:国内格式或国际格式(可以含前缀或者转义数字)
- 144-159:国际号码(含国家代码)
- 160-175:国际号码(不含前缀或者转义数字)
-
Speed:不支持这个可选字段,应该留空。
-
Service:Voice,指示此电话号码与哪个服务相关。应该是4(声音)或5(传真),这个关联的service为4,声音;
- 0:异步调制解调器
- 1:同步调制解调器
- 2:PAD接入(异步)
- 3:包接入(同步)
- 4:语音
- 5:传真
+CNUM 指令 Response完成之后,紧接着返回对应的Response为OK;
AT+CLCC & +CLCC
列出当前的呼叫;
yaml
Bluetooth HFP Profile
[Role: HS - Headset (2)]
AT Stream: AT+CLCC\r
Command 0: +CLCC
Command Line Prefix: AT
Command: +CLCC (Current Calls)
Type: Action Command (0x000d)
Parameters: No
请求当前呼叫的信息;
HF请求当前的电话信息列表,构造格式:+CLCC: < idx >,< dir >,< status >,< mode >,< mpty >,< number >,< type >,AG侧回复当前的电话信息列表。如果当前没有电话,AG侧也需回复OK指令,不然将电话信息以列表形式发送给HF;
拨打状态
yaml
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CLCC: 1,0,2,0,0,"03511008611",129\r\n
Command 0: +CLCC
Command: +CLCC (Current Calls)
Type: Response (0x003a)
Parameters
ID: 1
Direction: Mobile Originated (0)
State: Dialing (2)
Mode: Voice (0)
Mpty: Call is not one of multiparty (conference) call parties (0)
Number: "03511008611"
Type: The phone number format may be a national or international format, and may contain prefix and/or escape digits. No changes on the number presentation are required. (129)
-
< idx >:当前电话是第几路,从 1 开始计数;
-
< dir >:电话方向,0代表往外拨打的电话outgoing;1代表来电incoming;
-
< status >:电话状态
- 0:Active
- 1:Held
- 2:Dialing(outgoing calls only)
- 3:Alerting(outgoing calls only)
- 4:Incoming(incoming calls only)
- 5:Waiting(incoming calls only)
- 6:Call held by Response and Hold
-
< mode >:电话模式
- 0:voice
- 1:data
- 2:FAX
-
< mpty >:是否为多方通话的电话
- 0:this call is NOT a member of a multi-party(conference)call
- 1:this call is a member of a multi-party(conference)call
-
< number >:可选项,电话号码,代表了拨打的号码
-
< type >:可选项,电话类型,129代表了国内号码;
接听状态
yaml
Bluetooth HFP Profile
[Role: AG - Audio Gate (1)]
AT Stream: \r\n+CLCC: 1,0,0,0,0,"03511008611",129\r\n
Command 0: +CLCC
Command: +CLCC (Current Calls)
Type: Response (0x003a)
Parameters
ID: 1
Direction: Mobile Originated (0)
State: Active (0)
Mode: Voice (0)
Mpty: Call is not one of multiparty (conference) call parties (0)
Number: "03511008611"
Type: The phone number format may be a national or international format, and may contain prefix and/or escape digits. No changes on the number presentation are required. (129)
和拨打状态唯一的不太点是:State,接听状态下 state = Active;