精华内容
下载资源
问答
  • USB-HID 报告描述符(八)

    2020-01-17 11:29:56
    USB鼠标详解阅读顺序 1、枚举 2、设备描述符 3、设置地址 4、配置描述符 5、接口描述符 ...USB鼠标获取完字符串描述符之后,又请求了几次设备描述符和配置描述符...获取报告描述符的请求如下所示 0x81设备到主...

     USB 鼠标详解阅读顺序

    1、枚举

    2、设备描述符

    3、设置地址

    4、配置描述符

    5、接口描述符

    6、HID 描述符

    7、端点描述符

    8、字符串描述符

    9、HID 报告描述符

    10、HID 报告的返回

    USB 鼠标获取完字符串描述符之后,又请求了几次设备描述符和配置描述符,这些描述符在上面已经解析过了,这里就不再重复

    获取报告描述符的请求如下所示

    0x81 设备到主机的标准请求,请求的接受者是设备

    0x06 获取描述符的请求

    0x00

    0x22 HID 的报告描述符

    0x00

    0x00

    0x80 长度为128

    0x00

    下图为 HID 协议文档中的 HID 报告描述符的示例

     

    展开全文
  • 它通过控制输入端点0返回,Host使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到Interface,而不是设备。一个报告描述符可以描述多个报告,不同报告通过Report ID来区分,Report ID在报告最前面,即...

    报表描述符是HID设备中的一个描述符,是描述一个报表以及报表里面的数据是用来干什么的。通过它,USB Host可以解析出报表里面的数据所表示的含义。它通过控制输入端点0返回,Host使用获取报表描述符命令来获取报表描述符,注意这个请求是发送到Interface,而不是设备。一个报表描述符可以描述多个报表,不同的报表通过Report ID来区分,Report ID在报表最前面,即第一个byte。而当报表描述符中没有规定Report ID时,报表中就没有ID字段,开始就是数据。

    报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。

    1.项目

    a)短项目,

    第一个字节为项目头,分3个部分:bSize/bType/bTag。

    bSize: 短项目的数据字节数由bSize的值定义,bSize为0、1、2、3时Data部分的字节数分别为0、1、2、4个字节。

    bType: 短项目的项目类型由bType定义,bType为0、1、2时分别为Main、Global和Local类型。

    bTag: 用来表示该项目的功能.

    例如一个短项目

    0x05,          /*Usage Page(Generic Desktop)*/
    0x01,

    字节0x05表示bSize = 1, bType = 1(Global), bTag = 0,字节0x01就是1个字节的数据。

    b)长项目

    2. 项目类型bType

    Main类项目用于定义报表描述符中的数据项。也可以组合其中的若干数据项成为一个集合。Main项目可以分为带数据的Main项目和不带数据的Main项目。带数据项的Main用于生成报表中的数据项,包括Input、Output和Feature项目。不带数据的Main项目不生成报表中的数据项,包括Collection和End Collection项目。

    0x81,          /*Input(Variable)*/
    0x02,


    Global类项目实现对数据的描述,用来识别报表并且描述报表内的数据,包括数据的功能、最大与最小允许值以及数据项的大小与数目等。改变由Main类项目生成的项目状态表。Global类项目描述对后续的所有项目有效,除非遇到有新的Global类项目。

        0x05,          /*Usage Page(Generic Desktop)*/
        0x01,

        0x09,          /*Usage(Mouse)*/
        0x02,
        0xA1,          /*Collection(Logical)*/
        0x01,
        0x09,          /*Usage(Pointer)*/
        0x01,
        /* 8 */
        0xA1,          /*Collection(Linked)*/
        0x00,
        0x05,          /*Usage Page(Buttons)*/
        0x09,


    Local类项目定义控制的特征,这一类项目的作用域不超过下一个Main项目,所以在每一Main项目之前可能有多个Local项目。Local项目用于描述后面的Input、Output和Feature项目。

        0x05,          /*Usage Page(Generic Desktop)*/
        0x01,
        0x09,          /*Usage(Mouse)*/
        0x02,

        0xA1,          /*Collection(Logical)*/
        0x01,
        0x09,          /*Usage(Pointer)*/
        0x01,
        /* 8 */
        0xA1,          /*Collection(Linked)*/
        0x00,

    在这些项目中,Usage Page用来指定设备的功能,而Usage项目用来指定个别报表的功能。Usage Page项目相当于是HID的子集合,Usage相当于是Usage Page的子集合。

    USB官网有一个HID描述符的生成工具,dt.exe(https://www.usb.org/document-library/hid-descriptor-tool)。里面有很多HID的例子,打开joystk.hid.

    可以点击菜单中的“Parse Descriptor”,弹出的界面有各个数据的意义

    然后使用Save As可以生成H文件。(注意:STM32 USB例程JoyStick是用鼠标的描述符改的)。

    报表描述符不是USB的标准描述符,所以获取该描述符的动作不是在Device_Property里面,需要在Device_Property的usbClassDataSetup中获取。

     

     

     

    展开全文
  • HID_REPORT_test.zip

    2020-04-26 17:26:00
    文描述符是用来描述一个报告结构以及该报告里面数据是用来干什么,通过报告描述符,主机可以分析出报告里面数据所表示意义,通过控制输入端点0来返回给主机,主机使用获取报告描述符请求获取报告描述符...
  • STM32 USB HIDGET_REPORT 与 SET_REPORT请求

    千次阅读 2018-03-12 13:48:30
    原文地址::http://blog.csdn.net/shench88/article/details/26719121相关文章1、usb通过getreport和setreport发送数据怎么设置----...report获取报告描述符...

    原文地址::http://blog.csdn.net/shench88/article/details/26719121


    相关文章

    1、usb通过getreport和setreport发送数据怎么设置----https://zhidao.baidu.com/question/1431521827822950619.html

    2、自定义hid设备set_report设置和get_report获取报告描述符控制8字节数据 ----http://zhangzhian.blog.163.com/blog/static/23589602010426103338869/

    3、USB之HID类Set_Report Request[调试手记1]----http://www.cnblogs.com/libra13179/p/7365910.html

    4、使用STM32CubeMX生成USB_HOST_HID工程[添加对CAPS_LOCK指示灯的控制][SetReport]----http://www.cnblogs.com/libra13179/p/7373217.html

    5、在USB键盘中取得SET REPORT的作法----http://bbs.21ic.com/icview-1076414-1-1.html

    6、在USB KEYBOARD下,结合SET_REPORT及GET_REPORT的传输方式 ----http://bbs.21ic.com/icview-955196-1-1.html

    7、头大, NUC1xx USB HID Set Report数据不对 [问题解决]----http://bbs.ic37.com/bbsview-34051.htm

    1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加如下代码:

      /*** GET_PROTOCOL ***/
      else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
               && RequestNo == GET_PROTOCOL)
      {
        CopyRoutine = CustomHID_GetProtocolValue;
      } /* 以上代码为原有例程中的代码 */
      /*** GET_REPORT ***/ /* 以下代码支持GET_REPORT */
      else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
            && RequestNo == GET_REPORT)
      {
        CopyRoutine = CustomHID_GetReport;
      }

    2)再增加一个函数:

    uint8_t *CustomHID_GetReport(uint16_t Length)
    {
      if (Length == 0)
      {
        return 10;
      }
      return &Report_Buffer[pInformation->Ctrl_Info.Usb_wOffset];
    }

    3)保证在IN Token到来之前,Report_Buffer中包含有效的数据。


    上述过程十分简单,但有时不能保证在IN Token到来之前,Report_Buffer中包含有效的数据,即要发送的数据还没有准备好;这时就希望先设置一个标志,让IN Token返回NAK,让CustomHID_Data_Setup()这个函数返回,待数据准备好之后再继续前述的数据拷贝过程。

    这个要求使用STM32的USB开发库也是很容易实现的:

    1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加的代码变为这样:

      /*** GET_REPORT ***/ 
      else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) 
            && RequestNo == GET_REPORT) 
      { 
        if (数据未准备好) 
          return USB_NOT_READY; 
        CopyRoutine = CustomHID_GetReport; 
      } 
    这样,STM32将以NAK回应PC端的IN请求。

    2)同样增加一个函数CustomHID_GetReport。

    3)在数据准备好之后(注意准备数据的时间不能太长,否则PC端会做超时处理),执行下述操作: 
        pInformation->Ctrl_Info.CopyData = CustomHID_GetReport; 
        pInformation->Ctrl_Info.Usb_wOffset = 0; 
        CustomHID_GetReport(0); 
        pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize; 
        DataStageIn();



    展开全文
  • 主机需要再次获取设备描述符,配置描述符,字符串描述符,另外HID设备还要获取报告描述符等。根据《圈圈教你玩USB》里面介绍,我们可以使用BUS Hound工具,对主机发送给设备数据进行抓包,分析数据包,根据USB...

    接下来,主机将使用新的设备地址和设备进行通信。 主机需要再次获取设备描述符,配置描述符,字符串描述符,另外HID设备还要获取报告描述符等。根据《圈圈教你玩USB》里面介绍,我们可以使用BUS Hound工具,对主机发送给设备的数据进行抓包,分析数据包,根据USB协议完成相应的主机的请求。
    在STM32 USB_HID的例子中,和以上获取描述符相关的主要文件有Usb_desc.c(定义了各种描述符),Usb_prop.c (其中的CustomHID_GetStringDescriptor函数完成了对主机获取字符串描述符种类的细分)。具体的内容可以自己根据调试信息按照之前几篇文章中介绍的分析方法分析。
    下面给出用到的资料的下载连接
    圈圈教你玩USB
    USB枚举过程协议分析图
    STM32 增加USB枚举过程的工程模板

    展开全文
  • 基于STM32USB枚举过程学习笔记(五)

    千次阅读 2012-11-14 11:47:10
    主机需要再次获取设备描述符,配置描述符,字符串描述符,另外HID设备还要获取报告描述符等。根据《圈圈教你玩USB》里面介绍,我们可以使用BUS Hound工具,对主机发送给设备数据进行抓包,分析数据包,根据USB...
  • 目录 1.设备上电 2.检测电压变化,报告主机 ...11.主机获取并解析设备描述符信息 12.获取字符串描述符 13.主机获取标准配置描述符 14.主机获取配置描述符集合 15.主机为设备挂载驱动并选择一.
  • 圈圈教你玩USB

    千次下载 热门讨论 2013-05-15 16:02:05
    3.13报告描述符的结构及实现 3.14报告的返回 3.15BusHound工具的简介 3.16本章小结 第4章USB键盘的实现 4.1USB键盘工程的建立 4.2设备描述符的实现 4.3配置描述符集合的实现 4.3.1配置描述符 4.3.2接口描述符 4.3.3...
  • 圈圈教你玩USB(全书)151-313页

    热门讨论 2011-08-14 16:40:45
    3.13 报告描述符的结构及实现 48 3.14 报告的返回 54 3.15 Bus Hound工具的简介 57 3.16 本章小结 59 第四章 USB键盘的实现 1 4.1 USB键盘工程的建立 1 4.2 设备描述符的实现 1 4.4 配置描述符集合的实现 2 4.4.1 ...
  • 3.13 报告描述符的结构及实现 48 3.14 报告的返回 54 3.15 Bus Hound工具的简介 57 3.16 本章小结 59 第四章 USB键盘的实现 1 4.1 USB键盘工程的建立 1 4.2 设备描述符的实现 1 4.4 配置描述符集合的实现 2 ...
  • 圈圈教你玩USB(全书)1-150 页

    热门讨论 2011-08-14 16:37:14
    3.13 报告描述符的结构及实现 48 3.14 报告的返回 54 3.15 Bus Hound工具的简介 57 3.16 本章小结 59 第四章 USB键盘的实现 1 4.1 USB键盘工程的建立 1 4.2 设备描述符的实现 1 4.4 配置描述符集合的实现 2 4.4.1 ...
  • 3.13 报告描述符的结构及实现 48 3.14 报告的返回 54 3.15 Bus Hound工具的简介 57 3.16 本章小结 59 第四章 USB键盘的实现 1 4.1 USB键盘工程的建立 1 4.2 设备描述符的实现 1 4.4 配置描述符集合的实现 2 4.4.1 ...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    6.21 当数组是函数参数时,为什么sizeof不能正确报告数组大小? 6.22 如何在一个文件中判断声明为extern数组大小(例如,数组定义和大小在另一个文件中)?sizeof操作似乎不行。 6.23 sizeof返回大小...
  • USB设备枚举流程 

    2021-03-23 10:34:31
    USB设备枚举流程 1.设备上电 2.Hub检测电压变化,报告主机 3.... 4.主机检测所插入设备是全速还是低速 ... 5.... 6.... 7.通过Hub建立主机和设备之间信息通道 ...主机获取并解析设备描述符信息 ...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道495个C语言问题》以问答形式组织内容,讨论了学习或使用C语言过程中经常遇到一些问题。书中列出了C用户经常问400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  • 就算括号不行,操作优先级是否能够控制计算顺序呢? 35  3.6 可是&&和||操作呢?我看到过类似while((c = getchar()) != EOF && c != '\n')代码…… 35 3.7 是否可以安全地认为,一旦&&和||左边表达式...
  • Squid 中文权威指南

    2011-08-19 13:38:16
    squid 和内核通过数据结构来交换信息,数据结构的大小不能超过设置的文件描述符的限制。squid 在运行时检查这些设置,并且使用最安全的(最小的)值。这样,即使预编译的二进制版本有比你的内核更高的文件描述符,但...
  • 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构mbuf 11 1.9.2 包含数据mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP输出 14 1.9.5 以太网输出 14 1.9.6 UDP输出小结 14 1.10 输入处理 15 1.10.1 ...
  • TCPIP详解--共三卷

    2015-11-30 17:17:21
    18.7.1 到不存在端口连接请求 187 18.7.2 异常终止一个连接 187 18.7.3 检测半打开连接 188 18.8 同时打开 189 18.9 同时关闭 191 18.10 TCP选项 191 18.11 TCP服务器设计 192 18.11.1 TCP服务器端口号 193 ...
  •  1022 通知更改请求已经完成,并且返回信息还没有被送到调用者缓冲区中。调用者需要列举所有文件以找到改动内容。  1051 已将停止控制发送给与其他运行服务相关服务。  1052 所要求控制对此服务...
  • 根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP先进之处 应用PHP有许多好处。当然已知不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来执行速度...
  • PostgreSQL必备参考手册--详细书签版

    热门讨论 2013-02-04 13:28:35
    第二部分(第2章到第5章)介绍了PostgreSQL数据类型、操作及函数等内容。第三部分(第6章到第10章)通过介绍用户可执行文件、系统可执行文件、系统配置文件与库及日志文件等帮助用户轻松管理PostgreSQL。第四...
  • TCP_IP详解卷1

    热门讨论 2010-12-29 10:53:54
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...
  • TCPIP详解卷[1].part10

    2010-12-29 11:08:06
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...
  • TCPIP详解卷[1].part07

    2010-12-29 11:04:06
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...
  • TCPIP详解卷[1].part03

    2010-12-29 10:59:26
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...
  • TCPIP详解卷[1].part12

    2010-12-29 11:12:15
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...
  • TCPIP详解卷[1].part11

    2010-12-29 11:09:56
    描述了属于每一层各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输不同分组。对tcpdump输出研究可以帮助理解不同协议如何工作...

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

获取报告描述符的请求