0,前言:
1, 本篇文章只讲wince下的usb host驱动,并深入解析HID驱动。本博客的目的并不是只是为了讲怎么写驱动, 更重要的是:
1,了解wince驱动的架构。
2,学习微软的写作方法,如何去架构一个非常复杂的程序(USB驱动的确是有点复杂,但是微软的代码写的非常的具有条理,是不可多得的学习资料)。
2,学习wince usb驱动,必须对usb的协议有一定了解,可以看看《USB2.0 硬件设计(第2版)》
1,USB驱动的总体结构
这个方面的资料很多,其实也很简单,其实从总体来看,不管细节,USB驱动就那么三层架构而已。如下图:
由于我们只专注于usb host端的驱动,所以只要看左边就可以了,最底层是硬件,硬件上面的第一层是HCD驱动,第二层是USBD,再上面就对应不同的usb设备来,print对应usb打印机,Mass Storage对应U盘,HID对应USB鼠标,USB键盘和其他符合HID设备,HID并不是一个驱动,而是一个类别,所以USB鼠标,USB键盘都要单独的驱动。
下面我们从最底层往上来学习USB驱动。
2,USB Host Controller Hardware (HC 硬件)
就如同串口一样,USB需要有硬件来支持,串口有RS232,RS485……,USB host controller 有OHCI,UHCI……,这个没什么好说的,到底不同那个的硬件有什么不同的特性,这里就不讨论了。赶紧看 下一小节。
3,USB Host Controller Driver(HCD驱动)
BOOL HcdAttach(LPVOID lpvHcd, LPCHCD_FUNCS lpHcdFuncs, LPLPVOID lppvContext);BOOL HcdDetach(LPVOID lpvContext);BOOL HcdDeviceAttached(LPVOID lpvContext, UINT iDevice, UINT iEndpointZero,LPCUSB_DEVICE lpDeviceInfo, LPLPVOID lppvDeviceDetach);