标签:ati keyboard for volume 过程 位移 获取 min page
本文转载自:http://blog.csdn.net/orz415678659/article/details/9197859
一、鼠标
Linux下的usb鼠标驱动在/drivers/hid/usbhid/usbmouse.c中实现
1.加载初始化过程
1.1模块入口
1.2初始化函数
1.3初始化函数注册了一个usb驱动usb_mouse_driver
1.4当插入鼠标时会根据usb_mouse_id_table去匹配创建usb设备
它的匹配方式是接口id匹配.接口类USB_INTERFACE_CLASS_HID
usb插入枚举时候会获取usb鼠标的接口类型,获取其接口类信息,匹配成功的话会动态创建一个usb_device.
在分析probe和disconnect方法之前先介绍下驱动用来描述usb鼠标对象的结构体usb_mouse
usb鼠标既包含usb设备(usb_device)的属性也包含input输入设备(input_dev)的属性
1.5 匹配成功了就会调用probe方法
1.6 拔掉usb鼠标就会调用disconnect方法
基本上disconnect只是probe的一个逆操作而已
经过probe过程,注册了输入设备则会在/dev/input/目录下会产生对应的鼠标设备节点,应用程序可以打开该节点来控制usb鼠标设备
此时会调用usb_mouse_open方法
1.7打开鼠标
通过urb提交之后,鼠标动作通过usb传输数据就会交由urb去处理了
1.8.urb数据传输
当操作鼠标的时候,会引起urb数据传输在数据传输之后会调用usb_mouse_irq
usb接口传来的数据会保存在usb鼠标data指针成员指向的缓冲区中
这里可以看出usb鼠标传输的每次数据基本是4个字节
第0个字节的第1位表示右键,第2位表示左键,第3位表示中键,第4位表示边键,第5为表示外部键
而第1个字节表示相对x坐标的位移,第2个字节表示相对y坐标的位移,第3个字节表示相对滚轮的位移
当输入设备上报完usb接口接收来的数据后,需要调用input_sync同步事件消息,并调用usb_submit_urb提交urb
使其继续监视处理usb鼠标设备传递的新数据.
应用程序要获取鼠标操作信息可以打开对应的输入设备节点,并通过输入设备的读接口,获取到usb鼠标通过usb接口传递并交由输入设备上报过来的数据
漏掉的函数
1.应用程序关闭鼠标设备
2.模块移除调用的函数
二、键盘
linux下的usb键盘驱动在/drivers/hid/usbhid/usbkbd.c中实现
1.加载初始化过程
1.1 模块入口
1.2 初始化函数
1.3 初始化函数注册了一个usb驱动usb_kbd_driver
1.4 当插入鼠标时会根据usb_kbd_id_table去匹配创建usb设备
它的匹配方式是接口id匹配.接口类USB_INTERFACE_CLASS_HID
usb插入枚举时候会获取usb键盘的接口类型,获取其接口类信息,匹配成功的话会动态创建一个usb_device.
在分析probe和disconnect方法之前先介绍下驱动用来描述usb键盘对象的结构体usb_kbd
usb键盘既包含usb设备(usb_device)的属性也包含input输入设备(input_dev)的属性
1.5 匹配成功了就会调用probe方法
probe方法中调用的内存分配释放函数
分配内存
释放内存
配置用到的全局键值数组
1.6 拔掉usb鼠标就会调用disconnect方法
基本上disconnect只是probe的一个逆操作而已
经过probe过程,注册了输入设备则会在/dev/input/目录下会产生对应的键盘设备节点,应用程序可以打开该节点来控制usb键盘设备
此时会调用usb_kbd_open方法
1.7打开键盘
关闭键盘调用usb_kbd_close
通过urb提交之后,键盘动作通过usb传输数据就会交由urb去处理了
1.8.urb数据传输
Usage |
Usage |
|
Ref:typical |
|
|
|
|
||
0 |
00 |
Reserved (no event indicated) 9 |
N/A |
Ö |
Ö |
Ö |
84/101/104 |
||
1 |
01 |
Keyboard ErrorRollOver9 |
N/A |
Ö |
Ö |
Ö |
84/101/104 |
||
2 |
02 |
Keyboard POSTFail9 |
N/A |
Ö |
Ö |
Ö |
84/101/104 |
||
3 |
03 |
Keyboard ErrorUndefined9 |
N/A |
Ö |
Ö |
Ö |
84/101/104 |
||
4 |
04 |
Keyboard a and A4 |
31 |
Ö |
Ö |
Ö |
84/101/104 |
||
5 |
05 |
Keyboard b and B |
50 |
Ö |
Ö |
Ö |
84/101/104 |
||
6 |
06 |
Keyboard c and C4 |
48 |
Ö |
Ö |
Ö |
84/101/104 |
||
7 |
07 |
Keyboard d and D |
33 |
Ö |
Ö |
Ö |
84/101/104 |
||
8 |
08 |
Keyboard e and E |
19 |
Ö |
Ö |
Ö |
84/101/104 |
||
9 |
09 |
Keyboard f and F |
34 |
Ö |
Ö |
Ö |
84/101/104 |
||
10 |
0A |
Keyboard g and G |
35 |
Ö |
Ö |
Ö |
84/101/104 |
||
11 |
0B |
Keyboard h and H |
36 |
Ö |
Ö |
Ö |
84/101/104 |
||
12 |
0C |
Keyboard i and I |
24 |
Ö |
Ö |
Ö |
84/101/104 |
||
13 |
0D |
Keyboard j and J |
37 |
Ö |
Ö |
Ö |
84/101/104 |
||
14 |
0E |
Keyboard k and K |
38 |
Ö |
Ö |
Ö |
84/101/104 |
||
15 |
0F |
Keyboard l and L |
39 |
Ö |
Ö |
Ö |
84/101/104 |
||
16 |
10 |
Keyboard m and M4 |
52 |
Ö |
Ö |
Ö |
84/101/104 |
||
17 |
11 |
Keyboard n and N |
51 |
Ö |
Ö |
Ö |
84/101/104 |
||
18 |
12 |
Keyboard o and O4 |
25 |
Ö |
Ö |
Ö |
84/101/104 |
||
19 |
13 |
Keyboard p and P4 |
26 |
Ö |
Ö |
Ö |
84/101/104 |
||
20 |
14 |
Keyboard q and Q4 |
17 |
Ö |
Ö |
Ö |
84/101/104 |
||
21 |
15 |
Keyboard r and R |
20 |
Ö |
Ö |
Ö |
84/101/104 |
||
22 |
16 |
Keyboard s and S4 |
32 |
Ö |
Ö |
Ö |
84/101/104 |
||
23 |
17 |
Keyboard t and T |
21 |
Ö |
Ö |
Ö |
84/101/104 |
||
24 |
18 |
Keyboard u and U |
23 |
Ö |
Ö |
Ö |
84/101/104 |
||
25 |
19 |
Keyboard v and V |
49 |
Ö |
Ö |
Ö |
84/101/104 |
||
26 |
1A |
Keyboard w and W4 |
18 |
Ö |
Ö |
Ö |
84/101/104 |
||
27 |
1B |
Keyboard x and X4 |
47 |
Ö |
Ö |
Ö |
84/101/104 |
||
28 |
1C |
Keyboard y and Y4 |
22 |
Ö |
Ö |
Ö |
84/101/104 |
||
29 |
1D |
Keyboard z and Z4 |
46 |
Ö |
Ö |
Ö |
84/101/104 |
||
30 |
1E |
Keyboard 1 and ! 4 |
2 |
Ö |
Ö |
Ö |
84/101/104 |
||
31 |
1F |
Keyboard 2 and @4 |
3 |
Ö |
Ö |
Ö |
84/101/104 |
||
32 |
20 |
Keyboard 3 and #4 |
4 |
Ö |
Ö |
Ö |
84/101/104 |
||
33 |
21 |
Keyboard 4 and $4 |
5 |
Ö |
Ö |
Ö |
84/101/104 |
||
34 |
22 |
Keyboard 5 and %4 |
6 |
Ö |
Ö |
Ö |
84/101/104 |
||
35 |
23 |
Keyboard 6 and ^4 |
7 |
Ö |
Ö |
Ö |
84/101/104 |
||
36 |
24 |
Keyboard 7 and &4 |
8 |
Ö |
Ö |
Ö |
84/101/104 |
||
37 |
25 |
Keyboard 8 and *4 |
9 |
Ö |
Ö |
Ö |
84/101/104 |
||
38 |
26 |
Keyboard 9 and (4 |
10 |
Ö |
Ö |
Ö |
84/101/104 |
||
39 |
27 |
Keyboard 0 and ) 4 |
11 |
Ö |
Ö |
Ö |
84/101/104 |
||
40 |
28 |
Keyboard Return(ENTER) 5 |
43 |
Ö |
Ö |
Ö |
84/101/104 |
||
41 |
29 |
Keyboard ESCAPE |
110 |
Ö |
Ö |
Ö |
84/101/104 |
||
42 |
2A |
Keyboard DELETE |
15 |
Ö |
Ö |
Ö |
84/101/104 |
||
43 |
2B |
Keyboard Tab |
16 |
Ö |
Ö |
Ö |
84/101/104 |
||
44 |
2C |
Keyboard Spacebar |
61 |
Ö |
Ö |
Ö |
84/101/104 |
||
45 |
2D |
Keyboard - and (underscore) 4 |
12 |
Ö |
Ö |
Ö |
84/101/104 |
||
46 |
2E |
Keyboard = and+4 |
13 |
Ö |
Ö |
Ö |
84/101/104 |
||
47 |
2F |
Keyboard [ and {4 |
27 |
Ö |
Ö |
Ö |
84/101/104 |
||
48 |
30 |
Keyboard ] and }4 |
28 |
Ö |
Ö |
Ö |
84/101/104 |
||
49 |
31 |
Keyboard \ and | |
29 |
Ö |
Ö |
Ö |
84/101/104 |
||
50 |
32 |
Keyboard Non-US# and ~2 |
42 |
Ö |
Ö |
Ö |
84/101/104 |
||
51 |
33 |
Keyboard 4 |
40 |
Ö |
Ö |
Ö |
84/101/104 |
||
52 |
34 |
Keyboard ‘ and “4 |
41 |
Ö |
Ö |
Ö |
84/101/104 |
||
53 |
35 |
Keyboard Grave Accent and Tilde4 |
1 |
Ö |
Ö |
Ö |
84/101/104 |
||
54 |
36 |
Keyboard , and <4 |
53 |
Ö |
Ö |
Ö |
84/101/104 |
||
55 |
37 |
Keyboard . and >4 |
54 |
Ö |
Ö |
Ö |
84/101/104 |
||
56 |
38 |
Keyboard / and ? 4 |
55 |
Ö |
Ö |
Ö |
84/101/104 |
||
57 |
39 |
Keyboard CapsLock11 |
30 |
Ö |
Ö |
Ö |
84/101/104 |
||
58 |
3A |
Keyboard F1 |
112 |
Ö |
Ö |
Ö |
84/101/104 |
||
59 |
3B |
Keyboard F2 |
113 |
Ö |
Ö |
Ö |
84/101/104 |
||
60 |
3C |
Keyboard F3 |
114 |
Ö |
Ö |
Ö |
84/101/104 |
||
61 |
3D |
Keyboard F4 |
115 |
Ö |
Ö |
Ö |
84/101/104 |
||
62 |
3E |
Keyboard F5 |
116 |
Ö |
Ö |
Ö |
84/101/104 |
||
63 |
3F |
Keyboard F6 |
117 |
Ö |
Ö |
Ö |
84/101/104 |
||
64 |
40 |
Keyboard F7 |
118 |
Ö |
Ö |
Ö |
84/101/104 |
||
65 |
41 |
Keyboard F8 |
119 |
Ö |
Ö |
Ö |
84/101/104 |
||
66 |
42 |
Keyboard F9 |
120 |
Ö |
Ö |
Ö |
84/101/104 |
||
67 |
43 |
Keyboard F10 |
121 |
Ö |
Ö |
Ö |
84/101/104 |
||
68 |
44 |
Keyboard F11 |
122 |
Ö |
Ö |
Ö |
101/104 |
||
69 |
45 |
Keyboard F12 |
123 |
Ö |
Ö |
Ö |
101/104 |
||
70 |
46 |
Keyboard PrintScreen1 |
124 |
Ö |
Ö |
Ö |
101/104 |
||
71 |
47 |
Keyboard ScrollLock11 |
125 |
Ö |
Ö |
Ö |
84/101/104 |
||
72 |
48 |
Keyboard Pause1 |
126 |
Ö |
Ö |
Ö |
101/104 |
||
73 |
49 |
Keyboard Insert1 |
75 |
Ö |
Ö |
Ö |
101/104 |
||
74 |
4A |
Keyboard Home1 |
80 |
Ö |
Ö |
Ö |
101/104 |
||
75 |
4B |
Keyboard PageUp1 |
85 |
Ö |
Ö |
Ö |
101/104 |
||
76 |
4C |
Keyboard Delete Forward1 |
76 |
Ö |
Ö |
Ö |
101/104 |
||
77 |
4D |
Keyboard End1 |
81 |
Ö |
Ö |
Ö |
101/104 |
||
78 |
4E |
Keyboard PageDown1 |
86 |
Ö |
Ö |
Ö |
101/104 |
||
79 |
4F |
Keyboard RightArrow1 |
89 |
Ö |
Ö |
Ö |
101/104 |
||
80 |
50 |
Keyboard LeftArrow1 |
79 |
Ö |
Ö |
Ö |
101/104 |
||
81 |
51 |
Keyboard DownArrow1 |
84 |
Ö |
Ö |
Ö |
101/104 |
||
82 |
52 |
Keyboard UpArrow1 |
83 |
Ö |
Ö |
Ö |
101/104 |
||
83 |
53 |
Keypad NumLock and Clear11 |
90 |
Ö |
Ö |
Ö |
101/104 |
||
84 |
54 |
Keypad /1 |
95 |
Ö |
Ö |
Ö |
101/104 |
||
85 |
55 |
Keypad * |
100 |
Ö |
Ö |
Ö |
84/101/104 |
||
86 |
56 |
Keypad - |
105 |
Ö |
Ö |
Ö |
84/101/104 |
||
87 |
57 |
Keypad + |
106 |
Ö |
Ö |
Ö |
84/101/104 |
||
88 |
58 |
Keypad ENTER5 |
108 |
Ö |
Ö |
Ö |
101/104 |
||
89 |
59 |
Keypad 1 and End |
93 |
Ö |
Ö |
Ö |
84/101/104 |
||
90 |
5A |
Keypad 2 and Down Arrow |
98 |
Ö |
Ö |
Ö |
84/101/104 |
||
91 |
5B |
Keypad 3 and PageDn |
103 |
Ö |
Ö |
Ö |
84/101/104 |
||
92 |
5C |
Keypad 4 and Left Arrow |
92 |
Ö |
Ö |
Ö |
84/101/104 |
||
93 |
5D |
Keypad 5 |
97 |
Ö |
Ö |
Ö |
84/101/104 |
||
94 |
5E |
Keypad 6 and Righ tArrow |
102 |
Ö |
Ö |
Ö |
84/101/104 |
||
95 |
5F |
Keypad 7 and Home |
91 |
Ö |
Ö |
Ö |
84/101/104 |
||
96 |
60 |
Keypad 8 and Up Arrow |
96 |
Ö |
Ö |
Ö |
84/101/104 |
||
97 |
61 |
Keypad 9 and PageUp |
101 |
Ö |
Ö |
Ö |
84/101/104 |
||
98 |
62 |
Keypad 0 and Insert |
99 |
Ö |
Ö |
Ö |
84/101/104 |
||
99 |
63 |
Keypad . and Delete |
104 |
Ö |
Ö |
Ö |
84/101/104 |
||
100 |
64 |
Keyboard Non-US\ and |3;6 |
45 |
Ö |
Ö |
Ö |
84/101/104 |
||
101 |
65 |
Keyboard Application10 |
129 |
Ö |
Ö |
104 |
|||
102 |
66 |
Keyboard Power9 |
Ö |
Ö |
|||||
103 |
67 |
Keypad = |
Ö |
||||||
104 |
68 |
Keyboard F13 |
Ö |
||||||
105 |
69 |
Keyboard F14 |
Ö |
||||||
106 |
6A |
Keyboard F15 |
Ö |
||||||
107 |
6B |
Keyboard F16 |
|||||||
108 |
6C |
Keyboard F17 |
|||||||
109 |
6D |
Keyboard F18 |
|||||||
110 |
6E |
Keyboard F19 |
|||||||
111 |
6F |
Keyboard F20 |
|||||||
112 |
70 |
Keyboard F21 |
|||||||
113 |
71 |
Keyboard F22 |
|||||||
114 |
72 |
Keyboard F23 |
|||||||
115 |
73 |
Keyboard F24 |
|||||||
116 |
74 |
Keyboard Execute |
Ö |
||||||
117 |
75 |
Keyboard Help |
Ö |
||||||
118 |
76 |
Keyboard Menu |
Ö |
||||||
119 |
77 |
Keyboard Select |
Ö |
||||||
120 |
78 |
Keyboard Stop |
Ö |
||||||
121 |
79 |
Keyboard Again |
Ö |
||||||
122 |
7A |
Keyboard Undo |
Ö |
||||||
123 |
7B |
Keyboard Cut |
Ö |
||||||
124 |
7C |
Keyboard Copy |
Ö |
||||||
125 |
7D |
Keyboard Paste |
Ö |
||||||
126 |
7E |
Keyboard Find |
Ö |
||||||
127 |
7F |
Keyboard Mute |
Ö |
||||||
128 |
80 |
Keyboard Volume Up |
Ö |
||||||
129 |
81 |
Keyboard Volume Down |
Ö |
||||||
130 |
82 |
Keyboard Locking Caps Lock12 |
Ö |
||||||
131 |
83 |
Keyboard Locking Num Lock12 |
Ö |
||||||
132 |
84 |
Keyboard Locking Scroll |
Ö |
||||||
Lock 12 |
|||||||||
133 |
85 |
Keypad Comma |
|||||||
134 |
86 |
Keypad Equal Sign |
|||||||
135 |
87 |
Keyboard Kanji115 |
|||||||
136 |
88 |
Keyboard Kanji216 |
|||||||
137 |
89 |
Keyboard Kanji317 |
|||||||
138 |
8A |
Keyboard Kanji418 |
|||||||
139 |
8B |
Keyboard Kanji519 |
|||||||
140 |
8C |
Keyboard Kanji620 |
|||||||
141 |
8D |
Keyboard Kanji721 |
|||||||
142 |
8E |
Keyboard Kanji822 |
|||||||
143 |
8F |
Keyboard Kanji922 |
|||||||
144 |
90 |
Keyboard LANG18 |
|||||||
145 |
91 |
Keyboard LANG28 |
|||||||
146 |
92 |
Keyboard LANG38 |
|||||||
147 |
93 |
Keyboard LANG48 |
|||||||
148 |
94 |
Keyboard LANG58 |
|||||||
149 |
95 |
Keyboard LANG68 |
|||||||
150 |
96 |
Keyboard LANG78 |
|||||||
151 |
97 |
Keyboard LANG88 |
|||||||
152 |
98 |
Keyboard LANG98 |
|||||||
153 |
99 |
Keyboard AlternateErase7 |
|||||||
154 |
9A |
Keyboard SysReq/Attenti1 |
|||||||
155 |
9B |
Keyboard Cancel |
|||||||
156 |
9C |
Keyboard Clear |
|||||||
157 |
9D |
Keyboard Prior |
|||||||
158 |
9E |
Keyboard Return |
|||||||
159 |
9F |
Keyboard Separator |
|||||||
160 |
A0 |
Keyboard Out |
|||||||
161 |
A1 |
Keyboard Oper |
|||||||
162 |
A2 |
Keyboard Clear/Again |
|||||||
163 |
A3 |
Keyboard CrSel/Props |
|||||||
164 |
A4 |
Keyboard ExSel |
|||||||
165-223 |
A5-DF |
Reserved |
|||||||
224 |
E0 |
Keyboard LeftControl |
58 |
Ö |
Ö |
Ö |
84/101/104 |
||
225 |
E1 |
Keyboard LeftShift |
44 |
Ö |
Ö |
Ö |
84/101/104 |
||
226 |
E2 |
Keyboard LeftAlt |
60 |
Ö |
Ö |
Ö |
84/101/104 |
||
227 |
E3 |
Keyboard Left GUI10;23 |
127 |
Ö |
Ö |
Ö |
104 |
||
228 |
E4 |
Keyboard RightControl |
64 |
Ö |
Ö |
Ö |
101/104 |
||
229 |
E5 |
Keyboard RightShift |
57 |
Ö |
Ö |
Ö |
84/101/104 |
||
230 |
E6 |
Keyboard RightAlt |
62 |
Ö |
Ö |
Ö |
101/104 |
||
231 |
E7 |
Keyboard Right GUI10;24 |
128 |
Ö |
Ö |
Ö |
104 |
||
232-255 |
E8-FF |
Reserved |
1.9 usb键盘的led指示灯
当按下小键盘,大小写,滚动锁定,组合键,KANA控制按键的时候,usb键盘按键urb会处理usb数据并上报数据给输入子系统处理
输入子系统对键值为小键盘,大小写,滚动锁定,组合键,KANA的事件做处理,处理后会调用输入设备的event方法也就是usb_kbd_event
usb键盘led灯urb的回调函数
urb会发送setup包,Set_Report请求包通过控制端点0,紧接着是个2字节的数据输出包,第一个字节对应报告id,第二个字节是led数据信息(上图)
2.0 后话 关于usb_kbd_event函数调用的流程
首先定义了一个键盘任务,任务会循环执行kbd_bh函数
这里定义的时候是禁用了,在后面的执行的kbd_init函数中会使能,和调度keyboard_tasklet任务
kbd_bh函数获取通过getleds函数获取led状态标志,然后最终会调用kbd_update_leds_helper函数
getleds函数获取kbd->ledflagstate这个值,处理并返回.
ldeflagstate的值可以由以下三个函数来设置
而这三个函数的调用情况如下,键盘按键处理事件
获取led状态标志后,调用kbd_update_leds_helper函数,上报led事件
调用input_inject_event上报led事件,最终调用input_handle_event函数
input_handle_event函数处理各种事件分支,最终就会调用到input设备的event方法(usb_kbd_event)
标签:ati keyboard for volume 过程 位移 获取 min page
原文地址:http://www.cnblogs.com/zzb-Dream-90Time/p/7426602.html