0

我目前有一个连接到嵌入式 linux 机器的 USB 卡刷,据我所知,根据我的研究,它充当键盘,输入所有数据,就像我在打字一样。现在我有一个 perl 脚本,它获取所有这些数据并将其保存到一个文件中。唯一的问题是,它只知道在 perl 脚本在前台运行时获取数据,否则,“键盘”输入到哪里。

我的问题是如何让这张卡片在每次读取输入时运行脚本?或者我可以通过在后台运行的应用程序以某种方式捕获数据。在后台运行的 C++ 程序中的 IE,cin 会读取机器的任何输入吗?

我从来没有弄乱过刷卡器,所以我不能 100% 确定它们是如何工作的。

对此的任何建议将不胜感激!

4

4 回答 4

5

我几乎完全做到了这一点(除了作为键盘出现的 USB 条形码阅读器)。

我的系统有自定义 USB 热插拔规则,该规则在插入 USB 设备时根据其供应商和产品 ID 检测它。此规则创建一个符号链接event/dev/input/.

然后我有一个始终运行的 C 守护程序。它监视/dev/input/目录,当它看到符号链接出现时,它会打开event设备。然后它使用EVIOCGRABIOCTL 获取事件设备以供独占使用(这可以防止数据在其他应用程序中显示为键盘输入),并读取与按键对应的输入事件。守护程序将按键转换为字符并将它们存储在数据库中。

于 2010-09-16T01:44:11.280 回答
1

我从未在 Linux 中处理过这个问题。然而,这听起来与我在 Windows 中看到的非常相似。

根据我的经验,操作系统会自动将许多此类设备检测为键盘类型的设备。因此,来自阅读器的任何输入都会被馈送到与真实键盘使用的相同的键盘流中。当这达到任何实际运行的程序时,没有办法区分读卡器输入数据和用户输入的速度非常非常快。

因此,您会得到原始问题中描述的行为:读卡器的输入只进入正常键盘输入的地方 - 进入焦点程序。

您最好的选择是调查制造商的网站(或以其他方式联系他们)并了解他们是否提供某种驱动程序,该驱动程序允许程序完全独立于键盘流捕获该输入。

如果制造商不提供这样的东西,也许某些第 3 方会提供。但不幸的是,我从来没有调查过,所以我不知道从哪里告诉你甚至开始寻找。

于 2010-09-15T20:50:57.407 回答
1

I have an idea, but it is very general.

Can you constantly be monitoring for data in another program, buffer it, and then pipe the results into your perl script when the buffer reaches a certain size or goes for a certain period of time without activity? If you pipe it in, you shouldn't have to modify your perl script, since it will still be on STDIN.

So, it would be like this:

Monitoring Program -> Collects Data -> Pipes it into your Perl program

I hope this idea is helpful.

-Brian J. Stinar-

于 2010-09-15T18:53:48.627 回答
1

cin 将从附加的终端输入设备读取输入。在不了解您的软件设计的情况下,我的第一个预感是从 Perl 脚本读取数据并不是设计的最佳选择。正如您所描述的,我可以使用 Perl 脚本在嵌入式 Linux 设备上读取 IR 遥控器,但通常我直接与硬件或供应商提供的 API 从我的主应用程序中进行交互。您的读卡器是否提供了 API?

读卡器插入机器时的设备名称是什么 (/dev/*)?我会打开它并以这种方式阅读。

于 2010-09-15T19:13:00.287 回答