第06节-开源蓝牙协议BTStack框架分析
本篇博客根据韦东山的视频,整理所得。
本篇博客讲解BTStack的框架,首先来看一下硬件的结构:
蓝牙模块接在电脑上,或是接在开发板上。不论接在哪,我们都需要编写程序来控制这个蓝牙模块。
. 我们需要发送数据给蓝牙模块
需要发送命令给蓝牙模块,比如让它发出无线信号去扫描、识别、连接、读写附近的蓝牙设备
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函数。
第06节-开源蓝牙协议BTStack框架分析的更多相关文章
- 第07节-开源蓝牙协议BTStack框架代码阅读(下)
上篇博客中已经对BTStack框架进行了较为详细的说明,本篇博客将进一步总结一下(由韦大仙笔记所得). 可以从5个方面来理解BTStack的框架: 1.硬件操作:hci_transport_t BTS ...
- 第07节-开源蓝牙协议BTStack框架代码阅读(上)
首先来看一下,对于硬件操作,它是如何来进行处理的.在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码.在BTStack中,可以搜索一下main.c,将会发现有很多ma ...
- 第08节-开源蓝牙协议栈BTStack数据处理
本篇博客根据韦东山的视频整理所得. 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的.这个main函数做了 ...
- 蓝牙协议分析(5)_BLE广播通信相关的技术分析
1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过“玩转BLE(1)_Eddystone beacon” ...
- 介绍开源的.net通信框架NetworkComms框架之二 传递类
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
- 【转】Dubbo是Alibaba开源的分布式服务框架
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...
- Dubbo阿里Alibaba开源的分布式服务框架
[获奖公布]"我的2016"主题征文活动 程序猿全指南,让[移动开发]更简单! [观点]移动原生App开发和HTML 5开发,你更看好哪个? 博客的神秘功能 D ...
- 蓝牙协议 基于TI cc2540 模块的理解(转)
源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20. ...
随机推荐
- 热情组——项目冲刺 Day2
项目相关 作业相关 具体描述 班级 班级链接 作业要求 链接地址 团队名称 热情组 作业目标 实现软件的生成,以及在福大的传播 Github链接 链接地址 SCRUM部分: 成员昵称 昨日目标 开始时 ...
- Django中render_to_response和render的区别(转载)
转载地址:https://www.douban.com/note/278152737/ 自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式,前者会 ...
- mtd-utils编译安装过程
git clone git://git.infradead.org/mtd-utils.git cd mtd-utils apt install -y libssl-dev libzlb libzst ...
- [Powershell]发布基于.NET Framework的WebAPI和Job控制台程序项目
获取要发布的定时计划任务. 禁用和停止定时计划任务. 批量强制结束Job进程. 打印定时计划任务状态. 备份项目文件夹. 发布项目文件夹. 删除部署包. 启用定时计划任务. <# .NOTES ...
- HTTP之网关的分类
网关的分类 ========================摘自<HTTP权威指南>============================= 1. HTTP/*:服务器端Web网关 请 ...
- SQL ------------- 最大与最小函数
sql max() 函数 求最大值,可以查询汉字,字母,日期,数字 注意:字母和汉字按照 a-z 依次查找,第一个最大的就是需要的 比如:有两个字母或汉字都是 ...
- CMake方式编译
[1]CMake基础 CMake是一种跨平台编译工具 CMake主要是编写CMakeLists.txt文件 通过CMake命令将CMakeLists.txt文件转化为make所需的Makefile文件 ...
- Neo4j 第八篇:投射和过滤
投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...
- EWS:邮箱的一个开放的接口服务
https://3gstudent.github.io/3gstudent.github.io/Exchange-Web-Service(EWS)%E5%BC%80%E5%8F%91%E6%8C%87 ...
- 写一个TimeUI显示的函数,上代码
public void FreshDateTime() { string strWeek = string.Empty; #region 格式化星期 switch (DateTime.Now.DayO ...