现在的位置: 首页 > 综合 > 正文

EV_REP,input_repeat_key,键盘重复,GPIO键盘

2017年11月11日 ⁄ 综合 ⁄ 共 653字 ⁄ 字号 评论关闭

要实现的效果:类似桌面打开记事本,按下键盘后有输入,按住按键不放的话就连续输入。

环境:嵌入式Linux系统,键盘有GPIO扫描实现,模拟成标准键盘,界面用QT4的LineEdit显示。

 

键盘的驱动我就不多说了,参考input/keyboard的omap方面代码即可;QT里面继承keyPressEvent()即可判断按下的是哪个键。

要注意的有一些,说说心得:

1、键盘要注意防抖动

2、如果确认有键盘就input_report_key(&va->kb_dev,key_got,1);然后重复扫描,这一步很重要,重复扫描的时间要小于33ms。为什么?看下input.c就知道了,input.c的input_repeat_key会隔rep[REP_PERIOD]调用一次,但是如果我们在驱动里释放了按键,则input_repeat_key不会再调用(此函数前面有判断)。

因此扫描的时间一定要少于rep[REP_PERIOD],不这样做的话,就会出现你本来想按一次按键,结果多了几个尾巴。

例如,你确认按键后200ms再开始扫描是否还按下,则input_repeat_key已经调用好几次了,所以多了几个尾巴,这样就不是只按下一次键盘了。

3、千万不要因手按键盘的重复时间的固定思路迷惑了程序的编写。只要驱动指定了EV_REP,则驱动上层会自动启动上述的timer,本驱动只要判断按键是否抬起然后input_report_key(x,x,0);即可!

 

不对之处欢迎指正!

转自:blog.csdn.net/lanmanck

抱歉!评论已关闭.