基于3G网络的汽车防盗报警系统视频监控设计
引言
随着第三代移动通信网络的成熟发展,基于移动通信网络的视频监控技术的应用越来越广泛。本文基于3G网络覆盖率高、可靠性强、传输速率快的优势,设计实现汽车防盗报警系统的可视监控。本设计在现有的电子式汽车防盗报警器的基础上,通过扩展通用接口,实现了对于车体原有报警系统的功能扩展,其总体结构框图如图1所示。本文着重阐述该系统视频监控部分的设计实现。
本系统视频监控部分是在InterPXA270为核心的硬件平台上,通过构建嵌入式WindowsCE操作系统的软件开发实现上层应用。该设计以流接口方式开发摄像头驱动,并利用摄像头驱动提供的接口,实现嵌入式WindowsCE下实时图像的数据采集,对原始图像进行MPEG-4格式的编码压缩,同时在WindowsCE端利用SOCKET编程,实现监控数据的传输。
1 硬件平台
现有的汽车防盗报警系统的结构如图1虚线框内所示,本文着重设计实现的是此系统的视频监控部分。视频监控部分的硬件包括三个部分,采集监控数据的摄像头、多媒体处理器和通信模块。硬件搭建结构图如图2所示。视频监控部分的硬件平台是以InterXScale微体系结构的InterPXA270处理芯片为核心,选用SIM5218模块作为3G通信模块,采用双端口RAM技术实现视频处理和图1系统的总体结构框图3G通信模块的双CPU之间通信。其中,InterPXA270芯片的主频为520Hz,同时加入WirelssMMX技术,大大提高了多媒体处理能力。此外PXA270的InterSpeedStep动态电源管理技术,在保证CPU性能的情况下降低了设备的功耗;西门子公司的3G通信模块SIM5218支持高达7.2Mb/s的数据传输率,并且提供UART、USB2.0、GPIO和I2C等丰富的外围接口,降低了设计难度;本设计中摄像头选择了网眼2000,它采用OV511芯片为核心,具有COMS35万像素的清晰度,并采用USB方式通信,可以采用流接口的方式实时采集监控数据。
2 软件功能
基于WindowsCE操作系统的软件架构包括两部分。
利用PlatformBuilder定制WindowsCE系统并开发USB摄像头驱动和数据发送端的开发,本文详细介绍USB摄像头驱动的设计和发送端的程序设计。系统的软件结构图如图3所示。
WindowsCE流接口驱动程序是具有定制接口的驱动程序,表现为在用户一级的动态链接库DLL,是一般类型的设备驱动程序。流接口驱动程序中用来实现一组固定的函数称为流接口函数,这些流接口函数使得应用程序可以通过文件系统访问这些驱动程序。流接口驱动程序几乎支持任何类型的可以连接到基于WindowsCE.net的平台外部设备,其中包括USB设备。
流接口驱动程序的主要任务是把外设的使用传递给应用程序,这是通过把设备表示为文件系统的一个特殊文件实现。应用程序通过文件系统的API函数调用流接口函数,然后流接口驱动程序调用本机驱动或者通过设备管理器与系统内核或外围打交道。
2.1 摄像头驱动程序的流接口函数的实现
开发摄像头驱动程序涉及到一组标准的流接口驱动程序的函数,如CAM_Init()、CAM_Deinit()、CAM_Open()、CAM_Read()等,这些函数是接口驱动程序的DLL接口,其中CAM_Init()、CAM_Open()、CAM_Read()和CAM_IOControl()最为重要。下面对这些重要函数进行详细介绍。
(1)CAM_Init()
CAM_Init()函数是通过设备管理器提供的ActiveDeviceEx()函数调用。在设备初始化时通过ActiveDeviceEx()将设备句柄信息写入Drivers\Active下面,当应用程序初始化时,注册表的地址将以Context参数形式传给CAM_Init(),利用RegOpenKeyEx()、RegQueryValueEx()等函数执行打开和读写注册表操作,等执行成功后返回USB设备的句柄信息等。驱动程序的部分源代码:
(2)CAM_Open()
在对设备进行读操作之前,首先要先通过执行CeratFile()来调用CAM_Open()打开设备,CAM_Open()所需的第一个参数是应用程序初始化时由CAM_Init()返回的设备句柄等信息,然后将设备关闭的事件设为无信号状态。
下面是部分源码:
程序中涉及的EnterCriticalSection()和LeaveCriticalSection()两个函数的作用是保证在临界区内所有被访问的资源不被其他线程访问,直到当前线程执行完临界区代码。EnterCriticalSection()和LeaveCriticalSection()分别表示为进入临界区和退出临界区。
(3)CAM_IOControl()
程序设计中通过CreatFile()函数调CAM_Open()打开摄像头设备,通过ReadFile()将返回值传给CAM_IOControl()流接口函数,而CAM_IOControl()则调用OV51xReadOneFrame()对USB设备数据进行读取。下面是部分源码:
对于USB总线上的数据传输,一共有四种传输类型,分别是控制传输、中断传输、批量传输和实时传输,这四种传输类型分别应用到不同的USB设备。其中实时传输适用于以固定速率或特定时间内传输,可以容忍偶尔错误的流数据情况,对于USB摄像头这种实时性要求比较高的设备一般选用实时传输,所以在CAM_Read()中就需要用到实时传输函数IssueIsochTransfer()来读取摄像头采集的数据。如果IssueIsochTransfer()执行后返回一个标示句柄,则代表执行成功,如果无返回值,则表示执行失败。
- 搭载3G技术的汽车(05-18)
- 基于嵌入式技术的汽车安全防御系统设计(09-14)
- 基于GPS定位及3G通信客运车辆监控系统设计(10-08)
- 基于GPS/3G技术的公交车远程监控系统设计(05-01)
- 8种经典汽车行驶行驶记录仪方案设计,软硬件协同(05-17)
- 浅谈车载视频监控系统解决方案发展(01-24)