2016-12-14 377 views
0

我正在研究一個適配器,它需要兩個庫並將發射器/控制器輸入轉換爲HID輸入(通過PPM,但我認爲這對此帖不重要)。我使用的是Arduino,但是在這裏發帖是因爲除非我誤解,否則我的問題是在HID報告描述符中,而不是我的Arduino代碼。HID遊戲手柄報告描述符問題

我有一個樣本描述,如果我使用的作品,工作一個是這樣的:

PROGMEM const char usbHidReportDescriptor[36] = { 
0x05, 0x01,     // USAGE_PAGE (Generic Desktop) 
0x09, 0x05,     // USAGE (Game Pad) 
0xa1, 0x01,     // COLLECTION (Application) 
0xa1, 0x00,     // COLLECTION (Physical) 
0x05, 0x01,     //  USAGE_PAGE (Generic Desktop) 
0x09, 0x30,     //  USAGE (X) 
0x09, 0x31,     //  USAGE (Y) 
0x09, 0x32,     //  USAGE (Z) rx 
0x09, 0x35,     //  USAGE (Rx) ry 
0x35, 0x00,     //  PHYSICAL_MINIMUM (0) 
0x46, 0xff, 0x00,    //  PHYSICAL_MAXIMUM (255) 
0x15, 0x00,     //  LOGICAL_MINIMUM (-127) 
0x26, 0xff, 0x00,     //  LOGICAL_MAXIMUM (127) 
0x75, 0x08,     //  REPORT_SIZE (8) 
0x95, 0x04,     //  REPORT_COUNT (4) 
0x81, 0x02,     //  INPUT (Data,Var,Abs) 
0xc0,       // END_COLLECTION 
0xc0       // END_COLLECTION 
}; 

只有棍棒,沒有任何按鍵,所以我試圖創建具有按鈕的描述符中的第一個樣本。我與HID描述符工具生成的配置文件是這樣的:

PROGMEM const char usbHidReportDescriptor[46] = { 
    0x05, 0x01,     //USAGE_PAGE (Generic Desktop) 
    0x09, 0x05,     //USAGE (Game Pad) 
    0xa1, 0x01,     //COLLECTION (APPLICATION) 
    0xa1, 0x00,     // COLLECTION (Physical) 
    0x05, 0x09,     //USAGE_PAGE (Button) 
    0x19, 0x01,     //USAGE_MINIMUM (Button1) 
    0x29, 0x10,     //USAGE_MAXIMUM (Button 16) 
    0x15, 0x00,     //LOGICAL_MINIMUM (0) 
    0x25, 0x01,     //LOGICAL_MAXIMUM(1) 
    0x95, 0x10,     //REPORT_COUNT (16) 
    0x75, 0x01,     //REPORT_SIZE (1) 
    0x81, 0x02,     //INPUT(Data, Var, Abs) 
    0x05, 0x01,     //USAGE_PAGE (Generic Desktop) 
    0x09, 0x30,     //USAGE (X) 
    0x09, 0x31,     //USAGE (Y) 
    0x09, 0x32,     //USAGE (Z) 
    0x09, 0x33,     //USAGE (Rx) 
    0x15, 0x81,     //LOGICAL_MINIMUM(-127) 
    0x25, 0x7f,     //LOGICAL_MAXIMUM(127) 
    0x75, 0x08,     //REPORT_SIZE(8) 
    0x95, 0x04,     //REPORT_COUNT(4) 
    0x81, 0x02,     //INPUT(Data,Var,Abs) 
    0xc0,      //END_Collection 
    0xc0      //END_Collection 


}; 

當我編譯它,我不明白的錯誤,但上傳到設備後,我得到了「此設備無法啓動(代碼10)。」消息在設備配置文件中。這是目前我在測試中導致此問題的唯一改變。

如果你仍然覺得在Arduino部分可以更好地問這個問題,我可以在那裏發帖,但我認爲這是我做錯了描述符的更多的東西。

我真的很感謝任何人的時間和幫助!請讓我知道是否有更多有助於發佈的信息。

回答

1

在簡單實現之後就已經整理出了這個問題。在usbHidReportDescriptor文件中找到了一個文件,發現usbconfig.h文件中有一個需要調整的長度定義。只要發佈這個以防萬一任何人有同樣的問題!