(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,解析如下图所示: