【Android论文栏目提醒】:本文主要为网学会员提供“基于Android 平台的蓝牙开发 - 研究报告”,希望对需要基于Android 平台的蓝牙开发 - 研究报告网友有所帮助,学习一下!
Journal of Information and Electronics of Guangdong Ocean University 广东海洋大学电子信息学刊Vol.1 No.1 December 2010 pp 174-179 2010 年 12 月第 1 卷 基于
Android 平台的蓝牙开发 陈亮 1 1 广东海洋大学 信息学院智能工程研究所,湛江 524000 Development Of Bluetooth Based On
Android Chen Liang1 1 Institute of Intelligent Engineering of Guangdong Ocean UniversityZhanjiang 524000ChinaAbstract: Due to the rapid development of mobile communication technology and massive popularization ofmobile communications terminal has promoted the development of mobile applications. This paper describes someof the basic principles of bluetooth on
Android platformand puts forward a solutions on the basis of androidbluetooth application framework.Key words: Bluetooth;
Android;SDP摘 要: 由于移动通信技术的快速发展,以及移动通信终端的大规模普及,极大的促进了移动应用的开发。
本文描述了蓝牙的一些基本原理、并在
Android 平台蓝牙应用框架的基础上,提出了开发蓝牙应用的一种方案。
关键词: 蓝牙;
Android;服务发现协议1 引言1.1
Android简介
Android 一词的本义指“机器人”,同时也是 Google 于 2007 年 11 月 5 日宣布的基于 Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
1.2 蓝牙技术及其体系结构 蓝牙(Bluetooth)技术是由 Ericsson、IBM、Intel、Nokia 和 Toshiba 公司于 1998 年 5 月共同提出开发的,并联合成立了蓝牙特殊利益小组SIG,负责开发无线协议规范并设定交互操作的需求。
其本质是设备间的无线链接,意在于代替有线电缆。
它是由底层硬件模块,中间层和高端应用层三大部分组成(如图 1)。
在蓝牙协议栈中,最主要的是蓝牙核心协议,包括基带协议BP、链路管理协议LMP、链接控制和适配协议L2CAP、服务发现协议SDP等。
蓝牙设备基本上都需要核心协议,其他协议则按蓝牙设备的需要而选定。
陈亮:基于
Android 平台的蓝牙开发 175 vCard/ 选用协 议: 电缆替代协 议: vCalendar AT WAP Commands OBEX 核心协议 : 电话 控制协议: TCP UDP IP TCS-Binary SDP PPP Audio RFCOMM L2CAP Host Controller Interface LMP Baseband Radio 图 1 蓝牙体系结构1.3 Bluez蓝牙协议栈 上层 应用 HCI应用程序 SDP应用程 序 串行通 信应用程序 Linux 内核 蓝牙 核心协议 RFCOMM L2CAP HCI HCI驱动 HCI_USB HCI_UART HCI_PCI ...... USB UART PCI .... 蓝牙芯片 图 2 Bluez 蓝牙协议栈2 项目背景
Android 1.0 版本操作系统暂时无法支持蓝牙无线传输功能。
对于这一情况,Google 公司发表声明表示,目前
Android 1.0 版本操作系统在蓝牙应用编程接口 API 上依然存在一些问题,因为蓝牙无线功能暂时无法使用,不过包括蓝牙耳机在内的蓝牙接口设备则可以正常使用。
由于没有加入对蓝牙功能的全面支持,第三方软件开发者目前也将无法对
Android 手机进行蓝牙功能的开发,这使得
Android 手机无形当中缺少了一大亮点,不过 Google 方面同时也表示,将会在未来加入对蓝牙无线功能的全面支持。
从
Android 平台的 Bluetooth 代码结构和之前在 Qtopia 平台上开发蓝牙应用的结构上来看,它们之间有很大的类似之处,都采用了当前最成熟的开源蓝牙协议栈 Bluez 作为蓝牙协议栈。
CW790 项目采用 Intel PXA270 平台,蓝牙芯片采用 CSR BC4,操作系统采用 Linux 2.6.9,Bluetooth 协议栈采用集成在 kernel 中的 BlueZ 协议栈,主要实现了 Bluetooth 核心协议,通过 UART 接口 BCSP 协议与 176 广东海洋大学电子信息学刊 Vol.1 No.1 December 2010蓝牙芯片通信。
Bluetooth 上层应用是运行于 Linux 上的
Android 中的一个应用,主要实现了操作界面和Bluetooth 上层协议。
3
Android蓝牙框架
Android 的 Bluetooth 部分包含取蓝牙的一些基本设置以及设备匹配连接功能。
目前
Android 发布版的Bluetooth 程序虽然功能比较简单,和其它应用一样,其程序的架构分成客户端和服务器两个部分,它们建立在
Android 的进程间通讯 Binder 的结构上。
图 3
Android 蓝牙框架4 技术实现 CPU与蓝牙芯片通信协议的选择和加载。
在 Linux 2.6.9 内核中,BlueZ 协议栈通过 HCI 接口与蓝牙芯片通信,蓝牙芯片与 CPU 的连接方式有 USB、UART、PCI 等,在本项目中,我们采用 UART 接口。
内核启动时,UART 接口各种协议(H4、BCSP、3WIRE、H4DS)的各种驱动程序注册在数组 static structhci_uart_proto hupHCI_UART_MAX_PROTO中,本项目中采用 CSR 芯片,所以通信协议采用 BCSP,该协议在 int bcsp_initvoid中注册。
由于 CPU 和 Bluetooth 芯片之间是串口连接,所以 CPU 不能自动识别蓝牙设备,在开启蓝牙设备时,需陈亮:基于
Android 平台的蓝牙开发 177要在上层应用调用 hciattach 命令,将连接蓝牙芯片的串口与相应的通信协议注册到 BlueZ 协议栈。
命令格式:hciattach ttyS1 bcsp。
该命令的执行流程如下图所示: Hciattach 是运行于用户空间的 Hciattach 上层应用,其作用是指定蓝牙 芯 片 与 CPU 相 连 的 串 口 ( ttyS0 ) 及 其 通 信 协 议 (BCSP) 。
用户空间 内核空间 该函数响应用户空间中的应用 hci_uart_tty_ioctl 对串口的操作,设置或查询串 口的通信协议。
该函数通过参数中包含的通信 hci_uart_set_proto 协 议 ID 号 (HCI_UART_BCSP)从数组 hup 中得到该协议的句柄,然 后将其注册到串口驱动中。
至 此,CUP 和蓝牙芯片之间可以 通过用户指定的协议(BCSP) 通信。
图 4 蓝牙通信协议加载 HCI模块的处理结构图: 从图中可以看出,HCI 模块向上层提供命令、异步连接(ACL)、同步连接(SCO)等接口,将上层的命令封装为 HCI 命令添加到命令队列,然后通过串口驱动发送到蓝牙芯片;同时监听蓝牙芯片发送过来的数据包,将其组合为响应的事件、ACL 或 SCO 数据发送给相应的上层接口。
HCI命 令 接 口 L2CAP TCS HCI 命令 ACL SCO 事件 ACL SCO 缓冲 组合 UART driver 图 5 HCI 模块 SDP模块 SDP 模块分为从功能来说分为客户端与服务器端,SDP的客户端在应用程序的要求下,可以从服务器端请求服务及相应的服务属性。
服务器会访问一个永久数据库可能存储于嵌入式设备的 FLASH 中,获取与服务有关的信息并传送给客户端。
例如,某服务可能归类为“打印机”,那么该服务的属性可能有“彩色打印” “双面打印” “只打印 811 纸张” 、 、 图 6 SDP 模块框架 178 广东海洋大学电子信息学刊 Vol.1 No.1 December 2010等。
客户端可以获取此信息并将他们存储在自己的私有数据库中,与远程蓝牙的地址相关。
客户端也可以将该信息显示给用户,让用户看到服务的类型及属性。
这样,用户可以自行选择是继续使用该服务还是退出后选择另外一个远程蓝牙设备链接。
SDP 只是提供服务查询功能,并不提供服务使用功能,使用查找到的功能是其它协议如 RFCOMM PPP的职责。
开启和关闭蓝牙芯片Linux 上层应用通过调用 hciconfig 命令控制本地蓝牙设备的开启、关闭以及其他配置操作。
执行该类操作的应用属于 HCI 应用程序,直接通过 HCI 接口与蓝牙芯片交互,其命令格式为 Hciconfig hci0 up/down,执行流程如下图所示: hciconfig 是运行于用户空间的 Hciconfig 上层应用,其作用是配置、管 理蓝牙芯片。
通过建立 socket 接口得到调用 CtlsocketAF_BLUETOOTH 内核中响应 hci 命令的句柄。
SOCK_RAW BTPROTO_HCI 用户空间 内核空间 该函数响应 HCIDEVUP 命令 hci_dev_open 打开蓝牙设备。
该函数将具体的 HCI 命令打 hci_send_cmd 包,然后将其追加到命令队列 中。
该函数进行 task 调度,激活 hci_sched_cmd cmd task。
该函数具体处理 hci 命令队列 hci_cmd_task 中的命令,将其通过前期注册 好的 CPU 与蓝牙之间的通道 发送给蓝牙芯片。
图 7 蓝牙开启关闭流程 蓝牙查询,匹配,连接流程: 查询:蓝牙查询设备的个数一次最大为 7 个,这是因为在蓝牙设备组成的微微网Pieconet中,一个设备作为主节点,其它的作为从节点,最多可以有 7 个从节点。
陈亮:基于
Android 平台的蓝牙开发 179 图 8 蓝牙查询、匹配过程 匹配:与查找到的蓝牙设备进行匹配,首先输入蓝牙匹配码也成为蓝牙 PIN 码,如果对方设备也输入同样的匹配码即表示匹配成功,该设备便被存入手机 NV 中去等待下一步的连接操作;如果对方设备输入的是不相同的匹配码,则表示这次匹配失败,不能将该设备存入到 NV 中去,也无法进行连接操作。
所以设备匹配操作可以认为是两个设备之间一种认证,匹配成功后便可以进行设备的连接。
图 9 蓝牙匹配、连接过程5 总结 由于本项目中关于蓝牙应用部分设计的内容比较多,同时由于部分内容还在专利申请阶段,所以在技术实现阶段只涉及了蓝牙服务加载、芯片开启关闭、以及设备的匹配查找,至于蓝牙文件传输、立体声耳机等没有进行介绍。
陈亮(1977-)男,山东人, 讲师,工程师,主要研究领 域嵌入式智能控制系统