韦东山Linux视频驱动第2期》学习总结之第17课(USB设备驱动程序)

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出来的
  1. --- usbmouse.c    2012-02-29 20:47:01.000000000 +0800
  2. +++ usbmouse_as_key.c    2012-02-29 19:57:06.000000000 +0800
  3. @@ -39,+39,8 @@
  4.  /*
  5.   * Version Information
  6.   */
  7. -#define DRIVER_VERSION "v1.6"
  8. -#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
  9. +#define DRIVER_VERSION "v1.0"
  10. +#define DRIVER_AUTHOR "Jason Lu <gfvvz@yahoo.com.cn>"
  11.  #define DRIVER_DESC "USB HID Boot Protocol mouse driver"
  12.  #define DRIVER_LICENSE "GPL"
  13.  
  14. @@ -77,+77,8 @@
  15.      default:        /* error */
  16.          goto resubmit;
  17.      }
  18. -
  19. +
  20. +/*    1. 2012.02.29 @Jason
  21.      input_report_key(dev, BTN_LEFT, data[0] & 0x01);
  22.      input_report_key(dev, BTN_RIGHT, data[0] & 0x02);
  23.      input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
  24. @@ -86,+87,12 @@
  25.      input_report_rel(dev, REL_X, data[1]);
  26.      input_report_rel(dev, REL_Y, data[2]);
  27. -    input_report_rel(dev, REL_WHEEL, data[3]);
  28. +    input_report_rel(dev, REL_WHEEL, data[3]);
  29. +*/
  30. +    //2. 2012.02.29 @Jason
  31. +    input_report_key(dev, KEY_L, data[0] & 0x01);
  32. +    input_report_key(dev, KEY_S, data[0] & 0x02);
  33. +    input_report_key(dev, KEY_ENTER, data[0] & 0x04);
  34.      input_sync(dev);
  35.  resubmit:
  36. @@ -175,+181,8 @@
  37.      input_dev->phys = mouse->phys;
  38.      usb_to_input_id(dev, &input_dev->id);
  39.      input_dev->dev.parent = &intf->dev;
  40. -
  41. +
  42. +/*    3. 2012.02.29 @Jason
  43.      input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
  44.      input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
  45.          BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
  46. @@ -183,+190,14 @@
  47.      input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
  48.          BIT_MASK(BTN_EXTRA);
  49.      input_dev->relbit[0] |= BIT_MASK(REL_WHEEL);
  50. -
  51. +*/
  52. +    //4. 2012.02.29 @Jason
  53. +    set_bit(EV_KEY, input_dev->evbit);
  54. +    set_bit(EV_REP, input_dev->evbit);
  55. +    set_bit(KEY_L, input_dev->keybit);
  56. +    set_bit(KEY_S, input_dev->keybit);
  57. +    set_bit(KEY_ENTER, input_dev->keybit);
  58. +
  59.      input_set_drvdata(input_dev, mouse);
  60.      input_dev->open = usb_mouse_open;
第一种方法 :以下是操作结果,其中的 ls 是按 左键 右键 产生的,然后按 中键 (当做回车),就 执行了ls命令 。这个过程 通过插到开发板上的鼠标完成 ,PC上按键未曾参与。

第二种方法 :用hexdump命令测试,如下图。
第三种方法 :如下图,其中的"l"、"s"和回车都通过鼠标产生。
第四种方法 :启动界面,打开记事本,按鼠标就会输入"l"、"s"和回车。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值