桃芯蓝牙协议栈架构--入门分析

       本文章只介绍桃芯特有的蓝牙协议架构,基础蓝牙概念不作过多介绍

目录

        桃芯的蓝牙协议栈架构

Host 的架构

消息驱动

消息类型

消息处理

回调函数事件包

Controler的架构


        桃芯的蓝牙协议栈架构

        两个任务(两个线程):ControllerHost

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_METABLE 元事件
        
        这个元事件下辖多个子事件。先通过 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_COMPLETEHCI 命令完成事件
         通过 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_STATUSHCI 命令状态事件
        立即完成的HCI命令,controller回复    HCI_EVENT_COMMAND_COMPLETE
        无法 立即完成的HCI命令,controller回复   HCI_EVENT_COMMAND_STATUS
        (如连接蓝牙命令)
6. BTSTACK_EVENT_USER_MSG:来自 btstack_push_user_msg 的用户消息

        用户自定义消息

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值