松下CF-U1条形码扫描器开发笔记
很久之前,朋友曾经捡垃圾捡到一个军工级别的三防机”松下CF-U1″——一台十年前卖一万多大洋的”板砖”,搭载了Intel的Atom处理器,1GB的运行内存,三星的32GB SSD。操作系统是Windows XP,根据机身上的标签来看的话,原厂系统应该是Windows Vista,后来被某个机主给重装了一把(到我朋友手里就已经不知道是几手了),之前一直拿来打红警(分辨率和CPU速度什么的刚刚好,系统是XP也不需要考虑什么兼容性),最近想起来这玩意上边还有个条码的扫描器,于是想着看看能否做个扫码的程序。
首先是扫描器的驱动问题,我手头的这个CF-U1还好,驱动在上个机主手里就已经打的相当完备,各种外设用的都很好。至于驱动程序,Google上搜一下也比较容易,
其次就是开发工具包(SDK)以及相关文档的问题。去Google上以关键词”CF-U1 SDK”搜了下,在Softpedia上找到了官方提供的SDK连接:
下载后安装后发现CF-U1这玩意功能不限于此,从官方SDK的文档可以推断出来,这玩意的某些版本还有摄像头,GPS,磁卡读卡器(后来拆机清点硬件的时候发现这些东西在我这个版本上都没有QAQ,所以也没法做测试了,只搞出来了条码扫描器)
官方对于条码扫描器提供了Java和C# .Net的SDK,也带了几个例子,不过比较不幸的是JRE1.8我装了几遍也没搞上去(意外终止),Java SDK的Demo则无法测试了,然后那个C#的Demo同样的也是,总是因为硬件权限的问题没法运行,于是没办法只能自己研究一下文档看看能否继续搞了。
很幸运,SDK中有一个十分详尽的文档:
可以看到实际上条码扫描器的使用途径不仅仅是目录中看到的两种,还有C++和COM口直接使用的方式。我所研究出来的方式也是使用COM口直接读取数据。在开始动手写代码前先介绍一下硬件上的构造。松下官方认为这个扫描器能耗感人,所以在它的电源电路上加了一层开关,所以在正常情况下,这个开关也是关掉的,所以摁背后两个按钮也是没有任何作用的,然后再打开串口等待数据。
有了时序图就很容易了,可以看到在PowerControl这个模块里有两个函数,BCR_PowerUp和BCR_HWTrigger,可以使用这两个函数和驱动程序交互将电源接通,后来在尝试了下边的程序后确定了这个结论。
#include <iostream> #include <BCRPowerControl.h> using namespace std; int main(){ char a; cout<<"Init Lib:"<<BCR_InitLib()<<endl; cout<<"BCR_PowerUp:"<<BCR_PowerUp(true)<<endl; cout<<"BCR_HWTrigger:"<<BCR_HWTrigger(true)<<endl; cin>>a; return 0; }
启动了上边那个程序后,我打开了串口调试助手
,选择连接到COM0口,设置波特率(Baud)为9600,数据位(Databits)为8位,校验位(Parity)为无校验,停止位(StopBit)设置为1位,连接串口,摁背后的黄色按钮尝试扫描一个商品上的条码,于是:
对于这个数据的格式,在Barcode Configuration Utility中可以设置,比如通过前后缀的拼凑给他拼成一个JSON什么的。这个工具功能很复杂,暂时没有细致的研究它的其他功能都是做什么的。根据它的运行效果,猜测应该是启动电源然后通过串口往里边写了些什么东西的样子。
同时,官方还提供了一个程序,Barcode Key Emulator,可以将扫描得到的内容当做键盘的模拟输入(感觉超市中的扫码枪也是个键盘的样子)
对于其他的硬件,例如GPS,我也有根据网上加装GPS的教程拆机看到底有没有这个模块,不过比较滑稽的是拆开后就只找到一个GPS的排线,并没有找到GPS模块的影子。根据网上的提示,如果有存在GPS模块,应该是在这个铁质支架上面:
SSD我也有拆开看了下标签,接口好像叫UDMA66,然鹅淘宝上根本搜不到这种接口的硬盘了,只有咸鱼上有人在出售64GB版本的SSD。
关于那个MagStrip Reader,是一个外部的设备,可以接在底部的扩展接口上:
参考文献:
【1】Panasonic CF-U1 Software Development Kit Document
博主还有原来的文件吗?真的很需要
太久了,已经无了 但是发现发现当年搞得Qt程序倒是还在.
我试了下迅雷和百度云,大概是资源太冷门,甚至没有镜像过.大概是下不到了
松下的官网我也去看了下,CF-U1这个型号太古老了,SDK已经不提供下载了,可能只能去archive.org啥的想法看看有没有镜像了.