第一部分:HCI协议(八)具体的HCI command和event(8、REMOTE INFORMATION)

这里只介绍常用的几个command和event

(1)Remote Name Request Command

这个命令用来获取远端BR/EDR Controller的设备名

注意:当Remote Supported Host Features Notification event没有被屏蔽并且Remote_Name_Request command建立一个连接时(如果两个设备之间没有连接存在则会建立一个临时连接),Link Manager在获取远端设备名字的同时会获取远端设备LMP features的pages 0和1(注意只有Remote Name Request Command建立的临时连接才会有)

参数说明:

BD_ADDR(6 Octet):要获取名字的远端设备的地址

Page_Scan_Repetition_Mode(1 Octet):要获取名字的远端设备D的Page_Scan_Repetition_Mode,这个参数是搜索的时候获取到的, 0x00表示R0,0x01表示R1,0x02表示R2

Reserved(1 Octet):0x00

Clock_Offset(2 Octet):表示本地时钟与远端设备时钟的时钟偏移,这个值得bit0-14对应时钟的bit2-16,这个值得bit 15表示Clock_Offset_Valid_Flag,即时钟偏移是否有效

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0419:表示是HCI_Remote_Name_Request command

指令的OGF是0x01即0000 01

OCF是0x0019即00 0001 1001

所以整个opcode是0000 0100 0001 1001即0x0419

0x0a:表示Parameter_Total_Length=10,即参数总长度是10个byte

0xeb 0x01 0xce 0x55 0x36 0x34:表示远端设备地址BD_ADDR,即远端设备地址是0x34:0x36:0x55:0xce:0x01:0xeb

0x01:表示Page_Scan_Repetition_Mode=0x01,即R1

0x00:Reserved

0xf094:表示Clock_Offset,bit 15为1表示是有效时钟偏移,bit0-14为0x7094=28820

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

0x0f:表示这个event是command status event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x0419:表示是HCI_Remote_Name_Request command

这个连接时Remote Name Request Command建立的,所以会收到Remote Supported Host Features Notification event:

0x04:表示HCI Event Packet

0x3d:表示这个event是Remote Host Supported Features Notification

0x0e:表示Parameter_Total_Length即14个byte

0xeb 0x01 0xce 0x55 0x36 0x34:表示远端设备地址BD_ADDR,即远端设备地址是0x34:0x36:0x55:0xce:0x01:0xeb

0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00:表示远端设备的Host_Supported_Features,可以看到只支持3-slot packets

Remote Name Request Complete Event:

0x04:表示HCI Event Packet

0x07:表示这个event是Remote Name Request Complete Event

0xff:表示Parameter_Total_Length即255个byte

0x00:表示status是success

0xeb 0x01 0xce 0x55 0x36 0x34:表示远端设备地址BD_ADDR,即远端设备地址是0x34:0x36:0x55:0xce:0x01:0xeb

0x69 0x37 0x4d 0x69 0x4e 0x69:表示远端设备名字是i7MiNi

下面是用create connection request command建立的连接,获取远端设备名是这样的(不会收到Remote Supported Host Features Notification event):

(2)Remote Name Request Cancel Command

这个命令用来取消正在进行的Remote Name Request command

如果这个命令的BR/EDR参数跟Remote Name Request command时设置的远端设备地址不同,则会返回status=0x12(Invalid HCI Command Parameters)

对应Remote Name Request Command的Remote Name Request Complete event还是会返回的,但是应该在Command Complete event(与Remote Name Request Cancel command对应的)之后,如果成功取消,则Remote Name Request Complete event的status=0x02(Unknown Connection Identifier)

参数说明:

BD_ADDR(6 Octet):Remote Name Request command时设置的远端设备地址

返回参数说明:

Status(1 Octet):0x00表示success;0x01-0xFF表示失败

BD_ADDR(6 Octet):Remote Name Request command时设置的远端设备地址

举例说明:(暂时没有)

(3)Remote Name Request Complete Event

这个event表示获取远端设备名的请求已经完成。

参数说明:

Status(1 Octet):0x00表示success;0x01-0xFF表示失败

BD_ADDR(6 Octet):远端设备地址

Remote_Name(248 Octet):远端设备名字,如果名字长度不够248则以空字符(0x00)结束

举例说明:

Remote Name Request Complete Event:

0x04:表示HCI Event Packet

0x07:表示这个event是Remote Name Request Complete Event

0xff:表示Parameter_Total_Length即255个byte

0x00:表示status是success

0xeb 0x01 0xce 0x55 0x36 0x34:表示远端设备地址BD_ADDR,即远端设备地址是0x34:0x36:0x55:0xce:0x01:0xeb

0x69 0x37 0x4d 0x69 0x4e 0x69:表示远端设备名字是i7MiNi

(4)Read Remote Supported Features Command

这个命令根据Connection_Handle用来获取远端设备的LMP supported features。注意这个Connection_Handle必须是一个ACL连接

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x041B:表示是HCI_Read_Remote_Supported_Features command

指令的OGF是0x01即0000 01

OCF是0x001B即00 0001 1011

所以整个opcode是0000 0100 0001 1011即0x041b

0x02:表示Parameter_Total_Length=2,即参数总长度是2个byte

0x000B:表示Connection_Handle,这个Connection_Handle必须是一个ACL连接

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

0x0f:表示这个event是command status event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x041B:表示是HCI_Read_Remote_Supported_Features command

Read Remote Supported Features Complete event:

0x04:表示HCI Event Packet

0x0b:表示这个event是Read Remote Supported Features Complete event

0x0b:表示Parameter_Total_Length即11个byte

0x00:表示status是success

0x000B:表示Connection_Handle=0x000B

0xff 0xff 0x8f 0xfe 0x9b 0xff 0x59 0x87:表示远端设备的LMP features,下面是解析的一部分,Extended features: Supported表示远端设备支持Extended features,此时本地设备可以使用Read Remote Extended Features Command获取远端设备的Extended Features

(5)Read Remote Supported Features Complete Event

这个event表明成功获取远端BR/EDR Controller的LMP features

参数说明:

Status(1 Octet):0x00表示success;0x01-0xFF表示失败

Connection_Handle(2 Octet):Read_Remote_Supported_Features command中使用的Connection_Handle,这个Connection_Handle表示一个ACL连接

LMP_Features(8 Octet):远端设备的LMP features

举例说明:

Read Remote Supported Features Complete event:

0x04:表示HCI Event Packet

0x0b:表示这个event是Read Remote Supported Features Complete event

0x0b:表示Parameter_Total_Length即11个byte

0x00:表示status是success

0x000B:表示Connection_Handle=0x000B

0xff 0xff 0x8f 0xfe 0x9b 0xff 0x59 0x87:表示远端设备的LMP features

(6)Read Remote Extended Features Command

这个命令根据Connection_Handle获取远端设备的Page Number页的extended LMP features, Connection_Handle表示的连接必须是ACL连接,这个命令只有当远端设备支持extended features的时候才可以用(extended features的bit位在LMP feature中表示)

参数说明:

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF, 用来表示一个ACL连接

Page Number(1 Octet):如果是0x00表示获取一般的LMP features,跟Read Remote Supported Features Command功能是一样的,0x01-0xFF表示获取对应页的LMP extended features

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x041C:表示是HCI_Read_Remote_Extended_Features command

指令的OGF是0x01即0000 01

OCF是0x001C即00 0001 1100

所以整个opcode是0000 0100 0001 1100即0x041C

0x03:表示Parameter_Total_Length=3,即参数总长度是3个byte

0x000B:表示Connection_Handle,这个Connection_Handle必须是一个ACL连接

0x01:表示Page Number=0x01,即获取第一页的Features

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

0x0f:表示这个event是command status event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x041C:表示是HCI_Read_Remote_Extended_Features command

Read Remote Extended Features Complete Event:

0x04:表示HCI Event Packet

0x23:表示这个event是Read Remote Extended Features Complete event

0x0d:表示Parameter_Total_Length即13个byte

0x00:表示status是success

0x000B:表示Connection_Handle=0x000B

0x01:表示Page_Number=0x01,即这个event返回的是page 1的features

0x01:表示Maximum page number=0x01,即远端设备Page_Number最大值是1

0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00:表示远端设备page 1的extended features

(7)Read Remote Extended Features Complete Event

这个event表明成功获取远端BR/EDR Controller的LMP extended features

参数说明:

Status(1 Octet):0x00表示success;0x01-0xFF表示失败

Connection_Handle(2 Octet):HCI_Read_Remote_Extended_Features command中使用的Connection_Handle,这个Connection_Handle表示一个ACL连接

Page_Number(1 Octet):如果是0x00表示获取一般的LMP features,跟Read Remote Supported Features Command功能是一样的,0x01-0xFF表示获取对应页的LMP extended features

Maximum page number(1 Octet):远端设备最大的page number

Extended_LMP_Features(8 Octet):远端设备的LMP features

举例说明:

Read Remote Extended Features Complete Event:

0x04:表示HCI Event Packet

0x23:表示这个event是Read Remote Extended Features Complete event

0x0d:表示Parameter_Total_Length即13个byte

0x00:表示status是success

0x000B:表示Connection_Handle=0x000B

0x01:表示Page_Number=0x01,即这个event返回的是page 1的features

0x01:表示Maximum page number=0x01,即远端设备Page_Number最大值是1

0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00:表示远端设备page 1的extended features

(8)Read Remote Version Information Command

这个命令根据Connection_Handle获取远端设备的版本信息,Connection_Handle必须是一个ACL或者LE连接

参数说明:

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF, 用来表示一个ACL或者LE连接

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x041D:表示是HCI_Read_Remote_Version_Information command

指令的OGF是0x01即0000 01

OCF是0x001D即00 0001 1101

所以整个opcode是0000 0100 0001 1101即0x041D

0x02:表示Parameter_Total_Length=2,即参数总长度是2个byte

0x0003:表示Connection_Handle,这个Connection_Handle必须是一个ACL连接

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

0x0f:表示这个event是command status event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x041D:表示是HCI_Read_Remote_Version_Information command

Read Remote Version Information Complete Eventt:

0x04:表示HCI Event Packet

0x0C:表示这个event是Read Remote Version Information Complete event

0x08:表示Parameter_Total_Length即8个byte

0x00:表示status是success

0x0003:表示Connection_Handle=0x0003

0x09:表示Version=0x09,即Bluetooth Core Specification 5.0

https://www.bluetooth.com/specifications/assigned-numbers/link-manager/

0x05d6:表示Manufacturer_Name

0x22bb:表示Subversion

(9)Read Remote Version Information Complete Event

这个event表示已经成功获取到远端设备的版本信息。

Status(1 Octet):0x00表示success;0x01-0xFF表示失败

Connection_Handle(2 Octet):HCI_Read_Remote_Version_Information command中使用的Connection_Handle,这个Connection_Handle表示一个ACL连接

Version(1 Octet):表示BR/EDR或者LE Controller的版本信息,

Manufacturer_Name(2 Octet):表示remote controller的制造商

Subversion(2 Octet):远端设备的LMP次版本号

举例说明:

Read Remote Version Information Complete Eventt:

0x04:表示HCI Event Packet

0x0C:表示这个event是Read Remote Version Information Complete event

0x08:表示Parameter_Total_Length即8个byte

0x00:表示status是success

0x0003:表示Connection_Handle=0x0003

0x09:表示Version=0x09,即Bluetooth Core Specification 5.0

https://www.bluetooth.com/specifications/assigned-numbers/link-manager/

0x05d6:表示Manufacturer_Name

0x22bb:表示Subversion

(10)Remote Host Supported Features Notification Event

这个event用来通知host远端host支持的LMP extended features page,这个event只有当Remote Name Request command建立临时连接时才会有

 

参数说明:

BD_ADDR(6 Octet):远端设备地址

Host_Supported_Features(8 Octet):Host Supported Features page of LMP extended features

举例说明:

Remote Supported Host Features Notification event:

0x04:表示HCI Event Packet

0x3d:表示这个event是Remote Host Supported Features Notification

0x0e:表示Parameter_Total_Length即14个byte

0xeb 0x01 0xce 0x55 0x36 0x34:表示远端设备地址BD_ADDR,即远端设备地址是0x34:0x36:0x55:0xce:0x01:0xeb

0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00:表示远端设备的Host_Supported_Features,可以看到只支持3-slot packets

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值