请教关于Android下键盘驱动问题

发布于 2022-09-18 19:19:16 字数 1874 浏览 17 评论 0

我在ARM9平台上移植Android,移植键盘驱动时遇上一些问题,请教一下:
1:进入中断后并且得到了键值,但是用input_report_key函数传递键值后驱动无法进入用户程序;
2:用户程序的read函数是否是这样用的:
        kp = open ("/dev/event0", O_RDONLY);
.............................

        read (kp, &key_value, sizeof (KEY_VALUE));
&key_value是我存放读取出来的键值的结构体指针。

static irqreturn_t vs_kp_interrupt(int irq, void *dev_id)
{
        struct vs_kp_dev *vsKpDev = dev_id;
        unsigned char scancode;
        int tmp = 0;

//        printk("Occured Keyboard Interrupt,irq = %d\n",irq);
        writel(KP_INTCL|KP_INTEN,vsKpDev->kpBase + KEYPAD_INTR);//Clear the Interrupt

        scancode = readl(vsKpDev->kpBase + KEYPAD_REG);        //get and invert scancode
        tmp = scancode;
        scancode = vsKpDev->keycode[scancode];
        input_report_key(vsKpDev->input_dev, scancode, tmp+1);//1:down 2:up
        input_sync(vsKpDev->input_dev);
        printk(KERN_INFO "VS_KeyPad: Pressed the key: 0x%x!\n",scancode);
       
        input_report_key(vsKpDev->input_dev, scancode, 0);//1:down 2:up
        input_sync(vsKpDev->input_dev);
        printk(KERN_INFO "VS_KeyPad: Pressed Realeased!\n");

        return IRQ_HANDLED;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坐在坟头思考人生 2022-09-25 19:19:16

给你一些思路吧:
1、你移植的这个驱动,是不是完全和你的硬件设备匹配的?
2、跟踪你按键中断,看寄存器读出来的是什么值,和你的键盘的datasheet对照一下;
3、抛开Linux系统,你能理解键盘中断到中断处理是怎么回事的么?如果明白,再结合Linux驱动的特点,彻底把它搞明白。

淡忘如思 2022-09-25 19:19:16

原帖由 dreamice 于 2009-2-27 13:40 发表
给你一些思路吧:
1、你移植的这个驱动,是不是完全和你的硬件设备匹配的?
2、跟踪你按键中断,看寄存器读出来的是什么值,和你的键盘的datasheet对照一下;
3、抛开Linux系统,你能理解键盘中断到中断处理 ...

中断处理应该没问题的,至于硬件设备匹配方面,裸机程序是我写的,至少寄存器配置那块不会有错。
驱动已经能读出键盘的值,但是中断处理程序打印出读取的键盘值之后,返回到测试程序时出错,返回不了。我对输入子系统那块了解不是很深入。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文