1

我将lirc 用于 python。这工作得很好,但我错过了一个功能:在我的测试中,当按下按钮时,只发送了一个代码。现在,我想在按下键的同时打印一个代码。换句话说,一个功能应该由“key down”启动并由“key up”停止。仅使用lirc.nextcode()不起作用,因为仅捕获“key down”事件。

那么,有什么技巧可以用python检测“key up”吗?

4

3 回答 3

2

实际上,lircd 具有生成合成发布事件的 --release 选项,请参见http://lirc.org/html/lircd.html的手册页

还有一个 lircd-uinput 插件,它为内核提供 lirc 按键事件。这些事件在 /dev/input 设备上可用,包括重复和释放事件。请参阅http://lirc.org/html/lircd-uinput.html上的 lircd-uinput 手册页。

于 2016-10-20T09:31:48.633 回答
1

lirc中没有这样的功能。可以这样想:来自遥控器的红外信号要么被接收,要么没有,没有 keyup 事件,甚至没有 keydown 事件。

您必须编写自己的按键向上和按键向下事件。看看你可以制作配置文件的方式,特别是关于延迟的部分:http ://www.lirc.org/html/configure.html 以每秒发送许多事件的方式进行配置。

然后,将 lirc 置于非阻塞模式(参见https://github.com/tompreston/python-lirc)。然后,您可以遍历 lirc.nextcode() ,如果它不返回任何事件或为不同的键返回事件,则您有按键事件。

于 2016-08-07T17:17:07.810 回答
0

您可以在这里查看我的答案: LIRC - 如何用作键盘命令?

基本上,您可以编辑 lircd-uinput.service 来为您添加发布事件。可能有一种以编程方式添加发布事件的方法,但我不知道该怎么做。让服务做到这一点非常敏感,并且适用于我的应用程序。

sudo nano /lib/systemd/system/lircd-uinput.service

####find this line####
ExecStart=/usr/sbin/lircd-uinput 

####change to#########
ExecStart=/usr/sbin/lircd-uinput --add-release-events

#then reload/restart all the lircd services...
于 2020-10-24T16:45:51.757 回答