USB HID How-to

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoosenpin/article/details/80102711

1 Report Descriptor
1.1 自定义一个输入和输出64字节数据的报告描述符(无Report ID)
读写数据格式:1字节ReportID + payload

1.1.1 例子1
当前例子数据长度是64字节,没有ReportID,所以ReportID取0,数据格式是:0x00 + 64 bytes payload(负载如果不足64字节,一定要补齐64字节,否则Windows ReadFile()和WriteFile()会失败。)
static const unsigned char report_descriptor[] = {
  0x06, 0xA0, 0xFF,    //用法页(FFA0h, vendor defined)
  0x09, 0x01,            //用法(vendor defined)
  0xA1, 0x01,            //集合(Application)
  0x09, 0x02,            //用法(vendor defined)
  0xA1, 0x00,            //集合(Physical)
  0x06, 0xA1, 0xFF,    //用法页(vendor defined)
        //输入报告
  0x09, 0x03,            //用法(vendor defined)
  0x09, 0x04,            //用法(vendor defined)
  0x15, 0x80,            //逻辑最小值(0x80 or -128)
  0x25, 0x7F,            //逻辑最大值(0x7F or 127)
  0x35, 0x00,            //物理最小值(0)
  0x45, 0xFF,            //物理最大值(255)
  0x75, 0x08,            //报告长度Report size (每个字段8位)
  0x95, 0x40,            //报告数值(64 字节)
  0x81, 0x02,            //输入(data, variable, absolute)
        //输出报告
  0x09, 0x05,            //用法(vendor defined)
  0x09, 0x06,            //用法(vendor defined)
  0x15, 0x80,            //逻辑最小值(0x80 or -128)
  0x25, 0x7F,            //逻辑最大值(0x7F or 127)
  0x35, 0x00,            //物理最小值(0)
  0x45, 0xFF,            //物理最大值(255)
  0x75, 0x08,            //报告长度(每个字段8位)
  0x95, 0x40,            //报告数值(64 字节)
  0x91, 0x02,            //输出(data, variable, absolute)
  0xC0,                      //集合结束(Physical)
  0xC0                       //集合结束(Application)
};

1.1.2 例子2
static const unsigned char CustomHID_ReportDescriptor[] =
{
    0x05, 0x8c, /* USAGE_PAGE (ST Page) */
    0x09, 0x01, /* USAGE (Demo Kit) */
    0xa1, 0x01, /* COLLECTION (Application) */

    // The Input report
    0x09,0x03, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x81,0x02, // INPUT (Data,Var,Abs)

    // The Output report
    0x09,0x04, // USAGE ID - Vendor defined
    0x15,0x00, // LOGICAL_MINIMUM (0)
    0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
    0x75,0x08, // REPORT_SIZE (8bit)
    0x95,0x40, // REPORT_COUNT (64Byte)
    0x91,0x02, // OUTPUT (Data,Var,Abs)

    0xc0 /* END_COLLECTION */
}; /* CustomHID_ReportDescriptor */

1.2 Windows读写HID设备
Windows主机端与自定义USB_HID设备通信详解
http://www.docin.com/p-1423599341.html

-该例子有bushound抓图。注意,第一个字节0x00为ReportID,后面的为64字节payload。
STM32高级教程之USB HID双向数据传输
http://www.embed-net.com/thread-5-1-1.html

1.3 URLs
HID 读写report ID注意事项
https://blog.csdn.net/phenixyf/article/details/49427567

USB自定义HID设备实现-STM32
http://www.eeworld.com.cn/mcu/article_2017011333302.html

猜你喜欢

转载自blog.csdn.net/zoosenpin/article/details/80102711
今日推荐