USB接口的游戏手柄和键盘一样,称之为USB HID设备,在CE 系统已经有了 键盘/鼠标 两种HID 设备的驱动。
在public\common\oak\drivers\usb 下面已经有了两种设备的驱动程序源码。在该文件夹下,分成了CLASS,CLIENTS,COMMON,HCD,INC,USBD 几个文件夹,其中INC 和COMMON 里面有一个lock.c 的程序,这个程序很明显是将要被其他USB 有关的驱动程序所使用的一个锁,代码很简单,只是一个类似临界区的封装体,可以保护多线程对同一内存区域的读写访问,可以先不去管它。CLIENTS 文件夹可能最初微软的开发人员是用来放置设备驱动程序的,但是后来没有放,而发布的时候也没有删除,所以遗留了下来,里面是个空的文件夹,所以没用实际用处。USBD 和HCD 是前述的底层驱动,里面含有很多子文件夹和程序,由于我们只针对USB 设备驱动,因此对这两部分不做分析,有兴趣的朋友可以自己去了解. 重点就在CLASS 文件夹了,展开来看,里面又包含了COMMON、HID、PRINTER、STORAGE 几个文件夹,同样,COMMON 里面存放的源程序是为HID、PRINTER、STORAGE所共有的。HID 是USB 输入设备如键盘/鼠标的样例驱动程序,PRINTER 是USB 打印机的样例驱动程序,STORAGE是USB 存储设备如U 盘的样例程序.
在HID 下有CLIENTS 和HIDCLASS 两个文件夹. HIDCLASS 里有所有HID 设备驱动的共用代码(MDD 和PDD).HID设备驱动的注册表在[HKEY_LOCAL_MACHINE\Drivers\HID\LoadClients\Default\Default]下面,已经存在的设备驱动为鼠标[1_2\Mouse] [1_6\KEYPAD],这里面的数字到底是什么含义,我们来看一下下面几个宏定义就知道了:
#define HID_USAGE_PAGE_GENERIC ((USAGE)0X01)
|
接下来就是要实现一个HID设备的驱动,这里至少要实现两个函数:HIDDeviceAttach和HIDDeviceNotifications。当HID设备插入时,系统会调用HIDDeviceAttach来加载相关程序,可以在加载的时候创建一个线程来接受键盘按键,并发送键盘事件,使用keybd_event或者SendInput相关函数。当然也可以将驱动实现为普通的流接口设备驱动,实现XXX_Init,XXX_Open,XXX_Read,XXX_Write等相关函数,并添加注册表,那么在应用层中就可以使用CreateFile来实现USB HID设备的读写功能了。例如我们现在使用的USB KEY等加密设备,大多也是作为一个HID设备来加载的。
相关驱动下载:
|
相关热门文章
给主人留下些什么吧!~~
chinaunix网友2011-05-30 14:36:21
老大,我的PDA是纯PPC,pocket pc 2003,不是手机WM PPC。我的注册表项HKEY_LOCAL_MACHINE\Drivers里面并没有HID,包含LoadClients\Default\Default项的注册表项是一个名为USB的项,我手工建HID不能加载这个驱动,然后在USB的default里面照你的注册表手工加入还是不行。dll文件已经放到windows里面了,该怎样才能加载了。我安装了一个网上下载的USB键盘、鼠标驱动,却是正常使用的,唯独USB手柄不能用,是个仿PS的简单手柄,XP无驱型。
chinaunix网友2011-03-08 20:28:19
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com
评论热议