本文章只先容桃芯特有的蓝牙协议架构,底子蓝牙概念不作过多先容
目录
桃芯的蓝牙协议栈架构
Host 的架构
消息驱动
消息范例
消息处理
回调函数变乱包
Controler的架构
桃芯的蓝牙协议栈架构
两个使命(两个线程):Controller、Host
Host 的架构
Host 的架构如图 2.1 所示,紧张通过 GAP 、 ATT 、 GATT Client 、 SM 等 4 个 模块为开发者提供操纵接口。
消息驱动
Host 使命是由各种消息驱动的 消息范例
来自 Controller 的变乱、 ACL 数据,也包含软件定时器消息和用户发送的消息(btstack_push_user_msg)。 消息处理
在Switch case语句中调用各种 回调函数 回调函数变乱包
协议栈的各种回调函数遵照类似的原型,其输入称为变乱包: - typedef void (*btstack_packet_handler_t) (
- // 事件包类型
- uint8_t packet_type,
- // 关联的信道(一般指蓝牙连接句柄)
- uint16_t channel,
- // 事件包内容
- const uint8_t *packet,
- // 事件包内容的长度
- uint16_t size);
复制代码 第一个参数:packet_type 的四种范例
HCI_EVENT_PACKET: HCI 变乱包( 常用) 这个范例的变乱包是个 “大杂烩 ”,多个模块弹出的变乱包都会使用这个范例。 • HCI_ACL_DATA_PACKET : Controller 上报的 ACL 数据 这个范例的变乱包只会被通过 hci_register_acl_packet_handler 注册的 ACL 数据回调 函数收到。 • HCI_COMPLETED_SDU_PACKET : 来自 LE 信用信道的完整 SDU 这个范例的变乱包只会被通过 l2cap_register_service 注册的 L2CAP 服务回调函数收 到。 • L2CAP_EVENT_PACKET : 来自 L2CAP 的变乱包 这个范例的变乱包只会被通过 l2cap_add_event_handler 注册的 L2CAP 变乱回调函数 收到。 变乱包分析:HCI_EVENT_PACKET
回调函数第一个参数 packet_type 的第一种范例 HCI_EVENT_PACKET 的变乱包分析 可以使用hci_event_packet_get_type(packet) 获取 变乱代码 变乱代码(常用6种):
1. BTSTACK_EVENT_STATE:蓝牙协议栈变乱
一样寻常用于响应协议栈初始化: 2. HCI_EVENT_LE_META:BLE 元变乱
这个元变乱下辖多个子变乱。先通过 hci_event_le_meta_get_subevent_code(packet) 获 得子变乱代码,然后通过 decode_hci_le_meta_event(packet, sub_event_type) 宏得到 子变乱的内容。 sub_event_type 为子变乱内容对应的数据范例,各字段与蓝牙焦点规范 里的界说同等 。 详细各种子变乱可查看桃芯 pg_ble_stack.pdf文件 3. HCI_EVENT_DISCONNECTION_COMPLETE:连接断开变乱
获得断开缘故起因等信息: 使用decode_hci_event_disconn_complete(packet)解码获得内容 - typedef struct event_disconn_complete
- {
- // 状态码
- uint8_t status;
- // 连接句柄
- uint16_t conn_handle;
- // 原因
- uint8_t reason;
- } event_disconn_complete_t;
复制代码
4. HCI_EVENT_COMMAND_COMPLETE:HCI 命令完成变乱
通过 hci_event_command_complete_get_command_opcode(packet) 获得 HCI 命令码。 通过 hci_event_command_complete_get_return_parameters(packet) 获得 Controller 返回 的参数 第 1 个字节为命令完成的状态, 0 表示没有错误,其他状态见 pg_ble_stack.pdf文件中的 Controller错误码分析 5. HCI_EVENT_COMMAND_STATUS:HCI 命令状态变乱
立刻完成的HCI命令,controller复兴 HCI_EVENT_COMMAND_COMPLETE 无法 立刻完成的HCI命令,controller复兴 HCI_EVENT_COMMAND_STATUS (如连接蓝牙命令) 6. BTSTACK_EVENT_USER_MSG:来自 btstack_push_user_msg 的用户消息
用户自界说消息
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |