(四)HCI指令说明:
1、一般初始化时使用的command
(1)Read Authentication Enable Command(一般不用)
这个命令用来获取controller中Authentication_Enable的值。
Authentication_Enable指的是在ACL建立过程中是否需要认证,就是在Create_Connection命令(或者接收一个ACL连接请求)和Connection Complete event之间是否需要认证。
返回参数说明:
Status(1 Octet):0x00表示成功,其他值表示失败
Authentication_Enable(1 Octet):controller中Authentication_Enable的值
举例说明:(暂时没有)
(2)Write Authentication Enable Command(一般不用)
这个命令用来设置controller中Authentication_Enable的值。
Authentication_Enable这个参数只适用于普通配对,不适用于Secure Simple Pairing.(普通配对一般也不用)
参数说明:
Authentication_Enable(1 Octet):controller中Authentication_Enable的值,默认是0x00
返回参数说明:
Status(1 Octet):0x00表示成功,其他值表示失败
(3)Read Stored Link Key Command(一般不用)
注意:一般chip的内存空间有限,都是程序在系统文件中保存link key
这个命令可以获取存储在BR/EDR Controller里面的link key
参数说明:
BD_ADDR(6 Octet):表示要获取那个远端设备对应的link key,如果Read_All_Flag=0x01时,表示获取所有的link key,此时这个地址可以忽略
Read_All_Flag(1 Octet):0x00表示获取BD_ADDR对应的link key,0x01表示获取所有的link key
返回参数说明:
Status(1 Octet):0x00表示成功,其他值表示失败
Max_Num_Keys(2 Octet):BR/EDR Controller里面存储的link key的总数
Num_Keys_Read(2 Octet):从BR/EDR Controller里面获取的link key的数量
注意:这个命令发出后,会返回>=0个Return Link Keys event,之后会返回Command Complete event
举例说明:(暂时没有)
(4)Write Stored Link Key Command(一般不用)
注意:一般chip的内存空间有限,都是程序在系统文件中保存link key
这个命令可以将1个或者多个link key存入BR/EDR Controller(存储数量是有限的,空间不足则不会存储,存储的顺序按照link key数组的顺序,数组开始的link key先存储)
参数说明:
参数说明:
Num_Keys_To_Write(1 Octet):表示想要存储的link key的数量
BD_ADDR[i](6 * Num_Keys Octet):表示存储的link key对应的远端设备地址
Link_Key[i](16 * Num_Keys Octet):表示与BD_ADDR相关的具体的link key值
返回参数说明:
Status(1 Octet):0x00表示成功,其他值表示失败
Num_Keys_Written(1 Octet):表示成功存储的link key的数量
注意:当设置为Secure Connections Only Mode时,不能存储link key
举例说明:(暂时没有)
(5)Delete Stored Link Key Command(常用)
这个命令可以删除存储在BR/EDR Controller里面的一个或者多个link key
参数说明:
BD_ADDR(6 Octet):表示删除与BD_ADDR相关的link key
Delete_All_Flag(1 Octet): 0x00表示只删除与BD_ADDR相关的link key,0x01表示删除所有的link key
返回参数说明:
Status(1 Octet):0x00表示成功,其他值表示失败
Num_Keys_Deleted(2 Octet):表示删除的link key的数量
举例说明:
0x01:表示HCI Command Packet
0x0C12:表示是HCI_Delete_Stored_Link_Key command
指令的OGF是0x01即0000 11
OCF是0x000B即00 0001 0010
所以整个opcode是0000 1100 0001 0010即0x0C12
0x07:表示Parameter_Total_Length=0x07,即参数总长度是7个byte
0x00 0x00 0x00 0x00 0x00 0x00:表示设备地址,因为是删除所有配对,所以这个参数无意义
0x01: Delete_All_Flag=0x01,即删除所有配对
对应的Event:
Command Complete event:
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x06:表示Parameter_Total_Length即6个byte
0x01:表示Num_HCI_Command_Packets
0x0C12:表示是HCI_Delete_Stored_Link_Key command
0x00:表示status为0
0x00 0x00:表示删除link key数量为0x0000
(6)Read Simple Pairing Mode Command(一般不用)
这个命令用来获取BR/EDR controller的Simple_Pairing_Mode的值
返回参数说明:
Status(1 Octet):0x00表示成功,其他表示失败
Simple_Pairing_Mode(1 Octet):0x00表示不支持(默认),0x01表示支持
举例说明:(暂时没有)
(7)Write Simple Pairing Mode Command(常用)
这个命令用来配置本地controller是否支持Simple Pairing Mode,如果不设置,默认是不支持的,如果支持,当收到IO capability request时应该做出回应,如果不支持,当收到IO capability request时应该拒绝
注意:这个命令应该在page scan之前执行,最好在HCI_Write_Scan_Enable前面
参数说明:
Simple_Pairing_Mode(1 Octet):0x00表示不支持(默认),0x01表示支持
返回参数说明:
Status(1 Octet):0x00表示成功,其他表示失败
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x0C56:表示是HCI_Write_Simple_Pairing_Mode command
指令的OGF是0x03即0000 11
OCF是0x0056即00 0101 0110
所以整个opcode是0000 1100 0101 0110即0x0C56
0x01:表示Parameter_Total_Length=1,即参数总长度是1个byte
0x01:表示设置支持Simple Pairing Mode
对应的Event:
Command Complete event:
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x04:表示Parameter_Total_Length即4个byte
0x01:表示Num_HCI_Command_Packets
0x0C56:表示是HCI_Write_Simple_Pairing_Mode command
0x00:表示status为0
(8)Write Secure Connections Host Support Command(常用)
这个命令设置BR/EDR Controller的Secure_Connections_Host_Support的值
Secure_Connections_Host_Support为enabled时,Encryption Change event 中的Encryption_Enabled参数和Link Key Notification event中的Key_Type参数取值会更多一些,具体参照这两个event
注意:这个命令要在page scan设置之前否则会报错Command Disallowed (0x0C)
参数说明:
Secure_Connections_Host_Support(1 Octet):0x00表示disabled(默认),0x01表示enabled
返回参数说明:
Status(1 Octet):0x00表示成功,其他表示失败
举例说明:
Command如下:
0x01:表示HCI Command Packet
0x0C7a:表示是HCI_Write_Secure_Connections_Host_Support command
指令的OGF是0x03即0000 11
OCF是0x007a即00 0111 1010
所以整个opcode是0000 1100 0111 1010即0x0C7a
0x01:表示Parameter_Total_Length=1,即参数总长度是1个byte
0x01:表示设置Secure_Connections_Host_Support为enabled
对应的Event:
Command Complete event:
0x04:表示HCI Event Packet
0x0e:表示这个event是command complete event
0x04:表示Parameter_Total_Length即4个byte
0x01:表示Num_HCI_Command_Packets
0x0C7a:表示是HCI_Write_Secure_Connections_Host_Support command
0x00:表示status为0
(9)Read Secure Connections Host Support Command(一般不用)
这个命令用来获取BR/EDR Controller的Secure_Connections_Host_Support 的值
参数说明:
Status(1 Octet):0x00表示成功,其他表示失败
Secure_Connections_Host_Support(1 Octet):0x00表示disabled(默认),0x01表示enabled
举例说明:(暂时没有)
(10)Return Link Keys Event(一般不用)
BR/EDR Controller收到Read_Stored_Link_Key command以后,如果BR/EDR Controller内有存储的link key,则BR/EDR Controller会发送0个或者多个Return Link Keys event给host,其中中包含link key的数量以及与存储link key相关的BD_ADDR的值,但是link key不会返回具体的link key值,而是全0,就是说这个event只是通知host有哪些设备的link key在controller中存储了,而不是通知具体link key的值
参数说明:
Num_Keys(1 Octet):表示event中包含link key的数量
BD_ADDR[i](6 * Num_Keys Octet):表示存储的link key对应的远端设备地址
Link_Key[i](16 * Num_Keys Octet):全0
举例说明:(暂时没有)