久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團論壇 http://www.bjzhda.cn

曙海教育集團論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標題:詳解WinCE下USB Host驅動開發(2)

1樓
wangxinxin 發表于:2010-11-26 10:38:05
當用戶需要卸載USB Host設備驅動時,將會調用USBUnInstallDriver函數
BOOL USBUnInstallDriver();
    它與USBInstallDriver類似,不過是調用如下兩個函數
UnRegisterClientSettings
    BOOL UnRegisterClientSettings(LPCWSTR szUniqueDriverId, LPCWSTR szReserved, LPCUSB_DRIVER_SETTINGS lpDriverSettings);
    BOOL UnRegisterClientDriverID(LPCWSTR szUniqueDriverId);
    其中szUniqueDriverId是注冊時,使用的ID,szReserved保留,故設置為NULL,lpDriverSettings則是驅動程序設置信息。

例程如下:
BOOL USBUnInstallDriver()
{
 RETAILMSG(1,(TEXT("USBUninstallDriver\r\n")));
 BOOL fRet = FALSE;
 USB_DRIVER_SETTINGS DriverSettings;
 DriverSettings.dwCount = sizeof(DriverSettings);
 DriverSettings.dwVendorId = 0x10C4;
 DriverSettings.dwProductId = 0x0003;
 DriverSettings.dwReleaseNumber = USB_NO_INFO;
 
 DriverSettings.dwDeviceClass = USB_NO_INFO;
 DriverSettings.dwDeviceSubClass = USB_NO_INFO;
 DriverSettings.dwDeviceProtocol = USB_NO_INFO;
 
 DriverSettings.dwInterfaceClass = 0;
 DriverSettings.dwInterfaceSubClass = 0;
 DriverSettings.dwInterfaceProtocol = 0;
 
 fRet = UnRegisterClientSettings(L"USBTest", NULL, &DriverSettings);
 if(fRet) {
  fRet = UnRegisterClientDriverID(L"USBTest");
  if(!fRet)
   RETAILMSG(1,(TEXT("UnRegisterClientDriverID error\r\n")));
 } else
  RETAILMSG(1,(TEXT("UnRegisterClientSettings error\r\n")));
 return fRet;
}
    其中DriverSettings必須與USBInstallDriver的DriverSettings一致。
    回到原來的流程,WinCE注冊表中已經包含了驅動信息,WinCE系統自動查找注冊表,在找到設備對應鍵值的DLL后,將會調用該DLL的USBDeviceAttach函數。
BOOL USBDeviceAttach(
 USB_HANDLE hDevice,
 LPCUSB_FUNCS lpUsbFuncs,
 LPCUSB_INTERFACE lpInterface,
 LPCWSTR szUniqueDriverId,
 LPBOOL fAcceptControl,
 DWORD dwUnused)
    hDevice 設備句柄,操作USB設備時,需要使用該句柄
    lpUsbFuncs 指向一個包含各種USB操作的函數指針
    lpInterface USB接口信息,這里需要注意的是,如果在DriverSettings里dwInterfaceClass、dwInterfaceSubClass、dwInterfaceProtocol設置為USB_NO_INFO,則該指針為NULL 
    szUniqueDriverId 注冊設備ID
    fAcceptControl 該值被賦值為TRUE,表示該驅動能操作該設備。如果不能操作該設備,則“未能識別的USB設備”對話框會再次出現,要求用戶輸入驅動程序名稱
    dwUnused 未使用

    在該函數內,主要是做一些檢查,判斷是否能驅動設備,還有就是注冊USB事件通知回調函數,以及激活流驅動。對于檢查部分,這里不再詳細說明。

    首先,介紹一下激活流驅動。
    流驅動為應用程序提供了一個訪問設備的接口,利用該接口可以像訪問文件一樣訪問設備。USB設備同樣可以使用該接口來為應用程序提供支持。在注冊表的
HKEY_LOCAL_MACHINE\Drivers\BuiltIn鍵下,保存了各種WinCE內建流驅動程序的入口。這些驅動通過device.exe在系統啟動時被激活。像USB這樣的設備,只有插入時,才存在流
驅動接口,所以我們需要手動激活流驅動。激活流驅動的函數是:

    HANDLE ActivateDevice(LPCWSTR lpszDevKey, DWORD dwClientInfo);
lpszDevKey 字符串指明了流驅動所在注冊表的鍵。獲悉流驅動的人都知道,流驅動在注冊表中必須包含兩個鍵Prefix和Dll。

    流驅動中所有接口函數都有類似XXX_的前綴,而這個Prefix則指明XXX對應的字符串,如Prefix為COM,則流驅動包含如COM_Open、COM_Close、COM_Write、COM_Read這樣接口函數。Dll則說明了這些函數所在的動態鏈接庫。

在我的例子中存在如下的注冊表鍵:
[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\USBTest]
   "Prefix"="TST"
   "Dll"="MyUSBTest.dll"
    通過dwClientInfo,可以把參數間接傳給驅動的XXX_init。我們可以把hDevice、lpUsbFuncs、lpInterface這樣信息放置在一個結構體中,通過該函數傳遞給流驅動使用。
USB通知回調函數,可以用來判斷各種USB事件的發生,如USB拔出。當發生事件后,系統會根據注冊的回調函數做相應的處理,在USB設備拔出后,所要做的事情,就是卸載流驅動,并釋放占用的各種資源。

    注冊回調函數是一個包含在lpUsbFuncs中的函數指針:
LPUN_REGISTER_NOTIFICATION_ROUTINE lpUnRegisterNotificationRoutine

該函數的聲明如下:
typedef BOOL (* LPREGISTER_NOTIFICATION_ROUTINE)(
  USB_HANDLE hDevice,
  LPDEVICE_NOTIFY_ROUTINE lpNotifyRoutine,
  LPVOID lpvNotifyParameter
);
hDevice 設備句柄
lpNotifyRoutine 回調函數
lpvNotifyParameter 傳遞給回調函數的參數
在回調函數中卸載流驅動使用
BOOL DeactivateDevice(HANDLE hDevice);
其中,hDevice 傳入ActivateDevice時返回的句柄。
下面是具體的示例:
typedef struct {
 DWORD dwSize;
 USB_HANDLE hDevice,
 LPCUSB_FUNCS lpUsbFuncs,
 LPCUSB_INTERFACE lpInterface,
 HANDLE hStreamDevice;
} TESTUSBINFO, PTESTUSBINFO;
//回調函數
extern "C" BOOL USBDeviceNotifications(
 LPVOID lpvNotifyParameter,
 DWORD dwCode,
 LPDWORD *dwInfo1,
 LPDWORD *dwInfo2,
 LPDWORD *dwInfo3,
 LPDWORD *dwInfo4)
{
 if (dwCode == USB_CLOSE_DEVICE) {
  PTESTUSBINFO pDrv = (PDRVCONTEXT) lpvNotifyParameter;
  DeactivateDevice(pDrv->hStreamDevice); //卸載流驅動
  LocalFree(pDrv); //釋放資源
 }
 RETAILMSG(1,(TEXT("Free Driver Resources!\r\n")));
 return TRUE;
}
BOOL USBDeviceAttach(
 USB_HANDLE hDevice,
 LPCUSB_FUNCS lpUsbFuncs,
 LPCUSB_INTERFACE lpInterface,
 LPCWSTR szUniqueDriverId,
 LPBOOL fAcceptControl,
 DWORD dwUnused)
{
 RETAILMSG(1,(TEXT("USBDeviceAttach\r\n")));
 *fAcceptControl = FALSE;
 //顯示USB設備的一些信息
 if(lpInterface != NULL) {
  RETAILMSG(1,(TEXT("usbserialhost: DeviceAttach, IF %u, #EP:%u, Class:%u, Sub:%u, Prot:%u\r\n"),
   lpInterface->Descriptor.bInterfaceNumber,
   lpInterface->Descriptor.bNumEndpoints,
   lpInterface->Descriptor.bInterfaceClass,
   lpInterface->Descriptor.bInterfaceSubClass,
   lpInterface->Descriptor.bInterfaceProtocol));
  RETAILMSG(1,(TEXT("Endpoint 1:%u\r\n"),
   lpInterface->lpEndpoints[0].Descriptor.bmAttributes));
  RETAILMSG(1,(TEXT("Endpoint 2:%u\r\n"),
   lpInterface->lpEndpoints[1].Descriptor.bmAttributes));
  RETAILMSG(1,(TEXT("Endpoint 3:%u\r\n"),
   lpInterface->lpEndpoints[2].Descriptor.bmAttributes));
 }
 LPCUSB_DEVICE lpUsbDev = (lpUsbFuncs->lpGetDeviceInfo)(hDevice);
 if(!lpUsbDev)
 {
  RETAILMSG(1,(TEXT("Unable to get USB device!\r\n")));
  return FALSE;
 }
 //保存必要的信息供驅動程序其他部分使用
 PTESTUSBINFO pDrv = (PTESTUSBINFO)LocalAlloc (LPTR, sizeof (PTESTUSBINFO));
 pDrv->dwSize = sizeof (DRVCONTEXT);
 pDrv->hDevice = hDevice;
 pDrv->lpUsbFuncs = lpUsbFuncs;
 pDrv->lpInterface = lpInterface;
 //激活流驅動
 pDrv->hStreamDevice = ActivateDevice (L"Drivers\\USB\\ClientDrivers\\USBTest", (DWORD)pDrv);
 if (pDrv->hStreamDevice) {
  //注冊回調函數
  (*lpUsbFuncs->lpRegisterNotificationRoutine)(
   hDevice,
   USBDeviceNotifications,
   pDrv);
 } else {
  RETAILMSG(1, (TEXT("Can't activate stream device! rc=%d\r\n"), GetLastError()));
  LocalFree(pDrv);
  return FALSE;
 }
 //驅動可以操作該設備
 *fAcceptControl = TRUE;
 return TRUE;
}

    至此,USB Host端設備驅動程序所必須實現的功能都已經實現。并且和流驅動相連接。應用程序已經可以使用流驅動的接口來操作USB設備了。
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團
Powered By 曙海教育集團 Version 2.2
Processed in .01563 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产精品一区二区欧美黑人喷潮水| 欧美一区二区大片| 男女性色大片免费观看一区二区| 一个色妞综合视频在线观看| 相泽南亚洲一区二区在线播放 | 欧美日韩一区二区三区免费| 久久精品人人做人人爽人人| 欧美剧在线免费观看网站| 免费亚洲电影在线| 99热精品一区二区| 日本伊人精品一区二区三区观看方式| 国产精品国产三级国产普通话99 | 97av影视网在线观看| 精品亚洲一区二区三区四区五区高| 亚洲视频在线观看一区| 麻豆精品一区二区av白丝在线 | 精品久久久久久综合日本欧美| 欧美精品一区二区三区久久久| 玖玖九九国产精品| 亚洲精品一区二区三区四区五区| 国产一区二区免费看| 色综合欧美在线| 欧美一区1区三区3区公司 | 国产精品美女久久久久av爽李琼| 欧美一卡二卡三卡| 欧美福利电影网| 欧美日韩久久一区二区| 奇米影视在线99精品| 悠悠色在线精品| 国产经典欧美精品| 欧美日韩一区二区三区免费| 国内外成人免费视频| 动漫精品视频| 久久一留热品黄| 一本色道**综合亚洲精品蜜桃冫| y111111国产精品久久婷婷| 久久综合色之久久综合| 制服诱惑一区| 九九热久久66| 91精品福利在线一区二区三区| 99久久一区三区四区免费| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 亚洲电影激情视频网站| 国产亚洲一本大道中文在线| 伊人久久大香线蕉精品| 欧美中日韩免费视频| 成人性视频网站| 紧缚捆绑精品一区二区| 亚洲国产精品视频| 91精品国产综合久久香蕉的特点| 久久精品一区蜜桃臀影院| 99久免费精品视频在线观看| eeuss影院一区二区三区| 精品国产乱码久久久久久久久| 91久久人澡人人添人人爽欧美| 久久综合九色综合97婷婷女人 | 亚洲福利国产精品| bt欧美亚洲午夜电影天堂| 蜜桃在线一区二区三区| 国产传媒一区| 国产欧美日韩三区| 亚洲精品中文字幕乱码三区| 久久久不卡网国产精品二区| 麻豆91在线观看| 成人羞羞视频免费| 91久久国产最好的精华液| 欧美一区午夜视频在线观看| 91福利在线导航| 欧美电影免费提供在线观看| 日韩中文字幕亚洲一区二区va在线| 日韩欧美在线影院| 亚洲一区二区三区影院| 精品国产伦理网| 一区二区三区四区在线播放| 51精品国自产在线| 久久九九久精品国产免费直播| 中文字幕中文字幕在线一区| 国产精品99久久久久久久vr| 日韩一区在线看| 成人丝袜视频网| 亚洲视频导航| 中文字幕在线观看不卡| 美女精品一区二区| 欧美高清视频一区二区三区在线观看| 欧美一区二区人人喊爽| 91精品综合久久久久久| 亚洲成人免费电影| 国产伦精品一区二区三区免 | 欧洲一区二区三区在线| 在线不卡视频一区二区| 亚洲午夜电影在线观看| 欧美亚洲综合在线| 国产成人av电影免费在线观看| 亚洲3atv精品一区二区三区| 亚洲一区二区三区精品在线观看| 一区二区三区在线免费视频 | 日韩电影天堂视频一区二区| 国产精品国产三级国产普通话三级 | 亚洲视频电影在线| 久久艹中文字幕| 国产成人精品免费视频大全最热 | 欧美三级欧美一级| 天天综合天天综合色| 在线视频不卡国产| 免费观看91视频大全| 国产精品美女www爽爽爽| 色婷婷激情久久| 久久精品国产精品国产精品污| 国产在线国偷精品产拍免费yy| 欧美激情中文字幕一区二区| 91福利入口| 制服丝袜在线91| 欧美中日韩一区二区三区| 亚洲国产精品尤物yw在线观看| 欧美一区二区三区在线电影| 国产自产精品| 成人动漫中文字幕| 日韩av在线发布| 欧美成人a∨高清免费观看| 污视频在线免费观看一区二区三区| 国产精华液一区二区三区| 亚洲五码中文字幕| 久久嫩草精品久久久精品一| 欧美日韩国产不卡在线看| 视频在线观看一区| 日韩欧美国产一二三区| 亚洲精品在线免费| 91在线视频官网| 成人国产精品视频| 国产尤物一区二区| 一区二区三区中文字幕电影| 亚洲欧美国产一区二区| 成人在线看片| 久久久久成人黄色影片| 国产一区二区在线电影| 国产精品天天看| 亚洲精品久久久久久一区二区| 97精品电影院| 亚洲精品欧美二区三区中文字幕| 欧美电影一区二区三区| 国产一区二区视频在线免费观看| 亚洲福利一区二区三区| xvideos.蜜桃一区二区| 日韩一区二区三区免费看| 久久久精彩视频| 成人app下载| 国产精品一区不卡| 91免费视频网址| 风间由美久久久| 日本91福利区| 国产精品99久久久久久久女警 | 国产成人在线电影| 91九色在线观看| 日韩欧美亚洲日产国产| 亚洲精品日韩成人| 免费中文日韩| 国产女主播一区二区| 色综合天天综合在线视频| 草莓视频一区| 91丝袜呻吟高潮美腿白嫩在线观看| 中文字幕日韩精品久久| 在线成人av网站| 国产精品99久久久| 亚洲欧美激情小说另类| 亚洲国产精品人人做人人爽| 亚洲精品国产精品乱码不99| 国产午夜精品久久久久久久 | 99视频在线精品| 日韩欧美亚洲v片| 色综合色狠狠天天综合色| 不卡视频一区| 欧美污视频久久久| 欧美精品丝袜中出| 成人欧美一区二区三区1314| 国产精品系列在线| 国产欧美日韩三级| 美女一区二区在线观看| 国产一区欧美一区| 动漫精品视频| 欧美疯狂做受xxxx富婆| 久久精品网站免费观看| 2019国产精品| 亚洲精品高清在线观看| 国产精品资源网站| 国产呦系列欧美呦日韩呦| 色婷婷精品久久二区二区蜜臀av| 欧美三级网色| 国产日产亚洲精品系列| 久久九九99视频| 国产日韩欧美综合在线| 久久精品国产99国产精品| 国产偷久久久精品专区| 欧美tickle裸体挠脚心vk| 首页综合国产亚洲丝袜| 九九热在线视频观看这里只有精品| 国产69精品久久久久9999apgf| 69av一区二区三区| 亚洲国产精品麻豆| 国产精品免费在线 | 福利电影一区二区|