青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

玩心未泯

卡爾斯希普拉斯

C++博客 首頁 新隨筆 聯系 聚合 管理
  19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
    之前公司由于項目需要讓我研究PDA上的WinCE系統下的USB外設驅動開發,剛剛有點入門的感覺結果又終止了這個計劃,我也一直在郁悶這個事情,不想現如今,機會又來了。我又開始了驅動開發的研究學習之旅,這里將繼續記錄我的心得體會。
    之前的入門記錄(二)已經講到了USBDeviceAttach函數,原形這里再列一下:

BOOL USBDeviceAttach(USB_HANDLE hDevice, LPCUSB_FUNCS lpUsbFuncs,
                     LPCUSB_INTERFACE lpInterface, LPCWSTR szUniqueDriverId,
                     LPBOOL fAcceptControl,
                     LPCUSB_DRIVER_SETTINGS lpDriverSettings, DWORD dwUnused);

不過(二)只談到了它的第一個參數hDevice,調用一句:  LPCUSB_DEVICE lpUsbDev = (lpUsbFuncs->lpGetDeviceInfo)(hDevice); 
就能夠獲得一個USB_DEVICE的指針,然后順藤摸瓜可以看到這個設備的許多信息,被命名為Descriptor的,PC上有一個軟件叫USBView的可以看到接到USB口上的設備信息,讀取的應該就是這個結構。我當時傻乎乎的,自己寫打印函數,在驅動程序加載的時候把這些信息MessageBox顯示出來:P,所以呢,今天這篇先討論一下關于這個驅動的調試問題。在MSDN上有關于wince驅動程序調試的專題,大體是介紹使用PB開發驅動的情況下測試、調試驅動程序的,而我是用EVC4開發的,沒有那個什么(名字忘記了:P),沒法調試。當研究一些驅動的源代碼的時候,最開始看到的那些 DEBUGMSG、DEBUGZONE還有個叫什么什么tail的那些宏,其實都是在PB的調試環境下用的, 功能應該是類似TRACE之類的,打印一些信息到Output窗口的,因為沒有那個調試環境,所以這些東東都沒法用了,因此要看我的驅動加載過程中的一些信息,要么就是打印到文件,要么就是用MessageBox了,我選擇用MessageBox直觀的顯示,呵呵,笨笨的辦法還是很好用的,跟設斷點似的。
     下面繼續說USBDeviceAttach函數,其第二個參數lpUsbFuncs,這個是一個函數指針數組,有點vtable的味道,具體的看看USB_FUNCS這個結構的聲明就差不多了,在MSDN中也能夠通過這個結構查看其所有指向的函數的調用方法及用途。在驅動程序中,往往要用到這個vtable中的很多函數,所以我們需要把這個vtable保存下來備用,如何保存和備用我會在下篇中寫明白,在Attach過程中還需要保存很多有用的東東。
     那么繼續往下,lpInterface,一個指向USB_INTERFACE的指針,我一直對這個參數沒太弄明白,我在這個函數里面得到的這個指針是一個空指針,而看別人的代碼中間,當這個指針為空的時候attach是返回FALSE的,顯然對我這種情況是不適用的,我后來想想,覺得大概是因為我的外設Interface的class、subclass、protocol都是0,所以才出現這種情況吧(準確的說是因為我在USBInstallDriver函數中,RegisterClientDriverID調用給的參數USB_DRIVER_SETTINGS結構體中關于Interface的幾個變量值我全給的USB_NO_INFO,我后來嘗試賦值為0,結果就得到了非空的Interface指針)。那么對于我這種情況,interface是個空指針該怎么辦呢?可以用USB_FUNCS中的lpFindInterface來“找出”合適的Interface指針,具體的用法還是看官自己研究MSDN吧。
     其實猛地一下蹦出一個Interface的概念,估計初次接觸的都會有點糊涂,我當時也很糊涂,Interface在現如今含義太多了,不過可以肯定這里的不是COM中的Interface~:),在查閱資料的時候,我找到了它的確切定義:
 USB peripheral devices consist of one or more logical components that implement the abilities of the devices. These components are called interfaces.Each interface typically provides some useful grouping of functionality, but exactly what constitutes an interface is an implementation detail. For example, a USB mouse device could present one interface for horizontal and vertical movement information and a separate interface for left and right button information. As another option, the device could present a single interface containing all of the information. Both are valid approaches, but each approach has implications for how the device driver must operate.
這段話我就不翻譯了,本來英文就不怎么地,翻譯過來有誤導之嫌,還是留給大家原汁原味的比較好。
    其實研究wince的驅動,或者單純的講USB驅動,還是應該了解一下wince下USB的驅動模型的,貌似很簡單的一個模型,但是好像還沒有能夠找到比較精辟的闡述講解,看著MSDN能夠讓你看睡著了也不知所云,只能是邊研究邊體會,我很想在我的文章里對這個模型進行一番講解,但是發現自己也沒有理解到能夠給別人講解的地步。
    好了,不廢話了,繼續就Interface這個指針繼續往下談,我看了PB下的USB Printer的驅動源碼,在這個階段它調用了SetInterface這個函數,我也依葫蘆畫瓢,調用了,但卻阻塞在這個調用上不能繼續,至今我仍不知道是什么原因。這也可以說是我目前的疑問點之一,文中我用特殊顏色標記出來,有朋友能夠解疑釋惑的可以和我聯系,我自己研究出來了,以后也會在后記中加上其答案。
    其它的似乎就沒有太多好說的了,直接在MSDN中間都能夠看懂是干什么,今天就先寫到這里,下次再寫的內容就和我的外設有很直接的關系了,只能是根據我外設的具體情況介紹我探索驅動開發的經歷。我的外設還算比較簡單的,只有兩個BULK的EndPoint,什么是EndPoint?呵呵~~留給看官自己研究下吧~

BTW:經過幾天的摸索,我終于完成了我的外設的驅動開發,看著測試程序成功的打開設備,寫數據又讀數據,心中無比欣慰~~不過由于寫程序的時候是摸著石頭過河,而且到后來才如愿以償的看到了PB下USBPrinter的源代碼,才發現自己的程序結果實在有點混亂。這兩天再調整調整,USBPrinter的源代碼中果然還是有不少可以借鑒的東西。

2007.8.6后記:“好”日子差不多又要到頭了,這次驅動開發的成果在我看來才只是剛剛可用而已,已經調配我做別的事情了,這方面的研究又要被停止下來了。之后一段時間估計很難抽出時間自己繼續深入研究了,回頭看看自己寫的東西居然沒有介紹LPBOOL fAcceptControl這個參數,不過好在介紹這個參數的文章也比較多,簡單來說,它是一個輸出參數。當把它指向的那個變量賦值為真的時候,我們的設備驅動程序就取得了設備的控制權了,系統也就不會再繼續為之尋找匹配的驅動了(我的理解是這樣,不知是否有錯誤)。這里小小的后記補充一下。入門記錄(四)可能會在更晚的時候,抽時間紀錄下來,希望到時我還記得我要寫些什么~:)
posted on 2007-08-01 15:20 SuperPlayeR 閱讀(3767) 評論(7)  編輯 收藏 引用 所屬分類: WinCE/Mobile應用開發

評論

# re: WinCE下驅動開發入門記錄(三) 2007-08-02 09:37 SuperPlayeR
昨晚上睡覺之前順手把一本買了很久卻一直沒看的書拿起來翻了翻,linux設備驅動程序,看了看關于usb驅動的章節,發現當初如果剛開始研究的時候就看看這個,可能會少走不少彎路,至少什么是Configuration,什么是Interface,什么是EndPoint它都介紹清楚了~:P
今天如果有時間,我繼續寫(四),介紹一下。  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三) 2007-08-08 16:08 internetcai
轉發了你的文章.........
謝謝你分享經驗..


轉到www.arm9bbs.com  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三) 2007-08-18 21:48 nonono
期待4......
謝謝!  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三) 2007-08-28 17:23 raul
多謝樓主的分享  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三)[未登錄] 2007-11-20 11:15 hh
SetInterface被阻塞的原因是因為你的設備不支持這個函數的實現,一般來說,你不用設置Interface就可以使用USB設備了,SetInterface是在設備有多個接口的情況下,需要設置,但是絕大部分設備都是一個接口,因此不用設置。
  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三)[未登錄] 2007-11-30 15:31 Ken
樓上說得沒錯,還有,CE下面很多類似的函數不必調用的。
對這個SetInterface來說,只需要填充其pipes信息,
指定傳輸類型等參數,再用lpUsbFuncs里面的open打開pipes
就好。  回復  更多評論
  

# re: WinCE下驅動開發入門記錄(三) 2008-09-25 15:45 lannier
我馬上也要在手持設備上開發USB驅動,并要實現USB口和RS232之間的轉換。剛入門理不清頭緒希望大俠給點建議
看了你的文章有點小感悟  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久女同互慰一区二区三区| 久久av一区二区| 亚洲日本免费| 久久久久一区二区| 亚洲无线视频| 欧美日本一区二区高清播放视频| 伊人成人网在线看| 久久久久久久久蜜桃| 亚洲一区视频| 国产精品美女主播| 亚洲专区免费| 亚洲一级片在线看| 国产精品入口日韩视频大尺度| 一区二区日韩欧美| 亚洲乱码国产乱码精品精天堂| 欧美精品1区| 一本色道久久加勒比88综合| 亚洲激情网站| 美女在线一区二区| 亚洲欧美国产日韩中文字幕| 久久精品中文| 国内自拍亚洲| 欧美不卡在线视频| 卡一卡二国产精品| 91久久精品国产91久久性色tv| 嫩草成人www欧美| 欧美a级片一区| 99精品免费| 亚洲一区日韩在线| 黄网站免费久久| 欧美大片一区二区三区| 欧美91大片| 亚洲欧美日韩在线| 久久国产88| 91久久精品美女高潮| 亚洲人成绝费网站色www| 欧美手机在线| 久久久久**毛片大全| 美国成人毛片| 亚洲欧美日韩精品久久亚洲区 | 欧美激情一区二区久久久| 亚洲欧洲一区二区三区久久| 日韩视频一区二区三区| 国产精品午夜av在线| 玖玖在线精品| 欧美日韩在线视频一区| 久久精品成人一区二区三区| 久久综合中文色婷婷| 亚洲天堂av综合网| 欧美专区在线观看一区| 99视频日韩| 欧美在线视频免费| 一区二区三区四区国产精品| 欧美在线你懂的| 亚洲一区亚洲二区| 久久久免费av| 香蕉久久a毛片| 麻豆精品在线视频| 亚洲免费人成在线视频观看| 久久久久国产精品人| 亚洲中无吗在线| 免费一区二区三区| 久久精品人人做人人爽电影蜜月| 欧美国产综合一区二区| 久久久久九九视频| 国产精品久久久久久久久搜平片| 欧美xx视频| 国产亚洲精品aa午夜观看| 亚洲精品中文字幕在线观看| 韩日成人在线| 午夜精品久久久久久久男人的天堂| 亚洲精品偷拍| 久久久亚洲人| 久久久噜噜噜| 国产日韩欧美在线视频观看| 9人人澡人人爽人人精品| 亚洲国产视频一区| 久久精品一区二区国产| 久久精品国产第一区二区三区| 欧美日韩一区二区三区四区在线观看| 欧美成人亚洲成人| 伊人久久亚洲美女图片| 午夜一区不卡| 亚洲一区日韩| 久久久久国内| 国产乱码精品一区二区三区av | 久久综合狠狠综合久久综青草| 欧美在线视频网站| 国产精品超碰97尤物18| 一本大道久久a久久精二百| 亚洲精品一区在线观看香蕉| 久久综合网色—综合色88| 久久一区二区视频| 好吊色欧美一区二区三区四区| 亚洲欧美综合另类中字| 欧美亚洲免费在线| 国产精品爽爽ⅴa在线观看| 亚洲图片在区色| 欧美一激情一区二区三区| 国产精品综合| 欧美在线观看网址综合| 久色婷婷小香蕉久久| 亚洲国产高潮在线观看| 毛片精品免费在线观看| 亚洲国产另类 国产精品国产免费| 亚洲国产精品成人一区二区| 欧美 日韩 国产精品免费观看| 欧美高清自拍一区| 99亚洲精品| 欧美色中文字幕| 亚洲综合电影| 美女亚洲精品| 99精品免费| 国产精品美女www爽爽爽视频| 亚洲摸下面视频| 麻豆国产精品一区二区三区 | 91久久在线| 亚洲欧美欧美一区二区三区| 国产精品婷婷| 久久免费观看视频| 亚洲国产综合在线| 午夜国产精品视频| 国精产品99永久一区一区| 噜噜爱69成人精品| 日韩天堂在线观看| 久久久久久免费| 日韩亚洲欧美精品| 国产一区二区日韩精品| 久热精品视频在线| 中日韩美女免费视频网址在线观看| 欧美在线高清| 日韩亚洲在线| 国产在线欧美| 欧美无乱码久久久免费午夜一区| 久久精品国产久精国产思思| 99www免费人成精品| 久久人91精品久久久久久不卡| 一本色道久久综合亚洲精品按摩| 国产午夜精品久久久久久久| 欧美激情导航| 久久成人精品| 这里只有精品视频| 欧美激情一区二区三区蜜桃视频| 新67194成人永久网站| 亚洲精品久久7777| 国产在线日韩| 国产精品免费小视频| 欧美国产一区在线| 久久精品亚洲精品| 亚洲图片欧美午夜| 日韩亚洲欧美成人一区| 久久综合久久综合久久综合| 亚洲一卡久久| 久久久九九九九| 欧美一区二区三区免费观看| 亚洲精品乱码久久久久久黑人| 国产女精品视频网站免费 | 国产一级精品aaaaa看| 欧美激情视频一区二区三区免费 | 欧美大片91| 久久国产精品久久w女人spa| 亚洲性图久久| 一本色道久久88综合日韩精品| 亚洲高清成人| 亚洲成色www久久网站| 免费日韩视频| 免费观看一级特黄欧美大片| 久久久久久久999| 欧美一区二区三区电影在线观看| 亚洲视频在线观看三级| a4yy欧美一区二区三区| 91久久国产自产拍夜夜嗨| 一区福利视频| **欧美日韩vr在线| 亚洲国产美女久久久久| 亚洲观看高清完整版在线观看| 伊人久久大香线| 亚洲区一区二| 亚洲精品一区二区三区婷婷月 | 亚洲综合国产激情另类一区| 日韩一级在线| 一片黄亚洲嫩模| 亚洲影音一区| 欧美专区在线播放| 久久蜜桃精品| 欧美电影免费观看高清| 亚洲福利免费| 日韩视频在线免费观看| 一区二区免费在线观看| 亚洲免费中文字幕| 久久精品理论片| 欧美成人高清| 欧美天堂亚洲电影院在线观看| 国产精品久久久久久久浪潮网站| 国产欧美日韩在线视频| 狠狠色伊人亚洲综合成人| 亚洲高清在线播放| 亚洲午夜一二三区视频| 久久精品国产999大香线蕉| 欧美成人在线免费视频|