2010-06-05 34 views
9

我需要一個所有插入USB設備的列表,並讓用戶選擇一個讓控制檯應用程序接收USB設備發送的任何數據。使用C或C++從USB設備接收數據

然後我可以開始在我的程序中播放數據。

我不想使用圖書館的,唯一的標準C++函數,程序應該在Windows 98

+0

有沒有標準的C++功能來做到這一點。 – 2010-06-05 18:38:05

+0

我不確定...你可以告訴我如何做到這一點。 – Midas 2010-06-05 18:40:49

+0

爲什麼你不想使用庫? – OlimilOops 2010-06-05 18:45:31

回答

1

工作,這裏的東西,讓你開始:

而對於哭出聲來更新操作系統,從最後千年不是。我聽說Linux對USB有很好的支持。

+1

+1更新 - Windows 98是古老的。 (對於隱含的Linux推薦+1。)如果人們更新,我們會更快地獲得很酷的東西。 – Thanatos 2010-06-05 19:09:53

+0

今天我讀了很多,沒有任何結果,我不覺得只閱讀一本關於USB規範的書。你可以給我一個我想做的代碼示例嗎?它可以是非常基本的。 – Midas 2010-06-05 19:30:14

+0

@Midas:低層次的東西並不簡單。就我而言,我花了很多時間閱讀規範,以更好地瞭解USB的工作原理。如果您正在尋找有關事物的信息,那麼閱讀文檔有時會更好,而不是跳入示例代碼。 – 2010-06-05 19:57:06

3

怎麼能寫一個USB的程序,想要了解它的背景,而不想多讀這些,不想在同一時間使用一個庫?不管怎麼說,有一個來自Stefan Meyer的項目「libUSB Win32」目前還沒有處於重大的發展階段,但用C語言編寫的,也許這可能是你的東西,它也有能力在古代windows版本下運行;) 你可以在這裏找到它:
http://sourceforge.net/apps/trac/libusb-win32/wiki
前段時間我已經在VB6,使得使用「的libusb的Win32」的書面這個不知道它是否能對您有用:
http://www.activevb.de/cgi-bin/upload/download.pl?id=3061

+0

libUSB基於標準C++代碼,不是嗎?我可以自己寫這個,適合我的程序。 我可以看看源代碼。 – Midas 2010-06-05 19:51:41

+0

網址似乎已更改。你的不再工作了。 但使用谷歌我發現這個鏈接工作:https://sourceforge.net/projects/libusb-win32/ – Scindix 2018-01-19 17:47:06

+0

維基mentiions以下內容: 「libusb-win32現在處於Bug-Fix-Only維護模式。建議新項目應該遷移到libusb-1.0 API並改用libusb Windows(http://libusb.info)。「 – Scindix 2018-01-19 17:52:58

19

這是一個非常持續問題在論壇和編程Q + A網站。從來沒有一個快樂的結局。 USB中的B表示總線。這是計算機硬件設計中的一個術語,用於描述電子設備交換數據的電氣接口。它的作用與您機器內部的PCI(快速)總線完全相同。由於首先是電氣規格,USB支持大量類型的設備。任何從無線網絡適配器,調制解調器,閃存卡到茶壺加熱器。幾乎所有處理不好的設備都是需要非常大帶寬的設備,例如視頻適配器。

USB規範有一個非常優雅的協議規範,描述設備如何共享總線以及它們如何交換數據。然而,該協議規範根本沒有描述數據的格式,只是定義了能夠傳遞字節塊的概念。設備本身要給這些字節賦予意義。

在機器端,您需要軟件來解釋這些字節,並讓機器對它們做一些有趣的事情。這需要一個設備驅動程序。就像您的視頻卡和網絡接口卡需要設備驅動程序一樣。很顯然,一個視頻驅動程序是很有不同於NIC驅動程序。 USB驅動程序也是如此,幾乎沒有共同之處。

如果你想編寫對待USB設備類似的軟件,那麼你需要在它們仍然有共同點的級別編寫它。這是在USB控制器級別,您可以編寫一個篩選器驅動程序,將其注入到USB驅動程序堆棧中,並查看控制器和設備驅動程序之間的I/O請求數據包。類似於對TCP/IP流量進行監視的winpcap過濾器驅動程序。雖然沒有太多有趣的東西可以看,但是你會盯着來回傳遞的字節。這是一個比winpcap更大的問題,至少它看到的字節飛行的意思是在RFC中記錄的。 USB的情況並非如此,製造USB設備的公司通常也是設備驅動供應商。他們保持內部格式無證。

寫過濾器驅動程序需要相當先進的技能,有很多痛點。當你犯了一個簡單的錯誤時,就像操作系統崩潰一樣。最近Windows驅動模型也有相當大的變化,USB驅動已經進入環3(用戶模式),以保持操作系統的穩定。

要開始下載Windows WDK(又名「DDK」)並閱讀Walter Oney的書籍。最好全部。

+0

謝謝,但我真的不想要一個司機。那是問題嗎?你確定這本書對我有好處嗎?我住在比利時,我不能在這裏買。 – Midas 2010-06-05 20:33:47

+1

是的,這將是一個問題。 Amazon.com提供給比利時afaik。你可能不想在它上面花太多錢,美滿的結局等等。我知道你在大學城有好的圖書館。 – 2010-06-05 20:37:54

+0

+1非常好回答 – OlimilOops 2010-06-05 20:39:29

0

我只需要一個所有插入USB設備的列表,並讓用戶選擇一個讓控制檯應用程序接收USB設備發送的任何數據。

獲取列表並不是大問題,它正在接收數據。

我知道你不想寫驅動程序,但是這是驅動程序所做的:從設備接收數據。

0

要添加一些很好的答案...

USB編程是不是「小事」

首先,你必須瞭解操作系統如何工作以及爲什麼它們的驅動程序。

除非你想程序DOS的RS-232端口,你可以不直接與USB端口進行通信,必須與操作系統和你所感興趣的設備的驅動程序進行通信。

0

你在這裏得到的建議是關鍵的; USB並不容易,相信我......我正在開發USB項目,但是從後端開始。在我看來,你也需要考慮後端,那就是你不必處理圖書館和所有這些,但是你無論如何都無法繞過閱讀。

不要灰心,但在跳進去和淹死之前,確實需要弄溼你的腳。 USB2.0和USB3.0相當乾燥,但我發現OSDev Wikiusbmadesimple是有用的墊腳石。

如果你仍然需要在PC上,那麼你應該考慮嘗試獲得一些開源USB代碼,如果你可以找到USB嗅探器。

+0

請不要將簽名添加到您的帖子。 (根據[幫助內容](http://stackoverflow.com/help/behavior)中的「不要使用簽名,標語或問候語」部分。) – 2013-08-03 11:37:48