微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于ARM9和GSM/GPRS的无线可移动红外监测报警系统

基于ARM9和GSM/GPRS的无线可移动红外监测报警系统

时间:10-15 来源: 点击:
3.3 PPP拨号脚本

本设计中,对于处理器而言,GPRS模块就相当于一个调制解调器,处理器通过串口发送AT命令控制GPRS模块工作情况和得到GPRS模块相关信息。中国移动在GPRS网中建立了相当于ISP的GGSN,以连接GPRS网与外部的Internet网络。要使用GPRS功能首先要登录GPRS网络中的GGSN,这个工作可以通过相关AT命令完成。同时,为了能够进行IP数据包的传输,就必须首先实现数据链路层PPP协议。

PPP是简单链路设计的链路层协议。设计目的主要是用来建立点对点连接,进行数据收发。PPP协议中主要任务有链路建立、维护、拆除、上层协议协商和认证等。在GPRS网络中一般用到的有LCP(链路控制协议)、PAP(密码验证协议)、CHAP(挑战握手验证协议)和IPCP协议(PPP IP控制协议)。为了建立点到点连接,PPP连接时的两端开始都必须发送LCP数据包来配置和测试数据连接;在连接建立后,对等实体还有可能需要认证;然后,PPP必须发送NCP数据包来选择一种或多种网络层协议来配置。一旦网络层协议被配置好后,该网络层的数据包就可以被封装在ppp 帧中在链路上传送了。PPP链路将保持可配置的状态,直到有LCP数据包和NCP数据包终止连接。在GPRS模块拨号成功后,就要进行LCP协商配置。交互过程完成后,终端将主动进行PAP认证,发出PAP数据包,进入认证鉴权阶段。

PAP认证主要进行用户名和密码认证,其数据包仍然封装在PPP6帧内,格式和LCP一致。进入PAF认证阶段,终端主动发出Authenticate-Request数据包,由于中国移动使用的GPRS可以设置任意的用户名和密码,因此本设计中使用的用户名和密码都为"lab"。接下来进入IPCP设置阶段。

在IPCP配置过程中,可以设置网络连接中的网络环境,主要包括协商分配IP地址、IP压缩协议和DNS服务器地址等。由于不需要进行域名的解析和IP压缩,因而只进行IP地址的配置。

经过上述PPP协议数据交换过程,数据链路已经建立,但是要进行数据的传输,还要进行IP协议和TCP/UDP协议的实现。由于Linux内核已经支持TCP/IP协议,并且在内核配置时选中支持PPP协议,就可以完成上述的协议支持。为了完成上述的PPP协议实现过程,需要在文件系统的/et c文件夹下添加拨号脚本文件,并且在/usr/bin文件夹下添加应用程序pppd和chat。chat程序定义了计算机和modem之间的对话交互,完成拨号动作。pppd后台程序则同内核ppp驱动一起建立并维护与另一端的ppp连接,并确定连接两端的IP地址。

3.4 应用层程序

应用层程序中包括红外监测模块、图像采集模块、GPRS无线传输模块及GSM短信息发送模块。下面主要介绍图像采集模块与GPRS无线传输模块的实现。

3.4.1 图像采集模块

在Linux环境下,编写获取视频音频的应用程序,都使用V4L标准,V4L(Video for Linux标准是Linux中通行的音频视频流采集标准。它为内核、驱动和应用程序的交流提供了统一的接口。在应用程序中利用V4LAPI获取视频图像按以下几个步骤进行:打开视频设备、设置设备的属性(图像的亮度、对比度、设定传输格式和传输方式)、开始传输数据,最后关闭设备。

首先,定义与设备相关的结构体如下:

  struct vldeo_capabil i ty capabi li ty; //视频设备的属性

  struct video_window captureWindow; //包含获取到的图像的长和宽

  struct video_picture imageProperties; //包含获取到的图像属性

结构体struct video_capabi lity包含视频设备的属性有:视频设备的规范名称、接口类、所能获取的最大图像的宽和长、所能获取的最小图像的宽和长。其次,要使用ioctl系统调用,ioctl系统调用的功能是通过打开的文件描述符对各种文件,尤其是字符设备文件进行控制,完成特定的I/O操作。V4L支持的ioctl命令大约有二十多个,在应用中主要用的是下面几个命令:

  ioctl(fd,V IDIOCGCAP,&capability); //获取视频设备的基本功能信息


  ioctl(fd,VIDIOCGPICT,&picture); //设置和获取采集图像的各种属性

  ioct l(fd,VIDIOCGMBUF,*mbuf); //获取缓冲区信息

  ioctl(fd,VIDIOCMCAPTURE,&mmap); //捕捉图像,获取图像信息

  ioctl(fd,VIDIOCSYNC,&frame); //等待捕获完成的图像

本设计中主要设置的参数有:捕获的图像大小为320×240像素,图像帧的调色板palette值为21,图像色彩深度为8位。

最后,使用read方法实现图像的获取,read方法则可以直接读取设备文件来获取一帧数据保存到缓冲区中。通过convertframe()函数将pFramebuffer中的数据转成完整的jpeg格式的数据保存到ptframe缓存中去,再调用fwrite()函数将pt-frame缓存中的jpeg式数据写入到指定的文件中去,即得到一幅jpeg格式的图像。另外要提到的是本设计中为了方便服务器端读取上传的图片,将图像文件重名为系统时间格式。这时需要调用Linux系统函数time和1ocaltime。综上,图像采集模块已经实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top