IT评测·应用市场-qidao123.com
标题:
桃芯蓝牙协议栈架构--入门分析
[打印本页]
作者:
曹旭辉
时间:
2024-12-23 22:36
标题:
桃芯蓝牙协议栈架构--入门分析
本文章只先容桃芯特有的蓝牙协议架构,底子蓝牙概念不作过多先容
目录
桃芯的蓝牙协议栈架构
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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4