【发布时间】:2018-03-29 10:21:52
【问题描述】:
在树莓派上,我希望能够使用旋转编码器作为音量控制。 我能看到的最好方法是使用rotation_encoder模块来读取编码器,将其设置为相对轴(因此会得到+1或-1事件),然后让驱动程序解释它以增加音量或降低音量键。
但是我正在努力理解中断和驱动程序,因此我的驱动程序必须将自己注册为能够提供 EV_KEY 事件,我认为我已经处理了这些事件,但我不确定如何才能捕捉到并对来自其他司机的事件采取行动?
我想我必须轮询由其他驱动程序创建的 /dev/input/event 对象,但我似乎找不到有关如何执行此操作的指南?
这是最好的方法吗?有没有办法我可以真正捕捉到由其他驱动程序向输入系统提供事件创建的中断?
【问题讨论】:
-
所有驱动程序都在内核模式下运行,在同一个地址空间中。如果您正在编写两个驱动程序,那么您可以使用
EXPORT_SYMBOL_GPL(...)或类似方法从另一个模块调用一个模块上的函数。 -
@rodrigo 我正在尝试使用现有的驱动程序,如果可以避免的话,我宁愿不更改它。我总是可以将我想要的位复制到我的驱动程序中,但如果我能提供帮助,我宁愿不复制任何功能。
-
我明白了...看看
int input_register_handler(struct input_handler *handler)函数。也许它可以满足您的需求。 -
看起来它会做我想做的事,但很难找到如何使用它的好例子。
标签: c linux driver linux-device-driver