- 论坛徽章:
- 0
|
cat /proc/bus/input/devices
里面可以看到
input子系统里面会将handler和device绑定
- 144 /*
- 145 * Event types
- 146 */
- 147
- 148 #define EV_SYN 0x00
- 149 #define EV_KEY 0x01
- 150 #define EV_REL 0x02
- 151 #define EV_ABS 0x03
- 152 #define EV_MSC 0x04
- 153 #define EV_SW 0x05
- 154 #define EV_LED 0x11
- 155 #define EV_SND 0x12
- 156 #define EV_REP 0x14
- 157 #define EV_FF 0x15
- 158 #define EV_PWR 0x16
- 159 #define EV_FF_STATUS 0x17
- 160 #define EV_MAX 0x1f
- 161 #define EV_CNT (EV_MAX+1)
- 162
- 163 /*
- 164 * Synchronization events.
- 165 */
- 166
- 167 #define SYN_REPORT 0
- 168 #define SYN_CONFIG 1
- 169 #define SYN_MT_REPORT 2
- 170 #define SYN_DROPPED 3
复制代码 一般是
- 330 /**
- 331 * input_event() - report new input event
- 332 * @dev: device that generated the event
- 333 * @type: type of the event
- 334 * @code: event code
- 335 * @value: value of the event
- 336 *
- 337 * This function should be used by drivers implementing various input
- 338 * devices to report input events. See also input_inject_event().
- 339 *
- 340 * NOTE: input_event() may be safely used right after input device was
- 341 * allocated with input_allocate_device(), even before it is registered
- 342 * with input_register_device(), but the event will not reach any of the
- 343 * input handlers. Such early invocation of input_event() may be used
- 344 * to 'seed' initial state of a switch or initial position of absolute
- 345 * axis, etc.
- 346 */
- 347 void input_event(struct input_dev *dev,
- 348 unsigned int type, unsigned int code, int value)
- 349 {
- 350 unsigned long flags;
- 351
- 352 if (is_event_supported(type, dev->evbit, EV_MAX)) {
- 353
- 354 spin_lock_irqsave(&dev->event_lock, flags);
- 355 add_input_randomness(type, code, value);
- 356 input_handle_event(dev, type, code, value);
- 357 spin_unlock_irqrestore(&dev->event_lock, flags);
- 358 }
- 359 }
复制代码 这么玩的
详情参考
- 1165 static int __init input_proc_init(void)
- 1166 {
- 1167 struct proc_dir_entry *entry;
- 1168
- 1169 proc_bus_input_dir = proc_mkdir("bus/input", NULL);
- 1170 if (!proc_bus_input_dir)
- 1171 return -ENOMEM;
- 1172
- 1173 entry = proc_create("devices", 0, proc_bus_input_dir,
- 1174 &input_devices_fileops);
- 1175 if (!entry)
- 1176 goto fail1;
- 1177
- 1178 entry = proc_create("handlers", 0, proc_bus_input_dir,
- 1179 &input_handlers_fileops);
- 1180 if (!entry)
- 1181 goto fail2;
- 1182
- 1183 return 0;
- 1184
- 1185 fail2: remove_proc_entry("devices", proc_bus_input_dir);
- 1186 fail1: remove_proc_entry("bus/input", NULL);
- 1187 return -ENOMEM;
- 1188 }
- 2139 static int __init input_init(void)
- 2140 {
- 2141 int err;
- 2142
- 2143 err = class_register(&input_class);
- 2144 if (err) {
- 2145 pr_err("unable to register input_dev class\n");
- 2146 return err;
- 2147 }
- 2148
- 2149 err = input_proc_init();
- 2150 if (err)
- 2151 goto fail1;
- 2152
- 2153 err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
- 2154 if (err) {
- 2155 pr_err("unable to register char major %d", INPUT_MAJOR);
- 2156 goto fail2;
- 2157 }
- 2158
- 2159 return 0;
- 2160
- 2161 fail2: input_proc_exit();
- 2162 fail1: class_unregister(&input_class);
- 2163 return err;
- 2164 }
复制代码 |
评分
-
查看全部评分
|