报告描述符未按字节对齐

时间:2018-08-13 22:05:19

标签: usb stm32 stm32f0

我正在尝试制造通用游戏手柄HID设备,我的报告描述符如下所示。

  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 (Button 1)
  0x29,   0x04, // USAGE_MAXIMUM (Button 4)

  0x15,   0x00, // LOGICAL_MINIMUM (0)
  0x25,   0x01, // LOGICAL_MAXIMUM (1)
  0x95,   0x04, // REPORT_COUNT (4)
  0x75,   0x01, // REPORT_SIZE (1)

  0x81,   0x02, // INPUT (Data,Var,Abs)
  0x95,   0x01, // REPORT_COUNT (1)
  0x75,   0x05, // REPORT_SIZE (5)
  0x81,   0x07, // INPUT (Cnst,Var,Rel)

  0x05,   0x01, // USAGE_PAGE (Generic Desktop)
  0x09,   0x30, // USAGE (X)
  0x09,   0x31, // USAGE (Y)

  0x15,   0x81, // LOGICAL_MINIMUM (-127)
  0x25,   0x7F, // LOGICAL_MAXIMUM (127)
  0x75,   0x08, // REPORT_SIZE (8)
  0x95,   0x02, // REPORT_COUNT (2)

  0x81,   0x02, // INPUT (Data,Var,Abs)
  0xC0,   0xC0  // END_COLLECTION x2

usbd_conf.h的行大小为

#define CUSTOMHID_SIZ_REPORT_DESC    48

当我将其插入Windows时,出现错误设备无法启动(代码10)报告描述符未按字节对齐。
我不知道为什么会这样。我已经尝试了STM32示例报告描述符,但给出了相同的错误。

  0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       
  0x09, 0x01,            /* USAGE (Demo Kit)               */    
  0xa1, 0x01,            /* COLLECTION (Application)       */            
  /* 6 */

  /* Led 1 */        
  0x85, 0x01,            /*     REPORT_ID (1)            */
  0x09, 0x01,            /*     USAGE (LED 1)                */
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

  0x85, 0x01,            /*     REPORT_ID (1)              */
  0x09, 0x01,            /*     USAGE (LED 1)              */
  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
  /* 26 */

  /* Led 2 */
  0x85, 0x02,            /*     REPORT_ID 2          */
  0x09, 0x02,            /*     USAGE (LED 2)                */
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

  0x85, 0x02,            /*     REPORT_ID (2)              */
  0x09, 0x02,            /*     USAGE (LED 2)              */
  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
  /* 46 */

  /* Led 3 */        
  0x85, 0x03,            /*     REPORT_ID (3)            */
  0x09, 0x03,            /*     USAGE (LED 3)                */
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

  0x85, 0x03,            /*     REPORT_ID (3)              */
  0x09, 0x03,            /*     USAGE (LED 3)              */
  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
  /* 66 */

  /* Led 4 */
  0x85, 0x04,            /*     REPORT_ID 4)             */
  0x09, 0x04,            /*     USAGE (LED 4)                */
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
  0xB1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */     

  0x85, 0x04,            /*     REPORT_ID (4)              */
  0x09, 0x04,            /*     USAGE (LED 4)              */
  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
  /* 86 */

  /* key Push Button */  
  0x85, 0x05,            /*     REPORT_ID (5)              */
  0x09, 0x05,            /*     USAGE (Push Button)        */      
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
  0x75, 0x01,            /*     REPORT_SIZE (1)            */  
  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   

  0x09, 0x05,            /*     USAGE (Push Button)        */               
  0x75, 0x01,            /*     REPORT_SIZE (1)            */           
  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  

  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
  0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
  0x85, 0x05,            /*     REPORT_ID (2)              */         

  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
  0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */                      
  /* 114 */

  /* Tamper Push Button */  
  0x85, 0x06,            /*     REPORT_ID (6)              */
  0x09, 0x06,            /*     USAGE (Tamper Push Button) */      
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
  0x75, 0x01,            /*     REPORT_SIZE (1)            */  
  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   

  0x09, 0x06,            /*     USAGE (Tamper Push Button) */               
  0x75, 0x01,            /*     REPORT_SIZE (1)            */           
  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  

  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
  0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
  0x85, 0x06,            /*     REPORT_ID (6)              */         

  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
  0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */  
  /* 142 */

  /* ADC IN */
  0x85, 0x07,            /*     REPORT_ID (7)              */         
  0x09, 0x07,            /*     USAGE (ADC IN)             */          
  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */               
  0x26, 0xff, 0x00,      /*     LOGICAL_MAXIMUM (255)      */                 
  0x75, 0x08,            /*     REPORT_SIZE (8)            */           
  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */                    
  0x85, 0x07,            /*     REPORT_ID (7)              */                 
  0x09, 0x07,            /*     USAGE (ADC in)             */                     
  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */                                 
  /* 161 */

  0xc0            /*     END_COLLECTION  

我假设STM没有搞砸,所以我一定在其他地方搞砸了。还有其他可以使描述符不按字节对齐的东西吗?

0 个答案:

没有答案