1 体系流程架构
本体系的操作体系渠道为Linux, 内核版别为2.6,方针板上包含视频收集、GPRS 模块和操控器S3C2440.操控器主要是担任向客户显现及后端服务供给图画数据。视频服务器的发动办法是由后台或触发发动。当用户触发事情时主动发动收集程序或许由用户长途发动,再进行图画数据的抓取。
2 体系规划
2.1 Linux 下设备驱动
Linux 是免费的操作体系,其源代码是揭露的,咱们能够依据试验的需求进行必要的研讨和修正。在Linux 操作体系中,设备都是以文件办法的存在,对设备的操作便是对文件的操作,运用户能够调用通用的文件操作函数来进行拜访和操作设备。
设备驱动程序是Linux 内核与外部设备相关的接口,它们都依据用户操作一系列的规范函数调用来履行,经过调用独立的驱动程序来调用实践硬件的设备进行特定操作。编程接口能够使驱动程序独立运转于内核的其他部分,就如“嵌入”到内核中一样。这种模块化规划特色使得Linux 驱动程序的编写办法简略并且高效。操作简略的一起也有危险,因为设备驱动程序是运转在内核中,假如驱动程序编写呈现问题,很有或许会使整个Linux 体系运转呈现问题。
驱动程序运转与一般运用程序也有不同当地,驱动程序运转只能调用自己相应函数和内核中的规范函数,而一般运用程序只能调用外部数据库等运用函数。内核模块源文件中也不能包含一般的库文件,只能运用内核中规则的内核函数,不然就会呈现问题。这也是驱动程序的写法与运用程序的写法不同之处。当然另一个不同之处是内核与一般运用程序处理过错的办法不同:
运用程序中的过错是不会对体系发生毛病,并可运用调试器来进行源代码的盯梢,然后发现问题所在,但内核过错有或许会影响整个体系,即便不影响体系也会呈现杀死当时进程的问题,并且也不能运用调试来发现问题本源。
2.2红外中止触发规划
本监控体系完结了红外热释电传感器驱动,运用字符设备驱动。因为S3C2440有117路的I/O线。其I/O线分红8组端口,分别是GPA,GPB,GPC,GPD,GPE,GPF,GPG,GPH.当有人进入时或脱离被感应区域时,都会使热释电红外传感器的电平发生改变,然后引起中止。热释电红外传感器感应到有人进入时就会主动发动正在睡觉的视频收集设备,对方针进行数据收集。一起热释电红外传感器的驱动程序需求调用中止办法来告诉内核,让内核告诉视频收集器已进入作业状况,然后便于设备管理。 S3C2440 经过GPIO 引脚的函数和宏来进行装备和操控;函数S3C2440 _ GPIO _ CFGPIN 对复用GPIO 引脚装备;函数SET_ IRQ _ TYPE 对外部中止触发器进行设置。本监控体系运用了宏IRQT _ BOTHEDGE 对中止进行装备。在内核头文件中界说中止号,每个外部中止都分配不同的中止号来进行操控。当内核接纳到中止呼应,就会运用异步告诉办法。为了处理文件的异步通讯,用户程序有必要做到两点:榜首有必要给进程指定“属主”;第二为了运转异步告诉,用户程序有必要在设备中设置FASYNC 标志。依据内核驱动程序写法,驱动程序有必要要界说自己的fasync 办法。当程序履行到F_SETFL 时就发动FASYNC,内核就会调用驱动程序fasync.内核空间运用异步信号来向用户发送信号,相应信号函数是:
Void kill_fasync(struct fasync_struct **fa,intsig,init band)
信号函数的功用是当红外传感器输出电平由高到低或由低到高的改变时触发中止呼应,一起外部设备得到一个经过处理函数发生的电平改变,然后驱动程序中界说read 办法。
2.3 视频收集驱动
在初始化的流程中初始化了摄像头的一些默许的值,依据红外传感器传过来的摄影指令,发动摄影程序,开端摄影,图片数据保存为JPEG 格局存储,一起发送到手机终端While(1)
{
If(paizhao)
{
_pal=0 ;
sendPaiZhao() ;
readJPEG() ;
keepData() ;
sendData() ;
}
}
2.4 图画数据的JPEG 紧缩编码
通常情况下,没有紧缩的JPEG图画数据占用存储空间比较大,十分消耗存储空间,也不利于网络数据传输,因而对图画数据进行紧缩很有必要。关于图画的紧缩办法,Linux体系下的Libjpeg库中现已有完结。Libjpeg是Linux下的一个规范的库,能够直接调用它来完结图片紧缩。这个库的主要功用是将图片以必定的紧缩比率紧缩成JPEG文件格局的图片。因为Linux是开源的,这个库也是敞开的。不只能够在一般的Linux操作体系下作业,也能够在嵌入式Linux下进行作业。这样就减少了许多底层的作业,也有利于防止重复性的开发作业。 在运用这个库之前,首要需求装置和编译这个库。关于嵌入式Linux,libjpeg库现已包含在嵌入式Linux源代码包中,在装备相关库文件选项时把这个库参加,再编译一下内核就能够运用libjpeg库。
图画紧缩封装调用image类的compress函数,如下所示:
Int image compress(image *newone,int quality)这个函数的功用是依照指定的quality 比率将图片紧缩成JPEG 格局。函数中的两个参数分别是指向新的image 类数据的指针( 即紧缩后的图画数据),另一个参数是指定紧缩比率,一般规模为0~100.当数字越大,紧缩得到的图片质量就越高,也就越明晰,但一起紧缩后的数据文件容量越大。所以紧缩比不是越大越好,需求依据试验的实际需求来确认,以满意试验功用要求且存储本钱和传输本钱最低为规范。
2.5 短消息的收发
嵌入式监控体系经过运用串口与GPRS衔接,经过运用GPRS模块来进行短消息的收发。SMS短信的收发有两种形式,即文本形式和PDU形式。文本形式只能发送变通的ASCII字符,短信内容简略,其最大不足之处是不能收发其他字符。PDU形式将发送的信息依照必定的格局进行新的编码,一般是十六进制数的PDU序列为主,把一切中文或许图画进行编码后再予以发送(如图2-1)。
编程进程如下:
1)翻开串口
翻开串口设备文件需求运用规范的I/O操作函数。
Fd=open(“/dev/ttyS0”,O_RDWR|O_NDELAY|O_NOCTTY) ;
2) 设置串口特点
串口有一些规则的特点有必要进行设置,不然就不能正常运转,一般要设置波特率、操控形式标志、本地形式标志、输入/ 输出形式标志、操控字符等相关串口特点。
3) 清空发送/ 接纳缓冲区
为了防止曾经的数据的搅扰,有必要对缓冲区的数据进行清空之后才能把数据读入缓冲区,这样做的意图是为了防止不必要的数据搅扰。
4) 从串口读写数据
串口的数据读/写运用的是规范的读/写函数(read()和write())。 5)封闭串口
封闭串口为下次再运用串口供给方便。封闭串口的函数是close()函数。
2.6彩信的发送
Linux体系中的视频子体系为Video4Linux,他为运用程序供给了一个完好、一致的API函数,视频运用程序只需调用这些API就能完结对视频捕捉设备的操作。设备的节点文件在#mknod/dev/videoc810
1)翻开设备
用open()函数来翻开设备。
fVideo=open(“dev/video”,O_RDWR);
2)取得设备参数
Ioctl(fVideo,VIDIOCGCAP,&vcap);
3)设置图画收集参数
Ioctl(fVideo,VIDIOCGPICT,&vcap);
4)图画收集
Ioctl(fVideo,VIDIOCMCAPTURE,&mem);
5)等候收集完毕,因为收集需求一段时间,所以运用程序需求有一个相应的等候期
Ioctl(fVideo,VIDIOCSYNC,&mem,frame);
6)将收集的图画数据写入文件
Write_jpeg(buf++mb.offsets[0],mem);
7)清空内存映射
Munmap(but,mb.size);
8)封闭设备
Close(fVideo);
得到图画数据后,再把数据进行MMS的封装,首要是加上MMS头部分的数据封装,再对SMIL部分封装,这儿主要是指定显现MMS的相关信息,最终对每个输入的多媒体信息进行编码。最终经过GPRS模块把信息发送出去。
3体系功用的测验成果
本文测验根据jpeg格局规范的视频数据的收集、传输以及显现。由摄像头完结视频数据的收集,经过由GPRS封装后把图画数据传输到手机。红外感应到有人进入时,摄像头取下的图画相片,并再经过GPRS模块把图画发到用户的手机上,然后完结了有用的监控动作。