第一部分:HCI协议(八)具体的HCI command和event(16、AUTHENTICATION AND ENCRYPTION 四)

(四)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

举例说明:(暂时没有)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值