forked from mfulz_github/qmk_firmware
		
	
		
			
				
	
	
		
			1589 lines
		
	
	
		
			57 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1589 lines
		
	
	
		
			57 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
 | 
						|
 | 
						|
This software may be distributed and modified under the terms of the GNU
 | 
						|
General Public License version 2 (GPL2) as published by the Free Software
 | 
						|
Foundation and appearing in the file GPL2.TXT included in the packaging of
 | 
						|
this file. Please note that GPL2 Section 2[b] requires that all works based
 | 
						|
on this software must also be made publicly available under the terms of
 | 
						|
the GPL2 ("Copyleft").
 | 
						|
 | 
						|
Contact information
 | 
						|
-------------------
 | 
						|
 | 
						|
Circuits At Home, LTD
 | 
						|
Web      :  http://www.circuitsathome.com
 | 
						|
e-mail   :  support@circuitsathome.com
 | 
						|
 */
 | 
						|
 | 
						|
#include "hidescriptorparser.h"
 | 
						|
 | 
						|
const char * const ReportDescParserBase::usagePageTitles0[] PROGMEM = {
 | 
						|
        pstrUsagePageGenericDesktopControls,
 | 
						|
        pstrUsagePageSimulationControls,
 | 
						|
        pstrUsagePageVRControls,
 | 
						|
        pstrUsagePageSportControls,
 | 
						|
        pstrUsagePageGameControls,
 | 
						|
        pstrUsagePageGenericDeviceControls,
 | 
						|
        pstrUsagePageKeyboardKeypad,
 | 
						|
        pstrUsagePageLEDs,
 | 
						|
        pstrUsagePageButton,
 | 
						|
        pstrUsagePageOrdinal,
 | 
						|
        pstrUsagePageTelephone,
 | 
						|
        pstrUsagePageConsumer,
 | 
						|
        pstrUsagePageDigitizer,
 | 
						|
        pstrUsagePagePID,
 | 
						|
        pstrUsagePageUnicode
 | 
						|
};
 | 
						|
 | 
						|
const char * const ReportDescParserBase::usagePageTitles1[] PROGMEM = {
 | 
						|
        pstrUsagePageBarCodeScanner,
 | 
						|
        pstrUsagePageScale,
 | 
						|
        pstrUsagePageMSRDevices,
 | 
						|
        pstrUsagePagePointOfSale,
 | 
						|
        pstrUsagePageCameraControl,
 | 
						|
        pstrUsagePageArcade
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDesktopTitles0[] PROGMEM = {
 | 
						|
        pstrUsagePointer,
 | 
						|
        pstrUsageMouse,
 | 
						|
        pstrUsageJoystick,
 | 
						|
        pstrUsageGamePad,
 | 
						|
        pstrUsageKeyboard,
 | 
						|
        pstrUsageKeypad,
 | 
						|
        pstrUsageMultiAxisController,
 | 
						|
        pstrUsageTabletPCSystemControls
 | 
						|
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDesktopTitles1[] PROGMEM = {
 | 
						|
        pstrUsageX,
 | 
						|
        pstrUsageY,
 | 
						|
        pstrUsageZ,
 | 
						|
        pstrUsageRx,
 | 
						|
        pstrUsageRy,
 | 
						|
        pstrUsageRz,
 | 
						|
        pstrUsageSlider,
 | 
						|
        pstrUsageDial,
 | 
						|
        pstrUsageWheel,
 | 
						|
        pstrUsageHatSwitch,
 | 
						|
        pstrUsageCountedBuffer,
 | 
						|
        pstrUsageByteCount,
 | 
						|
        pstrUsageMotionWakeup,
 | 
						|
        pstrUsageStart,
 | 
						|
        pstrUsageSelect,
 | 
						|
        pstrUsagePageReserved,
 | 
						|
        pstrUsageVx,
 | 
						|
        pstrUsageVy,
 | 
						|
        pstrUsageVz,
 | 
						|
        pstrUsageVbrx,
 | 
						|
        pstrUsageVbry,
 | 
						|
        pstrUsageVbrz,
 | 
						|
        pstrUsageVno,
 | 
						|
        pstrUsageFeatureNotification,
 | 
						|
        pstrUsageResolutionMultiplier
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDesktopTitles2[] PROGMEM = {
 | 
						|
        pstrUsageSystemControl,
 | 
						|
        pstrUsageSystemPowerDown,
 | 
						|
        pstrUsageSystemSleep,
 | 
						|
        pstrUsageSystemWakeup,
 | 
						|
        pstrUsageSystemContextMenu,
 | 
						|
        pstrUsageSystemMainMenu,
 | 
						|
        pstrUsageSystemAppMenu,
 | 
						|
        pstrUsageSystemMenuHelp,
 | 
						|
        pstrUsageSystemMenuExit,
 | 
						|
        pstrUsageSystemMenuSelect,
 | 
						|
        pstrUsageSystemMenuRight,
 | 
						|
        pstrUsageSystemMenuLeft,
 | 
						|
        pstrUsageSystemMenuUp,
 | 
						|
        pstrUsageSystemMenuDown,
 | 
						|
        pstrUsageSystemColdRestart,
 | 
						|
        pstrUsageSystemWarmRestart,
 | 
						|
        pstrUsageDPadUp,
 | 
						|
        pstrUsageDPadDown,
 | 
						|
        pstrUsageDPadRight,
 | 
						|
        pstrUsageDPadLeft
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDesktopTitles3[] PROGMEM = {
 | 
						|
        pstrUsageSystemDock,
 | 
						|
        pstrUsageSystemUndock,
 | 
						|
        pstrUsageSystemSetup,
 | 
						|
        pstrUsageSystemBreak,
 | 
						|
        pstrUsageSystemDebuggerBreak,
 | 
						|
        pstrUsageApplicationBreak,
 | 
						|
        pstrUsageApplicationDebuggerBreak,
 | 
						|
        pstrUsageSystemSpeakerMute,
 | 
						|
        pstrUsageSystemHibernate
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDesktopTitles4[] PROGMEM = {
 | 
						|
        pstrUsageSystemDisplayInvert,
 | 
						|
        pstrUsageSystemDisplayInternal,
 | 
						|
        pstrUsageSystemDisplayExternal,
 | 
						|
        pstrUsageSystemDisplayBoth,
 | 
						|
        pstrUsageSystemDisplayDual,
 | 
						|
        pstrUsageSystemDisplayToggleIntExt,
 | 
						|
        pstrUsageSystemDisplaySwapPriSec,
 | 
						|
        pstrUsageSystemDisplayLCDAutoscale
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::simuTitles0[] PROGMEM = {
 | 
						|
        pstrUsageFlightSimulationDevice,
 | 
						|
        pstrUsageAutomobileSimulationDevice,
 | 
						|
        pstrUsageTankSimulationDevice,
 | 
						|
        pstrUsageSpaceshipSimulationDevice,
 | 
						|
        pstrUsageSubmarineSimulationDevice,
 | 
						|
        pstrUsageSailingSimulationDevice,
 | 
						|
        pstrUsageMotocicleSimulationDevice,
 | 
						|
        pstrUsageSportsSimulationDevice,
 | 
						|
        pstrUsageAirplaneSimulationDevice,
 | 
						|
        pstrUsageHelicopterSimulationDevice,
 | 
						|
        pstrUsageMagicCarpetSimulationDevice,
 | 
						|
        pstrUsageBicycleSimulationDevice
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::simuTitles1[] PROGMEM = {
 | 
						|
        pstrUsageFlightControlStick,
 | 
						|
        pstrUsageFlightStick,
 | 
						|
        pstrUsageCyclicControl,
 | 
						|
        pstrUsageCyclicTrim,
 | 
						|
        pstrUsageFlightYoke,
 | 
						|
        pstrUsageTrackControl
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::simuTitles2[] PROGMEM = {
 | 
						|
        pstrUsageAileron,
 | 
						|
        pstrUsageAileronTrim,
 | 
						|
        pstrUsageAntiTorqueControl,
 | 
						|
        pstrUsageAutopilotEnable,
 | 
						|
        pstrUsageChaffRelease,
 | 
						|
        pstrUsageCollectiveControl,
 | 
						|
        pstrUsageDiveBrake,
 | 
						|
        pstrUsageElectronicCountermeasures,
 | 
						|
        pstrUsageElevator,
 | 
						|
        pstrUsageElevatorTrim,
 | 
						|
        pstrUsageRudder,
 | 
						|
        pstrUsageThrottle,
 | 
						|
        pstrUsageFlightCommunications,
 | 
						|
        pstrUsageFlareRelease,
 | 
						|
        pstrUsageLandingGear,
 | 
						|
        pstrUsageToeBrake,
 | 
						|
        pstrUsageTrigger,
 | 
						|
        pstrUsageWeaponsArm,
 | 
						|
        pstrUsageWeaponsSelect,
 | 
						|
        pstrUsageWingFlaps,
 | 
						|
        pstrUsageAccelerator,
 | 
						|
        pstrUsageBrake,
 | 
						|
        pstrUsageClutch,
 | 
						|
        pstrUsageShifter,
 | 
						|
        pstrUsageSteering,
 | 
						|
        pstrUsageTurretDirection,
 | 
						|
        pstrUsageBarrelElevation,
 | 
						|
        pstrUsageDivePlane,
 | 
						|
        pstrUsageBallast,
 | 
						|
        pstrUsageBicycleCrank,
 | 
						|
        pstrUsageHandleBars,
 | 
						|
        pstrUsageFrontBrake,
 | 
						|
        pstrUsageRearBrake
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::vrTitles0[] PROGMEM = {
 | 
						|
        pstrUsageBelt,
 | 
						|
        pstrUsageBodySuit,
 | 
						|
        pstrUsageFlexor,
 | 
						|
        pstrUsageGlove,
 | 
						|
        pstrUsageHeadTracker,
 | 
						|
        pstrUsageHeadMountedDisplay,
 | 
						|
        pstrUsageHandTracker,
 | 
						|
        pstrUsageOculometer,
 | 
						|
        pstrUsageVest,
 | 
						|
        pstrUsageAnimatronicDevice
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::vrTitles1[] PROGMEM = {
 | 
						|
        pstrUsageStereoEnable,
 | 
						|
        pstrUsageDisplayEnable
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::sportsCtrlTitles0[] PROGMEM = {
 | 
						|
        pstrUsageBaseballBat,
 | 
						|
        pstrUsageGolfClub,
 | 
						|
        pstrUsageRowingMachine,
 | 
						|
        pstrUsageTreadmill
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::sportsCtrlTitles1[] PROGMEM = {
 | 
						|
        pstrUsageOar,
 | 
						|
        pstrUsageSlope,
 | 
						|
        pstrUsageRate,
 | 
						|
        pstrUsageStickSpeed,
 | 
						|
        pstrUsageStickFaceAngle,
 | 
						|
        pstrUsageStickHeelToe,
 | 
						|
        pstrUsageStickFollowThough,
 | 
						|
        pstrUsageStickTempo,
 | 
						|
        pstrUsageStickType,
 | 
						|
        pstrUsageStickHeight
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::sportsCtrlTitles2[] PROGMEM = {
 | 
						|
        pstrUsagePutter,
 | 
						|
        pstrUsage1Iron,
 | 
						|
        pstrUsage2Iron,
 | 
						|
        pstrUsage3Iron,
 | 
						|
        pstrUsage4Iron,
 | 
						|
        pstrUsage5Iron,
 | 
						|
        pstrUsage6Iron,
 | 
						|
        pstrUsage7Iron,
 | 
						|
        pstrUsage8Iron,
 | 
						|
        pstrUsage9Iron,
 | 
						|
        pstrUsage10Iron,
 | 
						|
        pstrUsage11Iron,
 | 
						|
        pstrUsageSandWedge,
 | 
						|
        pstrUsageLoftWedge,
 | 
						|
        pstrUsagePowerWedge,
 | 
						|
        pstrUsage1Wood,
 | 
						|
        pstrUsage3Wood,
 | 
						|
        pstrUsage5Wood,
 | 
						|
        pstrUsage7Wood,
 | 
						|
        pstrUsage9Wood
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::gameTitles0[] PROGMEM = {
 | 
						|
        pstrUsage3DGameController,
 | 
						|
        pstrUsagePinballDevice,
 | 
						|
        pstrUsageGunDevice
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::gameTitles1[] PROGMEM = {
 | 
						|
        pstrUsagePointOfView,
 | 
						|
        pstrUsageTurnRightLeft,
 | 
						|
        pstrUsagePitchForwardBackward,
 | 
						|
        pstrUsageRollRightLeft,
 | 
						|
        pstrUsageMoveRightLeft,
 | 
						|
        pstrUsageMoveForwardBackward,
 | 
						|
        pstrUsageMoveUpDown,
 | 
						|
        pstrUsageLeanRightLeft,
 | 
						|
        pstrUsageLeanForwardBackward,
 | 
						|
        pstrUsageHeightOfPOV,
 | 
						|
        pstrUsageFlipper,
 | 
						|
        pstrUsageSecondaryFlipper,
 | 
						|
        pstrUsageBump,
 | 
						|
        pstrUsageNewGame,
 | 
						|
        pstrUsageShootBall,
 | 
						|
        pstrUsagePlayer,
 | 
						|
        pstrUsageGunBolt,
 | 
						|
        pstrUsageGunClip,
 | 
						|
        pstrUsageGunSelector,
 | 
						|
        pstrUsageGunSingleShot,
 | 
						|
        pstrUsageGunBurst,
 | 
						|
        pstrUsageGunAutomatic,
 | 
						|
        pstrUsageGunSafety,
 | 
						|
        pstrUsageGamepadFireJump,
 | 
						|
        pstrUsageGamepadTrigger
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::genDevCtrlTitles[] PROGMEM = {
 | 
						|
        pstrUsageBatteryStrength,
 | 
						|
        pstrUsageWirelessChannel,
 | 
						|
        pstrUsageWirelessID,
 | 
						|
        pstrUsageDiscoverWirelessControl,
 | 
						|
        pstrUsageSecurityCodeCharEntered,
 | 
						|
        pstrUsageSecurityCodeCharErased,
 | 
						|
        pstrUsageSecurityCodeCleared
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::ledTitles[] PROGMEM = {
 | 
						|
        pstrUsageNumLock,
 | 
						|
        pstrUsageCapsLock,
 | 
						|
        pstrUsageScrollLock,
 | 
						|
        pstrUsageCompose,
 | 
						|
        pstrUsageKana,
 | 
						|
        pstrUsagePower,
 | 
						|
        pstrUsageShift,
 | 
						|
        pstrUsageDoNotDisturb,
 | 
						|
        pstrUsageMute,
 | 
						|
        pstrUsageToneEnable,
 | 
						|
        pstrUsageHighCutFilter,
 | 
						|
        pstrUsageLowCutFilter,
 | 
						|
        pstrUsageEqualizerEnable,
 | 
						|
        pstrUsageSoundFieldOn,
 | 
						|
        pstrUsageSurroundOn,
 | 
						|
        pstrUsageRepeat,
 | 
						|
        pstrUsageStereo,
 | 
						|
        pstrUsageSamplingRateDetect,
 | 
						|
        pstrUsageSpinning,
 | 
						|
        pstrUsageCAV,
 | 
						|
        pstrUsageCLV,
 | 
						|
        pstrUsageRecordingFormatDetect,
 | 
						|
        pstrUsageOffHook,
 | 
						|
        pstrUsageRing,
 | 
						|
        pstrUsageMessageWaiting,
 | 
						|
        pstrUsageDataMode,
 | 
						|
        pstrUsageBatteryOperation,
 | 
						|
        pstrUsageBatteryOK,
 | 
						|
        pstrUsageBatteryLow,
 | 
						|
        pstrUsageSpeaker,
 | 
						|
        pstrUsageHeadSet,
 | 
						|
        pstrUsageHold,
 | 
						|
        pstrUsageMicrophone,
 | 
						|
        pstrUsageCoverage,
 | 
						|
        pstrUsageNightMode,
 | 
						|
        pstrUsageSendCalls,
 | 
						|
        pstrUsageCallPickup,
 | 
						|
        pstrUsageConference,
 | 
						|
        pstrUsageStandBy,
 | 
						|
        pstrUsageCameraOn,
 | 
						|
        pstrUsageCameraOff,
 | 
						|
        pstrUsageOnLine,
 | 
						|
        pstrUsageOffLine,
 | 
						|
        pstrUsageBusy,
 | 
						|
        pstrUsageReady,
 | 
						|
        pstrUsagePaperOut,
 | 
						|
        pstrUsagePaperJam,
 | 
						|
        pstrUsageRemote,
 | 
						|
        pstrUsageForward,
 | 
						|
        pstrUsageReverse,
 | 
						|
        pstrUsageStop,
 | 
						|
        pstrUsageRewind,
 | 
						|
        pstrUsageFastForward,
 | 
						|
        pstrUsagePlay,
 | 
						|
        pstrUsagePause,
 | 
						|
        pstrUsageRecord,
 | 
						|
        pstrUsageError,
 | 
						|
        pstrUsageSelectedIndicator,
 | 
						|
        pstrUsageInUseIndicator,
 | 
						|
        pstrUsageMultiModeIndicator,
 | 
						|
        pstrUsageIndicatorOn,
 | 
						|
        pstrUsageIndicatorFlash,
 | 
						|
        pstrUsageIndicatorSlowBlink,
 | 
						|
        pstrUsageIndicatorFastBlink,
 | 
						|
        pstrUsageIndicatorOff,
 | 
						|
        pstrUsageFlashOnTime,
 | 
						|
        pstrUsageSlowBlinkOnTime,
 | 
						|
        pstrUsageSlowBlinkOffTime,
 | 
						|
        pstrUsageFastBlinkOnTime,
 | 
						|
        pstrUsageFastBlinkOffTime,
 | 
						|
        pstrUsageIndicatorColor,
 | 
						|
        pstrUsageIndicatorRed,
 | 
						|
        pstrUsageIndicatorGreen,
 | 
						|
        pstrUsageIndicatorAmber,
 | 
						|
        pstrUsageGenericIndicator,
 | 
						|
        pstrUsageSystemSuspend,
 | 
						|
        pstrUsageExternalPowerConnected
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles0 [] PROGMEM = {
 | 
						|
        pstrUsagePhone,
 | 
						|
        pstrUsageAnsweringMachine,
 | 
						|
        pstrUsageMessageControls,
 | 
						|
        pstrUsageHandset,
 | 
						|
        pstrUsageHeadset,
 | 
						|
        pstrUsageTelephonyKeyPad,
 | 
						|
        pstrUsageProgrammableButton
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles1 [] PROGMEM = {
 | 
						|
        pstrUsageHookSwitch,
 | 
						|
        pstrUsageFlash,
 | 
						|
        pstrUsageFeature,
 | 
						|
        pstrUsageHold,
 | 
						|
        pstrUsageRedial,
 | 
						|
        pstrUsageTransfer,
 | 
						|
        pstrUsageDrop,
 | 
						|
        pstrUsagePark,
 | 
						|
        pstrUsageForwardCalls,
 | 
						|
        pstrUsageAlternateFunction,
 | 
						|
        pstrUsageLine,
 | 
						|
        pstrUsageSpeakerPhone,
 | 
						|
        pstrUsageConference,
 | 
						|
        pstrUsageRingEnable,
 | 
						|
        pstrUsageRingSelect,
 | 
						|
        pstrUsagePhoneMute,
 | 
						|
        pstrUsageCallerID,
 | 
						|
        pstrUsageSend
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles2 [] PROGMEM = {
 | 
						|
        pstrUsageSpeedDial,
 | 
						|
        pstrUsageStoreNumber,
 | 
						|
        pstrUsageRecallNumber,
 | 
						|
        pstrUsagePhoneDirectory
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles3 [] PROGMEM = {
 | 
						|
        pstrUsageVoiceMail,
 | 
						|
        pstrUsageScreenCalls,
 | 
						|
        pstrUsageDoNotDisturb,
 | 
						|
        pstrUsageMessage,
 | 
						|
        pstrUsageAnswerOnOff
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles4 [] PROGMEM = {
 | 
						|
        pstrUsageInsideDialTone,
 | 
						|
        pstrUsageOutsideDialTone,
 | 
						|
        pstrUsageInsideRingTone,
 | 
						|
        pstrUsageOutsideRingTone,
 | 
						|
        pstrUsagePriorityRingTone,
 | 
						|
        pstrUsageInsideRingback,
 | 
						|
        pstrUsagePriorityRingback,
 | 
						|
        pstrUsageLineBusyTone,
 | 
						|
        pstrUsageReorderTone,
 | 
						|
        pstrUsageCallWaitingTone,
 | 
						|
        pstrUsageConfirmationTone1,
 | 
						|
        pstrUsageConfirmationTone2,
 | 
						|
        pstrUsageTonesOff,
 | 
						|
        pstrUsageOutsideRingback,
 | 
						|
        pstrUsageRinger
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::telTitles5 [] PROGMEM = {
 | 
						|
        pstrUsagePhoneKey0,
 | 
						|
        pstrUsagePhoneKey1,
 | 
						|
        pstrUsagePhoneKey2,
 | 
						|
        pstrUsagePhoneKey3,
 | 
						|
        pstrUsagePhoneKey4,
 | 
						|
        pstrUsagePhoneKey5,
 | 
						|
        pstrUsagePhoneKey6,
 | 
						|
        pstrUsagePhoneKey7,
 | 
						|
        pstrUsagePhoneKey8,
 | 
						|
        pstrUsagePhoneKey9,
 | 
						|
        pstrUsagePhoneKeyStar,
 | 
						|
        pstrUsagePhoneKeyPound,
 | 
						|
        pstrUsagePhoneKeyA,
 | 
						|
        pstrUsagePhoneKeyB,
 | 
						|
        pstrUsagePhoneKeyC,
 | 
						|
        pstrUsagePhoneKeyD
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles0[] PROGMEM = {
 | 
						|
        pstrUsageConsumerControl,
 | 
						|
        pstrUsageNumericKeyPad,
 | 
						|
        pstrUsageProgrammableButton,
 | 
						|
        pstrUsageMicrophone,
 | 
						|
        pstrUsageHeadphone,
 | 
						|
        pstrUsageGraphicEqualizer
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles1[] PROGMEM = {
 | 
						|
        pstrUsagePlus10,
 | 
						|
        pstrUsagePlus100,
 | 
						|
        pstrUsageAMPM
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles2[] PROGMEM = {
 | 
						|
        pstrUsagePower,
 | 
						|
        pstrUsageReset,
 | 
						|
        pstrUsageSleep,
 | 
						|
        pstrUsageSleepAfter,
 | 
						|
        pstrUsageSleepMode,
 | 
						|
        pstrUsageIllumination,
 | 
						|
        pstrUsageFunctionButtons
 | 
						|
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles3[] PROGMEM = {
 | 
						|
        pstrUsageMenu,
 | 
						|
        pstrUsageMenuPick,
 | 
						|
        pstrUsageMenuUp,
 | 
						|
        pstrUsageMenuDown,
 | 
						|
        pstrUsageMenuLeft,
 | 
						|
        pstrUsageMenuRight,
 | 
						|
        pstrUsageMenuEscape,
 | 
						|
        pstrUsageMenuValueIncrease,
 | 
						|
        pstrUsageMenuValueDecrease
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles4[] PROGMEM = {
 | 
						|
        pstrUsageDataOnScreen,
 | 
						|
        pstrUsageClosedCaption,
 | 
						|
        pstrUsageClosedCaptionSelect,
 | 
						|
        pstrUsageVCRTV,
 | 
						|
        pstrUsageBroadcastMode,
 | 
						|
        pstrUsageSnapshot,
 | 
						|
        pstrUsageStill
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles5[] PROGMEM = {
 | 
						|
        pstrUsageSelection,
 | 
						|
        pstrUsageAssignSelection,
 | 
						|
        pstrUsageModeStep,
 | 
						|
        pstrUsageRecallLast,
 | 
						|
        pstrUsageEnterChannel,
 | 
						|
        pstrUsageOrderMovie,
 | 
						|
        pstrUsageChannel,
 | 
						|
        pstrUsageMediaSelection,
 | 
						|
        pstrUsageMediaSelectComputer,
 | 
						|
        pstrUsageMediaSelectTV,
 | 
						|
        pstrUsageMediaSelectWWW,
 | 
						|
        pstrUsageMediaSelectDVD,
 | 
						|
        pstrUsageMediaSelectTelephone,
 | 
						|
        pstrUsageMediaSelectProgramGuide,
 | 
						|
        pstrUsageMediaSelectVideoPhone,
 | 
						|
        pstrUsageMediaSelectGames,
 | 
						|
        pstrUsageMediaSelectMessages,
 | 
						|
        pstrUsageMediaSelectCD,
 | 
						|
        pstrUsageMediaSelectVCR,
 | 
						|
        pstrUsageMediaSelectTuner,
 | 
						|
        pstrUsageQuit,
 | 
						|
        pstrUsageHelp,
 | 
						|
        pstrUsageMediaSelectTape,
 | 
						|
        pstrUsageMediaSelectCable,
 | 
						|
        pstrUsageMediaSelectSatellite,
 | 
						|
        pstrUsageMediaSelectSecurity,
 | 
						|
        pstrUsageMediaSelectHome,
 | 
						|
        pstrUsageMediaSelectCall,
 | 
						|
        pstrUsageChannelIncrement,
 | 
						|
        pstrUsageChannelDecrement,
 | 
						|
        pstrUsageMediaSelectSAP,
 | 
						|
        pstrUsagePageReserved,
 | 
						|
        pstrUsageVCRPlus,
 | 
						|
        pstrUsageOnce,
 | 
						|
        pstrUsageDaily,
 | 
						|
        pstrUsageWeekly,
 | 
						|
        pstrUsageMonthly
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles6[] PROGMEM = {
 | 
						|
        pstrUsagePlay,
 | 
						|
        pstrUsagePause,
 | 
						|
        pstrUsageRecord,
 | 
						|
        pstrUsageFastForward,
 | 
						|
        pstrUsageRewind,
 | 
						|
        pstrUsageScanNextTrack,
 | 
						|
        pstrUsageScanPreviousTrack,
 | 
						|
        pstrUsageStop,
 | 
						|
        pstrUsageEject,
 | 
						|
        pstrUsageRandomPlay,
 | 
						|
        pstrUsageSelectDisk,
 | 
						|
        pstrUsageEnterDisk,
 | 
						|
        pstrUsageRepeat,
 | 
						|
        pstrUsageTracking,
 | 
						|
        pstrUsageTrackNormal,
 | 
						|
        pstrUsageSlowTracking,
 | 
						|
        pstrUsageFrameForward,
 | 
						|
        pstrUsageFrameBackwards,
 | 
						|
        pstrUsageMark,
 | 
						|
        pstrUsageClearMark,
 | 
						|
        pstrUsageRepeatFromMark,
 | 
						|
        pstrUsageReturnToMark,
 | 
						|
        pstrUsageSearchMarkForward,
 | 
						|
        pstrUsageSearchMarkBackwards,
 | 
						|
        pstrUsageCounterReset,
 | 
						|
        pstrUsageShowCounter,
 | 
						|
        pstrUsageTrackingIncrement,
 | 
						|
        pstrUsageTrackingDecrement,
 | 
						|
        pstrUsageStopEject,
 | 
						|
        pstrUsagePlayPause,
 | 
						|
        pstrUsagePlaySkip
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles7[] PROGMEM = {
 | 
						|
        pstrUsageVolume,
 | 
						|
        pstrUsageBalance,
 | 
						|
        pstrUsageMute,
 | 
						|
        pstrUsageBass,
 | 
						|
        pstrUsageTreble,
 | 
						|
        pstrUsageBassBoost,
 | 
						|
        pstrUsageSurroundMode,
 | 
						|
        pstrUsageLoudness,
 | 
						|
        pstrUsageMPX,
 | 
						|
        pstrUsageVolumeIncrement,
 | 
						|
        pstrUsageVolumeDecrement
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles8[] PROGMEM = {
 | 
						|
        pstrUsageSpeedSelect,
 | 
						|
        pstrUsagePlaybackSpeed,
 | 
						|
        pstrUsageStandardPlay,
 | 
						|
        pstrUsageLongPlay,
 | 
						|
        pstrUsageExtendedPlay,
 | 
						|
        pstrUsageSlow
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitles9[] PROGMEM = {
 | 
						|
        pstrUsageFanEnable,
 | 
						|
        pstrUsageFanSpeed,
 | 
						|
        pstrUsageLightEnable,
 | 
						|
        pstrUsageLightIlluminationLevel,
 | 
						|
        pstrUsageClimateControlEnable,
 | 
						|
        pstrUsageRoomTemperature,
 | 
						|
        pstrUsageSecurityEnable,
 | 
						|
        pstrUsageFireAlarm,
 | 
						|
        pstrUsagePoliceAlarm,
 | 
						|
        pstrUsageProximity,
 | 
						|
        pstrUsageMotion,
 | 
						|
        pstrUsageDuresAlarm,
 | 
						|
        pstrUsageHoldupAlarm,
 | 
						|
        pstrUsageMedicalAlarm
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitlesA[] PROGMEM = {
 | 
						|
        pstrUsageBalanceRight,
 | 
						|
        pstrUsageBalanceLeft,
 | 
						|
        pstrUsageBassIncrement,
 | 
						|
        pstrUsageBassDecrement,
 | 
						|
        pstrUsageTrebleIncrement,
 | 
						|
        pstrUsageTrebleDecrement
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitlesB[] PROGMEM = {
 | 
						|
        pstrUsageSpeakerSystem,
 | 
						|
        pstrUsageChannelLeft,
 | 
						|
        pstrUsageChannelRight,
 | 
						|
        pstrUsageChannelCenter,
 | 
						|
        pstrUsageChannelFront,
 | 
						|
        pstrUsageChannelCenterFront,
 | 
						|
        pstrUsageChannelSide,
 | 
						|
        pstrUsageChannelSurround,
 | 
						|
        pstrUsageChannelLowFreqEnhancement,
 | 
						|
        pstrUsageChannelTop,
 | 
						|
        pstrUsageChannelUnknown
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitlesC[] PROGMEM = {
 | 
						|
        pstrUsageSubChannel,
 | 
						|
        pstrUsageSubChannelIncrement,
 | 
						|
        pstrUsageSubChannelDecrement,
 | 
						|
        pstrUsageAlternateAudioIncrement,
 | 
						|
        pstrUsageAlternateAudioDecrement
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitlesD[] PROGMEM = {
 | 
						|
        pstrUsageApplicationLaunchButtons,
 | 
						|
        pstrUsageALLaunchButtonConfigTool,
 | 
						|
        pstrUsageALProgrammableButton,
 | 
						|
        pstrUsageALConsumerControlConfig,
 | 
						|
        pstrUsageALWordProcessor,
 | 
						|
        pstrUsageALTextEditor,
 | 
						|
        pstrUsageALSpreadsheet,
 | 
						|
        pstrUsageALGraphicsEditor,
 | 
						|
        pstrUsageALPresentationApp,
 | 
						|
        pstrUsageALDatabaseApp,
 | 
						|
        pstrUsageALEmailReader,
 | 
						|
        pstrUsageALNewsreader,
 | 
						|
        pstrUsageALVoicemail,
 | 
						|
        pstrUsageALContactsAddressBook,
 | 
						|
        pstrUsageALCalendarSchedule,
 | 
						|
        pstrUsageALTaskProjectManager,
 | 
						|
        pstrUsageALLogJournalTimecard,
 | 
						|
        pstrUsageALCheckbookFinance,
 | 
						|
        pstrUsageALCalculator,
 | 
						|
        pstrUsageALAVCapturePlayback,
 | 
						|
        pstrUsageALLocalMachineBrowser,
 | 
						|
        pstrUsageALLANWANBrow,
 | 
						|
        pstrUsageALInternetBrowser,
 | 
						|
        pstrUsageALRemoteNetISPConnect,
 | 
						|
        pstrUsageALNetworkConference,
 | 
						|
        pstrUsageALNetworkChat,
 | 
						|
        pstrUsageALTelephonyDialer,
 | 
						|
        pstrUsageALLogon,
 | 
						|
        pstrUsageALLogoff,
 | 
						|
        pstrUsageALLogonLogoff,
 | 
						|
        pstrUsageALTermLockScrSav,
 | 
						|
        pstrUsageALControlPannel,
 | 
						|
        pstrUsageALCommandLineProcessorRun,
 | 
						|
        pstrUsageALProcessTaskManager,
 | 
						|
        pstrUsageALSelectTaskApplication,
 | 
						|
        pstrUsageALNextTaskApplication,
 | 
						|
        pstrUsageALPreviousTaskApplication,
 | 
						|
        pstrUsageALPreemptiveHaltTaskApp,
 | 
						|
        pstrUsageALIntegratedHelpCenter,
 | 
						|
        pstrUsageALDocuments,
 | 
						|
        pstrUsageALThesaurus,
 | 
						|
        pstrUsageALDictionary,
 | 
						|
        pstrUsageALDesktop,
 | 
						|
        pstrUsageALSpellCheck,
 | 
						|
        pstrUsageALGrammarCheck,
 | 
						|
        pstrUsageALWirelessStatus,
 | 
						|
        pstrUsageALKeyboardLayout,
 | 
						|
        pstrUsageALVirusProtection,
 | 
						|
        pstrUsageALEncryption,
 | 
						|
        pstrUsageALScreenSaver,
 | 
						|
        pstrUsageALAlarms,
 | 
						|
        pstrUsageALClock,
 | 
						|
        pstrUsageALFileBrowser,
 | 
						|
        pstrUsageALPowerStatus,
 | 
						|
        pstrUsageALImageBrowser,
 | 
						|
        pstrUsageALAudioBrowser,
 | 
						|
        pstrUsageALMovieBrowser,
 | 
						|
        pstrUsageALDigitalRightsManager,
 | 
						|
        pstrUsageALDigitalWallet,
 | 
						|
        pstrUsagePageReserved,
 | 
						|
        pstrUsageALInstantMessaging,
 | 
						|
        pstrUsageALOEMFeaturesBrowser,
 | 
						|
        pstrUsageALOEMHelp,
 | 
						|
        pstrUsageALOnlineCommunity,
 | 
						|
        pstrUsageALEntertainmentContentBrow,
 | 
						|
        pstrUsageALOnlineShoppingBrowser,
 | 
						|
        pstrUsageALSmartCardInfoHelp,
 | 
						|
        pstrUsageALMarketMonitorFinBrowser,
 | 
						|
        pstrUsageALCustomCorpNewsBrowser,
 | 
						|
        pstrUsageALOnlineActivityBrowser,
 | 
						|
        pstrUsageALResearchSearchBrowser,
 | 
						|
        pstrUsageALAudioPlayer
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::consTitlesE[] PROGMEM = {
 | 
						|
        pstrUsageGenericGUIAppControls,
 | 
						|
        pstrUsageACNew,
 | 
						|
        pstrUsageACOpen,
 | 
						|
        pstrUsageACClose,
 | 
						|
        pstrUsageACExit,
 | 
						|
        pstrUsageACMaximize,
 | 
						|
        pstrUsageACMinimize,
 | 
						|
        pstrUsageACSave,
 | 
						|
        pstrUsageACPrint,
 | 
						|
        pstrUsageACProperties,
 | 
						|
        pstrUsageACUndo,
 | 
						|
        pstrUsageACCopy,
 | 
						|
        pstrUsageACCut,
 | 
						|
        pstrUsageACPaste,
 | 
						|
        pstrUsageACSelectAll,
 | 
						|
        pstrUsageACFind,
 | 
						|
        pstrUsageACFindAndReplace,
 | 
						|
        pstrUsageACSearch,
 | 
						|
        pstrUsageACGoto,
 | 
						|
        pstrUsageACHome,
 | 
						|
        pstrUsageACBack,
 | 
						|
        pstrUsageACForward,
 | 
						|
        pstrUsageACStop,
 | 
						|
        pstrUsageACRefresh,
 | 
						|
        pstrUsageACPreviousLink,
 | 
						|
        pstrUsageACNextLink,
 | 
						|
        pstrUsageACBookmarks,
 | 
						|
        pstrUsageACHistory,
 | 
						|
        pstrUsageACSubscriptions,
 | 
						|
        pstrUsageACZoomIn,
 | 
						|
        pstrUsageACZoomOut,
 | 
						|
        pstrUsageACZoom,
 | 
						|
        pstrUsageACFullScreenView,
 | 
						|
        pstrUsageACNormalView,
 | 
						|
        pstrUsageACViewToggle,
 | 
						|
        pstrUsageACScrollUp,
 | 
						|
        pstrUsageACScrollDown,
 | 
						|
        pstrUsageACScroll,
 | 
						|
        pstrUsageACPanLeft,
 | 
						|
        pstrUsageACPanRight,
 | 
						|
        pstrUsageACPan,
 | 
						|
        pstrUsageACNewWindow,
 | 
						|
        pstrUsageACTileHoriz,
 | 
						|
        pstrUsageACTileVert,
 | 
						|
        pstrUsageACFormat,
 | 
						|
        pstrUsageACEdit,
 | 
						|
        pstrUsageACBold,
 | 
						|
        pstrUsageACItalics,
 | 
						|
        pstrUsageACUnderline,
 | 
						|
        pstrUsageACStrikethrough,
 | 
						|
        pstrUsageACSubscript,
 | 
						|
        pstrUsageACSuperscript,
 | 
						|
        pstrUsageACAllCaps,
 | 
						|
        pstrUsageACRotate,
 | 
						|
        pstrUsageACResize,
 | 
						|
        pstrUsageACFlipHorizontal,
 | 
						|
        pstrUsageACFlipVertical,
 | 
						|
        pstrUsageACMirrorHorizontal,
 | 
						|
        pstrUsageACMirrorVertical,
 | 
						|
        pstrUsageACFontSelect,
 | 
						|
        pstrUsageACFontColor,
 | 
						|
        pstrUsageACFontSize,
 | 
						|
        pstrUsageACJustifyLeft,
 | 
						|
        pstrUsageACJustifyCenterH,
 | 
						|
        pstrUsageACJustifyRight,
 | 
						|
        pstrUsageACJustifyBlockH,
 | 
						|
        pstrUsageACJustifyTop,
 | 
						|
        pstrUsageACJustifyCenterV,
 | 
						|
        pstrUsageACJustifyBottom,
 | 
						|
        pstrUsageACJustifyBlockV,
 | 
						|
        pstrUsageACIndentDecrease,
 | 
						|
        pstrUsageACIndentIncrease,
 | 
						|
        pstrUsageACNumberedList,
 | 
						|
        pstrUsageACRestartNumbering,
 | 
						|
        pstrUsageACBulletedList,
 | 
						|
        pstrUsageACPromote,
 | 
						|
        pstrUsageACDemote,
 | 
						|
        pstrUsageACYes,
 | 
						|
        pstrUsageACNo,
 | 
						|
        pstrUsageACCancel,
 | 
						|
        pstrUsageACCatalog,
 | 
						|
        pstrUsageACBuyChkout,
 | 
						|
        pstrUsageACAddToCart,
 | 
						|
        pstrUsageACExpand,
 | 
						|
        pstrUsageACExpandAll,
 | 
						|
        pstrUsageACCollapse,
 | 
						|
        pstrUsageACCollapseAll,
 | 
						|
        pstrUsageACPrintPreview,
 | 
						|
        pstrUsageACPasteSpecial,
 | 
						|
        pstrUsageACInsertMode,
 | 
						|
        pstrUsageACDelete,
 | 
						|
        pstrUsageACLock,
 | 
						|
        pstrUsageACUnlock,
 | 
						|
        pstrUsageACProtect,
 | 
						|
        pstrUsageACUnprotect,
 | 
						|
        pstrUsageACAttachComment,
 | 
						|
        pstrUsageACDeleteComment,
 | 
						|
        pstrUsageACViewComment,
 | 
						|
        pstrUsageACSelectWord,
 | 
						|
        pstrUsageACSelectSentence,
 | 
						|
        pstrUsageACSelectParagraph,
 | 
						|
        pstrUsageACSelectColumn,
 | 
						|
        pstrUsageACSelectRow,
 | 
						|
        pstrUsageACSelectTable,
 | 
						|
        pstrUsageACSelectObject,
 | 
						|
        pstrUsageACRedoRepeat,
 | 
						|
        pstrUsageACSort,
 | 
						|
        pstrUsageACSortAscending,
 | 
						|
        pstrUsageACSortDescending,
 | 
						|
        pstrUsageACFilter,
 | 
						|
        pstrUsageACSetClock,
 | 
						|
        pstrUsageACViewClock,
 | 
						|
        pstrUsageACSelectTimeZone,
 | 
						|
        pstrUsageACEditTimeZone,
 | 
						|
        pstrUsageACSetAlarm,
 | 
						|
        pstrUsageACClearAlarm,
 | 
						|
        pstrUsageACSnoozeAlarm,
 | 
						|
        pstrUsageACResetAlarm,
 | 
						|
        pstrUsageACSyncronize,
 | 
						|
        pstrUsageACSendReceive,
 | 
						|
        pstrUsageACSendTo,
 | 
						|
        pstrUsageACReply,
 | 
						|
        pstrUsageACReplyAll,
 | 
						|
        pstrUsageACForwardMessage,
 | 
						|
        pstrUsageACSend,
 | 
						|
        pstrUsageACAttachFile,
 | 
						|
        pstrUsageACUpload,
 | 
						|
        pstrUsageACDownload,
 | 
						|
        pstrUsageACSetBorders,
 | 
						|
        pstrUsageACInsertRow,
 | 
						|
        pstrUsageACInsertColumn,
 | 
						|
        pstrUsageACInsertFile,
 | 
						|
        pstrUsageACInsertPicture,
 | 
						|
        pstrUsageACInsertObject,
 | 
						|
        pstrUsageACInsertSymbol,
 | 
						|
        pstrUsageACSaveAndClose,
 | 
						|
        pstrUsageACRename,
 | 
						|
        pstrUsageACMerge,
 | 
						|
        pstrUsageACSplit,
 | 
						|
        pstrUsageACDistributeHorizontaly,
 | 
						|
        pstrUsageACDistributeVerticaly
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::digitTitles0[] PROGMEM = {
 | 
						|
        pstrUsageDigitizer,
 | 
						|
        pstrUsagePen,
 | 
						|
        pstrUsageLightPen,
 | 
						|
        pstrUsageTouchScreen,
 | 
						|
        pstrUsageTouchPad,
 | 
						|
        pstrUsageWhiteBoard,
 | 
						|
        pstrUsageCoordinateMeasuringMachine,
 | 
						|
        pstrUsage3DDigitizer,
 | 
						|
        pstrUsageStereoPlotter,
 | 
						|
        pstrUsageArticulatedArm,
 | 
						|
        pstrUsageArmature,
 | 
						|
        pstrUsageMultiplePointDigitizer,
 | 
						|
        pstrUsageFreeSpaceWand
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::digitTitles1[] PROGMEM = {
 | 
						|
        pstrUsageStylus,
 | 
						|
        pstrUsagePuck,
 | 
						|
        pstrUsageFinger
 | 
						|
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::digitTitles2[] PROGMEM = {
 | 
						|
        pstrUsageTipPressure,
 | 
						|
        pstrUsageBarrelPressure,
 | 
						|
        pstrUsageInRange,
 | 
						|
        pstrUsageTouch,
 | 
						|
        pstrUsageUntouch,
 | 
						|
        pstrUsageTap,
 | 
						|
        pstrUsageQuality,
 | 
						|
        pstrUsageDataValid,
 | 
						|
        pstrUsageTransducerIndex,
 | 
						|
        pstrUsageTabletFunctionKeys,
 | 
						|
        pstrUsageProgramChangeKeys,
 | 
						|
        pstrUsageBatteryStrength,
 | 
						|
        pstrUsageInvert,
 | 
						|
        pstrUsageXTilt,
 | 
						|
        pstrUsageYTilt,
 | 
						|
        pstrUsageAzimuth,
 | 
						|
        pstrUsageAltitude,
 | 
						|
        pstrUsageTwist,
 | 
						|
        pstrUsageTipSwitch,
 | 
						|
        pstrUsageSecondaryTipSwitch,
 | 
						|
        pstrUsageBarrelSwitch,
 | 
						|
        pstrUsageEraser,
 | 
						|
        pstrUsageTabletPick
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::aplphanumTitles0[] PROGMEM = {
 | 
						|
        pstrUsageAlphanumericDisplay,
 | 
						|
        pstrUsageBitmappedDisplay
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::aplphanumTitles1[] PROGMEM = {
 | 
						|
        pstrUsageDisplayAttributesReport,
 | 
						|
        pstrUsageASCIICharacterSet,
 | 
						|
        pstrUsageDataReadBack,
 | 
						|
        pstrUsageFontReadBack,
 | 
						|
        pstrUsageDisplayControlReport,
 | 
						|
        pstrUsageClearDisplay,
 | 
						|
        pstrUsageDisplayEnable,
 | 
						|
        pstrUsageScreenSaverDelay,
 | 
						|
        pstrUsageScreenSaverEnable,
 | 
						|
        pstrUsageVerticalScroll,
 | 
						|
        pstrUsageHorizontalScroll,
 | 
						|
        pstrUsageCharacterReport,
 | 
						|
        pstrUsageDisplayData,
 | 
						|
        pstrUsageDisplayStatus,
 | 
						|
        pstrUsageStatusNotReady,
 | 
						|
        pstrUsageStatusReady,
 | 
						|
        pstrUsageErrorNotALoadableCharacter,
 | 
						|
        pstrUsageErrorFotDataCanNotBeRead,
 | 
						|
        pstrUsageCursorPositionReport,
 | 
						|
        pstrUsageRow,
 | 
						|
        pstrUsageColumn,
 | 
						|
        pstrUsageRows,
 | 
						|
        pstrUsageColumns,
 | 
						|
        pstrUsageCursorPixelPosition,
 | 
						|
        pstrUsageCursorMode,
 | 
						|
        pstrUsageCursorEnable,
 | 
						|
        pstrUsageCursorBlink,
 | 
						|
        pstrUsageFontReport,
 | 
						|
        pstrUsageFontData,
 | 
						|
        pstrUsageCharacterWidth,
 | 
						|
        pstrUsageCharacterHeight,
 | 
						|
        pstrUsageCharacterSpacingHorizontal,
 | 
						|
        pstrUsageCharacterSpacingVertical,
 | 
						|
        pstrUsageUnicodeCharset,
 | 
						|
        pstrUsageFont7Segment,
 | 
						|
        pstrUsage7SegmentDirectMap,
 | 
						|
        pstrUsageFont14Segment,
 | 
						|
        pstrUsage14SegmentDirectMap,
 | 
						|
        pstrUsageDisplayBrightness,
 | 
						|
        pstrUsageDisplayContrast,
 | 
						|
        pstrUsageCharacterAttribute,
 | 
						|
        pstrUsageAttributeReadback,
 | 
						|
        pstrUsageAttributeData,
 | 
						|
        pstrUsageCharAttributeEnhance,
 | 
						|
        pstrUsageCharAttributeUnderline,
 | 
						|
        pstrUsageCharAttributeBlink
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::aplphanumTitles2[] PROGMEM = {
 | 
						|
        pstrUsageBitmapSizeX,
 | 
						|
        pstrUsageBitmapSizeY,
 | 
						|
        pstrUsagePageReserved,
 | 
						|
        pstrUsageBitDepthFormat,
 | 
						|
        pstrUsageDisplayOrientation,
 | 
						|
        pstrUsagePaletteReport,
 | 
						|
        pstrUsagePaletteDataSize,
 | 
						|
        pstrUsagePaletteDataOffset,
 | 
						|
        pstrUsagePaletteData,
 | 
						|
        pstrUsageBlitReport,
 | 
						|
        pstrUsageBlitRectangleX1,
 | 
						|
        pstrUsageBlitRectangleY1,
 | 
						|
        pstrUsageBlitRectangleX2,
 | 
						|
        pstrUsageBlitRectangleY2,
 | 
						|
        pstrUsageBlitData,
 | 
						|
        pstrUsageSoftButton,
 | 
						|
        pstrUsageSoftButtonID,
 | 
						|
        pstrUsageSoftButtonSide,
 | 
						|
        pstrUsageSoftButtonOffset1,
 | 
						|
        pstrUsageSoftButtonOffset2,
 | 
						|
        pstrUsageSoftButtonReport
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::medInstrTitles0[] PROGMEM = {
 | 
						|
        pstrUsageVCRAcquisition,
 | 
						|
        pstrUsageFreezeThaw,
 | 
						|
        pstrUsageClipStore,
 | 
						|
        pstrUsageUpdate,
 | 
						|
        pstrUsageNext,
 | 
						|
        pstrUsageSave,
 | 
						|
        pstrUsagePrint,
 | 
						|
        pstrUsageMicrophoneEnable
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::medInstrTitles1[] PROGMEM = {
 | 
						|
        pstrUsageCine,
 | 
						|
        pstrUsageTransmitPower,
 | 
						|
        pstrUsageVolume,
 | 
						|
        pstrUsageFocus,
 | 
						|
        pstrUsageDepth
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::medInstrTitles2[] PROGMEM = {
 | 
						|
        pstrUsageSoftStepPrimary,
 | 
						|
        pstrUsageSoftStepSecondary
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::medInstrTitles3[] PROGMEM = {
 | 
						|
        pstrUsageZoomSelect,
 | 
						|
        pstrUsageZoomAdjust,
 | 
						|
        pstrUsageSpectralDopplerModeSelect,
 | 
						|
        pstrUsageSpectralDopplerModeAdjust,
 | 
						|
        pstrUsageColorDopplerModeSelect,
 | 
						|
        pstrUsageColorDopplerModeAdjust,
 | 
						|
        pstrUsageMotionModeSelect,
 | 
						|
        pstrUsageMotionModeAdjust,
 | 
						|
        pstrUsage2DModeSelect,
 | 
						|
        pstrUsage2DModeAdjust
 | 
						|
};
 | 
						|
const char * const ReportDescParserBase::medInstrTitles4[] PROGMEM = {
 | 
						|
        pstrUsageSoftControlSelect,
 | 
						|
        pstrUsageSoftControlAdjust
 | 
						|
};
 | 
						|
 | 
						|
void ReportDescParserBase::Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset) {
 | 
						|
        uint16_t cntdn = (uint16_t)len;
 | 
						|
        uint8_t *p = (uint8_t*)pbuf;
 | 
						|
 | 
						|
 | 
						|
        totalSize = 0;
 | 
						|
 | 
						|
        while(cntdn) {
 | 
						|
                //USB_HOST_SERIAL.println("");
 | 
						|
                //PrintHex<uint16_t>(offset + len - cntdn);
 | 
						|
                //USB_HOST_SERIAL.print(":");
 | 
						|
 | 
						|
                ParseItem(&p, &cntdn);
 | 
						|
 | 
						|
                //if (ParseItem(&p, &cntdn))
 | 
						|
                //        return;
 | 
						|
        }
 | 
						|
        //USBTRACE2("Total:", totalSize);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintValue(uint8_t *p, uint8_t len) {
 | 
						|
        E_Notify(PSTR("("), 0x80);
 | 
						|
        for(; len; p++, len--)
 | 
						|
                PrintHex<uint8_t > (*p, 0x80);
 | 
						|
        E_Notify(PSTR(")"), 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintByteValue(uint8_t data) {
 | 
						|
        E_Notify(PSTR("("), 0x80);
 | 
						|
        PrintHex<uint8_t > (data, 0x80);
 | 
						|
        E_Notify(PSTR(")"), 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintItemTitle(uint8_t prefix) {
 | 
						|
        switch(prefix & (TYPE_MASK | TAG_MASK)) {
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_PUSH):
 | 
						|
                        E_Notify(PSTR("\r\nPush"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_POP):
 | 
						|
                        E_Notify(PSTR("\r\nPop"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_USAGEPAGE):
 | 
						|
                        E_Notify(PSTR("\r\nUsage Page"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_LOGICALMIN):
 | 
						|
                        E_Notify(PSTR("\r\nLogical Min"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_LOGICALMAX):
 | 
						|
                        E_Notify(PSTR("\r\nLogical Max"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_PHYSMIN):
 | 
						|
                        E_Notify(PSTR("\r\nPhysical Min"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_PHYSMAX):
 | 
						|
                        E_Notify(PSTR("\r\nPhysical Max"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_UNITEXP):
 | 
						|
                        E_Notify(PSTR("\r\nUnit Exp"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_UNIT):
 | 
						|
                        E_Notify(PSTR("\r\nUnit"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTSIZE):
 | 
						|
                        E_Notify(PSTR("\r\nReport Size"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTCOUNT):
 | 
						|
                        E_Notify(PSTR("\r\nReport Count"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTID):
 | 
						|
                        E_Notify(PSTR("\r\nReport Id"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_LOCAL | TAG_LOCAL_USAGE):
 | 
						|
                        E_Notify(PSTR("\r\nUsage"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):
 | 
						|
                        E_Notify(PSTR("\r\nUsage Min"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_LOCAL | TAG_LOCAL_USAGEMAX):
 | 
						|
                        E_Notify(PSTR("\r\nUsage Max"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_MAIN | TAG_MAIN_COLLECTION):
 | 
						|
                        E_Notify(PSTR("\r\nCollection"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_MAIN | TAG_MAIN_ENDCOLLECTION):
 | 
						|
                        E_Notify(PSTR("\r\nEnd Collection"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_MAIN | TAG_MAIN_INPUT):
 | 
						|
                        E_Notify(PSTR("\r\nInput"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_MAIN | TAG_MAIN_OUTPUT):
 | 
						|
                        E_Notify(PSTR("\r\nOutput"), 0x80);
 | 
						|
                        break;
 | 
						|
                case (TYPE_MAIN | TAG_MAIN_FEATURE):
 | 
						|
                        E_Notify(PSTR("\r\nFeature"), 0x80);
 | 
						|
                        break;
 | 
						|
        } // switch (**pp & (TYPE_MASK | TAG_MASK))
 | 
						|
}
 | 
						|
 | 
						|
uint8_t ReportDescParserBase::ParseItem(uint8_t **pp, uint16_t *pcntdn) {
 | 
						|
        //uint8_t ret = enErrorSuccess;
 | 
						|
        //reinterpret_cast<>(varBuffer);
 | 
						|
        switch(itemParseState) {
 | 
						|
                case 0:
 | 
						|
                        if(**pp == HID_LONG_ITEM_PREFIX)
 | 
						|
                                USBTRACE("\r\nLONG\r\n");
 | 
						|
                        else {
 | 
						|
                                uint8_t size = ((**pp) & DATA_SIZE_MASK);
 | 
						|
 | 
						|
                                itemPrefix = (**pp);
 | 
						|
                                itemSize = 1 + ((size == DATA_SIZE_4) ? 4 : size);
 | 
						|
 | 
						|
                                PrintItemTitle(itemPrefix);
 | 
						|
                        }
 | 
						|
                        (*pp)++;
 | 
						|
                        (*pcntdn)--;
 | 
						|
                        itemSize--;
 | 
						|
                        itemParseState = 1;
 | 
						|
 | 
						|
                        if(!itemSize)
 | 
						|
                                break;
 | 
						|
 | 
						|
                        if(!pcntdn)
 | 
						|
                                return enErrorIncomplete;
 | 
						|
                case 1:
 | 
						|
                        //USBTRACE2("\r\niSz:",itemSize);
 | 
						|
 | 
						|
                        theBuffer.valueSize = itemSize;
 | 
						|
                        valParser.Initialize(&theBuffer);
 | 
						|
                        itemParseState = 2;
 | 
						|
                case 2:
 | 
						|
                        if(!valParser.Parse(pp, pcntdn))
 | 
						|
                                return enErrorIncomplete;
 | 
						|
                        itemParseState = 3;
 | 
						|
                case 3:
 | 
						|
                {
 | 
						|
                        uint8_t data = *((uint8_t*)varBuffer);
 | 
						|
 | 
						|
                        switch(itemPrefix & (TYPE_MASK | TAG_MASK)) {
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGE):
 | 
						|
                                        if(pfUsage) {
 | 
						|
                                                if(theBuffer.valueSize > 1) {
 | 
						|
                                                        uint16_t* ui16 = reinterpret_cast<uint16_t *>(varBuffer);
 | 
						|
                                                        pfUsage(*ui16);
 | 
						|
                                                } else
 | 
						|
                                                        pfUsage(data);
 | 
						|
                                        }
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTSIZE):
 | 
						|
                                        rptSize = data;
 | 
						|
                                        PrintByteValue(data);
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTCOUNT):
 | 
						|
                                        rptCount = data;
 | 
						|
                                        PrintByteValue(data);
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_LOGICALMIN):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_LOGICALMAX):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_PHYSMIN):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_PHYSMAX):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTID):
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGEMAX):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_UNITEXP):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_UNIT):
 | 
						|
                                        PrintValue(varBuffer, theBuffer.valueSize);
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_PUSH):
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_POP):
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_USAGEPAGE):
 | 
						|
                                        SetUsagePage(data);
 | 
						|
                                        PrintUsagePage(data);
 | 
						|
                                        PrintByteValue(data);
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_COLLECTION):
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_ENDCOLLECTION):
 | 
						|
                                        switch(data) {
 | 
						|
                                                case 0x00:
 | 
						|
                                                        E_Notify(PSTR(" Physical"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x01:
 | 
						|
                                                        E_Notify(PSTR(" Application"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x02:
 | 
						|
                                                        E_Notify(PSTR(" Logical"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x03:
 | 
						|
                                                        E_Notify(PSTR(" Report"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x04:
 | 
						|
                                                        E_Notify(PSTR(" Named Array"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x05:
 | 
						|
                                                        E_Notify(PSTR(" Usage Switch"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                case 0x06:
 | 
						|
                                                        E_Notify(PSTR(" Usage Modifier"), 0x80);
 | 
						|
                                                        break;
 | 
						|
                                                default:
 | 
						|
                                                        E_Notify(PSTR(" Vendor Defined("), 0x80);
 | 
						|
                                                        PrintHex<uint8_t > (data, 0x80);
 | 
						|
                                                        E_Notify(PSTR(")"), 0x80);
 | 
						|
                                        }
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_INPUT):
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_OUTPUT):
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_FEATURE):
 | 
						|
                                        totalSize += (uint16_t)rptSize * (uint16_t)rptCount;
 | 
						|
                                        rptSize = 0;
 | 
						|
                                        rptCount = 0;
 | 
						|
                                        E_Notify(PSTR("("), 0x80);
 | 
						|
                                        PrintBin<uint8_t > (data, 0x80);
 | 
						|
                                        E_Notify(PSTR(")"), 0x80);
 | 
						|
                                        break;
 | 
						|
                        } // switch (**pp & (TYPE_MASK | TAG_MASK))
 | 
						|
                }
 | 
						|
        } // switch (itemParseState)
 | 
						|
        itemParseState = 0;
 | 
						|
        return enErrorSuccess;
 | 
						|
}
 | 
						|
 | 
						|
ReportDescParserBase::UsagePageFunc ReportDescParserBase::usagePageFunctions[] /*PROGMEM*/ = {
 | 
						|
        &ReportDescParserBase::PrintGenericDesktopPageUsage,
 | 
						|
        &ReportDescParserBase::PrintSimulationControlsPageUsage,
 | 
						|
        &ReportDescParserBase::PrintVRControlsPageUsage,
 | 
						|
        &ReportDescParserBase::PrintSportsControlsPageUsage,
 | 
						|
        &ReportDescParserBase::PrintGameControlsPageUsage,
 | 
						|
        &ReportDescParserBase::PrintGenericDeviceControlsPageUsage,
 | 
						|
        NULL, // Keyboard/Keypad
 | 
						|
        &ReportDescParserBase::PrintLEDPageUsage,
 | 
						|
        &ReportDescParserBase::PrintButtonPageUsage,
 | 
						|
        &ReportDescParserBase::PrintOrdinalPageUsage,
 | 
						|
        &ReportDescParserBase::PrintTelephonyPageUsage,
 | 
						|
        &ReportDescParserBase::PrintConsumerPageUsage,
 | 
						|
        &ReportDescParserBase::PrintDigitizerPageUsage,
 | 
						|
        NULL, // Reserved
 | 
						|
        NULL, // PID
 | 
						|
        NULL // Unicode
 | 
						|
};
 | 
						|
 | 
						|
void ReportDescParserBase::SetUsagePage(uint16_t page) {
 | 
						|
        pfUsage = NULL;
 | 
						|
 | 
						|
        if(VALUE_BETWEEN(page, 0x00, 0x11)) {
 | 
						|
                pfUsage = (usagePageFunctions[page - 1]);
 | 
						|
 | 
						|
        } else {
 | 
						|
                switch(page) {
 | 
						|
                        case 0x14:
 | 
						|
                                pfUsage = &ReportDescParserBase::PrintAlphanumDisplayPageUsage;
 | 
						|
                                break;
 | 
						|
                        case 0x40:
 | 
						|
                                pfUsage = &ReportDescParserBase::PrintMedicalInstrumentPageUsage;
 | 
						|
                                break;
 | 
						|
                }
 | 
						|
        }
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintUsagePage(uint16_t page) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(page, 0x00, 0x11, w, E_Notify, usagePageTitles0, 0x80)
 | 
						|
        else output_if_between(page, 0x8b, 0x92, w, E_Notify, usagePageTitles1, 0x80)
 | 
						|
        else if(VALUE_BETWEEN(page, 0x7f, 0x84))
 | 
						|
                E_Notify(pstrUsagePageMonitor, 0x80);
 | 
						|
        else if(VALUE_BETWEEN(page, 0x83, 0x8c))
 | 
						|
                E_Notify(pstrUsagePagePower, 0x80);
 | 
						|
        else if(page > 0xfeff /* && page <= 0xffff */)
 | 
						|
                E_Notify(pstrUsagePageVendorDefined, 0x80);
 | 
						|
        else
 | 
						|
                switch(page) {
 | 
						|
                        case 0x14:
 | 
						|
                                E_Notify(pstrUsagePageAlphaNumericDisplay, 0x80);
 | 
						|
                                break;
 | 
						|
                        case 0x40:
 | 
						|
                                E_Notify(pstrUsagePageMedicalInstruments, 0x80);
 | 
						|
                                break;
 | 
						|
                        default:
 | 
						|
                                E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
                }
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintButtonPageUsage(uint16_t usage) {
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
        E_Notify(PSTR("Btn"), 0x80);
 | 
						|
        PrintHex<uint16_t > (usage, 0x80);
 | 
						|
        E_Notify(PSTR("\r\n"), 0x80);
 | 
						|
        //USB_HOST_SERIAL.print(usage, HEX);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintOrdinalPageUsage(uint16_t usage) {
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
        E_Notify(PSTR("Inst"), 0x80);
 | 
						|
        // Sorry, HEX for now...
 | 
						|
        PrintHex<uint16_t > (usage, 0x80);
 | 
						|
        E_Notify(PSTR("\r\n"), 0x80);
 | 
						|
        //USB_HOST_SERIAL.print(usage, DEC);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintGenericDesktopPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x0a, w, E_Notify, genDesktopTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x2f, 0x49, w, E_Notify, genDesktopTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x7f, 0x94, w, E_Notify, genDesktopTitles2, 0x80)
 | 
						|
        else output_if_between(usage, 0x9f, 0xa9, w, E_Notify, genDesktopTitles3, 0x80)
 | 
						|
        else output_if_between(usage, 0xaf, 0xb8, w, E_Notify, genDesktopTitles4, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintSimulationControlsPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x0d, w, E_Notify, simuTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x26, w, E_Notify, simuTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0xaf, 0xd1, w, E_Notify, simuTitles2, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintVRControlsPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x0b, w, E_Notify, vrTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x22, w, E_Notify, vrTitles1, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintSportsControlsPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x05, w, E_Notify, sportsCtrlTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x2f, 0x3a, w, E_Notify, sportsCtrlTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x4f, 0x64, w, E_Notify, sportsCtrlTitles2, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintGameControlsPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x04, w, E_Notify, gameTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x3a, w, E_Notify, gameTitles1, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintGenericDeviceControlsPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x1f, 0x27, w, E_Notify, genDevCtrlTitles, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintLEDPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x4e, w, E_Notify, ledTitles, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintTelephonyPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x08, w, E_Notify, telTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x32, w, E_Notify, telTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x4f, 0x54, w, E_Notify, telTitles2, 0x80)
 | 
						|
        else output_if_between(usage, 0x6f, 0x75, w, E_Notify, telTitles3, 0x80)
 | 
						|
        else output_if_between(usage, 0x8f, 0x9f, w, E_Notify, telTitles4, 0x80)
 | 
						|
        else output_if_between(usage, 0xaf, 0xc0, w, E_Notify, telTitles5, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintConsumerPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x07, w, E_Notify, consTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x23, w, E_Notify, consTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x2f, 0x37, w, E_Notify, consTitles2, 0x80)
 | 
						|
        else output_if_between(usage, 0x3f, 0x49, w, E_Notify, consTitles3, 0x80)
 | 
						|
        else output_if_between(usage, 0x5f, 0x67, w, E_Notify, consTitles4, 0x80)
 | 
						|
        else output_if_between(usage, 0x7f, 0xa5, w, E_Notify, consTitles5, 0x80)
 | 
						|
        else output_if_between(usage, 0xaf, 0xcf, w, E_Notify, consTitles6, 0x80)
 | 
						|
        else output_if_between(usage, 0xdf, 0xeb, w, E_Notify, consTitles7, 0x80)
 | 
						|
        else output_if_between(usage, 0xef, 0xf6, w, E_Notify, consTitles8, 0x80)
 | 
						|
        else output_if_between(usage, 0xff, 0x10e, w, E_Notify, consTitles9, 0x80)
 | 
						|
        else output_if_between(usage, 0x14f, 0x156, w, E_Notify, consTitlesA, 0x80)
 | 
						|
        else output_if_between(usage, 0x15f, 0x16b, w, E_Notify, consTitlesB, 0x80)
 | 
						|
        else output_if_between(usage, 0x16f, 0x175, w, E_Notify, consTitlesC, 0x80)
 | 
						|
        else output_if_between(usage, 0x17f, 0x1c8, w, E_Notify, consTitlesD, 0x80)
 | 
						|
        else output_if_between(usage, 0x1ff, 0x29d, w, E_Notify, consTitlesE, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintDigitizerPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x0e, w, E_Notify, digitTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x23, w, E_Notify, digitTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x2f, 0x47, w, E_Notify, digitTitles2, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintAlphanumDisplayPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        output_if_between(usage, 0x00, 0x03, w, E_Notify, aplphanumTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x1f, 0x4e, w, E_Notify, aplphanumTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x7f, 0x96, w, E_Notify, digitTitles2, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParserBase::PrintMedicalInstrumentPageUsage(uint16_t usage) {
 | 
						|
        const char * const * w;
 | 
						|
        E_Notify(pstrSpace, 0x80);
 | 
						|
 | 
						|
        if(usage == 1) E_Notify(pstrUsageMedicalUltrasound, 0x80);
 | 
						|
        else if(usage == 0x70)
 | 
						|
                E_Notify(pstrUsageDepthGainCompensation, 0x80);
 | 
						|
        else output_if_between(usage, 0x1f, 0x28, w, E_Notify, medInstrTitles0, 0x80)
 | 
						|
        else output_if_between(usage, 0x3f, 0x45, w, E_Notify, medInstrTitles1, 0x80)
 | 
						|
        else output_if_between(usage, 0x5f, 0x62, w, E_Notify, medInstrTitles2, 0x80)
 | 
						|
        else output_if_between(usage, 0x7f, 0x8a, w, E_Notify, medInstrTitles3, 0x80)
 | 
						|
        else output_if_between(usage, 0x9f, 0xa2, w, E_Notify, medInstrTitles4, 0x80)
 | 
						|
        else E_Notify(pstrUsagePageUndefined, 0x80);
 | 
						|
}
 | 
						|
 | 
						|
uint8_t ReportDescParser2::ParseItem(uint8_t **pp, uint16_t *pcntdn) {
 | 
						|
        //uint8_t ret = enErrorSuccess;
 | 
						|
 | 
						|
        switch(itemParseState) {
 | 
						|
                case 0:
 | 
						|
                        if(**pp == HID_LONG_ITEM_PREFIX)
 | 
						|
                                USBTRACE("\r\nLONG\r\n");
 | 
						|
                        else {
 | 
						|
                                uint8_t size = ((**pp) & DATA_SIZE_MASK);
 | 
						|
                                itemPrefix = (**pp);
 | 
						|
                                itemSize = 1 + ((size == DATA_SIZE_4) ? 4 : size);
 | 
						|
                        }
 | 
						|
                        (*pp)++;
 | 
						|
                        (*pcntdn)--;
 | 
						|
                        itemSize--;
 | 
						|
                        itemParseState = 1;
 | 
						|
 | 
						|
                        if(!itemSize)
 | 
						|
                                break;
 | 
						|
 | 
						|
                        if(!pcntdn)
 | 
						|
                                return enErrorIncomplete;
 | 
						|
                case 1:
 | 
						|
                        theBuffer.valueSize = itemSize;
 | 
						|
                        valParser.Initialize(&theBuffer);
 | 
						|
                        itemParseState = 2;
 | 
						|
                case 2:
 | 
						|
                        if(!valParser.Parse(pp, pcntdn))
 | 
						|
                                return enErrorIncomplete;
 | 
						|
                        itemParseState = 3;
 | 
						|
                case 3:
 | 
						|
                {
 | 
						|
                        uint8_t data = *((uint8_t*)varBuffer);
 | 
						|
 | 
						|
                        switch(itemPrefix & (TYPE_MASK | TAG_MASK)) {
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGE):
 | 
						|
                                        if(pfUsage) {
 | 
						|
                                                if(theBuffer.valueSize > 1) {
 | 
						|
                                                        uint16_t* ui16 = reinterpret_cast<uint16_t *>(varBuffer);
 | 
						|
                                                        pfUsage(*ui16);
 | 
						|
                                                } else
 | 
						|
                                                        pfUsage(data);
 | 
						|
                                        }
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTSIZE):
 | 
						|
                                        rptSize = data;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTCOUNT):
 | 
						|
                                        rptCount = data;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_REPORTID):
 | 
						|
                                        rptId = data;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):
 | 
						|
                                        useMin = data;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_LOCAL | TAG_LOCAL_USAGEMAX):
 | 
						|
                                        useMax = data;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_GLOBAL | TAG_GLOBAL_USAGEPAGE):
 | 
						|
                                        SetUsagePage(data);
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_OUTPUT):
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_FEATURE):
 | 
						|
                                        rptSize = 0;
 | 
						|
                                        rptCount = 0;
 | 
						|
                                        useMin = 0;
 | 
						|
                                        useMax = 0;
 | 
						|
                                        break;
 | 
						|
                                case (TYPE_MAIN | TAG_MAIN_INPUT):
 | 
						|
                                        OnInputItem(data);
 | 
						|
 | 
						|
                                        totalSize += (uint16_t)rptSize * (uint16_t)rptCount;
 | 
						|
 | 
						|
                                        rptSize = 0;
 | 
						|
                                        rptCount = 0;
 | 
						|
                                        useMin = 0;
 | 
						|
                                        useMax = 0;
 | 
						|
                                        break;
 | 
						|
                        } // switch (**pp & (TYPE_MASK | TAG_MASK))
 | 
						|
                }
 | 
						|
        } // switch (itemParseState)
 | 
						|
        itemParseState = 0;
 | 
						|
        return enErrorSuccess;
 | 
						|
}
 | 
						|
 | 
						|
void ReportDescParser2::OnInputItem(uint8_t itm) {
 | 
						|
        uint8_t byte_offset = (totalSize >> 3); // calculate offset to the next unhandled byte i = (int)(totalCount / 8);
 | 
						|
        uint32_t tmp = (byte_offset << 3);
 | 
						|
        uint8_t bit_offset = totalSize - tmp; // number of bits in the current byte already handled
 | 
						|
        uint8_t *p = pBuf + byte_offset; // current byte pointer
 | 
						|
 | 
						|
        if(bit_offset)
 | 
						|
                *p >>= bit_offset;
 | 
						|
 | 
						|
        uint8_t usage = useMin;
 | 
						|
 | 
						|
        bool print_usemin_usemax = ((useMin < useMax) && ((itm & 3) == 2) && pfUsage) ? true : false;
 | 
						|
 | 
						|
        uint8_t bits_of_byte = 8;
 | 
						|
 | 
						|
        // for each field in field array defined by rptCount
 | 
						|
        for(uint8_t field = 0; field < rptCount; field++, usage++) {
 | 
						|
 | 
						|
                union {
 | 
						|
                        uint8_t bResult[4];
 | 
						|
                        uint16_t wResult[2];
 | 
						|
                        uint32_t dwResult;
 | 
						|
                } result;
 | 
						|
 | 
						|
                result.dwResult = 0;
 | 
						|
                uint8_t mask = 0;
 | 
						|
 | 
						|
                if(print_usemin_usemax)
 | 
						|
                        pfUsage(usage);
 | 
						|
 | 
						|
                // bits_left            - number of bits in the field(array of fields, depending on Report Count) left to process
 | 
						|
                // bits_of_byte         - number of bits in current byte left to process
 | 
						|
                // bits_to_copy         - number of bits to copy to result buffer
 | 
						|
 | 
						|
                // for each bit in a field
 | 
						|
                for(uint8_t bits_left = rptSize, bits_to_copy = 0; bits_left;
 | 
						|
                        bits_left -= bits_to_copy) {
 | 
						|
                        bits_to_copy = (bits_left > bits_of_byte) ? bits_of_byte : bits_left;
 | 
						|
 | 
						|
                        result.dwResult <<= bits_to_copy; // Result buffer is shifted by the number of bits to be copied into it
 | 
						|
 | 
						|
                        uint8_t val = *p;
 | 
						|
 | 
						|
                        val >>= (8 - bits_of_byte); // Shift by the number of bits already processed
 | 
						|
 | 
						|
                        mask = 0;
 | 
						|
 | 
						|
                        for(uint8_t j = bits_to_copy; j; j--) {
 | 
						|
                                mask <<= 1;
 | 
						|
                                mask |= 1;
 | 
						|
                        }
 | 
						|
 | 
						|
                        result.bResult[0] = (result.bResult[0] | (val & mask));
 | 
						|
 | 
						|
                        bits_of_byte -= bits_to_copy;
 | 
						|
 | 
						|
                        if(bits_of_byte < 1) {
 | 
						|
                                bits_of_byte = 8;
 | 
						|
                                p++;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
                PrintByteValue(result.dwResult);
 | 
						|
        }
 | 
						|
        E_Notify(PSTR("\r\n"), 0x80);
 | 
						|
}
 | 
						|
 | 
						|
void UniversalReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
 | 
						|
        ReportDescParser2 prs(len, buf);
 | 
						|
 | 
						|
        uint8_t ret = hid->GetReportDescr(0, &prs);
 | 
						|
 | 
						|
        if(ret)
 | 
						|
                ErrorMessage<uint8_t > (PSTR("GetReportDescr-2"), ret);
 | 
						|
}
 |