我将lirc 用于 python。这工作得很好,但我错过了一个功能:在我的测试中,当按下按钮时,只发送了一个代码。现在,我想在按下键的同时打印一个代码。换句话说,一个功能应该由“key down”启动并由“key up”停止。仅使用lirc.nextcode()
不起作用,因为仅捕获“key down”事件。
那么,有什么技巧可以用python检测“key up”吗?
我将lirc 用于 python。这工作得很好,但我错过了一个功能:在我的测试中,当按下按钮时,只发送了一个代码。现在,我想在按下键的同时打印一个代码。换句话说,一个功能应该由“key down”启动并由“key up”停止。仅使用lirc.nextcode()
不起作用,因为仅捕获“key down”事件。
那么,有什么技巧可以用python检测“key up”吗?
实际上,lircd 具有生成合成发布事件的 --release 选项,请参见http://lirc.org/html/lircd.html的手册页
还有一个 lircd-uinput 插件,它为内核提供 lirc 按键事件。这些事件在 /dev/input 设备上可用,包括重复和释放事件。请参阅http://lirc.org/html/lircd-uinput.html上的 lircd-uinput 手册页。
lirc中没有这样的功能。可以这样想:来自遥控器的红外信号要么被接收,要么没有,没有 keyup 事件,甚至没有 keydown 事件。
您必须编写自己的按键向上和按键向下事件。看看你可以制作配置文件的方式,特别是关于延迟的部分:http ://www.lirc.org/html/configure.html 以每秒发送许多事件的方式进行配置。
然后,将 lirc 置于非阻塞模式(参见https://github.com/tompreston/python-lirc)。然后,您可以遍历 lirc.nextcode() ,如果它不返回任何事件或为不同的键返回事件,则您有按键事件。
您可以在这里查看我的答案: 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...