又因為HID 是走Microsoft 標準驅動程式的,所以,在驅動程式這邊就沒啥好說,
所以,我只要稍微點出驅動程式一些現象之後,最後我會再以原廠所附的上層
應用範例程式簡單說明一下,大概就完成了整個USB 自學計畫中的HID 部分了。
關於 USB HID 的部分真的是自學計畫啦,因為第一:我之前沒有做過USB HID
的產品,這一次要逼著學USB HID 的確是因為有系統應用上的需求,所以,
就開始著手進行了。第二:當然也是希望透過這樣子的機會,剛好也可以熟悉一下
這一家對大家來可能會比較好取得的USB MCU ,如此一來,大家也比較容易可以
跟得上我的相關學習內容的解說。當然啊,透過這樣子的解說或許對您來說:
可能還是有些許沒有交代很清楚的地方,但是,對我來說,應該是足夠我進行系統
應用開發了。至於,您認為不足的地方,我說過了:我不會拿著標準規格書一一的
比對的解說給您看的,因為:這一部份,您真的要自己好好用功念書的。
如果:您自己本身無法從標準的規格書去解讀出USB HID 或相關系統應用的方法的話,
那我會認為您真的要認真的考慮一下:您自己到底要不要走這一行了。
您也不可能想說:又想幹研發工程師,但卻又沒辦法從標準規格書去消化出工作規範,
只是想一輩子最好都有長官或前輩可以罩著您?那是不可能的...因為,很簡單:
人都會老的,永遠會有年輕力壯新生代的工程師出來的...這就是現實人生。
----------------
好吧,我們就來解說一下USB HID 所對應的PC Host 的軟體一些東西,我先說明一下,
我還是只針對Microsoft 的作業系統...唉~想一下還真感慨啦,記得我剛開始寫USB DIY
系列文章時,也只不過短短幾年而已,網路所累積的閱覽人次也才二十幾萬人次。
結果:我們就看到 Apple 之 iOS 與 Google 之Andriod 兩大陣營在科技界的較勁。
反而,昔日大家所倚賴的,或是大家認為學高科技技能所必備的就業利器的Microsoft
作業平台,竟然被冷落一旁了。現在只要您翻開一些短期進修或在職進修,乃至於
所謂就業輔導課程...幾乎都快被以上兩大陣營之行動作業平台所佔據了。
這一種幾乎不可擋的趨勢:我想Microsoft 如果不敢快想出因應對策的話,不要說:
他作業系統上的應用開發程式沒有人想學啦,我想連他自己原本強大的作業系統平台
也前途堪慮。...前幾年當Google 喊出要取代微軟的口號,我還以為是痴人說夢話,
現在我也開始有點相信了,我們當然不是說:微軟會完全被取代啦,只是人們對於
他作業系統的需求也只會停留到目前階段就夠了。已經不需要升級改版,甚至認為
沒必要再做任何未來投資了,這樣子的看法與解讀,對於所謂上市櫃公司來說:
是很危險的。因為股票市場看的是『本夢比』,沒有任何前景或願景的公司,
在股票市場一定會被唾棄的。您看我們上市櫃公司裡,尤其是高科技公司遊戲規則裡,
其實有許多公司他的營收或是獲利其實都還可以過得去,但是,股價就是被晾在那。
譬如:全年EPS 1~2 元都已經算不錯了,但因為沒有願景,也只能被定位成10 左右的
本益比...股價也頂多20~30 元,萬一市場稍微有點風吹草動的,就會被連帶的打成
票面淨值的。唉~...那就更不用說:那一些沒有跟上這一波時代潮流的高科技公司的。
您自己可以去查一下那一些主要營收項目是:微控制器的高科技公司或IC 設計公司的。
不要說營收持平,光要維持損益平衡都很辛苦了,也幾乎包辦了目前類股中低價族群。
高科技界打的是腦力密集的持續戰,不行的,就自己看著辦吧!
------------
上圖應該是我所貼圖中最長的一張圖了,先不看解說。
您可以自己看得出他是什麼東東嗎?!
其實,如果您可以從裡面看出他的USB Protocol 的話,應該算很厲害了,但如果您
還能看出微軟作業系統的USB HID 驅動程式的內容的話,那就更厲害了。
我這張圖是在 Microsoft 作業系統 XP SP2 下插拔時,USB Enumeration 時節錄的。
答案是:當我們USB HID Device 插入PC HOST 時,作業系統的內定驅動程式會看到您的
USB HID Class 的 Get Report Descriptor 所描述內容,因為:在USB HID Class 中,
USB Device 至少一定要定義一組 Interrupt Interface。
所以,從圖上您就可以看到當我們USB HID Device好不容易回完 Get Report Descriptor 之後,
PC Host 馬上就透過Endpoint 1 (interrupt Interface 之Endpoint )來要資料了。
根本我們自己的上層應用程式都還沒打開呢。...這完全是PC Host 作業系統的那一支
HID 底層驅動程式搞的。其實,人家這麼做也沒錯,因為HID 本來就是要定義給
像鍵盤或滑鼠這一種人機介面(HID, Human Interface Device) 的輸出入裝置用的,當然,
當您USB Device 一掛到PC Host 之後就得要馬上動作,才能符合USB plug and play 特性。
作業系統的驅動程式只負責把USB HID 的資料抓進來擺著,您上層應用程式要不要用?
那是您上層應用程式的問題。跟他作業系統無關的。
那至於多久抓一次?其實,依據的是您自己Device Interface Descriptor 所定義的。
萬一您都沒有回的話,會如何?!我有試了一下幾分鐘都不回,作業系統也沒怎麼樣。
本來在USB 規範中,其實資料傳輸本來就是In Token 與Out token ,這樣子的東西,對於
Interrupt Interface 與Bulk Interface 來說:我們光從 USB 的匯流排分析儀來看是一樣的。
所以,只要您有正常的回NAK 完成 In/Out Token ,沒有人會說您是錯的。我講過了,
您要用NAK 擋到千年、萬年的,還是屬於USB 規範內容,就算您是微軟也不能說不對啊。
只是這樣子的擋法,一直不回PC HOST資料內容的您要作什麼用?萬一您上層應用程式
跑起來要這一部份的資料時,作業系統就有可能沒辦法回您資料...您就自己看得辦吧。
好吧,我們就把這些中間的NAK 拿掉再觀察一次:
我就可以發現:雖然我們PC Host 上層應用程式沒有跑,
其實,作業系統的那一支驅動程式,還是幫我們一直抓資料的...
而我們USB DEVICE 也是一直在送資料的。這些都跟我們有沒有打開應用程式無關。
但是我們從前面那個Packet Number 看來:也好像沒有那麼規律性的時間來抓資料,
這跟我們在PC Host 中寫MFC 程式時,用那個Timer 寫程式一樣:從來沒有人會認為
這個時間是很準的啦,...好像跟我們看電腦的時間(時鐘)一樣,沒有人會相信他的誤差
是很小的。我們還是習慣再看一下時鐘會比較安心的。
-----------------------------
好了,我們已經稍微講完USB HID 的PC Host 的驅動程式的基本動作了,最後我們會交代完
在寫上層應用程式時,所會用的一些簡單的函數庫呼叫,之後,我們就又就會將這一部份的
USB DIY 自學計畫,暫時再告一段落了。當然啊,如果有什麼新發現,或值得大家在討論的
我會找機會說明的。謝謝!
(待續)