第一部分:HCI协议(八)具体的HCI command和event(6、DEVICE DISCOVERY 一)

这里只记录常用的几个command和event

(1)Inquiry Command

这个命令是用来搜索周围的BR/EDR Controllers的. 当本地Controller接收到Inquiry Command以后,首先会回复一个Command Status event,当搜索到其他BR/EDR Controllers时,会有Inquiry Result events或者Inquiry Result with RSSI Event或者extended Inquiry Result events,(根据inquiry mode设置)返回,当搜索完成时,会有Inquiry Complete event返回;

如果在搜索过程中,Controller收到Inquiry Cancel Command,则Controller不会发送Inquiry Complete event给Host,而是会发送一个Command Complete event,表示Inquiry Cancel Command完成。

参数说明:

LAP(3 Octet):Low Address Part,是一个inquiry access code;这个值通常是0x9E8B33(GIAC)

64bit的BD_ADDR如下图所示

Inquiry_Length(1 Octet):指定搜索时间,范围是0x01 – 0x30,具体的时间是1.28s * Inquiry_Length,如果Extended_Inquiry_Length也设置了,则搜索持续时间可能是1.28s *(Extended_Inquiry_Length + Inquiry_Length)

Num_Responses(1 Octet):在搜索结束前可以接收的最多响应次数,范围是0x01 – 0xFF,如果这个值设置为0x00表示不限制响应次数。

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0401:表示是HCI_Inquiry command

指令的OGF是0x01即0000 01

OCF是0x0001即00 0000 0001

所以整个opcode是0000 0100 0000 0001即0x0401

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

0x9E8B33:表示IAC为GIAC

0x14:表示搜索0x14 * 1.28=25.6s

0x00:表示不限制响应次数

对应的event说明:command status event、Inquiry Result events或者Inquiry Result with RSSI Event或者extended Inquiry Result events(根据inquiry mode)、Inquiry Complete event(如果收到inquiry cancel command则不会有这个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

0x0401:表示是HCI_Inquiry command

extended Inquiry Result events:

0x04:表示HCI Event Packet

0x2f:表示这个event是Extended Inquiry Result event

0xff:表示Parameter_Total_Length即255个byte

后面的参数在Extended Inquiry Result event里面说明。

Inquiry Complete event(暂时没有)

(2)Inquiry Result Event

Inquiry Result event表示在搜索过程中搜索到了一个或者多个远端BR/EDR Controller

Num_Responses(1 Octet):表示搜索到了多少个设备

BD_ADDR[i] (Num_Responses * 6 Octet):表示每个设备的地址

Page_Scan_Repetition_Mode[i] (Num_Responses * 1 Octet):表示每个设备的Page_Scan_Repetition_Mode,0x00表示R0,0x01表示R1,0x02表示R2

Reserved[i] (Num_Responses * 1 Octet):忽略

Reserved[i] (Num_Responses * 1 Octet):忽略

Class_of_Device[i] (Num_Responses * 3 Octet):搜索到的每个设备对应的设备类

Clock_Offset[i] (Num_Responses * 2 Octet):搜索到的每个设备对应的时钟偏移只需要关注bit0-14

举例说明:(暂时没有)

(3)Inquiry Result with RSSI Event

只有当Inquiry Mode是0x01 (Inquiry Result format with RSSI)时,搜索才会返回这个event,除了RSSI,其他跟Inquiry Result Event含义一样

RSSI[i](Num_Responses * 1 Octet):即Received Signal Strength Indication,取值范围是-127到+20

(4)Extended Inquiry Result Event

只有当Inquiry_Mode是0x02 (Inquiry Result with RSSI format or Extended Inquiry Result format)时才会返回这个event

这个event和上面2个不同,每个event只能包含一个Extended Inquiry Response,所以Num_Responses=1

如果收到的inquiry response packet中的EIR结构体是0个,那么会使用Inquiry Result with RSSI event,所以即使Inquiry_Mode是0x02,也可能会收到Inquiry Result with RSSI event,除了Extended_Inquiry_Response其他参数跟Inquiry Result with RSSI event一样

Extended_Inquiry_Response(240 octet):可以参照Write Extended Inquiry Response Command

举例说明:

Event如下:

0x04:表示HCI Event Packet

0x2f:表示这个event是Extended Inquiry Result event

0xff:表示Parameter_Total_Length即255个byte

0x01:表示Num_Responses=1

0x35 0x8b 0xf8 0x11 0x1a 0xfc:表示BD_ADDR为0xfc:0x1a:0x11:0xf8:0x8b:0x35

0x01:表示Page_Scan_Repetition_Mode=0x01即R1

0x02:Reserved,忽略

0x5a020c:表示Class_of_Device,0101 1010 0000 0010 0000 1100,设备服务类是前11个bit(0101 1010 000)置位的分别是bit 17(网络)、bit19(捕捉)、bit20(对象传输)、bit22(电话),主设备类是(0 0010)对应的是手机;次设备类是(0000 11)对应的是智能手机

0x7af2:表示Clock_Offset即0111 1010 1111 0010,bit0-14表示的值是31474

0xb3:表示RSSI即-77

剩下的240byte数据就是Extended_Inquiry_Response,

EIR数据解析如下:

0f 09 76 69 76 6f 20 58 36 53 50 6c 75 73 20 41

EIR struct1:length=0xf,EIR data type=0x9即complete local name,EIR data: vivo X6SPlus A

1d 03 03 11 05 11 06 11 0a 11 0c 11 0e 11 12 11 15 11 16 11 1f 11 2d 11 2f 11 00 12 32 11

EIR struct2:length=0x1d,EIR data type=0x3即Complete List of 16-bit Service Class UUIDs,EIR data:对应的UUID如下

01 05

EIR struct3:length=0x01,EIR data type=0x5即Complete List of 32-bit Service Class UUIDs

01 07

EIR struct4:length=0x01,EIR data type=0x7即Complete List of 128-bit Service Class UUIDs

其余的字符为全0,是无效部分。

(5)Inquiry Complete Event

Inquiry Complete event表示搜索完成

参数说明:

Status(1 Octet):0x00表示success;0x01-0xFF error code

举例说明:(暂时没有)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值