色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

USB設備加載與卸除的通用方法介紹

英創信息技術 ? 作者:英創信息技術 ? 2019-09-25 17:09 ? 次閱讀

有時應用需要檢查USB設備的加載與卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問設備,但這樣的做法效率很低,并且實時性不高。本文將介紹更為通用的方法,通過系統API函數RequestDeviceNotifications,讀取設備消息,獲得設備加載及移除的消息。

查找設備IClass值

每個USB設備都有一個IClass值,相當于在系統里的編號,IClass值可以通過查詢板子注冊表獲得。以U盤為例:

USB設備加載與卸除的通用方法介紹

如圖,[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers]下存有所有USB設備類型的信息。Mass_Storage_Class即U盤的IClass值為{A4E7EDDA-E575-4252-9D6B-4195D48BB865}

用代碼表示即

GUID guid = { 0xA4E7EDDA, 0xE575, 0x4252, { 0x9D, 0x6B, 0x41, 0x95, 0xD4, 0x8B, 0xB8, 0x65 } };

調用API監聽設備消息

監聽流程如下:

創建消息隊列->綁定設備和消息隊列->讀取消息隊列

以U盤為例,代碼如下

MSGQUEUEOPTIONS msgopts;

//{A4E7EDDA-E575-4252-9D6B-4195D48BB865} 這個是USB storage的

GUID guid = { 0xA4E7EDDA, 0xE575, 0x4252, { 0x9D, 0x6B, 0x41, 0x95, 0xD4, 0x8B, 0xB8, 0x65 } };

msgopts.dwSize = sizeof(MSGQUEUEOPTIONS);

msgopts.dwFlags = 0;

msgopts.dwMaxMessages = 10; //?

msgopts.cbMaxMessage = sizeof(MYDEV);

msgopts.bReadAccess = TRUE;

HANDLE m_hReadMsgQ = CreateMsgQueue(NULL, &msgopts);

HANDLE hNotify;

DWORD ret;

hNotify = RequestDeviceNotifications(&guid, m_hReadMsgQ, TRUE);

flags = 0;

size = 0;

//while(true){

ret = WaitForSingleObject(m_hReadMsgQ, INFINITE);

if(ret == WAIT_OBJECT_0)

{

while (ReadMsgQueue(m_hReadMsgQ, &detail, sizeof(detail), &size, 1, &flags) == TRUE) //參數“1”表示1ms超時

{

if (detail.d.fAttached)

{

wprintf(L"%s %s,f=0x%x\r\n", detail.d.szName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

}

Else

{

wprintf(L"%s %s,f=0x%x\r\n", detail.d.szName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

}// if (detail.d.fAttached)

}//while

}//if(ret == WAIT_OBJECT_0)

//}while(true)

CloseMsgQueue(m_hReadMsgQ);

注意:如果是U盤,這里讀到的detail.d.szName是U盤在驅動中的名稱,如“DSK1”,并非U盤盤符。

消息隊列里讀到的消息包括已加載設備的加載消息。

根據設備加載消息獲得準確的設備信息

以U盤為例,它的設備類型為“DSK”,而SD卡,NANDFLASH的設備類型也是DSK,所以從設備消息里讀出設備名如“DSK1”、“DSK2”后并不能直觀確定哪個是U盤的設備名。

這時可以調用存儲器相關API函數OpenStore根據設備名,查詢U盤盤符等信息。

必要的頭文件及lib庫

#include "Storemgr.h"

#pragma comment(lib,"Storeapi.lib")

封裝OpenStore函數

增加超時是有必要的,因為設備加載消息來得更快,可能存儲設備還沒完全加載好。最長可能慢1ms,所以稍加延時即可。

HANDLE WINAPI OpenStoreEx(LPCTSTR szDeviceName, DWORD timeout = 3)

{

HANDLE hStore;

int i;

for(i=0;i

{

hStore = OpenStore(szDeviceName);

if (hStore != INVALID_HANDLE_VALUE)

{

break;;

}

Sleep(1);

}

return hStore;

}

獲得詳細信息

GetStoreInfo(hStore, &StoreInfo);

//if(wcscmp(StoreInfo.szStoreName, L"SD Memory Card") == 0) //判斷是SD卡

//else if(wcscmp(StoreInfo.szStoreName, L"NANDFS") == 0) //判斷是NandFlash

//else if (wcscmp(StoreInfo.szStoreName, L"USB Hard Disk Drive") == 0) //判斷是U盤

wprintf(L"%s %s %s,f=0x%x\r\n", detail.d.szName, StoreInfo.szStoreName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

用鏈表存儲設備信息

在U盤加載時,可以通過訪問存儲驅動API來查詢設備信息。但是當設備移除后,設備信息就不存在于驅動中了,所以用OpenStore和GetStoreInfo就無法查到已移除的設備信息了。

想要知道移除的設備詳細信息,就只有在加載的時候將信息存在數據結構中。這樣在移除時,通過查詢數據結構中的數據,就可以獲得設備詳細信息了。

數據結構根據實際需求,使用數組,鏈表,MAP,都可以。英創對客戶提供一份使用單向鏈表實現的例程。

其它設備

USB擴展串口模塊

英創主板擴展串口號均在10以上,所以通過設備名中的設備號,能很容易確定是否為USB擴展的串口設備。

USB打印機、攝像頭等

這些USB設備通過設備名即能確定是什么USB設備。

相關例程可以聯系英創工程師獲得。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7939

    瀏覽量

    264494
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35297
收藏 人收藏

    評論

    相關推薦

    檢查u***設備加載卸除方法

      有時應用需要檢查USB設備加載卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問
    發表于 01-04 14:34

    USB主機和設備介紹

    USB主機和設備USB總裁中最重要的就是USB主機和USB設備
    發表于 05-23 09:23

    Freescale USB大容量存儲設備引導加載器資料分享

    USB大容量存儲設備(MSD)引導加載程序
    發表于 12-09 07:28

    USB大容量存儲設備主機引導加載程序資料分享

    USB大容量存儲設備(MSD)主機引導加載程序
    發表于 12-09 06:07

    微軟 USB存儲設備通用驅動 for Win9X

    微軟 USB存儲設備通用驅動 for Win9X.zip
    發表于 01-26 14:39 ?5次下載

    創意USB設備介紹

    創意USB設備介紹 奇百怪的創意設備盤點又和大家見面了。繼前幾期推出了千奇百怪USB玩意兒盤點后,大家可謂大開了眼界。有網友來電詢問
    發表于 04-28 10:20 ?1228次閱讀

    通用串行總線USB設備的驅動

    從問題的由來、類驅動程序、通信協議、描述符、驅動開發等對 USB 的驅動進行分析和討論,提出USB 設備使用操作系統嵌入的通用類驅動程序成為趨勢。
    發表于 06-03 17:10 ?126次下載
    <b class='flag-5'>通用</b>串行總線<b class='flag-5'>USB</b><b class='flag-5'>設備</b>的驅動

    將DSP物理連接到USB主機上的USB引導加載程序

    TMS32 VC5506/C5507/C5509/C5509A數字信號處理器(DSP)的加載通過處理器通用串行總線(USB)外圍設備是標準的一部分。在
    發表于 04-25 10:49 ?8次下載
    將DSP物理連接到<b class='flag-5'>USB</b>主機上的<b class='flag-5'>USB</b>引導<b class='flag-5'>加載</b>程序

    如何通過系統API函數讀取USB設備消息,獲得設備加載及移除的消息

    有時應用需要檢查USB設備加載卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問
    發表于 08-31 17:52 ?5432次閱讀
    如何通過系統API函數讀取<b class='flag-5'>USB</b><b class='flag-5'>設備</b>消息,獲得<b class='flag-5'>設備</b><b class='flag-5'>加載</b>及移除的消息

    如何加載USB-Blaster驅動的詳細視頻資料說明

    本文檔的主要內容詳細介紹的是如何加載USB-Blaster驅動的詳細視頻資料說明。
    發表于 05-06 16:40 ?2次下載
    如何<b class='flag-5'>加載</b><b class='flag-5'>USB</b>-Blaster驅動的詳細視頻資料說明

    HMI畫面加載到HMI設備方法

    可將自己新建的項目加載到 HMI設備并在運行系統中執行。 為此,組態設備和 HMI設備之間必須建立連接。 如果您沒有使用 HMI設備,則
    的頭像 發表于 09-21 09:29 ?5812次閱讀
    HMI畫面<b class='flag-5'>加載</b>到HMI<b class='flag-5'>設備</b>的<b class='flag-5'>方法</b>

    通用圖像加載器教程及案例

    ) ImageLoader配置(線程執行器、下載器、解碼器、內存和磁盤緩存、顯示圖像選項等)的廣泛定制 每個顯示圖像調用都有很多定制選項(存根圖像、緩存開關、解碼選項、位圖處理和顯示等) 圖像緩存在內存和/或磁盤(設備的文件系統或SD卡) 監聽加載
    發表于 03-30 13:41 ?3次下載

    USB設備在Linux系統中的識別和加載過程

    不知道大家在學習Linux的時候有沒有過這樣的疑問,為什么我們通過同一個接口接入的不同USB設備,我們的電腦都可以識別到呢?為什么Linux電腦不會把鼠標識別成鍵盤呢?帶著這些疑問我們一起來看一下USB的識別和
    的頭像 發表于 05-10 11:53 ?4584次閱讀

    USB復合設備介紹

    電子發燒友網站提供《USB復合設備介紹.pdf》資料免費下載
    發表于 08-01 10:37 ?0次下載
    <b class='flag-5'>USB</b>復合<b class='flag-5'>設備</b><b class='flag-5'>介紹</b>

    用于MCU的USB?DFU引導加載程序

    電子發燒友網站提供《用于MCU的USB?DFU引導加載程序.pdf》資料免費下載
    發表于 10-27 14:23 ?1次下載
    用于MCU的<b class='flag-5'>USB</b>?DFU引導<b class='flag-5'>加載</b>程序
    主站蜘蛛池模板: 亚洲精品天堂在线观看| 亚洲乱妇88网| chinese野外男女free| 欧美xxxxx九色视频免费观看| 伊人亚洲AV久久无码精品| 久久777国产线看观看精品卜| 樱花草在线观看影院| 久久这里只有精品2| 97免费视频观看| 欧美乱妇狂野欧美在线视频| 在线播放免费人成毛片视频| 国产成人精品电影在线观看| 暖暖的视频完整视频免费韩国 | 免费看国产精品麻豆| 少妇的肉体AA片免费| 99午夜高清在线视频在观看| 久久视频在线视频观品15| 亚洲 欧美 视频 手机在线| YELLOW视频直播在线观看高清| 伦理在线影院伦理电影| 做a爱片的全过程| 蜜桃成人在线| 欧美人与禽zoz0性伦交app| 热久久国产欧美一区二区精品| 99爱在线观看| 妞干网手机免费视频| 99久久精品国内| 妞干网手机免费视频| 99视频在线免费观看| 欧美高清另类video| brazzers欧美最新版视频| 欧美精品一卡二卡| YELLOW日本动漫免费动漫| 青柠在线观看免费全集| 久久这里只有精品1| 爱啪国产精品视频在线| 一级毛片在线免费视频| 天天影视色欲 影视| 国产在线视频在线观看| 收集最新中文国产中文字幕| 国产午夜精AV在线麻豆|