论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
SHAPE \* MERGEFORMAT
图4-18 gsmDecode7bit函数工作流程
gsmEncode8bit函数用于8位码编码,因为采用的也是8位码,源编码串和目标字符串是一致的,所以其编码工作用memcpy函数简单的复制即可完成。
gsmDecode8bit函数用于8位码解码,与gsmEncode8bit一样只需要采用简单的复制即可,区别在于在目标字符串末尾加一个“\0”结束字符。
gsmEncodeUcs2函数用于UCS2编码,根据PDU编码规则,UCS2码采用的是16位双字节的编码方式。工作方式如图4-19所示。
SHAPE \* MERGEFORMAT
图4-19 gsmEncodeUsc2函数工作流程
gsmDecodeUsc2函数用于UCS2码的解码。它的工作流程如图4-20所示:
SHAPE \* MERGEFORMAT
图4-20 gsmDecodeUcs2函数工作流程
gsmEncodeUcs2函数和gsmDecodeUcs2函数分别用了作用相反的两个API函数——MultiByteToWideChar和WideCharToMultiByte函数。它们的作用分别为将短字符(用8位数据表示的字符)转换为宽字符(16位数据表示的字符,如Unicode编码),和将宽字符转换为短字符。
gsmInvertNumbers函数的作用是将形如“8613851872468”这样的字符串两两颠倒成“683158812764F8”,其中源字符串长度为奇数时,补字符‘F’凑成偶数。流程图如图4-21所示。
SHAPE \* MERGEFORMAT
图4-21 gsmInvertNumbers函数工作流程
4.4.2.3 收发短信
(1)监听新短信
GSM模块连接在串口上,对短信的监听实质上是对串口的监听。具体的新短消息的监听流程如图4-22所示:
图4-22 新消息监听流程
其中:
1)AT+CMGF=0——设置短消息内容控制模式为PDU模式
2)AT+CNMI=1,1,0,1,1——设置短消息到达自动提醒功能。
3)AT+CMGR=[index],其中index是短消息在SIM卡中的地址。如果读取成功,既对应的地址中存在信息,则返回CMGR: 0,"",[id][content],当人工选择读信息的时候,也可以采用此语法,只要将index的值改成短消息在SIM卡中的地址即可。若短消息不存在,则返回ERROR。
(2)发送短消息
在发送短信之前,要对数据结构体SM_PARAM进行数据填充。其中短消息服务中心和目标号码的格式是不包含加号却包含国家代码的国际标准格式号码,如8613812341234。在数据填充之前要将这些号码文本进行处理。
在CSmartHomeDlg类中,必须对短信编码解码类CEncode和SM_PARAM结构体进行实例化。
CEncode m_encode;
SM_PARAM param;
在填充好机构体以后,用下面一句
nPduLength=m_encode.gsmEncodePdu(¶m,pdu);
对短消息结构体进行PDU编码,编码结果放入pdu数组中,PDU长度返回到nPduLength。流程图如图4-23所示:
SHAPE \* MERGEFORMAT
图4-23 发送短信流程
4.5 图象采集模块
中星微摄像头采用了中星微301PLUS快速主控芯片。该芯片是一款高性能图像压缩芯片,输出MIPEG视频流数据。MIPEG(Motion JPEG)主要是基于静态视频压缩发展起来的技术,特点是基本不考虑视频流中不同帧之间的变化,只单独对某一帧进行压缩,通常可达到6:1的压缩率。它的误差稳定性非常好,可以获取清晰度很高的视频图像,而且还可以灵活设置各路视频清晰度,压缩帧数。
4.5.1 摄像头驱动程序
该摄像头的官方提供了其在Windows CE下的驱动程序zc030x.dll和在VC下对其编程的lib库文件zc030xlib.lib。只要在智能家居的工程属性中,将其提供的lib库文件导入即可使用它提供的一些函数。
步骤:Project菜单->SmartHome Properties,选择左边列表Configuration Properties->Linker->Input
导入lib库文件操作的截图如图4-24所示:
图4-24 在VS2005中添加lib库文件
图像采集模块用到的主要函数有:
capInitCamera()用来初始化视频设备,并获取当前可用的视频设备数目;
capSetVideoFormat()设置视频格式和分辨率。本系统使用的视频格式为RGB24,分辨率为320×240像素;
capGetPicture()获取摄像头最近捕捉的一幅位图,存入指定的缓存中
capCloseCamera() 关闭视频设备
4.5.2 视频捕捉和视频信息传送
摄像头工作流程经过了初始化摄像头和捕捉视频和关闭摄像头等流程,详细的流程如图4-25所示:
SHAPE \* MERGEFORMAT
图4-25 摄像头的工作流程
其中设置视频格式、捕捉图象和发送图象等步骤位于线程CaptureThreadProc中,该线程在点击智能家居系统应用程序界面上的“打开摄像头”按钮后创建,在点击“关闭摄像头”后关闭。
视频数据的分包发送在视频监控功能中是关键的一个步骤。在这个步骤里,系统将摄像头采集到的视频数据存储在一个临时的数组中,通过对这个临时数组的数据分割,完成数据的分包存储。在系统中,每个视频数据包的大小为1440字节。在系统的运行测试中,通过断点调试的方式,知道摄像头通过capGetPicture()函数获取到的一帧图象信息的大小大概在4000字节到5000字节之间,所以连续发送四个到五个数据包即可将一幅画