一、HCI packet解析
1、数据包类型
经过HCI层的数据包最开始的一个字节表示数据包类型,不同的数据包类型接下来的数据包格式也有所不同。
第一个字节的值与对应的数据包类型如下:
2、HCI Command packet
HCI Command packet用于Host向Controller发送command
3、HCI ACL Data packet
HCI ACL数据包用于在主机和控制器之间交换数据
4、HCI Synchronous Data packet
HCI Synchronous Data packet用于在Host和Controller之间同步数据(SCO和ESCO)
5、 HCI Event packet
HCI Event packet用在在事件发生时Controller通知Host
6、HCI ISO Data packet
HCI ISO Data packet用于在Host和Controller之间同步数据,这个数据包是传输LE Audio的数据
二、L2CAP
只记录L2CAP层的交互,不记录L2CAP更上层的交互(只记录目前遇到过的)。
通过HCI层的L2CAP数据包属于HCI ACL packet,格式参照上图
2.1、信令数据包
2.1.1、L2CAP_INFORMATION_REQ & L2CAP_INFORMATION_RSP
1、L2CAP_INFORMATION_REQ :
Identifier:REQ与RSP对应一致
Infotype:
示例:获取支持的扩展功能信息
2、L2CAP_INFORMATION_RSP
result:
info:
此信息根据info type决定。
info type = 0x0001:
无连接的MTU
info type = 0x0002:
info type = 0x0003:
支持的固定的L2CAP Channel
示例:
1、支持的固定channel
2、支持的扩展功能
2.1.2、L2CAP_CONNECTION_REQ & L2CAP_CONNECTION_RSP
1、L2CAP_CONNECTION_REQ
PSM:协议/服务多路复用,想要为L2CAP上层的哪一层建立连接,分为固定的和动态分配的
Source ID:发起连接为此连接分配的L2cap channel ID
示例:
2、L2CAP_CONNECTION_RSP
Destination CID:接收到L2CAP_CONNECTION_REQ 后的设备,分配给此连接的L2CAP channel
Source ID:发送L2CAP_CONNECTION_REQ 的设备里面的Source ID
result:
status:
当前面的result字段为pengding时,指示连接状态
示例:
2.1.3、L2CAP_CONFIGURATION_REQ & L2CAP_CONFIGURATION_RSP
1、L2CAP_CONFIGURATION_REQ
Destination CID:接收这个数据包的设备的channel
Flags:延续标志
当双方都支持Extended Flow Specification option,flags设置为0
Configuration Options:协商选项
option type包括下面的类型:
1、MAXIMUM TRANSMISSION UNIT (MTU)
2、FLUSH TIMEOUT OPTION
3、QUALITY OF SERVICE (QOS) OPTION
4、RETRANSMISSION AND FLOW CONTROL OPTION
5、 FRAME CHECK SEQUENCE (FCS) OPTION
6、EXTENDED FLOW SPECIFICATION OPTION
7、EXTENDED WINDOW SIZE OPTION
示例:
2、L2CAP_CONFIGURATION_RSP
Source ID:接收这个数据包的设备的channel
flags:延续标志
result:
config:这个字段貌似没有用到
示例:
2.1.4、L2CAP_DISCONNECTION_REQ & L2CAP_DISCONNECTION_RSP
1、L2CAP_DISCONNECTION_REQ
Destination CID:接收这个请求的设备的channel ID
Source CID:发送这个请求的设备的Channel ID
示例:
2、L2CAP_DISCONNECTION_RSP
Destination ID:发送这个响应包的设备的channel ID
Source ID:接收这个响应包的设备的channel ID
示例:
2.2、L2CAP模式下面向连接的通道
information payload:L2CAP上层的payload,这个上层取决于channel ID(接收设备的channel)
三、SDP
通过HCI层的SDP数据包属于HCI ACL packet,格式如上图
3.1、数据格式
PDU ID:发送这个数据包的功能是什么,参考下表
Transaction ID:用来标识请求的数据包与匹配响应的数据包,和L2CAP层的Identifer类似
3.2、data element格式
包含一个报头字段和一个数据字段。
报头字段又由一个5位的类型描述符和3位的长度描述符组成
3.2.1、类型描述符
3.2.2、长度描述符
3.3、具体指令
3.1.1、SDP_SERVICE_SEARCH_ATTR_REQ & SDP_SERVICE_SEARCH_ATTR_RSP
1、SDP_SERVICE_SEARCH_ATTR_REQ
ServiceSearchPattern:符合data element格式,按照对应格式解析即可
MaximumAttributeByteCount:响应的最大属性字节数
AttributeIDList:符合data element格式,按照对应格式解析即可
ContinuationState:延续状态
示例:
2、SDP_SERVICE_SEARCH_ATTR_RSP
AttributeListsByteCount:属性列表的字节数
AttributeLists:属性列表,符合data element格式,按照对应格式解析即可
ContinuationState:延续状态
示例:
四、RFCOMM
通过HCI的RFCOMM数据包属于ACL Data packet
4.1、部分帧介绍
1、SABM:Set Asynchronous Balanced Mode (SABM) ,设置异步平衡模式帧。目标设备收到这个命令后,应尽快使用UA response确认接收
2、DISC:Disconnect (DISC),断连帧。断开一个连接,进入断连模式,断连前需要收到接收端回复的UA response
3、UA:Unnumbered Acknowledgement (UA) ,未确认的帧,用来告知收到和接受SABM命令和DISC命令。
4、DM:Disconnected Mode (DM),断开模式的帧。通知本地状态是断开状态,断开状态下收到DISC命令需要回复DM response
5、UIH:Unnumbered information with header check (UIH),带有标头检查的未标号信息。用来发送普通数据
4.2、Initator & Responder
1、Initator:发起RFCOMM连接的设备
2、Responder:响应RFCOMM连接的设备
4.3、数据格式
Address:1字节,包含了DLCI,Server channel,D,CR,EA等
其中:
1、DLCI:Data Link Connection Identifier,数据链路连接身份标识
2、Server channel:RFCOMM Channel
3、D:Direction,数据包的方向,当建立基于上层的profile连接时(如HFP,SPP等),Initator发起的连接则D=0,且后续不变;Responder发起的连接D=1,且后续不变。
4、C/R
对于UIH帧来说,Initator发送的command和response的C/R位都是1,Responder发送的command和response的C/R位都是0;对于SABM,DISC,UA,DM帧来说,Initator发送的command到Responder的消息中C/R位为1,其对应的响应的C/R位也为1;对于SABM,DISC,UA,DM帧来说,Responder发送的command到Initator的消息中C/R位为0,其对应的响应的C/R位也为0。
5、EA
本字段中EA始终设置为1
Control:Control字段对应的也就是Frame_type字段
P/F:命令帧中,P/F位称为P位,响应帧中称为F位。
对SABM、UA、DM、DISC帧来说:
当发送的command需要一个response时,就将P置1;接收方接收到这样的命令时需要马上响应并将F置1。在一个DLCI上,发出一个P=1的帧没有收到回复前不能发送下一个P=1的帧。
如果接收到P/F位置为0的SABM或DISC帧,则将这些帧丢弃。DM帧不考虑P/F的设置
对UIH帧来说,P/F设置为0,Credit Based Flow Control除外
简单说来如下:
Length Indicator:
L1到L7表示Length的长度,如果EA为0,表示接下来还有一个字节来表示长度
Information:未指定长度,以字节为单位。
FCS: frame check sequence,检验帧。具体计算方式不明
示例:
五、AVDTP
AVDTP分为信令包和数据包,通过HCI的AVDTP数据包属于ACL Data packet
5.1、信令
5.2、Media packet
音频数据包,如AAC编码的音频数据包
5.3、offload技术
A2DP offload:将A2DP协议栈中的音频数据处理负载从主机的CPU或内存中卸载到专门的硬件设备上进行处理
SCO offload:将SCO协议栈中的音频数据处理负载从主机的CPU或内存中卸载到专门的硬件设备上进行处理
启用了offload音频数据和通话数据不经过HCI
示例:
AVDTP层包含了信令包和media packet。在AVDTP Signal中查看信令信息;在A2DP和AVDTP Media中查看媒体数据包信息,AVDTP Signal,AVDTP Media,A2DP才有具体的解析信息。
六、AVCTP
通过HCI的AVCTP数据包属于ACL Data packet
AVCTP中是一些command和response的交互,具体的解析需要查看AVRCP层
AVRCP层主要是一些控制指令:播放/暂停,上一曲/下一曲,音量状态变化等。其中播放/暂停,上一曲/下一曲都是模拟的按键操作,有一个push/release的过程。
一般只会建立一个手机作为TG的AVCTP Control channel。
CT在TG注册了状态变化通知,当播放状态改变时TG会通知CT;CT在TG注册了音量状态变化通知,当TG的音量变化时会通知TG。
对于音量控制的变化来说,手机作为CT,耳机作为TG;耳机的音量发生变化时发送通知到手机端;手机的音量发生变化时发送control指令到耳机端进行设置。
CT和TG设备角色切换时不需要建立新的控制通道,直接使用AVCTP的control通道就行。
我们分析时需要看这个数据包是来自Controller还是Host,从而判断哪个设备是CT,哪个设备是TG。
设置绝对音量指令也是走的control channel,手机发送的音量控制。
AVRCP的状态和AVDTP的操作不存在固定的先后顺序,要看音频框架如何具体实现,但一般是操作伴随着状态改变的
七、HFP
通过HCI的HFP数据包属于ACL Data packet
HFP提供了许多AT指令来进行SCO/eSCO相关的通话,这里介绍部分AT指令的作用,能够更高的分析log,场景流程后面遇到了再进行补充
7.1、AT+BRSF=1023
HF发送给AG的指令,查询AG支持的功能,其中携带了HF支持的功能,示例如下:
1、EC and/or NR function: 降噪和回声消除
2、Call waiting or 3-way calling:呼叫等待和三方通话
3、CLI presentation capability:呼叫线路标识
4、Voice recognition activation:语音识别
5、Remote volume control:远端音量控制
6、Enhanced call status: 增强型呼叫状态
7、Enhanced call control:增强型呼叫控制
8、Codec negotiation:编解码器协商
9、HF Indicators:HF的Indicator
10、eSCO S4:增强型SCO链路
7.2、+BRSF
AG发送到HF的响应,对7.1指令的响应,其中包含了AG支持的功能,示例如下:
7.3、AT+BAC=
HF发送给AG的指令,通知AG HF支持的Codec,示例如下:
注意: Codec id对应如下
7.4、AT+CIND=?
HF发送给AG的指令,获取AG支持的Indicator,示例如下:
7.5、+CIND
AG发送给HF,对7.4指令的响应,返回的是AG支持的Indicator及其取值范围
1、Call Status indicator:呼叫状态,值为0表示没有call在进行;值为1表示有call在进行中,不管是active还是held
2、Call Setup indicator:呼叫设置,值为0表示没有call setup在进行中;值为1表示正在来电;值为2表示去电正在呼叫状态;值为3表示去电对方正在响铃。
3、Service availability indicator
4、Signal indicator:信号强度指示,这个指示的是蜂窝信号,即电话卡的信号强度
5、Roaming indicator
6、Battery charge indicator:电量等级
7、Call Held indicator:held call,值为0表示没有呼叫held;值为1表示将active call和held call进行切换;值为2表示有held call,没有active call。
7.6、AT+CIND?
HF发送给AG的指令,用来获取AG的Indicator对应的状态,示例如下:
7.7、+CIND?
AG发送给HF的响应,对7.6指令的响应,包含了当前AG的Indicator的状态,示例如下:
7.8、AT+CMER=3,0,0,1 and AT+CMER=3,0,0,0
HF发送给AG来启用/禁用AG的Indicator指令,启用后一直保持。AT+CMER=3,0,0,1为启用,AT+CMER=3,0,0,0为禁用,示例如下:
启用后当AG的Indicator变化后会发送通知到HF
7.9、AT=CHLD=?
HF发送给AG的指令,查询AG中怎么支持保持呼叫和三方呼叫的信息,示例如下:
7.10、+CHLD
AG发送给HF的响应,对指令7.9的响应,示例如下:
7.11、AT+NREC=0
HF发送给AG的指令,用来禁用手机的降噪和回声消除功能,示例如下:
7.12、AT+BIND=1,2
HF发送给AG的指令,指明HF的Indicator,示例如下:
其中HF Indicator对应的信息可以在《Assigned_Numbers》中找到:
7.13、AT+BIND=?
HF发送给AG的指令,查询AG支持的HF Indicator,示例如下:
7.14、+BIND
AG发送给HF的响应,其中包含了AG支持的HF Indicator,示例如下:
7.15、AT+BIND?
HF发送给AG的指令了,查询AG支持的HF Indicator的状态是否使能,示例如下:
7.16、+BIND
AG发送给HF的对应的HF Indicator的使能状态响应,示例如下:
7.17、AT+CLIP
HF发送给AG的指令,启用呼叫线路通知功能,示例如下:
7.18、AT+CCWA=1
HF发送给AG的指令,用来使能呼叫等待通知,示例如下:
7.19、AT+XAPL
苹果对蓝牙AT指令的扩充,HF发送给AG的指令,格式如下:
示例如下:
7.20、+XAPL
AG对HF的指令的响应,对7.19指令的响应,示例如下(不是真的iphone):
7.21、+CIEV
AG发送给HF的通知,通知AG Indicator的值变为什么,示例如下:
注意:Indicator在CIND获取时显示的值是0-6,在Indicator的值变化时通知值的范围是1-7,依次对应
7.22、AT+APLSIRI?
苹果对蓝牙AT指令的扩充,HF发送给AG的指令,请求SIRI的状态,示例如下:
android手机对这条指令返回的是ERROR;苹果手机没有,未测试。
7.23、AT+VGS
HF发送给AG的指令,用来设置扬声器的增益,示例如下:
7.24、AT+IPHONEACCEV
苹果对蓝牙AT指令的扩充,HF发送给AG报告HF当前的状态,格式如下:
这里上报了耳机的电量与Dock state(是否在充电),示例如下:
7.25、AT+BIEV=
HF上报到AG,HF Indicator的当前状态,后面是对应的Indicator指标与其对应的值。示例如下:
报告HF的电量为40%,电量精度为1%。
7.26、+BCS
AG发送给HF,通知HF选择使用什么codec,示例如下:
选择的编码方式为mSBC
7.27、AT+CLCC
HF发送给AG的指令,查询当前的呼叫列表,示例如下:
7.28、+CLCC
AG对HF的响应,对指令7.27的响应,示例与格式如下:
这个回复可以看到AG当前有一个Active call,语音通话,而且是AG主动发起的去电,电话号码为10086。
7.29、AT+BCC
HF发送AT+BCC到AG端,建立Codec连接。手机接收到AT+BCC指令后,会发送建立sco连接命令,耳机回复ok然后建立sco连接
二、HCI层
1、HCI_Reset
//将HCI复位到初始状态来重新初始化HCI层
2、HCI_Read_Buffer_Size
//读取HCI的缓冲区大小,以便确定其能够处理的数据量与数据
3、HCI_Host_Buffer_Size
//定义Host缓冲区的大小
4、Vendor-Specific Undecoded Vendor Command
//供应商自定义命令,不管
5、HCI_Read_Local_Version_Information
//读取本地版本信息,包括蓝牙协议版本,厂商标识符,产品标识符等。支持speic5.3但是不一定支持LE Audio
6、HCI_Read_BD_ADDR
//读取本机的蓝牙地址
7、HCI_Read_Local_Supported_Commands
//获取本地蓝牙支持的蓝牙命令列表
8、HCI_Read_Local_Extended_Features
//获取本地蓝牙支持的扩展特性
9、HCI_Write_Simple_Pairing_Mode
//设置蓝牙简易配对模式,只需要用户在UI层面进行操作,可需要输入配对码等
10、 HCI_Write_LE_Host_Support
//明确指定是否支持低功耗蓝牙
11、HCI_Set_Min_Encryption_Key_Size
//设置最小加密密钥的大小
12、HCI_Write_Secure_Connections_Host_Support
//设置主机对安全连接的支持情况,是否支持安全连接
13、HCI_LE_Read_Filter_Accept_List_Size
//读取低功耗蓝牙的筛选接收列表大小(能够存放多少个允许筛选的)
14、HCI_LE_Read_Buffer_Size [v2]
//读取低功耗蓝牙的buffer缓冲区大小
15、HCI_LE_Read_Supported_States
//读取低功耗蓝牙支持的状态,包括低功耗事件,低功耗蓝牙状态等
16、HCI_LE_Read_Local_Supported_Features
//读取低功耗蓝牙支持的本地功能特性
17、HCI_LE_Read_Resolving_List_Size
//读取BLE的解析列表大小,解析列表是用来存储BLE设备地址解析信息的列表
18、 HCI_LE_Read_Suggested_Default_Data_Length
//读取BLE建议的默认长度,此值为传输数据长度
19、HCI_LE_Read_Maximum_Advertising_Data_Length
//BLE支持的最大广播数据长度,Host能够发送到广播包中的最大字节数
20、HCI_LE_Read_Number_of_Supported_Advertising_Sets
//读取BLE支持的广播集数量,选用不同的广播集配置不同的广播参数
21、HCI_LE_Set_Event_Mask
//设置BLE支持的事件掩码,支持哪些事件
22、HCI_Set_Event_Mask
//设置支持的事件掩码,支持哪些事件
23、HCI_Read_Local_Supported_Codecs [v2]
//读取BLE支持的音频编解码器列表,通常包含Codec_ID和编解码器特性
24、HCI_Read_Local_Simple_Pairing_Options
//读取本地设备的简易配对选项,包括配对方法,配对阶段,安全等级等
25、 HCI_LE_Write_RF_Path_Compensation
//写入射频路径补偿值,Host可以校准射频信号传输时发生的衰减和失真
26、HCI_LE_Clear_Resolving_List
//清除解析列表中存储的设备解析信息,包括设备的随机地址和解析随机数
27、HCI_LE_Set_Resolvable_Private_Address_Timeout
//设置可解析私有地址的超时时间,超过该时间后设备会生成新的可解析地址
28、 HCI_Write_Inquiry_mode
//写入蓝牙设备的inquiry mode,inruiry mode是蓝牙设备用于执行设备发现操作时的工作模式。包括三种模式:1、Standard Inquiry Mode(标准inquiry mode ).2、Inquiry Scan Mode(询问扫描模式)。3、Inquiry None Mode(无询问模式)
29、HCI_Write_Page_Scan_Type
//设置蓝牙设备的page_scan类型,包括:1、Standard Scan.2、Interlaced Scan.
30、HCI_Write_Inquiry_Scan_Type
//设置蓝牙设备的inquiry_scan,包括1、Standard Scan.2、Interlaced Scan.
31、HCI_Write_Class_of_Device
//设置蓝牙设备的设备类别,包括:1、Major Device Class(设备主类型)。2、Minor Device Class(设备次类型)。3、Service Class(服务类类型)
32、HCI_Write_Page_Timeout
//设置page 的超时时间
33、HCI_Write_Default_Link_Policy_Settings
//设置默认链路链接策略
34、LE_Get_Vendor_Capabilities_Command
//读取设备厂商的具体能力和功能,包括芯片支持的BLE协议版本,频段,传输速率;蓝牙功能;权限和特性;其他功能。
35、HCI_Read_Local_Name
//读取本地蓝牙名
36、HCI_Write_Local_Name
//写入蓝牙名
37、HCI_Write_Extended_Inquiry_Response
//设置扩展的查询响应,最多可使用240字节
38、HCI_LE_Rand
//生成一个128位的伪随机数
39、HCI_LE_Add_Device_To_Resolving_List
//将设备添加到身份解析列表
40、HCI_LE_Set_Privacy_Mode
//设置BLE设备的隐私模式,这种模式下设备的随机地址会周期性的自动更新
41、HCI_LE_Set_Address_Resolution_Enable
//启用或禁用地址解析功能
42、HCI_LE_Set_Random_Address
//设置LE的随机地址
43、HCI_Write_Voice_Setting
//设置音频通信的参数和配置,包括:1、采样率。2、通道数,哪个声道。3、编码方式,音频数据编码方式。4、传输速率,音频数据的传输速率,比特率
44、HCI_Write_Current_IAC_LAP
//设置Inquiry Access Code的Lower Address Part——IAC和LAP
45、 HCI_Write_Inquiry_Scan_Activity
//设置蓝牙进行inruiry scan的间隔,包括:1、Inquiry Scan Window。2、Inquiry Scan Interval
46、HCI_Write_Scan_Enable
//启用蓝牙的scan功能
47、LE_Get_Controller_Activity_Energy_Info
//获取蓝牙controller的活动和能源信息。活动:返回控制器当前的活动状态。能源信息:能源使用情况(功耗,电池等)
48、HCI_Create_Connection
//创建经典蓝牙设备之间的连接。通常会指定以下参数:1、目标设备地址。2、连接参数。3、连接类型。
49、APCF Set Filtering parameters
//自动包冲突解决命令,当多个设备同时尝试在同一无线信道上发送数据包时,可能会导致数据传输错误和通信不稳定。设置过滤参数
50、APCF_enable
//使能
51、HCI_LE_Set_Extended_Scan_Parameters
//设置扩展广播扫描参数
52、HCI_LE_Set_Extended_Scan_Enable
//使能
53、HCI_LE_Extended_Advertising_Report(event)
//接收扩展广播数据
54、HCI_LE_Set_Extended_Scan_Enable
//启用或禁用LE Scan功能
55、HCI_Set_Event_Filter
//Host设置的事件过滤器
56、HCI_Inquiry
//查询附近的蓝牙设备,向周围的设备发送信息进行查询
57、HCI_Inquiry_Cancel
//取消查询
58、HCI_LE_Add_Device_To_Filter_Accept_List
//增加过滤白名单,限制其他设备的通信
59、HCI_LE_Extended_Create_Connection
//创建BLE连接,可配置目标设备和连接参数
60、HCI_LE_Channel_Selection_Algorithm
//通道选择算法,根据算法结果选择BLE蓝牙通信的物理channel。目标是选择尽可能干扰少的通道,避免与其他设备通信冲突
61、HCI_LE_Read_Remote_Features
//读取远端设备支持的特性和功能,进行功能协商
62、HCI_Read_Remote_Version_Information
//从远程设备读取版本信息
63、HCI_LE_Set_Data_Length
//设置BLE数据包长度(MTU)
64、HCI_LE_Connection_Update
//更新BLE连接的参数
65、HCI_Disconnect
//断开蓝牙连接,BLE和BR/EDR
66、HCI_Remote_Name_Request
//读取远端设备名称
67、HCI_Remote_Host_Supported_Features_Notification(event)
//远端Host支持的功能通知
68、HCI_Delete_Stored_Link_Key
//删除存在蓝牙设备中的连接密钥
69、HCI_LE_Enable_Encryption
//启动加密功能
70、HCI_Read_Clock_Offset
//读取当前蓝牙连接的时钟偏移值
71、HCI_Write_Link_Supervision_Timeout
//设置蓝牙连接的超时时间
72、HCI_Read_Remote_Supported_Features
//读取远端设备支持的功能
73、HCI_Change_Connection_Packet_Type
//改变连接数据包的类型,如DM5,DH5,DM3,DH3等
74、HCI_Authentication_Requested
//请求对蓝牙连接进行身份验证
75、HCI_Write_Link_Policy_Settings
//写入蓝牙连接的链路策略
76、 HCI_Link_Key_Request_Reply
//回复对方设备的链接密钥请求
77、HCI_LE_Set_PHY
//设置使用什么PHY
78、HCI_LE_Set_CIG_Parameters
//Central使用此命令来创建CIG,并设置controller中与CIG相关联的若干个CISes的参数。如果CIG不存在,则应先建立一个CIG
79、HCI_LE_Setup_ISO_Data_Path
//设置ISO数据路径,为CIS,CIS CONFIG,BIS创建同步数据路径
80、HCI_LE_Create_CIS
//创建一个或多个CISes
81、HCI_LE_CIS_Established(Event)
//CIS建立完成
82、HCI_Connection_Complete
//创建ACL连接完成
三、ATT
1、ATT_EXCHANGE_MTU_REQ
//请求交换连接的MTU(最大传输单元),一个数据包中可以携带的最大字节数。
2、ATT_EXCHANGE_MTU_RSP
//响应交换MTU的请求,回复一个适合的MTU大小
3、ATT_READ_BY_GROUP_TYPE_REQ
//照服务组类型来获取具有相同服务组类型的服务的范围
4、ATT_READ_BY_GROUP_TYPE_RSP
//响应特定组类型的属性
5、ATT_FIND_BY_TYPE_VALUE_REQ
//用于在设备的属性数据库中进行属性的查找和筛选,查找具有特定属性类型和值的属性。在指定的服务中搜索具有特定属性类型和属性值的特征
6、ATT_FIND_BY_TYPE_VALUE_RSP
//返回搜索结果
7、ATT_FIND_INFORMATION_REQ
//获取指定范围内的属性的信息列表,包括句柄和类型
8、ATT_FIND_INFORMATION_RSP
//返回指定范围内的属性信息列表
9、ATT_READ_REQ
//向远端设备发起读取属性值的请求
10、ATT_READ_RSP
//响应读取的值
11、ATT_WRITE_REQ
//向远端设备写入属性值
12、ATT_WRITE_RSP
//写入响应
13、ATT_HANDLE_VALUE_NTF
//设备间传输属性值的通知
四、AVRCP
1、Button Pushed/Button Released
模拟按键按下与释放,发送播放/暂停指令;每次按下或释放TG都ACCEPTED
然后TG指示播放状态
VENDOR-DEPENDENT指示状态改变和回复当前状态需要看数据解析具体是指的什么改变与回复的什么状态
2、notify/interim
notify是注册事件的通知,interim是注册后回复当前状态,changed是改变了后通知之前注册的handle;下一次通知需要重新注册
五、HFP
1、Enable Voice recognition in the AG
AT指令为:AT+BVRA=1,作用是唤醒语音助手
六、HCI SCO/eSCO
七、L2CAP
八、RFCOMM
九、AVCTP
九、AVRCP
十、Undecoded RFCOMM Frame
不是蓝牙规范中定义的RFCOMM数据帧
十一、Undecoded L2CAP Frame
不是蓝牙规范中的L2CAP数据帧
十二、HCI UART
HCI UART是一种具体的串口通信协议,在Host和Cotroller之间传输HCI命令,事件和数据等信息。不是所有的信息都通过HCI UART
十三、data
包含一些不能解析的数据的数据包,完全不能解析或部分无法解析,可能是走私有协议的数据包
十四、error
部分未使用的参数或参数超出范围的数据包