2013-06-21 61 views
11

如何正確使用libusb與連接的USB設備通話?如何最正確地使用libusb與連接的USB設備通話?

具體如何做我的數據傳輸到USB設備,接收設備的信息,找到所連接的設備的名稱,如果他們有存儲等

更具體地說,我將運行這在Mac上  OS   X機器,所以我知道我不能只使用Windows頭文件。

如果對libusb和USB設備有很好的解釋,那也是有幫助的。

回答

6

Here是一個類似的問題,可能是對你有用的一個職位。我包括很多鏈接。

但也許你寧願在這裏看到它。所以在這種情況下,它就這樣了!

Libusb允許您枚舉設備並根據特定的供應商/產品ID(V/P Id)選擇您想要的設備。如果您不知道這一點,並且無法在網上找到產品描述,那麼您可以輕鬆找到它。

如果它不在線,您需要在Linux上使用類似於lsusb的應用程序。 (我不相信它是在Mac上)。當你運行lsusb時,它會列出連接的設備和它們的V/P ID。您可以輕鬆找到您的設備,方法是拔下插頭,運行lsusb,然後再插入設備並進行比較。很簡單的。 Mac上的任何USB列表應用程序都希望顯示像lsusb一樣的V/P ID。

然後,一旦你有這個V/P ID,你將使用libusb(如果使用0.1)來枚舉所有設備並找到與該ID匹配的設備。 (我支持使用libusbx,它恰好具有基於V/P id的單個查找設備功能 - 實際上,libusbx在整個周圍都是更加簡潔的。)

選擇設備後,您將使用功能或輸出報告。這是最複雜的部分,因爲您發送的數據包依賴於我相信的單個設備。它是8個字節的數據,其中只有一個是你想發送給USB設備的單個字符。 (如果你想送8個字符,您將通過字符數組必須循環和發送功能或輸出報告的每個字符。)

舉個例子隨意引用,而特定終端example我寫的控制兩個LED。如果它有幫助,太棒了!它包含一個libusbx和libusb-0.1的例子。

我希望這有助於!

+0

而不是lsusb,在Mac上(您可以在原始文章中找到),您可以使用'system_profiler SPUSBDataType'來獲取供應商ID和產品ID。 –

+0

我知道這是過時的,但你會在多個設備的情況下做什麼?換句話說,假設我有兩臺連接了相同類型和製造商的RFID閱讀器? – audiFanatic

1

,你可以遵循的過程是:

  1. 獲取VID,PID的設備要使用lsusb
  2. 嘗試打開該設備並讀取設備描述符
  3. 如果溝通你想要設備的名稱使用字符串描述符來獲得
  4. 檢查是否有任何內核驅動程序已連接。如果是,然後分離它並做一些原始數據傳輸
  5. 再次獲得響應後重新附加驅動程序。