www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 電源 > 功率器件
[導(dǎo)讀]HID 設(shè)備研發(fā)和使用中所面臨的重要問(wèn)題之一是設(shè)備與主機(jī)應(yīng)用程序的通訊.文中以視頻編輯專(zhuān)用HID 設(shè)備Wave Panel 為基礎(chǔ),首先簡(jiǎn)要介紹了HID 設(shè)備的性能特點(diǎn)和Windows 環(huán)境下的HID 通訊機(jī)制,在此基礎(chǔ)上設(shè)計(jì)出一個(gè)實(shí)用的HID 設(shè)備通訊接口,該通訊接口利用相關(guān)Windows API 函數(shù)實(shí)現(xiàn)對(duì)HID 設(shè)備的識(shí)別.打開(kāi)和關(guān)閉,并以異步模式完成設(shè)備與主機(jī)應(yīng)用程序的雙向通訊過(guò)程,最后在Wave Panel 對(duì)該接口進(jìn)行了編程實(shí)驗(yàn).實(shí)驗(yàn)結(jié)果證明該接口的通用性較好,能夠較好地實(shí)現(xiàn)HID 設(shè)備與主機(jī)

0 引 言

HID(Human Interface Device,人機(jī)接口設(shè)備)是一類(lèi)低速USB 設(shè)備,典型的HID 設(shè)備有鍵盤(pán).鼠標(biāo).游戲桿等.相對(duì)于U 盤(pán).打印機(jī)等高速USB 設(shè)備,HID 設(shè)備具有使用方便.響應(yīng)迅速.研發(fā)成本低廉等優(yōu)點(diǎn),其應(yīng)用領(lǐng)域十分廣泛.當(dāng)前HID 設(shè)備正在向?qū)S没较蚩焖侔l(fā)展 .

Wave Panel 是蘋(píng)果公司研發(fā)的視頻色彩編輯軟件Color 支持一型專(zhuān)用的數(shù)據(jù)輸入和顯示HID 設(shè)備,該設(shè)備面板上設(shè)置有按鍵.解碼器和二維跟蹤球三種控制器,能夠快捷.精確地對(duì)各類(lèi)視頻色彩參數(shù)進(jìn)行設(shè)置,并將控制和狀態(tài)信息同步顯示在設(shè)備微型顯示屏上,從而改變了傳統(tǒng)“鼠標(biāo)+鍵盤(pán)”的視頻編輯軟件控制方式.Wave Panel 沒(méi)有提供Windows 環(huán)境下與應(yīng)用程序通訊的功能,因此可基于Wave Panel 設(shè)計(jì)一個(gè)功能完備.通用性強(qiáng)的通訊接口,并加以驗(yàn)證.這對(duì)企業(yè)和科研機(jī)構(gòu)根據(jù)實(shí)際需求靈活地配備和控制專(zhuān)用HID 設(shè)備有很大幫助.

1 Wave Panel 的性能特征

HID 設(shè)備除滿足USB 標(biāo)準(zhǔn)外,還具備一些與人機(jī)交互密切相關(guān)的特點(diǎn),主要包括:

1)通常使用控制方式或中斷方式通訊.兩種傳輸方式的區(qū)別在于控制方式適用于對(duì)延遲沒(méi)有特別限制的數(shù)據(jù),而中斷方式適用于低延遲.周期性的數(shù)據(jù) .Wave Panel 的數(shù)據(jù)傳輸方式為中斷方式.

2)單次傳輸?shù)臄?shù)據(jù)量小,且這些數(shù)據(jù)以狀態(tài)變化信息或控制信息為主.其中低速HID 設(shè)備單次傳輸數(shù)據(jù)最大為8 字節(jié),全速設(shè)備為64 字節(jié),高速設(shè)備為1024 字節(jié).主機(jī)與HID 設(shè)備交換的數(shù)據(jù)存儲(chǔ)在報(bào)表(Report)結(jié)構(gòu)內(nèi) .

Wave Panel 的輸入報(bào)表長(zhǎng)度為27 字節(jié),其中0 字節(jié)用于記錄報(bào)表ID,1 ~ 6 字節(jié)的前41 比特分別記錄41 個(gè)按鍵的按下或抬起狀態(tài),另有7 比特未用,置為0;7 ~19 字節(jié)分別記錄13 個(gè)解碼器的狀態(tài);20 ~25 字節(jié)每2 字節(jié)分別記錄一個(gè)二維跟蹤球X 軸和Y 軸的狀態(tài);26 字節(jié)留作固件升級(jí)使用.Wave Panel 的輸出報(bào)表長(zhǎng)度為41 字節(jié),其中0 ~ 5 字節(jié)為控制命令,6 ~ 40字節(jié)為顯示信息的字符.

3)使用輪詢方式檢測(cè)設(shè)備狀態(tài)變化情況.HID 設(shè)備可能在任何時(shí)刻向主機(jī)發(fā)送數(shù)據(jù),例如鼠標(biāo)發(fā)生移動(dòng)或鍵盤(pán)有按鍵按下.所以HID 設(shè)備會(huì)在一個(gè)固定的時(shí)間間隔內(nèi)輪詢各控制口一次,當(dāng)發(fā)現(xiàn)設(shè)備狀態(tài)有變化時(shí)生成輸入報(bào)表發(fā)送給主機(jī) .但輪詢的間隔時(shí)間要由用戶對(duì)HID 設(shè)備的操作速度決定.如果間隔時(shí)間過(guò)小,則用戶來(lái)不及在兩次輪詢間隔內(nèi)完成一次操作;反之,又會(huì)使HID 設(shè)備的響應(yīng)速度無(wú)法與用戶的操作速度匹配,造成延遲 .

Wave Panel 規(guī)定,每40 毫秒對(duì)所有控制器端口輪詢一次,若其中任何一個(gè)控制器的狀態(tài)在兩次輪詢間隔內(nèi)發(fā)生改變,就會(huì)在下次輪詢前生成輸入報(bào)表發(fā)送給主機(jī).40 毫秒是基于視頻每幀顯示時(shí)間而確定的.

2 HID 設(shè)備的通訊過(guò)程

HID 設(shè)備是Windows 操作系統(tǒng)最早支持的USB設(shè)備.在Windows 98 及以后的各版本中都已內(nèi)置了HID 設(shè)備的驅(qū)動(dòng)程序,主機(jī)與HID 設(shè)備通訊時(shí)無(wú)須再編寫(xiě)專(zhuān)門(mén)的驅(qū)動(dòng)程序.這就簡(jiǎn)化了HID 設(shè)備與主機(jī)應(yīng)用程序通訊接口的設(shè)計(jì)和研發(fā).

通過(guò)分析,可以將HID 設(shè)備與主機(jī)應(yīng)用程序的通訊劃分為設(shè)備識(shí)別和打開(kāi).讀報(bào)表.寫(xiě)報(bào)表和設(shè)備關(guān)閉四個(gè)模塊.

2. 1 Wave Panel 的識(shí)別和打開(kāi)

HID 設(shè)備連接到主機(jī)后,以廠商ID(VID).產(chǎn)品ID(PID)和產(chǎn)品版本號(hào)(PVN)三項(xiàng)屬性值的組合作為設(shè)備唯一標(biāo)識(shí).Wave Panel 的三項(xiàng)屬性值可以從產(chǎn)品說(shuō)明書(shū)直接獲取.由于一臺(tái)主機(jī)可能同時(shí)連接有多臺(tái)HID 設(shè)備,所以在通訊前應(yīng)用程序必須要識(shí)別并打開(kāi)Wave Panel,這一過(guò)程需要調(diào)用多個(gè)Windows API函數(shù)實(shí)現(xiàn).基本方法是首先獲取當(dāng)前與主機(jī)連接的所有HID 設(shè)備信息的集合,然后逐一枚舉集合中的各設(shè)備,并比較VID.PID 和PVN 值.當(dāng)三項(xiàng)屬性值都與Wave Panel 相等時(shí)表示已經(jīng)找到,調(diào)用CreateFile()將該Wave Panel 打開(kāi),并保存Wave Panel 設(shè)備句柄.該模塊的流程如圖1 所示.

 

 

流程中調(diào)用的Windows API 函數(shù)和結(jié)構(gòu)體變量類(lèi)型分別在hidpi. h.hidsdi. h.hidusage. h.setupapi. h 和hid. lib.setupapi. lib 幾個(gè)文件中定義并實(shí)現(xiàn) .主要包括:

1)HidD_GetHidGuid( ):獲取HID 設(shè)備的GUID值,并保存在一個(gè)GUID 結(jié)構(gòu)體變量中;

2)SetupDiGetClassDevs():根據(jù)HID 設(shè)備的GUID值獲取HID 設(shè)備信息的集合,并保存在一個(gè)HDEVINFO結(jié)構(gòu)體類(lèi)型的變量中;

3)SetupDiEnumDeviceInterfaces():在設(shè)備信息集合中依次獲取編號(hào)為i(i = 0,1,…) 的設(shè)備接口信息,保存在一個(gè)SP_DEVICE_INTERFACE_DATA 結(jié)構(gòu)體類(lèi)型變量中;

4)SetupDiGetDeviceInterfaceDetail():當(dāng)獲取設(shè)備接口信息成功時(shí)進(jìn)一步獲取該設(shè)備的詳細(xì)信息,并保存設(shè)備路徑;

5)HidD_GetAttributes():獲取設(shè)備屬性值并保存在一個(gè)HIDD_ATTRIBUTES 結(jié)構(gòu)體類(lèi)型變量中.VID.PID 和PVN 值即為該結(jié)構(gòu)體變量的三項(xiàng)成員;

6)SetupDiDestroyDeviceInfoList( ):銷(xiāo)毀設(shè)備信息集合.

2. 2 讀報(bào)表

讀報(bào)表是指HID 設(shè)備向主機(jī)輸入數(shù)據(jù).當(dāng)WavePanel 面板上任意控制器狀態(tài)發(fā)生變化時(shí),都會(huì)在下一次輪詢時(shí)將這些數(shù)據(jù)生成輸入報(bào)表,并發(fā)送給主機(jī).

主機(jī)上的應(yīng)用程序接收輸入報(bào)表并對(duì)數(shù)據(jù)進(jìn)行解析,然后做出相應(yīng)的處理.

由于Wave Panel 可能在任何時(shí)候與主機(jī)以中斷方式進(jìn)行通訊,因此應(yīng)用程序需要維護(hù)一個(gè)異步調(diào)用的讀報(bào)表線程.該線程在Wave Panel 沒(méi)有向主機(jī)輸入數(shù)據(jù)時(shí)阻塞,以減輕系統(tǒng)負(fù)載.當(dāng)有數(shù)據(jù)輸入時(shí),線程恢復(fù)運(yùn)行,調(diào)用ReadFile()將輸入數(shù)據(jù)保存在緩沖區(qū)中,并對(duì)數(shù)據(jù)進(jìn)行解析.這之后線程將再次被阻塞,直到有新的輸入數(shù)據(jù)到來(lái).應(yīng)用程序在Wave Panel成功打開(kāi)后就創(chuàng)建讀報(bào)表線程,應(yīng)用程序運(yùn)行結(jié)束前該線程將一直存在.讀報(bào)表流程如圖2 所示.[!--empirenews.page--]

 

 

2. 3 寫(xiě)報(bào)表

與讀報(bào)表相反,寫(xiě)報(bào)表是指主機(jī)向HID 設(shè)備輸出數(shù)據(jù).寫(xiě)報(bào)表對(duì)延遲的要求較高,但這一功能不是必需的,根據(jù)HID 設(shè)備的實(shí)際用途而定 .鼠標(biāo).鍵盤(pán).游戲桿等較簡(jiǎn)單的設(shè)備只向主機(jī)發(fā)送數(shù)據(jù),這些數(shù)據(jù)通常是一些控制信息和狀態(tài)信息 ,例如改變HID 設(shè)備液晶屏上的顯示信息.控制設(shè)備上發(fā)光元件的亮滅等.

應(yīng)用程序的寫(xiě)報(bào)表線程流程與讀報(bào)表線程類(lèi)似,首先將要輸出的數(shù)據(jù)按Wave Panel 規(guī)定的數(shù)據(jù)格式進(jìn)行封裝,復(fù)制到一個(gè)緩沖區(qū)內(nèi),再調(diào)用WriteFile()將緩沖區(qū)數(shù)據(jù)輸出到Wave Panel 即可,這些信息主要是與視頻幀狀態(tài)變化相關(guān)的信息.

2. 4 設(shè)備關(guān)閉

設(shè)備關(guān)閉模塊功能比較簡(jiǎn)單.當(dāng)主機(jī)與WavePanel 的通訊結(jié)束時(shí),調(diào)用CloseHandle( ) 將打開(kāi)的Wave Panel 關(guān)閉即可.

3 Wave Panel 通訊接口的設(shè)計(jì)

以上述通訊過(guò)程為基礎(chǔ),設(shè)計(jì)一個(gè)名為CHid-Comm 的通訊接口,其總體框架為:

 

 

其中,成員函數(shù)OpenDevice()和CloseDevice()分別用于識(shí)別.打開(kāi)和關(guān)閉Wave Panel.ReadReport-Thread()用于創(chuàng)建讀報(bào)表線程.由于線程為異步方式執(zhí)行,因此ReadReportThread( ) 在調(diào)用ReadFile( ) 時(shí)要使用一個(gè)OVERLAPPED 結(jié)構(gòu)變量,該變量含有一個(gè)I/ O 完成后觸發(fā)事件的句柄.當(dāng)HID 設(shè)備沒(méi)有向主機(jī)輸入數(shù)據(jù)時(shí),事件處于無(wú)信號(hào)狀態(tài),線程被阻塞;當(dāng)有數(shù)據(jù)輸入時(shí),事件被觸發(fā),線程恢復(fù)運(yùn)行,接收并將數(shù)據(jù)保存在讀報(bào)表緩沖區(qū),供數(shù)據(jù)解析函數(shù)使用.WriteReportThread()與ReadReportThread( ) 的功能類(lèi)似,用于創(chuàng)建寫(xiě)報(bào)表線程.

成員變量VID.PID 和PVN 用于保存三項(xiàng)屬性值,ReadBuffer 和WriteBuffer 分別定義讀報(bào)表緩沖區(qū)和寫(xiě)報(bào)表緩沖區(qū),其大小由HID 設(shè)備的輸入報(bào)表和輸出報(bào)表長(zhǎng)度決定.S 實(shí)際上,該接口不僅可以用于WavePanel,同樣也適用于其它HID 設(shè)備.只需要重新設(shè)置VID.PID 和PVN 值以及ReadBuffer.WriteBuffer 緩沖區(qū)的大小,而無(wú)須對(duì)識(shí)別.打開(kāi).讀寫(xiě)報(bào)表等功能進(jìn)行修改.

圖3 是主機(jī)應(yīng)用程序調(diào)用CHidComm 接口實(shí)現(xiàn)與Wave Panel 通訊的情況.以十六進(jìn)制形式輸出讀報(bào)表緩沖區(qū)的值,并顯示控制器狀態(tài)變化情況.需要注意的一個(gè)重要問(wèn)題是Wave Panel 輸入報(bào)表并不使用報(bào)表ID,在這種情況下應(yīng)將讀報(bào)表緩沖區(qū)ReadBuffer 的第0 字節(jié)設(shè)置為0×00,否則讀報(bào)表線程將無(wú)法接收到輸入報(bào)表.

 

 

4 結(jié)束語(yǔ)

Wave Panel 是一類(lèi)較復(fù)雜的視頻編輯HID 設(shè)備,沒(méi)有提供Windows 環(huán)境下的通訊功能.基于WavePanel 對(duì)Windows 環(huán)境下的HID 設(shè)備通訊進(jìn)行研究,能夠解決許多UNIX.Linux.Mac 等操作系統(tǒng)支持的專(zhuān)用HID 設(shè)備無(wú)法在Windows 環(huán)境下使用的問(wèn)題.較之現(xiàn)有的一些解決方案,設(shè)計(jì)的CHidComm 接口具有較強(qiáng)的通用性,并可以方便地對(duì)功能進(jìn)行擴(kuò)展.今后的工作主要是擴(kuò)展該接口在64 位Windows 環(huán)境下的功能.

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉