Net有道

紫冠道人的求道历程

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

RFID会议签到系统总结(十二)――硬件访问(下)

 

在上一篇里我们根据签到系统的需求,提取出了硬件访问的公共接口,所有硬件设备只要实现了那个接口,我们的系统就可以方便地调用到,从而屏蔽了各种硬件API的异同对系统的影响。

上篇主要讲了逻辑隔离,这一篇要讲物理隔离。考虑到以后有更换硬件设备的可能(这个考虑现在看来非常的具有先见之明,在半年多前S6500这款设备在TI网站上就发现已经Discontinue了),我把不同硬件设备的接口实现放入了各自不同的程序集中,一种硬件设备一个程序集。如果要更换设备,只要把相应的程序集换掉,并修改配置就可以了。

先来看看系统中关于硬件这一块的配置是如何的:

<Hardware>

       <Devices>

           <Device DevType="Hardware.S6500.AntennaDev,S6500"

           DevName="S6500"

           DevCategory="Antenna"

           DevQty="1"

           ZeroQueue-s="3"

           BlockCount="2"

           MaxSerialPort="16" />

            

           <Device ...... />

           <Device ...... />

           <Device ...... />

       </Devices>

</Hardware>

 

一种设备一个Device,其中的Attribute基本都与IHardwareAc这个接口里的属性相对应(当然有些属性是互斥的,配置里看不到,比如有MaxSerialPort后就没必要有Port了),另外DevType这个Attribute是程序集里实现了IHardwarAc接口的Type名,DevQty则是为一个签到终端连接一个以上同种设备预留的。

这样的做法不但给更换硬件设备带来方便,而且对于商业推广也更为灵活,比如可能有些客户不需要手持设备的,那就不用发布那个程序集,同时配置里把那一个Device拿掉就万事大吉了。

经过上述的一番折腾,现在在客户端调用里其实连IHardwareAc这个接口都是看不到了,它只看到一个HardwareAdapter之类的东西,在签到系统启动的时候,这个HardwareAdapter根据配置文件创建当前硬件列表。

创建硬件列表

 

上面的devices是根据配置文件反序列化出来的硬件配置类,关于系统配置可以看总结(五)和总结(六)。

这样在客户端里所有的硬件操作都是由这个HardwareAdapter转发的。比如要关闭硬件设备,那

             /// 结束工作

             public void Stop()

             {

                    for (int i = 0;i < Count;i++)

                           hwList[i].Release();

             }

现在客户端不但不清楚硬件设备是如何工作的,而且它根本就不知道目前有没有连接有硬件设备,连接有多少硬件设备。

posted on   lichdr  阅读(633)  评论(1编辑  收藏  举报

编辑推荐:
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
阅读排行:
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· SQL Server如何跟踪自动统计信息更新?
点击右上角即可分享
微信分享提示