我正在使用LIRCd捕获我在遥控器上按下的键,并使用正确的配置文件
根据文档,我必须等待阻塞函数lirc_nextcode()
返回,我得到一个很好的解码行,如下所示:
0000000080bf4bb4 00 CURSOR_DOWN myremote
第一个数字是键值,接下来是按下此键的重复次数(此处为0,因为我只按了它并释放了它),然后是键名和我的遥控器的名字
无论如何,我想要做的是检测遥控器的 up 键。
如果我按一个按钮一段时间,这就是我得到的(每隔约200毫秒的新行):
0000000080bf4bb4 00 CURSOR_DOWN myremote
0000000080bf4bb4 01 CURSOR_DOWN myremote
0000000080bf4bb4 02 CURSOR_DOWN myremote
0000000080bf4bb4 03 CURSOR_DOWN myremote
0000000080bf4bb4 04 CURSOR_DOWN myremote
0000000080bf4bb4 05 CURSOR_DOWN myremote
0000000080bf4bb4 06 CURSOR_DOWN myremote
0000000080bf4bb4 07 CURSOR_DOWN myremote
0000000080bf4bb4 08 CURSOR_DOWN myremote
0000000080bf4bb4 09 CURSOR_DOWN myremote
0000000080bf4bb4 0a CURSOR_DOWN myremote
// I let go for 1s and press it again:
0000000080bf4bb4 00 CURSOR_DOWN myremote
所以每当我长按一个键时,第二个数字会递增,但是一旦我释放它并再次按下它,它就会重置为0.
我想要的是能够检测到重复停止的时刻。
现在,我可以看到如何实现密钥检测:如果lirc_nextcode()
在一段时间后没有破解,我可以认为密钥已经被释放。
我问你的是:还有另一种(更多正确的)方式吗?
通过配置LIRCd可能吗?
或者,如果除了定时器之外别无他法,那么最佳实施方式是什么?
实际上,lirc_getcode()
是阻止,所以每当计时器崩溃时,我都需要它返回!
修改:顺便说一下,没有lirc
或lircd
标记,会很高兴!
答案 0 :(得分:1)
之前我已经使用了 lirc / lircd 几次,据我所知没有正式方法来检测 key up 事件
如果你想一想这项技术是如何运作的,那么它就没有了。遥控器的编程方式是每个按钮只存储一个代码。因此,当按下按钮X时,它将发送代码X表示按下按钮,当按下按钮Y时,将发送代码Y.正在接收此信息的另一方(运行Lircd)的设备无法知道这是键向下还是按键事件,因为这不是通信方式系统工作。它只知道按下了一个按钮。
按住遥控器上的按钮X将在另一端的设备上发送更多代码,如果您不感兴趣,可以放弃这些重复消息。
答案 1 :(得分:1)
我将通过存储收到的最后一个代码并与新的代码进行比较来实现,如果代码不同,则释放存储密钥。对于我在你的文章中看到的,似乎代码长度是固定的,所以你应该没有很多问题实现它,正如我所说,只是忽略最后一个字节(重复计数)。
IR发射器通过在按住键的同时重复相同的代码来工作,因此您需要知道“保护时间”,即重复之间的延迟。您可以测试此延迟以查看是否没有重复,如果在该延迟之后没有任何重复,您可以假设用户已释放密钥(KEY UP)。
简而言之: