日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CyUSB.dll的调用经验介绍

發(fā)布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CyUSB.dll的调用经验介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近一直在做EZ-USB的數(shù)據(jù)傳輸方面的東西,今天是撿起了多年沒用過的VS并用C#編寫了上位機部分的界面。今天的工作是建立在前幾天的痛苦的經(jīng)歷上的。

??之前一直想用Labview制作這個界面,因為labview這軟件太惹人喜歡了,不需要寫代碼就能把工作做完,我先花了一天多去學(xué)了點LV的基本的操作,然后試著用它去調(diào)用cypress公司給的USB 的驅(qū)動程序(CyUSB.dl)可是問題來了,首先是LV不能識別這個驅(qū)動,說必須用32位版的LV才行。

??我重新裝了一個32位的,接下來更痛心的是,驅(qū)動是能識別了,可是里面的程序調(diào)用不了,根本不顯示里面的程序。也許真的能調(diào)用只是我LV水平不夠,不過如果在花大量的時間去學(xué)LV,估計也不是太可能了。進行到這一步,感覺很無奈,難道要我放棄這么好用的軟件LV并且花了這么長時間研究的東西,去用別的軟件來實現(xiàn)。

??最終還是痛下決心,使用VS并用C#來編寫,結(jié)果看來這個選擇是對的,使用C#編寫界面也很簡單,而且編出來的界面要比LV要細(xì)致,畢竟是微軟公司自己的軟件在自家的平臺上運行,做出來的界面我感覺還算滿意把。然后就說說我編寫是調(diào)用DLL文件的一些體會把。

??要想調(diào)用DLL中的程序首先得清楚里面的函數(shù)才行,這一點最好辦,cypress公司把所有相關(guān)的東西都做成了文檔,下載下來看就行,而且這文檔簡直就是源代碼啊,稍做修改就可以在程序中直接使用。其實好多公司都在這么做,這樣的文檔會極大的減輕工程師的工作。

?多了不說,說說文檔中的函數(shù)還有作用,由于全是英文的,看起來稍微費點勁,有些解釋的不到位的歡迎指正。

?對于文檔中給出的這么多的函數(shù)和類,首先抓住其中最重要的一個類:USBDevices

?這個類是CyUSB中的核心類,它會動態(tài)的呈現(xiàn)出當(dāng)前已經(jīng)連接到電腦的CyUSB設(shè)備,通過它可以單獨的找出某個設(shè)備(通過設(shè)備的VID和PID)并與這個設(shè)備進行通信。這個類的使用舉例如下:

USBDeviceList usbDevices = new USBDeviceList(CyConst.DEVICES_CYUSB);
myDev = usbDevices[0x04B4, 0x8613] as CyUSBDevice;// 獲取第一個設(shè)備號為VendorID == 0x04B4 and ProductID == 0x8613的設(shè)備

??然后很重要的一個函數(shù)就是:CyUSBDiceves

??這個函數(shù)是連接CyUSB.sys驅(qū)動文件的一個關(guān)鍵類,通過它可以和USB設(shè)備進行各種通信,它里面的額函數(shù)暫且先不介紹,后面用到時再說。

??然后最讓我上心的就是CyControlEndPoint部分了,這部分是讀寫端點RAM時主要用到的東西。接下來且聽細(xì)說。

??說函數(shù)之前說說里面最重要的幾個屬性:Index,Target,ReqCode,ReqType,Value和Direction。最后的Direction調(diào)用時基本不會用到,后面會細(xì)說。

??首先Index是與Target配套用的,如果Target設(shè)置的是TGT_ENDPT屬性的話(一般如此),Index只的就是ENDPOINT的接口號。例如index = 2;說明當(dāng)前使用的是EP2。

??然后是ReqCode與ReqType是配套使用的。ReqCode是用來向USB設(shè)備聲明有一條命令需要被執(zhí)行(這是翻譯過來的很拗口)說白了就是想USB請求執(zhí)行命令,這個看名字也能猜個差不多。ReqType是向USB指示它該如何譯碼ReqCode從而控制數(shù)據(jù)的轉(zhuǎn)移。也就是說不同的譯碼方式對應(yīng)這不同的代碼,不同的代碼控制USB做不同類型(方向)的數(shù)據(jù)轉(zhuǎn)移。

如果ReqCode為REQ_STD,則ReqCode的可能值可以在USB2.0的說明文檔里面找(底層協(xié)議)。

如果ReqCode為REQ_CLASS,則ReqCode的可能值是被記錄在設(shè)備的USB類中。

如果ReqCode為REQ_VENDOR,則ReqCode將會為設(shè)備聲明一個針對不同廠商的專門的代碼。

??接下來說說這個類中的函數(shù):Read();Write();XferData();

??bool?Read(ref byte[] buf,ref int len)

??這個函數(shù)的返回值是bool類型,true表示讀操作成功。

??buf存儲了當(dāng)前讀回的數(shù)據(jù)

??len表示讀回了多少byte的數(shù)據(jù)

??需要注意的是在調(diào)用這個函數(shù)前必須先設(shè)置CyControlEndPoint類中的必要的屬性,之前已經(jīng)提到過了。

??bool Write(ref byte[] buf,ref system.int32 len)

??跟Read()類似此處不詳述。

??XferData()這個函數(shù)會在Read()和Write()函數(shù)中被內(nèi)部調(diào)用,可以不顯式出現(xiàn)。如果必須要用到是必須使用Direction屬性指明方向,前面說Direction不常用就是這個原因。

這個DLL 中的函數(shù)太多,我們需要抓住我們需要的函數(shù)和類,然后依次往后倒,看在使用這個函數(shù)和類時又調(diào)用了什么,一次往下看,不能閑煩,看懂了也就這么些東西。這里我也沒有說全,先寫這么多,如果有在做這個的,可以找我一塊討論。

原文:https://blog.csdn.net/belvey/article/details/47361411?
?

總結(jié)

以上是生活随笔為你收集整理的CyUSB.dll的调用经验介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。