新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > μC/OS-II基础上实现的无纸传真收发系统

μC/OS-II基础上实现的无纸传真收发系统

作者:时间:2011-08-19来源:网络收藏

4.4 功能模块设计
本设计自底向上包括如下3个功能模块,如图6所示。底层串口模块、中层数据缓冲区模块和上层模块。各个模块由μC/负责管理,其中底层串口模块包含了所有基于串口的基本操作,包括读串口和写串口等;中层数据缓冲区模块做了大量的细节性数据处理工作;上层模块封装了发送和接收传真的基本功能。

本文引用地址:http://www.eepw.com.cn/article/155877.htm

f.jpg


4.4.1 底层串口模块
底层串口模块的代表性函数包括如下3个。
①void RxInterrupt_Handler();
功能说明:fax modem每次接收到数据后都会发生中断,跳入此函数。通过mdm_append_data函数将串口收到的新数据添加到接收缓冲区。
②void USART1_SendByre(INT16U byte);
功能说明:直接向串口中发送一个字节,并等待完成。
③void USART1 SendData(INT8U*data,INT16S len);
功能说明:直接向串口写数据并等待完成,数据长度不限。它被fax_send_cmd函数和fax_send_frame函数多次调用。
4.4.2 中层数据缓冲区模块
本模块采用队列来管理数据,如图7所示。底层串口模块收到数据后,将数据存入队尾缓存,上层传真模块从队头取出数据进行处理,这种方式使得程序不必关心串口接收数据的方式,一定程度上减小了程序的耦合性。

g.jpg


队列的数据结构定义如下:
h.jpg
i.jpg
本模块提供了以下接口函数,供上层传真机模块调用。
①void mdm_init_buffer();
功能说明:本函数用于初始化缓冲区,一般在程序启动时调用。
②char*mdm_get_line(int timeout);
功能说明:在timeout规定的时间里面,等待并读取一行数据(以/r/n结尾),如果超时则返回NULL。
③int mdm_get_byte(char*byte,int timeout);
功能说明:在timeout规定的时间里,等待并读取一个字节的数据,如果有数据则返回1,如果超时则返回0。
④int mdm_get_byte_count();
功能说明:获取当前缓冲区内的数据量,单位为字节。
⑤void mdm_clear_buffer();
功能说明:清空缓冲区的数据。
⑥void mdm_append_data(char data);
功能说明:向缓冲区队尾添加一个数据,该函数在串口接收中断中被调用。
4.4.3 上层传真模块
上层传真模块分为发送传真接口和接收传真接口两大部分,其中发送部分为1个集成的函数,而接收部分为3个按时序相接的功能分支。
(1)发送传真接口
原型说明:im fax_send(char*num,char*page[]);
功能说明:发送传真,对端的传真号为num,传真文件通过page变量传入,结尾以NULL指针或空字符串结尾。
(2)接收传真接口
①int faX_ringing();
功能说明:循环检测并接收响铃,只有接通了,才会跳出循环。该函数可以在一个task里面调用,进行传真监听,当收到“RING”时,退出函数,等待应答。
②int fax_answer_and_connect();
功能说明:传真应答与连接。该函数一般在收到“RING”时调用。当连接成功后,即可接收传真。
③int fax_receive(int*pagenum,char*dir);
功能说明:接收传真,收到的传真页数为pagenum,保存地址为dir。只有当连接成功后才能调用该函数。
4.5 传真接口调用示例
j.jpg

结语
本文对无纸传真进行了研究,在该研究的上开发出一套实用的,其扩展性强,具有很好的移植性。一般的传真机仅限于纸质文件的传输,而本则辅助了纸质文件与电子版文件的转化传输。本存在的意义在于,用户可以将此传真模块作为一个独立功能单元集成到其他产品中,以较低的成本来增加产品的功能。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭