您现在的位置是:主页 > HID规范 >
HID报告描述符ITEM的数据结构及代码分析过程
发布时间:2022-12-31 18:48:45所属栏目:HID规范 已帮助人编辑作者:【USB接口百科】
HID报告描述符是数据流的形式,其中最小单位是项英文ITEM,根据定义分为4种。分别为GLOBA,LOCAK和MAIN。
项分为长项和短项,这里我们只介绍短项。
短项头的一字节定义为:
typedef struct
{
UCHAR Size:2;
UCHAR Type:2;
UCHAR Tag:4;
}ITEM_PREFIX, *PITEM_PREFIX;
BIT0,BIT1代表的后续数据的个数:
0 = 0 bytes1 = 1 byte2 = 2 bytes3 = 4 bytesBIT2,BIT3代表项的类型,其中:
#define ITEM_TYPE_MAIN 0x0
#define ITEM_TYPE_GLOBAL 0x1
#define ITEM_TYPE_LOCAL 0x2
#define ITEM_TYPE_LONG 0x3
而BIT4-7代表着功能号。
HID项的分析这里使用C语言来分析,其中ReportDescriptor是报告描述符指针,ReportLength中长度。
CurrentOffset = ReportDescriptor; //报告描述符指针
ReportEnd = ReportDescriptor + ReportLength;//报告描述符的指针结尾
do
{
//
// get current item
//
CurrentItem = (PITEM_PREFIX)CurrentOffset;
//
// get item size
//
CurrentItemSize = ItemSize[CurrentItem->Size];
Data = 0;
if (CurrentItem->Type == ITEM_TYPE_LONG)
{
//
// increment item size with size of data item
//
CurrentLongItem = (PLONG_ITEM)CurrentItem;
CurrentItemSize += CurrentLongItem->DataSize;
}
else
{
//
// get short item
//
CurrentShortItem = (PSHORT_ITEM)CurrentItem;
//
// get associated data
//
//ASSERT(CurrentItemSize == 1 || CurrentItemSize == 2 || CurrentItemSize == 4);
if (CurrentItemSize == 1)
Data = CurrentShortItem->Data.UData8[0];
else if (CurrentItemSize == 2)
Data = CurrentShortItem->Data.UData16[0];
else if (CurrentItemSize == 4)
Data = CurrentShortItem->Data.UData32;
else
{
//
// invalid item size
//
//Parser->Debug("CurrentItem invalid item size %lu\n", CurrentItemSize);
}
}
CurrentOffset += CurrentItemSize + sizeof(ITEM_PREFIX);
}while (CurrentOffset < ReportEnd);
其中短项和长项的结构定义如下:
typedef struct
{
ITEM_PREFIX Prefix;
union
{
UCHAR UData8[4];
CHAR SData8[4];
USHORT UData16[2];
SHORT SData16[2];
ULONG UData32;
LONG SData32;
}Data;
}SHORT_ITEM, *PSHORT_ITEM;
typedef struct
{
ITEM_PREFIX Prefix;
UCHAR DataSize;
UCHAR LongItemTag;
UCHAR Data[0];
}LONG_ITEM,*PLONG_ITEM;
以上就是USB接口百科为您提供HID报告描述符ITEM的数据结构及代码分析过程的解读,本文章链接: http://www.usb-hub.cn/hidgf/42350.html 欢迎分享转载,更多婚礼相关资讯请前往HID规范
相关文章
USB接口百科推荐
HID报告描述符主项InputReport、OutputReport,FeatureReport
HID报告描述符协议
HID报告描述符Usage
HID 全局条目(Global Item)
HID 获取空闲请求GetIdle
HID 设置空闲SetIdle
HID 设置协议SetProtocol
HID 设备描述符关系
HID设备描述符的级级关系
HID局部条目
HID 简介
HID报告描述符详解
HID规范、HID Usage Tables版本及文档分类
HID设备的bInterfaceClass、bInterfaceSubClass和bInterfaceProtocol
HID报告描述符的GLOBAL ITEM