- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下USB 输入子系统的学习(以鼠标驱动为例)
Linux下USB 输入子系统的学习(以鼠标驱动为例)
Linux下USB 输入子系统的学习(以鼠标驱动为例)
usb 1-1.2: new low speed USB device using musb_hdrc and address 3
usb 1-1.2: Product: USB Optical Mouse
input: USB HID v1.11 Mouse [USB Optical Mouse] on usb-musb_hdrc-1.2
//drivers/usb/input/hid-core.c
hid_probe()
{
printk(“: USB HID v%x.%02x %s [%s] on %s\n”,
hid-version 8, hid-version 0xff, c, hid-name, path);
}
//drivers/input/mouse/sermouse.c----sermouse_connect()
printk(KERN_INFO “input: %s on %s\n”, sermouse_protocols[sermouse-type], serio-phys);
/proc/bus/input # cat devices
I: Bus=0003 Vendor=0461 Product=4d15 Version=0200
N: Name=“USB Optical Mouse”
P: Phys=usb-musb_hdrc-1.1/input0
H: Handlers=mouse1
B: EV=f
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
B: ABS=100 0
驱动层负责和底层的硬件设备打交道,
将底层硬件对用户输入的响应转换为标准的输入事件以后再向上发送给Input Core。
驱动层通过调用Input_register_device函数和
Input_unregister_device函数来向输入子系统中注册和注销输入设备---
/////drivers/us/input/usbmouse.c
usb_mouse_probe-
input_register_device(mouse-dev)
usb_mouse_disconnect
input_unregister_device(mouse-dev);
usb_mouse_irq()
input_report_key
input_event//drivers/input/input.c
input_sync//每次终端数据发送完成后都会跟随发送一个同步事件,便与鼠标、按键数据及时更新到响应的全局变量
//输入子系统层的操作--drivers/input/input.c
open /dev/input/mouse0
mousedev_open() //drivers/input/mousedev.c /*打开鼠标类输入设备*/
input_open_device()
input_handle-dev-open
//驱动层物理设备的操作---drivers/usb/input/usbmouse.c
usb_mouse_open()
注册Input Handler
驱动层只是把输入设备注册到输入子系统中,在驱动层的代码中本身并不创建设备结点。
应用程序用来与设备打交道的设备结点的创建由Event Handler层调用Input core中的函数来实现。
而在创建具体的设备节点之前,Event Handler层需要先注册一类设备的输入事件处理函数及相关接口
static int __init mousedev_init(void){//注册输入事件处理、连接、断开、设备(文件)操作函数 input_register_handler(mousedev_handler);//创建输入设备节点devfs_mk_cdev(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX), S_IFCHR|S_IRUGO|S_IWUSR, “input/mice”);}
static struct input_handler mousedev_handler = {
.event = mousedev_event,//REL(相对坐标)、按键、ABS(绝对坐标)、SYNC等事件处理
.connect = mousedev_connect,
.disconnect = mousedev_disconnect,
.fops = mousedev_fops,//鼠标打开、poll、读写等操作
.min
您可能关注的文档
- Integrated Product and Process Development (IPPD).ppt
- IntegratedWriting的基本类型.doc
- Intelligent Search of Correlated Alarms for GSM Networks with Modelbased Constraints.pdf
- Interaction Effect in the Kondo Energy of the Periodic AndersonHubbard Model.pdf
- intel对桌面虚拟化产品的对比测试.pdf
- Interactive Petrophysics测井解释软件模块介绍.pdf
- International Economic Review.doc
- Internal Model Control Based on Dynamic Fuzzy Neural Network.pdf
- interesting和interested的辨析.ppt
- Internationaltrade英语专业专业必修课国际贸易实务英文版课堂笔记整理.doc
文档评论(0)