簡體   English   中英

libusb中斷傳輸

[英]libusb interrupt transfer

我需要對定制的HID USB設備(控制面板上的一些按鈕和LED)進行反向工程。 該驅動程序僅在Windows上可用,我們需要* nix實現。

該設備顯然是HID設備,但不屬於特定類別。 它提供兩個接口,每個接口都有一個中斷端點。

我的設置目前涉及在Ubuntu主機上運行Windows的VirtualBox,以通過Wireshark捕獲USB流量。 協議相當簡單,我已經獲得了相當好的理解。

我在一個簡單的C ++控制台程序中使用libusb-1.0進行原型設計。 我已經設法通過發出SET_REPORT控制傳輸來切換LED,但是在通過傳輸中斷接收按鈕時很難。

實際上以下呼叫永遠阻止:

unsigned char bytes[8] = { 0 };
int len = 0;
int ret = libusb_interrupt_transfer(handle, 0x81, bytes, 8, &len, 0); 

在Wireshark中檢查生成的URB時,它看起來與在Windows會話中捕獲的等效項完全相同。 我仍然沒有收到設備的回復。

我失敗了我錯過了一些設置。 請注意,設備已正確打開,並且設備提供的兩個接口均已成功聲明。 即使在我的linux應用程序中,通過控制傳輸的輸入報告即將到來。

謝謝你的指針! 阿恩

附錄I:我想知道在使用libusb_interrupt_transfer()時我應該如何指定我想要接收哪個報告ID?

附錄II:當比較Windows驅動程序對Wireshark中上述代碼生成的請求時,我沒有看到任何差異(URB中的值相同)。 但是,只有當Windows驅動程序發出時才會返回中斷傳輸。

在Wireshark中檢查Windows驅動程序通信時,除了各種GET_DESCRIPTOR(...)之外,我沒有看到任何控制傳輸。 最重要的是:沒有SET_INTERFACESET_CONFIGURATION因此我懷疑問題是關系到圖書館或如何我使用它,並沒有相關的設備。

您發布的代碼存在問題。 您為定義bytes而編寫的語法不會產生8字節數組,但是您要求libusb將8個字節寫入該地址,這樣您可能會收到錯誤或內存損壞。 試試這個:

unsigned char buffer[8];
int len = 0;
int ret = libusb_interrupt_transfer(handle, 0x81, buffer, sizeof(buffer), &len, 0);

每個HID報告都有自己的端點,因此您可以通過指定正確的端點來指定要接收的報告。 您指定了端點1 IN(0x81)。 您確定在設備的描述符中定義了端點嗎? 也許你應該得到描述符(在Ubuntu中使用lsusb -v )並在這里發布它們以便我們檢查它們。

我有同樣的問題, libusb_interrupt_transfer()永遠阻塞讀取端點(bEndpoinntAddress:0x81 EP 1 IN(輸出lsusb -v )),但已解決。

就我而言,我寫的是這樣的。

#define ENDPOINT_IN 0x81
unsigned char buffer[8];
int len = 0;
int ret = libusb_interrupt_transfer(handle, ENDPOINT_IN, buffer, sizeof(buffer), &len, 0);

但是,我的設備需要在讀取數據之前發送一些代碼,
並且需要sizeof 64緩沖區,盡管lsusb -v的輸出bLength是7。

#define ENDPOINT_OUT 0x01
#define ENDPOINT_IN 0x81
unsigned char buffer[64] = {0x20, 0x01, 0x03, 0x02, 0x07};
int len = 0;
int send_ret = libusb_interrupt_transfer(handle, ENDPOINT_OUT, buffer, sizeof(buffer), &len, 0);
int recv_ret = libusb_interrupt_transfer(handle, ENDPOINT_IN, buffer, sizeof(buffer), &len, 0);

buffer[64] = {0x20, 0x01, 0x03, 0x02, 0x07}取決於器件規范。

希望這可以幫助。

暫無
暫無

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

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