您现在的位置是:主页 > HID规范 >
HID报告描述符的四种类型MAIN ITEM/LOCAL ITEM/GLOBAL ITEM/LONG ITEM源码解析
发布时间:2022-11-10 10:34:31所属栏目:HID规范 已帮助人编辑作者:【USB接口百科】
HID的报告描述我们之前分为两大全,分别为短项和长项,其中短项又分为3种,分别为main,local,global,而长项只分为long。
HID报告描述符的项分类使用其首字节的BIT2,BIT3的值来区分,如下:
#define ITEM_TYPE_MAIN 0x0
#define ITEM_TYPE_GLOBAL 0x1
#define ITEM_TYPE_LOCAL 0x2
#define ITEM_TYPE_LONG 0x3
我们也可以通过定义一个结构体ITEM_PREFIX来判断,ITEM_PREFIX的定义我们之前说过,其结构定义如下:
typedef struct
{
UCHAR Size:2;
UCHAR Type:2;
UCHAR Tag:4;
}ITEM_PREFIX, *PITEM_PREFIX;
可以通过如下代码来进行解析:
static UCHAR ItemSize[4] = { 0, 1, 2, 4 };
PUCHAR CurrentOffset = HidReportPoint;
ULONG HidReportLength = 实际的报告描述符长度;
do
{
PITEM_PREFIX CurrentItem = (PITEM_PREFIX)CurrentOffset;
//参数个数
ULONG CurrentItemSize = ItemSize[CurrentItem->Size];
//长项类型
if (CurrentItem->Type == ITEM_TYPE_LONG)
{
//
// increment item size with size of data item
//
CurrentLongItem = (PLONG_ITEM)CurrentItem;
CurrentItemSize += CurrentLongItem->DataSize;
}
else
{
if (CurrentItem->Type == ITEM_TYPE_MAIN)
{
//main item
}
else if (CurrentItem->Type == ITEM_TYPE_GLOBAL)
{
//globa item
}
else if (CurrentItem->Type == ITEM_TYPE_LOCAL)
{
//local item
}
else
{
//never run here
}
}
//
// move to next item
//
CurrentOffset += CurrentItemSize + sizeof(ITEM_PREFIX);
}while (CurrentOffset < ReportEnd);
以上就是USB接口百科为您提供HID报告描述符的四种类型MAIN ITEM/LOCAL ITEM/GLOBAL ITEM/LONG ITEM源码解析的解读,本文章链接: http://www.usb-hub.cn/hidgf/42355.html 欢迎分享转载,更多婚礼相关资讯请前往HID规范
相关文章
USB接口百科推荐
HID 全局条目(Global Item)
HID报告描述符协议
HID规范、HID Usage Tables版本及文档分类
HID设备的bInterfaceClass、bInterfaceSubClass和bInterfaceProtocol
HID报告描述符详解
HID局部条目
HID报告描述符主项InputReport、OutputReport,FeatureReport
HID 设备描述符关系
HID报告描述符Usage
HID 简介
HID设备描述符的级级关系
HID 设置空闲SetIdle
HID 获取空闲请求GetIdle
HID 设置协议SetProtocol
HID报告描述符的GLOBAL ITEM