2024年6月5日发(作者:)
XFS SPI框架设计说明
杜晶2010年6月3日星期四
一、总体设计框图:
应用程序
XFS API
XFS Manager
XFS SPI
Service Provider
PostEventWnd函数
SPI入口函数
WFP_xxx实现参
数传入
消息处理线程
命令参数
激发事件
Events to a Window
SPI Message
线程消息
消息队列
注册事件
有效窗体
事件窗口队列
SPI处理函数
OnSP_xxx具体
功能实现,并用
消息或事件通知
窗口
CServiceBasic设
备服务类
二、模块说明:
每个设备的SP驱动程序对应一个vc++实现的dll模块。
注意在dll第一次被装载时要通过注册表信息装载XFS标准dll中的所有标准函数,目
前一共34个,通过
RegGetManagerPath和LoadManagerFunction函数实现。
1、SPI入口函数WFP_xxx:
为了和XFS标准中实现的XFS Manager交互必须引入和实现标准的SPI函数入口定义,
目前已经实现了必须的11个。上层应用程序通过XFS Manager间接调用这些SPI入口函数,
XFS标准中规定所有SPI函数必须是异步的,因此在这里采用Windows的线程消息机制建
立消息队列来实现这种异步方式。SPI入口函数的实现中最主要需要做的是分配必要的内
存,将输入参数以标准中规定的形式,通过消息方式传递给处理线程后就直接返回,如果中
途出现任何错误或异常,则给予相应的返回值。
2、消息处理线程:
分类处理各种SPI调用,消息处理线程会从消息队列中检查和分类处理对应的SPI请求,通
过调用对应的SPI处理函数OnSP_xxx实现具体的功能。每个设备的SP提供给应用程序的
服务可以是多个,但DLL的所有实例被实现成只会同时存在一个消息处理线程,这是为了
实现独立设备锁定的必须机制。
3、SPI处理函数OnSP_xxx:
各个SPI函数的具体功能实现,用WFSRESULT结构传递返回值,并用消息或事件通知对
应窗口。SPI处理函数的实现中主要关注设备的具体功能实现、标准中关于设备SPI出口参
数的定义和注意事项、分配必要内存、发出必要的事件通知、最后将WFSRESULT结构以
消息形式通知XFS Manager的后台处理窗口,返回相应的返回值。
4、事件发送机制:
WFPRegister和WFPDeregister是XFS标准中用来实现事件注册的SPI函数,具体的实现方
法是,当应用程序通过API调用通知XFS Manager后,XFS Manager会调用相应SP的SPI
函数,SPI中将收到的事件注册信息(主要是窗口句柄)放入事件窗口队列中;如果设备发生
了相应的事件,对应的SPI处理函数就应该使用PostEventWnd函数发送这个事件通知已注
册的应用程序。PostEventWnd函数会找到关注这一事件的应用程序事先用WFPRegister注
册到事件窗口队列中的相应窗口句柄,并将事件以Windows消息的形式发送过去。OpenXFS
开源库中对事件机制的管理使用了Map图类型数据结构,只是在查找性能上会比我们的实
现好一些。经测试使用队列实现事件机制,同时为5-10个应用程序提供事件服务可以满足
实时性要求。以后如果发现性能不足,也可以尝试使用二叉查找树或图结构来优化。
三、标准框架开发SP的步骤:
1、读懂XFS 标准文档Part1,主要描述了SP的基本原理和编程规则;
2、读懂XFS标准文档Part2,主要描述了设备服务的分类定义和一些规则;
3、根据设备的具体类型阅读标准中该类型的对应部分的文档,比如打印机对应Part3、扫描
枪对应Part17等。在工程中包含该类型文档中定义好的C++ .h头文件。
4、WFP_xxx函数中注意修改,其中主要需要分配必要的内存空间并传递入口参数。主要修
改
WFPExecute和WFPGetInfo函数。
5、OnSP_xxx函数中注意修改,按设备支持的所有命令分类处理,分配内存必要的空间,
注意出口参数的数据结构。OnSP_xxx函数是实现设备服务具体功能的地方,采用
CServiceBase类实例实现具体设备功能函数(封装具体指令集)。根据具体设备可自行增加
对应功能操作的封装。框架已实现了XFS 3.10标准规范中的大部分,因此在使用框架的过
程中不要随意删除已有的基础部分,另外使用的时候多实验多观察,摸清规则后再修改。主
要修改
OnSPExecute
和
OnSPGetInfo函数。
6、CSerialPort是一个同步方式的串口通讯类,[实验代码SerialPinDirect]文件夹中的
CSerialPort类实现了串口状态脚的异步读取。
四、交接说明:
[DocCEN-XFSCWA15748]文件夹里是XFS 3.10标准文档PDF电子版。
[实验代码]文件夹里包含了主要源代码:
实验代码api_QuantumT_bcr扫描枪应用测试程序;
实验代码 spi_QuantumT_bcr扫描枪SP驱动程序;
实验代码spi_nantian_pr2e南天打印机SP驱动框架程序;
实验代码SerialTest串行口指令测试程序;
实验代码SerialPinDirect直接读串口状态位的样例程序。
[OpenXFS_V0.0.0.5]文件夹里是实现XFS 3.10标准的MFC构架的开源库,其中主要可以参
考:
SamplesWosaXFSTest20100106为应用测试程序;
SPISPIEpson20090106为打印机SP样例驱动程序;
为有中文注释的库说明文档。
发布评论