Solaar/lib/hid_parser/data.py

1087 lines
56 KiB
Python

# SPDX-License-Identifier: MIT
import enum
from typing import Any
from typing import Dict
from typing import List
from typing import Optional
from typing import Tuple
class _DataMeta(type):
"""
This metaclass populates _single and _range, following the structure described bellow
The class should declare data as follows
MY_DATA_VALUE = 0x01, 'Data description'
or, for ranges,
MY_DATA_RANGE = 0x02, ..., 0x06, 'Data range description'
_single and _range will then be populated with
MY_DATA_VALUE = 0x01
_single[0x01] = ('Data description', None)
MY_DATA_RANGE = range(0x02, 0x06+1)
_range.append(tuple(0x02, 0x06, ('Data range description', None)))
As you can see, for single data insertions, the variable will be kept with
the first value of the tuple. Both single and range data insertions will
register the data into the correspondent data holders.
You can also define subdata,
MY_DATA_VALUE = 0x01, 'Data description', OTHER_DATA_TYPE
MY_DATA_RANGE = 0x02, ..., 0x06, 'Data range description', YET_OTHER_DATA_TYPE
Which will result in
MY_DATA_VALUE = 0x01
_single[0x01] = ('Data description', OTHER_DATA_TYPE)
_range.append(tuple(0x02, 0x06, ('Data range description', YET_OTHER_DATA_TYPE)))
This metaclass also does some verification to prevent duplicated data.
"""
def __new__(mcs, name: str, bases: Tuple[Any], dic: Dict[str, Any]): # type: ignore # noqa: C901
dic["_single"] = {}
dic["_range"] = []
# allow constructing data via a data dictionary as opposed to directly in the object body
if "data" in dic:
data = dic.pop("data")
else:
data = dic
for attr in data:
if not attr.startswith("_") and isinstance(data[attr], tuple):
if len(data[attr]) == 2 or len(data[attr]) == 4: # missing sub data
data[attr] = data[attr] + (None,)
if len(data[attr]) == 3: # single
num, desc, sub = data[attr]
if not isinstance(num, int):
raise TypeError(f"First element of '{attr}' should be an int")
if not isinstance(desc, str):
raise TypeError(f"Second element of '{attr}' should be a string")
if num in dic["_single"]:
raise ValueError(f"Duplicated value in '{attr}' ({num})")
for nmin, nmax, _ in dic["_range"]:
if nmin <= num <= nmax:
raise ValueError(f"Duplicated value in '{attr}' ({num})")
dic[attr] = num
dic["_single"][num] = desc, sub
elif len(data[attr]) == 5: # range
nmin, el, nmax, desc, sub = data[attr]
if not el == Ellipsis:
raise TypeError(f"Second element of '{attr}' should be an ellipsis (...)")
if not isinstance(nmin, int):
raise TypeError(f"First element of '{attr}' should be an int")
if not isinstance(nmax, int):
raise TypeError(f"Third element of '{attr}' should be an int")
if not isinstance(desc, str):
raise TypeError(f"Fourth element of '{attr}' should be a string")
for num in dic["_single"]:
if nmin <= num <= nmax:
raise ValueError(f"Duplicated value in '{attr}' ({num})")
dic[attr] = range(nmin, nmax + 1)
dic["_range"].append((nmin, nmax, (desc, sub)))
else:
raise ValueError(f"Invalid field: {attr}")
return super().__new__(mcs, name, bases, dic)
class _Data(metaclass=_DataMeta):
"""
This class provides a get_description method to get data out of _single and _range.
See the _DataMeta documentation for more information.
"""
_DATA = Tuple[str, Optional[Any]]
_single: Dict[int, _DATA]
_range: List[Tuple[int, int, _DATA]]
@classmethod
def _get_data(cls, num: Optional[int]) -> _DATA:
if num is None:
raise KeyError("Data index is not an int")
if num in cls._single:
return cls._single[num]
for nmin, nmax, data in cls._range:
if nmin <= num <= nmax:
return data
raise KeyError(f"Data not found for index 0x{num:02x} in {cls.__name__}")
@classmethod
def get_description(cls, num: Optional[int]) -> str:
return cls._get_data(num)[0]
@classmethod
def get_subdata(cls, num: Optional[int]) -> Any:
subdata = cls._get_data(num)[1]
if not subdata:
raise ValueError("Sub-data not available")
return subdata
class UsageTypes(enum.Enum):
# controls
LINEAR_CONTROL = LC = 0
ON_OFF_CONTROL = OOC = 1
MOMENTARY_CONTROL = MC = 2
ONE_SHOT_CONTROL = OSC = 3
RE_TRIGGER_CONTROL = RTC = 4
# data
SELECTOR = SEL = 5
STATIC_VALUE = SV = 6
STATIC_FLAG = SF = 7
DYNAMIC_FLAG = DF = 8
DYNAMIC_VALUE = DV = 9
# collection
NAMED_ARRAY = NARY = 10
COLLECTION_APPLICATION = CA = 11
COLLECTION_LOGICAL = CL = 12
COLLECTION_PHYSICAL = CP = 13
USAGE_SWITCH = US = 14
USAGE_MODIFIER = UM = 15
UsageTypesControls = (
UsageTypes.LINEAR_CONTROL,
UsageTypes.ON_OFF_CONTROL,
UsageTypes.ONE_SHOT_CONTROL,
UsageTypes.RE_TRIGGER_CONTROL,
)
UsageTypesData = (
UsageTypes.SELECTOR,
UsageTypes.STATIC_VALUE,
UsageTypes.STATIC_FLAG,
UsageTypes.DYNAMIC_VALUE,
UsageTypes.DYNAMIC_FLAG,
)
UsageTypesCollection = (
UsageTypes.NAMED_ARRAY,
UsageTypes.COLLECTION_APPLICATION,
UsageTypes.COLLECTION_LOGICAL,
UsageTypes.COLLECTION_PHYSICAL,
UsageTypes.USAGE_SWITCH,
UsageTypes.USAGE_MODIFIER,
)
class Collections(_Data):
PHYSICAL = 0x00, "Physical"
APPLICATION = 0x01, "Application"
LOGICAL = 0x02, "Logical"
REPORT = 0x03, "Report"
NAMED_ARRAY = 0x04, "Named Array"
USAGE_SWITCH = 0x05, "Usage Switch"
USAGE_MODIFIER = 0x06, "Usage Modifier"
VENDOR = 0x80, ..., 0xFF, "Vendor"
class GenericDesktopControls(_Data):
POINTER = 0x01, "Pointer", UsageTypes.CP
MOUSE = 0x02, "Mouse", UsageTypes.CA
JOYSTICK = 0x04, "Joystick", UsageTypes.CA
GAMEPAD = 0x05, "Game Pad", UsageTypes.CA
KEYBOARD = 0x06, "Keyboard", UsageTypes.CA
KEYPAD = 0x07, "Keypad", UsageTypes.CA
MULTI_AXIS_CONTROLLER = 0x08, "Multi-axis Controller", UsageTypes.CA
TABLET_PC_SYSTEM_CONTROLS = 0x09, "Tablet PC System Controls", UsageTypes.CA
X = 0x30, "X", UsageTypes.DV
Y = 0x31, "Y", UsageTypes.DV
Z = 0x32, "Z", UsageTypes.DV
RX = 0x33, "Rx", UsageTypes.DV
RY = 0x34, "Ry", UsageTypes.DV
RX = 0x35, "Rz", UsageTypes.DV
SLIDER = 0x36, "Slider", UsageTypes.DV
DIAL = 0x37, "Dial", UsageTypes.DV
WHEEL = 0x38, "Wheel", UsageTypes.DV
HAT_SWITCH = 0x39, "Hat switch", UsageTypes.DV
COUNTED_BUFFER = 0x3A, "Counted Buffer", UsageTypes.CL
BYTE_COUNT = 0x3B, "Byte Count", UsageTypes.DV
MOTION_WAKEUP = 0x3C, "Motion Wakeup", UsageTypes.OSC
START = 0x3D, "Start", UsageTypes.OOC
SELECT = 0x3E, "Select", UsageTypes.OOC
VX = 0x40, "Vx", UsageTypes.DV
VY = 0x41, "Vy", UsageTypes.DV
VZ = 0x42, "Vz", UsageTypes.DV
VBRX = 0x43, "Vbrx", UsageTypes.DV
VBRY = 0x44, "Vbry", UsageTypes.DV
VBRZ = 0x45, "Vbrz", UsageTypes.DV
VNO = 0x46, "Vno", UsageTypes.DV
FEATURE_NOTIFICATION = 0x47, "Feature Notification", (UsageTypes.DV, UsageTypes.DF)
RESOLUTION_MULTIPLIER = 0x48, "Resolution Multiplier", UsageTypes.DV
SYSTEM_CONTROL = 0x80, "System Control", UsageTypes.CA
SYSTEM_POWER_CONTROL = 0x81, "System Power Down", UsageTypes.OSC
SYSTEM_SLEEP = 0x82, "System Sleep", UsageTypes.OSC
SYSTEM_WAKE_UP = 0x83, "System Wake Up", UsageTypes.OSC
SYSTEM_CONTEXT_MENU = 0x84, "System Context Menu", UsageTypes.OSC
SYSTEM_MAIN_MENU = 0x85, "System Main Menu", UsageTypes.OSC
SYSTEM_APP_MENU = 0x86, "System App Menu", UsageTypes.OSC
SYSTEM_MENU_HELP = 0x87, "System Menu Help", UsageTypes.OSC
SYSTEM_MENU_EXIT = 0x88, "System Menu Exit", UsageTypes.OSC
SYSTEM_MENU_SELECT = 0x89, "System Menu Select", UsageTypes.OSC
SYSTEM_MENU_RIGHT = 0x8A, "System Menu Right", UsageTypes.RTC
SYSTEM_MENU_LEFT = 0x8B, "System Menu Left", UsageTypes.RTC
SYSTEM_MENU_UP = 0x8C, "System Menu Up", UsageTypes.RTC
SYSTEM_MENU_DOWN = 0x8D, "System Menu Down", UsageTypes.RTC
SYSTEM_COLD_RESTART = 0x8E, "System Cold Restart", UsageTypes.OSC
SYSTEM_WARM_RESTART = 0x8F, "System Warm Restart", UsageTypes.OSC
DPAD_UP = 0x90, "D-pad Up", UsageTypes.OOC
DPAD_DOWN = 0x91, "D-pad Down", UsageTypes.OOC
DPAD_RIGHT = 0x92, "D-pad Right", UsageTypes.OOC
DPAD_LEFT = 0x93, "D-pad Left", UsageTypes.OOC
SYSTEM_DOCK = 0xA0, "System Dock", UsageTypes.OSC
SYSTEM_UNDOCK = 0xA1, "System Undock", UsageTypes.OSC
SYSTEM_SETUP = 0xA2, "System Setup", UsageTypes.OSC
SYSTEM_BREAK = 0xA3, "System Break", UsageTypes.OSC
SYSTEM_DEBBUGER_BREAK = 0xA4, "System Debugger Break", UsageTypes.OSC
APPLICATION_BREAK = 0xA5, "Application Break", UsageTypes.OSC
APPLICATION_DEBBUGER_BREAK = 0xA6, "Application Debugger Break", UsageTypes.OSC
SYSTEM_SPEAKER_MUTE = 0xA7, "System Speaker Mute", UsageTypes.OSC
SYSTEM_HIBERNATE = 0xA8, "System Hibernate", UsageTypes.OSC
SYSTEM_DISPLAY_INVERT = 0xB0, "System Display Invert", UsageTypes.OSC
SYSTEM_DISPLAY_INTERNAL = 0xB1, "System Display Internal", UsageTypes.OSC
SYSTEM_DISPLAY_EXTERNAL = 0xB2, "System Display External", UsageTypes.OSC
SYSTEM_DISPLAY_BOTH = 0xB3, "System Display Both", UsageTypes.OSC
SYSTEM_DISPLAY_DUAL = 0xB4, "System Display Dual", UsageTypes.OSC
SYSTEM_DISPLAY_TOGGLE = 0xB5, "System Display Toggle Int/Ext", UsageTypes.OSC
SYSTEM_DISPLAY_SWAP = 0xB6, "System Display Swap Primary/Secondary", UsageTypes.OSC
SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7, "System Display LCD Autoscale", UsageTypes.OSC
class KeyboardKeypad(_Data):
NO_EVENT = 0x00, "No event indicated", UsageTypes.SEL
KEYBOARD_ERROR_ROLL_OVER = 0x01, "Keyboard ErrorRollOver", UsageTypes.SEL
KEYBOARD_POST = 0x02, "Keyboard POSTFail", UsageTypes.SEL
KEYBOARD_ERROR_UNDEFINED = 0x03, "Keyboard ErrorUndefined", UsageTypes.SEL
KEYBOARD_A = 0x04, "Keyboard a and A", UsageTypes.SEL
KEYBOARD_B = 0x05, "Keyboard b and B", UsageTypes.SEL
KEYBOARD_C = 0x06, "Keyboard c and C", UsageTypes.SEL
KEYBOARD_D = 0x07, "Keyboard d and D", UsageTypes.SEL
KEYBOARD_E = 0x08, "Keyboard e and E", UsageTypes.SEL
KEYBOARD_F = 0x09, "Keyboard f and F", UsageTypes.SEL
KEYBOARD_G = 0x0A, "Keyboard g and G", UsageTypes.SEL
KEYBOARD_H = 0x0B, "Keyboard h and H", UsageTypes.SEL
KEYBOARD_I = 0x0C, "Keyboard i and I", UsageTypes.SEL
KEYBOARD_J = 0x0D, "Keyboard j and J", UsageTypes.SEL
KEYBOARD_K = 0x0E, "Keyboard k and K", UsageTypes.SEL
KEYBOARD_L = 0x0F, "Keyboard l and L", UsageTypes.SEL
KEYBOARD_M = 0x10, "Keyboard m and M", UsageTypes.SEL
KEYBOARD_N = 0x11, "Keyboard n and N", UsageTypes.SEL
KEYBOARD_O = 0x12, "Keyboard o and O", UsageTypes.SEL
KEYBOARD_P = 0x13, "Keyboard p and P", UsageTypes.SEL
KEYBOARD_Q = 0x14, "Keyboard q and Q", UsageTypes.SEL
KEYBOARD_R = 0x15, "Keyboard r and R", UsageTypes.SEL
KEYBOARD_S = 0x16, "Keyboard s and S", UsageTypes.SEL
KEYBOARD_T = 0x17, "Keyboard t and T", UsageTypes.SEL
KEYBOARD_U = 0x18, "Keyboard u and U", UsageTypes.SEL
KEYBOARD_V = 0x19, "Keyboard v and V", UsageTypes.SEL
KEYBOARD_W = 0x1A, "Keyboard w and W", UsageTypes.SEL
KEYBOARD_X = 0x1B, "Keyboard x and X", UsageTypes.SEL
KEYBOARD_Y = 0x1C, "Keyboard y and Y", UsageTypes.SEL
KEYBOARD_Z = 0x1D, "Keyboard z and Z", UsageTypes.SEL
KEYBOARD_1 = 0x1E, "Keyboard 1 and !", UsageTypes.SEL
KEYBOARD_2 = 0x1F, "Keyboard 2 and @", UsageTypes.SEL
KEYBOARD_3 = 0x20, "Keyboard 3 and #", UsageTypes.SEL
KEYBOARD_4 = 0x21, "Keyboard 4 and $", UsageTypes.SEL
KEYBOARD_5 = 0x22, "Keyboard 5 and %", UsageTypes.SEL
KEYBOARD_6 = 0x23, "Keyboard 6 and ^", UsageTypes.SEL
KEYBOARD_7 = 0x24, "Keyboard 7 and &", UsageTypes.SEL
KEYBOARD_8 = 0x25, "Keyboard 8 and *", UsageTypes.SEL
KEYBOARD_9 = 0x26, "Keyboard 9 and (", UsageTypes.SEL
KEYBOARD_0 = 0x27, "Keyboard 0 and )", UsageTypes.SEL
KEYBOARD_ENTER = 0x28, "Keyboard Return (ENTER)", UsageTypes.SEL
KEYBOARD_ESCAPE = 0x29, "Keyboard ESCAPE", UsageTypes.SEL
KEYBOARD_DELETE = 0x2A, "Keyboard DELETE (Backspace)", UsageTypes.SEL
KEYBOARD_TAB = 0x2B, "Keyboard Tab", UsageTypes.SEL
KEYBOARD_SPACEBAR = 0x2C, "Keyboard Spacebar", UsageTypes.SEL
KEYBOARD_MINUS = 0x2D, "Keyboard - and (underscore)", UsageTypes.SEL
KEYBOARD_PLUS = 0x2E, "Keyboard = and +", UsageTypes.SEL
KEYBOARD_LEFT_BRACKET = 0x2F, "Keyboard [ and {", UsageTypes.SEL
KEYBOARD_RIGHT_BRACKET = 0x30, "Keyboard ] and }", UsageTypes.SEL
KEYBOARD_BACKSLASH = 0x31, "Keyboard \\ and |", UsageTypes.SEL
KEYBOARD_CARDINAL = 0x32, "Keyboard Non-US # and ~", UsageTypes.SEL
KEYBOARD_SEMICOLON = 0x33, "Keyboard ; and :", UsageTypes.SEL
KEYBOARD_QUOTE = 0x34, "Keyboard ' and \"", UsageTypes.SEL
KEYBOARD_GRAVE = 0x35, "Keyboard Grave Accent and Tilde", UsageTypes.SEL
KEYBOARD_COMMA = 0x36, "Keyboard , and <", UsageTypes.SEL
KEYBOARD_DOT = 0x37, "Keyboard . and >", UsageTypes.SEL
KEYBOARD_SLASH = 0x38, "Keyboard / and ?", UsageTypes.SEL
KEYBOARD_CAPS_LOCK = 0x39, "Keyboard Caps Lock", UsageTypes.SEL
KEYBOARD_F1 = 0x3A, "Keyboard F1", UsageTypes.SEL
KEYBOARD_F2 = 0x3B, "Keyboard F2", UsageTypes.SEL
KEYBOARD_F3 = 0x3C, "Keyboard F3", UsageTypes.SEL
KEYBOARD_F4 = 0x3D, "Keyboard F4", UsageTypes.SEL
KEYBOARD_F5 = 0x3E, "Keyboard F5", UsageTypes.SEL
KEYBOARD_F6 = 0x3F, "Keyboard F6", UsageTypes.SEL
KEYBOARD_F7 = 0x40, "Keyboard F7", UsageTypes.SEL
KEYBOARD_F8 = 0x41, "Keyboard F8", UsageTypes.SEL
KEYBOARD_F9 = 0x42, "Keyboard F9", UsageTypes.SEL
KEYBOARD_F10 = 0x43, "Keyboard F10", UsageTypes.SEL
KEYBOARD_F11 = 0x44, "Keyboard F11", UsageTypes.SEL
KEYBOARD_F12 = 0x45, "Keyboard F12", UsageTypes.SEL
KEYBOARD_PRINTSCREEN = 0x46, "Keyboard PrintScreen", UsageTypes.SEL
KEYBOARD_SCROLL_LOCK = 0x47, "Keyboard Scroll Lock", UsageTypes.SEL
KEYBOARD_PAUSE = 0x48, "Keyboard Pause", UsageTypes.SEL
KEYBOARD_INSERT = 0x49, "Keyboard Insert", UsageTypes.SEL
KEYBOARD_HOME = 0x4A, "Keyboard Home", UsageTypes.SEL
KEYBOARD_PAGE_UP = 0x4B, "Keyboard PageUp", UsageTypes.SEL
KEYBOARD_DELETE_FORWARD = 0x4C, "Keyboard Delete Forward", UsageTypes.SEL
KEYBOARD_END = 0x4D, "Keyboard End", UsageTypes.SEL
KEYBOARD_PAGE_DOWN = 0x4E, "Keyboard PageDown", UsageTypes.SEL
KEYBOARD_RIGHT_ARROW = 0x4F, "Keyboard RightArrow", UsageTypes.SEL
KEYBOARD_LEFT_ARROW = 0x50, "Keyboard LeftArrow", UsageTypes.SEL
KEYBOARD_UP_ARROW = 0x51, "Keyboard DownArrow", UsageTypes.SEL
KEYBOARD_DOWN_ARROW = 0x52, "Keyboard UpArrow", UsageTypes.SEL
KEYBOARD_NUM_LOCK = 0x53, "Keypad Num Lock and Clear", UsageTypes.SEL
KEYPAD_SLASH = 0x54, "Keypad /", UsageTypes.SEL
KEYPAD_ASTERISK = 0x55, "Keypad *", UsageTypes.SEL
KEYPAD_MINUS = 0x56, "Keypad -", UsageTypes.SEL
KEYPAD_PLUS = 0x57, "Keypad +", UsageTypes.SEL
KEYPAD_ENTER = 0x58, "Keypad ENTER", UsageTypes.SEL
KEYPAD_1 = 0x59, "Keypad 1 and End", UsageTypes.SEL
KEYPAD_2 = 0x5A, "Keypad 2 and Down Arrow", UsageTypes.SEL
KEYPAD_3 = 0x5B, "Keypad 3 and PageDn", UsageTypes.SEL
KEYPAD_4 = 0x5C, "Keypad 4 and Left Arrow", UsageTypes.SEL
KEYPAD_5 = 0x5D, "Keypad 5", UsageTypes.SEL
KEYPAD_6 = 0x5E, "Keypad 6 and Right Arrow", UsageTypes.SEL
KEYPAD_7 = 0x5F, "Keypad 7 and Home", UsageTypes.SEL
KEYPAD_8 = 0x60, "Keypad 8 and Up Arrow", UsageTypes.SEL
KEYPAD_9 = 0x61, "Keypad 9 and PageUp", UsageTypes.SEL
KEYPAD_0 = 0x62, "Keypad 0 and Insert", UsageTypes.SEL
KEYPAD_DOT = 0x63, "Keypad . and Delete", UsageTypes.SEL
KEYPAD_BACKSLASH = 0x64, "Keyboard Non-US \\ and |", UsageTypes.SEL
KEYPAD_APPLICATION = 0x65, "Keyboard Application", UsageTypes.SEL
KEYPAD_POWER = 0x66, "Keyboard Power", UsageTypes.SEL
KEYPAD_EQUALS = 0x67, "Keypad =", UsageTypes.SEL
KEYBOARD_F13 = 0x68, "Keyboard F13", UsageTypes.SEL
KEYBOARD_F14 = 0x69, "Keyboard F14", UsageTypes.SEL
KEYBOARD_F15 = 0x6A, "Keyboard F15", UsageTypes.SEL
KEYBOARD_F16 = 0x6B, "Keyboard F16", UsageTypes.SEL
KEYBOARD_F17 = 0x6C, "Keyboard F17", UsageTypes.SEL
KEYBOARD_F18 = 0x6D, "Keyboard F18", UsageTypes.SEL
KEYBOARD_F19 = 0x6E, "Keyboard F19", UsageTypes.SEL
KEYBOARD_F20 = 0x6F, "Keyboard F20", UsageTypes.SEL
KEYBOARD_F21 = 0x70, "Keyboard F21", UsageTypes.SEL
KEYBOARD_F22 = 0x71, "Keyboard F22", UsageTypes.SEL
KEYBOARD_F23 = 0x72, "Keyboard F23", UsageTypes.SEL
KEYBOARD_F24 = 0x73, "Keyboard F24", UsageTypes.SEL
KEYBOARD_EXECUTE = 0x74, "Keyboard Execute", UsageTypes.SEL
KEYBOARD_HELP = 0x75, "Keyboard Help", UsageTypes.SEL
KEYBOARD_MENU = 0x76, "Keyboard Menu", UsageTypes.SEL
KEYBOARD_SELECT = 0x77, "Keyboard Select", UsageTypes.SEL
KEYBOARD_STOP = 0x78, "Keyboard Stop", UsageTypes.SEL
KEYBOARD_AGAIN = 0x79, "Keyboard Again", UsageTypes.SEL
KEYBOARD_UNDO = 0x7A, "Keyboard Undo", UsageTypes.SEL
KEYBOARD_CUT = 0x7B, "Keyboard Cut", UsageTypes.SEL
KEYBOARD_COPY = 0x7C, "Keyboard Copy", UsageTypes.SEL
KEYBOARD_PASTE = 0x7D, "Keyboard Paste", UsageTypes.SEL
KEYBOARD_FIND = 0x7E, "Keyboard Find", UsageTypes.SEL
KEYBOARD_MUTE = 0x7F, "Keyboard Mute", UsageTypes.SEL
KEYBOARD_VOLUME_UP = 0x80, "Keyboard Volume Up", UsageTypes.SEL
KEYBOARD_VOLUME_DOWN = 0x81, "Keyboard Volume Down", UsageTypes.SEL
KEYBOARD_LOCKING_CAPS_LOCK = 0x82, "Keyboard Locking Caps Lock", UsageTypes.SEL
KEYBOARD_LOCKING_NUM_LOCK = 0x83, "Keyboard Locking Num Lock", UsageTypes.SEL
KEYBOARD_LOCKING_SCROLL_LOCK = 0x84, "Keyboard Locking Scroll Lock", UsageTypes.SEL
KEYPAD_COMMA = 0x85, "Keypad Comma", UsageTypes.SEL
KEYPAD_EQUALS_SIGN = 0x86, "Keypad Equal Sign", UsageTypes.SEL
KEYBOARD_INTERNATIONAL1 = 0x87, "Keyboard International1", UsageTypes.SEL
KEYBOARD_INTERNATIONAL2 = 0x88, "Keyboard International2", UsageTypes.SEL
KEYBOARD_INTERNATIONAL3 = 0x89, "Keyboard International3", UsageTypes.SEL
KEYBOARD_INTERNATIONAL4 = 0x8A, "Keyboard International4", UsageTypes.SEL
KEYBOARD_INTERNATIONAL5 = 0x8B, "Keyboard International5", UsageTypes.SEL
KEYBOARD_INTERNATIONAL6 = 0x8C, "Keyboard International6", UsageTypes.SEL
KEYBOARD_INTERNATIONAL7 = 0x8D, "Keyboard International7", UsageTypes.SEL
KEYBOARD_INTERNATIONAL8 = 0x8E, "Keyboard International8", UsageTypes.SEL
KEYBOARD_INTERNATIONAL9 = 0x8F, "Keyboard International9", UsageTypes.SEL
KEYBOARD_LANG1 = 0x90, "Keyboard LANG1", UsageTypes.SEL
KEYBOARD_LANG2 = 0x91, "Keyboard LANG2", UsageTypes.SEL
KEYBOARD_LANG3 = 0x92, "Keyboard LANG3", UsageTypes.SEL
KEYBOARD_LANG4 = 0x93, "Keyboard LANG4", UsageTypes.SEL
KEYBOARD_LANG5 = 0x94, "Keyboard LANG5", UsageTypes.SEL
KEYBOARD_LANG6 = 0x95, "Keyboard LANG6", UsageTypes.SEL
KEYBOARD_LANG7 = 0x96, "Keyboard LANG7", UsageTypes.SEL
KEYBOARD_LANG8 = 0x97, "Keyboard LANG8", UsageTypes.SEL
KEYBOARD_LANG9 = 0x98, "Keyboard LANG9", UsageTypes.SEL
KEYBOARD_ALTERNATE_ERASE = 0x99, "Keyboard Alternate Erase", UsageTypes.SEL
KEYBOARD_SYSREQ_ATTENTION = 0x9A, "Keyboard SysReq/Attention", UsageTypes.SEL
KEYBOARD_CANCEL = 0x9B, "Keyboard Cancel", UsageTypes.SEL
KEYBOARD_CLEAR = 0x9C, "Keyboard Clear", UsageTypes.SEL
KEYBOARD_PRIOR = 0x9D, "Keyboard Prior", UsageTypes.SEL
KEYBOARD_RETURN = 0x9E, "Keyboard Return", UsageTypes.SEL
KEYBOARD_SEPARATOE = 0x9F, "Keyboard Separator", UsageTypes.SEL
KEYBOARD_OUT = 0xA0, "Keyboard Out", UsageTypes.SEL
KEYBOARD_OPER = 0xA1, "Keyboard Oper", UsageTypes.SEL
KEYBOARD_CLEAR_AGAIN = 0xA2, "Keyboard Clear/Again", UsageTypes.SEL
KEYBOARD_CRSEL_PROPS = 0xA3, "Keyboard CrSel/Props", UsageTypes.SEL
KEYBOARD_EXSELL = 0xA4, "Keyboard ExSel", UsageTypes.SEL
KEYPAD_ZERO_ZERO = 0xB0, "Keypad 00", UsageTypes.SEL
KEYPAD_ZERO_ZERO_ZERO = 0xB1, "Keypad 000", UsageTypes.SEL
THOUSANDS_SEPARATOR = 0xB2, "Thousands Separator", UsageTypes.SEL
DECIMAL_SEPARATOR = 0xB3, "Decimal Separator", UsageTypes.SEL
CURRENCY_UNIT = 0xB4, "Currency Unit", UsageTypes.SEL
CURRENCY_SUBUNIT = 0xB5, "Currency Sub-unit", UsageTypes.SEL
KEYPAD_LEFT_PARENTHESIS = 0xB6, "Keypad (", UsageTypes.SEL
KEYPAD_RIGHT_PARENTHESIS = 0xB7, "Keypad )", UsageTypes.SEL
KEYPAD_LEFT_CURLY_BRACKET = 0xB8, "Keypad {", UsageTypes.SEL
KEYPAD_RIGHT_CURLY_BRACKET = 0xB9, "Keypad }", UsageTypes.SEL
KEYPAD_TAB = 0xBA, "Keypad Tab", UsageTypes.SEL
KEYPAD_BACKSPACE = 0xBB, "Keypad Backspace", UsageTypes.SEL
KEYPAD_A = 0xBC, "Keypad A", UsageTypes.SEL
KEYPAD_B = 0xBD, "Keypad B", UsageTypes.SEL
KEYPAD_C = 0xBE, "Keypad C", UsageTypes.SEL
KEYPAD_D = 0xBF, "Keypad D", UsageTypes.SEL
KEYPAD_E = 0xC0, "Keypad E", UsageTypes.SEL
KEYPAD_F = 0xC1, "Keypad F", UsageTypes.SEL
KEYPAD_XOR = 0xC2, "Keypad XOR", UsageTypes.SEL
KEYPAD_AND = 0xC3, "Keypad ^", UsageTypes.SEL
KEYPAD_PERCENTAGE = 0xC4, "Keypad %", UsageTypes.SEL
KEYPAD_LESS_THAN = 0xC5, "Keypad <", UsageTypes.SEL
KEYPAD_MORE_THAN = 0xC6, "Keypad >", UsageTypes.SEL
KEYPAD_AMPERSAND = 0xC7, "Keypad &", UsageTypes.SEL
KEYPAD_2_AMPERSAND = 0xC8, "Keypad &&", UsageTypes.SEL
KEYPAD_VERTICAL_BAR = 0xC9, "Keypad |", UsageTypes.SEL
KEYPAD_2_VERTICAL_BAR = 0xCA, "Keypad ||", UsageTypes.SEL
KEYPAD_COLON = 0xCB, "Keypad :", UsageTypes.SEL
KEYPAD_CARDINAL = 0xCC, "Keypad #", UsageTypes.SEL
KEYPAD_SPACE = 0xCD, "Keypad Space", UsageTypes.SEL
KEYPAD_AT = 0xCE, "Keypad @", UsageTypes.SEL
KEYPAD_EXCLAMATION = 0xCF, "Keypad !", UsageTypes.SEL
KEYPAD_MEMORY_STORE = 0xD0, "Keypad Memory Store", UsageTypes.SEL
KEYPAD_MEMORY_RECALL = 0xD1, "Keypad Memory Recall", UsageTypes.SEL
KEYPAD_MEMORY_CLEAR = 0xD2, "Keypad Memory Clear", UsageTypes.SEL
KEYPAD_MEMORY_ADD = 0xD3, "Keypad Memory Add", UsageTypes.SEL
KEYPAD_MEMORY_SUBTRACT = 0xD4, "Keypad Memory Subtract", UsageTypes.SEL
KEYPAD_MEMORY_MULTIPLY = 0xD5, "Keypad Memory Multiply", UsageTypes.SEL
KEYPAD_MEMORY_DIVIDE = 0xD6, "Keypad Memory Divide", UsageTypes.SEL
KEYPAD_PLUS_MINUS = 0xD7, "Keypad +/-", UsageTypes.SEL
KEYPAD_CLEAR = 0xD8, "Keypad Clear", UsageTypes.SEL
KEYPAD_CLEAR_ENTRY = 0xD9, "Keypad Clear Entry", UsageTypes.SEL
KEYPAD_BINARY = 0xDA, "Keypad Binary", UsageTypes.SEL
KEYPAD_OCTAL = 0xDB, "Keypad Octal", UsageTypes.SEL
KEYPAD_DECIMAL = 0xDC, "Keypad Decimal", UsageTypes.SEL
KEYPAD_HEXADECIMAL = 0xDD, "Keypad Hexadecimal", UsageTypes.DV
KEYBOARD_LEFT_CONTROL = 0xE0, "Keyboard LeftControl", UsageTypes.DV
KEYBOARD_LEFT_SHIFT = 0xE1, "Keyboard LeftShift", UsageTypes.DV
KEYBOARD_LEFT_ALT = 0xE2, "Keyboard LeftAlt", UsageTypes.DV
KEYBOARD_LEFT_GUI = 0xE3, "Keyboard Left GUI", UsageTypes.DV
KEYBOARD_RIGHT_CONTROL = 0xE4, "Keyboard RightControl", UsageTypes.DV
KEYBOARD_RIGHT_SHIFT = 0xE5, "Keyboard RightShift", UsageTypes.DV
KEYBOARD_RIGHT_ALT = 0xE6, "Keyboard RightAlt", UsageTypes.DV
KEYBOARD_RIGHT_GUI = 0xE7, "Keyboard Right GUI", UsageTypes.DV
class Led(_Data):
NUM_LOCK = 0x01, "Num Lock", UsageTypes.OOC
CAPS_LOCK = 0x02, "Caps Lock", UsageTypes.OOC
SCROLL_LOCK = 0x03, "Scroll Lock", UsageTypes.OOC
COMPOSE = 0x04, "Compose", UsageTypes.OOC
KANA = 0x05, "Kana", UsageTypes.OOC
POWER = 0x06, "Power", UsageTypes.OOC
SHIFT = 0x07, "Shift", UsageTypes.OOC
DO_NOT_DISTURB = 0x08, "Do Not Disturb", UsageTypes.OOC
MUTE = 0x09, "Mute", UsageTypes.OOC
TONE_ENABLE = 0x0A, "Tone Enable", UsageTypes.OOC
HIGH_CUT_FILTER = 0x0B, "High Cut Filter", UsageTypes.OOC
LOW_CUT_FILTER = 0x0C, "Low Cut Filter", UsageTypes.OOC
EQUALIZER_ENABLE = 0x0D, "Equalizer Enable", UsageTypes.OOC
SOUND_FIELD_ON = 0x0E, "Sound Field On", UsageTypes.OOC
SURROUND_ON = 0x0F, "Surround On", UsageTypes.OOC
REPEAR = 0x10, "Repeat", UsageTypes.OOC
STEREO = 0x11, "Stereo", UsageTypes.OOC
SAMPLING_RATE_DETECT = 0x12, "Sampling Rate Detect", UsageTypes.OOC
SPINNING = 0x13, "Spinning", UsageTypes.OOC
CAV = 0x14, "CAV", UsageTypes.OOC
CLV = 0x15, "CLV", UsageTypes.OOC
RECORDING_FORMAT_DETECT = 0x16, "Recording Format Detect", UsageTypes.OOC
OFF_HOOK = 0x17, "Off-Hook", UsageTypes.OOC
RING = 0x18, "Ring", UsageTypes.OOC
MESSAGE_WAITING = 0x19, "Message Waiting", UsageTypes.OOC
DATA_MODE = 0x1A, "Data Mode", UsageTypes.OOC
BATTERY_OPERATION = 0x1B, "Battery Operation", UsageTypes.OOC
BATTERY_OK = 0x1C, "Battery OK", UsageTypes.OOC
BATTERY_LOW = 0x1D, "Battery Low", UsageTypes.OOC
SPEAKER = 0x1E, "Speaker", UsageTypes.OOC
HEAD_SET = 0x1F, "Head Set", UsageTypes.OOC
HOLD = 0x20, "Hold", UsageTypes.OOC
MICROPHONE = 0x21, "Microphone", UsageTypes.OOC
COVERAGE = 0x22, "Coverage", UsageTypes.OOC
NIGHT_MODE = 0x23, "Night Mode", UsageTypes.OOC
SEND_CALLS = 0x24, "Send Calls", UsageTypes.OOC
CALL_PICKUP = 0x25, "Call Pickup", UsageTypes.OOC
CONFERENCE = 0x26, "Conference", UsageTypes.OOC
STAND_BY = 0x27, "Stand-by", UsageTypes.OOC
CAMERA_ON = 0x28, "Camera On", UsageTypes.OOC
CAMERA_OFF = 0x29, "Camera Off", UsageTypes.OOC
ON_LINE = 0x2A, "On-Line", UsageTypes.OOC
OFF_LINE = 0x2B, "Off-Line", UsageTypes.OOC
BUSY = 0x2C, "Busy", UsageTypes.OOC
READY = 0x2D, "Ready", UsageTypes.OOC
PAPER_OUT = 0x2E, "Paper-Out", UsageTypes.OOC
PAPER_JAM = 0x2F, "Paper-Jam", UsageTypes.OOC
REMOTE = 0x30, "Remote", UsageTypes.OOC
FORWARD = 0x31, "Forward", UsageTypes.OOC
REVERSE = 0x32, "Reverse", UsageTypes.OOC
STOP = 0x33, "Stop", UsageTypes.OOC
REWIND = 0x34, "Rewind", UsageTypes.OOC
FAST_FORWARD = 0x35, "Fast Forward", UsageTypes.OOC
PLAY = 0x36, "Play", UsageTypes.OOC
PAUSE = 0x37, "Pause", UsageTypes.OOC
RECORD = 0x38, "Record", UsageTypes.OOC
ERROR = 0x39, "Error", UsageTypes.OOC
USAGE_SELECTED_INDICATOR = 0x3A, "Usage Selected Indicator", UsageTypes.US
USAGE_IN_USE_INDICATOR = 0x3B, "Usage In Use Indicator", UsageTypes.US
USAGE_MULTI_MODE_INDICATOR = 0x3C, "Usage Multi Mode Indicator", UsageTypes.UM
INDICATOR_ON = 0x3D, "Indicator On", UsageTypes.SEL
INDICATOR_FLASH = 0x3E, "Indicator Flash", UsageTypes.SEL
INDICATOR_SLOW_BLINK = 0x3F, "Indicator Slow Blink", UsageTypes.SEL
INDICATOR_FAST_BLINK = 0x40, "Indicator Fast Blink", UsageTypes.SEL
INDICATOR_OFF = 0x41, "Indicator Off", UsageTypes.SEL
FLASH_ON_TIME = 0x42, "Flash On Time", UsageTypes.DV
SLOW_BLINK_ON_TIME = 0x43, "Slow Blink On Time", UsageTypes.DV
SLOW_BLINK_OFF_TIME = 0x44, "Slow Blink Off Time", UsageTypes.DV
FAST_BLINK_ON_TIME = 0x45, "Fast Blink On Time", UsageTypes.DV
FAST_BLINK_OFF_TIME = 0x46, "Fast Blink Off Time", UsageTypes.DV
USAGE_INDICATOR_COLOR = 0x47, "Usage Indicator Color", UsageTypes.UM
INDICATOR_RED = 0x48, "Indicator Red", UsageTypes.SEL
INDICATOR_GREEN = 0x49, "Indicator Green", UsageTypes.SEL
INDICATOR_AMBER = 0x4A, "Indicator Amber", UsageTypes.SEL
GENERIC_INDICATOR = 0x4B, "Generic Indicator", UsageTypes.OOC
SYSTEM_SUSPEND = 0x4C, "System Suspend", UsageTypes.OOC
EXTERNAL_POWER_CONNECTED = 0x4D, "External Power Connected", UsageTypes.OOC
class Button(_Data):
_USAGE_TYPES = (
UsageTypes.SEL,
UsageTypes.OOC,
UsageTypes.MC,
UsageTypes.OSC,
)
data = {
"NO_BUTTON": (0x0000, "Button 1 (primary/trigger)", _USAGE_TYPES),
"BUTTON_1": (0x0001, "Button 1 (primary/trigger)", _USAGE_TYPES),
"BUTTON_2": (0x0002, "Button 2 (secondary)", _USAGE_TYPES),
"BUTTON_3": (0x0003, "Button 3 (tertiary)", _USAGE_TYPES),
}
for _i in range(0x0004, 0xFFFF):
data[f"BUTTON_{_i}"] = _i, f"Button {_i}", _USAGE_TYPES
class Consumer(_Data):
CONSUMER_CONTROL = 0x0001, "Consumer Control", UsageTypes.CA
NUMERIC_KEY_PAD = 0x0002, "Numeric Key Pad", UsageTypes.NARY
PROGRAMMABLE_BUTTONS = 0x0003, "Programmable Buttons", UsageTypes.NARY
MICROPHONE = 0x0004, "Microphone", UsageTypes.CA
HEADPHONE = 0x0005, "Headphone", UsageTypes.CA
GRAPHIC_EQUALIZER = 0x0006, "Graphic Equalizer", UsageTypes.CA
PLUS10 = 0x0020, "+10", UsageTypes.OSC
PULS100 = 0x0021, "+100", UsageTypes.OSC
AM_PM = 0x0022, "AM/PM", UsageTypes.OSC
POWER = 0x0030, "Power", UsageTypes.OOC
REST = 0x0031, "Reset", UsageTypes.OSC
SLEEP = 0x0032, "Sleep", UsageTypes.OSC
SLEEP_AFTER = 0x0033, "Sleep After", UsageTypes.OSC
SLEEP_MODE = 0x0034, "Sleep Mode", UsageTypes.RTC
ILLUMINATION = 0x0035, "Illumination", UsageTypes.OOC
FUNCTION_BUTTONS = 0x0036, "Function Buttons", UsageTypes.NARY
MENU = 0x0040, "Menu", UsageTypes.OOC
MENU_PICK = 0x0041, "Menu Pick", UsageTypes.OSC
MENU_UP = 0x0042, "Menu Up", UsageTypes.OSC
MENU_DOWN = 0x0043, "Menu Down", UsageTypes.OSC
MENU_LEFT = 0x0044, "Menu Left", UsageTypes.OSC
MENU_RIGHT = 0x0045, "Menu Right", UsageTypes.OSC
MENU_ESCAPE = 0x0046, "Menu Escape", UsageTypes.OSC
MENU_VALUE_INCREASE = 0x0047, "Menu Value Increase", UsageTypes.OSC
MENU_VALUE_DECREASE = 0x0048, "Menu Value Decrease", UsageTypes.OSC
DATA_ON_SCREEN = 0x0060, "Data On Screen", UsageTypes.OOC
CLOSED_CAPTION = 0x0061, "Closed Caption", UsageTypes.OOC
CLOSED_CAPTION_SELECT = 0x0062, "Closed Caption Select", UsageTypes.OOC
VCR_TV = 0x0063, "VCR/TV", UsageTypes.OSC
BROADCAST_MODE = 0x0064, "Broadcast Mode", UsageTypes.OOC
SNAPSHOT = 0x0065, "Snapshot", UsageTypes.OOC
STILL = 0x0066, "Still", UsageTypes.OOC
SELECTION = 0x0080, "Selection", UsageTypes.NARY
ASSIGN_SELECTION = 0x0081, "Assign Selection", UsageTypes.OSC
MODE_STEP = 0x0082, "Mode Step", UsageTypes.OSC
RECALL_LAST = 0x0083, "Recall Last", UsageTypes.OSC
ENTER_CHANNEL = 0x0084, "Enter Channel", UsageTypes.OSC
ORDER_MOVIE = 0x0085, "Order Movie", UsageTypes.OSC
CHANNEL = 0x0086, "Channel", UsageTypes.LC
MEDIA_SELECTION = 0x0087, "Media Selection", UsageTypes.NARY
MEDIA_SELECT_COMPUTER = 0x0088, "Media Select Computer", UsageTypes.SEL
MEDIA_SELECT_TV = 0x0089, "Media Select TV", UsageTypes.SEL
MEDIA_SELECT_WWW = 0x008A, "Media Select WWW", UsageTypes.SEL
MEDIA_SELECT_DVD = 0x008B, "Media Select DVD", UsageTypes.SEL
MEDIA_SELECT_TELEPHONE = 0x008C, "Media Select Telephone", UsageTypes.SEL
MEDIA_SELECT_PROGRAM_GUIDE = 0x008D, "Media Select Program Guide", UsageTypes.SEL
MEDIA_SELECT_VIDEO_PHONE = 0x008E, "Media Select Video Phone", UsageTypes.SEL
MEDIA_SELECT_GAMES = 0x008F, "Media Select Games", UsageTypes.SEL
MEDIA_SELECT_MESSAGES = 0x0090, "Media Select Messages", UsageTypes.SEL
MEDIA_SELECT_CD = 0x0091, "Media Select CD ", UsageTypes.SEL
MEDIA_SELECT_VCR = 0x0092, "Media Select VCR", UsageTypes.SEL
MEDIA_SELECT_TUNER = 0x0093, "Media Select Tuner", UsageTypes.SEL
QUIT = 0x0094, "Quit", UsageTypes.OSC
HELP = 0x0095, "Help", UsageTypes.OOC
MEDIA_SELECT_TAPE = 0x0096, "Media Select Tape", UsageTypes.SEL
MEDIA_SELECT_CABLE = 0x0097, "Media Select Cable", UsageTypes.SEL
MEDIA_SELECT_SATELLITE = 0x0098, "Media Select Satellite", UsageTypes.SEL
MEDIA_SELECT_SECURITY = 0x0099, "Media Select Security", UsageTypes.SEL
MEDIA_SELECT_HOME = 0x009A, "Media Select Home", UsageTypes.SEL
MEDIA_SELECT_CALL = 0x009B, "Media Select Call", UsageTypes.SEL
CHANNEL_INCREMENT = 0x009C, "Channel Increment", UsageTypes.OSC
CHANNEL_DECREMENT = 0x009D, "Channel Decrement", UsageTypes.OSC
MEDIA_SELECT_SAP = 0x009E, "Media Select SAP", UsageTypes.SEL
VCR_PLUS = 0x00A0, "VCR Plus", UsageTypes.OSC
ONCE = 0x00A1, "Once", UsageTypes.OSC
DAILY = 0x00A2, "Daily", UsageTypes.OSC
WEEKLY = 0x00A3, "Weekly", UsageTypes.OSC
MONTHLY = 0x00A4, "Monthly", UsageTypes.OSC
PLAY = 0x00B0, "Play", UsageTypes.OOC
PAUSE = 0x00B1, "Pause", UsageTypes.OOC
RECORD = 0x00B2, "Record", UsageTypes.OOC
FAST_FORWARD = 0x00B3, "Fast Forward", UsageTypes.OOC
REWIND = 0x00B4, "Rewind", UsageTypes.OOC
SCAN_NEXT_TRACK = 0x00B5, "Scan Next Track", UsageTypes.OSC
SCAN_PREVIOUS_TRACK = 0x00B6, "Scan Previous Track", UsageTypes.OSC
STOP = 0x00B7, "Stop", UsageTypes.OSC
EJECT = 0x00B8, "Eject", UsageTypes.OSC
RANDOM_PLAY = 0x00B9, "Random Play", UsageTypes.OOC
SELECT_DISC = 0x00BA, "Select Disc", UsageTypes.NARY
ENTER_DISC = 0x00BB, "Enter Disc", UsageTypes.MC
REPEAT = 0x00BC, "Repeat", UsageTypes.OSC
TRACKING = 0x00BD, "Tracking", UsageTypes.LC
TRACK_NORMAL = 0x00BE, "Track Normal", UsageTypes.OSC
SLOW_TRACKING = 0x00BF, "Slow Tracking", UsageTypes.LC
FRAME_FORWARD = 0x00C0, "Frame Forward", UsageTypes.RTC
FRAME_BACK = 0x00C1, "Frame Back", UsageTypes.RTC
MARK = 0x00C2, "Mark", UsageTypes.OSC
CLEAR_MARK = 0x00C3, "Clear Mark", UsageTypes.OSC
REPEAT_FROM_MARK = 0x00C4, "Repeat From Mark", UsageTypes.OOC
RETURN_TO_MARK = 0x00C5, "Return To Mark", UsageTypes.OSC
SEARCH_MARK_FORWARD = 0x00C6, "Search Mark Forward", UsageTypes.OSC
SEARCH_MARK_BACKWARDS = 0x00C7, "Search Mark Backwards", UsageTypes.OSC
COUNTER_RESET = 0x00C8, "Counter Reset", UsageTypes.OSC
SHOW_COUNTER = 0x00C9, "Show Counter", UsageTypes.OSC
TRACKING_INCREMENT = 0x00CA, "Tracking Increment", UsageTypes.RTC
TRACKING_DECREMENT = 0x00CB, "Tracking Decrement", UsageTypes.RTC
STOP_EJECT = 0x00CC, "Stop/Eject", UsageTypes.OSC
PLAY_PAUSE = 0x00CD, "Play/Pause", UsageTypes.OSC
PLAY_SKIP = 0x00CE, "Play/Skip", UsageTypes.OSC
VOLUME = 0x00E0, "Volume", UsageTypes.LC
BALANCE = 0x00E1, "Balance", UsageTypes.LC
MUTE = 0x00E2, "Mute", UsageTypes.OOC
BASS = 0x00E3, "Bass", UsageTypes.LC
TREBLE = 0x00E4, "Treble", UsageTypes.LC
BASS_BOOST = 0x00E5, "Bass Boost", UsageTypes.OOC
SURROUND_MODE = 0x00E6, "Surround Mode", UsageTypes.OSC
LOUDNESS = 0x00E7, "Loudness", UsageTypes.OOC
MPX = 0x00E8, "MPX", UsageTypes.OOC
VOLUME_INCREMENT = 0x00E9, "Volume Increment", UsageTypes.RTC
VOLUME_DECREMENT = 0x00EA, "Volume Decrement", UsageTypes.RTC
SPEED_SELECT = 0x00F0, "Speed Select", UsageTypes.OSC
PLAYBACK_SPEED = 0x00F1, "Playback Speed", UsageTypes.NARY
STANDARD_PLAY = 0x00F2, "Standard Play", UsageTypes.SEL
LONG_PLAY = 0x00F3, "Long Play", UsageTypes.SEL
EXTENDED_PLAY = 0x00F4, "Extended Play", UsageTypes.SEL
SLOW = 0x00F5, "Slow", UsageTypes.OSC
FAN_ENABLE = 0x0100, "Fan Enable", UsageTypes.OOC
FAN_SPEED = 0x0101, "Fan Speed", UsageTypes.LC
LIGHT_ENABLE = 0x0102, "Light Enable", UsageTypes.OOC
LIGHT_ILLUMINATION_LEVEL = 0x0103, "Light Illumination Level", UsageTypes.LC
CLIMATE_CONTROL_ENABLE = 0x0104, "Climate Control Enable", UsageTypes.OOC
ROOM_TEMPERATURE = 0x0105, "Room Temperature", UsageTypes.LC
SECURITY_ENABLE = 0x0106, "Security Enable", UsageTypes.OOC
FIRE_ALARM = 0x0107, "Fire Alarm", UsageTypes.OSC
POLICE_ALARM = 0x0108, "Police Alarm", UsageTypes.OSC
PROXIMITY = 0x0109, "Proximity", UsageTypes.LC
MOTION = 0x010A, "Motion", UsageTypes.OSC
DURESS_ALARM = 0x010B, "Duress Alarm", UsageTypes.OSC
HOLDUP_ALARM = 0x010C, "Holdup Alarm", UsageTypes.OSC
MEDICAL_ALARM = 0x010D, "Medical Alarm", UsageTypes.OSC
BALANCE_RIGHT = 0x0150, "Balance Right", UsageTypes.RTC
BALANCE_LEFT = 0x0151, "Balance Left", UsageTypes.RTC
BASS_INCREMENT = 0x0152, "Bass Increment", UsageTypes.RTC
BASS_DECREMENT = 0x0153, "Bass Decrement", UsageTypes.RTC
TREBLE_INCREMENT = 0x0154, "Treble Increment", UsageTypes.RTC
TREBLE_DECREMENT = 0x0155, "Treble Decrement", UsageTypes.RTC
SPEAKER_SYSTEM = 0x0160, "Speaker System", UsageTypes.CL
CHANNEL_LEFT = 0x0161, "Channel Left", UsageTypes.CL
CHANNEL_RIGHT = 0x0162, "Channel Right", UsageTypes.CL
CHANNEL_CENTER = 0x0163, "Channel Center", UsageTypes.CL
CHANNEL_FRONT = 0x0164, "Channel Front", UsageTypes.CL
CHANNEL_CENTER_FRONT = 0x0165, "Channel Center Front", UsageTypes.CL
CHANNEL_SIDE = 0x0166, "Channel Side", UsageTypes.CL
CHANNEL_SURROUND = 0x0167, "Channel Surround", UsageTypes.CL
CHANNEL_LOW_FREQUENCY_ENHANCEMENT = 0x0168, "Channel Low Frequency Enhancement", UsageTypes.CL
CHANNEL_TOP = 0x0169, "Channel Top", UsageTypes.CL
CHANNEL_UNKNOWN = 0x016A, "Channel Unknown", UsageTypes.CL
SUBCHANNEL = 0x0170, "Sub-channel", UsageTypes.LC
SUBCHANNEL_INCREMENT = 0x0171, "Sub-channel Increment", UsageTypes.OSC
SUBCHANNEL_DECREMENT = 0x0172, "Sub-channel Decrement", UsageTypes.OSC
ALTERNATE_AUDIO_INCREMENT = 0x0173, "Alternate Audio Increment", UsageTypes.OSC
ALTERNATE_AUDIO_DECREMENT = 0x0174, "Alternate Audio Decrement", UsageTypes.OSC
APPLICATION_LAUNCH_BUTTONS = 0x0180, "Application Launch Buttons", UsageTypes.NARY
AL_LAUCH_BUTTON_CONFIGURATION_TOOL = 0x0181, "AL Launch Button Configuration Tool", UsageTypes.SEL
AL_PROGRAMMABLE_BUTTON_CONFIGURATION = 0x0182, "AL Programmable Button Configuration", UsageTypes.SEL
AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, "AL Consumer Control Configuration", UsageTypes.SEL
AL_WORD_PROCESSOR = 0x0184, "AL Word Processor", UsageTypes.SEL
AL_TEXT_EDITOR = 0x0185, "AL Text Editor", UsageTypes.SEL
AL_SPREADSHEET = 0x0186, "AL Spreadsheet", UsageTypes.SEL
AL_GRAPHICS_EDITOR = 0x0187, "AL Graphics Editor", UsageTypes.SEL
AL_PRESENTATION_APP = 0x0188, "AL Presentation App", UsageTypes.SEL
AL_DATABASE_APP = 0x0189, "AL Database App", UsageTypes.SEL
AL_EMAIL_READER = 0x018A, "AL Email Reader", UsageTypes.SEL
AL_NEWSREADER = 0x018B, "AL Newsreader", UsageTypes.SEL
AL_VOICEMAIL = 0x018C, "AL Voicemail", UsageTypes.SEL
AL_CONTACTS_ADDRESS_BOOK = 0x018D, "AL Contacts/Address Book", UsageTypes.SEL
AL_CALENDAR_SCHEDULE = 0x018E, "AL Calendar/Schedule", UsageTypes.SEL
AL_TASK_PROJECT_MANAGER = 0x018F, "AL Task/Project Manager", UsageTypes.SEL
AL_LOG_JOURNAL_TIMECARD = 0x0190, "AL Log/Journal/Timecard", UsageTypes.SEL
AL_CHECKBOOK_FINANCE = 0x0191, "AL Checkbook/Finance", UsageTypes.SEL
AL_CALCULATOR = 0x0192, "AL Calculator", UsageTypes.SEL
AL_AV_CAPTURE_PLAYBACK = 0x0193, "AL A/V Capture/Playback", UsageTypes.SEL
AL_LOCAL_MACHINE_BROWSER = 0x0194, "AL Local Machine Browser", UsageTypes.SEL
AL_LAN_WAN_BROWSER = 0x0195, "AL LAN/WAN Browser", UsageTypes.SEL
AL_INTERNET_BROWSER = 0x0196, "AL Internet Browser", UsageTypes.SEL
AL_REMOTE_NETWORKING_ISP_CONNECT = 0x0197, "AL Remote Networking/ISP Connect", UsageTypes.SEL
AL_NETWORK_CONFERENCE = 0x0198, "AL Network Conference", UsageTypes.SEL
AL_NETWORK_CHAT = 0x0199, "AL Network Chat", UsageTypes.SEL
AL_TELEPHONY_DIALER = 0x019A, "AL Telephony/Dialer", UsageTypes.SEL
AL_LOGON = 0x019B, "AL Logon", UsageTypes.SEL
AL_LOGOFF = 0x019C, "AL Logoff", UsageTypes.SEL
AL_LOGON_LOGOFF = 0x019D, "AL Logon/Logoff", UsageTypes.SEL
AL_LOCK_SCREEN_SAVER = 0x019E, "AL Terminal Lock/Screensaver", UsageTypes.SEL
AL_CONTROL_PANEL = 0x019F, "AL Control Panel", UsageTypes.SEL
AL_COMMAND_LINE_PROCESSOR_RUN = 0x01A0, "AL Command Line Processor/Run", UsageTypes.SEL
AL_PROCESS_TASK_MANAGER = 0x01A1, "AL Process/Task Manager", UsageTypes.SEL
AL_SELECT_TASK_APPLICATION = 0x01A2, "AL Select Task/Application", UsageTypes.SEL
AL_NEXT_TASK_APPLICATION = 0x01A3, "AL Next Task/Application", UsageTypes.SEL
AL_PREVIOUS_TASK_APPLICATION = 0x01A4, "AL Previous Task/Application", UsageTypes.SEL
AL_HALT_TASK_APPLICATION = 0x01A5, "AL Preemptive Halt Task/Application", UsageTypes.SEL
AL_INTEGRATED_HELP_CENTER = 0x01A6, "AL Integrated Help Center", UsageTypes.SEL
AL_DOCUMENTS = 0x01A7, "AL Documents", UsageTypes.SEL
AL_THESAURUS = 0x01A8, "AL Thesaurus", UsageTypes.SEL
AL_DICTIONARY = 0x01A9, "AL Dictionary", UsageTypes.SEL
AL_DESKTOP = 0x01AA, "AL Desktop", UsageTypes.SEL
AL_SPELL_CHECK = 0x01AB, "AL Spell Check", UsageTypes.SEL
AL_GRAMMAR_CHECK = 0x01AC, "AL Grammar Check", UsageTypes.SEL
AL_WIRELESS_STATUS = 0x01AD, "AL Wireless Status", UsageTypes.SEL
AL_KEYBOARD_LAYOUT = 0x01AE, "AL Keyboard Layout", UsageTypes.SEL
AL_VIRUS_PROTECTION = 0x01AF, "AL Virus Protection", UsageTypes.SEL
AL_ENCRYPTION = 0x01B0, "AL Encryption", UsageTypes.SEL
AL_SCREEN_SAVER = 0x01B1, "AL Screen Saver", UsageTypes.SEL
AL_ALARMS = 0x01B2, "AL Alarms", UsageTypes.SEL
AL_CLOCK = 0x01B3, "AL Clock", UsageTypes.SEL
AL_FILE_BROWSER = 0x01B4, "AL File Browser", UsageTypes.SEL
AL_POWER_STATUS = 0x01B5, "AL Power Status", UsageTypes.SEL
AL_IMAGE_BROWSER = 0x01B6, "AL Image Browser", UsageTypes.SEL
AL_AUDIO_BROWSER = 0x01B7, "AL Audio Browser", UsageTypes.SEL
AL_VIDEO_BROWSER = 0x01B8, "AL Movie Browser", UsageTypes.SEL
AL_DIGITAL_RIGHTS_MANAGER = 0x01B9, "AL Digital Rights Manager", UsageTypes.SEL
AL_DIGITAL_WALLET = 0x01BA, "AL Digital Wallet", UsageTypes.SEL
AL_INSTANT_MESSAGING = 0x01BC, "AL Instant Messaging", UsageTypes.SEL
AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER = 0x01BD, "AL OEM Features/ Tips/Tutorial Browser", UsageTypes.SEL
AL_OEM_HELP = 0x01BE, "AL OEM Help", UsageTypes.SEL
AL_ONLINE_COMMUNITY = 0x01BF, "AL Online Community", UsageTypes.SEL
AL_ENTERTAINMENT_CONTENT_BROWSER = 0x01C0, "AL Entertainment Content Browser", UsageTypes.SEL
AL_ONLINE_SHOPPING_BROWSER = 0x01C1, "AL Online Shopping Browser", UsageTypes.SEL
AL_SMARTCARD_INFORMATION_HELP = 0x01C2, "AL SmartCard Information/Help", UsageTypes.SEL
AL_MARKET_MONITOR_FINANCE_BROWSER = 0x01C3, "AL Market Monitor/Finance Browser", UsageTypes.SEL
AL_CUSTOMIZED_CORPORATE_NEWS_BROWSER = 0x01C4, "AL Customized Corporate News Browser", UsageTypes.SEL
AL_ONLINE_ACTIVITY_BROWSER = 0x01C5, "AL Online Activity Browser", UsageTypes.SEL
AL_RESEARCH_SEARCH_BROWSER = 0x01C6, "AL Research/Search Browser", UsageTypes.SEL
AL_AUDIO_PLAYER = 0x01C7, "AL Audio Player", UsageTypes.SEL
GENERIC_GUI_APPLICATION_CONTROLS = 0x0200, "Generic GUI Application Controls", UsageTypes.NARY
AC_NEW = 0x0201, "AC New", UsageTypes.SEL
AC_OPEN = 0x0202, "AC Open", UsageTypes.SEL
AC_CLOSE = 0x0203, "AC Close", UsageTypes.SEL
AC_EXIT = 0x0204, "AC Exit", UsageTypes.SEL
AC_MAXIMIZE = 0x0205, "AC Maximize", UsageTypes.SEL
AC_MINIMIZE = 0x0206, "AC Minimize", UsageTypes.SEL
AC_SAVE = 0x0207, "AC Save", UsageTypes.SEL
AC_PRINT = 0x0208, "AC Print", UsageTypes.SEL
AC_PROPERTIES = 0x0209, "AC Properties", UsageTypes.SEL
AC_UNDO = 0x021A, "AC Undo", UsageTypes.SEL
AC_COPY = 0x021B, "AC Copy", UsageTypes.SEL
AC_CUT = 0x021C, "AC Cut", UsageTypes.SEL
AC_PASTE = 0x021D, "AC Paste", UsageTypes.SEL
AC_SELECT_ALL = 0x021E, "AC Select All", UsageTypes.SEL
AC_FIND = 0x021F, "AC Find", UsageTypes.SEL
AC_FIND_AND_REPLACE = 0x0220, "AC Find and Replace", UsageTypes.SEL
AC_SEARCH = 0x0221, "AC Search", UsageTypes.SEL
AC_GO_TO = 0x0222, "AC Go To", UsageTypes.SEL
AC_HOME = 0x0223, "AC Home", UsageTypes.SEL
AC_BACK = 0x0224, "AC Back", UsageTypes.SEL
AC_FORWARD = 0x0225, "AC Forward", UsageTypes.SEL
AC_STOP = 0x0226, "AC Stop", UsageTypes.SEL
AC_REFRESH = 0x0227, "AC Refresh", UsageTypes.SEL
AC_PREVIOUS_LINK = 0x0228, "AC Previous Link", UsageTypes.SEL
AC_NEXT_LINK = 0x0229, "AC Next Link", UsageTypes.SEL
AC_BOOKMARKS = 0x022A, "AC Bookmarks", UsageTypes.SEL
AC_HISTORY = 0x022B, "AC History", UsageTypes.SEL
AC_SUBSCRIPTIONS = 0x022C, "AC Subscriptions", UsageTypes.SEL
AC_ZOOM_IN = 0x022D, "AC Zoom In", UsageTypes.SEL
AC_ZOOM_OUT = 0x022E, "AC Zoom Out", UsageTypes.SEL
AC_ZOOM = 0x022F, "AC Zoom", UsageTypes.LC
AC_FULL_SCREEN_VIEW = 0x0230, "AC Full Screen View", UsageTypes.SEL
AC_NORMAL_VIEW = 0x0231, "AC Normal View", UsageTypes.SEL
AC_VIEW_TOGGLE = 0x0232, "AC View Toggle", UsageTypes.SEL
AC_SCROLL_UP = 0x0233, "AC Scroll Up", UsageTypes.SEL
AC_SCROLL_DOWN = 0x0234, "AC Scroll Down", UsageTypes.SEL
AC_SCROLL = 0x0235, "AC Scroll", UsageTypes.LC
AC_PAN_LEFT = 0x0236, "AC Pan Left", UsageTypes.SEL
AC_PAN_RIGHT = 0x0237, "AC Pan Right", UsageTypes.SEL
AC_PAN = 0x0238, "AC Pan", UsageTypes.LC
AC_NEW_WINDOWS = 0x0239, "AC New Window", UsageTypes.SEL
AC_TILE_HORIZONTALLY = 0x023A, "AC Tile Horizontally", UsageTypes.SEL
AC_TILE_VERTICALLY = 0x023B, "AC Tile Vertically", UsageTypes.SEL
AC_FORMAT = 0x023C, "AC Format", UsageTypes.SEL
AC_EDIT = 0x023D, "AC Edit", UsageTypes.SEL
AC_BOLD = 0x023E, "AC Bold", UsageTypes.SEL
AC_ITALICS = 0x023F, "AC Italics", UsageTypes.SEL
AC_UNDERLINE = 0x0240, "AC Underline", UsageTypes.SEL
AC_STRIKETHROUGH = 0x0241, "AC Strikethrough", UsageTypes.SEL
AC_SUBSCRIPT = 0x0242, "AC Subscript", UsageTypes.SEL
AC_SUPERSCRIPT = 0x0243, "AC Superscript", UsageTypes.SEL
AC_ALL_CAPS = 0x0244, "AC All Caps", UsageTypes.SEL
AC_ROTATE = 0x0245, "AC Rotate", UsageTypes.SEL
AC_RESIZE = 0x0246, "AC Resize", UsageTypes.SEL
AC_FLIP_HORIZONTAL = 0x0247, "AC Flip horizontal", UsageTypes.SEL
AC_FLIP_VERTICAL = 0x0248, "AC Flip Vertical", UsageTypes.SEL
AC_MIRROR_HORIZONTAL = 0x0249, "AC Mirror Horizontal", UsageTypes.SEL
AC_MIRROR_VERTICAL = 0x024A, "AC Mirror Vertical", UsageTypes.SEL
AC_FONT_SELECT = 0x024B, "AC Font Select", UsageTypes.SEL
AC_FONT_COLOR = 0x024C, "AC Font Color", UsageTypes.SEL
AC_FONT_SIZE = 0x024D, "AC Font Size", UsageTypes.SEL
AC_JUSTIFY_LEFT = 0x024E, "AC Justify Left", UsageTypes.SEL
AC_JUSTIFY_CENTER_H = 0x024F, "AC Justify Center H", UsageTypes.SEL
AC_JUSTIFY_RIGHT = 0x0250, "AC Justify Right", UsageTypes.SEL
AC_JUSTIFY_BLOCK_H = 0x0251, "AC Justify Block H", UsageTypes.SEL
AC_JUSTIFY_TOP = 0x0252, "AC Justify Top", UsageTypes.SEL
AC_JUSTIFY_CENTER_V = 0x0253, "AC Justify Center V", UsageTypes.SEL
AC_JUSTIFY_BOTTOM = 0x0254, "AC Justify Bottom", UsageTypes.SEL
AC_JUSTIFY_BLOCK_V = 0x0255, "AC Justify Block V", UsageTypes.SEL
AC_INDENT_INCREASE = 0x0256, "AC Indent Decrease", UsageTypes.SEL
AC_INDENT_DECREASE = 0x0257, "AC Indent Increase", UsageTypes.SEL
AC_NUMBERED_LIST = 0x0258, "AC Numbered List", UsageTypes.SEL
AC_RESTART_NUMBERING = 0x0259, "AC Restart Numbering", UsageTypes.SEL
AC_BULLETED_LIST = 0x025A, "AC Bulleted List", UsageTypes.SEL
AC_PROMOTE = 0x025B, "AC Promote", UsageTypes.SEL
AC_DEMOTE = 0x025C, "AC Demote", UsageTypes.SEL
AC_YES = 0x025D, "AC Yes", UsageTypes.SEL
AC_NO = 0x025E, "AC No", UsageTypes.SEL
AC_CANCEL = 0x025F, "AC Cancel", UsageTypes.SEL
AC_CATALOG = 0x0260, "AC Catalog", UsageTypes.SEL
AC_BUY_CHECKOUT = 0x0261, "AC Buy/Checkout", UsageTypes.SEL
AC_ADD_TO_CART = 0x0262, "AC Add to Cart", UsageTypes.SEL
AC_EXPAND = 0x0263, "AC Expand", UsageTypes.SEL
AC_EXPAND_ALL = 0x0264, "AC Expand All", UsageTypes.SEL
AC_COLLAPSE = 0x0265, "AC Collapse", UsageTypes.SEL
AC_COLLAPSE_ALL = 0x0266, "AC Collapse All", UsageTypes.SEL
AC_PRINT_PREVIEW = 0x0267, "AC Print Preview", UsageTypes.SEL
AC_PASTE_SPECIAL = 0x0268, "AC Paste Special", UsageTypes.SEL
AC_INSER_MODE = 0x0269, "AC Insert Mode", UsageTypes.SEL
AC_DELETE = 0x026A, "AC Delete", UsageTypes.SEL
AC_LOCK = 0x026B, "AC Lock", UsageTypes.SEL
AC_UNLOCK = 0x026C, "AC Unlock", UsageTypes.SEL
AC_PROTECT = 0x026D, "AC Protect", UsageTypes.SEL
AC_UNPROTECT = 0x026E, "AC Unprotect", UsageTypes.SEL
AC_ATTACH_COMMENT = 0x026F, "AC Attach Comment", UsageTypes.SEL
AC_DELETE_COMMENT = 0x0270, "AC Delete Comment", UsageTypes.SEL
AC_VIEW_COMMENT = 0x0271, "AC View Comment", UsageTypes.SEL
AC_SELECT_WORD = 0x0272, "AC Select Word", UsageTypes.SEL
AC_SELECT_SENTENCE = 0x0273, "AC Select Sentence", UsageTypes.SEL
AC_SELECT_PARAGRAPH = 0x0274, "AC Select Paragraph", UsageTypes.SEL
AC_SELECT_COLUMN = 0x0275, "AC Select Column", UsageTypes.SEL
AC_SELECT_ROW = 0x0276, "AC Select Row", UsageTypes.SEL
AC_SELECT_TABLE = 0x0277, "AC Select Table", UsageTypes.SEL
AC_SELECT_OBJECT = 0x0278, "AC Select Object", UsageTypes.SEL
AC_REDO_REPEAT = 0x0279, "AC Redo/Repeat", UsageTypes.SEL
AC_SORT = 0x027A, "AC Sort", UsageTypes.SEL
AC_SORT_ASCENDING = 0x027B, "AC Sort Ascending", UsageTypes.SEL
AC_SORT_DESCENDING = 0x027C, "AC Sort Descending", UsageTypes.SEL
AC_FILTER = 0x027D, "AC Filter", UsageTypes.SEL
AC_SET_CLOCK = 0x027E, "AC Set Clock", UsageTypes.SEL
AC_VIEW_CLOCK = 0x027F, "AC View Clock", UsageTypes.SEL
AC_SELECT_TIME_ZONE = 0x0280, "AC Select Time Zone", UsageTypes.SEL
AC_EDIT_TIME_ZONES = 0x0281, "AC Edit Time Zones", UsageTypes.SEL
AC_SET_ALARM = 0x0282, "AC Set Alarm", UsageTypes.SEL
AC_CLEAR_ALARM = 0x0283, "AC Clear Alarm", UsageTypes.SEL
AC_SNOOZE_ALARM = 0x0284, "AC Snooze Alarm", UsageTypes.SEL
AC_RESET_ALARM = 0x0285, "AC Reset Alarm", UsageTypes.SEL
AC_SYNCHRONIZE = 0x0286, "AC Synchronize", UsageTypes.SEL
AC_SEND_RECEIVE = 0x0287, "AC Send/Receive", UsageTypes.SEL
AC_SEND_TO = 0x0288, "AC Send To", UsageTypes.SEL
AC_REPLY = 0x0289, "AC Reply", UsageTypes.SEL
AC_REPLY_ALL = 0x028A, "AC Reply All", UsageTypes.SEL
AC_FORWARD_MSG = 0x028B, "AC Forward Msg", UsageTypes.SEL
AC_SEND = 0x028C, "AC Send", UsageTypes.SEL
AC_ATTACH_FILE = 0x028D, "AC Attach File", UsageTypes.SEL
AC_UPLOAD = 0x028E, "AC Upload", UsageTypes.SEL
AC_DOWNLOAD = 0x028F, "AC Download (Save Target As)", UsageTypes.SEL
AC_SET_BORDERS = 0x0290, "AC Set Borders", UsageTypes.SEL
AC_INSERT_ROW = 0x0291, "AC Insert Row", UsageTypes.SEL
AC_INSERT_COLUMN = 0x0292, "AC Insert Column", UsageTypes.SEL
AC_INSERT_FILE = 0x0293, "AC Insert File", UsageTypes.SEL
AC_INSERT_PICTURE = 0x0294, "AC Insert Picture", UsageTypes.SEL
AC_INSERT_OBJECT = 0x0295, "AC Insert Object", UsageTypes.SEL
AC_INSERT_SYMBOL = 0x0296, "AC Insert Symbol", UsageTypes.SEL
AC_SAVE_AND_CLOSE = 0x0297, "AC Save and Close", UsageTypes.SEL
AC_RENAME = 0x0298, "AC Rename", UsageTypes.SEL
AC_MERGE = 0x0299, "AC Merge", UsageTypes.SEL
AC_SPLIT = 0x029A, "AC Split", UsageTypes.SEL
AC_DISTRIBUTE_HORIZONTICALLY = 0x029B, "AC Disribute Horizontally", UsageTypes.SEL
AC_DISTRIBUTE_VERTICALLY = 0x029C, "AC Distribute Vertically", UsageTypes.SEL
class PowerDevice(_Data):
INAME = 0x01, "iName", UsageTypes.SV
PRESENT_STATUS = 0x02, "PresentStatus", UsageTypes.CL
CHARGED_STATUS = 0x03, "ChangedStatus", UsageTypes.CL
UPS = 0x04, "UPS", UsageTypes.CA
POWER_SUPPLY = 0x05, "PowerSupply", UsageTypes.CA
BATTERY_SYSTEM = 0x10, "BatterySystem", UsageTypes.CP
BATTERY_SYSTEM_ID = 0x11, "BatterySystemID", UsageTypes.SV
BATTERY = 0x12, "Battery", UsageTypes.CP
BATTERY_ID = 0x13, "BatteryID", UsageTypes.SV
CHARGER = 0x14, "Charger", UsageTypes.CP
CHARGER_ID = 0x15, "ChargerID", UsageTypes.SV
POWER_CONVERTER = 0x16, "PowerConverter", UsageTypes.CP
POWER_CONVERTER_ID = 0x17, "PowerConverterID", UsageTypes.SV
OUTLET_SYSTEM = 0x18, "OutletSystem", UsageTypes.CP
OUTLET_SYSTEM_ID = 0x19, "OutletSystemID", UsageTypes.SV
INPUT = 0x1A, "Input", UsageTypes.CP
INPUT_ID = 0x1B, "InputID", UsageTypes.SV
OUTPUT = 0x1C, "Output", UsageTypes.CP
OUTPUT_ID = 0x1D, "OutputID", UsageTypes.SV
FLOW = 0x1E, "Flow", UsageTypes.CP
FLOW_ID = 0x1F, "FlowID", UsageTypes.SV
OUTLET = 0x20, "Outlet", UsageTypes.CP
OUTLET_ID = 0x21, "OutletID", UsageTypes.SV
GANG = 0x22, "Gang", UsageTypes.CP
GANG_ID = 0x23, "GangID", UsageTypes.SV
POWER_SUMMARY = 0x24, "PowerSummary", UsageTypes.CP
POWER_SUMMARY_ID = 0x25, "PowerSummaryID", UsageTypes.SV
VOLTAGE = 0x30, "Voltage", UsageTypes.DV
CURRENT = 0x31, "Current", UsageTypes.DV
FREQUENCY = 0x32, "Frequency", UsageTypes.DV
APPARENT_POWER = 0x33, "ApparentPower", UsageTypes.DV
ACTIVE_POWER = 0x34, "ActivePower", UsageTypes.DV
PERCENT_LOAD = 0x35, "PercentLoad", UsageTypes.DV
TEMPERATURE = 0x36, "Temperature", UsageTypes.DV
HUMIFITY = 0x37, "Humidity", UsageTypes.DV
BAD_COUNT = 0x38, "BadCount", UsageTypes.DV
CONFIG_VOLTAGE = 0x40, "ConfigVoltage", (UsageTypes.SV, UsageTypes.DV)
CONFIG_CURRENT = 0x41, "ConfigCurrent", (UsageTypes.SV, UsageTypes.DV)
CONFIG_FREQUENCY = 0x42, "ConfigFrequency", (UsageTypes.SV, UsageTypes.DV)
CONFIG_APPARENT_POWER = 0x43, "ConfigApparentPower", (UsageTypes.SV, UsageTypes.DV)
CONFIG_ACTIVE_POWER = 0x44, "ConfigActivePower", (UsageTypes.SV, UsageTypes.DV)
CONFIG_PERCENT_LOAD = 0x45, "ConfigPercentLoad", (UsageTypes.SV, UsageTypes.DV)
CONFIG_TEMPERATURE = 0x46, "ConfigTemperature", (UsageTypes.SV, UsageTypes.DV)
CONFIG_HUMIFITY = 0x47, "ConfigHumidity", (UsageTypes.SV, UsageTypes.DV)
SWITCH_ON_CONTROL = 0x50, "SwitchOnControl", UsageTypes.DV
SWITCH_OFF_CONTROL = 0x51, "SwitchOffControl", UsageTypes.DV
TOGGLE_CONTROL = 0x52, "ToggleControl", UsageTypes.DV
LOW_VOLTAGE_TRANSFER = 0x53, "LowVoltageTransfer", UsageTypes.DV
HIGH_VOLTAGE_TRANSFER = 0x54, "HighVoltageTransfer", UsageTypes.DV
DELAY_BEFORE_REBOOT = 0x55, "DelayBeforeReboot", UsageTypes.DV
DELAY_BEFORE_STARTUP = 0x56, "DelayBeforeStartup", UsageTypes.DV
DELAY_BEFORE_SHUTDOWN = 0x57, "DelayBeforeShutdown", UsageTypes.DV
TEST = 0x58, "Test", UsageTypes.DV
MODULE_RESET = 0x59, "ModuleReset", UsageTypes.DV
AUDIBLE_ALARM_CONTROL = 0x5A, "AudibleAlarmControl", UsageTypes.DV
PRESENT = 0x60, "Present", UsageTypes.DF
GOOD = 0x61, "Good", UsageTypes.DF
INTERNAL_FAILURE = 0x62, "InternalFailure", UsageTypes.DF
VOLTAGE_OUT_OF_RANGE = 0x63, "VoltageOutOfRange", UsageTypes.DF
FREQUENCY_OUT_OF_RANGE = 0x64, "FrequencyOutOfRange", UsageTypes.DF
OVERLOAD = 0x65, "Overload", UsageTypes.DF
OVERCHARGED = 0x66, "OverCharged", UsageTypes.DF
OVER_TEMPERATURE = 0x67, "OverTemperature", UsageTypes.DF
SHUTDOWN_REQUESTED = 0x68, "ShutdownRequested", UsageTypes.DF
SHUTDOWN_IMMINEBT = 0x69, "ShutdownImminent", UsageTypes.DF
SWITCH_ON_OFF = 0x6B, "SwitchOn/Off", UsageTypes.DF
SWITCHABLE = 0x6C, "Switchable", UsageTypes.DF
USED = 0x6D, "Used", UsageTypes.DF
BOOST = 0x6E, "Boost", UsageTypes.DF
BUCK = 0x6F, "Buck", UsageTypes.DF
INITIALIZED = 0x70, "Initialized", UsageTypes.DF
TESTED = 0x71, "Tested", UsageTypes.DF
AWAITING_POWER = 0x72, "AwaitingPower", UsageTypes.DF
COMMUNICATION_LOST = 0x73, "CommunicationLost", UsageTypes.DF
IMANUFACTURER = 0xFD, "iManufacturer", UsageTypes.SV
IPRODUCT = 0xFE, "iProduct", UsageTypes.SV
ISERIALNUMBER = 0xFF, "iSerialNumber", UsageTypes.SV
class FIDO(_Data):
U2F_AUTHENTICATOR_DEVICEM = 0x01, "U2F Authenticator Device"
INPUT_REPORT_DATA = 0x20, "Input Report Data"
OUTPUT_REPORT_DATA = 0x21, "Output Report Data"
class UsagePages(_Data):
GENERIC_DESKTOP_CONTROLS_PAGE = 0x01, "Generic Desktop Controls", GenericDesktopControls
SIMULATION_CONTROLS_PAGE = 0x02, "Simulation Controls"
VR_CONTROLS_PAGE = 0x03, "VR Controls"
SPORT_CONTROLS_PAGE = 0x04, "Sport Controls"
GAME_CONTROLS_PAGE = 0x05, "Game Controls"
GENERIC_DEVICE_CONTROLS_PAGE = 0x06, "Generic Device Controls"
KEYBOARD_KEYPAD_PAGE = 0x07, "Keyboard/Keypad", KeyboardKeypad
LED_PAGE = 0x08, "LED", Led
BUTTON_PAGE = 0x09, "Button", Button
ORDINAL_PAGE = 0x0A, "Ordinal"
TELEPHONY_PAGE = 0x0B, "Telephony"
CONSUMER_PAGE = 0x0C, "Consumer", Consumer
DIGITIZER_PAGE = 0x0D, "Digitizer"
HAPTICS_PAGE = 0x0E, "Haptics"
PID_PAGE = 0x0F, "PID"
UNICODE_PAGE = 0x10, "Unicode"
EYE_AND_HEAD_TRACKER_PAGE = 0x12, "Eye and Head Tracker"
ALPHANUMERIC_DISPLAY_PAGE = 0x14, "Alphanumeric Display"
SENSOR_PAGE = 0x20, "Sensor"
MEDICAL_INSTRUMENTS_PAGE = 0x40, "Medical Instruments"
BRAILLE_DISPLAY_PAGE = 0x41, "Braillie"
LIGHTING_AND_ILLUMINATION_PAGE = 0x59, "Lighting and Illumination"
USB_MONITOR_PAGE = 0x80, "USB Monitor"
USB_ENUMERATED_VALUES_PAGE = 0x81, "USB Enumerated Values"
VESA_VIRTUAL_CONTROLS_PAGE = 0x82, "VESA Virtual Controls"
POWER_DEVICE_PAGE = 0x84, "Power Device", PowerDevice
BATTERY_SYSTEM_PAGE = 0x85, "Battery System"
BARCODE_SCANNER_PAGE = 0x8C, "Barcode Scanner"
WEIGHING_PAGE = 0x8D, "Weighing"
MSR_PAGE = 0x8E, "MSR"
RESERVED_POS_PAGE = 0x8F, "Reserved POS"
CAMERA_CONTROL_PAGE = 0x90, "Camera Control"
ARCADE_PAGE = 0x91, "Arcade"
GAMING_DEVICE_PAGE = 0x92, "Gaming Device"
FIDO_ALLIANCE_PAGE = 0xF1D0, "FIDO Alliance", FIDO
VENDOR_PAGE = 0xFF00, ..., 0xFFFF, "Vendor Page"