1.简介
FTS软件相当于蓝牙的数据分析仪器,它可以抓取通过蓝牙IC的数据包,从包中我们可以看到HCI,L2CAP等各层的封包数据,是一个十分有用的软件。
Reset Command和Command Completed Event是一对成对出现的command和event。查询手册,Reset Command如下:
![用FTS分析蓝牙数据包 用FTS分析蓝牙数据包](https://i-blog.csdnimg.cn/blog_migrate/60e7afa3af0f924ddc758d8cfc199777.jpeg)
可以看出,首先是Event Code,为0x0e,其次为parameter total length为0x04,分别为Num_HCI_Command_packets=0x02,OpCode与Reset Command一样,为0x0c03,return_parameter为0x00,表示Reset command执行成功。
![用FTS分析蓝牙数据包 用FTS分析蓝牙数据包](https://i-blog.csdnimg.cn/blog_migrate/4a768e9052f856a45e8917224ff98b0a.jpeg)
OpCode域为0x1009,其中OCF为0000001001(0x0009),OGF为000100(0x04)。因为是Little Endian的字节顺序,所以完整的OpCode为0x0x1009。因为不携带command parameter,所以parameter total length为0。
2.HCI的command和event以及Data的格式
HCI Command Format:
3.Reset Command与Command Completed Event实例
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:
上面的图是从软件中截下来的,可以看到OpCode为0x0c03,即OCF域为0000000011(0x0003),OGF域为000011(0x03)。因为是Little Endian的字节顺序,所以完整的OpCode为0x0c03。因为不携带command parameter,所以parameter total length为0。
再看Command Completed Event:
![用FTS分析蓝牙数据包 用FTS分析蓝牙数据包](https://i-blog.csdnimg.cn/blog_migrate/60e7afa3af0f924ddc758d8cfc199777.jpeg)
可以看出,首先是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:
抓取实际的HCI Read_BD_ADDR Command包,如下:
![用FTS分析蓝牙数据包 用FTS分析蓝牙数据包](https://i-blog.csdnimg.cn/blog_migrate/46381bb459711acb8cc7456409024d43.jpeg)
![用FTS分析蓝牙数据包 用FTS分析蓝牙数据包](https://i-blog.csdnimg.cn/blog_migrate/4a768e9052f856a45e8917224ff98b0a.jpeg)
OpCode域为0x1009,其中OCF为0000001001(0x0009),OGF为000100(0x04)。因为是Little Endian的字节顺序,所以完整的OpCode为0x0x1009。因为不携带command parameter,所以parameter total length为0。
再看Command Completed Event:
首先是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执行成功。