第一部分:HCI协议(八)具体的HCI command和event(4、CONTROLLER INFORMATION)
4、CONTROLLER INFORMATION
这里只记录常用的几个command和event(LE的先不记录)
(1)Read Local Version Information Command
这个command用来获取本地Controller的版本信息
返回参数说明(Command Complete event):
Status(1 Octet):0x00表示success;0x01-0xFF error code
HCI Version(1 Octet):定义HCI层的版本信息
HCI Revision(2 Octet):具体根据实现来定
LMP Version(1 Octet):定义LMP或者PAL层的版本信息
Manufacturer_Name(2 Octet):指定生产商
LMP Subversion(2 Octet):具体根据实现来定
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x1001:表示是HCI_Read_Local_Version_Information command
指令的OGF是0x04即0001 00
OCF是0x0001即00 0000 0001
所以整个opcode是0001 0000 0000 0001即0x1001
0x00:表示Parameter_Total_Length=0,即没有参数
对应的Event(Command Complete event):
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x0c:表示Parameter_Total_Length即12个byte
0x01:表示Num_HCI_Command_Packets
0x1001:表示是HCI_Read_Local_Version_Information command
0x00:表示status是success
0x07:HCI Versio是core 4.1,具体参考https://www.bluetooth.com/specifications/assigned-numbers/host-controller-interface/
0x0000:HCI Revision=0x0000
0x07:LMP Version是core 4.1,具体参考https://www.bluetooth.com/specifications/assigned-numbers/link-manager/
0x001d:Manufacturer_Name是Qualcomm;具体参考 https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/
0x07d3:LMP Subversion=0x07d3
(2)Read Local Supported Commands Command
这个command用来获取本地Controller支持的HCI commands supported;
返回参数说明:
Status(1 Octet):0x00表示success;0x01-0xFF error code
Supported_Commands(64 Octet):每个bit代表一个command,0表示不支持,1表示支持
具体command和相应bit位定义如下:
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x1002:表示是HCI_Read_Local_Supported_Commands command
指令的OGF是0x04即0001 00
OCF是0x0002即00 0000 0010
所以整个opcode是0001 0000 0000 0010即0x1002
0x00:表示Parameter_Total_Length=0,即没有参数
对应的Event(Command Complete event):
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x44:表示Parameter_Total_Length即68个byte
0x01:表示Num_HCI_Command_Packets
0x1002:表示是HCI_Read_Local_Supported_Commandscommand
0x00:表示status是success
后面的64byte表示Supported_Commands
(3)Read Local Supported Features Command
这个command用来获取本地BR/EDR Controller支持的LMP features
返回参数说明:
Status(1 Octet):0x00表示success;0x01-0xFF error code
LMP_Features(8 Octet):每个bit代表一个LMP features,0表示不支持,1表示支持
注意:这个命令不经常使用,而是直接使用HCI_Read_Local_Extended_Features,这个指令中参数Page number设置成0和HCI_Read_Local_Supported_Features的效果是一样的。具体的LMP_Features在下一个指令列出。
(4)Read Local Extended Features Command
这个command用来获取具体Page number里面的extended LMP features.
参数说明:
Page number(1 Octet):用来设置获取某一页的LMP features/extended LMP features;Page number为0时,获取的就是Read Local Supported Features command返回的LMP features
返回参数说明:
Status(1 Octet):0x00表示success;0x01-0xFF error code
Page number(1 Octet):表示这是返回的第Page number页的LMP features/extended LMP features
Maximum Page Number(1 Octet):最多有多少页
Extended_LMP_Features(8 Octet): 每个bit代表一个LMP features/extended LMP features,0表示不支持,1表示支持
具体LMP features(page 0)和相应bit位定义如下:
具体extended LMP features(page 1)和相应bit位定义如下:
具体extended LMP features(page 2)和相应bit位定义如下:
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x1004:表示是HCI_Read_Local_Extended_Features command
指令的OGF是0x04即0001 00
OCF是0x0004即00 0000 0100
所以整个opcode是0001 0000 0000 0100即0x1004
0x01:表示Parameter_Total_Length=1,即有1个byte的参数
0x00:表示Page number=0
对应的Event(Command Complete event):
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x0e:表示Parameter_Total_Length即14个byte
0x01:表示Num_HCI_Command_Packets
0x1004:表示是HCI_Read_Local_Extended_Features command
0x00:表示status是success
0x00:表示page number=0
0x02:表示Maximum Page Number=2
0xff 0xfe 0x8f 0xfe 0xd8 0x3f 0x5b 0x87:表示LMP features
下面是问询第1页和第二页的command和对应command complete event
第1页
第2页
(5)Read BD_ADDR Command
如果是BR/EDR Controller,这个command用来获取Bluetooth Controlleraddress(BD_ADDR)
如果是LE Controller,这个command用来获取Public Device Address,如果 Controller没有Public Device Address,将返回0x000000000000
如果是BR/EDR/LE Controller, Public Device Address和BD_ADDR是同一个值
返回参数说明:
Status(1 Octet):0x00表示success;0x01-0xFF error code
BD_ADDR(6 Octet):Controller的地址
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x1009:表示是HCI_Read_BD_ADDR command
指令的OGF是0x04即0001 00
OCF是0x0009即00 0000 1001
所以整个opcode是0001 0000 0000 1001即0x1009
0x00:表示Parameter_Total_Length=0,即没有参数
对应的Event(Command Complete event):
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x0a:表示Parameter_Total_Length即10个byte
0x01:表示Num_HCI_Command_Packets
0x1009:表示是HCI_Read_BD_ADDR command
0x00:表示status是success
0x5d 0x7e 0x03 0x44 0x04 0x44:表示controller的蓝牙地址(注意:蓝牙地址应该是反过来的即0x44:0x04:0x44:0x03:0x7e :0x5d)