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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CyUSB.dll的调用经验介绍

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

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

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

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

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

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

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

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

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

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

??然后很重要的一個函數就是:CyUSBDiceves

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

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

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

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

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

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

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

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

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

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

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

??buf存儲了當前讀回的數據

??len表示讀回了多少byte的數據

??需要注意的是在調用這個函數前必須先設置CyControlEndPoint類中的必要的屬性,之前已經提到過了。

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

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

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

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。