/*
 * Copyright (C) 2015 Austin English
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */
#ifndef __HIDUSAGE_H
#define __HIDUSAGE_H

#ifdef __cplusplus
extern "C" {
#endif

typedef USHORT USAGE, *PUSAGE;

#define HID_USAGE_CONSUMERCTRL                   ((USAGE) 0x01)

#define HID_USAGE_CONSUMER_VOLUME                ((USAGE) 0xE0)

#define HID_USAGE_DIGITIZER_PEN                  ((USAGE) 0x02)
#define HID_USAGE_DIGITIZER_TOUCH_SCREEN         ((USAGE) 0x04)
#define HID_USAGE_DIGITIZER_TOUCH_PAD            ((USAGE) 0x05)
#define HID_USAGE_DIGITIZER_FINGER               ((USAGE) 0x22)
#define HID_USAGE_DIGITIZER_TIP_PRESSURE         ((USAGE) 0x30)
#define HID_USAGE_DIGITIZER_IN_RANGE             ((USAGE) 0x32)
#define HID_USAGE_DIGITIZER_X_TILT               ((USAGE) 0x3D)
#define HID_USAGE_DIGITIZER_Y_TILT               ((USAGE) 0x3E)
#define HID_USAGE_DIGITIZER_AZIMUTH              ((USAGE) 0x3F)
#define HID_USAGE_DIGITIZER_TIP_SWITCH           ((USAGE) 0x42)
#define HID_USAGE_DIGITIZER_BARREL_SWITCH        ((USAGE) 0x44)
#define HID_USAGE_DIGITIZER_CONFIDENCE           ((USAGE) 0x47)

#define HID_USAGE_GENERIC_POINTER             ((USAGE) 0x01)
#define HID_USAGE_GENERIC_MOUSE               ((USAGE) 0x02)
#define HID_USAGE_GENERIC_JOYSTICK            ((USAGE) 0x04)
#define HID_USAGE_GENERIC_GAMEPAD             ((USAGE) 0x05)
#define HID_USAGE_GENERIC_KEYBOARD            ((USAGE) 0x06)
#define HID_USAGE_GENERIC_KEYPAD              ((USAGE) 0x07)
#define HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER ((USAGE) 0x08)
#define HID_USAGE_GENERIC_SYSTEM_CTL          ((USAGE) 0x80)
#define HID_USAGE_GENERIC_X                   ((USAGE) 0x30)
#define HID_USAGE_GENERIC_Y                   ((USAGE) 0x31)
#define HID_USAGE_GENERIC_Z                   ((USAGE) 0x32)
#define HID_USAGE_GENERIC_RX                  ((USAGE) 0x33)
#define HID_USAGE_GENERIC_RY                  ((USAGE) 0x34)
#define HID_USAGE_GENERIC_RZ                  ((USAGE) 0x35)
#define HID_USAGE_GENERIC_SLIDER              ((USAGE) 0x36)
#define HID_USAGE_GENERIC_DIAL                ((USAGE) 0x37)
#define HID_USAGE_GENERIC_WHEEL               ((USAGE) 0x38)
#define HID_USAGE_GENERIC_HATSWITCH           ((USAGE) 0x39)
#define HID_USAGE_GENERIC_COUNTED_BUFFER      ((USAGE) 0x3A)
#define HID_USAGE_GENERIC_BYTE_COUNT          ((USAGE) 0x3B)
#define HID_USAGE_GENERIC_MOTION_WAKEUP       ((USAGE) 0x3C)
#define HID_USAGE_GENERIC_VX                  ((USAGE) 0x40)
#define HID_USAGE_GENERIC_VY                  ((USAGE) 0x41)
#define HID_USAGE_GENERIC_VZ                  ((USAGE) 0x42)
#define HID_USAGE_GENERIC_VBRX                ((USAGE) 0x43)
#define HID_USAGE_GENERIC_VBRY                ((USAGE) 0x44)
#define HID_USAGE_GENERIC_VBRZ                ((USAGE) 0x45)
#define HID_USAGE_GENERIC_VNO                 ((USAGE) 0x46)
#define HID_USAGE_GENERIC_SYSCTL_POWER        ((USAGE) 0x81)
#define HID_USAGE_GENERIC_SYSCTL_SLEEP        ((USAGE) 0x82)
#define HID_USAGE_GENERIC_SYSCTL_WAKE         ((USAGE) 0x83)
#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84)
#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU    ((USAGE) 0x85)
#define HID_USAGE_GENERIC_SYSCTL_APP_MENU     ((USAGE) 0x86)
#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU    ((USAGE) 0x87)
#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT    ((USAGE) 0x88)
#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT  ((USAGE) 0x89)
#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT   ((USAGE) 0x8A)
#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT    ((USAGE) 0x8B)
#define HID_USAGE_GENERIC_SYSCTL_MENU_UP      ((USAGE) 0x8C)
#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN    ((USAGE) 0x8D)

#define HID_USAGE_KEYBOARD_NOEVENT        ((USAGE) 0x00)
#define HID_USAGE_KEYBOARD_ROLLOVER       ((USAGE) 0x01)
#define HID_USAGE_KEYBOARD_POSTFAIL       ((USAGE) 0x02)
#define HID_USAGE_KEYBOARD_UNDEFINED      ((USAGE) 0x03)
#define HID_USAGE_KEYBOARD_aA             ((USAGE) 0x04)
#define HID_USAGE_KEYBOARD_zZ             ((USAGE) 0x1D)
#define HID_USAGE_KEYBOARD_ONE            ((USAGE) 0x1E)
#define HID_USAGE_KEYBOARD_ZERO           ((USAGE) 0x27)
#define HID_USAGE_KEYBOARD_LCTRL          ((USAGE) 0xE0)
#define HID_USAGE_KEYBOARD_LSHFT          ((USAGE) 0xE1)
#define HID_USAGE_KEYBOARD_LALT           ((USAGE) 0xE2)
#define HID_USAGE_KEYBOARD_LGUI           ((USAGE) 0xE3)
#define HID_USAGE_KEYBOARD_RCTRL          ((USAGE) 0xE4)
#define HID_USAGE_KEYBOARD_RSHFT          ((USAGE) 0xE5)
#define HID_USAGE_KEYBOARD_RALT           ((USAGE) 0xE6)
#define HID_USAGE_KEYBOARD_RGUI           ((USAGE) 0xE7)
#define HID_USAGE_KEYBOARD_SCROLL_LOCK    ((USAGE) 0x47)
#define HID_USAGE_KEYBOARD_NUM_LOCK       ((USAGE) 0x53)
#define HID_USAGE_KEYBOARD_CAPS_LOCK      ((USAGE) 0x39)
#define HID_USAGE_KEYBOARD_F1             ((USAGE) 0x3A)
#define HID_USAGE_KEYBOARD_F12            ((USAGE) 0x45)
#define HID_USAGE_KEYBOARD_RETURN         ((USAGE) 0x28)
#define HID_USAGE_KEYBOARD_ESCAPE         ((USAGE) 0x29)
#define HID_USAGE_KEYBOARD_DELETE         ((USAGE) 0x2A)
#define HID_USAGE_KEYBOARD_PRINT_SCREEN   ((USAGE) 0x46)

#define HID_USAGE_LED_NUM_LOCK                  ((USAGE) 0x01)
#define HID_USAGE_LED_CAPS_LOCK                 ((USAGE) 0x02)
#define HID_USAGE_LED_SCROLL_LOCK               ((USAGE) 0x03)
#define HID_USAGE_LED_COMPOSE                   ((USAGE) 0x04)
#define HID_USAGE_LED_KANA                      ((USAGE) 0x05)
#define HID_USAGE_LED_POWER                     ((USAGE) 0x06)
#define HID_USAGE_LED_SHIFT                     ((USAGE) 0x07)
#define HID_USAGE_LED_DO_NOT_DISTURB            ((USAGE) 0x08)
#define HID_USAGE_LED_MUTE                      ((USAGE) 0x09)
#define HID_USAGE_LED_TONE_ENABLE               ((USAGE) 0x0A)
#define HID_USAGE_LED_HIGH_CUT_FILTER           ((USAGE) 0x0B)
#define HID_USAGE_LED_LOW_CUT_FILTER            ((USAGE) 0x0C)
#define HID_USAGE_LED_EQUALIZER_ENABLE          ((USAGE) 0x0D)
#define HID_USAGE_LED_SOUND_FIELD_ON            ((USAGE) 0x0E)
#define HID_USAGE_LED_SURROUND_FIELD_ON         ((USAGE) 0x0F)
#define HID_USAGE_LED_REPEAT                    ((USAGE) 0x10)
#define HID_USAGE_LED_STEREO                    ((USAGE) 0x11)
#define HID_USAGE_LED_SAMPLING_RATE_DETECT      ((USAGE) 0x12)
#define HID_USAGE_LED_SPINNING                  ((USAGE) 0x13)
#define HID_USAGE_LED_CAV                       ((USAGE) 0x14)
#define HID_USAGE_LED_CLV                       ((USAGE) 0x15)
#define HID_USAGE_LED_RECORDING_FORMAT_DET      ((USAGE) 0x16)
#define HID_USAGE_LED_OFF_HOOK                  ((USAGE) 0x17)
#define HID_USAGE_LED_RING                      ((USAGE) 0x18)
#define HID_USAGE_LED_MESSAGE_WAITING           ((USAGE) 0x19)
#define HID_USAGE_LED_DATA_MODE                 ((USAGE) 0x1A)
#define HID_USAGE_LED_BATTERY_OPERATION         ((USAGE) 0x1B)
#define HID_USAGE_LED_BATTERY_OK                ((USAGE) 0x1C)
#define HID_USAGE_LED_BATTERY_LOW               ((USAGE) 0x1D)
#define HID_USAGE_LED_SPEAKER                   ((USAGE) 0x1E)
#define HID_USAGE_LED_HEAD_SET                  ((USAGE) 0x1F)
#define HID_USAGE_LED_HOLD                      ((USAGE) 0x20)
#define HID_USAGE_LED_MICROPHONE                ((USAGE) 0x21)
#define HID_USAGE_LED_COVERAGE                  ((USAGE) 0x22)
#define HID_USAGE_LED_NIGHT_MODE                ((USAGE) 0x23)
#define HID_USAGE_LED_SEND_CALLS                ((USAGE) 0x24)
#define HID_USAGE_LED_CALL_PICKUP               ((USAGE) 0x25)
#define HID_USAGE_LED_CONFERENCE                ((USAGE) 0x26)
#define HID_USAGE_LED_STAND_BY                  ((USAGE) 0x27)
#define HID_USAGE_LED_CAMERA_ON                 ((USAGE) 0x28)
#define HID_USAGE_LED_CAMERA_OFF                ((USAGE) 0x29)
#define HID_USAGE_LED_ON_LINE                   ((USAGE) 0x2A)
#define HID_USAGE_LED_OFF_LINE                  ((USAGE) 0x2B)
#define HID_USAGE_LED_BUSY                      ((USAGE) 0x2C)
#define HID_USAGE_LED_READY                     ((USAGE) 0x2D)
#define HID_USAGE_LED_PAPER_OUT                 ((USAGE) 0x2E)
#define HID_USAGE_LED_PAPER_JAM                 ((USAGE) 0x2F)
#define HID_USAGE_LED_REMOTE                    ((USAGE) 0x30)
#define HID_USAGE_LED_FORWARD                   ((USAGE) 0x31)
#define HID_USAGE_LED_REVERSE                   ((USAGE) 0x32)
#define HID_USAGE_LED_STOP                      ((USAGE) 0x33)
#define HID_USAGE_LED_REWIND                    ((USAGE) 0x34)
#define HID_USAGE_LED_FAST_FORWARD              ((USAGE) 0x35)
#define HID_USAGE_LED_PLAY                      ((USAGE) 0x36)
#define HID_USAGE_LED_PAUSE                     ((USAGE) 0x37)
#define HID_USAGE_LED_RECORD                    ((USAGE) 0x38)
#define HID_USAGE_LED_ERROR                     ((USAGE) 0x39)
#define HID_USAGE_LED_SELECTED_INDICATOR        ((USAGE) 0x3A)
#define HID_USAGE_LED_IN_USE_INDICATOR          ((USAGE) 0x3B)
#define HID_USAGE_LED_MULTI_MODE_INDICATOR      ((USAGE) 0x3C)
#define HID_USAGE_LED_INDICATOR_ON              ((USAGE) 0x3D)
#define HID_USAGE_LED_INDICATOR_FLASH           ((USAGE) 0x3E)
#define HID_USAGE_LED_INDICATOR_SLOW_BLINK      ((USAGE) 0x3F)
#define HID_USAGE_LED_INDICATOR_FAST_BLINK      ((USAGE) 0x40)
#define HID_USAGE_LED_INDICATOR_OFF             ((USAGE) 0x41)
#define HID_USAGE_LED_FLASH_ON_TIME             ((USAGE) 0x42)
#define HID_USAGE_LED_SLOW_BLINK_ON_TIME        ((USAGE) 0x43)
#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME       ((USAGE) 0x44)
#define HID_USAGE_LED_FAST_BLINK_ON_TIME        ((USAGE) 0x45)
#define HID_USAGE_LED_FAST_BLINK_OFF_TIME       ((USAGE) 0x46)
#define HID_USAGE_LED_INDICATOR_COLOR           ((USAGE) 0x47)
#define HID_USAGE_LED_RED                       ((USAGE) 0x48)
#define HID_USAGE_LED_GREEN                     ((USAGE) 0x49)
#define HID_USAGE_LED_AMBER                     ((USAGE) 0x4A)
#define HID_USAGE_LED_GENERIC_INDICATOR         ((USAGE) 0x3B)

#define HID_USAGE_PAGE_UNDEFINED          ((USAGE) 0x00)
#define HID_USAGE_PAGE_GENERIC            ((USAGE) 0x01)
#define HID_USAGE_PAGE_SIMULATION         ((USAGE) 0x02)
#define HID_USAGE_PAGE_VR                 ((USAGE) 0x03)
#define HID_USAGE_PAGE_SPORT              ((USAGE) 0x04)
#define HID_USAGE_PAGE_GAME               ((USAGE) 0x05)
#define HID_USAGE_PAGE_KEYBOARD           ((USAGE) 0x07)
#define HID_USAGE_PAGE_LED                ((USAGE) 0x08)
#define HID_USAGE_PAGE_BUTTON             ((USAGE) 0x09)
#define HID_USAGE_PAGE_ORDINAL            ((USAGE) 0x0A)
#define HID_USAGE_PAGE_TELEPHONY          ((USAGE) 0x0B)
#define HID_USAGE_PAGE_CONSUMER           ((USAGE) 0x0C)
#define HID_USAGE_PAGE_DIGITIZER          ((USAGE) 0x0D)
#define HID_USAGE_PAGE_HAPTICS            ((USAGE) 0x0E)
#define HID_USAGE_PAGE_PID                ((USAGE) 0x0F)
#define HID_USAGE_PAGE_UNICODE            ((USAGE) 0x10)
#define HID_USAGE_PAGE_ALPHANUMERIC       ((USAGE) 0x14)
#define HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN ((USAGE) 0xff00)
#define HID_USAGE_PAGE_VENDOR_DEFINED_END   ((USAGE) 0xffff)

#define HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE          ((USAGE) 0x01)
#define HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE      ((USAGE) 0x02)
#define HID_USAGE_SIMULATION_RUDDER       ((USAGE) 0xBA)
#define HID_USAGE_SIMULATION_THROTTLE     ((USAGE) 0xBB)
#define HID_USAGE_SIMULATION_ACCELERATOR  ((USAGE) 0xC4)
#define HID_USAGE_SIMULATION_BRAKE        ((USAGE) 0xC5)
#define HID_USAGE_SIMULATION_CLUTCH       ((USAGE) 0xC6)
#define HID_USAGE_SIMULATION_STEERING     ((USAGE) 0xC8)

#define HID_USAGE_TELEPHONY_PHONE                ((USAGE) 0x01)
#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE    ((USAGE) 0x02)
#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS     ((USAGE) 0x03)
#define HID_USAGE_TELEPHONY_HANDSET              ((USAGE) 0x04)
#define HID_USAGE_TELEPHONY_HEADSET              ((USAGE) 0x05)
#define HID_USAGE_TELEPHONY_KEYPAD               ((USAGE) 0x06)
#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON  ((USAGE) 0x07)
#define HID_USAGE_TELEPHONY_REDIAL               ((USAGE) 0x24)
#define HID_USAGE_TELEPHONY_TRANSFER             ((USAGE) 0x25)
#define HID_USAGE_TELEPHONY_DROP                 ((USAGE) 0x26)
#define HID_USAGE_TELEPHONY_LINE                 ((USAGE) 0x2A)
#define HID_USAGE_TELEPHONY_RING_ENABLE          ((USAGE) 0x2D)
#define HID_USAGE_TELEPHONY_SEND                 ((USAGE) 0x31)
#define HID_USAGE_TELEPHONY_KEYPAD_0             ((USAGE) 0xB0)
#define HID_USAGE_TELEPHONY_KEYPAD_D             ((USAGE) 0xBF)
#define HID_USAGE_TELEPHONY_HOST_AVAILABLE       ((USAGE) 0xF1)

#define HID_USAGE_HAPTICS_SIMPLE_CONTROLLER         ((USAGE) 0x01)
#define HID_USAGE_HAPTICS_WAVEFORM_LIST             ((USAGE) 0x10)
#define HID_USAGE_HAPTICS_DURATION_LIST             ((USAGE) 0x11)
#define HID_USAGE_HAPTICS_AUTO_TRIGGER              ((USAGE) 0x20)
#define HID_USAGE_HAPTICS_MANUAL_TRIGGER            ((USAGE) 0x21)
#define HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL   ((USAGE) 0x22)
#define HID_USAGE_HAPTICS_INTENSITY                 ((USAGE) 0x23)
#define HID_USAGE_HAPTICS_REPEAT_COUNT              ((USAGE) 0x24)
#define HID_USAGE_HAPTICS_RETRIGGER_PERIOD          ((USAGE) 0x25)
#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE      ((USAGE) 0x26)
#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID        ((USAGE) 0x27)
#define HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME      ((USAGE) 0x28)
#define HID_USAGE_HAPTICS_WAVEFORM_BEGIN            ((USAGE) 0x1000)
/* Differs from https://usb.org/sites/default/files/hut1_22.pdf */
/* Waveform None */
#define HID_USAGE_HAPTICS_WAVEFORM_STOP             ((USAGE) 0x1001)
/* Waveform Stop */
#define HID_USAGE_HAPTICS_WAVEFORM_NULL             ((USAGE) 0x1002)
#define HID_USAGE_HAPTICS_WAVEFORM_CLICK            ((USAGE) 0x1003)
#define HID_USAGE_HAPTICS_WAVEFORM_BUZZ             ((USAGE) 0x1004)
#define HID_USAGE_HAPTICS_WAVEFORM_RUMBLE           ((USAGE) 0x1005)
#define HID_USAGE_HAPTICS_WAVEFORM_PRESS            ((USAGE) 0x1006)
#define HID_USAGE_HAPTICS_WAVEFORM_RELEASE          ((USAGE) 0x1007)
#define HID_USAGE_HAPTICS_WAVEFORM_END              ((USAGE) 0x1FFF)
#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN     ((USAGE) 0x2000)
#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END       ((USAGE) 0x2FFF)

#define HID_USAGE_MS_BTH_HF_DIALNUMBER           ((USAGE) 0x21)
#define HID_USAGE_MS_BTH_HF_DIALMEMORY           ((USAGE) 0x22)

#ifdef __cplusplus
}
#endif

#endif /* __HIDUSAGE_H */
