IOUSBHIDParser.h   [plain text]


/*
 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 *
 * The contents of this file constitute Original Code as defined in and
 * are subject to the Apple Public Source License Version 1.1 (the
 * "License").  You may not use this file except in compliance with the
 * License.  Please obtain a copy of the License at
 * http://www.apple.com/publicsource and read it before using this file.
 *
 * This Original Code and all software distributed under the License are
 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * @APPLE_LICENSE_HEADER_END@
 */

/*
     File:       IOUSSBHIDParser.h
 
     Contains:   Definition of the interfaces to the HIDLib shared library contained in
                OS 9's HID.h.
*/
#ifndef __IOUSBHIDPARSER__
#define __IOUSBHIDPARSER__

#ifndef __MACTYPES__
#include <MacTypes.h>
#endif

#ifndef __MACERRORS__
#include <MacErrors.h>
#endif


#ifdef __cplusplus
extern "C" {
#endif

/* types of HID reports (input, output, feature)*/
enum {
    kHIDInputReport             = 1,
    kHIDOutputReport            = 2,
    kHIDFeatureReport           = 3,
    kHIDUnknownReport           = 255
};

/* constants used in HIDButtonCapabilities and HIDValueCapabilities structures*/
enum {
                                          /* While HIDButtonCaps and HIDValueCaps have no version #, they can be*/
                                          /* thought of as version 1 of HIDButtonCapabilities and HIDValueCapabilities.*/
    kHIDCurrentCapabilitiesPBVersion = 2
};

/* flags passed to HIDOpenReportDescriptor*/
enum {
    kHIDFlag_StrictErrorChecking = 0x00000001
};

typedef UInt32                          HIDReportType;
typedef UInt32                          HIDUsage;
typedef struct OpaqueHIDPreparsedDataRef*  HIDPreparsedDataRef;

struct HIDUsageAndPage {
    HIDUsage                        usage;
    HIDUsage                        usagePage;
};
typedef struct HIDUsageAndPage          HIDUsageAndPage;
typedef HIDUsageAndPage *               HIDUsageAndPagePtr;

struct HIDCapabilities {
    HIDUsage                        usage;
    HIDUsage                        usagePage;
    ByteCount                       inputReportByteLength;
    ByteCount                       outputReportByteLength;
    ByteCount                       featureReportByteLength;
    UInt32                          numberCollectionNodes;
    UInt32                          numberInputButtonCaps;
    UInt32                          numberInputValueCaps;
    UInt32                          numberOutputButtonCaps;
    UInt32                          numberOutputValueCaps;
    UInt32                          numberFeatureButtonCaps;
    UInt32                          numberFeatureValueCaps;
};
typedef struct HIDCapabilities          HIDCapabilities;
typedef HIDCapabilities *               HIDCapabilitiesPtr;

struct HIDCollectionNode {
    HIDUsage                        collectionUsage;
    HIDUsage                        collectionUsagePage;
    UInt32                          parent;
    UInt32                          numberOfChildren;
    UInt32                          nextSibling;
    UInt32                          firstChild;
};
typedef struct HIDCollectionNode        HIDCollectionNode;
typedef HIDCollectionNode *             HIDCollectionNodePtr;

struct HIDButtonCapabilities {
    HIDUsage                        usagePage;
    UInt32                          reportID;
    UInt32                          bitField;
    UInt32                          collection;
    HIDUsage                        collectionUsage;
    HIDUsage                        collectionUsagePage;

    Boolean                         isRange;
    Boolean                         isStringRange;
    Boolean                         isDesignatorRange;
    Boolean                         isAbsolute;

    SInt32                          unitExponent;
    SInt32                          units;
    UInt32                          reserved;
    UInt32                          pbVersion;

    union {
        struct {
            HIDUsage                        usageMin;
            HIDUsage                        usageMax;
            UInt32                          stringMin;
            UInt32                          stringMax;
            UInt32                          designatorMin;
            UInt32                          designatorMax;
        }                                 range;
        struct {
            HIDUsage                        usage;
            HIDUsage                        reserved1;
            UInt32                          stringIndex;
            UInt32                          reserved2;
            UInt32                          designatorIndex;
            UInt32                          reserved3;
        }                                 notRange;
    }                                 u;
};
typedef struct HIDButtonCapabilities    HIDButtonCapabilities;
typedef HIDButtonCapabilities *         HIDButtonCapabilitiesPtr;

struct HIDValueCapabilities {
    HIDUsage                        usagePage;
    UInt32                          reportID;
    UInt32                          bitField;
    UInt32                          collection;
    HIDUsage                        collectionUsage;
    HIDUsage                        collectionUsagePage;

    Boolean                         isRange;
    Boolean                         isStringRange;
    Boolean                         isDesignatorRange;
    Boolean                         isAbsolute;

    UInt32                          bitSize;
    UInt32                          reportCount;

    SInt32                          logicalMin;
    SInt32                          logicalMax;
    SInt32                          physicalMin;
    SInt32                          physicalMax;

    SInt32                          unitExponent;
    SInt32                          units;
    UInt32                          reserved;
    UInt32                          pbVersion;

    union {
        struct {
            HIDUsage                        usageMin;
            HIDUsage                        usageMax;
            UInt32                          stringMin;
            UInt32                          stringMax;
            UInt32                          designatorMin;
            UInt32                          designatorMax;
        }                                 range;
        struct {
            HIDUsage                        usage;
            HIDUsage                        reserved1;
            UInt32                          stringIndex;
            UInt32                          reserved2;
            UInt32                          designatorIndex;
            UInt32                          reserved3;
        }                                 notRange;
    }                                 u;
};
typedef struct HIDValueCapabilities     HIDValueCapabilities;
typedef HIDValueCapabilities *          HIDValueCapabilitiesPtr;


EXTERN_API_C( OSStatus )
HIDOpenReportDescriptor         (void *                 hidReportDescriptor,
                                 ByteCount              descriptorLength,
                                 HIDPreparsedDataRef *  preparsedDataRef,
                                 UInt32                 flags);

EXTERN_API_C( OSStatus )
HIDCloseReportDescriptor        (HIDPreparsedDataRef    preparsedDataRef);


EXTERN_API_C( OSStatus )
HIDGetCapabilities              (HIDPreparsedDataRef    preparsedDataRef,
                                 HIDCapabilitiesPtr     capabilities);

EXTERN_API_C( OSStatus )
HIDGetCollectionNodes           (HIDCollectionNodePtr   collectionNodes,
                                 UInt32 *               collectionNodesSize,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetButtonCapabilities        (HIDReportType          reportType,
                                 HIDButtonCapabilitiesPtr  buttonCaps,
                                 UInt32 *               buttonCapsSize,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetValueCapabilities         (HIDReportType          reportType,
                                 HIDValueCapabilitiesPtr  valueCaps,
                                 UInt32 *               valueCapsSize,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetSpecificButtonCapabilities (HIDReportType         reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 HIDButtonCapabilitiesPtr  buttonCaps,
                                 UInt32 *               buttonCapsSize,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetSpecificValueCapabilities (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 HIDValueCapabilitiesPtr  valueCaps,
                                 UInt32 *               valueCapsSize,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetNextButtonInfo            (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 HIDUsage               usage,
                                 UInt32 *               collection,
                                 UInt8 *                reportID,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetNextUsageValueInfo        (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 HIDUsage               usage,
                                 UInt32 *               collection,
                                 UInt8 *                reportID,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( UInt32 )
HIDMaxUsageListLength           (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDGetReportLength              (HIDReportType          reportType,
                                 UInt8                  reportID,
                                 ByteCount *            reportLength,
                                 HIDPreparsedDataRef    preparsedDataRef);

EXTERN_API_C( OSStatus )
HIDInitReport                   (HIDReportType          reportType,
                                 UInt8                  reportID,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);


EXTERN_API_C( OSStatus )
HIDGetButtons                   (HIDReportType          reportType,
                                 UInt32                 collection,
                                 HIDUsageAndPagePtr     usageList,
                                 UInt32 *               usageListSize,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDGetButtonsOnPage             (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage *             usageList,
                                 UInt32 *               usageListSize,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDGetScaledUsageValue          (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 SInt32 *               usageValue,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDGetUsageValue                (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 SInt32 *               usageValue,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDGetUsageValueArray           (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 Byte *                 usageValueBuffer,
                                 ByteCount              usageValueBufferSize,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);


EXTERN_API_C( OSStatus )
HIDSetButton                    (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDSetButtons                   (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage *             usageList,
                                 UInt32 *               usageListSize,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDSetScaledUsageValue          (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 SInt32                 usageValue,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDSetUsageValue                (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 SInt32                 usageValue,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDSetUsageValueArray           (HIDReportType          reportType,
                                 HIDUsage               usagePage,
                                 UInt32                 collection,
                                 HIDUsage               usage,
                                 Byte *                 usageValueBuffer,
                                 ByteCount              usageValueBufferLength,
                                 HIDPreparsedDataRef    preparsedDataRef,
                                 void *                 report,
                                 ByteCount              reportLength);

EXTERN_API_C( OSStatus )
HIDUsageListDifference          (HIDUsage *             previousUsageList,
                                 HIDUsage *             currentUsageList,
                                 HIDUsage *             breakUsageList,
                                 HIDUsage *             makeUsageList,
                                 UInt32                 usageListsSize);


/* ****************************************************************************************** */
/* HID Usage Tables                                                                           */
/*                                                                                            */
/* The following constants are from the USB 'HID Usage Tables' specification, revision 1.1rc3 */
/* ****************************************************************************************** */

/* Usage Pages */
enum {
    kHIDPage_Undefined          = 0x00,
    kHIDPage_GenericDesktop     = 0x01,
    kHIDPage_Simulation         = 0x02,
    kHIDPage_VR                 = 0x03,
    kHIDPage_Sport              = 0x04,
    kHIDPage_Game               = 0x05,                         /* Reserved 0x06 */
    kHIDPage_KeyboardOrKeypad   = 0x07,                         /* USB Device Class Definition for Human Interface Devices (HID). Note: the usage type for all key codes is Selector (Sel). */
    kHIDPage_LEDs               = 0x08,
    kHIDPage_Button             = 0x09,
    kHIDPage_Ordinal            = 0x0A,
    kHIDPage_Telephony          = 0x0B,
    kHIDPage_Consumer           = 0x0C,
    kHIDPage_Digitizer          = 0x0D,                         /* Reserved 0x0E */
    kHIDPage_PID                = 0x0F,                         /* USB Physical Interface Device definitions for force feedback and related devices. */
    kHIDPage_Unicode            = 0x10,                         /* Reserved 0x11 - 0x13 */
    kHIDPage_AlphanumericDisplay = 0x14,                        /* Reserved 0x15 - 0x7F */
                                                                /* Monitor 0x80 - 0x83     USB Device Class Definition for Monitor Devices */
                                                                /* Power 0x84 - 0x87   USB Device Class Definition for Power Devices */
                                                                /* Reserved 0x88 - 0x8B */
    kHIDPage_BarCodeScanner     = 0x8C,                         /* (Point of Sale) USB Device Class Definition for Bar Code Scanner Devices */
    kHIDPage_Scale              = 0x8D,                         /* (Point of Sale) USB Device Class Definition for Scale Devices */
                                                                /* ReservedPointofSalepages 0x8E - 0x8F */
    kHIDPage_CameraControl      = 0x90,                         /* USB Device Class Definition for Image Class Devices */
    kHIDPage_Arcade             = 0x91,                         /* OAAF Definitions for arcade and coinop related Devices */
                                                                /* Reserved 0x92 - 0xFEFF */
                                                                /* VendorDefined 0xFF00 - 0xFFFF */
    kHIDPage_VendorDefinedStart = 0xFF00
};

/* Undefined Usage for all usage pages */
enum {
    kHIDUsage_Undefined         = 0x00
};

/* GenericDesktop Page (0x01) */
enum {
    kHIDUsage_GD_Pointer        = 0x01,                         /* Physical Collection */
    kHIDUsage_GD_Mouse          = 0x02,                         /* Application Collection */
                                                                /* 0x03 Reserved */
    kHIDUsage_GD_Joystick       = 0x04,                         /* Application Collection */
    kHIDUsage_GD_GamePad        = 0x05,                         /* Application Collection */
    kHIDUsage_GD_Keyboard       = 0x06,                         /* Application Collection */
    kHIDUsage_GD_Keypad         = 0x07,                         /* Application Collection */
    kHIDUsage_GD_MultiAxisController = 0x08,                    /* Application Collection */
                                                                /* 0x09 - 0x2F Reserved */
    kHIDUsage_GD_X              = 0x30,                         /* Dynamic Value */
    kHIDUsage_GD_Y              = 0x31,                         /* Dynamic Value */
    kHIDUsage_GD_Z              = 0x32,                         /* Dynamic Value */
    kHIDUsage_GD_Rx             = 0x33,                         /* Dynamic Value */
    kHIDUsage_GD_Ry             = 0x34,                         /* Dynamic Value */
    kHIDUsage_GD_Rz             = 0x35,                         /* Dynamic Value */
    kHIDUsage_GD_Slider         = 0x36,                         /* Dynamic Value */
    kHIDUsage_GD_Dial           = 0x37,                         /* Dynamic Value */
    kHIDUsage_GD_Wheel          = 0x38,                         /* Dynamic Value */
    kHIDUsage_GD_Hatswitch      = 0x39,                         /* Dynamic Value */
    kHIDUsage_GD_CountedBuffer  = 0x3A,                         /* Logical Collection */
    kHIDUsage_GD_ByteCount      = 0x3B,                         /* Dynamic Value */
    kHIDUsage_GD_MotionWakeup   = 0x3C,                         /* One-Shot Control */
    kHIDUsage_GD_Start          = 0x3D,                         /* On/Off Control */
    kHIDUsage_GD_Select         = 0x3E,                         /* On/Off Control */
                                                                /* 0x3F Reserved */
    kHIDUsage_GD_Vx             = 0x40,                         /* Dynamic Value */
    kHIDUsage_GD_Vy             = 0x41,                         /* Dynamic Value */
    kHIDUsage_GD_Vz             = 0x42,                         /* Dynamic Value */
    kHIDUsage_GD_Vbrx           = 0x43,                         /* Dynamic Value */
    kHIDUsage_GD_Vbry           = 0x44,                         /* Dynamic Value */
    kHIDUsage_GD_Vbrz           = 0x45,                         /* Dynamic Value */
    kHIDUsage_GD_Vno            = 0x46,                         /* Dynamic Value */
                                                                /* 0x47 - 0x7F Reserved */
    kHIDUsage_GD_SystemControl  = 0x80,                         /* Application Collection */
    kHIDUsage_GD_SystemPowerDown = 0x81,                        /* One-Shot Control */
    kHIDUsage_GD_SystemSleep    = 0x82,                         /* One-Shot Control */
    kHIDUsage_GD_SystemWakeUp   = 0x83,                         /* One-Shot Control */
    kHIDUsage_GD_SystemContextMenu = 0x84,                      /* One-Shot Control */
    kHIDUsage_GD_SystemMainMenu = 0x85,                         /* One-Shot Control */
    kHIDUsage_GD_SystemAppMenu  = 0x86,                         /* One-Shot Control */
    kHIDUsage_GD_SystemMenuHelp = 0x87,                         /* One-Shot Control */
    kHIDUsage_GD_SystemMenuExit = 0x88,                         /* One-Shot Control */
    kHIDUsage_GD_SystemMenu     = 0x89,                         /* Selector */
    kHIDUsage_GD_SystemMenuRight = 0x8A,                        /* Re-Trigger Control */
    kHIDUsage_GD_SystemMenuLeft = 0x8B,                         /* Re-Trigger Control */
    kHIDUsage_GD_SystemMenuUp   = 0x8C,                         /* Re-Trigger Control */
    kHIDUsage_GD_SystemMenuDown = 0x8D,                         /* Re-Trigger Control */
                                                                /* 0x8E - 0x8F Reserved */
    kHIDUsage_GD_DPadUp         = 0x90,                         /* On/Off Control */
    kHIDUsage_GD_DPadDown       = 0x91,                         /* On/Off Control */
    kHIDUsage_GD_DPadRight      = 0x92,                         /* On/Off Control */
    kHIDUsage_GD_DPadLeft       = 0x93,                         /* On/Off Control */
                                                                /* 0x94 - 0xFFFF Reserved */
    kHIDUsage_GD_Reserved       = 0xFFFF
};

/* Simulation Page (0x02) */
/* This section provides detailed descriptions of the usages employed by simulation devices. */
enum {
    kHIDUsage_Sim_FlightSimulationDevice = 0x01,                /* Application Collection */
    kHIDUsage_Sim_AutomobileSimulationDevice = 0x02,            /* Application Collection */
    kHIDUsage_Sim_TankSimulationDevice = 0x03,                  /* Application Collection */
    kHIDUsage_Sim_SpaceshipSimulationDevice = 0x04,             /* Application Collection */
    kHIDUsage_Sim_SubmarineSimulationDevice = 0x05,             /* Application Collection */
    kHIDUsage_Sim_SailingSimulationDevice = 0x06,               /* Application Collection */
    kHIDUsage_Sim_MotorcycleSimulationDevice = 0x07,            /* Application Collection */
    kHIDUsage_Sim_SportsSimulationDevice = 0x08,                /* Application Collection */
    kHIDUsage_Sim_AirplaneSimulationDevice = 0x09,              /* Application Collection */
    kHIDUsage_Sim_HelicopterSimulationDevice = 0x0A,            /* Application Collection */
    kHIDUsage_Sim_MagicCarpetSimulationDevice = 0x0B,           /* Application Collection */
    kHIDUsage_Sim_BicycleSimulationDevice = 0x0C,               /* Application Collection */
                                                                /* 0x0D - 0x1F Reserved */
    kHIDUsage_Sim_FlightControlStick = 0x20,                    /* Application Collection */
    kHIDUsage_Sim_FlightStick   = 0x21,                         /* Application Collection */
    kHIDUsage_Sim_CyclicControl = 0x22,                         /* Physical Collection */
    kHIDUsage_Sim_CyclicTrim    = 0x23,                         /* Physical Collection */
    kHIDUsage_Sim_FlightYoke    = 0x24,                         /* Application Collection */
    kHIDUsage_Sim_TrackControl  = 0x25,                         /* Physical Collection */
                                                                /* 0x26 - 0xAF Reserved */
    kHIDUsage_Sim_Aileron       = 0xB0,                         /* Dynamic Value */
    kHIDUsage_Sim_AileronTrim   = 0xB1,                         /* Dynamic Value */
    kHIDUsage_Sim_AntiTorqueControl = 0xB2,                     /* Dynamic Value */
    kHIDUsage_Sim_AutopilotEnable = 0xB3,                       /* On/Off Control */
    kHIDUsage_Sim_ChaffRelease  = 0xB4,                         /* One-Shot Control */
    kHIDUsage_Sim_CollectiveControl = 0xB5,                     /* Dynamic Value */
    kHIDUsage_Sim_DiveBrake     = 0xB6,                         /* Dynamic Value */
    kHIDUsage_Sim_ElectronicCountermeasures = 0xB7,             /* On/Off Control */
    kHIDUsage_Sim_Elevator      = 0xB8,                         /* Dynamic Value */
    kHIDUsage_Sim_ElevatorTrim  = 0xB9,                         /* Dynamic Value */
    kHIDUsage_Sim_Rudder        = 0xBA,                         /* Dynamic Value */
    kHIDUsage_Sim_Throttle      = 0xBB,                         /* Dynamic Value */
    kHIDUsage_Sim_FlightCommunications = 0xBC,                  /* On/Off Control */
    kHIDUsage_Sim_FlareRelease  = 0xBD,                         /* One-Shot Control */
    kHIDUsage_Sim_LandingGear   = 0xBE,                         /* On/Off Control */
    kHIDUsage_Sim_ToeBrake      = 0xBF,                         /* Dynamic Value */
    kHIDUsage_Sim_Trigger       = 0xC0,                         /* Momentary Control */
    kHIDUsage_Sim_WeaponsArm    = 0xC1,                         /* On/Off Control */
    kHIDUsage_Sim_Weapons       = 0xC2,                         /* Selector */
    kHIDUsage_Sim_WingFlaps     = 0xC3,                         /* Dynamic Value */
    kHIDUsage_Sim_Accelerator   = 0xC4,                         /* Dynamic Value */
    kHIDUsage_Sim_Brake         = 0xC5,                         /* Dynamic Value */
    kHIDUsage_Sim_Clutch        = 0xC6,                         /* Dynamic Value */
    kHIDUsage_Sim_Shifter       = 0xC7,                         /* Dynamic Value */
    kHIDUsage_Sim_Steering      = 0xC8,                         /* Dynamic Value */
    kHIDUsage_Sim_TurretDirection = 0xC9,                       /* Dynamic Value */
    kHIDUsage_Sim_BarrelElevation = 0xCA,                       /* Dynamic Value */
    kHIDUsage_Sim_DivePlane     = 0xCB,                         /* Dynamic Value */
    kHIDUsage_Sim_Ballast       = 0xCC,                         /* Dynamic Value */
    kHIDUsage_Sim_BicycleCrank  = 0xCD,                         /* Dynamic Value */
    kHIDUsage_Sim_HandleBars    = 0xCE,                         /* Dynamic Value */
    kHIDUsage_Sim_FrontBrake    = 0xCF,                         /* Dynamic Value */
    kHIDUsage_Sim_RearBrake     = 0xD0,                         /* Dynamic Value */
                                                                /* 0xD1 - 0xFFFF Reserved */
    kHIDUsage_Sim_Reserved      = 0xFFFF
};

/* VR Page (0x03) */
/* Virtual Reality controls depend on designators to identify the individual controls. Most of the following are */
/* usages are applied to the collections of entities that comprise the actual device. */
enum {
    kHIDUsage_VR_Belt           = 0x01,                         /* Application Collection */
    kHIDUsage_VR_BodySuit       = 0x02,                         /* Application Collection */
    kHIDUsage_VR_Flexor         = 0x03,                         /* Physical Collection */
    kHIDUsage_VR_Glove          = 0x04,                         /* Application Collection */
    kHIDUsage_VR_HeadTracker    = 0x05,                         /* Physical Collection */
    kHIDUsage_VR_HeadMountedDisplay = 0x06,                     /* Application Collection */
    kHIDUsage_VR_HandTracker    = 0x07,                         /* Application Collection */
    kHIDUsage_VR_Oculometer     = 0x08,                         /* Application Collection */
    kHIDUsage_VR_Vest           = 0x09,                         /* Application Collection */
    kHIDUsage_VR_AnimatronicDevice = 0x0A,                      /* Application Collection */
                                                                /* 0x0B - 0x1F Reserved */
    kHIDUsage_VR_StereoEnable   = 0x20,                         /* On/Off Control */
    kHIDUsage_VR_DisplayEnable  = 0x21,                         /* On/Off Control */
                                                                /* 0x22 - 0xFFFF Reserved */
    kHIDUsage_VR_Reserved       = 0xFFFF
};

/* Sport Page (0x04) */
enum {
    kHIDUsage_Sprt_BaseballBat  = 0x01,                         /* Application Collection */
    kHIDUsage_Sprt_GolfClub     = 0x02,                         /* Application Collection */
    kHIDUsage_Sprt_RowingMachine = 0x03,                        /* Application Collection */
    kHIDUsage_Sprt_Treadmill    = 0x04,                         /* Application Collection */
                                                                /* 0x05 - 0x2F Reserved */
    kHIDUsage_Sprt_Oar          = 0x30,                         /* Dynamic Value */
    kHIDUsage_Sprt_Slope        = 0x31,                         /* Dynamic Value */
    kHIDUsage_Sprt_Rate         = 0x32,                         /* Dynamic Value */
    kHIDUsage_Sprt_StickSpeed   = 0x33,                         /* Dynamic Value */
    kHIDUsage_Sprt_StickFaceAngle = 0x34,                       /* Dynamic Value */
    kHIDUsage_Sprt_StickHeelOrToe = 0x35,                       /* Dynamic Value */
    kHIDUsage_Sprt_StickFollowThrough = 0x36,                   /* Dynamic Value */
    kHIDUsage_Sprt_StickTempo   = 0x37,                         /* Dynamic Value */
    kHIDUsage_Sprt_StickType    = 0x38,                         /* Named Array */
    kHIDUsage_Sprt_StickHeight  = 0x39,                         /* Dynamic Value */
                                                                /* 0x3A - 0x4F Reserved */
    kHIDUsage_Sprt_Putter       = 0x50,                         /* Selector */
    kHIDUsage_Sprt_1Iron        = 0x51,                         /* Selector */
    kHIDUsage_Sprt_2Iron        = 0x52,                         /* Selector */
    kHIDUsage_Sprt_3Iron        = 0x53,                         /* Selector */
    kHIDUsage_Sprt_4Iron        = 0x54,                         /* Selector */
    kHIDUsage_Sprt_5Iron        = 0x55,                         /* Selector */
    kHIDUsage_Sprt_6Iron        = 0x56,                         /* Selector */
    kHIDUsage_Sprt_7Iron        = 0x57,                         /* Selector */
    kHIDUsage_Sprt_8Iron        = 0x58,                         /* Selector */
    kHIDUsage_Sprt_9Iron        = 0x59,                         /* Selector */
    kHIDUsage_Sprt_10Iron       = 0x5A,                         /* Selector */
    kHIDUsage_Sprt_11Iron       = 0x5B,                         /* Selector */
    kHIDUsage_Sprt_SandWedge    = 0x5C,                         /* Selector */
    kHIDUsage_Sprt_LoftWedge    = 0x5D,                         /* Selector */
    kHIDUsage_Sprt_PowerWedge   = 0x5E,                         /* Selector */
    kHIDUsage_Sprt_1Wood        = 0x5F,                         /* Selector */
    kHIDUsage_Sprt_3Wood        = 0x60,                         /* Selector */
    kHIDUsage_Sprt_5Wood        = 0x61,                         /* Selector */
    kHIDUsage_Sprt_7Wood        = 0x62,                         /* Selector */
    kHIDUsage_Sprt_9Wood        = 0x63,                         /* Selector */
                                                                /* 0x64 - 0xFFFF Reserved */
    kHIDUsage_Sprt_Reserved     = 0xFFFF
};

/* Game Page (0x05) */
enum {
    kHIDUsage_Game_3DGameController = 0x01,                     /* Application Collection */
    kHIDUsage_Game_PinballDevice = 0x02,                        /* Application Collection */
    kHIDUsage_Game_GunDevice    = 0x03,                         /* Application Collection */
                                                                /* 0x04 - 0x1F Reserved */
    kHIDUsage_Game_PointofView  = 0x20,                         /* Physical Collection */
    kHIDUsage_Game_TurnRightOrLeft = 0x21,                      /* Dynamic Value */
    kHIDUsage_Game_PitchUpOrDown = 0x22,                        /* Dynamic Value */
    kHIDUsage_Game_RollRightOrLeft = 0x23,                      /* Dynamic Value */
    kHIDUsage_Game_MoveRightOrLeft = 0x24,                      /* Dynamic Value */
    kHIDUsage_Game_MoveForwardOrBackward = 0x25,                /* Dynamic Value */
    kHIDUsage_Game_MoveUpOrDown = 0x26,                         /* Dynamic Value */
    kHIDUsage_Game_LeanRightOrLeft = 0x27,                      /* Dynamic Value */
    kHIDUsage_Game_LeanForwardOrBackward = 0x28,                /* Dynamic Value */
    kHIDUsage_Game_HeightOfPOV  = 0x29,                         /* Dynamic Value */
    kHIDUsage_Game_Flipper      = 0x2A,                         /* Momentary Control */
    kHIDUsage_Game_SecondaryFlipper = 0x2B,                     /* Momentary Control */
    kHIDUsage_Game_Bump         = 0x2C,                         /* Momentary Control */
    kHIDUsage_Game_NewGame      = 0x2D,                         /* One-Shot Control */
    kHIDUsage_Game_ShootBall    = 0x2E,                         /* One-Shot Control */
    kHIDUsage_Game_Player       = 0x2F,                         /* One-Shot Control */
    kHIDUsage_Game_GunBolt      = 0x30,                         /* On/Off Control */
    kHIDUsage_Game_GunClip      = 0x31,                         /* On/Off Control */
    kHIDUsage_Game_Gun          = 0x32,                         /* Selector */
    kHIDUsage_Game_GunSingleShot = 0x33,                        /* Selector */
    kHIDUsage_Game_GunBurst     = 0x34,                         /* Selector */
    kHIDUsage_Game_GunAutomatic = 0x35,                         /* Selector */
    kHIDUsage_Game_GunSafety    = 0x36,                         /* On/Off Control */
    kHIDUsage_Game_GamepadFireOrJump = 0x37,                    /* Logical Collection */
    kHIDUsage_Game_GamepadTrigger = 0x39,                       /* Logical Collection */
                                                                /* 0x3A - 0xFFFF Reserved */
    kHIDUsage_Game_Reserved     = 0xFFFF
};

/* KeyboardOrKeypad Page (0x07) */
/* This section is the Usage Page for key codes to be used in implementing a USB keyboard.  */
/* A Boot Keyboard (84-, 101- or 104-key) should at a minimum support all associated usage codes as */
/* indicated in the ÒBootÓ column below. */
/* The usage type of all key codes is Selectors (Sel), except for the modifier keys Keyboard Left Control (0x224) */
/* to Keyboard Right GUI (0x231) which are Dynamic Flags (DV). */
/* Note: A general note on Usages and languages: */
/* Due to the variation of keyboards from language to language, it is not feasible to specify exact key mappings */
/* for every language. Where this list is not specific for a key function in a language, the closest equivalent key */
/* position should be used, so that a keyboard may be modified for a different language by simply printing different */
/* keycaps. One example is the Y key on a North American keyboard. In Germany this is typically Z. Rather than changing */
/* the keyboard firmware to put the Z Usage into that place in the descriptor list, the vendor should use the Y Usage on */
/* both the North American and German keyboards. This continues to be the existing practice in the industry, in order to */
/* minimize the number of changes to the electronics to accommodate otherlanguages. */
enum {
    kHIDUsage_KeyboardErrorRollOver = 0x01,                     /* ErrorRollOver */
    kHIDUsage_KeyboardPOSTFail  = 0x02,                         /* POSTFail */
    kHIDUsage_KeyboardErrorUndefined = 0x03,                    /* ErrorUndefined */
    kHIDUsage_KeyboardA         = 0x04,                         /* a or A */
    kHIDUsage_KeyboardB         = 0x05,                         /* b or B */
    kHIDUsage_KeyboardC         = 0x06,                         /* c or C */
    kHIDUsage_KeyboardD         = 0x07,                         /* d or D */
    kHIDUsage_KeyboardE         = 0x08,                         /* e or E */
    kHIDUsage_KeyboardF         = 0x09,                         /* f or F */
    kHIDUsage_KeyboardG         = 0x0A,                         /* g or G */
    kHIDUsage_KeyboardH         = 0x0B,                         /* h or H */
    kHIDUsage_KeyboardI         = 0x0C,                         /* i or I */
    kHIDUsage_KeyboardJ         = 0x0D,                         /* j or J */
    kHIDUsage_KeyboardK         = 0x0E,                         /* k or K */
    kHIDUsage_KeyboardL         = 0x0F,                         /* l or L */
    kHIDUsage_KeyboardM         = 0x10,                         /* m or M */
    kHIDUsage_KeyboardN         = 0x11,                         /* n or N */
    kHIDUsage_KeyboardO         = 0x12,                         /* o or O */
    kHIDUsage_KeyboardP         = 0x13,                         /* p or P */
    kHIDUsage_KeyboardQ         = 0x14,                         /* q or Q */
    kHIDUsage_KeyboardR         = 0x15,                         /* r or R */
    kHIDUsage_KeyboardS         = 0x16,                         /* s or S */
    kHIDUsage_KeyboardT         = 0x17,                         /* t or T */
    kHIDUsage_KeyboardU         = 0x18,                         /* u or U */
    kHIDUsage_KeyboardV         = 0x19,                         /* v or V */
    kHIDUsage_KeyboardW         = 0x1A,                         /* w or W */
    kHIDUsage_KeyboardX         = 0x1B,                         /* x or X */
    kHIDUsage_KeyboardY         = 0x1C,                         /* y or Y */
    kHIDUsage_KeyboardZ         = 0x1D,                         /* z or Z */
    kHIDUsage_Keyboard1         = 0x1E,                         /* 1 or ! */
    kHIDUsage_Keyboard2         = 0x1F,                         /* 2 or @ */
    kHIDUsage_Keyboard3         = 0x20,                         /* 3 or # */
    kHIDUsage_Keyboard4         = 0x21,                         /* 4 or $ */
    kHIDUsage_Keyboard5         = 0x22,                         /* 5 or % */
    kHIDUsage_Keyboard6         = 0x23,                         /* 6 or ^ */
    kHIDUsage_Keyboard7         = 0x24,                         /* 7 or & */
    kHIDUsage_Keyboard8         = 0x25,                         /* 8 or * */
    kHIDUsage_Keyboard9         = 0x26,                         /* 9 or ( */
    kHIDUsage_Keyboard0         = 0x27,                         /* 0 or ) */
    kHIDUsage_KeyboardReturnOrEnter = 0x28,                     /* Return (Enter) */
    kHIDUsage_KeyboardEscape    = 0x29,                         /* Escape */
    kHIDUsage_KeyboardDeleteOrBackspace = 0x2A,                 /* Delete (Backspace) */
    kHIDUsage_KeyboardTab       = 0x2B,                         /* Tab */
    kHIDUsage_KeyboardSpacebar  = 0x2C,                         /* Spacebar */
    kHIDUsage_KeyboardHyphen    = 0x2D,                         /* - or _ */
    kHIDUsage_KeyboardEqualSign = 0x2E,                         /* = or + */
    kHIDUsage_KeyboardOpenBracket = 0x2F,                       /* [ or { */
    kHIDUsage_KeyboardCloseBracket = 0x30,                      /* ] or } */
    kHIDUsage_KeyboardBackslash = 0x31,                         /* \ or | */
    kHIDUsage_KeyboardNonUSPound = 0x32,                        /* Non-US # or _ */
    kHIDUsage_KeyboardSemicolon = 0x33,                         /* ; or : */
    kHIDUsage_KeyboardQuote     = 0x34,                         /* ' or " */
    kHIDUsage_KeyboardGraveAccentAndTilde = 0x35,               /* Grave Accent and Tilde */
    kHIDUsage_KeyboardComma     = 0x36,                         /* , or < */
    kHIDUsage_KeyboardPeriod    = 0x37,                         /* . or > */
    kHIDUsage_KeyboardSlash     = 0x38,                         /* / or ? */
    kHIDUsage_KeyboardCapsLock  = 0x39,                         /* Caps Lock */
    kHIDUsage_KeyboardF1        = 0x3A,                         /* F1 */
    kHIDUsage_KeyboardF2        = 0x3B,                         /* F2 */
    kHIDUsage_KeyboardF3        = 0x3C,                         /* F3 */
    kHIDUsage_KeyboardF4        = 0x3D,                         /* F4 */
    kHIDUsage_KeyboardF5        = 0x3E,                         /* F5 */
    kHIDUsage_KeyboardF6        = 0x3F,                         /* F6 */
    kHIDUsage_KeyboardF7        = 0x40,                         /* F7 */
    kHIDUsage_KeyboardF8        = 0x41,                         /* F8 */
    kHIDUsage_KeyboardF9        = 0x42,                         /* F9 */
    kHIDUsage_KeyboardF10       = 0x43,                         /* F10 */
    kHIDUsage_KeyboardF11       = 0x44,                         /* F11 */
    kHIDUsage_KeyboardF12       = 0x45,                         /* F12 */
    kHIDUsage_KeyboardPrintScreen = 0x46,                       /* Print Screen */
    kHIDUsage_KeyboardScrollLock = 0x47,                        /* Scroll Lock */
    kHIDUsage_KeyboardPause     = 0x48,                         /* Pause */
    kHIDUsage_KeyboardInsert    = 0x49,                         /* Insert */
    kHIDUsage_KeyboardHome      = 0x4A,                         /* Home */
    kHIDUsage_KeyboardPageUp    = 0x4B,                         /* Page Up */
    kHIDUsage_KeyboardDeleteForward = 0x4C,                     /* Delete Forward */
    kHIDUsage_KeyboardEnd       = 0x4D,                         /* End */
    kHIDUsage_KeyboardPageDown  = 0x4E,                         /* Page Down */
    kHIDUsage_KeyboardRightArrow = 0x4F,                        /* Right Arrow */
    kHIDUsage_KeyboardLeftArrow = 0x50,                         /* Left Arrow */
    kHIDUsage_KeyboardDownArrow = 0x51,                         /* Down Arrow */
    kHIDUsage_KeyboardUpArrow   = 0x52,                         /* Up Arrow */
    kHIDUsage_KeypadNumLock     = 0x53,                         /* Keypad NumLock or Clear */
    kHIDUsage_KeypadSlash       = 0x54,                         /* Keypad / */
    kHIDUsage_KeypadAsterisk    = 0x55,                         /* Keypad * */
    kHIDUsage_KeypadHyphen      = 0x56,                         /* Keypad - */
    kHIDUsage_KeypadPlus        = 0x57,                         /* Keypad + */
    kHIDUsage_KeypadEnter       = 0x58,                         /* Keypad Enter */
    kHIDUsage_Keypad1           = 0x59,                         /* Keypad 1 or End */
    kHIDUsage_Keypad2           = 0x5A,                         /* Keypad 2 or Down Arrow */
    kHIDUsage_Keypad3           = 0x5B,                         /* Keypad 3 or Page Down */
    kHIDUsage_Keypad4           = 0x5C,                         /* Keypad 4 or Left Arrow */
    kHIDUsage_Keypad5           = 0x5D,                         /* Keypad 5 */
    kHIDUsage_Keypad6           = 0x5E,                         /* Keypad 6 or Right Arrow */
    kHIDUsage_Keypad7           = 0x5F,                         /* Keypad 7 or Home */
    kHIDUsage_Keypad8           = 0x60,                         /* Keypad 8 or Up Arrow */
    kHIDUsage_Keypad9           = 0x61,                         /* Keypad 9 or Page Up */
    kHIDUsage_Keypad0           = 0x62,                         /* Keypad 0 or Insert */
    kHIDUsage_KeypadPeriod      = 0x63,                         /* Keypad . or Delete */
    kHIDUsage_KeyboardNonUSBackslash = 0x64,                    /* Non-US \ or | */
    kHIDUsage_KeyboardApplication = 0x65,                       /* Application */
    kHIDUsage_KeyboardPower     = 0x66,                         /* Power */
    kHIDUsage_KeypadEqualSign   = 0x67,                         /* Keypad = */
    kHIDUsage_KeyboardF13       = 0x68,                         /* F13 */
    kHIDUsage_KeyboardF14       = 0x69,                         /* F14 */
    kHIDUsage_KeyboardF15       = 0x6A,                         /* F15 */
    kHIDUsage_KeyboardF16       = 0x6B,                         /* F16 */
    kHIDUsage_KeyboardF17       = 0x6C,                         /* F17 */
    kHIDUsage_KeyboardF18       = 0x6D,                         /* F18 */
    kHIDUsage_KeyboardF19       = 0x6E,                         /* F19 */
    kHIDUsage_KeyboardF20       = 0x6F,                         /* F20 */
    kHIDUsage_KeyboardF21       = 0x70,                         /* F21 */
    kHIDUsage_KeyboardF22       = 0x71,                         /* F22 */
    kHIDUsage_KeyboardF23       = 0x72,                         /* F23 */
    kHIDUsage_KeyboardF24       = 0x73,                         /* F24 */
    kHIDUsage_KeyboardExecute   = 0x74,                         /* Execute */
    kHIDUsage_KeyboardHelp      = 0x75,                         /* Help */
    kHIDUsage_KeyboardMenu      = 0x76,                         /* Menu */
    kHIDUsage_KeyboardSelect    = 0x77,                         /* Select */
    kHIDUsage_KeyboardStop      = 0x78,                         /* Stop */
    kHIDUsage_KeyboardAgain     = 0x79,                         /* Again */
    kHIDUsage_KeyboardUndo      = 0x7A,                         /* Undo */
    kHIDUsage_KeyboardCut       = 0x7B,                         /* Cut */
    kHIDUsage_KeyboardCopy      = 0x7C,                         /* Copy */
    kHIDUsage_KeyboardPaste     = 0x7D,                         /* Paste */
    kHIDUsage_KeyboardFind      = 0x7E,                         /* Find */
    kHIDUsage_KeyboardMute      = 0x7F,                         /* Mute */
    kHIDUsage_KeyboardVolumeUp  = 0x80,                         /* Volume Up */
    kHIDUsage_KeyboardVolumeDown = 0x81,                        /* Volume Down */
    kHIDUsage_KeyboardLockingCapsLock = 0x82,                   /* Locking Caps Lock */
    kHIDUsage_KeyboardLockingNumLock = 0x83,                    /* Locking Num Lock */
    kHIDUsage_KeyboardLockingScrollLock = 0x84,                 /* Locking Scroll Lock */
    kHIDUsage_KeypadComma       = 0x85,                         /* Keypad Comma */
    kHIDUsage_KeypadEqualSignAS400 = 0x86,                      /* Keypad Equal Sign for AS/400 */
    kHIDUsage_KeyboardInternational1 = 0x87,                    /* International1 */
    kHIDUsage_KeyboardInternational2 = 0x88,                    /* International2 */
    kHIDUsage_KeyboardInternational3 = 0x89,                    /* International3 */
    kHIDUsage_KeyboardInternational4 = 0x8A,                    /* International4 */
    kHIDUsage_KeyboardInternational5 = 0x8B,                    /* International5 */
    kHIDUsage_KeyboardInternational6 = 0x8C,                    /* International6 */
    kHIDUsage_KeyboardInternational7 = 0x8D,                    /* International7 */
    kHIDUsage_KeyboardInternational8 = 0x8E,                    /* International8 */
    kHIDUsage_KeyboardInternational9 = 0x8F,                    /* International9 */
    kHIDUsage_KeyboardLANG1     = 0x90,                         /* LANG1 */
    kHIDUsage_KeyboardLANG2     = 0x91,                         /* LANG2 */
    kHIDUsage_KeyboardLANG3     = 0x92,                         /* LANG3 */
    kHIDUsage_KeyboardLANG4     = 0x93,                         /* LANG4 */
    kHIDUsage_KeyboardLANG5     = 0x94,                         /* LANG5 */
    kHIDUsage_KeyboardLANG6     = 0x95,                         /* LANG6 */
    kHIDUsage_KeyboardLANG7     = 0x96,                         /* LANG7 */
    kHIDUsage_KeyboardLANG8     = 0x97,                         /* LANG8 */
    kHIDUsage_KeyboardLANG9     = 0x98,                         /* LANG9 */
    kHIDUsage_KeyboardAlternateErase = 0x99,                    /* AlternateErase */
    kHIDUsage_KeyboardSysReqOrAttention = 0x9A,                 /* SysReq/Attention */
    kHIDUsage_KeyboardCancel    = 0x9B,                         /* Cancel */
    kHIDUsage_KeyboardClear     = 0x9C,                         /* Clear */
    kHIDUsage_KeyboardPrior     = 0x9D,                         /* Prior */
    kHIDUsage_KeyboardReturn    = 0x9E,                         /* Return */
    kHIDUsage_KeyboardSeparator = 0x9F,                         /* Separator */
    kHIDUsage_KeyboardOut       = 0xA0,                         /* Out */
    kHIDUsage_KeyboardOper      = 0xA1,                         /* Oper */
    kHIDUsage_KeyboardClearOrAgain = 0xA2,                      /* Clear/Again */
    kHIDUsage_KeyboardCrSelOrProps = 0xA3,                      /* CrSel/Props */
    kHIDUsage_KeyboardExSel     = 0xA4,                         /* ExSel */
                                                                /* 0xA5-0xDF Reserved */
    kHIDUsage_KeyboardLeftControl = 0xE0,                       /* Left Control */
    kHIDUsage_KeyboardLeftShift = 0xE1,                         /* Left Shift */
    kHIDUsage_KeyboardLeftAlt   = 0xE2,                         /* Left Alt */
    kHIDUsage_KeyboardLeftGUI   = 0xE3,                         /* Left GUI */
    kHIDUsage_KeyboardRightControl = 0xE4,                      /* Right Control */
    kHIDUsage_KeyboardRightShift = 0xE5,                        /* Right Shift */
    kHIDUsage_KeyboardRightAlt  = 0xE6,                         /* Right Alt */
    kHIDUsage_KeyboardRightGUI  = 0xE7,                         /* Right GUI */
                                                                /* 0xE8-0xFFFF Reserved */
    kHIDUsage_Keyboard_Reserved = 0xFFFF
};

/* LEDs Page (0x08) */
/* An LED or indicator is implemented as an On/Off Control (OOF) using the ÒSingle button toggleÓ mode, 
|* where a value of 1 will turn on the indicator, and a value of 0 will turn it off. The exceptions are described below. */
enum {
    kHIDUsage_LED_NumLock       = 0x01,                         /* On/Off Control */
    kHIDUsage_LED_CapsLock      = 0x02,                         /* On/Off Control */
    kHIDUsage_LED_ScrollLock    = 0x03,                         /* On/Off Control */
    kHIDUsage_LED_Compose       = 0x04,                         /* On/Off Control */
    kHIDUsage_LED_Kana          = 0x05,                         /* On/Off Control */
    kHIDUsage_LED_Power         = 0x06,                         /* On/Off Control */
    kHIDUsage_LED_Shift         = 0x07,                         /* On/Off Control */
    kHIDUsage_LED_DoNotDisturb  = 0x08,                         /* On/Off Control */
    kHIDUsage_LED_Mute          = 0x09,                         /* On/Off Control */
    kHIDUsage_LED_ToneEnable    = 0x0A,                         /* On/Off Control */
    kHIDUsage_LED_HighCutFilter = 0x0B,                         /* On/Off Control */
    kHIDUsage_LED_LowCutFilter  = 0x0C,                         /* On/Off Control */
    kHIDUsage_LED_EqualizerEnable = 0x0D,                       /* On/Off Control */
    kHIDUsage_LED_SoundFieldOn  = 0x0E,                         /* On/Off Control */
    kHIDUsage_LED_SurroundOn    = 0x0F,                         /* On/Off Control */
    kHIDUsage_LED_Repeat        = 0x10,                         /* On/Off Control */
    kHIDUsage_LED_Stereo        = 0x11,                         /* On/Off Control */
    kHIDUsage_LED_SamplingRateDetect = 0x12,                    /* On/Off Control */
    kHIDUsage_LED_Spinning      = 0x13,                         /* On/Off Control */
    kHIDUsage_LED_CAV           = 0x14,                         /* On/Off Control */
    kHIDUsage_LED_CLV           = 0x15,                         /* On/Off Control */
    kHIDUsage_LED_RecordingFormatDetect = 0x16,                 /* On/Off Control */
    kHIDUsage_LED_OffHook       = 0x17,                         /* On/Off Control */
    kHIDUsage_LED_Ring          = 0x18,                         /* On/Off Control */
    kHIDUsage_LED_MessageWaiting = 0x19,                        /* On/Off Control */
    kHIDUsage_LED_DataMode      = 0x1A,                         /* On/Off Control */
    kHIDUsage_LED_BatteryOperation = 0x1B,                      /* On/Off Control */
    kHIDUsage_LED_BatteryOK     = 0x1C,                         /* On/Off Control */
    kHIDUsage_LED_BatteryLow    = 0x1D,                         /* On/Off Control */
    kHIDUsage_LED_Speaker       = 0x1E,                         /* On/Off Control */
    kHIDUsage_LED_HeadSet       = 0x1F,                         /* On/Off Control */
    kHIDUsage_LED_Hold          = 0x20,                         /* On/Off Control */
    kHIDUsage_LED_Microphone    = 0x21,                         /* On/Off Control */
    kHIDUsage_LED_Coverage      = 0x22,                         /* On/Off Control */
    kHIDUsage_LED_NightMode     = 0x23,                         /* On/Off Control */
    kHIDUsage_LED_SendCalls     = 0x24,                         /* On/Off Control */
    kHIDUsage_LED_CallPickup    = 0x25,                         /* On/Off Control */
    kHIDUsage_LED_Conference    = 0x26,                         /* On/Off Control */
    kHIDUsage_LED_StandBy       = 0x27,                         /* On/Off Control */
    kHIDUsage_LED_CameraOn      = 0x28,                         /* On/Off Control */
    kHIDUsage_LED_CameraOff     = 0x29,                         /* On/Off Control */
    kHIDUsage_LED_OnLine        = 0x2A,                         /* On/Off Control */
    kHIDUsage_LED_OffLine       = 0x2B,                         /* On/Off Control */
    kHIDUsage_LED_Busy          = 0x2C,                         /* On/Off Control */
    kHIDUsage_LED_Ready         = 0x2D,                         /* On/Off Control */
    kHIDUsage_LED_PaperOut      = 0x2E,                         /* On/Off Control */
    kHIDUsage_LED_PaperJam      = 0x2F,                         /* On/Off Control */
    kHIDUsage_LED_Remote        = 0x30,                         /* On/Off Control */
    kHIDUsage_LED_Forward       = 0x31,                         /* On/Off Control */
    kHIDUsage_LED_Reverse       = 0x32,                         /* On/Off Control */
    kHIDUsage_LED_Stop          = 0x33,                         /* On/Off Control */
    kHIDUsage_LED_Rewind        = 0x34,                         /* On/Off Control */
    kHIDUsage_LED_FastForward   = 0x35,                         /* On/Off Control */
    kHIDUsage_LED_Play          = 0x36,                         /* On/Off Control */
    kHIDUsage_LED_Pause         = 0x37,                         /* On/Off Control */
    kHIDUsage_LED_Record        = 0x38,                         /* On/Off Control */
    kHIDUsage_LED_Error         = 0x39,                         /* On/Off Control */
    kHIDUsage_LED_Usage         = 0x3A,                         /* Selector */
    kHIDUsage_LED_UsageInUseIndicator = 0x3B,                   /* Usage Switch */
    kHIDUsage_LED_UsageMultiModeIndicator = 0x3C,               /* Usage Modifier */
    kHIDUsage_LED_IndicatorOn   = 0x3D,                         /* Selector */
    kHIDUsage_LED_IndicatorFlash = 0x3E,                        /* Selector */
    kHIDUsage_LED_IndicatorSlowBlink = 0x3F,                    /* Selector */
    kHIDUsage_LED_IndicatorFastBlink = 0x40,                    /* Selector */
    kHIDUsage_LED_IndicatorOff  = 0x41,                         /* Selector */
    kHIDUsage_LED_FlashOnTime   = 0x42,                         /* Dynamic Value */
    kHIDUsage_LED_SlowBlinkOnTime = 0x43,                       /* Dynamic Value */
    kHIDUsage_LED_SlowBlinkOffTime = 0x44,                      /* Dynamic Value */
    kHIDUsage_LED_FastBlinkOnTime = 0x45,                       /* Dynamic Value */
    kHIDUsage_LED_FastBlinkOffTime = 0x46,                      /* Dynamic Value */
    kHIDUsage_LED_UsageIndicatorColor = 0x47,                   /* Usage Modifier */
    kHIDUsage_LED_IndicatorRed  = 0x48,                         /* Selector */
    kHIDUsage_LED_IndicatorGreen = 0x49,                        /* Selector */
    kHIDUsage_LED_IndicatorAmber = 0x4A,                        /* Selector */
    kHIDUsage_LED_GenericIndicator = 0x4B,                      /* On/Off Control */
    kHIDUsage_LED_SystemSuspend = 0x4C,                         /* On/Off Control */
    kHIDUsage_LED_ExternalPowerConnected = 0x4D,                /* On/Off Control */
                                                                /* 0x4E - 0xFFFF Reserved */
    kHIDUsage_LED_Reserved      = 0xFFFF
};

/* Button Page (0x09) */
/* The Button page is the first place an application should look for user selection controls. System graphical user */
/* interfaces typically employ a pointer and a set of hierarchical selectors to select, move and otherwise manipulate */
/* their environment. For these purposes the following assignment of significance can be applied to the Button usages: */
/* ¥ Button 1, Primary Button. Used for object selecting, dragging, and double click activation. On MacOS, this is the 
|*   only button. Microsoft operating systems call this a logical left button, because it */
/*   is not necessarily physically located on the left of the pointing device. */
/* ¥ Button 2, Secondary Button. Used by newer graphical user interfaces to browse object properties. Exposed by systems */
/*   to applications that typically assign application-specific functionality. */
/* ¥ Button 3, Tertiary Button. Optional control. Exposed to applications, but seldom assigned functionality due to prevalence */
/*   of two- and one-button devices. */
/* ¥ Buttons 4 -55. As the button number increases, its significance as a selector decreases. */
/* In many ways the assignment of button numbers is similar to the assignment of Effort in Physical descriptors. */
/* Button 1 would be used to define the button a finger rests on when the hand is in the Òat restÓ position, that is, virtually */
/* no effort is required by the user to activate the button. Button values increment as the finger has to stretch to reach a */
/* control. See Section 6.2.3, ÒPhysical Descriptors,Ó in the HID Specification for methods of further qualifying buttons. */
enum {
    kHIDUsage_Button_1          = 0x01,                         /* (primary/trigger) */
    kHIDUsage_Button_2          = 0x02,                         /* (secondary) */
    kHIDUsage_Button_3          = 0x03,                         /* (tertiary) */
    kHIDUsage_Button_4          = 0x04,                         /* 4th button */
                                                                /* ... */
    kHIDUsage_Button_65535      = 0xFFFF
};

/* Ordinal Page (0x0A) */
/* The Ordinal page allows multiple instances of a control or sets of controls to be declared without requiring individual */
/* enumeration in the native usage page. For example, it is not necessary to declare usages of Pointer 1, Pointer 2, and so */
/* forth on the Generic Desktop page. When parsed, the ordinal instance number is, in essence, concatenated to the usages */
/* attached to the encompassing collection to create Pointer 1, Pointer 2, and so forth. */
/* For an example, see Section A.5, ÒMultiple Instances of a Control,Ó in Appendix A, ÒUsage Examples.Ó By convention, */
/* an Ordinal collection is placed inside the collection for which it is declaring multiple instances. */
/* Instances do not have to be identical. */
enum {
                                                                /* 0x00 Reserved */
    kHIDUsage_Ord_Instance1     = 0x01,                         /* Usage Modifier */
    kHIDUsage_Ord_Instance2     = 0x02,                         /* Usage Modifier */
    kHIDUsage_Ord_Instance3     = 0x03,                         /* Usage Modifier */
    kHIDUsage_Ord_Instance4     = 0x04,                         /* Usage Modifier */
    kHIDUsage_Ord_Instance65535 = 0xFFFF                        /* Usage Modifier */
};

/* Telephony Page (0x0B) */
/* This usage page defines the keytop and control usages for telephony devices. */
/* Indicators on a phone are handled by wrapping them in LED: Usage In Use Indicator and LED: Usage Selected Indicator */
/* usages. For example, a message-indicator LED would be identified by a Telephony: Message usage declared as a Feature */
/* or Output in a LED: Usage In Use Indicator collection. */
/* See Section 14, ÒConsumer Page (0x0C),Ó for audio volume and tone controls. */
enum {
    kHIDUsage_Tfon_Phone        = 0x01,                         /* Application Collection */
    kHIDUsage_Tfon_AnsweringMachine = 0x02,                     /* Application Collection */
    kHIDUsage_Tfon_MessageControls = 0x03,                      /* Logical Collection */
    kHIDUsage_Tfon_Handset      = 0x04,                         /* Logical Collection */
    kHIDUsage_Tfon_Headset      = 0x05,                         /* Logical Collection */
    kHIDUsage_Tfon_TelephonyKeyPad = 0x06,                      /* Named Array */
    kHIDUsage_Tfon_ProgrammableButton = 0x07,                   /* Named Array */
                                                                /* 0x08 - 0x1F Reserved */
    kHIDUsage_Tfon_HookSwitch   = 0x20,                         /* On/Off Control */
    kHIDUsage_Tfon_Flash        = 0x21,                         /* Momentary Control */
    kHIDUsage_Tfon_Feature      = 0x22,                         /* One-Shot Control */
    kHIDUsage_Tfon_Hold         = 0x23,                         /* On/Off Control */
    kHIDUsage_Tfon_Redial       = 0x24,                         /* One-Shot Control */
    kHIDUsage_Tfon_Transfer     = 0x25,                         /* One-Shot Control */
    kHIDUsage_Tfon_Drop         = 0x26,                         /* One-Shot Control */
    kHIDUsage_Tfon_Park         = 0x27,                         /* On/Off Control */
    kHIDUsage_Tfon_ForwardCalls = 0x28,                         /* On/Off Control */
    kHIDUsage_Tfon_AlternateFunction = 0x29,                    /* Momentary Control */
    kHIDUsage_Tfon_Line         = 0x2A,                         /* One-Shot Control */
    kHIDUsage_Tfon_SpeakerPhone = 0x2B,                         /* On/Off Control */
    kHIDUsage_Tfon_Conference   = 0x2C,                         /* On/Off Control */
    kHIDUsage_Tfon_RingEnable   = 0x2D,                         /* On/Off Control */
    kHIDUsage_Tfon_Ring         = 0x2E,                         /* Selector */
    kHIDUsage_Tfon_PhoneMute    = 0x2F,                         /* On/Off Control */
    kHIDUsage_Tfon_CallerID     = 0x30,                         /* Momentary Control */
                                                                /* 0x31 - 0x4F Reserved */
    kHIDUsage_Tfon_SpeedDial    = 0x50,                         /* One-Shot Control */
    kHIDUsage_Tfon_StoreNumber  = 0x51,                         /* One-Shot Control */
    kHIDUsage_Tfon_RecallNumber = 0x52,                         /* One-Shot Control */
    kHIDUsage_Tfon_PhoneDirectory = 0x53,                       /* On/Off Control */
                                                                /* 0x54 - 0x6F Reserved */
    kHIDUsage_Tfon_VoiceMail    = 0x70,                         /* On/Off Control */
    kHIDUsage_Tfon_ScreenCalls  = 0x71,                         /* On/Off Control */
    kHIDUsage_Tfon_DoNotDisturb = 0x72,                         /* On/Off Control */
    kHIDUsage_Tfon_Message      = 0x73,                         /* One-Shot Control */
    kHIDUsage_Tfon_AnswerOnOrOff = 0x74,                        /* On/Off Control */
                                                                /* 0x75 - 0x8F Reserved */
    kHIDUsage_Tfon_InsideDialTone = 0x90,                       /* Momentary Control */
    kHIDUsage_Tfon_OutsideDialTone = 0x91,                      /* Momentary Control */
    kHIDUsage_Tfon_InsideRingTone = 0x92,                       /* Momentary Control */
    kHIDUsage_Tfon_OutsideRingTone = 0x93,                      /* Momentary Control */
    kHIDUsage_Tfon_PriorityRingTone = 0x94,                     /* Momentary Control */
    kHIDUsage_Tfon_InsideRingback = 0x95,                       /* Momentary Control */
    kHIDUsage_Tfon_PriorityRingback = 0x96,                     /* Momentary Control */
    kHIDUsage_Tfon_LineBusyTone = 0x97,                         /* Momentary Control */
    kHIDUsage_Tfon_ReorderTone  = 0x98,                         /* Momentary Control */
    kHIDUsage_Tfon_CallWaitingTone = 0x99,                      /* Momentary Control */
    kHIDUsage_Tfon_ConfirmationTone1 = 0x9A,                    /* Momentary Control */
    kHIDUsage_Tfon_ConfirmationTone2 = 0x9B,                    /* Momentary Control */
    kHIDUsage_Tfon_TonesOff     = 0x9C,                         /* On/Off Control */
    kHIDUsage_Tfon_OutsideRingback = 0x9D,                      /* Momentary Control */
                                                                /* 0x9E - 0xAF Reserved */
    kHIDUsage_Tfon_PhoneKey0    = 0xB0,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey1    = 0xB1,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey2    = 0xB2,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey3    = 0xB3,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey4    = 0xB4,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey5    = 0xB5,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey6    = 0xB6,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey7    = 0xB7,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey8    = 0xB8,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKey9    = 0xB9,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyStar = 0xBA,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyPound = 0xBB,                        /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyA    = 0xBC,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyB    = 0xBD,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyC    = 0xBE,                         /* Selector/One-Shot Control */
    kHIDUsage_Tfon_PhoneKeyD    = 0xBF,                         /* Selector/One-Shot Control */
                                                                /* 0xC0 - 0xFFFF Reserved */
    kHIDUsage_TFon_Reserved     = 0xFFFF
};

/* Consumer Page (0x0C) */
/* All controls on the Consumer page are application-specific. That is, they affect a specific device, not the system as a whole. */
enum {
    kHIDUsage_Csmr_ConsumerControl = 0x01,                      /* Application Collection */
    kHIDUsage_Csmr_NumericKeyPad = 0x02,                        /* Named Array */
    kHIDUsage_Csmr_ProgrammableButtons = 0x03,                  /* Named Array */
                                                                /* 0x03 - 0x1F Reserved */
    kHIDUsage_Csmr_Plus10       = 0x20,                         /* One-Shot Control */
    kHIDUsage_Csmr_Plus100      = 0x21,                         /* One-Shot Control */
    kHIDUsage_Csmr_AMOrPM       = 0x22,                         /* One-Shot Control */
                                                                /* 0x23 - 0x3F Reserved */
    kHIDUsage_Csmr_Power        = 0x30,                         /* On/Off Control */
    kHIDUsage_Csmr_Reset        = 0x31,                         /* One-Shot Control */
    kHIDUsage_Csmr_Sleep        = 0x32,                         /* One-Shot Control */
    kHIDUsage_Csmr_SleepAfter   = 0x33,                         /* One-Shot Control */
    kHIDUsage_Csmr_SleepMode    = 0x34,                         /* Re-Trigger Control */
    kHIDUsage_Csmr_Illumination = 0x35,                         /* On/Off Control */
    kHIDUsage_Csmr_FunctionButtons = 0x36,                      /* Named Array */
                                                                /* 0x37 - 0x3F Reserved */
    kHIDUsage_Csmr_Menu         = 0x40,                         /* On/Off Control */
    kHIDUsage_Csmr_MenuPick     = 0x41,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuUp       = 0x42,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuDown     = 0x43,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuLeft     = 0x44,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuRight    = 0x45,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuEscape   = 0x46,                         /* One-Shot Control */
    kHIDUsage_Csmr_MenuValueIncrease = 0x47,                    /* One-Shot Control */
    kHIDUsage_Csmr_MenuValueDecrease = 0x48,                    /* One-Shot Control */
                                                                /* 0x49 - 0x5F Reserved */
    kHIDUsage_Csmr_DataOnScreen = 0x60,                         /* On/Off Control */
    kHIDUsage_Csmr_ClosedCaption = 0x61,                        /* On/Off Control */
    kHIDUsage_Csmr_ClosedCaptionSelect = 0x62,                  /* Selector */
    kHIDUsage_Csmr_VCROrTV      = 0x63,                         /* On/Off Control */
    kHIDUsage_Csmr_BroadcastMode = 0x64,                        /* One-Shot Control */
    kHIDUsage_Csmr_Snapshot     = 0x65,                         /* One-Shot Control */
    kHIDUsage_Csmr_Still        = 0x66,                         /* One-Shot Control */
                                                                /* 0x67 - 0x7F Reserved */
    kHIDUsage_Csmr_Selection    = 0x80,                         /* Named Array */
    kHIDUsage_Csmr_Assign       = 0x81,                         /* Selector */
    kHIDUsage_Csmr_ModeStep     = 0x82,                         /* One-Shot Control */
    kHIDUsage_Csmr_RecallLast   = 0x83,                         /* One-Shot Control */
    kHIDUsage_Csmr_EnterChannel = 0x84,                         /* One-Shot Control */
    kHIDUsage_Csmr_OrderMovie   = 0x85,                         /* One-Shot Control */
    kHIDUsage_Csmr_Channel      = 0x86,                         /* Linear Control */
    kHIDUsage_Csmr_MediaSelection = 0x87,                       /* Selector */
    kHIDUsage_Csmr_MediaSelectComputer = 0x88,                  /* Selector */
    kHIDUsage_Csmr_MediaSelectTV = 0x89,                        /* Selector */
    kHIDUsage_Csmr_MediaSelectWWW = 0x8A,                       /* Selector */
    kHIDUsage_Csmr_MediaSelectDVD = 0x8B,                       /* Selector */
    kHIDUsage_Csmr_MediaSelectTelephone = 0x8C,                 /* Selector */
    kHIDUsage_Csmr_MediaSelectProgramGuide = 0x8D,              /* Selector */
    kHIDUsage_Csmr_MediaSelectVideoPhone = 0x8E,                /* Selector */
    kHIDUsage_Csmr_MediaSelectGames = 0x8F,                     /* Selector */
    kHIDUsage_Csmr_MediaSelectMessages = 0x90,                  /* Selector */
    kHIDUsage_Csmr_MediaSelectCD = 0x91,                        /* Selector */
    kHIDUsage_Csmr_MediaSelectVCR = 0x92,                       /* Selector */
    kHIDUsage_Csmr_MediaSelectTuner = 0x93,                     /* Selector */
    kHIDUsage_Csmr_Quit         = 0x94,                         /* One-Shot Control */
    kHIDUsage_Csmr_Help         = 0x95,                         /* On/Off Control */
    kHIDUsage_Csmr_MediaSelectTape = 0x96,                      /* Selector */
    kHIDUsage_Csmr_MediaSelectCable = 0x97,                     /* Selector */
    kHIDUsage_Csmr_MediaSelectSatellite = 0x98,                 /* Selector */
    kHIDUsage_Csmr_MediaSelectSecurity = 0x99,                  /* Selector */
    kHIDUsage_Csmr_MediaSelectHome = 0x9A,                      /* Selector */
    kHIDUsage_Csmr_MediaSelectCall = 0x9B,                      /* Selector */
    kHIDUsage_Csmr_ChannelIncrement = 0x9C,                     /* One-Shot Control */
    kHIDUsage_Csmr_ChannelDecrement = 0x9D,                     /* One-Shot Control */
    kHIDUsage_Csmr_Media        = 0x9E,                         /* Selector */
                                                                /* 0x9F Reserved */
    kHIDUsage_Csmr_VCRPlus      = 0xA0,                         /* One-Shot Control */
    kHIDUsage_Csmr_Once         = 0xA1,                         /* One-Shot Control */
    kHIDUsage_Csmr_Daily        = 0xA2,                         /* One-Shot Control */
    kHIDUsage_Csmr_Weekly       = 0xA3,                         /* One-Shot Control */
    kHIDUsage_Csmr_Monthly      = 0xA4,                         /* One-Shot Control */
                                                                /* 0xA5 - 0xAF Reserved */
    kHIDUsage_Csmr_Play         = 0xB0,                         /* On/Off Control */
    kHIDUsage_Csmr_Pause        = 0xB1,                         /* On/Off Control */
    kHIDUsage_Csmr_Record       = 0xB2,                         /* On/Off Control */
    kHIDUsage_Csmr_FastForward  = 0xB3,                         /* On/Off Control */
    kHIDUsage_Csmr_Rewind       = 0xB4,                         /* On/Off Control */
    kHIDUsage_Csmr_ScanNextTrack = 0xB5,                        /* One-Shot Control */
    kHIDUsage_Csmr_ScanPreviousTrack = 0xB6,                    /* One-Shot Control */
    kHIDUsage_Csmr_Stop         = 0xB7,                         /* One-Shot Control */
    kHIDUsage_Csmr_Eject        = 0xB8,                         /* One-Shot Control */
    kHIDUsage_Csmr_RandomPlay   = 0xB9,                         /* On/Off Control */
    kHIDUsage_Csmr_SelectDisc   = 0xBA,                         /* Named Array */
    kHIDUsage_Csmr_EnterDisc    = 0xBB,                         /* Momentary Control */
    kHIDUsage_Csmr_Repeat       = 0xBC,                         /* One-Shot Control */
    kHIDUsage_Csmr_Tracking     = 0xBD,                         /* Linear Control */
    kHIDUsage_Csmr_TrackNormal  = 0xBE,                         /* One-Shot Control */
    kHIDUsage_Csmr_SlowTracking = 0xBF,                         /* Linear Control */
    kHIDUsage_Csmr_FrameForward = 0xC0,                         /* Re-Trigger Control */
    kHIDUsage_Csmr_FrameBack    = 0xC1,                         /* Re-Trigger Control */
    kHIDUsage_Csmr_Mark         = 0xC2,                         /* One-Shot Control */
    kHIDUsage_Csmr_ClearMark    = 0xC3,                         /* One-Shot Control */
    kHIDUsage_Csmr_RepeatFromMark = 0xC4,                       /* On/Off Control */
    kHIDUsage_Csmr_ReturnToMark = 0xC5,                         /* One-Shot Control */
    kHIDUsage_Csmr_SearchMarkForward = 0xC6,                    /* One-Shot Control */
    kHIDUsage_Csmr_SearchMarkBackwards = 0xC7,                  /* One-Shot Control */
    kHIDUsage_Csmr_CounterReset = 0xC8,                         /* One-Shot Control */
    kHIDUsage_Csmr_ShowCounter  = 0xC9,                         /* One-Shot Control */
    kHIDUsage_Csmr_TrackingIncrement = 0xCA,                    /* Re-Trigger Control */
    kHIDUsage_Csmr_TrackingDecrement = 0xCB,                    /* Re-Trigger Control */
    kHIDUsage_Csmr_StopOrEject  = 0xCC,                         /* One-Shot Control */
    kHIDUsage_Csmr_PlayOrPause  = 0xCD,                         /* One-Shot Control */
    kHIDUsage_Csmr_PlayOrSkip   = 0xCE,                         /* One-Shot Control */
                                                                /* 0xCF - 0xDF Reserved */
    kHIDUsage_Csmr_Volume       = 0xE0,                         /* Linear Control */
    kHIDUsage_Csmr_Balance      = 0xE1,                         /* Linear Control */
    kHIDUsage_Csmr_Mute         = 0xE2,                         /* On/Off Control */
    kHIDUsage_Csmr_Bass         = 0xE3,                         /* Linear Control */
    kHIDUsage_Csmr_Treble       = 0xE4,                         /* Linear Control */
    kHIDUsage_Csmr_BassBoost    = 0xE5,                         /* On/Off Control */
    kHIDUsage_Csmr_SurroundMode = 0xE6,                         /* One-Shot Control */
    kHIDUsage_Csmr_Loudness     = 0xE7,                         /* On/Off Control */
    kHIDUsage_Csmr_MPX          = 0xE8,                         /* On/Off Control */
    kHIDUsage_Csmr_VolumeIncrement = 0xE9,                      /* Re-Trigger Control */
    kHIDUsage_Csmr_VolumeDecrement = 0xEA,                      /* Re-Trigger Control */
                                                                /* 0xEB - 0xEF Reserved */
    kHIDUsage_Csmr_Speed        = 0xF0,                         /* Selector */
    kHIDUsage_Csmr_PlaybackSpeed = 0xF1,                        /* Named Array */
    kHIDUsage_Csmr_StandardPlay = 0xF2,                         /* Selector */
    kHIDUsage_Csmr_LongPlay     = 0xF3,                         /* Selector */
    kHIDUsage_Csmr_ExtendedPlay = 0xF4,                         /* Selector */
    kHIDUsage_Csmr_Slow         = 0xF5,                         /* One-Shot Control */
                                                                /* 0xF6 - 0xFF Reserved */
    kHIDUsage_Csmr_FanEnable    = 0x0100,                       /* On/Off Control */
    kHIDUsage_Csmr_FanSpeed     = 0x0101,                       /* Linear Control */
    kHIDUsage_Csmr_LightEnable  = 0x0102,                       /* On/Off Control */
    kHIDUsage_Csmr_LightIlluminationLevel = 0x0103,             /* Linear Control */
    kHIDUsage_Csmr_ClimateControlEnable = 0x0104,               /* On/Off Control */
    kHIDUsage_Csmr_RoomTemperature = 0x0105,                    /* Linear Control */
    kHIDUsage_Csmr_SecurityEnable = 0x0106,                     /* On/Off Control */
    kHIDUsage_Csmr_FireAlarm    = 0x0107,                       /* One-Shot Control */
    kHIDUsage_Csmr_PoliceAlarm  = 0x0108,                       /* One-Shot Control */
                                                                /* 0x109 - 0x14F Reserved */
    kHIDUsage_Csmr_BalanceRight = 0x0150,                       /* Re-Trigger Control */
    kHIDUsage_Csmr_BalanceLeft  = 0x0151,                       /* Re-Trigger Control */
    kHIDUsage_Csmr_BassIncrement = 0x0152,                      /* Re-Trigger Control */
    kHIDUsage_Csmr_BassDecrement = 0x0153,                      /* Re-Trigger Control */
    kHIDUsage_Csmr_TrebleIncrement = 0x0154,                    /* Re-Trigger Control */
    kHIDUsage_Csmr_TrebleDecrement = 0x0155,                    /* Re-Trigger Control */
                                                                /* 0x156 - 0x15F Reserved */
    kHIDUsage_Csmr_SpeakerSystem = 0x0160,                      /* Logical Collection */
    kHIDUsage_Csmr_ChannelLeft  = 0x0161,                       /* Logical Collection */
    kHIDUsage_Csmr_ChannelRight = 0x0162,                       /* Logical Collection */
    kHIDUsage_Csmr_ChannelCenter = 0x0163,                      /* Logical Collection */
    kHIDUsage_Csmr_ChannelFront = 0x0164,                       /* Logical Collection */
    kHIDUsage_Csmr_ChannelCenterFront = 0x0165,                 /* Logical Collection */
    kHIDUsage_Csmr_ChannelSide  = 0x0166,                       /* Logical Collection */
    kHIDUsage_Csmr_ChannelSurround = 0x0167,                    /* Logical Collection */
    kHIDUsage_Csmr_ChannelLowFrequencyEnhancement = 0x0168,     /* Logical Collection */
    kHIDUsage_Csmr_ChannelTop   = 0x0169,                       /* Logical Collection */
    kHIDUsage_Csmr_ChannelUnknown = 0x016A,                     /* Logical Collection */
                                                                /* 0x16B - 0x16F Reserved */
    kHIDUsage_Csmr_SubChannel   = 0x0170,                       /* Linear Control */
    kHIDUsage_Csmr_SubChannelIncrement = 0x0171,                /* One-Shot Control */
    kHIDUsage_Csmr_SubChannelDecrement = 0x0172,                /* One-Shot Control */
    kHIDUsage_Csmr_AlternateAudioIncrement = 0x0173,            /* One-Shot Control */
    kHIDUsage_Csmr_AlternateAudioDecrement = 0x0174,            /* One-Shot Control */
                                                                /* 0x175 - 0x17F Reserved */
    kHIDUsage_Csmr_ApplicationLaunchButtons = 0x0180,           /* Named Array */
    kHIDUsage_Csmr_ALLaunchButtonConfigurationTool = 0x0181,    /* Selector */
    kHIDUsage_Csmr_ALProgrammableButtonConfiguration = 0x0182,  /* Selector */
    kHIDUsage_Csmr_ALConsumerControlConfiguration = 0x0183,     /* Selector */
    kHIDUsage_Csmr_ALWordProcessor = 0x0184,                    /* Selector */
    kHIDUsage_Csmr_ALTextEditor = 0x0185,                       /* Selector */
    kHIDUsage_Csmr_ALSpreadsheet = 0x0186,                      /* Selector */
    kHIDUsage_Csmr_ALGraphicsEditor = 0x0187,                   /* Selector */
    kHIDUsage_Csmr_ALPresentationApp = 0x0188,                  /* Selector */
    kHIDUsage_Csmr_ALDatabaseApp = 0x0189,                      /* Selector */
    kHIDUsage_Csmr_ALEmailReader = 0x018A,                      /* Selector */
    kHIDUsage_Csmr_ALNewsreader = 0x018B,                       /* Selector */
    kHIDUsage_Csmr_ALVoicemail  = 0x018C,                       /* Selector */
    kHIDUsage_Csmr_ALContactsOrAddressBook = 0x018D,            /* Selector */
    kHIDUsage_Csmr_ALCalendarOrSchedule = 0x018E,               /* Selector */
    kHIDUsage_Csmr_ALTaskOrProjectManager = 0x018F,             /* Selector */
    kHIDUsage_Csmr_ALLogOrJournalOrTimecard = 0x0190,           /* Selector */
    kHIDUsage_Csmr_ALCheckbookOrFinance = 0x0191,               /* Selector */
    kHIDUsage_Csmr_ALCalculator = 0x0192,                       /* Selector */
    kHIDUsage_Csmr_ALAOrVCaptureOrPlayback = 0x0193,            /* Selector */
    kHIDUsage_Csmr_ALLocalMachineBrowser = 0x0194,              /* Selector */
    kHIDUsage_Csmr_ALLANOrWANBrowser = 0x0195,                  /* Selector */
    kHIDUsage_Csmr_ALInternetBrowser = 0x0196,                  /* Selector */
    kHIDUsage_Csmr_ALRemoteNetworkingOrISPConnect = 0x0197,     /* Selector */
    kHIDUsage_Csmr_ALNetworkConference = 0x0198,                /* Selector */
    kHIDUsage_Csmr_ALNetworkChat = 0x0199,                      /* Selector */
    kHIDUsage_Csmr_ALTelephonyOrDialer = 0x019A,                /* Selector */
    kHIDUsage_Csmr_ALLogon      = 0x019B,                       /* Selector */
    kHIDUsage_Csmr_ALLogoff     = 0x019C,                       /* Selector */
    kHIDUsage_Csmr_ALLogonOrLogoff = 0x019D,                    /* Selector */
    kHIDUsage_Csmr_ALTerminalLockOrScreensaver = 0x019E,        /* Selector */
    kHIDUsage_Csmr_ALControlPanel = 0x019F,                     /* Selector */
    kHIDUsage_Csmr_ALCommandLineProcessorOrRun = 0x01A0,        /* Selector */
    kHIDUsage_Csmr_ALProcessOrTaskManager = 0x01A1,             /* Selector */
    kHIDUsage_Csmr_AL           = 0x01A2,                       /* Selector */
    kHIDUsage_Csmr_ALNextTaskOrApplication = 0x0143,            /* Selector */
    kHIDUsage_Csmr_ALPreviousTaskOrApplication = 0x01A4,        /* Selector */
    kHIDUsage_Csmr_ALPreemptiveHaltTaskOrApplication = 0x01A5,  /* Selector */
                                                                /* 0x1A6 - 0x1FF Reserved */
    kHIDUsage_Csmr_GenericGUIApplicationControls = 0x0200,      /* Named Array */
    kHIDUsage_Csmr_ACNew        = 0x0201,                       /* Selector */
    kHIDUsage_Csmr_ACOpen       = 0x0202,                       /* Selector */
    kHIDUsage_Csmr_ACClose      = 0x0203,                       /* Selector */
    kHIDUsage_Csmr_ACExit       = 0x0204,                       /* Selector */
    kHIDUsage_Csmr_ACMaximize   = 0x0205,                       /* Selector */
    kHIDUsage_Csmr_ACMinimize   = 0x0206,                       /* Selector */
    kHIDUsage_Csmr_ACSave       = 0x0207,                       /* Selector */
    kHIDUsage_Csmr_ACPrint      = 0x0208,                       /* Selector */
    kHIDUsage_Csmr_ACProperties = 0x0209,                       /* Selector */
    kHIDUsage_Csmr_ACUndo       = 0x021A,                       /* Selector */
    kHIDUsage_Csmr_ACCopy       = 0x021B,                       /* Selector */
    kHIDUsage_Csmr_ACCut        = 0x021C,                       /* Selector */
    kHIDUsage_Csmr_ACPaste      = 0x021D,                       /* Selector */
    kHIDUsage_Csmr_AC           = 0x021E,                       /* Selector */
    kHIDUsage_Csmr_ACFind       = 0x021F,                       /* Selector */
    kHIDUsage_Csmr_ACFindandReplace = 0x0220,                   /* Selector */
    kHIDUsage_Csmr_ACSearch     = 0x0221,                       /* Selector */
    kHIDUsage_Csmr_ACGoTo       = 0x0222,                       /* Selector */
    kHIDUsage_Csmr_ACHome       = 0x0223,                       /* Selector */
    kHIDUsage_Csmr_ACBack       = 0x0224,                       /* Selector */
    kHIDUsage_Csmr_ACForward    = 0x0225,                       /* Selector */
    kHIDUsage_Csmr_ACStop       = 0x0226,                       /* Selector */
    kHIDUsage_Csmr_ACRefresh    = 0x0227,                       /* Selector */
    kHIDUsage_Csmr_ACPreviousLink = 0x0228,                     /* Selector */
    kHIDUsage_Csmr_ACNextLink   = 0x0229,                       /* Selector */
    kHIDUsage_Csmr_ACBookmarks  = 0x022A,                       /* Selector */
    kHIDUsage_Csmr_ACHistory    = 0x022B,                       /* Selector */
    kHIDUsage_Csmr_ACSubscriptions = 0x022C,                    /* Selector */
    kHIDUsage_Csmr_ACZoomIn     = 0x022D,                       /* Selector */
    kHIDUsage_Csmr_ACZoomOut    = 0x022E,                       /* Selector */
    kHIDUsage_Csmr_ACZoom       = 0x022F,                       /* Selector */
    kHIDUsage_Csmr_ACFullScreenView = 0x0230,                   /* Selector */
    kHIDUsage_Csmr_ACNormalView = 0x0231,                       /* Selector */
    kHIDUsage_Csmr_ACViewToggle = 0x0232,                       /* Selector */
    kHIDUsage_Csmr_ACScrollUp   = 0x0233,                       /* Selector */
    kHIDUsage_Csmr_ACScrollDown = 0x0234,                       /* Selector */
    kHIDUsage_Csmr_ACScroll     = 0x0235,                       /* Selector */
    kHIDUsage_Csmr_ACPanLeft    = 0x0236,                       /* Selector */
    kHIDUsage_Csmr_ACPanRight   = 0x0237,                       /* Selector */
    kHIDUsage_Csmr_ACPan        = 0x0238,                       /* Selector */
    kHIDUsage_Csmr_ACNewWindow  = 0x0239,                       /* Selector */
    kHIDUsage_Csmr_ACTileHorizontally = 0x023A,                 /* Selector */
    kHIDUsage_Csmr_ACTileVertically = 0x023B,                   /* Selector */
    kHIDUsage_Csmr_ACFormat     = 0x023C,                       /* Selector */
                                                                /* 0x23D - 0xFFFF Reserved */
    kHIDUsage_Csmr_Reserved     = 0xFFFF
};

/* Digitizer Page (0x0D) */
/* This section provides detailed descriptions of the usages employed by Digitizer Devices. */
enum {
    kHIDUsage_Dig_Digitizer     = 0x01,                         /* Application Collection */
    kHIDUsage_Dig_Pen           = 0x02,                         /* Application Collection */
    kHIDUsage_Dig_LightPen      = 0x03,                         /* Application Collection */
    kHIDUsage_Dig_TouchScreen   = 0x04,                         /* Application Collection */
    kHIDUsage_Dig_TouchPad      = 0x05,                         /* Application Collection */
    kHIDUsage_Dig_WhiteBoard    = 0x06,                         /* Application Collection */
    kHIDUsage_Dig_CoordinateMeasuringMachine = 0x07,            /* Application Collection */
    kHIDUsage_Dig_3DDigitizer   = 0x08,                         /* Application Collection */
    kHIDUsage_Dig_StereoPlotter = 0x09,                         /* Application Collection */
    kHIDUsage_Dig_ArticulatedArm = 0x0A,                        /* Application Collection */
    kHIDUsage_Dig_Armature      = 0x0B,                         /* Application Collection */
    kHIDUsage_Dig_MultiplePointDigitizer = 0x0C,                /* Application Collection */
    kHIDUsage_Dig_FreeSpaceWand = 0x0D,                         /* Application Collection */
                                                                /* 0x0E - 0x1F Reserved */
    kHIDUsage_Dig_Stylus        = 0x20,                         /* Logical Collection */
    kHIDUsage_Dig_Puck          = 0x21,                         /* Logical Collection */
    kHIDUsage_Dig_Finger        = 0x22,                         /* Logical Collection */
                                                                /* 0x23 - 0x2F Reserved */
    kHIDUsage_Dig_TipPressure   = 0x30,                         /* Dynamic Value */
    kHIDUsage_Dig_BarrelPressure = 0x31,                        /* Dynamic Value */
    kHIDUsage_Dig_InRange       = 0x32,                         /* Momentary Control */
    kHIDUsage_Dig_Touch         = 0x33,                         /* Momentary Control */
    kHIDUsage_Dig_Untouch       = 0x34,                         /* One-Shot Control */
    kHIDUsage_Dig_Tap           = 0x35,                         /* One-Shot Control */
    kHIDUsage_Dig_Quality       = 0x36,                         /* Dynamic Value */
    kHIDUsage_Dig_DataValid     = 0x37,                         /* Momentary Control */
    kHIDUsage_Dig_TransducerIndex = 0x38,                       /* Dynamic Value */
    kHIDUsage_Dig_TabletFunctionKeys = 0x39,                    /* Logical Collection */
    kHIDUsage_Dig_ProgramChangeKeys = 0x3A,                     /* Logical Collection */
    kHIDUsage_Dig_BatteryStrength = 0x3B,                       /* Dynamic Value */
    kHIDUsage_Dig_Invert        = 0x3C,                         /* Momentary Control */
    kHIDUsage_Dig_XTilt         = 0x3D,                         /* Dynamic Value */
    kHIDUsage_Dig_YTilt         = 0x3E,                         /* Dynamic Value */
    kHIDUsage_Dig_Azimuth       = 0x3F,                         /* Dynamic Value */
    kHIDUsage_Dig_Altitude      = 0x40,                         /* Dynamic Value */
    kHIDUsage_Dig_Twist         = 0x41,                         /* Dynamic Value */
    kHIDUsage_Dig_TipSwitch     = 0x42,                         /* Momentary Control */
    kHIDUsage_Dig_SecondaryTipSwitch = 0x43,                    /* Momentary Control */
    kHIDUsage_Dig_BarrelSwitch  = 0x44,                         /* Momentary Control */
    kHIDUsage_Dig_Eraser        = 0x45,                         /* Momentary Control */
    kHIDUsage_Dig_TabletPick    = 0x46,                         /* Momentary Control */
                                                                /* 0x47 - 0xFFFF Reserved */
    kHIDUsage_Dig_Reserved      = 0xFFFF
};

/* AlphanumericDisplay Page (0x14) */
/* The Alphanumeric Display page is intended for use by simple alphanumeric displays that are used on consumer devices. */
enum {
    kHIDUsage_AD_AlphanumericDisplay = 0x01,                    /* Application Collection */
                                                                /* 0x02 - 0x1F Reserved */
    kHIDUsage_AD_DisplayAttributesReport = 0x20,                /* Logical Collection */
    kHIDUsage_AD_ASCIICharacterSet = 0x21,                      /* Static Flag */
    kHIDUsage_AD_DataReadBack   = 0x22,                         /* Static Flag */
    kHIDUsage_AD_FontReadBack   = 0x23,                         /* Static Flag */
    kHIDUsage_AD_DisplayControlReport = 0x24,                   /* Logical Collection */
    kHIDUsage_AD_ClearDisplay   = 0x25,                         /* Dynamic Flag */
    kHIDUsage_AD_DisplayEnable  = 0x26,                         /* Dynamic Flag */
    kHIDUsage_AD_ScreenSaverDelay = 0x27,                       /* Static Value */
    kHIDUsage_AD_ScreenSaverEnable = 0x28,                      /* Dynamic Flag */
    kHIDUsage_AD_VerticalScroll = 0x29,                         /* Static Flag */
    kHIDUsage_AD_HorizontalScroll = 0x2A,                       /* Static Flag */
    kHIDUsage_AD_CharacterReport = 0x2B,                        /* Logical Collection */
    kHIDUsage_AD_DisplayData    = 0x2C,                         /* Dynamic Value */
    kHIDUsage_AD_DisplayStatus  = 0x2D,                         /* Logical Collection */
    kHIDUsage_AD_StatNotReady   = 0x2E,                         /* Selector */
    kHIDUsage_AD_StatReady      = 0x2F,                         /* Selector */
    kHIDUsage_AD_ErrNotaloadablecharacter = 0x30,               /* Selector */
    kHIDUsage_AD_ErrFontdatacannotberead = 0x31,                /* Selector */
    kHIDUsage_AD_CursorPositionReport = 0x32,                   /* Logical Collection */
    kHIDUsage_AD_Row            = 0x33,                         /* Dynamic Value */
    kHIDUsage_AD_Column         = 0x34,                         /* Dynamic Value */
    kHIDUsage_AD_Rows           = 0x35,                         /* Static Value */
    kHIDUsage_AD_Columns        = 0x36,                         /* Static Value */
    kHIDUsage_AD_CursorPixelPositioning = 0x37,                 /* Static Flag */
    kHIDUsage_AD_CursorMode     = 0x38,                         /* Dynamic Flag */
    kHIDUsage_AD_CursorEnable   = 0x39,                         /* Dynamic Flag */
    kHIDUsage_AD_CursorBlink    = 0x3A,                         /* Dynamic Flag */
    kHIDUsage_AD_FontReport     = 0x3B,                         /* Logical Collection */
    kHIDUsage_AD_FontData       = 0x3C,                         /* Buffered Byte */
    kHIDUsage_AD_CharacterWidth = 0x3D,                         /* Static Value */
    kHIDUsage_AD_CharacterHeight = 0x3E,                        /* Static Value */
    kHIDUsage_AD_CharacterSpacingHorizontal = 0x3F,             /* Static Value */
    kHIDUsage_AD_CharacterSpacingVertical = 0x40,               /* Static Value */
    kHIDUsage_AD_UnicodeCharacterSet = 0x41,                    /* Static Flag */
                                                                /* 0x42 - 0xFFFF Reserved */
    kHIDUsage_AD_Reserved       = 0xFFFF
};


#ifdef __cplusplus
}
#endif

#endif /* __HID__ */