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);
|
|
}
|