BT_蓝牙电话数据包分析

基于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=\\[,...\[,\[]]]]] 蓝牙指示激活,单独激活或停用指示器 :代表了指标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;

相关推荐
Zhu7585 小时前
在k8s集群部署MySQL单实例,支持多个主流发行版
android·mysql·kubernetes
AFinalStone8 小时前
Android 7系统异常问题排查(四)Framework层(上)—System Server Watchdog
android·系统异常
IT小白杨9 小时前
防关联用指纹浏览器还是虚拟机好?2026年技术架构深度对比与选型决策
chrome·经验分享·microsoft·架构·安全架构·指纹浏览器
宝杰X79 小时前
Android Room3 多平台数据库
android·数据库
huibin14785236912 小时前
热缓解学习记录
android·学习
工业设备方案笔记13 小时前
RK3588 vs RK3568:AI边缘计算项目到底应该如何选择芯片平台?
arm开发·人工智能·目标跟踪·架构·边缘计算
一次旅行14 小时前
多智能体编排实战:拆解Plan-and-Execute范式+三层记忆架构,手写无依赖轻量Agent调度引擎
前端·javascript·架构
未来之窗软件服务14 小时前
商家自动化任务下一代架构混沌无界思维-东方仙盟
架构·自动化·仙盟创梦ide·东方仙盟·自动化任务
小田的博客15 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
liangshanbo121515 小时前
Express SSE 流式输出实战:从入门 Demo 到 AI 生产级架构
人工智能·架构·express