- Android Looper 和 Handler 分析
- Android MediaScanner 详尽分析
- Android 深入浅出之 Binder 机制
- 第一部分 AudioTrack 分析
- 第二部分 AudioFlinger 分析
- Android 深入浅出之 Audio 第三部分 Audio Policy
- Android 深入浅出之 Zygote
- Android 深入浅出之 Surface
- Linux Kernel 系列一 开篇和 Kernel 启动概要
- Linux Kernel 系列二 用户空间的初始化
- Linux Kernel 系列三 Kernel 编译和链接中的 linker script 语法详解
- 第五章 深入理解常见类
- linux kernel 系列四 嵌入式系统中的文件系统以及 MTD
- 随笔之 Android 平台上的进程调度探讨
- Android 4.0 External 下功能库说明
- 随笔之 Android 不吐不快
- Android Rom 移植知识普及
- 深入理解 Android 系列书籍的规划路线图
- Android 4.1 初识 - 7月12号
- Android 4.1 初识 - 7月13号
- Android 4.1 Surface 系统变化说明
- Android BSP 成长计划随笔之虚拟设备搭建和 input 系统
- 深入理解 Android 写作背后的故事
- 随笔之 GoldFish Kernel 启动过程中 arm 汇编分析
- Android Project Butter 分析
- Android Says Bonjour
- MTP in Android
- DRM in Android
- Tieto 公司 Android 多窗口解决方案展示
- 深入理解 SELinux SEAndroid 之二
- 深入理解 SELinux SEAndroid(最后部分)
- 前言
- 附录
- 第一章 准备工作
- 第二章 深入理解 Netd
- 第三章 Wi-Fi 基础知识
- 第四章 深入理解 wpa_supplicant
- 第五章 深入理解 WifiService
- 第六章 深入理解 wi-Fi Simple Configuration
- 第七章 深入理解 Wi-Fi P2P
- 第八章 深入理解 NFC
- 第九章 深入理解 GPS
- Google I/O 2014 之 Android 面面观
- 深入理解 Android 之 Java Security 第一部分
- 深入理解 Android 之 Java Security 第二部分(Final)
- 深入理解 Android 之设备加密 Device Encryption
- 第一章 阅读前的准备工作
- 第二章 深入理解 JNI
- 第三章 深入理解 init
- 第四章 深入理解 Zygote
- 第五章 深入理解常见类
- 第六章 深入理解 Binder
- 第七章 深入理解 Audio 系统
- 第八章 深入理解 Surface 系统
- 第九章 深入理解 Vold 和 Rild
- 第十章 深入理解 MediaScanner
- 第一章 开发环境部署
- 第二章 深入理解 Java Binder 和 MessageQueue
- 第三章 深入理解 SystemServer
- 第四章 深入理解 PackageManagerService
- 第五章 深入理解 PowerManagerService
- 第六章 深入理解 ActivityManagerService
- 第七章 深入理解 ContentProvider
- 第八章 深入理解 ContentService 和 AccountManagerService
- 第一章 开发环境部署
- 第二章 深入理解 Java Binder 和 MessageQueue
- 第三章 深入理解 AudioService
- 第四章 深入理解 WindowManagerService
- 第五章 深入理解 Android 输入系统
- 第六章 深入理解控件(ViewRoot)系统
- 第七章 深入理解 SystemUI
- 第八章 深入理解 Android 壁纸
- 边缘设备、系统及计算杂谈(16)——Apache 学习
- 边缘设备、系统及计算杂谈(17)——Ansible 学习
- ZFS 和 LVM
- Android 4.2 蓝牙介绍
- 了解一下 Android 10 中的 APEX
- 关于 Android 学习的三个终极问题
- 深入理解 Android 之 AOP
- Android 系统性能调优工具介绍
- 深入理解 SELinux SEAndroid(第一部分)
- Android Wi-Fi Display(Miracast)介绍
- 深入理解 Android 之 Gradle
Android 4.2 蓝牙介绍
Tieto公司某蓝牙大牛写得《程序员》投稿文章
Android 4.2蓝牙介绍
蓝牙一词源于公元十世纪丹麦国王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。这是因为这位让丹麦人引以为傲的国王酷爱吃蓝莓以至于牙龈都被染成蓝色。由于Blatand统一了丹麦和挪威,所以,作为无线通信技术的一种,蓝牙技术之所以取名Bluetooth可谓志向远大。不过,在以Android为代表的智能机出现以前,蓝牙在早期智能机甚至功能机中一直扮演着“鸡肋”的角色。那么,随着无线通信技术的快速发展以及Android的普及,蓝牙能给我们带来哪些新的变化呢?
本文将从蓝牙核心规范的发展历史、最具应用前景的几个蓝牙Profile以及Android 4.2中蓝牙实现情况等几个方面向读者介绍蓝牙技术。
一 蓝牙规范介绍
作为一种通用的无线通信技术,规范自然是蓝牙技术的核心。蓝牙规范可分为两个层次,如图1所示:
图1 蓝牙规范的层次结构
由图1可知蓝牙规范包括:
- Core Specification(核心规范),用于规定蓝牙设备必须实现的通用功能和协议层次。它由软件和硬件模块组成,两个模块之间的信息和数据通过主机控制接口(HCI)的解释才能进行传递。
- Profiles(蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles,下文将介绍几种使用最广泛的蓝牙应用规范。
1.1 蓝牙核心规范介绍
核心规范是蓝牙协议家族的基础,自蓝牙技术联盟(Bluetooth SIG,Special Interest Group)在1999年颁布蓝牙核心规范1.0版本以来,到目前为止蓝牙SIG一共发布了七个重要版本。每一个版本都促使蓝牙技术朝着更快、更安全、更省电的方向发展。表1所示为蓝牙核心规范[①]发展历史。
表1 蓝牙核心规范发展介绍
版本 | 规范发布日期 | 增强功能 |
0.7 | 1998年10月19日 | Baseband、LMP |
0.8 | 1999年1月21日 | HCI、L2CAP、RFCOMM |
0.9 | 1999年4月30日 | OBEX与IrDA的互通性 |
1.0 Draft | 1999年7月5日 | SDP、TCS |
1.0 A | 1999年7月26日 | |
1.0 B | 2000年10月1日 | 安全性,厂商设备之间连接兼容性 |
1.1 | 2001年2月22日 | IEEE 802.15.1 |
1.2 | 2003年11月5日 | 快速连接、自适应跳频、错误检测和流程控制、同步能力 |
2.0 + EDR | 2004年11月9日 | EDR传输率提升至2-3Mbps |
2.1 + EDR | 2007年7月26日 | 扩展查询响应、简易安全配对、暂停与继续加密、Sniff省电 |
3.0 + HS | 2009年4月21日 | 交替射频技术、802.11协议适配层、电源管理、取消了UMB的应用 |
4.0 +BLE | 2010年6月30日 | 低功耗物理层和链路层、AES加密、Attribute Protocol(ATT)、Generic Attribute Profile(GATT)、Security Manager(SM) |
表1中,
- EDR:全称为Enhanced Data Rate。通过提高多任务处理和多种蓝牙设备同时运行的能力,EDR使得蓝牙设备的传输速度可达3Mbps。
- HS:全称为High Speed。HS使得Bluetooth能利用WiFi作为传输方式进行数据传输,其支持的传输速度最高可达24Mbps。其核心是在802.11的基础上,通过集成802.11协议适配层,使得蓝牙协议栈可以根据任务和设备的不同,选择正确的射频。
- BLE:全称为Bluetooth Low Energy。蓝牙规范4.0最重要的一个特性就是低功耗。BLE使得蓝牙设备可通过一粒纽扣电池供电以维持续工作数年之久。很明显,BLE使得蓝牙设备在钟表、远程控制、医疗保健及运动感应器等市场具有极光明的应用场景。
虽然蓝牙4.0规范3年就发布,但目前使用最广泛的蓝牙核心规范版本还是3.0。智能手机中只有Iphone 4S,Iphone5,三星GallaxyS3、S4、Note2等少数设备支持蓝牙4.0。不过,Google已经在Android 4.3中添加了对4.0的支持。很明显,随着Android的持续推进和众多厂商的齐力支持,笔者估计在未来较短的一段时间内,蓝牙核心规范4.0将得到迅速普及。表2是经典蓝牙与低功耗蓝牙的一些区别:
表2 经典蓝牙与低功耗蓝牙的区别
技术规范 | 经典蓝牙(2.1 &3.0) | 低功耗蓝牙(4.0) |
无线电频率 | 2.4GHz | 2.4GHz |
距离 | 10米/100米 | 30米 |
数据速率 | 1-3Mbps | 1Mbps |
应用吞吐量 | 0.7-2.1Mbps | 0.2Mbps |
发送数据的总时间 | 100ms | <6ms |
耗电量 | 1 | 0.01至0.5 |
最大操作电流 | <30mA | <15mA(最高运行时为15 mA) |
主要用途 |
那么,蓝牙核心规范4.0有什么特别之处呢?蓝牙核心规范4.0的模块如图2所示:
图2 蓝牙核心规范4.0的模块
由图2可知,蓝牙核心规范4.0的模块增加了以下几个蓝牙低功耗组件。
- GATT表示服务器属性和客户端属性,描述了属性服务器中使用的服务层次,特点和属性。BLE设备使用它作为蓝牙低功耗应用规范的服务发现。
- ATT实现了属性客户端和服务器之间的点对点协议。ATT客户端给ATT服务器发送请命令。ATT服务器向ATT客户端发送回复和通知。
- SMP用于生成对等协议的加密密钥和身份密钥。SMP管理加密密钥和身份密钥的存储,它通过生成和解析设备的地址来识别蓝牙设备。
1.2 蓝牙应用规范[②]
蓝牙SIG根据不同的应用场景定义了不同的蓝牙应用规范,截止到现在,发布了40个蓝牙应用规范。本节介绍最常用的五个的蓝牙应用规范。
1.2.1 Advanced Audio Distribution Profile
Advanced Audio Distribution Profile 简称为A2DP(高质量音频分发规范)定义了如何将立体声质量的音频通过流媒体的方式从媒体源传输到接收器上。A2DP使用Asynchronous Connectionless Link(ACL,蓝牙异步传输)信道传输高质量音频内容,它依赖于Generic Audio/Video Distribution Profile(GAVDP,通用音频/视频分发规范)。A2DP必须支持低复杂度及Sub-bandCodec(SBC,低带宽编解码),可选支持MPEG1,2音频,MPEG2、4AAC。A2DP的应用场景如图4[1]所示:A2DP的应用场景如图3所示:
图3 A2DP的应用场景
由图3可知,A2DP有两种应用场景分别是播放和录音。
- 播放场景是具有蓝牙功能的播放器通过A2DP向蓝牙耳机或蓝牙立体声扬声器传送高质量音频。
- 录音场景是具有蓝牙功能的麦克风通过A2DP向蓝牙录音器传送高质量音频。
和A2DP相关的规范有Video Distribution Profile(VDP,视频分发规范),Audio/Video Remote Control Profile(AVRCP,音频/视频运程控制规范)。
1.2.2 Object Push Profile
OPP(对象推送规范)定义了推送服务器和客户端之间基于Generic Object Exchange Profile(GOEP,通用对象交换规范)进行对象交换的规范。OPP的应用场景如图4所示:
图4 OPP的应用场景
由图4可知,OPP主要用于手机与手机或者手机与电脑之间通过蓝牙进行文件操作。可交换的文件类型有电话本,备忘录,日程表等文本文件,还有视频,声音,图片,音乐等多媒体文件。
Wi-Fi Direct(WiFi直连)[③]和蓝牙OPP有相同的功能。WiFi直连是WiFi设备之间不需要无线路由器,直接进行对象交换。它的优点是传输距离长、速度快,缺点是功耗高。
1.2.3 Hands-Free Profile
HFP(HFP,免提规范)定义了蓝牙音频网关设备如何通过蓝牙免提设备拨打和接听电话。HFP的应用场景如图5所示:
图5 HFP的应用场景
由图5可知,HFP包括两个角色:
- Audio Gateway(AG,音频网关)和Hands-Free Unit(HF,免提设备)。AG是音频输入和输出的设备,典型的AG设备是手机。HF是执行音频网关的远程音频输入输出设备。
- HFP常见的场景是汽车上的车载套件,当车载套件和耳机通过蓝牙方式连接到手机时,通过无线蓝牙耳机拨打和接听电话。
和HFP相关的规范有Headset Profile(HSP,耳机规范),Phonebook Access Profile(PBAP,电话簿访问规范。
1.2.4 Heart Rate Profile
HRP(心率规范)定位与和医疗/健康相关的应用场景中,它使得蓝牙设备能与心率传感器交互。相关场景如图6所示:
图6 HRP的角色关系和应用场景
由图6可知:
- 左图是HRP定义的角色关系。HRP中有两个角色:心率感应器和收集器。心率感应器是GATT服务器,是测量心率的设备,它包含心率服务和设备信息服务,心率服务导出心率测量数据;收集器是GATT客户端,是从心率感应器接收心率测量数据和其它数据的设备。
- 右图是HRP的应用场景。心率规范用于让设备获得心率传感器的心率测量和其它数据。例如,护士或医生可以用心率传感器测量病人的心率,并把心率数据传到笔记本或手持设备上。
随着人口老龄化,医疗设备和医护人员资源不足,可以运用蓝牙健康规范实现远程医疗。笔者所在的Tieto公司在Android平台上运用心率规范开发了心率测量的原型程序,详细介绍请看视频http://www.youtube.com/watch?v=r_t-hstRgDs&feature=youtu.be。
和HRP相关的健康规范有Glucose Profile(GLP,血糖规范),Blood Pressure Profile(BLP,血压规范BLP),Health Thermometer Profile(HTP,健康体温计规范)。
1.2.5 Cycling Speed and Cadence Profile
CSCP(自行车速度和步调规范)让人们在骑自行车锻炼时跟踪速度和节奏。CSCP也基于GATT的规范。自行车速度和步调规范的角色关系和应用场景如图7所示:
图7 CSCP的角色关系和应用场景
由图7可知:
- 左图是CSCP的角色关系。CSCP定义了两个角色:自行车速度和步调感应器和收集器。CSC感应器是GATT服务器,向收集器报告车轮转速数据或轴转速数据。CSC感应器包含CSC服务和设备信息服务;收集器是GATT客户端,从CSC感应器接收自行车的速度和步调数据。
- 右图是CSCP的应用场景。传感器测量被广泛应用于运动和健身,通过传感器来监视和控制训练强调,以及在多个训练中衡量进展情况。自行车速度传感器和自行车踏频传感器是用户测量车轮速度或蹬踏节奏的设备。任何设备实现CSC规范可以与CSC传感器连接并接收数据。
和CSCP相关的规范有Running Speed and Cadence Profile(RSCS,跑步速度和步调规范)。
二 Android中的Bluetooth
Android 4.2之前,Google一直使用的是Linux官方蓝牙协议栈,即知名老牌开源项目BlueZ。BlueZ实际上是由高通公司在2001年5月基于GPL协议发布的一个开源项目,该项目仅发布一个月后就被Linux之父Linux Torvalds纳入了Linux内核,并做为Linux 2.4.6内核的官方蓝牙协议栈。随着Android设备的流行,BlueZ也得到了极大的完善和扩展。例如Android 4.1中BlueZ的版本升级为4.93,它支持蓝牙核心规范4.0,并实现了绝大部分的Profiles。
BlueZ现在正处于其巅峰时期,但好景不长。从Android 4.2即Jelly Bean开始,Google便在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ。虽然因为时间及成熟度的原因,大部分手机厂商在Android 4.2中仍继续使用BlueZ。但据笔者了解,BlueZ的创始者,高通公司也将在基于其芯片的Android参考设计中去除BlueZ,并仅支持BlueDroid。
BlueZ的未来如何笔者姑且不论。不过,能让高通改弦易辙,BlueDroid自有其合理之处。相比BlueZ,BlueDroid最值得称道的地方就是其框架结构变得更为简洁和清晰。另外,借助HAL(Hardware Abstraction Layer,硬件抽象层),BlueDroid终于不再和dbus有任何瓜葛。图8所示为Android 4.2中BlueDroid的框架结构图[④]:
图8 Android 4.2BlueDroid框架结构图
由图8可知,Android4.2中BlueDroid框架包括以下几个部分:
- 应用程序通过android.bluetooth package下的API来调用系统的Bluetooth功能。
- 应用层空间增加了一个名为Bluetooth的App。它做为系统的bluetooth核心进程而存在。其内部将通过JNI来调用Bluetooth HAL层以完成各种蓝牙请求。
- Bluetooth HAL也属于Android 4.2新增模块,它由蓝牙核心规范硬件抽象层和蓝牙应用规范硬件抽象层组成。由于HAL层的隔离作用,上层代码可轻松移植到不同芯片平台。
- 作为整个蓝牙服务的核心,Bluetooth Stack模块则由Bluetooth Application Layer(缩写为BTA)和Bluetooth Embedded System(缩写为BTE)两大部分组成。BTA实现了蓝牙设备管理、状态管理及一些应用规范。而BTE则通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。另外,BTE还包括一个统一内核接口(GKI),蓝牙芯片厂商可借助GKI快速轻松得移植蓝牙协议栈到其他操作系统或手机平台上。
- Vendor Extentions(厂商扩展):开发者可以添加自定义扩展以实现厂商特定的模块和组件。
除了BlueDroid外,在今年的Google I/O大会,谷歌公司还宣布将于与苹果、微软和黑莓等公司共同支持Bluetooth Smart Ready(BSR,蓝牙智能就绪)和Bluetooth Smart(BS,蓝牙智能)技术。这项技术使蓝牙设备或应用可以非常容易地连接全球成千上万的蓝牙设备,蓝牙使用者的生活也因此变得更加简单。BSR和BS都是建立在蓝牙核心规范4.0和GATT应用规范。即将发布的Android 4.3(MR2)支持BSR技术,使得BS的开发者可以轻易地将其设备和应用与Android BSR设备进行连接和发布。蓝牙使用者运用BS的智能应用配件(如健康监控或医疗设备)收集数据,再传送到支持BSR设备(如智能手机或平板)上。
另外,蓝牙SIG也正在研发工具Bluetooth Application Accelerator(蓝牙应用加速器)。据可靠消息,该工具将随Android 4.3发布,并将帮助开发者在Android 4.3上快速开发蓝牙应用,从而加快相关产品的研发时间。
三 总结
本文对蓝牙核心规范、蓝牙应用规范以及Android 4.2中的蓝牙协议栈BlueDroid进行了一些简单介绍。
从笔者了解的情况来看,BlueDroid虽然对BlueZ大有取而代之的趋势,但现在它对蓝牙应用规范的支持还不够完善。例如BlueDroid仅支持AVRCP 1.0,而非最新的AVRCP 1.5。所以,国内某些芯片或手机厂商若能及早完成BlueZ相关模块到BlueDroid的移植工作,相信能帮助它们在竞争日趋白日化的移动世界中拔得先机。
另外,作为一种成熟、低功耗无线通信技术的先锋,蓝牙未来在可穿戴设备领域中也将扮演越来越重要的作用。那时,蓝牙或许就会真正像“牙齿”一样成为各种设备中不可或缺的一部分了。
[①]http://zh.wikipedia.org/wiki/Bluetooth
[②]详情可参考http://developer.bluetooth.org/TechnologyOverview/Pages/Profiles.aspx
[③]关于WFD,读者可参考http://blog.csdn.net/innost/article/details/8474683
[④]http://source.android.com/devices/bluetooth.html
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论