zoukankan      html  css  js  c++  java
  • 第06节-开源蓝牙协议BTStack框架分析

    本篇博客根据韦东山的视频,整理所得。

    本篇博客讲解BTStack的框架,首先来看一下硬件的结构:

     

     蓝牙模块接在电脑上,或是接在开发板上。不论接在哪,我们都需要编写程序来控制这个蓝牙模块。

    1. 我们需要发送数据给蓝牙模块

       需要发送命令给蓝牙模块,比如让它发出无线信号去扫描、识别、连接、读写附近的蓝牙设备

    2. 需要从蓝牙模块获得数据

    3. 需要处理获得的数据

    上述3步骤可以简化为一个循环

    1.读取数据:可以读取用户输入的指示,也可以读取蓝牙模块的数据

    2.处理数据:根据用户的指示发送数据给蓝牙模块,或处理从蓝牙模块读到的数据

    要点是:硬件操作、循环、处理

    这个循环就是程序的核心,BTStack最重要的东西就在那个循环里面。

    BTStack支持多种操作系统,比如说它支持widows,linux。它支持多种接口的蓝牙模块,比如说usb口、比如说串口。

    无论怎样,在程序中应该有一个循环,在windows系统中,它利用的是btstack_run_loop_windows.c来实现了一个循环,在循环内部它去等待读取硬件数据,得到数据后再进行处理。

     

    对于linux操作系统,它在btstack_run_loop_posix.c中是实现了一个循环,在循环内部它去等待读取硬件数据,得到数据后再进行处理。

     BTStack支持多OS,多接口硬件
    1)操作硬件
    2)循环
      a. 接收(涉及硬件操作。因为它支持多接口的硬件,显然在循环之前必须要打开硬件)
      b. 处理
    在循环建立之前,有个main.c,main.c中有个main函数。这个main函数处于不同的文件里面(不同的硬件接口以及操作系统,main.c所处的文件都是不同的。可以从上面的几幅图可以看出来)。不同文件中的main.c中的main函数回去操作不同的硬件。然后再去创建一个循环。
    操作硬件以及创建循环所涉及的源文件如下:

     在循环中最重要的一步就是处理,处理才是关键,那么如何处理呢?

     要发送数据时,通过HCI这一层把数据发送给蓝牙模块,接收数据时也是通过HCI这一层从蓝牙模块里面获取数据。接收到数据之后要进行处理,在HCI这一层可以进行处理。在L2CAP层可以处理自己感兴趣的数据。同样,上面的各个层都可以处理自己感兴趣的数据,因此都可以提供处理数据的函数。最上面的APP也可以提供处理函数。

    在循环里面,从蓝牙模块里面获取数据,然后依次调用各个层次提供的处理函数,在这些处理函数里面它会分辨那些数据,如果对数据感兴趣就去处理,不感兴趣就不管。

    总结:

    最重要的就是对数据的处理,这分为2部分:

    1. 蓝牙协议栈各层处数据的处理

     比如说向蓝牙模块发送什么命令,它返回什么数据,这是由蓝牙协议规定的。

    2. APP对数据的处理

    蓝牙协议栈各层、APP,提供自己的处理函数,在循环体里获得数据后,将依次调用这些处理函数。各个处理函数自行解析数据,如果感兴趣就处理,不感兴趣就直接返回。

    在不同的操作系统、不同接口的蓝牙模块见上面的图,所涉及的源文件:

    操作系统相关的代码

    不同接口相关的代码

    蓝牙协议栈相关的代码

    APP相关的代码

    对于不同的操作系统、不同的硬件接口,main函数来自不同的文件:

    1.main函数会调用操作系统相关的代码(下图中的①)、硬件接口相关的代码(下图中的②),进行初始化。

    2.然后调用btstack_main函数:不同的APP提供自己的btstack_main函数

  • 相关阅读:
    韩国新地图格式
    这次是真的准备出售用于传奇开发的HGE图形引擎了
    减小Delphi2010程序的尺寸(关闭RTTI反射机制)
    hook api 保护进程
    使用静态库
    iOS中的Block动画
    IOS中忽略字符串两边空格比较
    判断是否输入有汉字
    EasyDSS产生cache缓存如何设定定时清理缓存?
    EasyDSS定制项目中ETCD服务挂掉如何设定定时重启?
  • 原文地址:https://www.cnblogs.com/-glb/p/11617659.html
Copyright © 2011-2022 走看看