【转帖请注明出处:blog.csdn.net/lanmanck】
要实现的效果:类似桌面打开记事本,按下键盘后有输入,按住按键不放的话就连续输入。
环境:嵌入式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);即可!
不对之处欢迎指正!