簡體   English   中英

使用C或C ++從USB設備接收數據

[英]Receiving data from a USB device in C or C++

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

然后,我可以開始使用我的程序中的數據。

我不想使用庫,只有標准的C ++函數,程序應該在Windows 98中使用。

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

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

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

如果你想編寫類似USB設備的軟件,那么你需要在它們仍然有共同點的層面上編寫它。 這是在USB控制器級別,您可以編寫一個過濾器驅動程序,將自身注入USB驅動程序堆棧並查看控制器和設備驅動程序之間的I / O請求數據包。 類似於,例如,窺探TCP / IP流量的winpcap過濾器驅動程序。 雖然看起來沒有什么有趣的東西,你會盯着來回傳遞的字節blob。 這是一個比winpcap更大的問題,至少它看到字節飛行的意思記錄在RFC的某處。 USB不是這種情況,制造USB設備的公司通常也是設備驅動器供應商。 他們保持內部格式沒有記錄。

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

要開始使用,請下載Windows WDK(又名“DDK”)並閱讀Walter Oney的書籍。 最好全部。

如何編寫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

這是讓你入門的東西:

並呼吁大聲更新一個不是上一個千禧年的操作系統。 我聽說Linux對USB有很大的支持。

你在這里得到的建議是正確的; USB並不容易,相信我......我正在研究USB項目,但是從后端開始。 在我看來,你也需要關注后端,這是你真正無需處理圖書館的所有內容,但無論你做什么,你都無法繞過閱讀。

不要氣餒,但你需要在跳入並淹死之前弄濕你的腳。 USB2.0和USB3.0非常干燥,但我發現OSDev Wikiusbmadesimple是有用的踏腳石。

如果您仍然需要在PC中,那么您應該考慮嘗試獲取一些開源USB代碼,如果您能找到它,可能是USB嗅探器。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM