GD32 USB 复合设备文件描述符

[复制链接]
77|4
 楼主 | 2019-1-31 10:04 | 显示全部楼层 |阅读模式

使用GD32 两个接口,分别用于鼠标和上位机通信。

鼠标使用端点1 进行通信 (只用到EP1_IN)

上位机通信使用端点2  (EP2_IN、EP2_OUT)


 楼主 | 2019-1-31 10:05 | 显示全部楼层
配置描述符如下:
  1. /* USB HID device configuration descriptor set */
  2. const uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZE] =
  3. {
  4.     0x09,         /* bLength: configuration descriptor size */
  5.     USB_DESCTYPE_CONFIGURATION, /* bDescriptorType: configuration descriptor type */
  6.     USB_HID_CONFIG_DESC_SIZE,   /* wTotalLength: configuration descriptor set total length */
  7.     0x00,
  8.     0x02,         /* bNumInterfaces: 2 interface */
  9.     0x01,         /* bConfigurationValue: configuration value */
  10.     0x00,         /* iConfiguration: index of string descriptor describing the configuration */
  11.     0xA0,         /* bmAttributes: device attributes (bus powered and support remote wakeup) */
  12.     0x32,         /* bMaxPower 100 mA: this current is used for detecting Vbus */




  13.    /*
  14.     interface 0 for mouse.
  15.     huohongpeng 2017-02-10
  16.     */
  17.     /************** interface descriptor  0****************/
  18.     0x09,         /* bLength: interface descriptor size */
  19.     USB_DESCTYPE_INTERFACE,/* bDescriptorType: interface descriptor type */
  20.     0x00,         /* bInterfaceNumber: number of interface */
  21.     0x00,         /* bAlternateSetting: alternate setting */
  22.     0x01,         /* bNumEndpoints: just use 1 endpoint for Tx */
  23.     0x03,         /* bInterfaceClass: HID class */
  24.     0x01,         /* bInterfaceSubClass: 1 = BIOS boot, 0 = no boot */
  25.     0x02,         /* nInterfaceProtocol: 0 = none, 1 = keyboard, 2 = mouse */
  26.     0x00,         /* iInterface: index of interface string descriptor */


  27.     /******************** HID descriptor  0********************/
  28.     0x09,         /* bLength: HID descriptor size */
  29.     HID_DESC_TYPE,/* bDescriptorType: HID */
  30.     0x11,         /* bcdHID: HID class protocol(HID1.11) */
  31.     0x01,
  32.     0x00,         /* bCountryCode: device country code */
  33.     0x01,         /* bNumDescriptors: number of HID class descriptors to follow */
  34.     0x22,         /* bDescriptorType: followed class descriptor type(report descriptor) */
  35.     USB_HID_REPORT_DESC0_SIZE, /* wDescriptorLength: total length of report descriptor */
  36.     0x00,


  37.     /******************** Mouse endpoint descriptor ********************/
  38.     0x07,          /* bLength: Endpoint Descriptor size */
  39.     USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
  40.     HID1_IN_EP,     /* bEndpointAddress: endpoint address (EP1_IN) */
  41.     0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
  42.     HID1_IN_PACKET, /* wMaxPacketSize: 4 bytes max */
  43.     0x00,
  44.     0x0A,          /* bInterval: polling interval (10 ms) */






  45.     /*
  46.     interface 1 for host communication to mcu.
  47.     huohongpeng 2017-02-10
  48.     */
  49.     /************** interface descriptor  1****************/
  50.     0x09,         /* bLength: interface descriptor size */
  51.     USB_DESCTYPE_INTERFACE,/* bDescriptorType: interface descriptor type */
  52.     0x01,         /* bInterfaceNumber: number of interface */
  53.     0x00,         /* bAlternateSetting: alternate setting */
  54.     0x02,         /* bNumEndpoints: use 2 endpoint for Tx and Rx*/
  55.     0x03,         /* bInterfaceClass: HID class */
  56.     0x00,         /* bInterfaceSubClass: 1 = BIOS boot, 0 = no boot */
  57.     0x00,         /* nInterfaceProtocol: 0 = none, 1 = keyboard, 2 = mouse */
  58.     0x00,         /* iInterface: index of interface string descriptor */


  59.     /******************** HID descriptor  1********************/
  60.     0x09,         /* bLength: HID descriptor size */
  61.     HID_DESC_TYPE,/* bDescriptorType: HID */
  62.     0x11,         /* bcdHID: HID class protocol(HID1.11) */
  63.     0x01,
  64.     0x00,         /* bCountryCode: device country code */
  65.     0x01,         /* bNumDescriptors: number of HID class descriptors to follow */
  66.     0x22,         /* bDescriptorType: followed class descriptor type(report descriptor) */
  67.     USB_HID_REPORT_DESC1_SIZE, /* wDescriptorLength: total length of report descriptor */
  68.     0x00,


  69.     /****************host communication mcu Tx endpoint descriptor ***********/
  70.     0x07,          /* bLength: Endpoint Descriptor size */
  71.     USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
  72.     HID2_IN_EP,     /* bEndpointAddress: endpoint address (EP2_IN) */
  73.     0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
  74.     HID2_IN_PACKET, /* wMaxPacketSize: 64 bytes max */
  75.     0x00,
  76.     0x0A,          /* bInterval: polling interval (10 ms) */


  77.     /************** host communication mcu Tx endpoint descriptor ************/
  78.     0x07,          /* bLength: Endpoint Descriptor size */
  79.     USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
  80.     HID2_OUT_EP,     /* bEndpointAddress: endpoint address (EP2_OUT) */
  81.     0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
  82.     HID2_OUT_PACKET, /* wMaxPacketSize: 64 bytes max */
  83.     0x00,
  84.     0x0A,          /* bInterval: polling interval (10 ms) */
  85. };
  86. ---------------------
复制代码
 楼主 | 2019-1-31 10:06 | 显示全部楼层
鼠标报告描述符如下:
  1. /*
  2. for mcu and host communication HID report descriptor 
  3. huohongpeng 2017-02-10
  4. create tools: HID Description Tool
  5. */
  6. const uint8_t HID_ReportDesc1[USB_HID_REPORT_DESC1_SIZE] =
  7. {
  8.     0x05,   0x40,   /* USAGE_PAGE (HDWB Page)    */ 
  9.     0x09,   0x01,   /* USAGE (host commnication) */
  10.     0xa1,   0x01,   /* COLLECTION (Application)  */


  11.     /* The Input Report */
  12.     0x09,   0x03,   /* USAGE (Vendor defined)    */
  13.     0x15,   0x00,   /* LOGICAL_MINIMUM (0)       */
  14.     0x25,   0xff,   /* LOGICAL_MAXIMUM (255)     */
  15.     0x75,   0x08,   /* REPORT_SIZE (8)           */
  16.     0x95,   0x40,   /* REPORT_COUNT (64)         */
  17.     0x81,   0x02,   /* INPUT (Data, Var, Abs)    */


  18.     /* The Output Report */
  19.     0x09,   0x04,   /* USAGE (Vendor defined)    */
  20.     0x15,   0x00,   /* LOGICAL_MINIMUM (0)       */
  21.     0x25,   0xff,   /* LOGICAL_MAXIMUM (1)       */
  22.     0x75,   0x08,   /* REPORT_SIZE (8)           */
  23.     0x95,   0x40,   /* REPORT_COUNT (64)         */
  24.     0x91,   0x02,   /* OUTPUT (Data, Var, Abs)   */
  25.     0xc0            /* END_COLLECT               */
  26. };
  27. ---------------------
复制代码
| 2019-2-9 10:26 | 显示全部楼层
鼠标报告符是什么意思啊
| 2019-2-13 09:06 | 显示全部楼层
本帖最后由 lvben5d 于 2019-2-13 09:12 编辑

楼主 EP2_IN,EP2_OUT  可以同时 使能? 我对这个双向端点理解还是不行。
  • 一个具体的端点只能工作在一种传输模式下。通常我们把工作在什么模式下的端点,叫做什么端点。如控制端点、批量端点、同步端点、中断端点。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表