📄 parse.hpp
字号:
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.
Module Name:
parse.hpp
Abstract:
USB Human Interface Device (HID) class driver sample.
This file contains constant defs used for parsing HID report descriptors.
Functions:
Notes:
--*/
#ifndef _PARSE_HPP_
#define _PARSE_HPP_
const UINT8 gcParseLongItemType = 0xFE;
const UINT8 gcParseShortItemLengthMask = 0x03;
// The following main, global, and local consts do not have the low 2 bits set
const UINT8 gcParseMainInput = 0x80;
const UINT8 gcParseMainOutput = 0x90;
const UINT8 gcParseMainFeature = 0xB0;
const UINT8 gcParseMainCollection = 0xA0;
const UINT8 gcParseMainEndCollection = 0xC0;
const UINT8 gcParseGlobalUsagePage = 0x04;
const UINT8 gcParseGlobalLogicalMinimum = 0x14;
const UINT8 gcParseGlobalLogicalMaximum = 0x24;
const UINT8 gcParseGlobalPhysicalMinimum = 0x34;
const UINT8 gcParseGlobalPhysicalMaximum = 0x44;
const UINT8 gcParseGlobalUnitExponent = 0x54;
const UINT8 gcParseGlobalUnit = 0x64;
const UINT8 gcParseGlobalReportSize = 0x74;
const UINT8 gcParseGlobalReportId = 0x84;
const UINT8 gcParseGlobalReportCount = 0x94;
const UINT8 gcParseGlobalPush = 0xA4;
const UINT8 gcParseGlobalPop = 0xB4;
const UINT8 gcParseLocalUsage = 0x08;
const UINT8 gcParseLocalUsageMinimum = 0x18;
const UINT8 gcParseLocalUsageMaximum = 0x28;
const UINT8 gcParseLocalDesignatorIndex = 0x38;
const UINT8 gcParseLocalDesignatorMinimum = 0x48;
const UINT8 gcParseLocalDesignatorMaximum = 0x58;
const UINT8 gcParseLocalStringIndex = 0x78;
const UINT8 gcParseLocalStringMinimum = 0x88;
const UINT8 gcParseLocalStringMaximum = 0x98;
const UINT8 gcParseLocalSetDelimiter = 0xA8;
const UINT8 gcParseUsagePageUndefined = 0x00;
const UINT8 gcParseUsagePageGenericDesktop = 0x01;
const UINT8 gcParseUsagePageSimulation = 0x02;
const UINT8 gcParseUsagePageVR = 0x03;
const UINT8 gcParseUsagePageSport = 0x04;
const UINT8 gcParseUsagePageGame = 0x05;
const UINT8 gcParseUsagePageKeyboard = 0x07;
const UINT8 gcParseUsagePageLEDs = 0x08;
const UINT8 gcParseUsagePageButtons = 0x09;
const UINT8 gcParseUsageUndefined = 0x00;
const UINT8 gcParseDesktopUsagePointer = 0x01;
const UINT8 gcParseDesktopUsageMouse = 0x02;
const UINT8 gcParseDesktopUsagePen = 0x03;
const UINT8 gcParseDesktopUsageJoystick = 0x04;
const UINT8 gcParseDesktopUsageGamePad = 0x05;
const UINT8 gcParseDesktopUsageKeyboard = 0x06;
const UINT8 gcParseDesktopUsageKeypad = 0x07;
const UINT8 gcParseDesktopUsageStylus = 0x08;
const UINT8 gcParseDesktopUsagePuck = 0x09;
const UINT8 gcParseDesktopUsageX = 0x30;
const UINT8 gcParseDesktopUsageY = 0x31;
const UINT8 gcParseDesktopUsageZ = 0x32;
const UINT8 gcParseDesktopUsageRx = 0x33;
const UINT8 gcParseDesktopUsageRy = 0x34;
const UINT8 gcParseDesktopUsageRz = 0x35;
const UINT8 gcParseDesktopUsageSlider = 0x36;
const UINT8 gcParseDesktopUsageDial = 0x37;
const UINT8 gcParseDesktopUsageWheel = 0x38;
const UINT8 gcParseDesktopUsageHatSwitch = 0x39;
const UINT8 gcParseSimulationUsageAileron = 0xB0;
const UINT8 gcParseSimulationUsageRudder = 0xBA;
const UINT8 gcParseSimulationUsageThrottle = 0xBB;
const UINT8 gcParseSimulationUsageTrigger = 0xC0;
const UINT8 gcParseSimulationUsageTurret = 0xC9;
const UINT32 gcParseInputData_ConstantBit = 0x01;
const UINT32 gcParseInputArray_VariableBit = 0x02;
const UINT32 gcParseInputAbsolute_RelativeBit = 0x04;
const UINT32 gcParseInputNoWrap_WrapBit = 0x08;
const UINT32 gcParseInputLinear_NonLinearBit = 0x10;
const UINT32 gcParseInputPrefState_NoPrefBit = 0x20;
const UINT32 gcParseInputNoNull_NullStateBit = 0x40;
// bit 7 (mask 0x80) reserved.
const UINT32 gcParseInputBitField_BufBytesBit = 0x100;
inline int
GetDataSize(
UINT8 parseByte)
{
UINT8 length;
if (parseByte == gcParseLongItemType)
{
return(-1);
}
length = parseByte & gcParseShortItemLengthMask;
// 0-2 means 0-2, 3 means 4
if (length == 0x03)
{
return(4);
}
else
{
return(length);
}
}
inline void
ConvertData(
BYTE *pBuffer,
UINT length,
UINT32 *pUnsig,
INT32 *pSig)
{
ASSERT(length <= 4);
UINT32 unsig = 0;
UINT32 temp;
INT32 sig = 0;
UINT shiftAmount = 0;
UINT byte;
for (byte = 0; byte < length; byte++)
{
temp = pBuffer[byte];
unsig = (temp << 24) | (unsig >> 8);
}
sig = (INT32)unsig;
while (byte < 4)
{
unsig >>= 8;
// Because sig is a signed value, this shift will sign extend.
sig >>= 8;
byte++;
}
*pUnsig = unsig;
*pSig = sig;
}
#endif // _PARSE_HPP_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -