Linux驱动开发之input子系统(2)

mousedev_open()主要是创建一个mousedev_list链表(初始化该链表的部分字段),然后调用input_open_device(),做些input_handle->open++以及input_dev->user++等操作。 

3.鼠标中断

前面提到的amimouse_open(),会注册一个中断amimouse_interrupt()。

amimouse_interrupt()发生时,会把数据存在一块固定地址(比如全局变量),等待用户读取(也就是后面说到的mousedev_read())。 

无敌的调用关系图又要出场了:

amimouse_interrupt()

|-- input_report_rel()、input_report_key()、input_sync()

|   |-- input_event()

|   |   |-- mousedev_event()

|   |   |   |-- mousedev_rel_event()、mousedev_key_event()、mousedev_notify_readers() 

4.读取鼠标

读取鼠标位置时,同打开文件一样,系统会调用file的f_op函数集的函数,但此时f_op已经在打开时赋值为Mousedev的操作集指针了,既mousedev_fops,其中的read函数为mousedev_read()。 

mousedev_read()把相关的X/Y坐标等数据,返回给用户。

还有一点要注意,mousedev_read()中,需要等��事件list->mousedev->wait,如果不满足,那么阻塞。而在前面提到的鼠标中断函数里,会定期调用input_sync(),也即调用mousedev_notify_readers(),该函数会使能该事件,唤醒mousedev_read()。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzygyf.html