damout
驱动牛犊
驱动牛犊
  • 注册日期2003-10-14
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1117回复:1

usb键盘不稳定

楼主#
更多 发布于:2005-01-11 21:28
嗨,大家好,最近在做PXA255的usb键盘驱动,用的是linux-2.4.17的版本。
其中有三个问题:
1.input_envent事件中删除定时器操作不能正确执行,即如下的del_timer返回0:
if (test_bit(EV_REP, dev->evbit) && dev->timer.function) {
if (value) {
mod_timer(&dev->timer, jiffies +
dev->rep[REP_DELAY]);
dev->repeat_key = code;
break;
}
if (dev->repeat_key == code)
del_timer(&dev->timer);
}
导致若干次按键后,定时器老是重发最后一个键,我删除如上的两个定时器操作后
消除了这个问题,但是按下键不松开也不会有重发了。

2。在drivers/char/keyboard.c中的kbd_processkeycode()函数中还有一处重发操作,
也会导致按键若干次后不断的重发键值,即使我不按键盘。
我也是把那个定时器操作注销以后就可以了,是不是太粗暴了一点!:)


3。第三个问题我至今没有解决,可能和ohci有关系。就是我按键百来次以后会出现
键盘不被响应的情况,我看了一下usb-ohci.c中的hc_interrupt函数发现是我的
中断类型即ints是1,而一般有按键情况下这个值应该是2或者是3。
所以hc_interrupt 就不会进入dl_done_list(),也就不处理按键事件了。
这是怎么回事啊?我对usb没有什么概念,按键状态的改变最早是哪里探测到的啊?
usb又是怎么把这个改变通知键盘驱动的呢?

谢谢了,为了这个问题搞了近一个礼拜,还没有什么头绪!

AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-11 22:48
linux到linux专区去可能会更好
嗨,大家好,最近在做PXA255的usb键盘驱动,用的是linux-2.4.17的版本。
其中有三个问题:
1.input_envent事件中删除定时器操作不能正确执行,即如下的del_timer返回0:
if (test_bit(EV_REP, dev->evbit) && dev->timer.function) {
if (value) {
mod_timer(&dev->timer, jiffies +
dev->rep[REP_DELAY]);
dev->repeat_key = code;
break;
}
if (dev->repeat_key == code)
del_timer(&dev->timer);
}
导致若干次按键后,定时器老是重发最后一个键,我删除如上的两个定时器操作后
消除了这个问题,但是按下键不松开也不会有重发了。

2。在drivers/char/keyboard.c中的kbd_processkeycode()函数中还有一处重发操作,
也会导致按键若干次后不断的重发键值,即使我不按键盘。
我也是把那个定时器操作注销以后就可以了,是不是太粗暴了一点!:)


3。第三个问题我至今没有解决,可能和ohci有关系。就是我按键百来次以后会出现
键盘不被响应的情况,我看了一下usb-ohci.c中的hc_interrupt函数发现是我的
中断类型即ints是1,而一般有按键情况下这个值应该是2或者是3。
所以hc_interrupt 就不会进入dl_done_list(),也就不处理按键事件了。
这是怎么回事啊?我对usb没有什么概念,按键状态的改变最早是哪里探测到的啊?
usb又是怎么把这个改变通知键盘驱动的呢?

谢谢了,为了这个问题搞了近一个礼拜,还没有什么头绪!

 
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部