打印

report 到 input 子系统的 响应码值怎么捕获到

[复制链接]
2376|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
godsky|  楼主 | 2010-8-19 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了内核中input_Programming.txt  文档修改了一个按键中断程序。
--------------------------------------------------------------------------
static struct input_dev *button_dev;
static irqreturn_t button_interrupt(int irq ,void *dev_id)
{
input_event(button_dev, EV_KEY, KEY_1, inb(S3C2410_GPG(0)) & 1);
input_sync(button_dev);
//printk( "on--\n");                                                                            //测试中断可以进入
return IRQ_HANDLED;
}
static int __init button_init(void)
{
                       
                                  ...
                       
if (request_irq(IRQ_EINT8, button_interrupt, IRQ_TYPE_EDGE_BOTH, "inputbutton", button_dev)) {
                printk(KERN_ERR "button.c: Can't allocate irq \n");
                return -EBUSY;
        }
button_dev = input_allocate_device();
if (!button_dev) {
  printk(KERN_ERR "button.c: Not enough memory\n");
  error = -ENOMEM;
  goto err_free_irq;
}
button_dev->evbit[0] =  BIT_MASK(EV_KEY);                     
button_dev->keybit[BIT_WORD(KEY_1)] = BIT_MASK(KEY_1);           //事件响应KEY_1 码
button_dev->name = DEVICE_NAME;
  button_dev->id.bustype = BUS_RS232;
  button_dev->id.vendor = 0xDEED;
  button_dev->id.product = 0xBEEF;
button_dev->id.version = 1010;
error = input_register_device(button_dev);
if (error) {
  printk(KERN_ERR "button.c: Failed to register device\n");
  goto err_free_dev;
}
return 0;
err_free_dev:
input_free_device(button_dev);
err_free_irq:
free_irq(IRQ_EINT8, button_interrupt);
return error;
}
static void __exit button_exit(void)
{
        input_unregister_device(button_dev);
free_irq(IRQ_EINT8, button_interrupt);
}
module_init(button_init);
module_exit(button_exit);

--------------------------------------------------------------------------
我使用input_report_key()向input子系统 提交了一个键值码KEY_1(代表数字“2”) 。cat /proc/bus/input/devices 中已经显示
------------------------------------------
I: Bus=0013 Vendor=deed Product=beef Version=03f2
N: Name="Input_button"
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=kbd event1
B: EV=3
B: KEY=4
------------------------------------------
但利用cat /dev/input/event1   进行按键测试时显示的是乱码。
请问是不是不能这样捕获键值。
怎样才能正确获得我提交的键值码? 等待。。。。。

相关帖子

沙发
liu8858| | 2010-11-7 08:29 | 只看该作者
自己写几行程序去读event吧
struct input_event event;
fd = open("/dev/input/event1",O_RDONLY);
read(fd,&event,sizeof(event));
printf( "%x,%x,%x\n",event.type,event.code,event.value);
信手写的,不保证正确,供参考

使用特权

评论回复
板凳
bouy| | 2010-12-27 11:54 | 只看该作者
楼上是正解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

28

帖子

0

粉丝