基于ARM9系统的远程图像无线监控的设计
mt;
//输出的目标图像数据格式
int pre_x; //预览通道(P端口模式)输出的图像宽
int pre_y;
//预览通道(P端口模式)输出的图像高
int pre_fmt; //使用通道(P端口模式)时设为1
__u16 bypass;
//为1时表示不启用按比例的图像放大/缩小
__u16 ycbcr; //输入图像的YcbCr顺序
struct s3c2440_camif
*dev; //设备的系统信息
};
上述这些配置信息最终是与一系列的寄存器相关联的。这个结构为读/写寄存器提供了一个清晰的、集中的存储缓冲。
打开、关闭和控制摄像机的接口函数。这3个接口函数是按V4L规范编写的,其原型如下:
① 打开摄像机接口函数:
static int
v4l_cam_open(struct video_device *v,int mode);
② 控制摄像机接口函数:
static int
v4l_cam_ioctl(struct video_device *v,unsigned int cmd,void *arg);
③关闭摄像机接口函数:
static void v4l_cam_close(struct video_device *v);
中断处理接口函数。该中断处理函数在使用C端口模式完成1帧图像采集后被调用。函数原型定义如下:
static void
s3c2440_camif_isr_c(int irq,void *dev_id,struct pt_regs *regs);
读取图像数据的实现函数。该函数通过dev→rdy的值判断1帧图像有无采集转换结束。如果该值置1,则表示采样结束,这时就可以从图像数据的缓冲中拷贝数据到用户的存储空间;如果为0,则函数进入阻塞或返回EAGAIN标志。顺便提一下,dev→rdy的值是在中断处理函数中设置的。(实现代码略——编者注)
1.3 图像数据的压缩
S3C2440的CAMIF接口处理得到的1帧图像数据比较大,还要经过进一步的压缩才能适合进行网络数据传输。S3C2440处理器内部没有提供硬件的图像压缩编码器,但因为它的主频较高,可以使用软件来进行图像压缩。考虑到CPU的处理能力和对单帧采样图像的清晰度有较高的要求,采用基于离散余弦变换算法(DCT)的JPEG/MJPEG方式对图像数据进行压缩编码。
1.4 图像数据的传输
通信单元承担了图像的数据传输任务。在本系统中,有两种通信单元可供使用。一种是GPRS/CDMA无线传输模块。它们通过串口与S3C2440处理器相连接,在以太网络传输线缆难以铺设的环境中可以使用这种通信方式。它的缺点是通信带宽小,传输速度慢,但是如果对实时性要求不高,也能够传输高清晰的静态图片。另一种通信单元是10MHz的CS8900a以太网络传输模块。它可与局域网相连接,然后将监控图像发送到局域网的监控服务器或者通过网关发送到互联网上。这种通信方式速度高,实时性好,但监控现场要安装有线的以太网络。
1.5 摄像机云台的控制
摄像机的云台控制接口采用RS485通信方式。因S3C2440内部只有RS232的控制器,为此使用MAX485芯片设计了一个RS232到RS485的转换接口。该电路原理如图4所示。
图4中RS485的数据流方向由GPE13口的电平进行控制。
2 系统软件的设计
系统软件包含下位机软件、服务器软件和客户端软件。下位机软件部署在远程图像监控设备上。这个软件作为一个Linux的守护进程启动,负责压缩采样到的图像数据,并把压缩后的图像打包,然后通过Socket通信方式上传到监控服务器。如果使用GPRS/CDMA无线传输模块,上位机软件在系统启动完成后,就自动进行PPP拨号,建立起一条TCP/IP的通信管道。客户端软件部署在一台连接到互联网的PC机上,它提供给最终用户浏览监控画面,设置监控参数等功能。服务器软件也部署在一台连接到互联网的计算机上。这台计算机在互联网上有固定的IP或者域名,服务器软件作为一个后台进程启动,为客户端和远程图像监控设备之间的通信起到一个桥梁的作用。因为远程监控设备的IP地址是动态的,无法被客户端直接寻址,因此就需要服务器作为双方通信的中间桥梁。
下位机软件通过驱动程序提供的接口,在远程图像监控设备中完成硬件的初始化、控制等功能,同时又负责图像的压缩和传输。它是所有设备的控制中枢,因此这里着重描述下位机软件的工作流程,如图5所示。
为了省电,一些像SAA7113、摄像机和夜视红外灯等大功耗的器件和设备只有在需要时才工作,所以这些设备在初始化时都是断开电源的。
下位机程序读取保存在设备上的设备ID号(该ID号是唯一的),以及监控服务器的域名/IP地址和端口,然后下位机程序作为Socket连接的客户端主动与监控服务器进行连接。连接成功之后,送出设备的ID号。这时如果有监控的客户端想要查看某个远程监控设备的图像,只要向监控服务器发出请求,告诉服务器要连接的设备ID号,服务器就会根据这个ID号对应的Socket句柄,为客户端和远程监控设备建立一个Socket连接通道。
3 总结
远程图像无线监
- 革新2410D开发板试用手记(04-21)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)
- 嵌入式Web服务器移植与测试(03-03)
- 基于ARM9与Linux的门禁监控系统软件设计(03-08)
- 嵌入式Linux下基于ARM9的媒体播放的设计(03-27)
- SamsungS3C2440平台上的VxworksBSP移植(10-28)