2017-04-30 41 views
0

我的USB設備有一個 HID類接口。USB中的多頂級HID收集...是否可以同時向主機提供2個報告?

我目前在我的報告描述符2設備中定義了:鼠標(報告ID == 1)和鍵盤(報告ID == 2)。

我已將HID輪詢週期設置爲100ms。

爲了讓主機知道我要送鍵盤或鼠標的數據,我必須先說,與報告ID數據,如:

//Mouse data for the host 
0x01 //report ID for mouse 
0x0n //buttons 
0xnn //delta X 
0xnn //delta y 

所以,我面對的困難,我一次只能更新關於這些設備之一的主機。

我的問題是:有沒有辦法同時發送兩個報告(鼠標和鍵盤)?

如果沒有,您認爲將輪詢頻率加倍並在兩個設備之間交替會是一個合適的解決方案嗎?

回答

0

兩個不同的報告總是按順序報告,因爲他們都使用相同的中斷管道來通過。

現在,如果您不需要使用引導協議鍵盤和鼠標報告,則可以設計一個自定義報告描述符,該描述符描述包含鼠標和鍵盤數據的單個報告。這樣,您就可以同時發送兩個數據集。儘管如此,輪詢時間間隔更短會更容易。

實施例報告描述符:

0x05, 0x01,     // UsagePage (desktop) 
0x09, 0x06,     // Usage (Keyboard) 
0xa1, 0x01,     // Collection (Application) 
0x85, 0x01,     //  ReportID (1) 
0x25, 0x01,     //  LogicalMaximum (1) 
0x75, 0x01,     //  ReportSize (1) 
0x95, 0x08,     //  ReportCount (8) 
0x05, 0x07,     //  UsagePage (keyboard) 
0x19, 0xe0,     //  UsageMinimum (LeftControl) 
0x29, 0xe7,     //  UsageMaximum (RightGui) 
0x81, 0x02,     //  Input (Variable) 
0x26, 0xdd, 0x00,    //  LogicalMaximum (221) 
0x75, 0x08,     //  ReportSize (8) 
0x95, 0x06,     //  ReportCount (6) 
0x19, 0x00,     //  UsageMinimum (NoEvent) 
0x29, 0xdd,     //  UsageMaximum (KeypadHexadecimal) 
0x81, 0x00,     //  Input 
0x25, 0x01,     //  LogicalMaximum (1) 
0x75, 0x01,     //  ReportSize (1) 
0x95, 0x03,     //  ReportCount (3) 
0x05, 0x08,     //  UsagePage (led) 
0x19, 0x01,     //  UsageMinimum (NumLock) 
0x29, 0x03,     //  UsageMaximum (ScrollLock) 
0x91, 0x02,     //  Output (Variable) 
0x15, 0x81,     //  LogicalMinimum (-127) 
0x25, 0x7f,     //  LogicalMaximum (127) 
0x75, 0x08,     //  ReportSize (8) 
0x95, 0x02,     //  ReportCount (2) 
0x05, 0x01,     //  UsagePage (desktop) 
0x09, 0x30,     //  Usage (X) 
0x09, 0x31,     //  Usage (Y) 
0x81, 0x04,     //  Input (Relative) 
0x15, 0x00,     //  LogicalMinimum (0) 
0x25, 0x01,     //  LogicalMaximum (1) 
0x75, 0x01,     //  ReportSize (1) 
0x95, 0x03,     //  ReportCount (3) 
0x05, 0x09,     //  UsagePage (button) 
0x19, 0x01,     //  UsageMinimum (Button(1)) 
0x29, 0x03,     //  UsageMaximum (Button(3)) 
0x81, 0x02,     //  Input (Variable) 
0xc0,       // EndCollection 

介紹:

  • 一個輸入報告#1含有:

    Data Byte : [0  ][1 .. 6][7  ][8  ][9   ] 
    Data  : [Modifiers][Keys ][Mouse dx][Mouse dy][Mouse Btns] 
    
  • 的輸出報告#1含有:

    Data Byte : [0  ] 
    Data  : [Kbd leds] 
    
+0

我以爲主機不會加載HID鼠標設備,除非我專門創建了一個頂級集合,其中字段「usage」定義爲「Mouse」。我會嘗試你的解決方案,並讓你知道它是否有效。謝謝! – ismarlowe

相關問題