无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁
  P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場檢測儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺
詳解WinCE下USB Host驅(qū)動(dòng)開發(fā)(2)
深圳市盈鵬飛科技有限公司
收藏本文     查看收藏
    當(dāng)用戶需要卸載USB Host設(shè)備驅(qū)動(dòng)時(shí),將會(huì)調(diào)用USBUnInstallDriver函數(shù)
BOOL USBUnInstallDriver();
    它與USBInstallDriver類似,不過是調(diào)用如下兩個(gè)函數(shù)
UnRegisterClientSettings
    BOOL UnRegisterClientSettings(LPCWSTR szUniqueDriverId, LPCWSTR szReserved, LPCUSB_DRIVER_SETTINGS lpDriverSettings);
    BOOL UnRegisterClientDriverID(LPCWSTR szUniqueDriverId);
    其中szUniqueDriverId是注冊時(shí),使用的ID,szReserved保留,故設(shè)置為NULL,lpDriverSettings則是驅(qū)動(dòng)程序設(shè)置信息。

例程如下:
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注冊表中已經(jīng)包含了驅(qū)動(dòng)信息,WinCE系統(tǒng)自動(dòng)查找注冊表,在找到設(shè)備對應(yīng)鍵值的DLL后,將會(huì)調(diào)用該DLL的USBDeviceAttach函數(shù)。
BOOL USBDeviceAttach(
 USB_HANDLE hDevice,
 LPCUSB_FUNCS lpUsbFuncs,
 LPCUSB_INTERFACE lpInterface,
 LPCWSTR szUniqueDriverId,
 LPBOOL fAcceptControl,
 DWORD dwUnused)
    hDevice 設(shè)備句柄,操作USB設(shè)備時(shí),需要使用該句柄
    lpUsbFuncs 指向一個(gè)包含各種USB操作的函數(shù)指針
    lpInterface USB接口信息,這里需要注意的是,如果在DriverSettings里dwInterfaceClass、dwInterfaceSubClass、dwInterfaceProtocol設(shè)置為USB_NO_INFO,則該指針為NULL 
    szUniqueDriverId 注冊設(shè)備ID
    fAcceptControl 該值被賦值為TRUE,表示該驅(qū)動(dòng)能操作該設(shè)備。如果不能操作該設(shè)備,則“未能識別的USB設(shè)備”對話框會(huì)再次出現(xiàn),要求用戶輸入驅(qū)動(dòng)程序名稱
    dwUnused 未使用

    在該函數(shù)內(nèi),主要是做一些檢查,判斷是否能驅(qū)動(dòng)設(shè)備,還有就是注冊USB事件通知回調(diào)函數(shù),以及激活流驅(qū)動(dòng)。對于檢查部分,這里不再詳細(xì)說明。

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

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

    流驅(qū)動(dòng)中所有接口函數(shù)都有類似XXX_的前綴,而這個(gè)Prefix則指明XXX對應(yīng)的字符串,如Prefix為COM,則流驅(qū)動(dòng)包含如COM_Open、COM_Close、COM_Write、COM_Read這樣接口函數(shù)。Dll則說明了這些函數(shù)所在的動(dòng)態(tài)鏈接庫。

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

    注冊回調(diào)函數(shù)是一個(gè)包含在lpUsbFuncs中的函數(shù)指針:
LPUN_REGISTER_NOTIFICATION_ROUTINE lpUnRegisterNotificationRoutine

該函數(shù)的聲明如下:
typedef BOOL (* LPREGISTER_NOTIFICATION_ROUTINE)(
  USB_HANDLE hDevice,
  LPDEVICE_NOTIFY_ROUTINE lpNotifyRoutine,
  LPVOID lpvNotifyParameter
);
hDevice 設(shè)備句柄
lpNotifyRoutine 回調(diào)函數(shù)
lpvNotifyParameter 傳遞給回調(diào)函數(shù)的參數(shù)
在回調(diào)函數(shù)中卸載流驅(qū)動(dòng)使用
BOOL DeactivateDevice(HANDLE hDevice);
其中,hDevice 傳入ActivateDevice時(shí)返回的句柄。
下面是具體的示例:
typedef struct {
 DWORD dwSize;
 USB_HANDLE hDevice,
 LPCUSB_FUNCS lpUsbFuncs,
 LPCUSB_INTERFACE lpInterface,
 HANDLE hStreamDevice;
} TESTUSBINFO, PTESTUSBINFO;
//回調(diào)函數(shù)
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); //卸載流驅(qū)動(dòng)
  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設(shè)備的一些信息
 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;
 }
 //保存必要的信息供驅(qū)動(dòng)程序其他部分使用
 PTESTUSBINFO pDrv = (PTESTUSBINFO)LocalAlloc (LPTR, sizeof (PTESTUSBINFO));
 pDrv->dwSize = sizeof (DRVCONTEXT);
 pDrv->hDevice = hDevice;
 pDrv->lpUsbFuncs = lpUsbFuncs;
 pDrv->lpInterface = lpInterface;
 //激活流驅(qū)動(dòng)
 pDrv->hStreamDevice = ActivateDevice (L"Drivers\\USB\\ClientDrivers\\USBTest", (DWORD)pDrv);
 if (pDrv->hStreamDevice) {
  //注冊回調(diào)函數(shù)
  (*lpUsbFuncs->lpRegisterNotificationRoutine)(
   hDevice,
   USBDeviceNotifications,
   pDrv);
 } else {
  RETAILMSG(1, (TEXT("Can't activate stream device! rc=%d\r\n"), GetLastError()));
  LocalFree(pDrv);
  return FALSE;
 }
 //驅(qū)動(dòng)可以操作該設(shè)備
 *fAcceptControl = TRUE;
 return TRUE;
}

    至此,USB Host端設(shè)備驅(qū)動(dòng)程序所必須實(shí)現(xiàn)的功能都已經(jīng)實(shí)現(xiàn)。并且和流驅(qū)動(dòng)相連接。應(yīng)用程序已經(jīng)可以使用流驅(qū)動(dòng)的接口來操作USB設(shè)備了。
 

 

狀 態(tài): 離線

公司簡介
產(chǎn)品目錄

公司名稱: 深圳市盈鵬飛科技有限公司
聯(lián) 系 人: 李希崗
電  話: 0086-13602511395
傳  真: 0755-82523175,82523176-819
地  址: 深圳市福田區(qū)福明路40號,雷圳大廈12A06
郵  編: 518033
主  頁:
 
該廠商相關(guān)技術(shù)文摘:
WINCE下如何添加CPL應(yīng)用程序
Wince sqlite3移植
EAC-C925開機(jī)畫面實(shí)現(xiàn)手冊
英貝德推出單板機(jī)產(chǎn)品軟件升級解決方案(WinCE篇)
EP9315電路設(shè)計(jì)要點(diǎn)
Linux下創(chuàng)建和使用RamDisk的技巧
英貝德科技移植PPP大揭秘:PPP撥號在ARM2410平臺上的移植
AT91SAM9263在人機(jī)界面方面的應(yīng)用
詳解WinCE下USB Host驅(qū)動(dòng)開發(fā)(1)
WinCE驅(qū)動(dòng)中設(shè)備中斷的處理
Linux內(nèi)核學(xué)習(xí)之BogoMIPS值的計(jì)算
更多文摘...
立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
用戶名: 密碼: 免費(fèi)注冊為中華工控網(wǎng)會(huì)員
請留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
日本v片在线高清不卡在线观看| 欧美精品三级在线| 欧美日韩国产传媒| 日韩一区二区三区免费视频| 日韩欧美二区| 国产美女久久| 亚洲一区欧美| 日韩一区三区| a国产在线视频| 国产欧美日韩精品一区二区免费 | 日韩在线观看一区| 久久国产欧美日韩精品| 欧美午夜不卡| 亚洲成人精品| 极品av在线| 高清在线一区| 日韩av专区| 91欧美日韩| 国产一区二区三区成人欧美日韩在线观看 | 欧美久久久网站| 亚洲少妇诱惑| 亚洲激情中文| 午夜精品网站| 欧美日韩激情在线一区二区三区| 国产在线|日韩| 亚洲不卡系列| 亚洲深夜视频| 久久国产中文字幕| 亚洲网站视频| 99在线精品免费视频九九视| 亚洲精品网址| 久久性天堂网| 欧美偷窥清纯综合图区| 久久av电影| 国产黄大片在线观看| av资源亚洲| 欧美高清一区| 美国欧美日韩国产在线播放| 日韩一区二区三区在线看| 国产精品一级在线观看| 精品国产乱码久久久久久樱花| 免费在线亚洲欧美| 日韩av首页| 一区二区三区四区日韩| 国产精品色在线网站| 精品久久久久中文字幕小说| 久久久夜精品| 免费看精品久久片| 国产精品va| 国产中文一区| 欧美一区免费| yellow在线观看网址| 宅男在线一区| 欧美一区网站| 91精品国产自产在线观看永久∴| 石原莉奈一区二区三区在线观看| 免费看精品久久片| 精品国产亚洲日本| 午夜日韩福利| 日本午夜精品| 日本а中文在线天堂| 亚洲欧洲一区二区天堂久久| 欧美一区二区三区免费看| 亚洲黄色免费av| 四虎精品永久免费| 天堂中文av在线资源库| 首页国产欧美日韩丝袜| 精品免费视频| 免费日本视频一区| а√天堂中文在线资源8| 夜久久久久久| 国产高清视频一区二区| 精品欧美久久| 色综合五月天| 免费人成在线不卡| 午夜精品成人av| 日本国产欧美| 久久精品影视| 国产亚洲欧美日韩精品一区二区三区| 97人人精品| 国产欧美三级| 美女黄网久久| 久久中文视频| 久久久久伊人| 欧美日韩1区2区3区| 婷婷综合五月| 久久中文精品| 日韩高清在线不卡| 亚洲免费激情| 久久免费国产| 日韩久久精品| 国产66精品| 欧美国产另类| 欧美日本久久| 婷婷视频一区二区三区| 免费av一区| 日韩欧美视频专区| 国产一区二区三区久久| 麻豆精品在线观看| 青草国产精品| 日韩中出av| 在线日韩成人| 伊人精品久久| 亚洲一区导航| 婷婷综合福利| 日韩三级精品| 日日夜夜免费精品| 日韩avvvv在线播放| 日韩美女国产精品| 日本免费新一区视频| 日韩国产在线观看| 日本不卡视频一二三区| 日韩精品一区第一页| 国产农村妇女精品一区二区| 99热精品在线| 丝袜美腿成人在线| 丝袜a∨在线一区二区三区不卡| 国产高清一区二区| 亚洲女同一区| 亚洲精品精选| 国产日韩在线观看视频| 久久99影视| 97精品一区二区| 久久青草久久| 中文日韩在线| 婷婷五月色综合香五月| 国产日韩一区二区三区在线播放| 国产伦乱精品| 日韩国产激情| 日韩一区二区久久| 在线观看视频免费一区二区三区| 亚洲专区视频| 免费精品一区| 中文在线а√天堂| 女主播福利一区| 亚洲不卡视频| 精品国产乱码久久久| 999国产精品永久免费视频app| 婷婷综合亚洲| 国产精品蜜月aⅴ在线| 日韩国产综合| 蜜臀91精品一区二区三区| 国产午夜久久av| 亚洲成人国产| 国产日韩三级| 九九综合九九| 国产精品欧美在线观看| 日产精品一区| 亚洲日本欧美| 日韩精品dvd| 日韩一区免费| 久久婷婷亚洲| 国产探花在线精品一区二区| 中文字幕在线免费观看视频| 99国内精品| 日韩av专区| 日韩视频1区| 国产超碰精品| 奇米色欧美一区二区三区| av在线日韩| 欧美国产专区| 先锋影音久久久| 免费在线亚洲欧美| 黄色av日韩| 成人在线免费观看91| 快she精品国产999| 欧美三级精品| 国产毛片一区二区三区| 欧美日韩国产高清| 国产精品久久观看| 青草国产精品久久久久久| 一级欧洲+日本+国产| 国产成人久久精品一区二区三区| 亚洲国产日韩欧美在线| jizzjizz中国精品麻豆| 欧美伊人久久| 亚洲欧美日本视频在线观看| 国产91在线精品| 久久国内精品视频| 色8久久久久| 丝瓜av网站精品一区二区| 亚洲精品.com| 里番精品3d一二三区| 亚洲欧洲av| 老牛国产精品一区的观看方式| 亚洲91视频| 久久精品91| 精品国产欧美日韩| 麻豆国产精品一区二区三区| 日韩精品免费视频一区二区三区 | 国产精品玖玖玖在线资源| 日韩午夜在线| 久久久精品久久久久久96 | 国产精品对白久久久久粗| 99国产精品自拍| 欧美 日韩 国产一区二区在线视频 | 激情亚洲影院在线观看| 久久中文精品| 国产精品777777在线播放| 欧美日韩一区二区三区四区在线观看 |