BTstack从操作流程上可以分为如下几部分:
1、发送 将用户的指示发送出去
2、接收 循环接收和处理从硬件接收的数据
3、处理数据 涉及到蓝牙协议栈或者自己写的APP的处理
以上三步可以归结为两步,接收和处理
以下两步将循环执行:
1、接收 包含用户的指示和设备返回的数据
2、处理 包含将用户的指示发送给蓝牙设备,也可以从收到的数据中记录有用的信息
BTStack支持多操作系统、多接口的硬件
所以从框架上,进入循环之前就应该确定所有的硬件信息。
这意味着,会有多个不同类型的循环,针对不同的系统和不同的硬件接口
如
prot/windows-winusb/main.c
prot/windows-h4/main.c
port/libusb/main.c
蓝牙分层如下上下两层
APP
————————————
GAP 这4层成为host层 发现设备、连接设备 每层都可以提供数据处理函数
GATT 提供服务,有哪些服务,服务由哪些属性组成
ATT/SM 提供属性及访问方法,GATT把这些属性组合起来构成服务
L2CP 标记/识别数据来自哪个channel,转发
_________HCI________
LL 这2层是controller层 确定是广播包还是数据包 LL和PHY两层代表蓝牙模块
PHY 无线收发器,传输、跳频
蓝牙模块通过HCI层将数据传输给上层,上面的四层和APP层,都可以提供数据处理函数
空中的数据格式:
LL层 0x8e89bed6 type Advertising channel PDU 广播包,头部固定
random LLID LL control PDU 数据包,随机数每次配对连接时自动生成
L2CAP random LLID(10b,01b) channel ID (05/06) signaling packet(code+identifier+length+data)
ATT random LLID (10b,01b) channel ID (04) att opcode att params auth sig
和之前的解码程序类似,循环中接收和处理数据
prot/windows-winusb/main.c
platform/windows/btstack_run_loop_windows.c
example/le_data_channel_client.c btstack_main() 这个是app的处理函数
src/ble/sm.c 下面四行是btstack的处理函数
src/btstack_crypto.c
src/l2cap.c
src/hci.c
platform/windows/hci_transport_h2_winusb.c