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

玩心未泯

卡爾斯希普拉斯

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

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

不過(二)只談到了它的第一個參數(shù)hDevice,調(diào)用一句:  LPCUSB_DEVICE lpUsbDev = (lpUsbFuncs->lpGetDeviceInfo)(hDevice); 
就能夠獲得一個USB_DEVICE的指針,然后順藤摸瓜可以看到這個設(shè)備的許多信息,被命名為Descriptor的,PC上有一個軟件叫USBView的可以看到接到USB口上的設(shè)備信息,讀取的應(yīng)該就是這個結(jié)構(gòu)。我當(dāng)時傻乎乎的,自己寫打印函數(shù),在驅(qū)動程序加載的時候把這些信息MessageBox顯示出來:P,所以呢,今天這篇先討論一下關(guān)于這個驅(qū)動的調(diào)試問題。在MSDN上有關(guān)于wince驅(qū)動程序調(diào)試的專題,大體是介紹使用PB開發(fā)驅(qū)動的情況下測試、調(diào)試驅(qū)動程序的,而我是用EVC4開發(fā)的,沒有那個什么(名字忘記了:P),沒法調(diào)試。當(dāng)研究一些驅(qū)動的源代碼的時候,最開始看到的那些 DEBUGMSG、DEBUGZONE還有個叫什么什么tail的那些宏,其實都是在PB的調(diào)試環(huán)境下用的, 功能應(yīng)該是類似TRACE之類的,打印一些信息到Output窗口的,因為沒有那個調(diào)試環(huán)境,所以這些東東都沒法用了,因此要看我的驅(qū)動加載過程中的一些信息,要么就是打印到文件,要么就是用MessageBox了,我選擇用MessageBox直觀的顯示,呵呵,笨笨的辦法還是很好用的,跟設(shè)斷點似的。
     下面繼續(xù)說USBDeviceAttach函數(shù),其第二個參數(shù)lpUsbFuncs,這個是一個函數(shù)指針數(shù)組,有點vtable的味道,具體的看看USB_FUNCS這個結(jié)構(gòu)的聲明就差不多了,在MSDN中也能夠通過這個結(jié)構(gòu)查看其所有指向的函數(shù)的調(diào)用方法及用途。在驅(qū)動程序中,往往要用到這個vtable中的很多函數(shù),所以我們需要把這個vtable保存下來備用,如何保存和備用我會在下篇中寫明白,在Attach過程中還需要保存很多有用的東東。
     那么繼續(xù)往下,lpInterface,一個指向USB_INTERFACE的指針,我一直對這個參數(shù)沒太弄明白,我在這個函數(shù)里面得到的這個指針是一個空指針,而看別人的代碼中間,當(dāng)這個指針為空的時候attach是返回FALSE的,顯然對我這種情況是不適用的,我后來想想,覺得大概是因為我的外設(shè)Interface的class、subclass、protocol都是0,所以才出現(xiàn)這種情況吧(準(zhǔn)確的說是因為我在USBInstallDriver函數(shù)中,RegisterClientDriverID調(diào)用給的參數(shù)USB_DRIVER_SETTINGS結(jié)構(gòu)體中關(guān)于Interface的幾個變量值我全給的USB_NO_INFO,我后來嘗試賦值為0,結(jié)果就得到了非空的Interface指針)。那么對于我這種情況,interface是個空指針該怎么辦呢?可以用USB_FUNCS中的lpFindInterface來“找出”合適的Interface指針,具體的用法還是看官自己研究MSDN吧。
     其實猛地一下蹦出一個Interface的概念,估計初次接觸的都會有點糊涂,我當(dāng)時也很糊涂,Interface在現(xiàn)如今含義太多了,不過可以肯定這里的不是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.
這段話我就不翻譯了,本來英文就不怎么地,翻譯過來有誤導(dǎo)之嫌,還是留給大家原汁原味的比較好。
    其實研究wince的驅(qū)動,或者單純的講USB驅(qū)動,還是應(yīng)該了解一下wince下USB的驅(qū)動模型的,貌似很簡單的一個模型,但是好像還沒有能夠找到比較精辟的闡述講解,看著MSDN能夠讓你看睡著了也不知所云,只能是邊研究邊體會,我很想在我的文章里對這個模型進(jìn)行一番講解,但是發(fā)現(xiàn)自己也沒有理解到能夠給別人講解的地步。
    好了,不廢話了,繼續(xù)就Interface這個指針繼續(xù)往下談,我看了PB下的USB Printer的驅(qū)動源碼,在這個階段它調(diào)用了SetInterface這個函數(shù),我也依葫蘆畫瓢,調(diào)用了,但卻阻塞在這個調(diào)用上不能繼續(xù),至今我仍不知道是什么原因。這也可以說是我目前的疑問點之一,文中我用特殊顏色標(biāo)記出來,有朋友能夠解疑釋惑的可以和我聯(lián)系,我自己研究出來了,以后也會在后記中加上其答案。
    其它的似乎就沒有太多好說的了,直接在MSDN中間都能夠看懂是干什么,今天就先寫到這里,下次再寫的內(nèi)容就和我的外設(shè)有很直接的關(guān)系了,只能是根據(jù)我外設(shè)的具體情況介紹我探索驅(qū)動開發(fā)的經(jīng)歷。我的外設(shè)還算比較簡單的,只有兩個BULK的EndPoint,什么是EndPoint?呵呵~~留給看官自己研究下吧~

BTW:經(jīng)過幾天的摸索,我終于完成了我的外設(shè)的驅(qū)動開發(fā),看著測試程序成功的打開設(shè)備,寫數(shù)據(jù)又讀數(shù)據(jù),心中無比欣慰~~不過由于寫程序的時候是摸著石頭過河,而且到后來才如愿以償?shù)目吹搅薖B下USBPrinter的源代碼,才發(fā)現(xiàn)自己的程序結(jié)果實在有點混亂。這兩天再調(diào)整調(diào)整,USBPrinter的源代碼中果然還是有不少可以借鑒的東西。

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

評論

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

# re: WinCE下驅(qū)動開發(fā)入門記錄(三) 2007-08-08 16:08 internetcai
轉(zhuǎn)發(fā)了你的文章.........
謝謝你分享經(jīng)驗..


轉(zhuǎn)到www.arm9bbs.com  回復(fù)  更多評論
  

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

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

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

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美不卡高清| 99精品视频免费观看视频| 欧美在线观看视频一区二区三区 | 麻豆9191精品国产| 久久蜜臀精品av| 欧美 日韩 国产在线| 亚洲激情电影中文字幕| 亚洲欧洲偷拍精品| 亚洲一区不卡| 亚洲你懂的在线视频| 久久精品最新地址| 欧美激情一区在线观看| 国模叶桐国产精品一区| 欧美激情久久久| 欧美人成在线| 国产婷婷成人久久av免费高清| 精品51国产黑色丝袜高跟鞋| 日韩视频在线你懂得| 欧美一区二区视频在线| 美女主播一区| 亚洲午夜久久久| 免费中文字幕日韩欧美| 欧美午夜宅男影院| 亚洲第一主播视频| 亚洲在线观看视频网站| 看片网站欧美日韩| 日韩视频在线免费| 久久视频在线看| 国产精品日韩欧美一区二区| 1024亚洲| 久久综合激情| 亚洲欧美日韩视频二区| 欧美a级片网站| 国产一区二区三区在线观看免费视频| 亚洲欧洲一区二区三区| 久久久久99精品国产片| 一区二区日韩精品| 欧美美女bb生活片| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品爱啪在线线免费观看| 国产综合亚洲精品一区二| 亚洲一区二区av电影| 欧美成人69av| 久久视频一区| 狠狠色2019综合网| 久久精品国产精品亚洲| 亚洲一区美女视频在线观看免费| 免费观看一级特黄欧美大片| 精品不卡一区| 欧美一区二区三区四区在线观看| 亚洲精品国偷自产在线99热| 久久综合久久综合久久综合| 国产欧美日韩三级| 欧美一区二区高清在线观看| 这里只有精品视频| 国产精品伦理| 欧美亚洲网站| 久久国产手机看片| 在线观看国产精品网站| 美脚丝袜一区二区三区在线观看 | 国产精品区一区| 亚洲一区二区三区777| 亚洲精品乱码久久久久久黑人 | 国产精品一香蕉国产线看观看| 亚洲精品美女91| 蜜乳av另类精品一区二区| 欧美在线免费播放| 一区精品在线播放| 你懂的视频一区二区| 久久亚洲电影| 亚洲高清资源| 亚洲精品婷婷| 国产精品天天摸av网| 久久久久青草大香线综合精品| 久久久99爱| 日韩视频在线你懂得| 亚洲精品一品区二品区三品区| 欧美激情在线狂野欧美精品| 一区二区精品在线| 亚洲一级免费视频| 韩国欧美一区| 91久久精品国产91久久| 国产精品久久久久av| 欧美综合国产精品久久丁香| 久久久福利视频| 日韩一区二区精品葵司在线| 亚洲免费影院| 亚洲黑丝一区二区| 亚洲无吗在线| 亚洲国产日韩一级| 一区二区三区高清在线观看| 国产中文一区二区三区| 亚洲国内高清视频| 国产日韩精品在线播放| 亚洲高清不卡在线观看| 欧美天天视频| 欧美xx69| 国产欧美一区二区三区久久| 欧美黄在线观看| 国产拍揄自揄精品视频麻豆| 亚洲国产电影| 国内精品免费午夜毛片| 亚洲狼人精品一区二区三区| 国产亚洲va综合人人澡精品| 亚洲精品国精品久久99热一| 精品91在线| 性欧美video另类hd性玩具| 一本色道久久综合亚洲精品按摩| 欧美尤物巨大精品爽| 亚洲无吗在线| 欧美电影打屁股sp| 免费看成人av| 黑人极品videos精品欧美裸| 亚洲在线免费视频| 99精品视频免费观看视频| 久久精品国产亚洲精品| 午夜亚洲视频| 欧美午夜精品久久久久久超碰| 另类天堂av| 国产主播喷水一区二区| 亚洲欧美日韩电影| 香蕉免费一区二区三区在线观看 | 国产欧美日韩亚洲| 亚洲国产一区二区三区高清| 伊人一区二区三区久久精品| 亚洲综合999| 亚洲欧美国产视频| 欧美四级剧情无删版影片| 亚洲人成小说网站色在线| 亚洲青色在线| 欧美激情综合| 亚洲狼人综合| 亚洲一区高清| 欧美视频在线免费| 在线视频精品一区| 午夜亚洲福利| 国产欧美亚洲视频| 午夜精品久久久久久久男人的天堂 | 欧美久久久久久久| 亚洲黄一区二区三区| 亚洲日本va在线观看| 老司机亚洲精品| 亚洲国产精品久久久久久女王| 亚洲国产精选| 欧美精品成人91久久久久久久| 亚洲福利视频专区| 99视频国产精品免费观看| 欧美日韩a区| 亚洲永久免费| 久久男人av资源网站| 一区二区在线看| 欧美电影在线| 亚洲深夜激情| 久久久亚洲午夜电影| 亚洲国产综合在线| 欧美日韩免费| 亚洲欧美日韩另类| 欧美成人免费小视频| av不卡在线观看| 国产欧美日韩亚洲精品| 久热精品视频在线免费观看| 亚洲精品美女免费| 欧美在线视频二区| 亚洲第一色在线| 欧美日精品一区视频| 欧美一区二区在线免费观看| 亚洲国产欧美久久| 久久成人av少妇免费| 亚洲毛片av| 国产午夜精品视频| 欧美粗暴jizz性欧美20| 亚洲伊人网站| 亚洲国产日韩综合一区| 欧美亚洲一区三区| 亚洲国产三级| 国产免费观看久久黄| 欧美华人在线视频| 久久精品国产欧美亚洲人人爽| 日韩亚洲欧美成人| 美脚丝袜一区二区三区在线观看| 日韩午夜在线播放| 狠狠色综合网站久久久久久久| 欧美日本久久| 可以看av的网站久久看| 亚洲欧美视频一区二区三区| 亚洲三级毛片| 欧美国产1区2区| 久久天天躁夜夜躁狠狠躁2022| 亚洲午夜在线观看视频在线| 久久久久九九九| 在线一区二区三区四区五区| 黄网站免费久久| 国产精品久久久一本精品| 蜜桃av一区二区| 久久精品久久99精品久久| 亚洲一级免费视频| 最新亚洲视频| 亚洲电影免费在线 | 欧美性色aⅴ视频一区日韩精品| 久久国产精品72免费观看|