WinCE6.0 USB Host驅動載入流程詳解(一)
阿新 • • 發佈:2019-01-03
VOID GetUSBDVersion(LPDWORD lpdwMajorVersion, LPDWORD lpdwMinorVersion);
BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL UnRegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL RegisterClientSettings(LPCWSTR lpszDriverLibFile,
LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
LPCUSB_DRIVER_SETTINGS lpDriverSettings);
BOOL UnRegisterClientSettings(LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
LPCUSB_DRIVER_SETTINGS lpDriverSettings);
HKEY OpenClientRegistryKey(LPCWSTR szUniqueDriverId);
BOOL GetClientRegistryPath(LPWSTR szRegistryPath, DWORD dwRegPathUnit, LPCWSTR szUniqueDriverId); 可以看出上面幾個函式都是通過def檔案顯式匯出的。除此之外,usbdi.h中還有一個函式指標列表結構體_USB_FUNCS,裡面包含了USBD的另外一部分介面,是在def中沒有匯出的,通過函式指標結構體在驅動之間進行傳遞的。_USB_FUNCS中的函式指標的實體都在檔案usbddrv.cpp的檔案中,整個USB驅動只有一個_USB_FUNCS的全域性變數gc_UsbFuncs,它的宣告及初始化在usbd.c中。
USBD提供的主要介面函式歸類如下:
USBD的傳輸函式
IssueControlTransfer IssueBulkTransfer IssueInterruptTransfer IssueIsochTransfer
IsTransferComplete GetTransferStatus GetIsochResults AbortTransfer
CloseTransfer
USBD和USB裝置建立通訊管道的函式
OpenPipe AbortPipeTransfers ResetPipe ClosePipe
IsPipeHalted IsDefaultPipeHalted ResetDefaultPipe
USBD針對總線上資料打包的函式
GetFrameNumber GetFrameLength TakeFrameLengthControl
SetFrameLength ReleaseFrameLengthControl
USBD和USB裝置進行互動的函式
OpenClientRegistryKey RegisterNotificationRoutine UnRegisterNotificationRoutine
GetUSBDVersion LoadGenericInterfaceDriver TranslateStringDescr
FindInterface RegisterClientDriverID UnRegisterClientDriverID
GetDeviceInfo RegisterClientSettings UnRegisterClientSettings
BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL UnRegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL RegisterClientSettings(LPCWSTR lpszDriverLibFile,
LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
LPCUSB_DRIVER_SETTINGS lpDriverSettings);
BOOL UnRegisterClientSettings(LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
LPCUSB_DRIVER_SETTINGS lpDriverSettings);
HKEY OpenClientRegistryKey(LPCWSTR szUniqueDriverId);
BOOL GetClientRegistryPath(LPWSTR szRegistryPath, DWORD dwRegPathUnit, LPCWSTR szUniqueDriverId); 可以看出上面幾個函式都是通過def檔案顯式匯出的。除此之外,usbdi.h中還有一個函式指標列表結構體_USB_FUNCS,裡面包含了USBD的另外一部分介面,是在def中沒有匯出的,通過函式指標結構體在驅動之間進行傳遞的。_USB_FUNCS中的函式指標的實體都在檔案usbddrv.cpp的檔案中,整個USB驅動只有一個_USB_FUNCS的全域性變數gc_UsbFuncs,它的宣告及初始化在usbd.c中。