开源双模蓝牙协议栈 代码结构介绍

   日期:2020-09-07     浏览:104    评论:0    
核心提示:零. 概述本文章主要讲下蓝牙设备类型class of device的概念,service class ,major device,minor device类型以及举例说明下某一个cod的解析。一. 声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,

零. 概述

本文章主要讲下双模蓝牙协议栈的代码结构以及常用的一些配置选项

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. 代码结构

备注:我们在新的代码中增加了mcu_bt_tool文件夹,这个是用上位机控制我们STM32开发版的

三.代码配置选项

3.1 Debug日志开启关闭



#define BT_DEBUG printf
#define BT_PBUF_TRACE_LEVEL 1
#define BT_MEMORY_TRACE_LEVEL 1
#define BT_SNOOP_TRACE_LEVEL 1
#define BT_TRANSPORT_TRACE_LEVEL 3
#define BT_VENDOR_TRACE_LEVEL 3
#define BT_HCI_TRACE_LEVEL 3
#define BT_L2CAP_TRACE_LEVEL 3
#define BT_SDP_TRACE_LEVEL 3
#define BT_RFCOMM_TRACE_LEVEL 3
#define BT_HFP_TRACE_LEVEL 3
#define BT_HSP_TRACE_LEVEL 3
#define BT_OBEX_TRACE_LEVEL 3
#define BT_PBAP_TRACE_LEVEL 3
#define BT_MAP_TRACE_LEVEL 3
#define BT_DID_TRACE_LEVEL 3
#define BT_SPP_TRACE_LEVEL 3
#define BT_AVDTP_TRACE_LEVEL 3
#define BT_AVCTP_TRACE_LEVEL 3
#define BT_A2DP_TRACE_LEVEL 3
#define BT_AVRCP_TRACE_LEVEL 3

此部分的代码对应的设置为0,那么就是realease版本(不带任何log),如果设置为1,也只打印error log,如果设置为2,那么打印error log + warning log,如果设置为3,那么所有的log都打印,并且每个开关都会对应于特定的协议,可以只选择开某一个协议的log,实现原理大概贴下

Bt_debug.h的等级有如下定义


#define BT_TRACE_LEVEL_NONE 0    
#define BT_TRACE_LEVEL_ERROR 1   
#define BT_TRACE_LEVEL_WARNING 2 
#define BT_TRACE_LEVEL_DEBUG 3   

我们以btsnoop打印原理来看下:

只有我们配置的等级高于特定的等级,才会打印出log

#define BT_SNOOP_TRACE_ERROR(fmt,...)                                      \
  {                                                                \
    if (BT_SNOOP_TRACE_LEVEL >= BT_TRACE_LEVEL_ERROR)               \
      BT_DEBUG(fmt,##__VA_ARGS__); \
  }

#define BT_SNOOP_TRACE_WARNING(fmt,...)                                      \
  {                                                                \
    if (BT_SNOOP_TRACE_LEVEL >= BT_TRACE_LEVEL_WARNING)               \
      BT_DEBUG(fmt,##__VA_ARGS__); \
  }

#define BT_SNOOP_TRACE_DEBUG(fmt,...)                                      \
  {                                                                \
    if (BT_SNOOP_TRACE_LEVEL >= BT_TRACE_LEVEL_DEBUG)               \
      BT_DEBUG(fmt,##__VA_ARGS__); \
  }

使用方式如下:

3.2 蓝牙Profile功能开启关闭,开关如下:

#define PROFILE_DID_ENABLE 0
#define PROFILE_HFP_ENABLE 1
#define PROFILE_SPP_ENABLE 0
#define PROFILE_PBAP_ENABLE 0
#define PROFILE_A2DP_ENABLE 0
#define PROFILE_AVRCP_ENABLE 0

暂时没做全,后续会增加classical,ble的功能以及更多的profile功能

3.3 其他配置选项

① 开启Btsnoop功能,注意只能在Linux project下使用

② 配置Transport功能,分为H2,H4,H5,BSP

③ SSP配对模式的使能

④ SSP配对模式的选项

⑤ 蓝牙Class of device的配置

⑥ 蓝牙本地名称的配置

⑦ 蓝牙base on pincode的配对码

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服