1 前言
本文只要对蓝牙协议栈做一个简单介绍,包含hci层、acl链路、
l2cap层,sdp服务及几个常见的profile,让初学蓝牙协议栈的人
对整个蓝牙协议栈有一个整体框架的了解。
2 HCI层
2.1 Hci命令及应答的控制
由于不同的hci命令对结果有不同的处理,有的不需要结果,有些需要
等待结果后才能执行下一步动作,有些在一定状态下才有效,对这
样在hci层,都有一套机制,每发送一个命令,都会先检查当前是否
可以发送该命令(有时hci controller当前不能接收命令时,也不能
发送),若命令可以发送,检查该命令是否一定需要等待结果,并
且等待结果的超时时间是多少,然后启动一个定时器监测该命令的
返回结果,若超时还没有结果,就执行命令超时处理。
2.2 hci分组
《蓝牙协议及其源代码分析》 208页
《bluetooth_Core_v4.2.pdf》779页
《蓝牙协议及其源代码分析》该书可以购买或从网上下载,这里标
志的是网上下载的版本,非完整版本,若对不上号,自己找对应位
置。
《bluetooth_Core_v4.2.pdf》下载地址:
https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=286439
2.3 HCI CONFIGURATION PARAMETERS
《bluetooth_Core_v4.2.pdf》787页
2.4 链路控制指令
《蓝牙协议及其源代码分析》 214页
《bluetooth_Core_v4.2.pdf》813页
2.5 链路策略命令
《蓝牙协议及其源代码分析》 216页
《bluetooth_Core_v4.2.pdf》926页
2.6 主机控制器和基带命令
《蓝牙协议及其源代码分析》 216页
《bluetooth_Core_v4.2.pdf》951页
2.7 信息参数命令
《蓝牙协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1097页
2.8 状态参数命令
《蓝牙协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1110页
2.9 测试命令
《蓝牙协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1138页
2.10 事件
《蓝牙协议及其源代码分析》 219页
《bluetooth_Core_v4.2.pdf》1152页
2.11 BLE控制器命令
《bluetooth_Core_v4.2.pdf》1271页
3 ACL链路
L2CAP的通信是基于ACL链路的,两个蓝牙设备之间只有一条ACL链
路,由Connect Handle标识。在进行L2CAP的任何通信之前,都
需要先建立ACL链路,两个蓝牙设备的配对,先建立一条ACL通
码。ACL链路建立后,就会进行L2CAP的一些交互,获取信息,但
需要基于SDP profile获取信息时,L2CAP就会建立一条SDP逻辑链
路(由Channel ID标识),SDP的交互就在L2CAP建立的Channel
上进行,SDP交互完成后,会断开SDP的逻辑链路,若后面没有其
它再需要交互的,ACL链路也会断开,但由于已经配对过,上层会
保存ACL配对的信息。
4 L2CAP层
4.1 l2cap层位置
4.2 L2CAP包
《bluetooth_Core_v4.2.pdf》1737页
L2CAP包的类型有CID(Channel ID)确定:
0x0000 Null identifier(不使用)
0x0001 L2CAP Signaling channel(信令信道)
0x0002 Connectionless channel(无连接信道,用于广播)
0x0003 AMP Manager Protocol