打印

关于模拟一个Xbox 设备时的按键数量问题

[复制链接]
856|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
背景:
因需要,自己的板子(GD32F150c8t6的主控)要做成一个Xbox 设备,当做xBOx手柄用,借鉴了前人的经验,实现了Xbox 的功能,但是还有很多地方不懂 ,最重要的是游戏控制器的按键数量问题,怎么改报告描述符都是10个按键,求有经验的大佬给小弟点拨一下,下面是配置描述符
const uint8_t XBOX_ConfigDescriptor[XBOX_SIZ_CONFIG_DESC] =
  {
    0x09, /* bLength: Configuration Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    XBOX_SIZ_CONFIG_DESC,
    /* wTotalLength: Bytes returned */
    0x00,
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0x80,         /* bmAttributes: Bus powered, Remote wakeup */
    0xFA,         /* MaxPower 500 mA: this current is used for detecting Vbus */

    /************** Descriptor of Vendor-Specific interface ****************/
    /* 09 */
    0x09,         /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
    0x00,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints */
    0xFF,         /* bInterfaceClass: Vendor-Specific */
    0x5D,         /* bInterfaceSubClass */
    0x01,         /* nInterfaceProtocol */
    0,            /* iInterface: Index of string descriptor */
    /******************** Descriptor of Class-Specific ********************/
    /* 18 */
    0x10,         /* bLength: Descriptor size */
    0x21,                         /* bDescriptorType : hid */
    0x10, 0x01,   /* bcdHID: HID Class Spec release number  0110 */
        0x01,  
        0x24,
        0x81,
        0x14,
        0x03,
        0x00,
        0x03,
        0x13,
        0x02,
        0x00,
        0x03,
        0x00,
    /******************** Descriptor of endpoints ******************/
    /* 27 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

    0x81,          /* bEndpointAddress: Endpoint Address (IN) */
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x20,          /* wMaxPacketSize: 32 Bytes max */
    0x00,
    0x04,          /* bInterval: Polling Interval (4 ms) */
    /* 34 */
           
    0x07,        /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,        /* bDescriptorType: */
                        /*        Endpoint descriptor type */
    0x02,        /* bEndpointAddress: */
                        /*        Endpoint Address (OUT) */
    0x03,        /* bmAttributes: Interrupt endpoint */
    0x20,        /* wMaxPacketSize: 32 Bytes max  */
    0x00,
    0x08,        /* bInterval: Polling Interval (8 ms) */
    /* 41 */
  }

使用特权

评论回复

相关帖子

沙发
1779564238|  楼主 | 2020-4-27 10:25 | 只看该作者

使用特权

评论回复
板凳
1779564238|  楼主 | 2020-4-27 10:30 | 只看该作者
再附上报告描述符
const uint8_t XBOX_ReportDescriptor[XBOX_SIZ_REPORT_DESC] =
{                    
   /* 0 - 7 */
        0x05, 0x01,                  /* USAGE_PAGE (Generic Desktop) */
        0x09, 0x04,                  /* USAGE (Joystick) */
        0xA1, 0x01,                         /* COLLECTION (Application) */
        0xA1, 0x02,                   /* COLLECTION (Logical) */
       
        //输入报告配置
        /* 8 - 31 */
        0x15, 0x00,             /* Logical Minimum (0) */
        0x26, 0xFF, 0x03,       /* Logical Maximum (1023) */
        0x35, 0x00,                        /* Physical Minimum (0) */
        0x46, 0xFF, 0x03,       /* Physical Maximum (1023) */
        0x75, 0x0A,                        /* Report Size (10) */       
        0x95, 0x01,             /* Report Count (1) */       
        0x09, 0x30,                        /* Usage (X) */       
        0x81, 0x02,             /* Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) */       
        0x75, 0x06,                        /* Report Size (6) */       
        0x95, 0x01,             /* Report Count (1) */                       
        0x81, 0x01,                                /* Input (Cnst,Ary,Abs) */        
       
        /* 32 - 47*/
        0x26, 0xFF, 0x00,       /* Logical Maximum (255) */
        0x46, 0xFF, 0x00,       /* Physical Maximum (255) */
        0x75, 0x08,                        /* Report Size (8) */       
        0x95, 0x02,             /* Report Count (2) */       
        0x09, 0x31,                        /* Usage (Y) */                       
        0x09, 0x32,                        /* Usage (Z) */       
        0x81, 0x02,             /* Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) */
       
        /* 48 - 69*/
        0x75, 0x01,             /* Report Size (1) */               
        0x95, 0x17,                        /* Report Count (23) */               
        0x25, 0x01,             /* Logical Maximum (1) */       
        0x45, 0x01,             /* Physical Maximum (1) */
        0x05, 0x09,                        /* Usage Page (Button) */
        0x19, 0x01,                        /* Usage Minimum (Button 1) */
        0x29, 0x17,             /* Usage Maximum (Button 23) */
        0x81, 0x02,             /* Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) */
        0x75, 0x01,                        /* Report Size (1) */               
        0x95, 0x01,             /* Report Count (1) */
        0x81, 0x01,                                /* Input (Cnst,Ary,Abs) */
       
        /* 70 - 87*/
        0x06, 0x00, 0xFF,                /* Usage Page (Vendor-Defined 1) */  
        0x09, 0x01,                                /* Usage (Vendor-Defined 1) */
        0x26, 0xFF, 0x00,       /* Logical Maximum (255) */
        0x46, 0xFF, 0x00,       /* Physical Maximum (255) */
        0x75, 0x08,             /* Report Size (8) */
        0x95, 0x01,                        /* Report Count (1) */
        0x81, 0x02,             /* Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) */
        0xC0,                   /* End Collection */
       
        /* 88 - 103*/
        0xA1, 0x02,                   /* COLLECTION (Logical) */
        0x75, 0x08,             /* Report Size (8) */     
        0x95, 0x38,                        /* Report Count (56) */
        0x46, 0xFF, 0x00,       /* Physical Maximum (255) */
        0x26, 0xFF, 0x00,       /* Logical Maximum (255) */
        0x09, 0x02,             /* Usage (Vendor-Defined 2) */       
        0x81, 0x02,             /* Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) */
       
        //输出报告配置
        /* 104 - 117*/
        0x75, 0x08,                       /* Report Size (8) */               
        0x95, 0x40,                                  /* Report Count (64) */
        0x46, 0xFF, 0x00,       /* Physical Maximum (255) */
        0x26, 0xFF, 0x00,       /* Logical Maximum (255) */
        0x09, 0x03,             /* Usage (Vendor-Defined 3) */       
        0x91, 0x02,                        /* Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) */
       
        /* 118 - 136*/
        0x75, 0x08,                       /* Report Size (8) */               
        0x95, 0x03,                        /* Report Count (3) */
        0x26, 0xFF, 0x00,       /* Logical Maximum (255) */
        0x46, 0xFF, 0x00,       /* Physical Maximum (255) */
        0x09, 0x01,             /* Usage (Vendor-Defined 1) */
        0x09, 0x02,             /* Usage (Vendor-Defined 2) */
        0x09, 0x03,             /* Usage (Vendor-Defined 3) */
        0xB1, 0x02,                                /* Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) */
        0xC0,                   /* End Collection */
       
        /*137*/
        0xC0                 /* End Collection */
}; /* CustomHID_ReportDescriptor */

使用特权

评论回复
地板
1779564238|  楼主 | 2020-4-27 10:34 | 只看该作者
1779564238 发表于 2020-4-27 10:30
再附上报告描述符

使用特权

评论回复
5
xgx520| | 2021-7-29 18:08 | 只看该作者
您好,请问下调好了吗?我现在也在开发个游戏手柄,能交流下吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

67

帖子

0

粉丝