1.引言
随着人民生活水平的不断提高,个人拥有汽车变得越来越普遍。但是,随之而来的车辆频繁被盗问题渐受关注。传统的汽车安防系统以全球卫星定位系统(以下简称GPS)为核心,这种技术最大的优势是可以定位被盗车辆所处的位置,可以远程控制车辆,但是无法获取图像声音信息不能了解车辆所处的环境,无法有效追捕犯罪嫌疑人。还有一些系统使用GPRS实时传输图像数据,这种方案受网络带宽的限制严重,图像质量差,对处理器运算能力要求高,系统使用费用高。
针对上述问题,我们提出并设计了一种基于多媒体信息服务(MultimediaMessageService,以下简称MMS)——也就是人们常说的“彩信”汽车安防系统。该系统利用了中国移动的MMS业务、短消息业务,无线网络覆盖面大,使用费用低廉,操控方法简单。图1所示为基于MMS的汽车安防系统的应用框图,用户在远程通过短信控制本系统,系统通过在车辆内适当部位安装的摄像头、麦克风获得高质量的图像语音信息,制作成MMS,通过我们专门针对低成本嵌入式系统研发的MMS发送程序将MMS发送到用户的终端,从而使用户能更清晰地掌握车辆内外的状况。
2.系统结构
我们使用了如图2所示的硬件框架,本系统以S3C44B0处理器为核心:辅以2MNORFlash存储引导程序、内核、ROM文件系统;16MNANDFlash承载YAFF文件系统,以弥补NORFlash空间不足无法容纳PPPD、系统应用程序、无法保存系统配置信息的缺陷;16MSDRAM运行代码、动态数据交换、RAM文件系统;UART0连接CWT2000GPRS模块,用于收发与用户交互的短信,发送MMS到用户指定的终端;UART1连接C328JPEG摄像头可以直接获取JPEG格式的高分辨率图像数据。
本系统的软件基于uCLinux操作系统内核版本2.4.32,图3展示的是本系统的软件结构框图。图3中,内核空间的MTD、UART驱动、TCP/IP、PPP等在编译内核时必须选择支持,PPPD/Chat拨号程序用于通过GPRS模块登陆互连网。上述软件结构框图中部分模块在uCLinux分发版中包含,因此本系统需要实现JPEG采集、MMS制作、MMS发送、短信收发以及系统控制流程模块。接下来的章节将介绍各模块的实现技术。
3.软件设计
本节将重点介绍图3中的系统控制流程、JPEG采集、MMS制作以及MMS发送模块。由于短信收发模块过于简单,且在许多资料中都有详细介绍,本文不再赘述。
3.1系统控制流程
系统控制流程模块负责对其它模块进行调用,对所有资源进行协调,实现系统设计的工作流程,满足良好的交互性、稳定性。
首先,系统需要初始化,如获取用户终端(手机)号码,MMS发送过程所需的MMS网关、端口、MMS中心地址,这些信息都保存在系统配置文件中,另外还需要初始化一些相关的数据结构。初始化之后系统进入到一个超级循环当中,随时准备接收来自用户终端的命令短信息。目前,命令短信息有两个,其中最重要的是“Get”命令,用以获取MMS信息;还有一个“Set”命令用以设置用户终端号码,该命令由于流程图的尺寸问题在图4中省略了。收到“Get”命令之后,系统依次调用JPEG采集模块、MMS制作模块、GPRS拨号、MMS发送模块。这些模块的调用,除了MMS制作模块,都遵循一个基本原则,我们称之为三次尝试原则。如果某模块调用不成功,将重复三次,三次都失败,将发送错误报告短信到用户终端。比较特殊的是GPRS拨号,在3次拨号失败后将对GPRS模块进行复位,再尝试拨号。该原则符合无线通讯自身的特殊性,可以有效提高程序的效率和稳定性。另外有一点需要注意,在GPRS状态下是无法发送短信的,因此,拨号登陆成功之后需要断开GPRS连接才能发送短信。这也是为什么无论MMS发送是否成功,都必须先断开GPRS,再发送报错或成功报告短信的原因。
3.2JPEG图像采集
JPEG图像采集模块通过串口控制C328JPEG摄像头直接获取JPEG图像,这种选择大大降低了处理器的负担。关于该摄像头的硬件信息见参考文献[1]。该软件模块大部分为顺序过程,后面的过程都建立在前一个过程正确执行的基础上。总体上可以分为三个步骤:初始化S3C44B0串口、初始化摄像头、获取图像,详细过程如下:
1.初始化S3C44B0串口,包括:O_RDWR|O_NOCTTY|O_NDELAY方式打开UART1也就是“/dev/ttS1”[2],设置波特率57600,8位数据位,1位停止位,无奇偶校验,读写超时设置为1秒,初始化jpeg_picture结构体:
structjpeg_picture
{
intfd;//串口的文件描述符
unsignedcharresolution;//图像分辨率代码
longjpeglength;//图像长度24位表示
unsignedchar*pjpeg;//图像存储地址
};
1JPEG摄像头,包括:发送SYNC命令与摄像头建立连接,,发送Initial命令设置输出JPEG格式图像、分辨率640X480,发送SetPackageSize命令设置数据包的大小为512字节。
2获取图像,包括:发送Snapshot命令捕获图像快照并压缩,发送GetPicture命令获取Snapshot类型图像,接收Data命令确认数据类型为Snapshot以及图像数据大小,并为图像分配对应空间,之后开始接收数据包,每收到一个数据包后发送带有数据包ID的ACK命令给摄像头,直到最后一个数据包ID为F0F0,数据接收过程结束。
通讯协议采用一种如图4的应答方式,ACK代表上一个命令或操作成功,NACK则说明失败,确保了通讯稳定。C328定义的命令是统一的6个字节长度,起始为固定的0xAA,然后是命令字节,后4个字节是与命令相关的参数字节。
3.3MMS制作
MMS可以包含静态图像、语音、动态图像等多种多媒体信息[34]。图5左侧为一个通用MMS结构,由MMS信息头、MMS信息体构成。MMS信息头包含如何从发送终端将数据发往接收终端的信息[5]。MMS信息体是MMS的实质内容,可以由多个部分多种类型媒体。本系统中目前仅有JPEG的图像数据,不需要支持所有格式的多媒体信息,因此可以实现针对多幅JPEG图像的简化版MMS制作模块。我们使用了最简化的MMS信息头,包括:消息类型、事务ID、版本号、From、To等,详情见表1。
MMS编码必须遵循无线会话协议(WirelessSessionProtocol,以下简称WSP)。WSP使用一种与HTTP/1.1相同的语法描述数据的组织结构,具体可参考RFC[2068]。HTTP/1.1使用ASCII字符编码来传输数据,而WSP为降低传输带宽,将HTTP/1.1中的一些著名域对应的字符串定义为一个字节,并在对这些紧凑格式编码时加上0x80,使著名域的编码大于127(扩展ASCII字符),从而将它们与普通ASCII字符区别开。因此MMS信息头的基本编码格式为:“域编码”+“内容”,详情请参考表1。编码顺序如下:消息类型、事务ID、版本号必须依次排在最前面,而MMS信息体内容类型则应该排在MMS信息头的最后。
①用字符串表示一个随机数。②国内格式为:长度+“+86”+“11位手机号”+“/TYPE=PLMN.”
紧跟在MMS信息头之后的就是MMS信息体,图5中所示这部分有:成员数量、成员(图像、文本、声音等)。成员数量是一个变长整形数。MMS信息体的成员由:成员信息头、成员数据构成。我们的系统中仅有JPEG图像,所以成员信息头可以编码为:0x01,YYYY(JPEG图像大小,变长整数),0x9E。最后将JPEG图像附在成员信息头之后即可完成MMS制作。注意,由于图像的存储空间为动态分配,之后要将所占内存释放。
3.4MMS发送
最后,系统使用了项目组针对嵌入式系统开发的MMS发送简化过程来发送彩信。该简化过程分为三个步骤:建立连接、发送数据、断开连接[6],如图6所示为发送数据简化过程的时序图。建立连接和断开连接的时序图与此类似,不在这里给出。在该简化过程的实现中,使用了一种直接构造PDU进行发送的实现方法。协议数据单元(ProtocolDataUnit,以下简称PDU)为MMS发送时各层所要增加的数据头,而这些数据头很多部分都固定。因此,通过直接发送PDU的方法,可以避免构造完整无线应用协议栈(WAP),摆脱对多线程的依赖,以及无关操作所需的存储消耗,实现单线程、高效、高速、稳定的MMS发送。
MMS发送的网络协议栈关系的简化过程仅仅需要嵌入式系统提供UDP支持,能连接到GPRS网络,即可发送MMS到终端。
4.结论与展望
本系统目前已经通过了长沙、深圳、北京、上海等地的测试。项目充分利用了GPRS网络覆盖广泛,通讯质量稳定的特点,提出了一个简单方便的、稳定的、易于扩展的基于MMS的安防系统框架,为提取犯罪嫌疑人的犯罪证据提供了一种新手段。该框架有较广泛的应用范围,可以为相关行业提供参考。
本文作者创新点:结合了短消息操作简单、彩信直观的特点,在低成本ARM7平台实现了基于彩信的安防系统;在系统中使用一种直接PDU构造方法实现了一个简化版的彩信发送过程,该过程实现简单,适合嵌入式系统。