本文主要是介绍蓝牙协议栈之HCI层(chapter 1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HCI简介
HCI(host communication interface)主机通讯端口,它主要为上层提供了一个统一的通讯端口,其主要用于传输命令和时间。大概关系图如下、
host(用户app)对蓝牙的控制都是发送通讯协议中定义的命令来控制蓝牙进入到响应的工作模式,蓝牙处理之后会以事件的方式返回通知主机。
一、协议数据格式
HCI传输的数据格式有4种类型,分别为命令,acl,sco和事件,在协议数据中对应的type分别为、
command(0x01)
acl(0x02)
sco(0x03)
event(0x04)
1.1、command pocket
command pocket的数据格式如下,大家也可以阅读蓝牙的协议栈文档去了解。
opcode为命令操作吗,由ocf与ogf组成。
1.2、ACL Data pocket
acl主要用于主从设备之间数据的异步交换,比如音乐播放,我们的l2cap就是使用的是该模式。数据包的协议数据格式如下、
handle表示当前通信通道的句柄,PB Flag(packet boundary flag)表示包的可接收到的层。
1.3、SCO Data Packet
SCO主要用于ble与host之间同步数据的传输,数据包格式如下、
handle如上描述、PSF如下、
1.4、Event Packet
event主要是be设备在有事件发生时通知主机,格式如下。
二、命令与时间介绍
在蓝牙的协议栈中,命令和事件太多,这里我们只列举一下几个常用的command与事件
2.1、复位命令
2.1.1、host发送部分:
00000010 00000010 00100000 00000110 00000000 00000010 00000000 01000001 00000001 00000000 00000001 00000001 00000011 00001100 00000000
Command:00000001(0x01)
Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))根据ogf和ocf查表可知为复位指令
2.1.2、设备接收回应如下、
00000100 00001110 00000100 00000001 00000011 00001100 00000000
Event:00000100(0x04)
Event code:00001110(0x0e,命令完成指令)
Paramter total length:00000100 (参数长度为4)
Num hci command packet:00000001(表明controller还可以接收1个host的指令)
Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))指明是对reset指令的回复,这个值必须与发送部分相同
Status:00000000(零为成功,其他为失败,具体参考失败码)
这篇关于蓝牙协议栈之HCI层(chapter 1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!