1.簡介
可以看出,首先是Event Code,爲0x0e,其次爲parameter total length爲0x04,分別爲Num_HCI_Command_packets=0x02,OpCode與Reset Command一樣,爲0x0c03,return_parameter爲0x00,表示Reset command執行成功。
OpCode域爲0x1009,其中OCF爲0000001001(0x0009),OGF爲000100(0x04)。因爲是Little Endian的字節順序,所以完整的OpCode爲0x0x1009。因爲不攜帶command parameter,所以parameter total length爲0。
FTS軟件相當於藍牙的數據分析儀器,它可以抓取通過藍牙IC的數據包,從包中我們可以看到HCI,L2CAP等各層的封包數據,是一個十分有用的軟件。
2.HCI的command和event以及Data的格式
HCI Command Format:
3.Reset Command與Command Completed Event實例
Reset Command和Command Completed Event是一對成對出現的command和event。查詢手冊,Reset Command如下:
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:
可以看出,首先是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包,如下:
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執行成功。