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

(5)Create Connection Cancel Command

这个命令用来取消一个正在进行的连接(注意:这个连接是本地BR/EDR Controller使用Create_Connection命令发起的)

如果基带层的连接已经建立,但是本地BR/EDR Controller还没有发送Connection Complete event给host,这时候本地设备会断开连接同时发送Command Complete event(status是“Success”)给host

如果连接已经建立,本地BR/EDR Controller也已经发送了Connection Complete event,然后本地BR/EDR Controller会发送Command Complete event(status是0x0B即ACL Connection already exists)给host

如果Create_Connection_Cancel命令中的BD_ADDR跟之前Create Connection 中的BD_ADDR不一样,那么本地BR/EDR Controller会发送Command Complete event(status是0x02即Unknown Connection Identifier)

(0x02).

发送Create_Connection_Cancel命令以后,本地BR/EDR Controller还是会发送Connection Complete event,如果连接被取消,那么Connection Complete event重的status为0x02(Unknown Connection Identifier)

If the cancellation was successful, the Connection Complete event

will be generated with the error code Unknown Connection Identifier (0x02).

参数说明:

BD_ADDR(6 Octet):Create_Connection命令中设置的设备地址

返回参数说明:

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

BD_ADDR(6 Octet):Create_Connection命令中设置的设备地址

举例说明:(暂时没有)

(6)Connection Complete Event

Connection Complete event可以用来通知host连接已经建立,也会通知host连接失败(status表示连接失败的原因)

参数说明:

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

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF,只有前12bit有效,表示操作的是哪个连接

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

Link_Type(1 Octet):表示连接的类型0x00表示SCO连接,0x01表示ACL连接

Encryption_Enabled(1 Octet):0x00表示Link level encryption disabled,0x01表示Link level encryption enabled.

举例说明:

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.

(7)Disconnect Command

Disconnection command用来断开一个已经存在的连接,Connection_Handle表示断开哪个连接,Reason表示断开连接的原因,远端Controller将会接收到这个Reason参数(在远端设备的Disconnection Complete event里面),注意SCO/eSCO连接应该在ACL连接之前断开

参数说明:

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF,只有前12bit有效,表示操作的是哪个连接

Reason(1 Octet):表示断开连接的原因,取值有这些:

Authentication Failure error code (0x05)

Other End Terminated Connection error codes (0x13-0x15)

Unsupported Remote Feature error code(0x1A)

Pairing with Unit Key Not Supported error code (0x29)

Unacceptable Connection Parameters error code (0x3B)

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0406:表示是HCI_Disconnect command

指令的OGF是0x01即0000 01

OCF是0x0006即00 0000 0110

所以整个opcode是0000 0100 0000 0110即0x0406

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

0x0003:表示Connection_Handle=0x0003

0x13:表示连接断开的原因,0x13即Remote User Terminated Connection

对应的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

0x0406:表示是HCI_Disconnect command

Disconnection Complete event

0x04:表示HCI Event Packet

0x05:表示这个event是Disconnection Complete event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x0003:表示Connection_Handle=0x0003

0x16:表示是连接断开的原因,0x16表示Connection Terminated By Local Host

(8)Disconnection Complete Event

当连接断开的时候,本地Controller会发送Disconnection Complete event,注意当物理连接失败的时候也会返回这个event

参数说明:

Status(1 Octet):0x00表示连接断开成功;0x01-0xFF表示连接断开失败

Connection_Handle(2 Octet):取值范围0x0000-0x0EFF,只有前12bit有效,表示具体是哪个连接断开了

Reason(1 Octet):表示断开连接的原因,注意,如果status表示连接断开失败,那么这个参数需要忽略

举例说明:

Disconnection Complete event

0x04:表示HCI Event Packet

0x05:表示这个event是Disconnection Complete event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status是success

0x0003:表示Connection_Handle=0x0003

0x16:表示是连接断开的原因,0x16表示Connection Terminated By Local Host

(9)Read Page Timeout Command

这个命令用来获取Page_Timeout得值,Page_Timeout表示本地发起连接请求时,本地Link Manager等待远端设备page回复的最大时间,如果超过这个时间,远端设备没有page响应,则此次连接请求就失败了

返回参数说明:

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

Page_Timeout(2 Octet):取值范围0x0001 to 0xFFFF,默认值是0x2000,具体超时时间是N * 0.625 msec

举例说明:(暂时没有)

(10)Write Page Timeout Command

这个命令用来配置Page_Timeout

参数说明:

Page_Timeout(2 Octet):取值范围0x0001 to 0xFFFF,默认值是0x2000,具体超时时间是N * 0.625 msec

返回参数说明:

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

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0C18:表示是HCI_Write_Page_Timeout command

指令的OGF是0x03即0000 11

OCF是0x0018即00 0001 1000

所以整个opcode是0000 1100 0001 1000即0x0C18

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

0x2000:表示Page_Timeout=0x2000,即0.625 * 8192=5120ms

对应的Event(Command Complete event):

0x04:表示HCI Event Packet

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

0x04:表示Parameter_Total_Length即4个byte

0x01:表示Num_HCI_Command_Packets

0x0C18:表示是HCI_Write_Page_Timeout command

0x00:表示status是success

(11)Read Page Scan Activity Command

这个命令用来读取Page_Scan_Interval和Page_Scan_Window的值,Page_Scan_Interval改变,可能改变Page_Scan_Repetition_Mode

返回参数说明:

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

Page_Scan_Interval(2 Octet):表示两次page scan的时间间隔,即从上一次page开始到下一次page scan开始,取值范围是0x0012 – 0x1000(默认值是0x0800),即Page _Scan_Interval * 0.625ms

Page_Scan_Window(2 Octet):表示Page scan持续的时间,取值范围是0x0011 - 0x1000(默认值是0x0012),即Page _Scan_Window * 0.625ms,Page_Scan_Window<= Page_Scan_Interval

举例说明:(暂时没有)

(12)Write Page Scan Activity Command

这个命令用来配置Page_Scan_Interval和Page_Scan_Window,Page_Scan_Interval改变,可能改变Page_Scan_Repetition_Mode

参数说明:

Page_Scan_Interval(2 Octet):表示两次page scan的时间间隔,即从上一次page开始到下一次page scan开始,取值范围是0x0012 – 0x1000(默认值是0x0800),即Page _Scan_Interval * 0.625ms

Page_Scan_Window(2 Octet):表示Page scan持续的时间,取值范围是0x0011 - 0x1000(默认值是0x0012),即Page _Scan_Window * 0.625ms,Page_Scan_Window<= Page_Scan_Interval

返回参数说明:

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

举例说明:(暂时没有)

(13)Page Scan Repetition Mode Change Event

这个event表示远端BR/EDR Controller已经成功改变了自己的Page_Scan_Repetition_Mode (SR)

参数说明:

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

Page_Scan_Repetition_Mode(1 Octet):0x00表示R0,0x01表示R1,0x02表示R2

举例说明:(暂时没有)

(13)Read Page Scan Type Command

这个命令用来获取本地BR/EDR Controller的Page Scan Type

返回参数说明:

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

Page_Scan_Type(1 Octet):0x00表示标准Scan (默认使用这种模式),0x01表示隔行Scan

举例说明:(暂时没有)

(14)Write Page Scan Type Command

这个命令用来配置本地BR/EDR Controller的Page Scan Type

参数说明:

Page_Scan_Type(1 Octet):0x00表示标准Scan (默认使用这种模式),0x01表示隔行Scan

返回参数说明:

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

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0C47:表示是HCI_Write_Page_Scan_Type command

指令的OGF是0x03即0000 11

OCF是0x0047即00 0100 0111

所以整个opcode是0000 1100 0100 0111即0x0C47

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

0x01:表示Page_Scan_Type=0x01,即隔行scan

对应的Event(Command Complete event):

0x04:表示HCI Event Packet

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

0x04:表示Parameter_Total_Length即4个byte

0x01:表示Num_HCI_Command_Packets

0x0C47:表示是HCI_Write_Page_Scan_Type command

0x00:表示status是success

(15)Read Connection Accept Timeout Command

这个命令用来获取Connection_Accept_Timeout的值

返回参数说明:

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

Conn_Accept_Timeout(2 Octet):这个参数表示从本地BR/EDR Controller发送Connection Request event开始到自动拒绝连接请求的时间,取值范围是0x0001到0xB540(默认值是0x1F40),对应的时间是Conn_Accept_Timeout *  0.625 ms

举例说明:(暂时没有)

(16)Write Connection Accept Timeout Command

这个命令用来配置Connection_Accept_Timeout的值

参数说明:

Conn_Accept_Timeout(2 Octet):这个参数表示从本地BR/EDR Controller发送Connection Request event开始到自动拒绝连接请求的时间,取值范围是0x0001到0xB540(默认值是0x1F40),对应的时间是Conn_Accept_Timeout *  0.625 ms

返回参数说明:

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

举例说明:(暂时没有)

(17)Read Hold Mode Activity Command

这个命令用来获取Hold_Mode_Activity的值

返回参数说明:

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

Hold_Mode_Activity(1 Octet):这个参数用来设置在BR/EDR Controller进入hold模式时需要暂停哪些活动(Periodic Inquiry, Inquiry Scan和Page Scan),可以使用位与的方式设置多个活动,当所有连接都进入Hold Mode时,Hold_Mode_Activity才有效,0x00表示保持当前的Power State,0x01表示暂停Page Scan,0x02表示暂停Inquiry Scan,0x04表示暂停Periodic Inquiries

举例说明:(暂时没有)

(18)Write Hold Mode Activity Command

这个命令用来配置Hold_Mode_Activity的值

参数说明:

Hold_Mode_Activity(1 Octet):这个参数用来设置在BR/EDR Controller进入hold模式时需要暂停哪些活动(Periodic Inquiry, Inquiry Scan和Page Scan),可以使用位与的方式设置多个活动,当所有连接都进入Hold Mode时,Hold_Mode_Activity才有效,0x00表示保持当前的Power State,0x01表示暂停Page Scan,0x02表示暂停Inquiry Scan,0x04表示暂停Periodic Inquiries

返回参数说明:

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

举例说明:(暂时没有)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值