英創(chuàng)公司ARM9系列工控主板預(yù)裝正版WinCE操作系統(tǒng),提供標(biāo)準(zhǔn)USB接口,本文介紹如何在應(yīng)用程序中判斷USB存儲(chǔ)設(shè)備的插入和移出操作。
方法一:思路是在應(yīng)用程序創(chuàng)建一個(gè)線程,在線程里循環(huán)定時(shí)查詢系統(tǒng)中是否存在USB存儲(chǔ)設(shè)備,可以通過(guò)讀取系統(tǒng)注冊(cè)表或調(diào)用 API函數(shù)來(lái)實(shí)現(xiàn),下面是通過(guò)API函數(shù)查詢USB存儲(chǔ)設(shè)備的程序片段。
STOREINFO StoreInfo;
hDevice = FindFirstStore( &StoreInfo );
if( INVALID_HANDLE_VALUE != hDevice )
{
do
{
// 判斷是否為USB存儲(chǔ)設(shè)備
if( 0 == _tcscmp( StoreInfo.szStoreName, _T(‘USB Hard Disk Drive’) ) )
{
// 如果查找到USB存儲(chǔ)設(shè)備,則打印信息到調(diào)試串口
RETAILMSG( 1, (TEXT(‘USB%shas been inserted\n’ ) ,
StoreInfo.szDeviceName ));
}
}while( FindNextStore( hDevice, &StoreInfo ) );
}
方法二:上面的方法在效率和實(shí)時(shí)性方面都不能令人滿意,通常只用作檢測(cè)U盤(pán)是否已接入到系統(tǒng)中,如果要實(shí)時(shí)的檢測(cè)U盤(pán)的插入,移出操作,推薦使用下面提出的方法。
當(dāng)USB設(shè)備插入或從系統(tǒng)中移出時(shí),系統(tǒng)會(huì)產(chǎn)生WM_DEVICECHANGE消息,應(yīng)用程序只需要處理這個(gè)消息就可以方便的判斷U盤(pán)的插入和移出操作,我們需要關(guān)心WM_DEVICECHANGE消息wParam參數(shù)的兩個(gè)取值:
DBT_DEVICEARRIVAL // 設(shè)備插入
DBT_DEVICEREMOVECOMPLETE // 設(shè)備移出
(WM_DEVICECHANGE消息更詳細(xì)的信息,請(qǐng)參考MSDN WM_DEVICECHANGE Message http://msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx)
值得注意的是當(dāng)網(wǎng)絡(luò)設(shè)備插入和移出時(shí),也會(huì)觸發(fā)這個(gè)消息,這樣就會(huì)對(duì)判斷是否為USB設(shè)備產(chǎn)生影響,不過(guò),在WM_DEVICECHANGE消息的lParam參數(shù)中保存了設(shè)備的相關(guān)信息,對(duì)設(shè)備類(lèi)型進(jìn)行判斷,只需要獲得DEV_BROADCAST_VOLUME結(jié)構(gòu)中的dbcv_flags的值,當(dāng)它的值為DBTF_INET時(shí),表示產(chǎn)生此消息的設(shè)備是網(wǎng)絡(luò)設(shè)備,它的值等于DBTF_MEDIA時(shí),表示產(chǎn)生消息的是媒體設(shè)備。對(duì)WM_DEVICECHANGE消息了解后,就可以利用它,在程序中實(shí)時(shí)檢測(cè)USB設(shè)備的插入和移出了。下面是節(jié)略的程序片段。
// 窗口回調(diào)函數(shù)中,當(dāng)系統(tǒng)消息為WM_DEVICECHANGE時(shí),調(diào)用此函數(shù)
LRESULT USBDetect( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
PDEV_BROADCAST_VOLUME dbvDev = (PDEV_BROADCAST_VOLUME)lParam;
if( dbvDev-》dbcv_flags & DBTF_MEDIA ) // 判斷是否為USB存儲(chǔ)設(shè)備
{
switch( wParam )
{
case DBT_DEVICEARRIVAL: // USB存儲(chǔ)設(shè)備插入
RETAILMSG(1, (TEXT( ‘USBDisk%c is inserted\n’), dbvDev-》dbcv_name[0]));
break;
case DBT_DEVICEREMOVECOMPLETE: // USB存儲(chǔ)設(shè)備移出
RETAILMSG( 1, (TEXT( ‘USBDisk%c is remove\n’), dbvDev-》dbcv_name[0] ));
break;
}
}
return 0;
}
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6100瀏覽量
36297
發(fā)布評(píng)論請(qǐng)先 登錄
光電測(cè)徑儀在自動(dòng)檢測(cè)中的應(yīng)用
用于自動(dòng)檢測(cè)的板測(cè)寬儀
伺服電機(jī)位置自動(dòng)檢測(cè)霍爾元件
請(qǐng)問(wèn)怎么實(shí)現(xiàn)插孔自動(dòng)檢測(cè)電路的設(shè)計(jì)?
自然圖像中的對(duì)象自動(dòng)檢測(cè)和提取
自動(dòng)檢測(cè)技術(shù)課件
雷達(dá)故障自動(dòng)檢測(cè)系統(tǒng)
自動(dòng)檢測(cè)系統(tǒng)原理應(yīng)用和發(fā)展?fàn)顩r的研究

CAN總線在糧情自動(dòng)檢測(cè)系統(tǒng)中的應(yīng)用

Maxim高速USB模擬開(kāi)關(guān),可對(duì)便攜式設(shè)備進(jìn)行自動(dòng)檢測(cè)
基于PXI和SCXI板卡系統(tǒng)的空調(diào)自動(dòng)檢測(cè)和故障診斷

WinCE系統(tǒng)中USB設(shè)備自動(dòng)檢測(cè)實(shí)現(xiàn)
基于USB和LabVIEW的ECU自動(dòng)檢測(cè)系統(tǒng)的設(shè)計(jì)
英創(chuàng)信息技術(shù)WinCE主板與STM32多功能模塊通訊介紹
英創(chuàng)信息技術(shù)WinCE文件系統(tǒng)測(cè)試及故障分析簡(jiǎn)介

評(píng)論