⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.hpp

📁 Intel PXA270 Wince5.0 BSP
💻 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 + -