【Android论文栏目提醒】:网学会员鉴于大家对Android论文十分关注,论文会员在此为大家搜集整理了“基于ANDROID 平台的蓝牙开发 - 期刊论文”一文,供大家参考学习
Journal of Information and Electronics of Guangdong Ocean University 广东海洋大学电子信息学刊 Vol.1 No.1 December 2010 pp 174179 2010年12月第1卷 基于
Android平台的蓝牙开发陈亮1 1广东海洋大学 信息学院智能工程研究所湛江 524000 Development Of Bluetooth Based On
Android Chen Liang1 1Institute of Intelligent Engineering of Guangdong Ocean UniversityZhanjiang 524000China Abstract: Due to the rapid development of mobile communication technology and massive popularization of mobile communications terminal has promoted the development of mobile applications. This paper describes some of the basic principles of bluetooth on
Android platformand puts forward a solutions on the basis of
android bluetooth application framework. Key words: BluetoothAndroidSDP 摘 要: 由于移动通信技术的快速发展以及移动通信终端的大规模普及极大的促进了移动应用的开发。
本文描述了蓝牙的一些基本原理、并在
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 RadioBasebandL2CAPLMPRFCOMMPPPIPUDPTCPOBEXvCard/vCalendarWAPATCommandsSDPTCS-BinaryAudioHost Controller Interface选用协议核心协议电话控制协议电缆替代协议 图1蓝牙体系结构 1.3 Bluez蓝牙协议栈 上层应用Linux 内核蓝牙芯片SDP应用程序串行通信应用程序蓝牙核心协议HCI驱动RFCOMML2CAPHCIHCI_USBHCI_UARTHCI_PCI......USBUARTPCI....HCI应用程序图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.9Bluetooth协议栈采用集成在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 struct hci_uart_proto hupHCI_UART_MAX_PROTO中本项目中采用CSR芯片所以通信协议采用BCSP该协议在int bcsp_initvoid中注册。
由于CPU和Bluetooth芯片之间是串口连接所以CPU不能自动识别蓝牙设备在开启蓝牙设备时需陈亮:基于
Android平台的蓝牙开发 177 要在上层应用调用hciattach命令将连接蓝牙芯片的串口与相应的通信协议注册到BlueZ协议栈。
命令格式hciattach ttyS1 bcsp。
该命令的执行流程如下图所示 Hciattach hci_uart_tty_ioctl hci_uart_set_proto Hciattach是运行于用户空间的上层应用其作用是指定蓝牙芯片与CPU相连的串口ttyS0及其通信协议BCSP。
用户空间 内核空间 该函数响应用户空间中的应用对串口的操作设置或查询串口的通信协议。
该函数通过参数中包含的通信协议ID号HCI_UART_BCSP从数组hup中得到该协议的句柄然后将其注册到串口驱动中。
至此CUP和蓝牙芯片之间可以通过用户指定的协议BCSP通信。
图4 蓝牙通信协议加载 HCI模块的处理结构图 从图中可以看出HCI模块向上层提供命令、异步连接ACL、同步连接SCO等接口将上层的命令封装为HCI命令添加到命令队列然后通过串口驱动发送到蓝牙芯片同时监听蓝牙芯片发送过来的数据包将其组合为响应的事件、ACL或SCO数据发送给相应的上层接口。
HCI命令接口L2CAPTCSHCI命令ACLSCO缓冲组合事件ACLSCOUART driver图5 HCI模块 SDP模块 图6 SDP模块框架 SDP模块分为从功能来说分为客户端与服务器端SDP的客户端在应用程序的要求下可以从服务器端请求服务及相应的服务属性。
服务器会访问一个永久数据库可能存储于嵌入式设备的FLASH中获取与服务有关的信息并传送给客户端。
例如某服务可能归类为“打印机”那么该服务的属性可能有“彩色打印”、“双面打印”、“只打印811纸张” 178 广东海洋大学电子信息学刊Vol.1 No.1 December 2010 等。
客户端可以获取此信息并将他们存储在自己的私有数据库中与远程蓝牙的地址相关。
客户端也可以将该信息显示给用户让用户看到服务的类型及属性。
这样用户可以自行选择是继续使用该服务还是退出后选择另外一个远程蓝牙设备链接。
SDP只是提供服务查询功能并不提供服务使用功能使用查找到的功能是其它协议如RFCOMM PPP的职责。
开启和关闭蓝牙芯片 Linux上层应用通过调用hciconfig命令控制本地蓝牙设备的开启、关闭以及其他配置操作。
执行该类操作的应用属于HCI应用程序直接通过HCI接口与蓝牙芯片交互其命令格式为Hciconfig hci0 up/down执行流程如下图所示 内核空间 Hciconfig CtlsocketAF_BLUETOOTH SOCK_RAW BTPROTO_HCI hci_dev_open hci_send_cmd hci_cmd_task hci_sched_cmd hciconfig是运行于用户空间的上层应用其作用是配置、管理蓝牙芯片。
通过建立socket接口得到调用内核中响应hci命令的句柄。
该函数响应HCIDEVUP命令打开蓝牙设备。
该函数将具体的HCI命令打包然后将其追加到命令队列中。
该函数进行task调度激活cmd task。
该函数具体处理hci命令队列中的命令将其通过前期注册好的CPU与蓝牙之间的通道发送给蓝牙芯片。
用户空间 图7 蓝牙开启关闭流程 蓝牙查询匹配连接流程 查询蓝牙查询设备的个数一次最大为7个这是因为在蓝牙设备组成的微微网Pieconet中一个设备作为主节点其它的作为从节点最多可以有 7 个从节点。
陈亮:基于
Android平台的蓝牙开发 179 图8 蓝牙查询、匹配过程 匹配与查找到的蓝牙设备进行匹配首先输入蓝牙匹配码也成为蓝牙PIN码如果对方设备也输入同样的匹配码即表示匹配成功该设备便被存入手机NV中去等待下一步的连接操作如果对方设备输入的是不相同的匹配码则表示这次匹配失败不能将该设备存入到NV中去也无法进行连接操作。
所以设备匹配操作可以认为是两个设备之间一种认证匹配成功后便可以进行设备的连接。
图9 蓝牙匹配、连接过程 5 总结 由于本项目中关于蓝牙应用部分设计的内容比较多同时由于部分内容还在专利申请阶段所以在技术实现阶段只涉及了蓝牙服务加载、芯片开启关闭、以及设备的匹配查找至于蓝牙文件传输、立体声耳机等没有进行介绍。
陈亮1977-男山东人讲师工程师主要研究领域嵌入式智能控制系统