2012-02-29 20:02:44
分类: LINUX
驱动源码:
usbmouse_as_key.zip
diff后结果:
usbmouse.zip
平台:友善之臂Tiny6410,Linux2.6.38内核
本文参考韦东山视频第二期的17课,把内核自带的usbmouse.c驱动改为可以把鼠标左、右、中键分别作为字符"l"、"s"、回车的输入。
以下是通过命令"
diff -uNr usbmouse.c usbmouse_as_key.c >usbmouse
" diff出来的
- --- usbmouse.c 2012-02-29 20:47:01.000000000 +0800
- +++ usbmouse_as_key.c 2012-02-29 19:57:06.000000000 +0800
- @@ -39,8 +39,8 @@
- /*
- * Version Information
- */
- -#define DRIVER_VERSION "v1.6"
- -#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
- +#define DRIVER_VERSION "v1.0"
- +#define DRIVER_AUTHOR "Jason Lu <gfvvz@yahoo.com.cn>"
- #define DRIVER_DESC "USB HID Boot Protocol mouse driver"
- #define DRIVER_LICENSE "GPL"
-
- @@ -77,7 +77,8 @@
- default: /* error */
- goto resubmit;
- }
- -
- +
- +/* 1. 2012.02.29 @Jason
- input_report_key(dev, BTN_LEFT, data[0] & 0x01);
- input_report_key(dev, BTN_RIGHT, data[0] & 0x02);
- input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
- @@ -86,7 +87,12 @@
- input_report_rel(dev, REL_X, data[1]);
- input_report_rel(dev, REL_Y, data[2]);
- - input_report_rel(dev, REL_WHEEL, data[3]);
- + input_report_rel(dev, REL_WHEEL, data[3]);
- +*/
- + //2. 2012.02.29 @Jason
- + input_report_key(dev, KEY_L, data[0] & 0x01);
- + input_report_key(dev, KEY_S, data[0] & 0x02);
- + input_report_key(dev, KEY_ENTER, data[0] & 0x04);
- input_sync(dev);
- resubmit:
- @@ -175,7 +181,8 @@
- input_dev->phys = mouse->phys;
- usb_to_input_id(dev, &input_dev->id);
- input_dev->dev.parent = &intf->dev;
- -
- +
- +/* 3. 2012.02.29 @Jason
- input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
- input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
- BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
- @@ -183,7 +190,14 @@
- input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
- BIT_MASK(BTN_EXTRA);
- input_dev->relbit[0] |= BIT_MASK(REL_WHEEL);
- -
- +*/
- + //4. 2012.02.29 @Jason
- + set_bit(EV_KEY, input_dev->evbit);
- + set_bit(EV_REP, input_dev->evbit);
- + set_bit(KEY_L, input_dev->keybit);
- + set_bit(KEY_S, input_dev->keybit);
- + set_bit(KEY_ENTER, input_dev->keybit);
- +
- input_set_drvdata(input_dev, mouse);
- input_dev->open = usb_mouse_open;
第一种方法
:以下是操作结果,其中的
ls
是按
左键
和
右键
产生的,然后按
中键
(当做回车),就
执行了ls命令
。这个过程
通过插到开发板上的鼠标完成
,PC上按键未曾参与。