Android Bluetooth 分析(精)

来源:互联网 发布:手机淘宝聊天记录恢复 编辑:程序博客网 时间:2024/06/08 15:41

bluetooth是一种短距离无线通讯传输接口,允许的传输距离长度设计为10米到100米,当含有bluetooth的手机或计算机等 在多个含bluetooth装置的环境中,设备尚未加入蓝牙微网时,它会先进入待机状态。在此状态下,它会随时监听传呼讯息,直到收到的信号与自己本身的识别码有相关时,自己才会激活bluetooth服务称为Master时,开始寻找外围所有bluetooth装置称为Slave,并且呼叫连结程序。接下来则进行识别码的确认及信号时间的同步,以便决定往后跳频之Sequence,而将这些装置连成一个群体,称为微网Piconet。可由bluetooth形成一个微网的方式来分享资料,可提供7-8个主动服务者ActiveSlave Device以及255个等待服务者Standby Slave Device。为了维持信息的传送,微网内的其中一个装置为此微网的主控装置,而其它装置则为从属装置。在微网内的任何一个装置都可以成为主控装置,但在任何时间中微网内只有一个主控装置。bluetooth提供点对点或点对多的连结方式,各个bluetooth装置连结建立都由Master来主控,在一个区域内,同时可以加入多个微网,这种多个微网架构所组成称为叠网Scatternet。

基本通讯硬件的机制能够作点对点的传输,所以网络通讯能提供便利的、高层次的应用接口软件。这软件大部分处理低层次的通讯项目及自动化的程序。可较容易应用到通讯上,大部分的应用程序依靠网络软件联机。当传送资料时,在复杂的通讯上必须取得一致的规格,此规格称为协议Protocol。以上已经提过了一些bluetooth相关的协议,在这里为协议作详细的说明: 

  a.在物理层Physical上为LMP Link manager Protocol协议,主控不同组件间的联机控制、组件的连结状态,传输封包的加解密和身分认证等。 


  b.Host Control Interface用来界定bluetooth与Host设备之间连结接口的控制指令。 

  c.L2CAP Logicall Link Control and AdapteationProtocol协议,负责对上层不同应用的软件接口网络连结功能,而对应于不同的应用程序,此所谓多任务。另外也提供Multiplexing、Quality Of Service服务品质 、封包切割Segmentation与整合Reassembly的等服务功能,将上层传下来的信息包整理成64K字节。 

  d.RFCOMM RF Communication协议,提供串行联机的功能,类似RS232控制信号与资料收发的信号。 

  e.TCS Telephony Control Service 协议,其中是二元化 TCS BIN,负责电话联机信号的建立控制CallControl、移动漫游管理 Mobility Management。另外为AT指令ATCommand,此用来让手机 或计算机等 经由bluetooth连上的硬件接口来上网,此时也提供传真的指令。 

  f.SDP Service Discovery Protocol 协议,其中包含服务的纪录,主要记录服务特性和身份认证。另外是描述有关服务发现后所要作的事情,主要建立一个通话联机,所使用通话协议。 

  g.Profiles API层则分别对Audio、Data、Control等提供了不同的模块。目前已规范有四大类、十三种协议规格。

  h.applicantion则是依据语音、数据、控制等应用需求,提供应用软件所需的通讯协议功能与应用程序接口。


一、Android Bluetooth现状

(1)Android2.2版 支持的蓝牙核心版本是Bluetooth 2.0 +EDR。

(2)Android 的蓝牙 使用了BlueZ协议栈,但只实现了Handset/Handfree和A2DP/AVRCP等Profile。

(一些常用的Profile(如HID/DUN/SPP/OPP/FTP/PAN等)在现在的Android2.2版中并没有实现。需要自己在Android中实现Profile)。

(3)目前版本(Android2.2) 只支持 绑定设备(bonded devices)之间通信,而不支持ad-hoc网络通信。

(4)目前版本(Android2.2) emulator(仿真器、模拟器)不支持蓝牙的调试,只能通过LOG和BlueZ带的工具来调试。

(5)Android2.0 API level5 之后的版本才支持Bluetooth。

(6)Android 的Bluetooth通信API是BlueZ 的RFCOMM的封装。

RfcommSocket 在 API level7 之后的版本才提供Bluetooth 的通信RfcommSocket 使用Java 的IputStream 和OutputStream对象

二、Android Bluetooth 架构

1、面向库的架构视图

2、面向进程的架构视图

LinuxKernel层:

bluez协议栈、uart驱动, h4协议, hci,l2cap, sco, rfcomm

Library层:

libbluedroid.so 等

Framework层:

实现了Headset /Handsfree 和 A2DP/AVRCP profile,但其实现方式不同Handset/Handfree是直接 在bluez的RFCOMM Socket上开发的,没有利用bluez的audioPlugin,而A2DP/AVRCP是在bluez的audio plugin基础上开发的,大大降低了实现的难度。

三、 BlueZ介绍

(详见http://www.bluez.org/):

BlueZ 是linux OS开放的bluetooth 协议栈主要包括ibm公司的BlueDrekar, Nokia公司的Affix, Axis公司的OpenBT和官方的协议栈BlueZ.

Bluetooth协议栈BlueZ分为两部分:内核代码和用户态程序及工具集。

内核代码:由BlueZ核心协议和驱动程序组 成;Bluetooth协议实

现在内核源代码 /net/bluetooth中。包括hci,l2cap,hid,rfcomm,sco,SDP,BNEP等协议的实现。驱动程

序放在 /driver/bluetooth中,包含Linux kernel对各种接口的Bluetooth device的驱动。例如:USB接口,串口等。

用户态程序及工具集:包括应用程序接口和BlueZ工具集。BlueZ提供函数库以及应用程序接口,便于程序员开发bluetooth应用程序。BlueZ utils是主要工具集,实现对bluetooth设备的初始化和控制。

四、几个术语:

四种是基本的Profile,这些Profile会被其它的Profile使用
1. GAP Profile: Generic Access Profile
该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接。一般访问应用规范定义了蓝牙设备如何发现和建立与其他设备的安全(或不安全)连接。它处理一些一般模式的业务(如询问、命名和搜索)和一些安全性问 题(如担保),同时还处理一些有关连接的业务(如链路建立、信道和连接建立)。GAP规定的是一些一般性的运行任务。因此,它具有强制性,并作为所有其它 蓝牙应用规范的基础。
2. SDAP Profile: Service Discovery Application Profile
通过该Profile,一个Bluetooth设备可以找到其它Bluetooth设备提供的服务,以及查询相关的信息。提供应用程序在蓝牙环境中发现哪个服务可用和决定那些可用服务的特征。
3. SPP Profile: Serial Port Profile
模拟串口通讯
 4. GOEP Profile: Generic Object Exchange Profile
通用对象交换。这个Profile的名字有些费解,它定义的是数据的传输,包括同步,文件传输,或者推送其它的数据。你可以把它理解为内容无关的传输层协议,可以被任何应用用来传输自己定义的数据对象。
其它几种profile:
CTP Profile: Cordless Telephone Profile
无绳电话。
IP Profile: Intercom Profile
这是在两个设备之间建立语音连接,换句话说,把两个昂贵的兰牙设备变成廉价的对讲机。

HS Profile: HeadSet Profile

用于连接耳机。用于支持蓝牙耳机与移动电话之间使用.描述了 Bluetooth 耳机如何与计算机或其它 Bluetooth 设备(如手机)通信。连接和配置好后,耳机可以作为远程设备的音频输入和输出接口。这是最常用的配置,为当前流行支持蓝牙耳机与移动电话使用。 它依赖于在64千比特编码的音频/ s的CVSD的或PCM以及AT命令从GSM 07.07的一个子集,包括环的能力最小的控制,接听来电,挂断以及音量调整。描述了Bluetooth 耳机如何与计算机或其它 Bluetooth 设备(如手机)通信。连接和配置好后,耳机可以作为远程设备的音频输入和输出接口。HSP详细技术文档地址:6_headset.pdf

DNP Profile: Dial-up Networking Profile

用于为PC提供拨号网络功能。

FP Profile: Fax Profile

传真功能。

LAP Profile: LAN Access Profile

使用PPP协议建立局域网。

OPP Profile: Object Push Profile

用于设备之间传输数据对象。
FTP Profile: File Transfer Profile

用于文件传输。
SP Profile: Synchronization Profile

用于不同的Bluetooth设备同步,保持数据的一致性。

HFP(Hands-free Profile)耳机模式:

让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持。

支持HFP的蓝牙耳机指耳机具有免提功能,用户可以在耳机上操作手机设定好的重拨、来电保留、来电拒听等免提选项功能。

HFP技术详细文档:HFP_1.5_SPEC_V10.pdf


HID() 人机接口设备配置文件

HID 配置文件定义了 Bluetooth HID(如键盘、指向设备、游戏设备及远程监视设备)使用的协议、程序及功能

拨号网络配置文件 (DUN)

DUN 提供了通过 Bluetooth 无线技术接入 Internet 和其它拨号服务的标准。最常见的情况是在手机上拨号,从膝上型计算机以无线方式接入 Internet。

个人局域网配置文件 (PAN)

PAN 描述了两个或更多个 Bluetooth 设备如何构成一个即时网络,以及如何使用同一机制通过网络接入点接入远程网络。配置文件角色包括网络接入点、组即时网络及个人局域网用户。



A2DP

Advanced Audio Distribution Profile 蓝牙音频传输模型协定

A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。有A2DP的耳机就是蓝牙立体声耳机。声音能达到44.1kHz(CD音质:16bits 44.1kHz),一般的耳机只能达到8kHz(Handsfree profile:8bits 8kHz)。A2DP详细技术文档下载地址:A2DP_SPEC_V12.pdf


AVRCP

Audio/Video Remote Control Profile 音频/视频远程控制配置文件

AVRCP 设计用于提供控制TV、Hi-Fi设备等的标准接口。此配置文件用于许可单个远程控制设备(或其它设备)控制所有用户可以接入的A/V设备。它可以与 A2DP 或 VDP 配合使用。

  AVRCP 定义了如何控制流媒体的特征。包括暂停、停止、启动重放、音量控制及其它类型的远程控制操作。AVRCP 定义了两个角色,即控制器和目标设备。控制器通常为远程控制设备,而目标设备为特征可以更改的设备。在 AVRCP 中,控制器将检测到的用户操作翻译为 A/V 控制信号,然后再将其传输至远程 Bluetooth 设备。对于“随身听”类型的媒体播放器,控制设备可以是允许跳过音轨的耳机,而目标设备则是实际的播放器。常规红外遥控器的可用功能可以在此协议中实现。

  AVRCP 协议规定了AV/C 数字接口命令集(AV/C 命令集,由1394 行业协会定义)的应用范围,实现了简化实施和易操作性。此协议为控制消息采用了AV/C 设备模式和命令格式,这些消息可以通过音频/视频控制传输协议 (AVCTP) 传输。AVRCP协议详细文档地址:Bluetooth AVRCP Spezifikation V1.4


OPP

Object push profile  对象推送协议

蓝牙在OBEX基础上的一个专属协议,它用于资源在设备间的共享传输。比如用户可以从一个蓝牙手机上将音乐PUSH到另外一个手机上。

OPP协议详细地址:OPP_SPEC_V12r00.pdf










原创粉丝点击