2016-09-26 199 views
0

我實施具有以下接口的自定義HID設備之間的區別:USB HID「獲取輸入報告」和「輸入報告」

0x06, 0xA0, 0xFF, // Usage Page (Vendor Defined 0xFFA0) 
0x09, 0x01,  // Usage (0x01) 
0xA1, 0x01,  // Collection (Application) 

0x85, 0x01,  // Report ID (1) 
0x15, 0x00,  // Logical Minimum (0) 
0x26, 0x01, 0x00, // Logical Maximum (1) 
0x75, 0x08,  // Report Size (8) 
0x95, 0x01,  // Report Count (1) 
0x91, 0x02,  // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 

0x85, 0x01,  // Report ID (1) 
0x15, 0x00,  // Logical Minimum (0) 
0x26, 0x01, 0x00, // Logical Maximum (1) 
0x75, 0x01,  // Report Size (1) 
0x95, 0x02,  // Report Count (2) 
0x81, 0x02,  // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 
0x75, 0x06,  // Report Size (6) 
0x95, 0x01,  // Report Count (1) 
0x81, 0x01,  // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) 

0x85, 0x03,  // Report ID (1) 
0x15, 0x00,  // Logical Minimum (0) 
0x26, 0xFF, 0xFF, // Logical Maximum (65535) 
0x75, 0x10,  // Report Size (16) 
0x95, 0x01,  // Report Count (1) 
0xB1, 0x02,  // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 

0xC0,    // End Collection 

當我通過USB插頭的邏輯此設備插入計算機分析我看到它枚舉,然後東西(我不知道是什麼,什麼想法?)使用HID報告描述智能搶了一堆報道:

(control)(endpoint 0) Get Input Report[1] 
(control)(endpoint 0) Get Feature Report[1] 

「獲取輸入報告」條目困惑我的我認爲輸入報告是通過中斷傳送發送的。如果我使用USBHID的hid_write,我看到以下條目,所以我必須通過左右中斷傳輸發送輸入報告,至少有一半吧...:

(interrupt)(endpoint 1) Input Report[1]" 

我一直無法找到一個描述之間的差異信息控制「獲得輸入報告」並中斷「輸入報告」傳輸,我希望你們中的一位知道這些傳輸。

爲什麼控件「得到輸入報告」存在?

爲什麼不只是規範要求每個「輸入報告」ID條目存在「獲取功能報告」條目?

爲什麼使用針對輸入報告的控件傳輸與中斷傳輸相比,爲每個定義的輸入/特性報告提取輸入/功能報告?

回答

0

看一看USB HID v1.1,有51頁Get_Report請求定義:

這個請求是在初始化時絕對項目和確定的特徵事項的狀態很有用。此請求不打算用於定期輪詢設備狀態。

在這裏,這正是驅動程序正在做的事情:它檢索各種報告以初始化其當前狀態。請注意,主機無法請求設備在其中斷管道上發送報告。因此對控制管道的要求。

第4.4章解釋了各種終端使用情況。

另請注意功能報告和輸入報告不會處理相同的數據,即使它們具有相同的報告ID(報告ID是按照報告類型)也是如此。