|
|
互動區: |
USB DIY 講座 (十) --- 應用軟體簡介 ---------------------------------------------------------------------------------------------------------------------------------------- 既然上次都提到有關在PC端的驅動程式架構了,我就稍微介紹一下PC端的應用程式吧。說真的∼怎麼寫驅動程式?我不會。但目前我的所有最上層應用程式,可都是我自己寫的。當然,以我 USB DIY 來說,我是認為這樣子已經可以在USB 世界裡,作我想作的東西了。以前剛學PC的應用程式時,也是為了利用PC周邊的東西,來作一些東西。只是那時只有RS232 而已。而我也不會寫 C語言。後來,也是人家給我一個範例程式(現在要找範例程式就容易多了,因為網路上的東西很多了,只不過是人家講的一句笑話:網際網路裡,什麼都有,只有您要的沒有?!就算有,您也找不到!!您學USB 是不是也有這種感覺?!那您來我的網站就對了啊!哈∼哈∼),自己就一步一腳印慢慢的摸∼雖然寫出來的程式不像專業人是寫得那麼漂亮,卻自己覺得怡然自得了。畢竟我們寫的還是跟周邊硬體有相關的。重點是在這些周邊控制的東西。而非是那花俏的程式吧。 首先,我先 說明一下我使用的開發環境吧:這個開發環境也不是我挑的∼是人家給我的範例程式!!因為不會寫 USB 的驅動程式,只好回頭找老同事幫忙(因為當初作計畫時的團隊已經鳥獸散了,幸好我的人緣還不錯, 我把我的來意與用意說明之後,我們當初寫驅動程式與軟體的工程師就三兩下給我一版∼就說:以後就自求多福了,但對我來說:已經恩同再造了,又什麼好要求的呢?!)。我的上層應用程式開發環境是 Microsoft Visual C++ 6.0 ~您要不要用MFC∼就看您自己的所好了。在此之前我所曾使用的是 DOS 時代的 Turbo C 。那時也不知道要從何學起?就找一個實例的來親自作一次!就學起來了。但是,這次接觸 Visual C++ 時,人家可好心的警告我說:MFC 至少要磨個兩三個月以上,您才會慢慢的進入狀況!年紀一大把,為什麼我還那麼『歹命』啊?但是我很慶幸我還是走過了!(雖然之前一度還是回到傳統的 C的開發觀念∼但是對那些視窗的東西,實在是喔∼ 只能說:年紀真的太大了!) 若是您是用 VB 或其他的,不好意思!真的我已經沒那個體力了。或是,您也覺得人家都是用 C 語言,前輩也跟我說:對一些有關周邊控制的東西還是也C語言為主∼而我到底要不要換開發環境呢?!您就會跟我上述的心情一樣了。或許,您看了我這篇文章後,您內心的掙扎會更大吧。 基本的架構跟我前一章節所述的軟體架構有點雷同:
所以,我們的軟體大哥就給我一個 GT68XX.SYS (經千錘百鍊驗證過的驅動程式)配上一組 GUID 定義檔(好像只要不同的驅動程式搭配不同的GUID定義檔就不怕同一棵IC或平台會相衝了,這點我也不懂,我大概只知道微軟在視窗操作環境中都是靠GUID再做判別區分的!),再給個Library 檔 加上一個簡單的 OpenDriver 的原始碼∼就教我自求多福了!唉∼這樣子就完全解決我在USB 開發上在PC端的重要瓶頸了。 怎麼用?很簡單,也是看圖:(若不會在Visual C++ 中開 Project 的我也沒辦法教您了!)
這是我做ATMEL ISP 燒錄器的範例程式。 那一個Library到那裡去了?! 也是看圖:
接下來,您就可以大大方方,放心地寫您的上層的應用程式了!啊∼寫USB 的應用程式這麼簡單?!有沒有搞錯?!哈∼哈∼套一句人家說的:好的老師帶著您上天堂;不好的老師,帶您住套房!您一定覺得我在乎籠您。但您看了我這麼多文章,您還會這樣子認為嗎?!所以我說為什麼老是要用那種:用起來總是會有那麼一點提心吊膽的HID 驅動程式呢? 您一定對我所說的那的 Opendriver.CPP 原始碼很有興趣吧!沒關係,您就用力下載來看吧!不過,也真的看不出什麼?!我一定要搞得懂嗎?!對我來說:我沒那個精力。作USB 周邊比較實際呢?還是搞得懂視窗程式來龍去脈比較重要呢?!對不起!我的網站標榜的是USB DIY 啊! 用力下載--> opendriver.cpp 及 opendriver.h (PS : 看不懂得不要問我,人家我們軟體大哥不是說了嗎:自求多福!!) 應用程式怎麼寫?那更簡單了:以下就是透過 Endpoint 0 (就是Setup Token )下一組 64 Bytes 資料下去(就是下一個命令兼帶參數,讓韌體去控制LED 的閃爍)!並讀回韌體的相關數據 : void
CUSBAISPDlg::USB_DEVICE_SET_LED_CONTROLLER(UCHAR BlinkingCNT, UCHAR LEDCR) 其中: USB_DEVICE_SEND_STI_COMMAND(STICommandString) 就是: UCHAR
CUSBAISPDlg::USB_DEVICE_SEND_STI_COMMAND(UCHAR *STICommandString)
// 利用 Endpoint 0 的Setup In
Token ! 讀回 USB Device 的 64 Bytes 資料! 很簡單吧∼還是老話一句:我為什麼要用HID 驅動程式呢?!哈∼哈∼ 至於 Bulk In 與 Bulk Out 我好像有舉過例子吧?!再寫一次寫沒關係: Bulk In : HANDLE hRead=INVALID_HANDLE_VALUE; Bulk Out : hWrite = open_file(myoutpipe);
還是老話一句:多給掌聲鼓勵鼓勵吧!否則,我真的不太想寫有關USB 的東西了。 謝謝您們!下台一鞠躬。 |
|
Telephone : 886-3-5439918 FAX : 886-3-5437632 Copyright(C) 2005 . ChamberPlus System Level Studio All rights reserved. Last Update: 2008年01月18日。 |