问题标签 [evdev]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5098 浏览

python - Python、evdev、usb条码阅读器:如何解码输入数据

我有 Datalogic Gryphon GFS4400 二维条码扫描仪。我已经放入 Raspberry pi,它可以用作 USB HID 设备。我可以读取条形码并且输出到默认 TTY。

我想创建一个在读取条形码时处理输出的服务。我正在使用 python 和 evdev。

有人可以指出正确的方向如何将输出转换为正确的字符吗?

Python 脚本如下所示:

当我运行脚本并读取一个条形码 487800017702297980000411000000000000702407088651000000时,我得到以下输出:

我不明白如何将 KEY_xxx 转换为正确的字符。如果我只过滤掉事件,我仍然不明白什么是 KEY_KPn 等。Evetest 给出了这个:

任何帮助表示赞赏!谢谢你。

0 投票
0 回答
650 浏览

linux - 如何为 qt 应用程序启用触摸

我们运行来自 Toradex 的 boot2qt 映像 @apalis-imx6/Ixora bord。

=> Linux b2qt-apalis-imx6 3.14.52-v2.6b2.1+g9f2723e #1 SMP Wed Mar 29 17:08:54 CEST 2017 armv7l armv7l armv7l GNU/Linux

并连接来自 Data Modul (pcap) 的 easyMaxTouch Display/Touch Modul。

如何使用 libevdev/libinput/tslib 支持启动我的 QT 应用程序?我必须导出哪个 QT 定义?

此致

拉尔斯

0 投票
1 回答
169 浏览

linux - 如何确定何时使用 evdev 添加新设备?

确定新设备何时可用的首选方法是/dev/input/eventX什么?

我是否必须定期检查/dev/input目录,将打开的文件与/dev/input/eventX设备列表进行比较,还是有更简单的方法?

我已经简要查看了hotplug.txt,但我认为这会通知我底层原始/dev/input设备的创建,而不一定是相应的/dev/input/eventX创建。

0 投票
1 回答
4137 浏览

python - 如何使用 python evdev 访问游戏手柄的操纵杆?

我对 evdev 很陌生,目前正在尝试使用 xbox 控制器来控制小型机器人。我对每个按钮都很成功,但我似乎无法弄清楚如何从操纵杆获得有效读数。

此代码仅适用于按钮响应。

编辑:每当按下 ABXY 按钮时,也会发生 EV_ABS 事件。我不确定如何区分这些值和操纵杆的实际值。此外,来自操纵杆运动的事件代码不一致。这是我当前正在运行的代码:

任何建议表示赞赏!谢谢!

0 投票
1 回答
2272 浏览

linux-device-driver - 虚拟键盘 (Linux/libevdev) - 发送事件

试图实现一个虚拟键盘。程序在 5 秒周期内发送一个击键事件。它在PC(Ubuntu Linux)上工作。问题是 Beaglebone Black/Raspberry Pi3 上没有显示任何内容。

Plaftorm Beaglebone Black,Debian Jessie:

代码:

lsinput - ev 位是否正确?:

Evtest - 向内核发送事件(没问题):

0 投票
0 回答
51 浏览

embedded-linux - linux 3.4版本中evdev的源码在哪里释放“struct evdev”的内存?

我在 linux 版本 3.4 中跟踪 evdev 的内存。我发现在函数“evdev_connect”中分配了一个内存,分配的内存大小是根据“struct evdev”。问题是我找不到内存空闲的地方?我认为这个内存在“evdev_disconnect”中应该是空闲的,但是我找不到相关的代码。甚至 evdev 的源代码也有“evdev_free”函数,但它没有被调用。

0 投票
0 回答
154 浏览

python - Python 脚本停止在新启动的应用程序上运行 (python-evdev)

几个星期以来,我一直在摸不着头脑,我对 Linux 的了解并不多,所以很容易被我忽略。

在我的系统中,我有一个通过 I2C 将数据发送到我的 RaspberryPi 的 arduino。PI 查看数据,然后应模拟系统中的按钮按下。我正在使用 python 脚本和 evdev 来完成这个。系统首先以吸引模式(游戏模拟器前端)启动,然后从那里启动所需的模拟器 + 游戏。

我首先在 rc.local 中启动 python 脚本 sudo python myscript.py & 并使其运行。它可以毫无问题地读取 I2C,但 evdev 没有按预期工作。

树莓派没有插入键盘。在我的第一次测试中,我插入了一个用于测试目的的键盘,一切正常,python-evdev 发送的按钮按下,在吸引模式和启动的模拟器中都可以识别。伟大的!我想...

这是工作代码:`

`

然后我关闭系统并拔下键盘并再次启动系统,现在我的问题开始了;如果没有插入吸引模式和启动模拟器的键盘,将不再识别任何按钮按下。所以我试着做这里描述的事情:http: //python-evdev.readthedocs.io/en/latest/tutorial.html#specifying-uinput-device-options

并得到了一些不同的结果。

现在我的按钮在吸引模式下工作得很好,但一旦我启动模拟器就停止工作。但是,如果我在模拟器启动后重新运行我的脚本,那么按钮也可以在那里工作。

这是我对代码的更改:

如果我忽略了某些东西或遗漏了某些东西,我真的不知道如何解决这个问题。

我已经尝试过:http: //python-evdev.readthedocs.io/en/latest/tutorial.html#create-uinput-device-with-capabilities-of-another-device 并尝试将我的脚本作为服务启动初始化.d。我监视键盘按下,所以我看到我的脚本在模拟器启动时正在运行。

编辑:

如果我cat /proc/bus/input/devices在使用脚本的第二个版本时运行(除非我再次运行脚本,否则该脚本在吸引模式下工作但不在启动的模拟器中),这就是我得到的:

我可以看到cat /dev/input/event1它正在接收我的输入。

如果我运行第一个只有在我有外接键盘时才有效的版本,这就是我得到的:

如果我在没有外部键盘的情况下运行相同的版本:

0 投票
1 回答
371 浏览

python - 使用 evdev 识别多功能输入设备的特定功能

我有一些与无线 USB 数字键盘交互的 Python 代码。我希望能够按名称发现设备,但显示为多个输入设备。在/dev/input/by-id

并使用evdev模块:

显然内核可以区分-kbd设备和-mouse设备,但是我如何在我的代码中做出决定呢?我现在提出的解决方案利用了“键盘”设备包含这些KEY_KP...功能的事实,所以我可以这样做:

...但这似乎更像是一种启发式而不是可靠的测试。有没有办法使用evdev模块或替代方法来检测给定的输入设备是键盘还是鼠标(或两者的某种类似科学怪人的组合)?

0 投票
2 回答
820 浏览

python - 使用 Python Evdev 的多个游戏手柄?

我找到了一种在 Python 中使用游戏手柄的方法,使用模块 Evdev(参见最后的链接)。在本教程中,作者只使用了一个游戏手柄,但他也指出,应该可以使用多个游戏手柄,其代码基于以下内容:

Select.select 似乎一直等到按下按钮,以便程序被中断,直到发生这种情况。如何修改代码以使用多个游戏手柄或在等待按钮输入时执行其他代码?或者有没有更好的选择来使用 evdev 呢?

http://ericgoebelbecker.com/2015/06/raspberry-pi-and-gamepad-programming-part-1-reading-the-device/

0 投票
2 回答
104 浏览

evdev - 当您读取部分数据时,epoll EDGE 是否应该触发工作?

我想在 USB 鼠标断开连接时收到通知(不仅仅是读取失败)。我使用带有标志的 epoll

我用了

我等待来自鼠标的事件。一切都很好,工作正常,直到我点击鼠标按钮。这会同时生成两个事件。一个是 EV_MSC/MSC_SCAN 事件,另一个是 EV_KEY/BTN_LEFT。如果我只读取一个事件(即使用 len 24 的缓冲区读取),我会收到另一个 EPOLL 通知,并且读取会再次获得 EV_MSC 事件。如果我使用大小为 48 的缓冲区读取,我会得到两个事件。

处理这种情况的正确方法是什么。在读取事件处理程序中获得 EAGAIN 之前,我是否应该继续阅读?