第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. ...
随机推荐
- PATB1033 旧键盘打字 (20 分)
一.技术总结 使用字符数组出现段错误即char str[];改成string str:后问题解决.以后尽量使用C++中的string 使用cin>>,出现答案错误,原因可能是在输入是有空格 ...
- [探究] $\mu$函数的性质应用
参考的神仙An_Account的blog,膜一下. 其实就是一类反演问题可以用\(\mu\)函数的性质直接爆算出来. 然后其实性质就是一个代换: \[\sum_{d|n}\mu(d)=[n=1]\] ...
- idea插件篇之java内存分析工具(JProfiler)
前言在运行java的时候有时候想测试云运行时占用内存情况,这时候就需要使用测试工具查看了.在eclipse里面有 Eclipse Memory Analyzer tool(MAT)插件可以测试,而在i ...
- vs2017远程调试
使用情景:服务器端程序出了问题,但本地开发环境又无法模拟.此时需要使用VS进行远程调试. 使用方法: 找到VS安装路径,将Remote Debuuger拷贝到服务器端 (注意一定要和你本地运行的VS版 ...
- 修改Launchpad的命令
修改Launchpad命令 1.设置Launchpad 图标的列数 defaults write com.apple.dock springboard-columns -int 10 2.设置 Lau ...
- [转载]3.12 UiPath存在元素Element Exists的介绍和使用
一.Element Exists的介绍 使您能够验证UI元素是否存在,即使它不可见,输出的是一个布尔值 二.Element Exists在UiPath中的使用 1.打开设计器,在设计库中新建一个Seq ...
- [解決方案]IIS配置后报错500.21
如果报错这个信息,那么就是aspnet未注册造成的,需要安装一下 步骤: 1.打开CMD 2.输入cd %windir%\Microsoft.Net\Framework\v4.0.30319 3.执行 ...
- python之lambda、filter、map、reduce的用法说明(基于python2)
python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...
- github 白嫖记(一)
位运算 按位操作符:0或者1之间的运算 a|b 或 任意一个为1结果为1 console.log(0 | 1) //1 console.log(1 | 0) //1 console.log(1 | 1 ...
- Reimage Isilon cluster,结果忘记了修改管理口的netmask,怎么办?
网页打不开了,正常的SSH也连不上,只能用串口,连接到节点上. 然后使用运行下面的命令来修改netmask: isi network subnets modify groupnet0.subnet0 ...