2019独角兽企业重金招聘Python工程师标准>>>

Android蓝牙系统分为四个层次,内核层、BlueZ库、BlueTooth的适配库、BlueTooth的JNI部分、Java框架层、应用层。下面先来分析Android的蓝牙协议栈。
Android的蓝牙协议栈采用BlueZ来实现,BlueZ分为两部分:内核代码和用户态程序及工具集。
内核代码主要由BlueZ核心协议和驱动程序组成;蓝牙协议实现在内核源代码net/bluetooth中,驱动程序位于内核源代码目录driver/bluetooth中。用户态程序及工具集主要包括应用程序接口和BlueZ工具集,位于Android源代码目录externel/bluetooth(注:Android版本不一样,有的在externel/bluez目录下)中。
1、蓝牙协议栈
蓝牙协议栈的体系结构由底层硬件模块、中间协议层和高端应用层三部分组成。
一、底层硬件模块
组成:
链路管理协议(Link ManagerProtocol,LMP);
基带(Base Band,BB);
射频(Radio Frequency,RF)。
功能:
射频(RF)通过2.4GHz的ISM频段实现数据流的过滤和传输。
基带(BB)提供两种不同的物理链路,即同步面向连接链路(Synchronous Connection Oriented,SCO)和异步无连接链路(AsynchronousConnection Less,ACL),负责跳频和蓝牙数据,及信息帧的传输,且对所有类型的数据包提供不同层次的前向纠错码(Frequency Error Correction,FEC)或循环冗余度差错校验(CyclicRedundancy Check,CRC)。
链路管理协议(LMP)负责两个或多个设备链路的建立和拆除,及链路的安全和控制,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的访问入口。
主机控制器接口(HostController Interface,HCI)是蓝牙协议中软硬件之间的接口,提供了一个调用下层BB、LMP、状态和控制寄存器等硬件的统一命令,上下两个模块接口之间的消息和数据的传递必须通过HCI的解释才能进行。
二、中间协议层
组成:
逻辑链路控制和适配协议(LogicalLink Control and Adaptation Protocol,L2CAP);
服务发现协议(ServiceDiscovery Protocol,SDP);
串口仿真协议(或称线缆替换协议RFCOMM);
二进制电话控制协议(TelephonyControlprotocol Spectocol,TCS)。
功能:
L2CAP位于基带(BB)之上,向上层提供面向连接的和无连接的数据服务,它主要完成数据的拆装、服务质量控制、协议的复用、分组的分割和重组,及组提取等功能。
SDP是一个基于客户/服务器结构的协议,它工作在L2CAP层之上,为上层应用程序提供一种机制来发现可用的服务及其属性,服务的属性包括服务的类型及该服务所需的机制或协议信息。
RFCOMM是一个仿真有线链路的无线数据仿真协议,符合ETSI标准的TS07.10串口仿真协议,它在蓝牙基带上仿真RS-232的控制和数据信号,为原先使用串行连接的上层业务提供传送能力。
TCS定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。
三、高端应用层
组成:
点对点协议(Point-to-PointProtocol,PPP);
传输控制协议/网络层协议(TCP/IP);
用户数据包协议(UserDatagram Protocol,UDP);
对象交换协议(ObjectExchang Protocol,OBEX);
无线应用协议(WirelessApplication Protocol,WAP);
无线应用环境(WirelessApplication Environment,WAE);
功能:
PPP定义了串行点对点链路应当如何传输因特网协议数据,主要用于LAN接入、拨号网络及传真等应用规范。
TCP/IP、UDP定义了因特网与网络相关的通信及其他类型计算机设备和外围设备之间的通信。
OBEX支持设备间的数据交换,采用客户/服务器模式提供与HTTP(超文本传输协议)相同的基本功能。可用于交换的电子商务卡、个人日程表、消息和便条等格式。
WAP用于在数字蜂窝电话和其他小型无线设备上实现因特网业务,支持移动电话浏览网页、收取电子邮件和其他基于因特网的协议。
WAE提供用于WAP电话和个人数字助理(PersonalDigital Assistant,PDA)所需的各种应用软件。
2、Android与蓝牙协议栈的关系
蓝牙系统的核心是BlueZ,因此JNI和上层都围绕跟BlueZ的沟通进行。JNI和Android应用层,跟BlueZ沟通的主要手段是D-BUS,这是一套被广泛采用的IPC通信机制,跟Android框架使用的Binder类似。BlueZ以D-BUS为基础,给其他部分提供主要接口。

转载于:https://my.oschina.net/u/994235/blog/112934

Android底层开发之旅—蓝牙系统分析相关推荐

  1. linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...

    内容简介 本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核.移植和驱动开发的整个流程.全书分为21章,依次讲解驱动移植的必要性, Goldfish.OMAP内核和驱动解析,显示 ...

  2. Android直播开发之旅(3):AAC编码格式分析与MP4文件封装(MediaCodec+MediaMuxer)

    Android直播开发之旅(3):AAC编码格式分析与MP4文件封装(MediaCodec+MediaMuxer) (码字不易,转载请声明出处:http://blog.csdn.net/andrexp ...

  3. (转载)Android游戏开发之旅一 长按Button原理

    (转载)http://www.android123.com.cn/androidkaifa/538.html 作者: Android开发网原创 时间: 2010-06-22 今天Android123开 ...

  4. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  5. Android直播开发之旅(25):使用AES算法加密多媒体文件(+RSA+MD5+Base64)

    文章目录 1. AES算法 1.1 AES加密过程 1.1.1 字节代替(SubBytes) 1.1.2 行移位(ShiftRows) 1.1.3 列混合(MixColumns) 1.1.4 加轮密钥 ...

  6. Android直播开发之旅(17):使用FFmpeg提取MP4中的H264和AAC

    最近在开发中遇到了一个问题,即无法提取到MP4中H264流的关键帧进行处理,且保存到本地的AAC音频也无法正常播放.经过调试分析发现,这是由于解封装MP4得到的H264和AAC是ES流,它们缺失解码时 ...

  7. Android底层开发学习笔记 第一天

    今天,开始学习Android底层的开发.(注:我是新手小白,纯粹学习笔记,大神们可以直接略过了) 第一部分 编译运行我的第一个Android system. 准备工作: 下载源码:包括u-boot源码 ...

  8. Android 底层开发概述(二)

    1. android底层开发 涉及到的知识范围和主要工作内容如下: 1. 知识集中在Linux kernel和驱动: 2. 工作主要是移植.bug fix: 3. 挑战性工作有:性能优化.功耗优化等. ...

  9. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调

    Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...

最新文章

  1. 【搜索专题】BFS中的多源BFS-双端队列BFS
  2. 谈谈近况,谈谈自由职业,谈谈金饭碗
  3. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化
  4. android语言 选择题,Android N以编程方式更改语言
  5. C语言 找数码是否存在
  6. .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
  7. seaborn绘图后得到分布参数
  8. ExtJS4.2 menu鼠标移开隐藏
  9. Arcgis for android 100.4 getFieldType ()
  10. 一种语音控制PPT翻页系统的制作方法
  11. 省选专练[USACO18JAN]Stamp Painting
  12. php--------使用js生成二维码
  13. 防止监听scroll 事件影响页面性能
  14. 使用post访问不到接口_Postman调试依赖登录接口的3种方法
  15. Matlab 蒙特卡洛求解三门问题
  16. [ZT]完全用Linux工作,摈弃Windows
  17. Locality-Aware NMS 局部感知NMS(LNMS)学习
  18. 【通知】4月18日22:00至4月19日2:00网站服务暂停公告
  19. 框架表示法表示台式计算机,框架表示法,frame representation,音标,读音,翻译,英文例句,英语词典...
  20. mysql查姓名中既有a也有e的姓_mysql查询初级练习题(已更完)

热门文章

  1. 简洁送货单打印软件的使用意义
  2. 一套代码小程序WebNative运行的探索01
  3. Vue的自定义滚动,我用el-scrollbar
  4. 学习笔记-安装ELK5
  5. 6条适用于PHP初学者的学习线路和建议
  6. Centos下Yum安装PHP5.5,5.6
  7. SpringMVC和Dubbo的整合
  8. Ubuntu 12.10 安装 jdk-7u10-linux-x64.tar.gz
  9. 从FTP上下载文件到本地
  10. 比特币黄金(BTG)遭受51%双花攻击?——不亏