这个驱动是在上一节的最简单的usb驱动基础上增加了输入子系统和usb包的获取和请求。
首先先给出一个稍微简化了一下的usb的鼠标驱动,这里只做了鼠标的三个按键。为了方便验证,这里用鼠标的左键,右键和中间分别作为标准按键的l s enter 键。
#include <linux/kernel.h>#include <linux/slab.h>#include <linux/module.h>#include <linux/init.h>#include <linux/usb/input.h>#include <linux/hid.h>struct usb_mouse_as_key {struct input_dev *dev;struct usb_device *usbdev; struct urb *key_urb;int maxp;signed char *data;dma_addr_t data_dma;};static void usb_key_func(struct urb *urb){struct usb_mouse_as_key *uk = urb->context;static signed char key_val;int status;//保证鼠标左键的键值有变化再上报if( (key_val & 0x01) != (uk->data[1] & 0x01) ) { input_report_key(uk->dev, KEY_L , uk->data[1] & 0x01 );input_sync(uk->dev);} if( (key_val & 0x02) != (uk->data[1] & 0x02