您现在的位置是:主页 > HID规范 >

HID报告描述符解析过程中的数据结构关系

发布时间:2022-11-03 20:48:27所属栏目:HID规范 已帮助编辑作者:【USB接口百科】

Hid报告描述符的短项定义了MAIN,GLOBAL,LOCAL三种类型的项。

其中MAIN项主要定义了三个类型,分别为集合(COLLECTION),输入报告(Input Report),输出报告(Output Report)和特性报告(Feature Report).

在Windows系统的Parser驱动中,对于MAIN ITEM也是进行了足够的遵重,直接使用HIDCOLLECTION来表示一个集合(COLLECTION),其中最顶层的集合由HIDPARSERCONTEXT的成员指针RootCollection引入,各个集合的子项则由HIDCOLLECTION的成员`struct __HID_COLLECTION ** Nodes;保存,其 struct __HID_COLLECTION * Root;`指向父或者上一层的HID_COLLECTION.这样就形成了一个集合树形结构。
HID_COLLECTION树

typedef struct __HID_COLLECTION__
{
    UCHAR Type;            //集合类型
    ULONG Usage;       //集合Usage
    UCHAR StringID;
    UCHAR PhysicalID;

    ULONG ReportCount;            //报告数组数量
    ULONG NodeCount;  //子集合数量
    struct __HID_COLLECTION__ ** Nodes;//子集合数组
    struct __HID_COLLECTION__ * Root;  //上一集COLLECTION集合指针
    struct _HID_REPORT ** Reports; //报告(Input,output,Feature)数组


    ULONG Offsets[1];

}HID_COLLECTION, *PHID_COLLECTION;

而对于输入报告(Input Report),输出报告(Output Report)和特性报告(Feature Report),虽然从MAIN ITEM的定义上来看是同一级别的,但实际上是属于某一集合的,故其作为HID_COLLECTION的子项HID_REPORT存在。

HID_REPORT

typedef struct _HID_REPORT
{
    UCHAR Type;   //报告类型Input,output,Feature
    UCHAR ReportID; //报告ID
    ULONG ReportSize; //报告总字节数

    ULONG ItemCount;     //Items当前容量
    ULONG ItemAllocated; //Items最大容量
    HID_REPORT_ITEM Items[1];//USAGE定义的数据含义
}HID_REPORT, *PHID_REPORT;

从HID_REPORT的结构可以看到,其有一个HID_REPORT_ITEM成员信息,代表着该报告在USAGE过程中的数据组成方式。不过同于USAGE出现比较前,故会先以GLOBAL_ITEM_STATE的形式存储于HID_PARSER_CONTEXT中。所以说HID_REPORT_ITEM来原于GLOBA和LOCAL的组合定义。所以从这里也可以讲,MAIN项定义了报告描述符的层给结构,而GLOBAL和LOCAL定义了数据项的详细信息,只是GLOBAL和LOCAL的作用域不同而已。

MAIN COLLECTION MAIN Input/Output/Feature Report GLOBAL/LOCAL ITEM最终组成的HID_REPORT_ITEM

     以上就是USB接口百科为您提供HID报告描述符解析过程中的数据结构关系的解读,本文章链接: http://www.usb-hub.cn/hidgf/42356.html 欢迎分享转载,更多婚礼相关资讯请前往HID规范