bluez 遇到了一个bug,其实我一直没有理解bluez的架构
现在写,bluez的所有的东西。
就当官网那么少的资料的 说明文档好了。
参考文献
http://blog.csdn.net/gatieme/article/details/49358471
http://blog.chinaunix.net/uid-21411227-id-2780269.html
蓝牙协议的初步构架。
架构图
蓝牙协议在整个体系所处的位置,蓝牙协议可分为底层协议,中间层协议。和高层协议,三大类。
底层协议包括无线调频(RF)、基带(BB)、和链路管理(LM)
RF层
通过2.4GHz无需授权的ISM频段的微波,实现数据位流的过滤和传输,本协议主要定义了蓝牙收发其在次频带正常工作所需要满足的条件。
基带
负责调频一级蓝牙数据和信息帧的传输。
链路管理
负责连接、建立和拆除链路并进行安全控制。 LM (Link Manager) 层是蓝牙协议栈的链路管理层协议, 他负责将上层HCI 命令翻译成基 带能接受的操作, 建立ACL (数据) 和SCO (语音) 链接, 以及使蓝牙设备进入节能状态的工 作模式等。 LC (Link Control) 层负责在一批数据包传送期间, 响应上层LM 命令(如执行建立数据包的 传输链路, 维持链路等功能的LM 命令)。 HCI 位于蓝牙系统的L2CAP(逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间 的一层协议。HCI为上层协议提供了进入LM的统一接口和进入基带的统一方式。 蓝牙的SIG规定了四种与硬件连接的物理总线方式:USB、RS232、UART和PC卡
蓝牙底层协议
蓝牙底层协议实现蓝牙信息数据流的传输链路,是蓝牙协议体系的基础,它包括射频协议(无线跳频RF)、基带协议(BB)和链路管理协议(LM).
两种链路类型: 面向连接的同步链路(SCO), 面向无连接的异步链路(ACL)。
蓝牙中间层协议
蓝牙中间层协议完成数据帧的分解与重组、服务质量控制、组提取等功能,为上层应用提供服务,并提供与底层协议的接口,此部分包括主机控制器接口协议、逻辑链路控制与适配协议、串口仿真协议、电话控制协议和服务发现协议.
主机控制器接口协议(Host Controller Interface Protocol,HCI)
蓝牙HCI是位于蓝牙系统的逻辑链路控制与适配协议层和链路管理协议层之间的一层协议.HCI为上层协议提供了进入链路管理器的统一接口和进入基带的统一方式.在HCI的主机和HCI主机控制器之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式.蓝牙的SIG规定了四种与硬件连接的物理总线方式,即四种HCI传输层:USB、RS232、UART和PC卡
HCI协议提供了统一访问蓝牙控制器的能力。 主机控制器以HCI命令的形式提供了访问蓝牙硬 件的基带控制器、链路管理器、硬件状态寄存 器、控制寄存器以及事件寄存器的能力,所有 这些功能都要通过内置于蓝牙硬件内部的HCI Firmware来实现。
逻辑链路控制与适配协议(Logical Link Control and AdaptationProtocol,L2CAP)
逻辑链路控制与适配层协议(L2CAP)是蓝牙系统中的核心协议,它是基带的高层协议,可以认为它与链路管理协议(LMP)并行工作.L2CAP为高层提供数据服务,允许高层和应用层协议收发大小为64 KB的L2CAP数据包.L2CAP只支持基带面向无连接的异步传输(ACE),不支持面向连接的同步传输(sco).L2CAP采用了多路技术、分割和重组技术、组提取技术,主要提供协议复用、分段和重组、认证服务质量、组管理等功能
组管理:蓝牙的基带协议支持微微网,即一组设备使用同一时钟同步跳频,L2CAP协议的组提取功能可以有 效地将协议的组映射为基带的微微网,以避免高层协议为了有效的管理组而必须与基带协议以及链路管理器直 接联系。
串口仿真协议(RFCOMM)
串口仿真协议在蓝牙协议栈中位于L2CAP协议层和应用层协议层之间,基于ETSI标准TS 07.10,在L2CAP协议层之上实现了仿真9针RS232串口的功能,可实现设备间的串行通信,从而对现有使用串行线接口的应用提供了支持.
电话控制协议(Telephony Control Protocol Spectocol,TCS)
电话控制协议位于蓝牙协议栈的L2CAP层之上,包括电话控制规范二进制(TCS BIN)协议和一套电话控制命令(AT Commands).其中,TCS BIN定义了在蓝牙设备间建立话音和数据呼叫所需的呼叫控制信令;AT Commands则是一套可在多使用模式下用于控制移动电话和调制解调器的命令,它SIG在ITU.TQ.931的基础上开发而成.TCS层不仅支持电话功能(包括呼叫控制和分组管理),同样可以用来建立数据
呼叫,呼叫的内容在L2CAP上以标准数据包形式运载.
服务发现协议(Service Discovery Protocol,SDP)
服务发现协议(SDP)是蓝牙技术框架中至关重要的一层,它是所有应用模型的基础.任何一个蓝牙应用模型的实现都是利用某些服务的结果.在蓝牙无线通信系统中,建立在蓝牙链路上的任何两个或多个设备随时都有可能开始通信,仅仅是静态设置是不够的.蓝牙服务发现协议就确定了这些业务位置的动态方式,可
以动态地查询到设备信息和服务类型,从而建立起一条对应所需要服务的通信信道.
蓝牙高层协议
蓝牙高层协议包括对象交换协议、无线应用协议和音频协议.
对象交换协议(Object Exchange Protocol,OBEX)
OBEX是由红外数据协会(IrDA)制定用于红外数据链路上数据对象交换的会话层协议.蓝牙SIG采纳了该协议,使得原来基于红外链路的OBEX应用有可能方便地移植到蓝牙上或在两者之间进行切换.OBEX是一种高效的二进制协议,采用简单和自发的方式来交换对象.它提供的功能类似于帅协议,在假定传输层可靠的基础上,采用客户机.服务器模式.它只定义传输对象,而不指定特定的传输数据类型,可以是从文件到商业电子贺卡、从命令到数据库等任何类型,从而具有很好的平台独立性.
无线应用协议(Wireless Application Protocol,WAP)
无线应用协议(WAP)由无线应用协议论坛制定,是由移动电话类的设备使用的无线网络定义的协议.WAP融合了各种广域无线网络技术,其目的是将互联网内容和电话债券的业务传送到数字蜂窝电话和其他无线终端上.选用WAP可以充分利用为无线应用环境开发的高层应用软件.
bluez 遇到了一个bug,其实我一直没有理解bluez的架构的更多相关文章
- Tomcat一个BUG造成CLOSE_WAIT
之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...
- MySQL关于exists的一个bug
今天碰到一个很奇怪的问题,关于exists的, 第一个语句如下: SELECT ) FROM APPLY t WHERE EXISTS ( SELECT r.APPLY_ID FROM RECORD ...
- 由一个bug引发的SQLite缓存一致性探索
问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表.后面才发现这个是SQLite在实现过程中的一个bug,而这个bug ...
- Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?
Win10左下角菜单打不开,好痛苦,点击右下角的时间也没反应,各种不爽,折磨了我好几天,重装又不忍心,实在费劲,一堆开发环境要安装,上网找了很多方法都不适用.今天偶然解决了,仔细想了下,难道是Win1 ...
- 你可能不知道的 NaN 以及 underscore 1.8.3 _.isNaN 的一个 BUG
这篇文章并不在我的 underscore 源码解读计划中,直到 @pod4g 同学回复了我的 issue(详见 https://github.com/hanzichi/underscore-analy ...
- 标准模板库(STL)的一个 bug
今天敲代码的时候遇到 STL 的一个 bug,与 C++ 的类中的 const 成员变量有关.什么,明明提供了默认的构造函数和复制构造函数,竟然还要类提供赋值运算符重载.怎么会这样? 测试代码 Tes ...
- 是uibutton跟tableviewcell同步使用一个bug
这个问题是uibutton跟tableviewcell同步使用一个bug,不关delay一点毛事,证据就是点击事件没问题,so,搜到一个方法解决了这个问题.uibutton分类symbian2+ios ...
- 在chrome下-webkit-box布局的一个bug
chrome,也就是webkit内核下作的检测, chrome版本是40, -webkit-box这种布局在移动端用的比较多,主要是因为pc端的浏览器内核参差不齐. 因为在写HTML的时候看上了-we ...
- 关于MySQL count(distinct) 逻辑的一个bug【转】
本文来自:http://dinglin.iteye.com/blog/1976026#comments 背景 客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用cou ...
- 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...
随机推荐
- K8S 部署 Deepseek 要 3 天?别逗了!Ollama+GPU Operator 1 小时搞定
最近一年我都在依赖大模型辅助工作,比如 DeepSeek.豆包.Qwen等等.线上大模型确实方便,敲几个字就能生成文案.写代码.做表格,极大提高了效率.但对于企业来说:公司内部数据敏感.使用外部大模型 ...
- 最详细最易懂的【YOLOX原理篇】
目录 前言 简介 详细解读 Mosaic and Mixup Mixup Mosaic Decoupled Head anchor free SimOTA in_boxes 和 in_center 计 ...
- 亚马逊aws_access_key_id和aws_secret_access_key利用
00X01 信息泄露 敏感信息泄露,例如环境变量.例如,为了配置AWS CLI,需要设置以下环境变量: $ export AWS_ACCESS_KEY_ID=AKISIOSFODNN7EXAMPLE ...
- Mybatis 框架课程第二天
目录 3 基于代理Dao实现CRUD操作 3.1 根据id查询 3.1.1 在持久层接口中添加findById方法 3.1.2 在用户的映射配置文件中配置 3.1.3 在测试类添加测试 3.2 保存操 ...
- JSP (二) -- JSP与HTML集成开发
目录 脚本 普通脚本 声明脚本 输出脚本 JSP注释 语法规则 JSP指令 page指令 include指令 taglib指令 动作标签 include useBean setProperty get ...
- Java System.arraycopy实现数组拷贝
在看ArrayList源码的时候发现用到了System.arraycopy方法. line 544 private void fastRemove(int index) { modCount++; i ...
- 从写代码到写Prompt,解锁鸿蒙原生应用高效开发秘籍
当前,大模型技术正在重新定义软件工程.一方面,大模型降低了软件开发门槛.在过去,软件开发者被划分为全民开发者.应用开发者和专业开发者,随着大模型技术的介入,软件开发变得触手可及,一些简单的应用甚至能够 ...
- iNeuOS工业互联网操作系统,集成DeepSeek大模型应用
目 录 1. 前言... 2 2. 模型和智能体配置... 3 3. 数据查询模型分析应用... 4 4. 数据报表模型分析应用... 6 5. 大 ...
- HarmonyOS Next实战教程:实现中间凹陷的异形tabbar
今天要和大家分享的实战案例是实现中间凹陷的tabar 前些天在做墨迹天气的时候看到了这种异形的tabbar,看起来比较有挑战性,因为鸿蒙版的墨迹天气app还没有这个东西,我决定尝试做一下. 系统的Ta ...
- vue3 基础-插件 plugin 案例演示
前篇有介绍关于插件 plugin 的无敌强大和基本使用流程后, 当时从俺的经验上看是没咋去使用它的, 即英雄无用武之地. 本篇也是从网上找个案例来为 plugin 的强大来小试牛刀啦. 假设我们要做一 ...