第一部分:HCI协议(八)具体的HCI command和event(13、PHYSICAL LINKS)

(1)Read Link Supervision Timeout Command

这个命令用来获取Handle对应连接的Link_Supervision_Timeout的值,这个命令中的Handle指的是ACL连接

Link_Supervision_Timeout是Controller用来监控link lost的,即如果Handle对应的连接上超过Link_Supervision_Timeout时间没有接收到任何数据包则表示连接断开了,取值范围:

参数说明:

Handle(2 Octet):用来表示一个连接(ACL连接)

返回参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

BD_ADDR(6 Octet):表示哪个设备的role发生改变

Handle(2 Octet):用来表示一个连接(ACL连接)

Link_Supervision_Timeout(2 Octet):Controller用来监控link lost的,即如果Handle对应的连接上超过Link_Supervision_Timeout时间没有接收到任何数据包则表示连接断开了,取值范围如上图所示

举例说明:(暂时没有)

(2)Write Link Supervision Timeout Command

这个命令用来设置Handle(ACL连接)表示的连接的Link_Supervision_Timeout值

注意:只有当本地BR/EDR controller是master时才能发送这个命令,如果本地BR/EDR controller是slave会失败(错误码:Command Disallowed)

参数说明:

Handle(2 Octet):用来表示一个连接(ACL连接)

Link_Supervision_Timeout(2 Octet):Controller用来监控link lost的,即如果Handle对应的连接上超过Link_Supervision_Timeout时间没有接收到任何数据包则表示连接断开了,取值范围

返回参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

Handle(2 Octet):用来表示一个连接(ACL连接)

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0C37:表示是HCI_Write_Link_Supervision_Timeout command

指令的OGF是0x03即0000 11

OCF是0x0037即00 0011 0111

所以整个opcode是0000 1100 0011 0111即0x0C37

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

0x0003:表示Handle为0x0003

0x1f40:表示设置的Link_Supervision_Timeout的值是8000,time=8000*0.625=5000ms

对应的Event:

Command Complete event:

0x04:表示HCI Event Packet

0x0e:表示这个event是command complete event

0x06:表示Parameter_Total_Length即6个byte

0x01:表示Num_HCI_Command_Packets

0x0C37:表示是HCI_Write_Link_Supervision_Timeout command

0x00:表示status为0

0x0003:表示Handle为0x0003

如下图所示:

本地设备发起连接,并且在收到connection complete之前并没有接收到role change event,说明连接建立以后,本地设备是master,所以可以发送HCI_Write_Link_Supervision_Timeout

如下图所示:

本地设备发起连接,在收到connection complete之前,接收到role change event并且本地设备变成了slave,说明连接建立以后,本地设备是slave,所以不可以发送HCI_Write_Link_Supervision_Timeout

过了一会收到了Link Supervision Timeout Changed,说明远端设备发起了HCI_Write_Link_Supervision_Timeout

(3)Link Supervision Timeout Changed Event

当master修改Link_Supervision_Timeout成功以后,本地controller(slave)用这个event通知host,修改后的Link_Supervision_Timeout值

参数说明:

Connection_Handle(2 Octet):用来表示一个连接(ACL连接)

Link_Supervision_Timeout(2 Octet):Controller用来监控link lost的,即如果Handle对应的连接上超过Link_Supervision_Timeout时间没有接收到任何数据包则表示连接断开了

举例说明:

0x04:表示HCI Event Packet

0x38:表示这个event是Link Supervision Timeout Changed event

0x04:表示Parameter_Total_Length即4个byte

0x000C:表示是Connection_Handle

0x1f40:表示Link_Supervision_Timeout被修改为8000,time=8000*0.625=5000ms

(4)Change Connection Packet Type Command

可以命令可以用来动态的修改一个已建立连接使用的packet types

参数说明:

Connection_Handle(2 Octet):用来表示一个连接(不能是eSCO连接)

Packet_Type(2 Octet):表示Link Manager可以使用的packet types(DM1是默认支持的),这个值得设定需要根据Connection_Handle表示的连接建立时返回的Connection Complete event中的Link_Type(SCO或者ACL)参数来确定,取值范围:

ACL连接;

SCO连接:

注意:如果要改变一个eSCO连接的packet types,需要使用Setup Synchronous Connection command

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x040f:表示是HCI_Change_Connection_Packet_Type command

指令的OGF是0x01即0000 01

OCF是0x000f即00 0000 1111

所以整个opcode是0000 0100 0000 1111即0x040f

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

0x000c:表示Connection_Handle为0x000c,这是一个ACL连接

0xcc18:表示设置的Packet_Type=0xcc18即1100 1100 0001 1000,解析如下图所示:

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

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

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status为0

0x01:表示Num_HCI_Command_Packets

0x040f:表示是HCI_Change_Connection_Packet_Type command

Connection Packet Type Changed event:

0x04:表示HCI Event Packet

0x1d:表示这个event是Connection Packet Type Changed event

0x05:表示Parameter_Total_Length即5个byte

0x00:表示status为0

0x000c:表示Connection_Handle为0x000c,这是一个ACL连接

0xcc18:表示设置的Packet_Type=0xcc18即1100 1100 0001 1000,解析如下图所示:

(5)Connection Packet Type Changed Event

当连接使用的packet type发生变化的时候,host会收到这个event

Status(1 Octet):0x00表示成功,其他值表示失败

Connection_Handle(2 Octet):用来表示一个连接(不能是eSCO连接)

Packet_Type(2 Octet):表示Link Manager可以使用的packet types(DM1是默认支持的),这个值的解析需要根据Connection_Handle对应的连接建立时返回的Connection Complete event中的Link_Type(SCO或者ACL)参数来确定,取值范围:

ACL连接;

SCO连接:

举例说明:

Connection Packet Type Changed event:

0x04:表示HCI Event Packet

0x1d:表示这个event是Connection Packet Type Changed event

0x05:表示Parameter_Total_Length即5个byte

0x00:表示status为0

0x000c:表示Connection_Handle为0x000c,这是一个ACL连接

0xcc18:表示设置的Packet_Type=0xcc18即1100 1100 0001 1000,解析如下图所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值