打印
[USB编程]

请教 USB HID ReportDescriptor

[复制链接]
2016|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
19840312|  楼主 | 2014-11-27 19:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  {
        0x06, 0xFF, 0x00,      /*全局项目 2字节    用途     USAGE_PAGE (Vendor Page: 0xFF00) */                       
        0x09, 0x01,            /*局部项目 1字节    用途     USAGE       数据0x01:通用桌面控制  (Demo Kit)               */   
        0xa1, 0x01,            /*主项目   1字节    集合开始 COLLECTION  数据0x01:用于包含多种报告、多种应用     */            

       0x85, 0x01,            /*全局项目 1字节    报告ID   REPORT_ID (2)              */            
       0x15, 0x00,            /*全局项目 1字节    逻辑最小 LOGICAL_MINIMUM (0)        */               
        0x25, 0x01,            /*全局项目 2字节    逻辑最大 LOGICAL_MAXIMUM (255)      */                  
        0x75, 0x08,            /*全局项目 1字节    报告大小 REPORT_SIZE (8)            */        
        0x95, 0x01,            /*全局项目 1字节    报告数量 REPORT_COUNT (1)          */
        0x09, 0x01,            /*局部项目 1字节    用途     USAGE 数据0x01:    */         
        0x81, 0x82,            /*主项目   1字节    输入     INPUT (Data,Var,Abs,Vol)   */   
                              
       0xc0                      /*主项目   0字节    集合结束END_COLLECTION()               */        
  }; /* CustomHID_ReportDescriptor */

这么配置 通过主函数发送数据到USB,计算机USB调试助手能收到数据。将0x95, 0x01 (报告数量 REPORT_COUNT )中1改为2或者其它值后,计算机USB调试助手就收不到任何数据了;是需要在什么地方设置吗?还是哪儿的问题,请指教


stm32f105的usb3.2.0库,
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
  {
    0x09, /* bLength: Configuation Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    CUSTOMHID_SIZ_CONFIG_DESC,
    /* wTotalLength: Bytes returned */
    0x00,
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0xC0,         /* bmAttributes: Bus powered */
    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */

    /************** Descriptor of Custom HID 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 */
    0x03,         /* bInterfaceClass: HID */
    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
    0,            /* iInterface: Index of string descriptor */
    /******************** Descriptor of Custom HID HID ********************/
    /* 18 */
    0x09,         /* bLength: HID Descriptor size */
    HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country */
    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
    0x22,         /* bDescriptorType */
    CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
    0x00,
    /******************** Descriptor of Custom HID endpoints ******************/
    /* 27 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

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

相关帖子

沙发
computer00| | 2014-11-28 23:44 | 只看该作者
这个表示数据长度,你发送数据时也要做相应的修改。同时接收端也要匹配才行。

使用特权

评论回复
评分
参与人数 1威望 +8 收起 理由
19840312 + 8 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎咨询: 需要 步进电机 驱动器,找我!专业的一体化步进电机驱动控制器 www.bj7te.com 承接电机控制相关项目 承接光电相关项目 承接单片机相关项目

28

主题

137

帖子

0

粉丝