第26卷第4期 中南民族大学学报(自然科学版) V o l .26N o.42007年12月 Journal of South 2Central U niversity fo r N ati onalities (N at .Sci .Editi on ) D ec .2007
基于蓝牙技术的L inux 系统和手机终端通讯实现
①
宋述燕,王锦程
(中南民族大学电子信息工程学院,武汉430074)
摘 要 通过对在L inux 下蓝牙B luez 协议栈的具体分析,给出了其作为蓝牙无线通讯服务端的具体实现方式.通过对基于Java 的JSR 82规范的分析,给出了其基于手机终端无线通讯的具体实现方式.将以上2种方式结合在一起,实现了手机终端和L inux 系统之间的基于蓝牙技术的无线通讯.实践证明:这种无线通讯方式成本低,有极大的应用前景.
关键词 蓝牙;手机终端;J 2M E 平台
中图分类号 T P 368.1 文献标识码 A 文章编号 167224321(2007)0420054204
I m plem en ta tion of Comm un ica tion between L i nux System
and M ob ile Term i na l Ba sed on Bluetooth Technology
S ong S huy an ,W ang J incheng
Abstract Based on the specific analysis of the L inux bluetoo th bluez p ro toco l stack ,it w as p resented as w ireless bluetoo th comm unicati ons server the app roach .Based on the analysis of the java standard JSR 82,given a realizati on w ay based on w ireless comm unicati on of mobile ter m inal
.T h rough above respective realizati on m ethod to i m p lem ent w ireless comm unicati ons based on bluetoo th betw een mobile ter m inal and L inux system s .It has been p roved that th is w ireless comm unicati on m ethod is low er coast and has a good expectati on fo r the future .Keywords bluetoo th ;phone ter m inal ;Java 2m icro editi on
Song Shuyan L ect ,Co llege of E lectronics and Info r m ati on Engineering ,SCU FN ,W uhan 430074,Ch ina
近年来,由于蓝牙设备的成本在不断降低,使
蓝牙无线技术通讯得到了迅速的发展,在当前家电系统普遍采用嵌入式操作系统(如L inux )进行智能化控制的情况下,如果使用基于手机的终端可以无线控制智能家电,将给用户带来极大的方便.本文在L inux 系统下,通过对蓝牙无线通讯技术进行分析研究,给出一个在手机终端和L inux 系统之间进行通讯的具体实现方式.
1 蓝牙协议栈
蓝牙协议规范遵循开放系统互联(O S I )模型,从低到高定义了蓝牙协议栈的各个层次,如图1所示[1].
图1 蓝牙通讯协议栈
图1中,基带层与链路管理层一起确保微微网
①
收稿日期 2007208214
作者简介 宋述燕(19762),女,讲师,硕士,研究方向:通讯网络和生物医学仪器;E 2m ail :song _shuyan @163
内各蓝牙节点之间由射频构成的物理连接;链路管理层控制链路的建立、加密、控制及功率管理等,用户可通过链路管理层对本地或远端蓝牙设备的链路情况进行设置和控制;主机控制器接口(HC I)为蓝牙芯片和设备控制计算机进行数据交换的接口,它为应用协议堆栈的高层部分提供了一个访问低层传输协议的指令接口,从而实现对硬件状态寄存器和控制寄存器的访问.逻辑链路控制和适配协议(L2CA P)作为低层协议和高层协议之间不同长度的协议数据单元的桥梁,它为上层协议提供面向连接和无连接的数据服务,并提供多协议功能和分割重组操作.服务发现协议(SD P)是一个服务数据库;是蓝牙协议体系中的核心协议,在蓝牙系统中,客户只有通过服务发现协议才能获得设备信息、服务信息及服务特征,才能在此基础上建立相互间的连接.R FCOMM是串口仿真协议,为建立在串口之上的传统串口应用而提供的接口环境[2].
2 L inux上的蓝牙接口实现
2.1 B luez协议栈
基于L inux的开放的蓝牙协议栈主要有A x is 公司的Op enB T和官方协议栈B luez等.B luez是公开的免费蓝牙协议栈,由于它结构简单,具有灵活、高效和模块化的特点,B luez已经成为L inux操作系统下的官方的蓝牙协议栈,已集成在L inux内核之中(2.4.6版本以后).B luez对蓝牙协议的所有层都提供UN I X中B erkeley Socket接口.
蓝牙协议栈B luez分为4个部分:设备驱动程序,核心协议实现部分,蓝牙应用库及工具集.其中核心协议实现部分和设备驱动程序部分在内核代码(在L inux内核中)中,在内核代码中,B luez软件包主要实现了主机控制接口和套接字接口的全部功能.其中设备驱动程序实现了如U SB,UA R T、BC M203x U SB等硬件驱动.协议实现部包括实现L2CA P、R FCOMM、BN EP等协议,它是蓝牙系统开发结构的核心,蓝牙协议栈主要负责和硬件打交道,处理蓝牙的数据包;处理服务浏览程序发来的服务发现和设备管理请求.B luez2lib s软件包主要提供函数库及应用程序接口,便于用户开发蓝牙应用程序.B luez2u tils软件包包括蓝牙设备配置和应用的工具集,实现对蓝牙设备的初始化和控制[3].
由于L inux内核部分已经支持蓝牙服务,因此只需安装B luez2lib s、B luez2u tils等几个程序包即可.安装后,一个基于L inux的蓝牙应用开发平台就已经搭建好了.用户可以充分利用B luez2lib s软件包提供的蓝牙函数库,进行蓝牙应用程序的开发. 2.2 蓝牙接口实现
为了在L inux下实现和手机终端通讯的功能,首先需要购买蓝牙适配器,一般为U SB接口的,将蓝牙适配器插入U SB口之后,使用hciconfig2a命令看到:
BD A ddress:00:02:5B:0F:20:3A A CL M TU:384:8SCO M TU:64:8
………………
其中BD A ddress为本地蓝牙的地址,和计算机的物理地址相似.L inux内核版本大于2.4.6的情况下,蓝牙服务已经安装,重新启动蓝牙服务.
再添加蓝牙通道,命令为:sdp too l add—channnel=1sp
然后编写蓝牙通讯接口,首先下载B luez2lib s2 3.软件包(蓝牙函数库)在L inux下编译为一静态库libb luetoo th.so.2.8.0,并安装,L inux 下蓝牙通讯其实和普通socket编程中建立tcp连接很相似,在这里将L inux系统作为服务端,手机终端作为客户端,代码如下:
struct sockaddr rc laddr,raddr; 蓝牙socket 地址;
………………
socketb lue=socket(A F BLU ETOO TH, SOCK STR EAM,B T PRO TO R FCOMM); 产生蓝牙套接字,地址类型为A F BLU ETOO TH;
………………
b ind(socketb lue,(struct sockaddr3) &laddr,sizeof(laddr)); 进行蓝牙本地地址绑定;
listen(socketb lue,1); 监听;
w h ile(1)
{if((phoneclien t=accep t(socketb lue, (struct sockaddr3)&raddr,&length raddr))> 0) 开始接收客户端的链接;
w h ile(1){
bytes read=recv(phoneclien t,bufrecv, sizeof(bufrecv),0); 从手机客户端接收数据;
………………… 数据处理;
bytes w rite=send(phoneclien t,(char3) bufsend,sizeof(bufsend),0); 给手机发送数据;
}
clo se(phoneclien t);}
55
第4期 宋述燕,等:基于蓝牙技术的L inux系统和手机终端通讯实现
3 手机上的蓝牙接口实现
J 2M E 是一种基于Java 编程语言和相关工具来
开发移动无线信息设备程序的平台,目前,基于智能手机终端的Java 开发平台一般也采用J 2M E ,由于
其开发速度快、周期短、支持手机多、目前已经大量商用.为了在Java 平台上开发支持蓝牙技术的软件,JCP 定义了JSR 82规范:Java 蓝牙无线技术A P Is (JABW T ),使快速开发无线蓝牙手机应用变得十分方便[4].
JSR 82定义了2个独立的可选包:核心蓝牙A P I 和对象交换(OB EX )A P I .这里主要用到蓝牙A P I .它提供了一组的高层协议和A P I 以完成发现服务和模拟串行通讯.
JSR 82提供了蓝牙协议栈基于Java 的实现,其中主要是:服务发现协议(SD P ),用来模拟串口的串
口R FCOMM ,向上层协议提供诸如分割和重组等导向性连接的数据转换操作的逻辑链路控制及适配协议(L 2CA P ).
2台蓝牙设备必须共享通用的通讯协议才能通
讯.为了应用能够访问更多的蓝牙服务,蓝牙Java A P I 提供了一个机制,它允许连接到使用
R FCOMM ,L 2CA P ,或OB EX 协议的任何服务
.一个具备蓝牙功能的应用一般作为一个服务端或是一个客户端,图2为一个典型的蓝牙客户端服务端通讯的范例
.
图2 典型的具有蓝牙功能的实际应用
基本步骤如下:
(1)所有具备蓝牙功能的应用程序首先必须初始化蓝牙设备.
(2)客户端:对远程服务端的服务进行调用.首先它要发现所有附近的设备,然后对于每一个发现
的设备搜索其服务,然后链接到服务端进行具体
操作.
(3)服务端:为客户端提供服务的服务器.它在服务发现数据库(SDDB )中添加服务,对他们进行有效广播.然后等待客户端的连接,在他们进入时接受他们的链接并为他们提供服务.最后,当不再需要服务时,应用程序会在SDDB 中将他们移除.
依据上述过程,在手机终端中实现一个蓝牙客户端应用,实现如下:
try {
V ecto r devices =new V ecto r (); 创建设备集合;
V ecto r reco rds =new V ecto r (); 创建服务集合;
L ocal D evice local D evice =L ocal D evice .
getL ocal D evice ()
获取本地的蓝牙设备对象…………………try {
discoveryA gen t .start Inqu iry (D iscoveryA gen t .G I A C ,th is ); 启动发现附近蓝牙设备搜索;
}catch (B luetoo thStateExcep ti on e ){
}
try {
linux终端下载软件w ait ();
等待,在蓝牙设备搜索完毕后调用inqu iryCom p leted ()回调方法,指出
是否请求已
经成功、触发一个错误或已被取消;}………………I D s =new in t [devices .size ()];
fo r (in t i =0;i <devices .size ();i ++){ R em o teD evice rd =(R em o teD evice )devices .elem en tA t (i ); try { I D s [i ]=
discoveryA gen t .
searchServices (nu ll ,
uu idSet ,rd ,th is );
启动对各设备的服务搜索,记录各次服务搜索的事务id ;
}……………}try {
w ait ();
等待,在所有服务都搜索完的情况下调用由serviceSearchCom p leted ()回调方法;}catch
65 中南民族大学学报(自然科学版)第26卷
………………
String u Connecti onU RL (ServiceR eco rd.NOAU TH EN T I CA T E
NO EN CR YPT,false); 得到服务端的链接U RL;
Stream Connecti on connecti on= (Stream Connecti on)Connecto r.open(u rl); 链接到服务端
Inp u tStream is=connecti on. open Inp u tStream();
O u tp u tStream o s=connecti on. openO u tpu tStream();
o s.w rite(m sg); 给蓝牙服务端发送数据m sg;
connecti on.clo se(); 关闭链接;
…………………………}
4 结语
通过以上的讨论,提出了利用B luez协议和JSR82规范开发蓝牙无线应用的实现方式.实验证明,通过以上的实现方法,可以很好地实现手机终端和L inux系统无线消息相互发送,实现二者之间的无线交互,在此基础之上,可以开发出很多实际的应用,如可以通过手机终端控制智能家电,工业现场的远程控制系统等[5].因此,蓝牙无线通讯技术有着极大的发展应用前景.目前,以上介绍的方法已成功应用于家庭网络中的家庭网关机顶盒项目的开发和设计中.
参 考 文 献
[1] Kamm er D.蓝牙应用开发指南——近程互连解决方案
[M].李 静,译.北京:科学出版社,2003:322145. [2] 马建仓,罗亚军,赵玉亭.蓝牙核心技术及应用[M].
北京:科学出版社,2003:1242134.
[3] 欧阳鑫,于红岩,吕 杨.蓝牙协议栈B luez的移植与
开发[J].微计算机信息,2007,23(22):2212222.
[4] 林靖誉,刘建生,刘传菊.蓝牙和Java技术在嵌入式系
统中的应用分析[J].福建电脑,2007,2(3):15217. [5] 傅剑虹,汪 敏,朱 俊.基于蓝牙技术家庭网络的研
究和实现[J].计算机工程,2004,30(3):1252127.
75
第4期 宋述燕,等:基于蓝牙技术的L inux系统和手机终端通讯实现
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论