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语句中调用各种   回调函数      回调函数变乱包

     协议栈的各种回调函数遵照类似的原型,其输入称为变乱包:      
  1. typedef void (*btstack_packet_handler_t) (
  2.                         // 事件包类型
  3.     uint8_t packet_type,
  4.                         // 关联的信道(一般指蓝牙连接句柄)
  5.     uint16_t channel,
  6.                         // 事件包内容
  7.     const uint8_t *packet,
  8.                         // 事件包内容的长度
  9.     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)解码获得内容            
  1. typedef struct event_disconn_complete
  2. {
  3.     // 状态码
  4.     uint8_t status;
  5.     // 连接句柄
  6.     uint16_t conn_handle;
  7.     // 原因
  8.     uint8_t reason;
  9. } 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