APP下载

基于蓝牙技术的手机与机顶盒互联的设计与实现

2013-09-20国加磊苗方柴剑平宋金宝

关键词:机顶盒内核嵌入式

国加磊,苗方,柴剑平,宋金宝

(1.中广电广播电影电视设计研究院,北京100045;2.中国传媒大学信息工程学院,北京100024)

1 引言

智能化的家居生活,数字化、网络化的娱乐是数字家庭多媒体的发展方向。目前,手机、机顶盒等信息设备是家庭中常见的多媒体终端,各有优势和局限性。手机侧重于即时通信和便携易用,但受限于小屏幕;机顶盒是理想的家庭媒体娱乐平台,但目前因网络、接口等条件所限,交互功能有所欠缺。现有条件下,任一种网络终端都很难实际完全取代另一种网络终端。因此终端之间的互联互通是促成融合的一种有效方式,有助于利用结合点开发新的业态。

本文介绍的基于蓝牙技术的手机与机顶盒互联,正是解决上述问题的一种有效方式。

2 系统设计的技术原理

本设计旨在运用蓝牙技术实现手机与机顶盒之间的互联互通,而目前二者的发展日新月异,手机操作系统和机顶盒嵌入式系统种类繁多,在选择它们互联的实现方案时,必须考虑其通用性。因此,本设计采用通用性强的蓝牙无线通信技术,在手机端使用J2ME体系,在机顶盒端使用Linux嵌入式平台,进行程序设计开发。

2.1 蓝牙技术

蓝牙是一种可以在短距离内实现多种数字设备之间的无线数据通信的技术,能够简化设备间通信,可提供较高的数据传输速率,现已被人们广泛使用。手机与机顶盒各自特点不同,其互联互通受到的设备性能、家庭环境特点等因素的制约,选择蓝牙技术作为它们之间的通信方式能够有效解决这些问题。

蓝牙技术拥有层次明确、分工严谨的协议栈,其设计的主要原则是:尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合,以及各种应用之间的互通性,充分利用兼容蓝牙技术规范的软硬件系统[1]。蓝牙协议栈结构如图所示:

图1 蓝牙协议栈结构图

蓝牙标准的高层可选协议中有专门用于传输电话簿等小型文件对象的OBEX协议。但是由于经过多层的封装和开销,使用OBEX在传输较大的多媒体文件如图片、音频文件时速度较慢。而RFCOMM协议提供了基于L2CAP协议的串口仿真,附加了对9针RS-232(EIATIA-232-E)串口仿真的规定,是一个简单传输协议[2]。在开发过程中,本设计分别尝试使用OBEX协议和直接在RFCOMM协议层测试文件传输,实验结论表明前者速率通常只有几十kbps,而后者传输文件的速率可以达到800~900kbps左右。因此本设计方案将底层的设备发现、服务搜索等,由蓝牙协议栈提供的标准接口实现;而将上层的应用如指令控制、文件传输等机顶盒与手机之间的通信,建立在RFCOMM层的端到端连接上。RFCOMM层之上采用自定义的通信协议和数据封装格式,以达到灵活高效和轻量级的封装。

2.2 Java及其J2ME体系

在手机端开发的程序,本设计运用了Java的J2ME体系。

Java,是Java计算机程序设计语言和Java平台的总称。Java平台由Java虚拟机和Java API组成,向Java应用程序提供了独立于操作系统的标准接口,大大提高了Java的可移植性。

Java中的J2ME体系,专为小型设备、独立设备、互联移动设备、嵌入式设备程序开发而设计,应用程序根据该规范只需编写一次,就可以用于多种设备,其基本体系结构如图2所示:

图2 J2ME的基本体系结构

如图2所示,在最底层的是主机操作系统,任何程序必须在某个操作系统平台下面才能运行。在配置层中,本设计选用CLDC(互联受限设备配置)开发程序,它主要为微型设备或者嵌入式设备而设计[3]。但是,只有CLDC的基础API是难以开发手机程序的,而且手机属于互联受限设备中的移动信息设备,所以需要在简表层选用MIDP(Mobile Information Device Profile,移动信息设备描述)。最后,本设计使用手机的蓝牙功能,需要选用可选包(Optional Packages)JSR 82,使用其中定义的与手机蓝牙通信相关的 API[4]。

2.3 Linux与BlueZ

由于各种机顶盒平台缺乏相对统一的开发接口并存在开放性的限制,本课题选择更具有代表性的基于嵌入式Linux系统的机顶盒。Linux的官方蓝牙协议栈使用了BlueZ,这也是目前应用最广泛的协议栈,几乎支持所有已通过认证的蓝牙设备。

BlueZ由多个独立的模块组成,内核空间主要包括设备驱动层、蓝牙核心及 HCI层、L2CAP与SCO 音频层、RFCOMM、BNEP、CMTP与 HIDP层、通用蓝牙SDP库和后台服务及面向所有层的标准套接字接口;在用户空间提供了蓝牙配置、测试及协议分析等工具。用户空间的应用程序通过API调用BlueZ下层模块,进而通过USB等接口实现HCI层访问底层硬件,即蓝牙适配器。利用BlueZ HCI层的API,可以实现开启、关闭蓝牙设备,搜索周边蓝牙设备等功能。

3 系统的开发与实现

本设计以实现手机与机顶盒的互联互通为目的,其系统组成的关系如图3所示:

图3 系统组成关系图

如图3所示,系统包括手机模块和机顶盒模块两部分,它们互联互通,为用户提供更多功能体验。系统功能包含了机顶盒与手机之间的设备发现、服务搜索、指令控制、文件共享,并使用以上功能实现典型应用:手机遥控机顶盒,手机和机顶盒之间文件共享。系统的开发和实现将分别从手机端和机顶盒端的程序设计两方面介绍。

3.1 手机端程序设计

为开发支持蓝牙技术的手机程序,JCP(Java Community Process)制定了JSR 82标准,即Java蓝牙无线技术API。该标准包括javax.bluetooth和javax.obex两个包,前者定义了基于串口通信的API。本设计在J2ME体系中运用javax.bluetooth包,实现了手机端相关程序设计。

通过蓝牙在手机端实现服务器功能的设计主要包含六部分内容。首先通过LocalDevice类的getLocalDevice方法获取本地蓝牙设备管理器,实现蓝牙设备通信的基本初始化。其次,生成用于串口通信的连接字符串,该字符串指定了在通信过程中本地蓝牙设备使用RFCOMM层协议,标明了其在通信中服务器的身份、服务UUID、服务名称以及相关安全参数。第三,利用连接字符串给连接通知者(Notifier)赋值,该连接通知者只在接收到远程设备请求时才返回与该远程设备的连接,否则一直等待。第四,设置本地蓝牙设备的服务记录属性,供客户端搜索并获取。接着,通过连接通知者继续等待远程设备的连接。最后,通过连接对象创建输入/输出流,来实现服务端和客户端的通信,直到通信结束[4]。

通过蓝牙在手机端实现客户端功能的设计主要包含四部分内容。首先,获取本地蓝牙设备管理器,完成相关初始化工作。其次,设置该管理器处于搜索模式,实例化搜索代理,开始搜索远程设备和服务,并记录搜索结果。第三,获取连接字符串,建立与远程设备的连接。最后,与服务器端相同,创建输入/输出流以实现通信,直到通信结束。

另外,在本设计中还需要考虑到通信时数据格式的问题,因为J2ME体系和C语言两个平台的数据结构等细节规定不尽相同,这给二者通信造成了一定困难,尤其在手机遥控机顶盒的功能上,发送用于控制的字符时,需要在程序设计中做相应的转码,机顶盒才可以正确识别。

手机端蓝牙程序通过以上设计,调用相关API以开启蓝牙,搜索周边可用设备,选中其中指定目标设备即发起RFCOMM层连接,实现了遥控机顶盒、与机顶盒共享文件的功能。

3.2 机顶盒端程序设计

本设计中的机顶盒端程序,是在Linux官方协议栈BlueZ的支持下完成的。在Ubuntu 8.10系统平台上,开发过程中首先基于ARM9内核的嵌入式开发板进行开发调试,然后移植到基于同为ARM926内核的海思Hi3110的机顶盒平台进行开发调试。机顶盒通过USB接口外接蓝牙适配器以支持蓝牙的硬件功能。

要在机顶盒平台上正确使用蓝牙功能需要重新编译系统内核以及蓝牙适配器的驱动模块,编译BlueZ库及蓝牙工具集,制作文件系统,从而能正确识别和使用USB蓝牙适配器,并使用BlueZ提供的编程接口进行开发。在编译Linux内核时,进入“Bluetooth subsystem support”子选项,将所列全部编译项目选中。然后进入“Bluetooth device drivers”,除“HCI BCM203x USB driver”和“HCI BPA10x USB driver”之外,选中其它所有编译项目。完成上述操作后,进行内核编译,生成支持蓝牙模块的内核镜像文件。下一步,交叉编译bluez-lib-2.25和bluez-lib-3.36,在lib子目录下生成相关库文件,并将其加入到嵌入式系统的文件系统当中,与添加了蓝牙支持的Linux内核一起,对蓝牙设备提供全面的服务。

在机顶盒内完成配置蓝牙设备的基础上,蓝牙通信程序利用BlueZ提供的编程接口就可以实现与手机的互联功能。蓝牙协议栈的底层硬件协议在适配器的硬件中已经实现;软件层面上的蓝牙开发就要从HCI层之上的各协议层开始。蓝牙功能的开和关、搜索周边设备的功能由BlueZ的HCI层API直接提供。BlueZ提供了Socket编程接口,通过一个类似TCP/IP套接字的接口封装了对L2CAP和RFCOMM的操作。本设计应用层的各功能模块,如指令控制、文件传输等,均在RFCOMM层实现。创建一个Socket,其中第一个参数domain必须是:PF_BLUETOOTH,即指明采用蓝牙协议族的结构定义。Protocol参数为BTPROTO_RFCOMM,即指定使用的协议层。

RFCOMM层以端口(Port)区分不同的连接,可用的Port只有32个,需要在使用时动态分配。被连接方先向系统注册一个服务,分配到端口号,连接时将该端口号通过SDP协议通告连接发起方。使用蓝牙MAC地址和端口号可以在RFCOMM层标识一个Socket连接。类似套接字在IP网络的编程开发方式,服务器端使用bind,listen等API绑定、监听该套接字;客户端用connectAPI发起连接。建立连接后双方使用read,write或send,recv等API发送接收数据。

本设计针对指令控制和文件传输制订了相应的通信协议。当机顶盒收到标识为控制信息的字符串数据时进行字符串解析,判断进行换台键、方向键或其它操作,并将键值消息发送给机顶盒DVB软件系统,实现遥控器的功能。传输文件时使用了单独的线程,使用不同于指令控制的端口,这样在传输文件的同时不影响遥控操作。接收文件线程在收到要求传输的文件大小和文件名后在指定路径创建该文件并开始接收,如创建失败则向手机返回出错代码。

通过上述功能设计,机顶盒端蓝牙应用程序实现了典型应用:开启蓝牙并搜索周边可被发现的设备,开启服务器端线程等待手机客户端的接入。根据接收的指令内容响应相应的操作,开启文件传输线程以接收传输的文件。

4 结论

经实验和测试,本设计已实现手机与机顶盒之间的跨平台无线互联:手机遥控机顶盒,二者之间彼此发现、连接、传输数据。

本设计基于不同技术原理,在实践中不断摸索和改进程序,最终基于蓝牙技术设计实现了手机与机顶盒之间的互联互通,这为数字家电向网络化、智能化发展提供了一种新方式。

[1]刘书生,赵海.蓝牙技术应用[M].沈阳:东北大学出版社,2001.6-9.

[2]张禄林,雷春娟,郎晓虹.蓝牙协议及其实现[M].北京:人民邮电出版社,2001.138-139.

[3]郭克华.JavaME移动开发实例精讲[M].北京:清华大学出版社,2010.1-4.

[4]汪永松.J2ME手机高级编程[M].北京:机械工业出版社,2009.66-73.

猜你喜欢

机顶盒内核嵌入式
多内核操作系统综述①
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
机顶盒上别盖布
安全使用机顶盒注意五点
机顶盒上别盖布
微软发布新Edge浏览器预览版下载换装Chrome内核
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究