关于linux 2.6.38 下扫描键盘驱动请教
最近刚开始学写驱动,在2.6.38下,写9555的驱动,用输入子系统上报按键值,驱动调试通过,在内核下看到了新创建的设备节点,写了一个简单的测试应用,使用open打开设备节点后,打印输出。发现按键按下后都有了反应,但发现每一个键都只有一次上传到节点处,第二次按键后,按键就没有在设备节点处打印了。于是,我在Input_report_key()函数后加入printk()打印输出,发现每一次按下都会有上传的,我现在不知道是不是我的驱动写的有问题还是应用需要修改?请指教,谢谢! 应用代码贴下 linucos 发表于 2013-9-3 20:17 static/image/common/back.gif应用代码贴下
int main(int argc, char **argv)
{
int ev_fd;
int ret;
struct input_event ev;
ev_fd = open(OPEN_DIR, O_RDWR);
if (ev_fd < 0 )
{
perror("failed to open ");
exit(-1);
}
printf("type code value \n");
while(1)
{
ret = read(ev_fd, &ev,sizeof(struct input_event));
if ( ret == sizeof(struct input_event))
{
printf("%d %d %d \n",ev.type, ev.code, ev.value);
}
else
printf("read len %d\n",ret);
}
return 0;
} 基本上按键第一次按下,都会有打印,但同一个按键第二次按下之后就不会有打印了! 你驱动可能没报抬起。 linucos 发表于 2013-9-3 20:45 static/image/common/back.gif
你驱动可能没报抬起。
是需要在驱动下,将按键的抬起一起上报?哪一次按键的过程不是需要两个上报的过程? 1. 按键状态不变的话,kernel不会上报给用户空间
2. 有个标记__set_bit(EV_REP, input->evbit);,这个是重复上报的标记
具体你找找。
按下就报按下,抬起就报抬起。按下不抬起就是长按。
如果硬件没有抬起中断,只能模拟一个。 linucos 发表于 2013-9-3 20:54 static/image/common/back.gif
1. 按键状态不变的话,kernel不会上报给用户空间
2. 有个标记__set_bit(EV_REP, input->evbit);,这个是重 ...
想请教一下: 在应用开发的时候,有没有办法将input_report_key()的键值通知特定的线程的?或者应该说,在应用开发的时候,怎么去获取这个键值了?谢谢! 矩阵键盘在内核有现成的驱动
页:
[1]