用FTS分析蓝牙数据包

1.简介
  FTS软件相当于蓝牙的数据分析仪器,它可以抓取通过蓝牙IC的数据包,从包中我们可以看到HCI,L2CAP等各层的封包数据,是一个十分有用的软件。

2.HCI的command和event以及Data的格式
HCI Command Format:
用FTS分析蓝牙数据包_第1张图片
HCI Event Format:
用FTS分析蓝牙数据包_第2张图片
HCI ACL Data Format:

HCI SCO Data Format:
用FTS分析蓝牙数据包_第3张图片

3.Reset Command与Command Completed Event实例
    Reset Command和Command Completed Event是一对成对出现的command和event。查询手册,Reset Command如下:

OCF为0x0003,OGF为0x03,return parameters定义如下:
用FTS分析蓝牙数据包_第4张图片
可以看出,0x00代表reset成功,其余失败。
Reset Command执行后将返回Command Completed Event,携带status参数。
Command Completed Event定义如下:

携带的event parameter为三个:Num_HCI_Command_packets,Command_Opcode和return_parameters
Num_HCI_Command_packets:表明controller要求host能够发送的command packet的个数,如果为0,表明controller禁止host发送command。
Command_Opcode和相应的HCI Command的Opcode域相同。
return_parameters即为HCI Command要求返回的status

利用FTS软件抓取实际蓝牙通信中的HCI层数据包,以Reset command和Command Completed Event为例,如下:
Reset Command:
用FTS分析蓝牙数据包_第5张图片用FTS分析蓝牙数据包_第6张图片
上面的图是从软件中截下来的,可以看到OpCode为0x0c03,即OCF域为0000000011(0x0003),OGF域为000011(0x03)。因为是Little Endian的字节顺序,所以完整的OpCode为0x0c03。因为不携带command parameter,所以parameter total length为0。
再看Command Completed Event:
用FTS分析蓝牙数据包_第7张图片

可以看出,首先是Event Code,为0x0e,其次为parameter total length为0x04,分别为Num_HCI_Command_packets=0x02,OpCode与Reset Command一样,为0x0c03,return_parameter为0x00,表示Reset command执行成功。

4.Read_BD_ADDR Command与Command Completed Event实例
首先看Read_BD_ADDR Comamd:
用FTS分析蓝牙数据包_第8张图片
OCF为0x0009,OGF为0x04,返回的parameter为satus和BD_ADDR两个。
抓取实际的HCI Read_BD_ADDR Command包,如下:
用FTS分析蓝牙数据包_第9张图片 用FTS分析蓝牙数据包_第10张图片
OpCode域为0x1009,其中OCF为0000001001(0x0009),OGF为000100(0x04)。因为是Little Endian的字节顺序,所以完整的OpCode为0x0x1009因为不携带command parameter,所以parameter total length为0。
再看Command Completed Event:
用FTS分析蓝牙数据包_第11张图片
首先是0x0e的EventCode,其次是ToralLength = 0x0A = 10,然后分别为Num_HCI_Command_packets = 0x02,OpCode一样为0x1009,然后为46个字节的BD_ADDR,分别为00000000 00010000 00100111的LAP(0x271000);10000100的UAP(0x84);01001100 11100000的NAP(0xe04c);最后的00000000为returned parameter,00000000代表Read_BD_ADDR Command执行成功。

你可能感兴趣的:(用FTS分析蓝牙数据包)