第一部分:HCI协议(八)具体的HCI command和event(7、CONNECTION SETUP 一)

下面只介绍常用的几个command和event

(1)Create Connection Command

这个命令是使Link Manager根据BD_ADDR与远端设备建立ACL连接

参数说明:

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

Packet_Type(2 Octet):指定Link Manager在ACL连接中使用什么packet type(DM1 packet是永远被支持的),可以使用位与的方式指定多个packet type,取值范围如下图所示:

Page_Scan_Repetition_Mode(1 Octet):指定远端设备支持的page scan repetition mode,page scan repetition mode是在搜索的时候获取到的(0x00表示R0,0x01表示R1,0x02表示R2)

Reserved(1 Octet):设置成0

Clock_Offset(2 Octet):指定本地时钟与远端设备时钟的时钟偏移,这个参数得bit0-14表示时钟的bit2-16,这个参数的bit 15表示Clock_Offset_Valid_Flag,其中Invalid Clock Offset = 0,Valid Clock Offset = 1

Allow_Role_Switch(1 Octet):表示本地设备在连接建立时是否接受master-slave role switch request(远端设备使用Accept_Connection_Request command时,使用参数Role指定角色),0x00:表示本地设备是master,不支持master-slave角色互换;0x01:表示支持master-slave角色互换,本地设备可能是master,也可能在接收到master-slave角色互换请求以后变成slave;

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0405:表示是HCI_Create_Connection command

指令的OGF是0x01即0000 01

OCF是0x0005即00 0000 0101

所以整个opcode是0000 0100 0000 0101即0x0405

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

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

0xcc18:表示packet type

0x01:表示Page_Scan_Repetition_Mode为R1

0x00:表示Reserved

0xf094:表示clock offset,bit15=1表示有效的时钟偏移,时钟偏移量=0x7094=28820

0x01:表示支持master-slave角色互换

对应的Event:

Command stauts event:

0x04:表示HCI Event Packet

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

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x0405:表示是HCI_Create_Connection command

Connection Complete Event:(连接成功以后)

0x04:表示HCI Event Packet

0x03:表示Connection Complete Event

0x0b:表示Parameter_Total_Length即11个byte

0x00:表示status是success

0x0003:表示Connection_Handle=0x0003

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

0x01:表示Link_Type=0x01即ACL连接

0x00:表示Encryption_Enabled=0x00即Link level encryption disabled.

(2)Connection Request Event

Connection Request event表示有一个新的连接请求,我们可以选择接受或者拒绝,如果是ACL连接(根据link type),应该使用Accept_Connection_Request或者Reject_Connection_Request command,如果是SCO或者eSCO连接(根据link type),应该使用Accept_Synchronous_Connection_Request或者Reject_Synchronous_Connection_Request command

注意:如果是SCO连接, 也可以用Accept_Connection_Request command响应. Connection Request event,此时local Link Manager其实使用的是Accept_Synchronous_Connection_Request command(参数都是默认的)但是这种情况下,controller返回的是Connection Complete event而不是Synchronous Connection Complete event

参数说明:

BD_ADDR(6 Octet):发送Connection Request Event的设备地址

Class_of_Device(3 Octet):发送Connection Request Event的设备的设备类

Link_Type(1 Octet):连接类型,0x00表示SCO连接请求,0x01表示ACL连接请求,0x02表示eSCO连接请求

举例说明:(Connection Request event)

0x04:表示HCI Event Packet

0x04:表示这个event是Connection Request event

0x0a:表示Parameter_Total_Length即10个byte

0x35 0x8b 0xf8 0x11 0x1a 0xfc:表示请求连接的设备地址是0xfc: 0x1a: 0x11: 0xf8: 0x8b: 0x35

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

对应的软件解析如下:

0x01:表示是Link_Type是ACL

(3)Accept Connection Request Command

收到Connection Request Event连接请求后,host回复HCI_Accept_Connection_Request表示接受连接请求,然后Link Manager将会跟BD_ADDR与远端设备建立一个连接,Role表示Host是否希望Link Manager请求Role Switch(即本地设备变成Master),如果Role Switch失败,连接不会受到影响,可以使用Role Discovery Command获取当前role

注意:当接受一个synchronous connection request时,Role参数是没有效果的。

参数说明:

BD_ADDR(6 Octet):发送Connection Request Event的设备地址(即接受来自BD_ADDR的连接请求)

Role(1 Octet):0x00表示master(即LM会请求Role Switch),0x01表示slave(即LM不会请求Role Switch)

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0409:表示是HCI_Accept_Connection_Request command

指令的OGF是0x01即0000 01

OCF是0x0009即00 0000 1001

所以整个opcode是0000 0100 0000 1001即0x0409

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

0x35 0x8b 0xf8 0x11 0x1a 0xfc:表示请求连接的设备地址是0xfc: 0x1a: 0x11: 0xf8: 0x8b: 0x35

0x00:表示本地设备请求Role Switch,即本地设备请求变成master,对方变成slave

对应的Event:

Command stauts event:

0x04:表示HCI Event Packet

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

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x01:表示Num_HCI_Command_Packets

0x0409:表示是HCI_Accept_Connection_Request command

Role Change Event(因为本地设备请求了role switch并且对方同意了):

0x04:表示HCI Event Packet

0x12:表示这个event是Role Change event

0x08:表示Parameter_Total_Length即8个byte

0x00:表示已经发生了role change

0x35 0x8b 0xf8 0x11 0x1a 0xfc:表示远端设备地址是0xfc: 0x1a: 0x11: 0xf8: 0x8b: 0x35

0x00:表示是本地设备是远端设备的master

Connection Complete Event:(连接成功以后)

0x04:表示HCI Event Packet

0x03:表示Connection Complete Event

0x0b:表示Parameter_Total_Length即11个byte

0x00:表示status是success

0x000b:表示Connection_Handle=0x000b

0x35 0x8b 0xf8 0x11 0x1a 0xfc:表示远端设备地址是0xfc: 0x1a: 0x11: 0xf8: 0x8b: 0x35

0x01:表示Link_Type=0x01即ACL连接

0x00:表示Encryption_Enabled=0x00即Link level encryption disabled.

(4)Reject Connection Request Command

收到Connection Request Event连接请求后,host回复HCI_Reject_Connection_Request表示拒绝连接请求

参数说明:

BD_ADDR(6 Octet):发送Connection Request Event的设备地址(即拒绝来自BD_ADDR的连接请求)

Reason(1 Octet):Error code,表示拒绝连接请求的原因

举例说明:(暂时没有)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值