主题 : mini2440 touch panal 输入子系统的疑问。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 8039
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-08-07
最后登录: 2009-08-11
楼主  发表于: 2009-08-07 17:14

 mini2440 touch panal 输入子系统的疑问。

请教一下,在mini2440开发板上的输入子系统触摸屏驱动中,input_report_key() 和 input_report_abs()将按键事件发送到哪里去了?处理函数在哪里?
这个问题困扰我2天了,我只知道流程是 按键动作-》中断处理程序-》input_report event-》handler event。 就是找不到handler在哪儿,郁闷啊~~~
谢谢!
one more time~ one more chance~
级别: 侠客
UID: 7776
精华: 1
发帖: 73
金钱: 675 两
威望: 503 点
综合积分: 166 分
注册时间: 2009-07-28
最后登录: 2020-06-08
1楼  发表于: 2009-08-07 17:50
input_report_key(dev, BTN_TOUCH, 0);
                 |
input_event
               |
input_handle_event
              |
input_pass_event
         |
handle->handler->event
      |
evdev_event
    |
evdev_pass_event

然后唤醒read~  这样一次读取就完成了~

可以看一下event是怎么样注册的~  = 3=
级别: 新手上路
UID: 8039
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-08-07
最后登录: 2009-08-11
2楼  发表于: 2009-08-07 17:53
谢谢, 看来还是要好好看下linux input subsystem的内核代码。
我再研究一下。。。。。
one more time~ one more chance~
级别: 侠客
UID: 7776
精华: 1
发帖: 73
金钱: 675 两
威望: 503 点
综合积分: 166 分
注册时间: 2009-07-28
最后登录: 2020-06-08
3楼  发表于: 2009-08-07 17:59
嘛~ 慢慢来吧~ = 3=

把数据结构画出来~ 很好理解的~
级别: 新手上路
UID: 8039
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-08-07
最后登录: 2009-08-11
4楼  发表于: 2009-08-08 15:40
现在的问题是,在3c2440_ts.c 中我根本没有看到 触摸屏驱动去注册handler啊,
我看内核代码是说要调用input_register_handler(),可是3c2440_ts.c 中没有定义这样的一个handler。

但是我看mousedev.c中有这样的代码:
static struct input_handler mousedev_handler = {
    .event =    mousedev_event,
    .connect =    mousedev_connect,
    .disconnect =    mousedev_disconnect,
    .fops =        &mousedev_fops,
    .minor =    MOUSEDEV_MINOR_BASE,
    .name =        "mousedev",
    .id_table =    mousedev_ids,
};

static int __init mousedev_init(void)

......
    input_register_handler(&mousedev_handler);
......


可是触摸屏驱动中没有, 那我该如何去handler->connect() 啊。。。。。。

这样的话就比较奇怪了,我的板子起来后触摸屏怎么可以跑起来啊。。。。不知道应用程序怎么获取到按键事件的。。。。

我问技术支持,他们告诉我说,用的是tslib, 而且已经在他们的文件系统中提供了, 可是我还是没有找到。。。。。
[ 此帖被屈定成在2009-08-08 15:46重新编辑 ]
级别: 新手上路
UID: 8039
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-08-07
最后登录: 2009-08-11
5楼  发表于: 2009-08-08 15:49
况且, mousedev.c 中只有input_register_handler() 却没有input_register_devie()。
one more time~ one more chance~
级别: 侠客
UID: 7776
精华: 1
发帖: 73
金钱: 675 两
威望: 503 点
综合积分: 166 分
注册时间: 2009-07-28
最后登录: 2020-06-08
6楼  发表于: 2009-08-08 16:25
s3c2440_ts.c 这个触摸屏是不会使用mousedev.c的~  在/dev/input/下面就可以看见~

只有event0 input0 两个设备~ 说明s3c2440_ts.c触摸屏这个设备与mousedev.c这个驱动不匹配~

不过在这里假设匹配的话~

呢么你的理解也刚好相反了~
是触摸屏执行input_register_devie
然后mousedev执行input_register_handler

s3c2410ts_init
      |
input_register_device

mousedev_init
        |
input_register_handler
级别: 新手上路
UID: 8039
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-08-07
最后登录: 2009-08-11
7楼  发表于: 2009-08-08 17:02
呵呵, mousedev只是我看的一个例子。

刚才和你讨论了一下, 搞明白这个流程了, 只是还要去看一下内核代码。

感谢superfight!!!