use crate::{UsagePage, __data_size, __data_to_unsigned, __set_data_size, macros::*};
use alloc::{borrow::Cow, format};
use std::{
cmp::{Eq, PartialEq},
fmt::Display,
};
__impls_for_short_items! {
DesignatorIndex: 0b0011_1000;
DesignatorMinimum: 0b0100_1000;
DesignatorMaximum: 0b0101_1000;
StringIndex: 0b0111_1000;
StringMinimum: 0b1000_1000;
StringMaximum: 0b1001_1000;
Delimiter: 0b1010_1000;
}
#[derive(Clone, Debug)]
pub struct Usage {
raw: [u8; 5],
usage_page: Option<UsagePage>,
}
#[derive(Clone, Debug)]
pub struct UsageMinimum {
raw: [u8; 5],
usage_page: Option<UsagePage>,
}
#[derive(Clone, Debug)]
pub struct UsageMaximum {
raw: [u8; 5],
usage_page: Option<UsagePage>,
}
impl AsRef<[u8]> for Usage {
fn as_ref(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[..end]
}
}
impl Default for Usage {
fn default() -> Self {
Self {
raw: [Self::PREFIX, 0, 0, 0, 0],
usage_page: None,
}
}
}
impl Usage {
pub const PREFIX: u8 = 0b0000_1000;
pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
if raw.is_empty() {
return Err(crate::HidError::EmptyRawInput);
};
if raw[0] & 0b1111_1100 != Self::PREFIX {
return Err(crate::HidError::PrefixNotMatch);
}
let expected = crate::__data_size(raw[0]);
if expected + 1 != raw.len() {
return Err(crate::HidError::DataSizeNotMatch {
expected,
provided: raw.len() - 1,
});
};
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Ok(Self {
raw: storage,
usage_page: None,
})
}
pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Self {
raw: storage,
usage_page: None,
}
}
pub fn prefix(&self) -> u8 {
self.raw[0]
}
pub fn data(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[1..end]
}
pub fn set_usage_page(&mut self, usage_page: UsagePage) {
self.usage_page = Some(usage_page);
}
pub fn usage_page(&self) -> Option<&UsagePage> {
self.usage_page.as_ref()
}
pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
let mut item = Self {
raw: [0; 5],
usage_page: None,
};
item.raw[0] = 0b0000_1000;
__set_data_size(&mut item.raw[0], data)?;
item.data_mut().copy_from_slice(data);
Ok(item)
}
pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
__set_data_size(&mut self.raw[0], data)?;
self.data_mut().copy_from_slice(data);
Ok(self)
}
pub fn data_mut(&mut self) -> &mut [u8] {
let end = __data_size(self.raw[0]) + 1;
&mut self.raw[1..end]
}
}
impl PartialEq for Usage {
fn eq(&self, other: &Self) -> bool {
self.raw.eq(&other.raw)
}
}
impl Eq for Usage {}
impl AsRef<[u8]> for UsageMinimum {
fn as_ref(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[..end]
}
}
impl Default for UsageMinimum {
fn default() -> Self {
Self {
raw: [Self::PREFIX, 0, 0, 0, 0],
usage_page: None,
}
}
}
impl UsageMinimum {
pub const PREFIX: u8 = 0b0001_1000;
pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
if raw.is_empty() {
return Err(crate::HidError::EmptyRawInput);
};
if raw[0] & 0b1111_1100 != Self::PREFIX {
return Err(crate::HidError::PrefixNotMatch);
}
let expected = crate::__data_size(raw[0]);
if expected + 1 != raw.len() {
return Err(crate::HidError::DataSizeNotMatch {
expected,
provided: raw.len() - 1,
});
};
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Ok(Self {
raw: storage,
usage_page: None,
})
}
pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Self {
raw: storage,
usage_page: None,
}
}
pub fn prefix(&self) -> u8 {
self.raw[0]
}
pub fn data(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[1..end]
}
pub fn set_usage_page(&mut self, usage_page: UsagePage) {
self.usage_page = Some(usage_page);
}
pub fn usage_page(&self) -> Option<&UsagePage> {
self.usage_page.as_ref()
}
pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
let mut item = Self {
raw: [0; 5],
usage_page: None,
};
item.raw[0] = 0b0001_1000;
__set_data_size(&mut item.raw[0], data)?;
item.data_mut().copy_from_slice(data);
Ok(item)
}
pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
crate::__set_data_size(&mut self.raw[0], data)?;
self.data_mut().copy_from_slice(data);
Ok(self)
}
pub fn data_mut(&mut self) -> &mut [u8] {
let end = __data_size(self.raw[0]) + 1;
&mut self.raw[1..end]
}
}
impl PartialEq for UsageMinimum {
fn eq(&self, other: &Self) -> bool {
self.raw.eq(&other.raw)
}
}
impl Eq for UsageMinimum {}
impl AsRef<[u8]> for UsageMaximum {
fn as_ref(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[..end]
}
}
impl Default for UsageMaximum {
fn default() -> Self {
Self {
raw: [Self::PREFIX, 0, 0, 0, 0],
usage_page: None,
}
}
}
impl UsageMaximum {
pub const PREFIX: u8 = 0b0010_1000;
pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
if raw.is_empty() {
return Err(crate::HidError::EmptyRawInput);
};
if raw[0] & 0b1111_1100 != Self::PREFIX {
return Err(crate::HidError::PrefixNotMatch);
}
let expected = crate::__data_size(raw[0]);
if expected + 1 != raw.len() {
return Err(crate::HidError::DataSizeNotMatch {
expected,
provided: raw.len() - 1,
});
};
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Ok(Self {
raw: storage,
usage_page: None,
})
}
pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
let mut storage = [0; 5];
storage[..raw.len()].copy_from_slice(raw);
Self {
raw: storage,
usage_page: None,
}
}
pub fn prefix(&self) -> u8 {
self.raw[0]
}
pub fn data(&self) -> &[u8] {
let end = __data_size(self.raw[0]) + 1;
&self.raw[1..end]
}
pub fn set_usage_page(&mut self, usage_page: UsagePage) {
self.usage_page = Some(usage_page);
}
pub fn usage_page(&self) -> Option<&UsagePage> {
self.usage_page.as_ref()
}
pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
let mut item = Self {
raw: [0; 5],
usage_page: None,
};
item.raw[0] = 0b0010_1000;
crate::__set_data_size(&mut item.raw[0], data)?;
item.data_mut().copy_from_slice(data);
Ok(item)
}
pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
crate::__set_data_size(&mut self.raw[0], data)?;
self.data_mut().copy_from_slice(data);
Ok(self)
}
pub fn data_mut(&mut self) -> &mut [u8] {
let end = __data_size(self.raw[0]) + 1;
&mut self.raw[1..end]
}
}
impl PartialEq for UsageMaximum {
fn eq(&self, other: &Self) -> bool {
self.raw.eq(&other.raw)
}
}
impl Eq for UsageMaximum {}
fn __usage_format_helper(usage: u32, usage_page: u32) -> Cow<'static, str> {
match usage_page {
0x01 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Pointer",
0x02 => "Mouse",
0x04 => "Joystick",
0x05 => "Gamepad",
0x06 => "Keyboard",
0x07 => "Keypad",
0x08 => "Multi-Axis Controller",
0x09 => "Tablet PC System Controls",
0x0A => "Water Cooling Device",
0x0B => "Computer Chassis Device",
0x0C => "Wireless Radio Controls",
0x0D => "Portable Device Control",
0x0E => "System Multi-Axis Controller",
0x0F => "Spatial Controller",
0x10 => "Assistive Control",
0x11 => "Device Dock",
0x12 => "Dockable Device",
0x13 => "Call State Management Control",
0x30 => "X",
0x31 => "Y",
0x32 => "Z",
0x33 => "Rx",
0x34 => "Ry",
0x35 => "Rz",
0x36 => "Slider",
0x37 => "Dial",
0x38 => "Wheel",
0x39 => "Hat Switch",
0x3A => "Counted Buffer",
0x3B => "Byte Count",
0x3C => "Motion Wakeup",
0x3D => "Start",
0x3E => "Select",
0x40 => "Vx",
0x41 => "Vy",
0x42 => "Vz",
0x43 => "Vbrx",
0x44 => "Vbry",
0x45 => "Vbrz",
0x46 => "Vno",
0x47 => "Feature Notification",
0x48 => "Resolution Multiplier",
0x49 => "Qx",
0x4A => "Qy",
0x4B => "Qz",
0x4C => "Qw",
0x80 => "System Control",
0x81 => "System Power Down",
0x82 => "System Sleep",
0x83 => "System Wake Up",
0x84 => "System Context Menu",
0x85 => "System Main Menu",
0x86 => "System App Menu",
0x87 => "System Menu Help",
0x88 => "System Menu Exit",
0x89 => "System Menu Select",
0x8A => "System Menu Right",
0x8B => "System Menu Left",
0x8C => "System Menu Up",
0x8D => "System Menu Down",
0x8E => "System Cold Restart",
0x8F => "System Warm Restart",
0x90 => "D-pad Up",
0x91 => "D-pad Down",
0x92 => "D-pad Right",
0x93 => "D-pad Left",
0x94 => "Index Trigger",
0x95 => "Palm Trigger",
0x96 => "Thumbstick",
0x97 => "System Function Shift",
0x98 => "System Function Shift Lock",
0x99 => "System Function Shift Lock Indicator",
0x9A => "System Dismiss Notification",
0x9B => "System Do Not Disturb",
0xA0 => "System Dock",
0xA1 => "System Undock",
0xA2 => "System Setup",
0xA3 => "System Break",
0xA4 => "System Debugger Break",
0xA5 => "Application Break",
0xA6 => "Application Debugger Break",
0xA7 => "System Speaker Mute",
0xA8 => "System Hibernate",
0xA9 => "System Microphone Mute",
0xB0 => "System Display Invert",
0xB1 => "System Display Internal",
0xB2 => "System Display External",
0xB3 => "System Display Both",
0xB4 => "System Display Dual",
0xB5 => "System Display Toggle Int/Ext",
0xB6 => "System Display Swap Primary/Secondary",
0xB7 => "System Display LCD Autoscale",
0xC0 => "Sensor Zone",
0xC1 => "RPM",
0xC2 => "Coolant Level",
0xC3 => "Coolant Critical Level",
0xC4 => "Coolant Pump",
0xC5 => "Chassis Enclosure",
0xC6 => "Wireless Radio Button",
0xC7 => "Wireless Radio LED",
0xC8 => "Wireless Radio Slider Switch",
0xC9 => "System Display Rotation Lock Button",
0xCA => "System Display Rotation Lock Slider Switch",
0xCB => "Control Enable",
0xD0 => "Dockable Device Unique ID",
0xD1 => "Dockable Device Vendor ID",
0xD2 => "Dockable Device Primary Usage Page",
0xD3 => "Dockable Device Primary Usage ID",
0xD4 => "Dockable Device Docking State",
0xD5 => "Dockable Device Display Occlusion",
0xD6 => "Dockable Device Object Type",
0xE0 => "Call Active LED",
0xE1 => "Call Mute Toggle",
0xE2 => "Call Mute LED",
_ => "Reserved",
}),
0x02 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Flight Simulation Device",
0x02 => "Automobile Simulation Device",
0x03 => "Tank Simulation Device",
0x04 => "Spaceship Simulation Device",
0x05 => "Submarine Simulation Device",
0x06 => "Sailing Simulation Device",
0x07 => "Motorcycle Simulation Device",
0x08 => "Sports Simulation Device",
0x09 => "Airplane Simulation Device",
0x0A => "Helicopter Simulation Device",
0x0B => "Magic Carpet Simulation Device",
0x0C => "Bicycle Simulation Device",
0x20 => "Flight Control Stick",
0x21 => "Flight Stick",
0x22 => "Cyclic Control",
0x23 => "Cyclic Trim",
0x24 => "Flight Yoke",
0x25 => "Track Control",
0xB0 => "Aileron",
0xB1 => "Aileron Trim",
0xB2 => "Anti-Torque Control",
0xB3 => "Autopilot Enable",
0xB4 => "Chaff Release",
0xB5 => "Collective Control",
0xB6 => "Dive Brake",
0xB7 => "Electronic Countermeasures",
0xB8 => "Elevator",
0xB9 => "Elevator Trim",
0xBA => "Rudder",
0xBB => "Throttle",
0xBC => "Flight Communications",
0xBD => "Flare Release",
0xBE => "Landing Gear",
0xBF => "Toe Brake",
0xC0 => "Trigger",
0xC1 => "Weapons Arm",
0xC2 => "Weapons Select",
0xC3 => "Wing Flaps",
0xC4 => "Accelerator",
0xC5 => "Brake",
0xC6 => "Clutch",
0xC7 => "Shifter",
0xC8 => "Steering",
0xC9 => "Turret Direction",
0xCA => "Barrel Elevation",
0xCB => "Dive Plane",
0xCC => "Ballast",
0xCD => "Bicycle Crank",
0xCE => "Handle Bars",
0xCF => "Front Brake",
0xD0 => "Rear Brake",
_ => "Reserved",
}),
0x03 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Belt",
0x02 => "Body Suit",
0x03 => "Flexor",
0x04 => "Glove",
0x05 => "Head Tracker",
0x06 => "Head Mounted Display",
0x07 => "Hand Tracker",
0x08 => "Oculometer",
0x09 => "Vest",
0x0A => "Animatronic Device",
0x20 => "Stereo Enable",
0x21 => "Display Enable",
_ => "Reserved",
}),
0x04 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Baseball Bat",
0x02 => "Golf Club",
0x03 => "Rowing Machine",
0x04 => "Treadmill",
0x30 => "Oar",
0x31 => "Slope",
0x32 => "Rate",
0x33 => "Stick Speed",
0x34 => "Stick Face Angle",
0x35 => "Stick Heel/Toe",
0x36 => "Stick Follow Through",
0x37 => "Stick Tempo",
0x38 => "Stick Type",
0x39 => "Stick Height",
0x50 => "Putter",
0x51 => "1 Iron",
0x52 => "2 Iron",
0x53 => "3 Iron",
0x54 => "4 Iron",
0x55 => "5 Iron",
0x56 => "6 Iron",
0x57 => "7 Iron",
0x58 => "8 Iron",
0x59 => "9 Iron",
0x5A => "10 Iron",
0x5B => "11 Iron",
0x5C => "Sand Wedge",
0x5D => "Loft Wedge",
0x5E => "Power Wedge",
0x5F => "1 Wood",
0x60 => "3 Wood",
0x61 => "5 Wood",
0x62 => "7 Wood",
0x63 => "9 Wood",
_ => "Reserved",
}),
0x05 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "3D Game Controller",
0x02 => "Pinball Device",
0x03 => "Gun Device",
0x20 => "Point of View",
0x21 => "Turn Right/Left",
0x22 => "Pitch Forward/Backward",
0x23 => "Roll Right/Left",
0x24 => "Move Right/Left",
0x25 => "Move Forward/Backward",
0x26 => "Move Up/Down",
0x27 => "Lean Right/Left",
0x28 => "Lean Forward/Backward",
0x29 => "Height of POV",
0x2A => "Flipper",
0x2B => "Secondary Flipper",
0x2C => "Bump",
0x2D => "New Game",
0x2E => "Shoot Ball",
0x2F => "Player",
0x30 => "Gun Bolt",
0x31 => "Gun Clip",
0x32 => "Gun Selector",
0x33 => "Gun Single Shot",
0x34 => "Gun Burst",
0x35 => "Gun Automatic",
0x36 => "Gun Safety",
0x37 => "Gamepad Fire/Jump",
0x39 => "Gamepad Trigger",
0x3A => "Form-fitting Gamepad",
_ => "Reserved",
}),
0x06 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Background/Nonuser Controls",
0x20 => "Battery Strength",
0x21 => "Wireless Channel",
0x22 => "Wireless ID",
0x23 => "Discover Wireless Control",
0x24 => "Security Code Character Entered",
0x25 => "Security Code Character Erased",
0x26 => "Security Code Cleared",
0x27 => "Sequence ID",
0x28 => "Sequence ID Reset",
0x29 => "RF Signal Strength",
0x2A => "Software Version",
0x2B => "Protocol Version",
0x2C => "Hardware Version",
0x2D => "Major",
0x2E => "Minor",
0x2F => "Revision",
0x30 => "Handedness",
0x31 => "Either Hand",
0x32 => "Left Hand",
0x33 => "Right Hand",
0x34 => "Both Hands",
0x40 => "Grip Pose Offset",
0x41 => "Pointer Pose Offset",
_ => "Reserved",
}),
0x07 => Cow::Borrowed(match usage {
0x01 => "Keyboard ErrorRollOver",
0x02 => "Keyboard POSTFail",
0x03 => "Keyboard ErrorUndefined",
0x04 => "Keyboard a and A",
0x05 => "Keyboard b and B",
0x06 => "Keyboard c and C",
0x07 => "Keyboard d and D",
0x08 => "Keyboard e and E",
0x09 => "Keyboard f and F",
0x0A => "Keyboard g and G",
0x0B => "Keyboard h and H",
0x0C => "Keyboard i and I",
0x0D => "Keyboard j and J",
0x0E => "Keyboard k and K",
0x0F => "Keyboard l and L",
0x10 => "Keyboard m and M",
0x11 => "Keyboard n and N",
0x12 => "Keyboard o and O",
0x13 => "Keyboard p and P",
0x14 => "Keyboard q and Q",
0x15 => "Keyboard r and R",
0x16 => "Keyboard s and S",
0x17 => "Keyboard t and T",
0x18 => "Keyboard u and U",
0x19 => "Keyboard v and V",
0x1A => "Keyboard w and W",
0x1B => "Keyboard x and X",
0x1C => "Keyboard y and Y",
0x1D => "Keyboard z and Z",
0x1E => "Keyboard 1 and !",
0x1F => "Keyboard 2 and @",
0x20 => "Keyboard 3 and #",
0x21 => "Keyboard 4 and $",
0x22 => "Keyboard 5 and %",
0x23 => "Keyboard 6 and ∧",
0x24 => "Keyboard 7 and &",
0x25 => "Keyboard 8 and *",
0x26 => "Keyboard 9 and (",
0x27 => "Keyboard 0 and )",
0x28 => "Keyboard Return (ENTER)",
0x29 => "Keyboard ESCAPE",
0x2A => "Keyboard DELETE (Backspace)",
0x2B => "Keyboard Tab",
0x2C => "Keyboard Spacebar",
0x2D => "Keyboard - and (underscore)",
0x2E => "Keyboard = and +",
0x2F => "Keyboard [ and {",
0x30 => "Keyboard ] and }",
0x31 => "Keyboard \\ and |",
0x32 => "Keyboard Non-US # and ˜",
0x33 => "Keyboard ; and :",
0x34 => "Keyboard ‘ and “",
0x35 => "Keyboard Grave Accent and Tilde",
0x36 => "Keyboard , and <",
0x37 => "Keyboard . and >",
0x38 => "Keyboard / and ?",
0x39 => "Keyboard Caps Lock",
0x3A => "Keyboard F1",
0x3B => "Keyboard F2",
0x3C => "Keyboard F3",
0x3D => "Keyboard F4",
0x3E => "Keyboard F5",
0x3F => "Keyboard F6",
0x40 => "Keyboard F7",
0x41 => "Keyboard F8",
0x42 => "Keyboard F9",
0x43 => "Keyboard F10",
0x44 => "Keyboard F11",
0x45 => "Keyboard F12",
0x46 => "Keyboard PrintScreen",
0x47 => "Keyboard Scroll Lock",
0x48 => "Keyboard Pause",
0x49 => "Keyboard Insert",
0x4A => "Keyboard Home",
0x4B => "Keyboard PageUp",
0x4C => "Keyboard Delete Forward",
0x4D => "Keyboard End",
0x4E => "Keyboard PageDown",
0x4F => "Keyboard RightArrow",
0x50 => "Keyboard LeftArrow",
0x51 => "Keyboard DownArrow",
0x52 => "Keyboard UpArrow",
0x53 => "Keypad Num Lock and Clear",
0x54 => "Keypad /",
0x55 => "Keypad *",
0x56 => "Keypad -",
0x57 => "Keypad +",
0x58 => "Keypad ENTER",
0x59 => "Keypad 1 and End",
0x5A => "Keypad 2 and Down Arrow",
0x5B => "Keypad 3 and PageDn",
0x5C => "Keypad 4 and Left Arrow",
0x5D => "Keypad 5",
0x5E => "Keypad 6 and Right Arrow",
0x5F => "Keypad 7 and Home",
0x60 => "Keypad 8 and Up Arrow",
0x61 => "Keypad 9 and PageUp",
0x62 => "Keypad 0 and Insert",
0x63 => "Keypad . and Delete",
0x64 => "Keyboard Non-US \\ and |",
0x65 => "Keyboard Application",
0x66 => "Keyboard Power",
0x67 => "Keypad =",
0x68 => "Keyboard F13",
0x69 => "Keyboard F14",
0x6A => "Keyboard F15",
0x6B => "Keyboard F16",
0x6C => "Keyboard F17",
0x6D => "Keyboard F18",
0x6E => "Keyboard F19",
0x6F => "Keyboard F20",
0x70 => "Keyboard F21",
0x71 => "Keyboard F22",
0x72 => "Keyboard F23",
0x73 => "Keyboard F24",
0x74 => "Keyboard Execute",
0x75 => "Keyboard Help",
0x76 => "Keyboard Menu",
0x77 => "Keyboard",
0x78 => "Keyboard Stop",
0x79 => "Keyboard Again",
0x7A => "Keyboard Undo",
0x7B => "Keyboard Cut",
0x7C => "Keyboard Copy",
0x7D => "Keyboard Paste",
0x7E => "Keyboard Find",
0x7F => "Keyboard Mute",
0x80 => "Keyboard Volume Up",
0x81 => "Keyboard Volume Down",
0x82 => "Keyboard Locking Caps Lock",
0x83 => "Keyboard Locking Num Lock",
0x84 => "Keyboard Locking Scroll Lock",
0x85 => "Keypad Comma",
0x86 => "Keypad Equal Sign",
0x87 => "Keyboard International1",
0x88 => "Keyboard International2",
0x89 => "Keyboard International3",
0x8A => "Keyboard International4",
0x8B => "Keyboard International5",
0x8C => "Keyboard International6",
0x8D => "Keyboard International7",
0x8E => "Keyboard International8",
0x8F => "Keyboard International9",
0x90 => "Keyboard LANG1",
0x91 => "Keyboard LANG2",
0x92 => "Keyboard LANG3",
0x93 => "Keyboard LANG4",
0x94 => "Keyboard LANG5",
0x95 => "Keyboard LANG6",
0x96 => "Keyboard LANG7",
0x97 => "Keyboard LANG8",
0x98 => "Keyboard LANG9",
0x99 => "Keyboard Alternate Erase",
0x9A => "Keyboard SysReq/Attention",
0x9B => "Keyboard Cancel",
0x9C => "Keyboard Clear",
0x9D => "Keyboard Prior",
0x9E => "Keyboard Return",
0x9F => "Keyboard Separator",
0xA0 => "Keyboard Out",
0xA1 => "Keyboard Oper",
0xA2 => "Keyboard Clear/Again",
0xA3 => "Keyboard CrSel/Props",
0xA4 => "Keyboard ExSel",
0xB0 => "Keypad 00",
0xB1 => "Keypad 000",
0xB2 => "Thousands Separator",
0xB3 => "Decimal Separator",
0xB4 => "Currency Unit",
0xB5 => "Currency Sub-unit",
0xB6 => "Keypad (",
0xB7 => "Keypad )",
0xB8 => "Keypad {",
0xB9 => "Keypad }",
0xBA => "Keypad Tab",
0xBB => "Keypad Backspace",
0xBC => "Keypad A",
0xBD => "Keypad B",
0xBE => "Keypad C",
0xBF => "Keypad D",
0xC0 => "Keypad E",
0xC1 => "Keypad F",
0xC2 => "Keypad XOR",
0xC3 => "Keypad ∧",
0xC4 => "Keypad %",
0xC5 => "Keypad <",
0xC6 => "Keypad >",
0xC7 => "Keypad &",
0xC8 => "Keypad &&",
0xC9 => "Keypad |",
0xCA => "Keypad ||",
0xCB => "Keypad :",
0xCC => "Keypad #",
0xCD => "Keypad Space",
0xCE => "Keypad @",
0xCF => "Keypad !",
0xD0 => "Keypad Memory Store",
0xD1 => "Keypad Memory Recall",
0xD2 => "Keypad Memory Clear",
0xD3 => "Keypad Memory Add",
0xD4 => "Keypad Memory Subtract",
0xD5 => "Keypad Memory Multiply",
0xD6 => "Keypad Memory Divide",
0xD7 => "Keypad +/-",
0xD8 => "Keypad Clear",
0xD9 => "Keypad Clear Entry",
0xDA => "Keypad Binary",
0xDB => "Keypad Octal",
0xDC => "Keypad Decimal",
0xDD => "Keypad Hexadecimal",
0xE0 => "Keyboard LeftControl",
0xE1 => "Keyboard LeftShift",
0xE2 => "Keyboard LeftAlt",
0xE3 => "Keyboard Left GUI",
0xE4 => "Keyboard RightControl",
0xE5 => "Keyboard RightShift",
0xE6 => "Keyboard RightAlt",
0xE7 => "Keyboard Right GUI",
_ => "Reserved",
}),
0x08 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Num Lock",
0x02 => "Caps Lock",
0x03 => "Scroll Lock",
0x04 => "Compose",
0x05 => "Kana",
0x06 => "Power",
0x07 => "Shift",
0x08 => "Do Not Disturb",
0x09 => "Mute",
0x0A => "Tone Enable",
0x0B => "High Cut Filter",
0x0C => "Low Cut Filter",
0x0D => "Equalizer Enable",
0x0E => "Sound Field On",
0x0F => "Surround On",
0x10 => "Repeat",
0x11 => "Stereo",
0x12 => "Sampling Rate Detect",
0x13 => "Spinning",
0x14 => "CAV",
0x15 => "CLV",
0x16 => "Recording Format Detect",
0x17 => "Off-Hook",
0x18 => "Ring",
0x19 => "Message Waiting",
0x1A => "Data Mode",
0x1B => "Battery Operation",
0x1C => "Battery OK",
0x1D => "Battery Low",
0x1E => "Speaker",
0x1F => "Headset",
0x20 => "Hold",
0x21 => "Microphone",
0x22 => "Coverage",
0x23 => "Night Mode",
0x24 => "Send Calls",
0x25 => "Call Pickup",
0x26 => "Conference",
0x27 => "Stand-by",
0x28 => "Camera On",
0x29 => "Camera Off",
0x2A => "On-Line",
0x2B => "Off-Line",
0x2C => "Busy",
0x2D => "Ready",
0x2E => "Paper-Out",
0x2F => "Paper-Jam",
0x30 => "Remote",
0x31 => "Forward",
0x32 => "Reverse",
0x33 => "Stop",
0x34 => "Rewind",
0x35 => "Fast Forward",
0x36 => "Play",
0x37 => "Pause",
0x38 => "Record",
0x39 => "Error",
0x3A => "Usage Selected Indicator",
0x3B => "Usage In Use Indicator",
0x3C => "Usage Multi Mode Indicator",
0x3D => "Indicator On",
0x3E => "Indicator Flash",
0x3F => "Indicator Slow Blink",
0x40 => "Indicator Fast Blink",
0x41 => "Indicator Off",
0x42 => "Flash On Time",
0x43 => "Slow Blink On Time",
0x44 => "Slow Blink Off Time",
0x45 => "Fast Blink On Time",
0x46 => "Fast Blink Off Time",
0x47 => "Usage Indicator Color",
0x48 => "Indicator Red",
0x49 => "Indicator Green",
0x4A => "Indicator Amber",
0x4B => "Generic Indicator",
0x4C => "System Suspend",
0x4D => "External Power Connected",
0x4E => "Indicator Blue",
0x4F => "Indicator Orange",
0x50 => "Good Status",
0x51 => "Warning Status",
0x52 => "RGB LED",
0x53 => "Red LED Channel",
0x54 => "Blue LED Channel",
0x55 => "Green LED Channel",
0x56 => "LED Intensity",
0x57 => "System Microphone Mute",
0x60 => "Player Indicator",
0x61 => "Player 1",
0x62 => "Player 2",
0x63 => "Player 3",
0x64 => "Player 4",
0x65 => "Player 5",
0x66 => "Player 6",
0x67 => "Player 7",
0x68 => "Player 8",
_ => "Reserved",
}),
0x09 => match usage {
0x00 => Cow::Borrowed("No Button Pressed"),
_ => Cow::Owned(format!("Button {}", usage)),
},
0x0A => match usage {
0x00 => Cow::Borrowed("Reserved"),
_ => Cow::Owned(format!("Instance {}", usage)),
},
0x0B => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Phone",
0x02 => "Answering Machine",
0x03 => "Message Controls",
0x04 => "Handset",
0x05 => "Headset CL/CA 14.1",
0x06 => "Telephony Key Pad",
0x07 => "Programmable Button",
0x20 => "Hook Switch",
0x21 => "Flash",
0x22 => "Feature",
0x23 => "Hold",
0x24 => "Redial",
0x25 => "Transfer",
0x26 => "Drop",
0x27 => "Park",
0x28 => "Forward Calls",
0x29 => "Alternate Function",
0x2A => "Line OSC/NAry 14.3",
0x2B => "Speaker Phone",
0x2C => "Conference",
0x2D => "Ring Enable",
0x2E => "Ring Select",
0x2F => "Phone Mute",
0x30 => "Caller ID",
0x31 => "Send",
0x50 => "Speed Dial",
0x51 => "Store Number",
0x52 => "Recall Number",
0x53 => "Phone Directory",
0x70 => "Voice Mail",
0x71 => "Screen Calls",
0x72 => "Do Not Disturb",
0x73 => "Message",
0x74 => "Answer On/Off",
0x90 => "Inside Dial Tone",
0x91 => "Outside Dial Tone",
0x92 => "Inside Ring Tone",
0x93 => "Outside Ring Tone",
0x94 => "Priority Ring Tone",
0x95 => "Inside Ringback",
0x96 => "Priority Ringback",
0x97 => "Line Busy Tone",
0x98 => "Reorder Tone",
0x99 => "Call Waiting Tone",
0x9A => "Confirmation Tone 1",
0x9B => "Confirmation Tone 2",
0x9C => "Tones Off",
0x9D => "Outside Ringback",
0x9E => "Ringer",
0xB0 => "Phone Key 0",
0xB1 => "Phone Key 1",
0xB2 => "Phone Key 2",
0xB3 => "Phone Key 3",
0xB4 => "Phone Key 4",
0xB5 => "Phone Key 5",
0xB6 => "Phone Key 6",
0xB7 => "Phone Key 7",
0xB8 => "Phone Key 8",
0xB9 => "Phone Key 9",
0xBA => "Phone Key Star",
0xBB => "Phone Key Pound",
0xBC => "Phone Key A",
0xBD => "Phone Key B",
0xBE => "Phone Key C",
0xBF => "Phone Key D",
0xC0 => "Phone Call History Key",
0xC1 => "Phone Caller ID Key",
0xC2 => "Phone Settings Key",
0xF0 => "Host Control",
0xF1 => "Host Available",
0xF2 => "Host Call Active",
0xF3 => "Activate Handset Audio",
0xF4 => "Ring Type",
0xF5 => "Re-dialable Phone Number",
0xF8 => "Stop Ring Tone",
0xF9 => "PSTN Ring Tone",
0xFA => "Host Ring Tone",
0xFB => "Alert Sound Error",
0xFC => "Alert Sound Confirm",
0xFD => "Alert Sound Notification",
0xFE => "Silent Ring",
0x108 => "Email Message Waiting",
0x109 => "Voicemail Message Waiting",
0x10A => "Host Hold",
0x110 => "Incoming Call History Count",
0x111 => "Outgoing Call History Count",
0x112 => "Incoming Call History",
0x113 => "Outgoing Call History",
0x114 => "Phone Locale",
0x140 => "Phone Time Second",
0x141 => "Phone Time Minute",
0x142 => "Phone Time Hour",
0x143 => "Phone Date Day",
0x144 => "Phone Date Month",
0x145 => "Phone Date Year",
0x146 => "Handset Nickname",
0x147 => "Address Book ID",
0x14A => "Call Duration",
0x14B => "Dual Mode Phone",
_ => "Reserved",
}),
0x0C => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Consumer Control",
0x02 => "Numeric Key Pad",
0x03 => "Programmable Buttons",
0x04 => "Microphone",
0x05 => "Headphone",
0x06 => "Graphic Equalizer",
0x20 => "+10",
0x21 => "+100",
0x22 => "AM/PM",
0x30 => "Power",
0x31 => "Reset",
0x32 => "Sleep",
0x33 => "Sleep After",
0x34 => "Sleep Mode",
0x35 => "Illumination",
0x36 => "Function Buttons",
0x40 => "Menu",
0x41 => "Menu Pick",
0x42 => "Menu Up",
0x43 => "Menu Down",
0x44 => "Menu Left",
0x45 => "Menu Right",
0x46 => "Menu Escape",
0x47 => "Menu Value Increase",
0x48 => "Menu Value Decrease",
0x60 => "Data On Screen",
0x61 => "Closed Caption",
0x62 => "Closed Caption Select",
0x63 => "VCR/TV",
0x64 => "Broadcast Mode",
0x65 => "Snapshot",
0x66 => "Still",
0x67 => "Picture-in-Picture Toggle",
0x68 => "Picture-in-Picture Swap",
0x69 => "Red Menu Button",
0x6A => "Green Menu Button",
0x6B => "Blue Menu Button",
0x6C => "Yellow Menu Button",
0x6D => "Aspect",
0x6E => "3D Mode Select",
0x6F => "Display Brightness Increment",
0x70 => "Display Brightness Decrement",
0x71 => "Display Brightness",
0x72 => "Display Backlight Toggle",
0x73 => "Display Set Brightness to Minimum",
0x74 => "Display Set Brightness to Maximum",
0x75 => "Display Set Auto Brightness",
0x76 => "Camera Access Enabled",
0x77 => "Camera Access Disabled",
0x78 => "Camera Access Toggle",
0x79 => "Keyboard Brightness Increment",
0x7A => "Keyboard Brightness Decrement",
0x7B => "Keyboard Backlight Set Level",
0x7C => "Keyboard Backlight OOC",
0x7D => "Keyboard Backlight Set Minimum",
0x7E => "Keyboard Backlight Set Maximum",
0x7F => "Keyboard Backlight Auto",
0x80 => "Selection",
0x81 => "Assign Selection",
0x82 => "Mode Step",
0x83 => "Recall Last",
0x84 => "Enter Channel",
0x85 => "Order Movie",
0x86 => "Channel",
0x87 => "Media Selection",
0x88 => "Media Select Computer",
0x89 => "Media Select TV",
0x8A => "Media Select WWW",
0x8B => "Media Select DVD",
0x8C => "Media Select Telephone",
0x8D => "Media Select Program Guide",
0x8E => "Media Select Video Phone",
0x8F => "Media Select Games",
0x90 => "Media Select Messages",
0x91 => "Media Select CD",
0x92 => "Media Select VCR",
0x93 => "Media Select Tuner",
0x94 => "Quit",
0x95 => "Help",
0x96 => "Media Select Tape",
0x97 => "Media Select Cable",
0x98 => "Media Select Satellite",
0x99 => "Media Select Security",
0x9A => "Media Select Home",
0x9B => "Media Select Call",
0x9C => "Channel Increment",
0x9D => "Channel Decrement",
0x9E => "Media Select SAP",
0xA0 => "VCR Plus",
0xA1 => "Once",
0xA2 => "Daily",
0xA3 => "Weekly",
0xA4 => "Monthly",
0xB0 => "Play",
0xB1 => "Pause",
0xB2 => "Record",
0xB3 => "Fast Forward",
0xB4 => "Rewind",
0xB5 => "Scan Next Track",
0xB6 => "Scan Previous Track",
0xB7 => "Stop",
0xB8 => "Eject",
0xB9 => "Random Play",
0xBA => "Select Disc",
0xBB => "Enter Disc",
0xBC => "Repeat",
0xBD => "Tracking",
0xBE => "Track Normal",
0xBF => "Slow Tracking",
0xC0 => "Frame Forward",
0xC1 => "Frame Back",
0xC2 => "Mark",
0xC3 => "Clear Mark",
0xC4 => "Repeat From Mark",
0xC5 => "Return To Mark",
0xC6 => "Search Mark Forward",
0xC7 => "Search Mark Backwards",
0xC8 => "Counter Reset",
0xC9 => "Show Counter",
0xCA => "Tracking Increment",
0xCB => "Tracking Decrement",
0xCC => "Stop/Eject",
0xCD => "Play/Pause",
0xCE => "Play/Skip",
0xCF => "Voice Command",
0xD0 => "Invoke Capture Interface",
0xD1 => "Start or Stop Game Recording",
0xD2 => "Historical Game Capture",
0xD3 => "Capture Game Screenshot",
0xD4 => "Show or Hide Recording Indicator",
0xD5 => "Start or Stop Microphone Capture",
0xD6 => "Start or Stop Camera Capture",
0xD7 => "Start or Stop Game Broadcast",
0xD8 => "Start or Stop Voice Dictation Session",
0xD9 => "Invoke/Dismiss Emoji Picker",
0xE0 => "Volume",
0xE1 => "Balance",
0xE2 => "Mute",
0xE3 => "Bass",
0xE4 => "Treble",
0xE5 => "Bass Boost",
0xE6 => "Surround Mode",
0xE7 => "Loudness",
0xE8 => "MPX",
0xE9 => "Volume Increment",
0xEA => "Volume Decrement",
0xF0 => "Speed Select",
0xF1 => "Playback Speed",
0xF2 => "Standard Play",
0xF3 => "Long Play",
0xF4 => "Extended Play",
0xF5 => "Slow",
0x100 => "Fan Enable",
0x101 => "Fan Speed",
0x102 => "Light Enable",
0x103 => "Light Illumination Level",
0x104 => "Climate Control Enable",
0x105 => "Room Temperature",
0x106 => "Security Enable",
0x107 => "Fire Alarm",
0x108 => "Police Alarm",
0x109 => "Proximity",
0x10A => "Motion",
0x10B => "Duress Alarm",
0x10C => "Holdup Alarm",
0x10D => "Medical Alarm",
0x150 => "Balance Right",
0x151 => "Balance Left",
0x152 => "Bass Increment",
0x153 => "Bass Decrement",
0x154 => "Treble Increment",
0x155 => "Treble Decrement",
0x160 => "Speaker System",
0x161 => "Channel Left",
0x162 => "Channel Right",
0x163 => "Channel Center",
0x164 => "Channel Front",
0x165 => "Channel Center Front",
0x166 => "Channel Side",
0x167 => "Channel Surround",
0x168 => "Channel Low Frequency Enhancement",
0x169 => "Channel Top",
0x16A => "Channel Unknown",
0x170 => "Sub-channel",
0x171 => "Sub-channel Increment",
0x172 => "Sub-channel Decrement",
0x173 => "Alternate Audio Increment",
0x174 => "Alternate Audio Decrement",
0x180 => "Application Launch Buttons",
0x181 => "AL Launch Button Configuration Tool",
0x182 => "AL Programmable Button Configuration",
0x183 => "AL Consumer Control Configuration",
0x184 => "AL Word Processor",
0x185 => "AL Text Editor",
0x186 => "AL Spreadsheet",
0x187 => "AL Graphics Editor",
0x188 => "AL Presentation App",
0x189 => "AL Database App",
0x18A => "AL Email Reader",
0x18B => "AL Newsreader",
0x18C => "AL Voicemail",
0x18D => "AL Contacts/Address Book",
0x18E => "AL Calendar/Schedule",
0x18F => "AL Task/Project Manager",
0x190 => "AL Log/Journal/Timecard",
0x191 => "AL Checkbook/Finance",
0x192 => "AL Calculator",
0x193 => "AL A/V Capture/Playback",
0x194 => "AL Local Machine Browser",
0x195 => "AL LAN/WAN Browser",
0x196 => "AL Internet Browser",
0x197 => "AL Remote Networking/ISP Connect",
0x198 => "AL Network Conference",
0x199 => "AL Network Chat",
0x19A => "AL Telephony/Dialer",
0x19B => "AL Logon",
0x19C => "AL Logoff",
0x19D => "AL Logon/Logoff",
0x19E => "AL Terminal Lock/Screensaver",
0x19F => "AL Control Panel",
0x1A0 => "AL Command Line Processor/Run",
0x1A1 => "AL Process/Task Manager",
0x1A2 => "AL Select Task/Application",
0x1A3 => "AL Next Task/Application",
0x1A4 => "AL Previous Task/Application",
0x1A5 => "AL Preemptive Halt Task/Application",
0x1A6 => "AL Integrated Help Center",
0x1A7 => "AL Documents",
0x1A8 => "AL Thesaurus",
0x1A9 => "AL Dictionary",
0x1AA => "AL Desktop",
0x1AB => "AL Spell Check",
0x1AC => "AL Grammar Check",
0x1AD => "AL Wireless Status",
0x1AE => "AL Keyboard Layout",
0x1AF => "AL Virus Protection",
0x1B0 => "AL Encryption",
0x1B1 => "AL Screen Saver",
0x1B2 => "AL Alarms",
0x1B3 => "AL Clock",
0x1B4 => "AL File Browser",
0x1B5 => "AL Power Status",
0x1B6 => "AL Image Browser",
0x1B7 => "AL Audio Browser",
0x1B8 => "AL Movie Browser",
0x1B9 => "AL Digital Rights Manager",
0x1BA => "AL Digital Wallet",
0x1BC => "AL Instant Messaging",
0x1BD => "AL OEM Features/ Tips/Tutorial Browser",
0x1BE => "AL OEM Help",
0x1BF => "AL Online Community",
0x1C0 => "AL Entertainment Content Browser",
0x1C1 => "AL Online Shopping Browser",
0x1C2 => "AL SmartCard Information/Help",
0x1C3 => "AL Market Monitor/Finance Browser",
0x1C4 => "AL Customized Corporate News Browser",
0x1C5 => "AL Online Activity Browser",
0x1C6 => "AL Research/Search Browser",
0x1C7 => "AL Audio Player",
0x1C8 => "AL Message Status",
0x1C9 => "AL Contact Sync",
0x1CA => "AL Navigation",
0x1CB => "AL Context-aware Desktop Assistant",
0x200 => "Generic GUI Application Controls",
0x201 => "AC New",
0x202 => "AC Open",
0x203 => "AC Close",
0x204 => "AC Exit",
0x205 => "AC Maximize",
0x206 => "AC Minimize",
0x207 => "AC Save",
0x208 => "AC Print",
0x209 => "AC Properties",
0x21A => "AC Undo",
0x21B => "AC Copy",
0x21C => "AC Cut",
0x21D => "AC Paste",
0x21E => "AC Select All",
0x21F => "AC Find",
0x220 => "AC Find and Replace",
0x221 => "AC Search",
0x222 => "AC Go To",
0x223 => "AC Home",
0x224 => "AC Back",
0x225 => "AC Forward",
0x226 => "AC Stop",
0x227 => "AC Refresh",
0x228 => "AC Previous Link",
0x229 => "AC Next Link",
0x22A => "AC Bookmarks",
0x22B => "AC History",
0x22C => "AC Subscriptions",
0x22D => "AC Zoom In",
0x22E => "AC Zoom Out",
0x22F => "AC Zoom",
0x230 => "AC Full Screen View",
0x231 => "AC Normal View",
0x232 => "AC View Toggle",
0x233 => "AC Scroll Up",
0x234 => "AC Scroll Down",
0x235 => "AC Scroll",
0x236 => "AC Pan Left",
0x237 => "AC Pan Right",
0x238 => "AC Pan",
0x239 => "AC New Window",
0x23A => "AC Tile Horizontally",
0x23B => "AC Tile Vertically",
0x23C => "AC Format",
0x23D => "AC Edit",
0x23E => "AC Bold",
0x23F => "AC Italics",
0x240 => "AC Underline",
0x241 => "AC Strikethrough",
0x242 => "AC Subscript",
0x243 => "AC Superscript",
0x244 => "AC All Caps",
0x245 => "AC Rotate",
0x246 => "AC Resize",
0x247 => "AC Flip Horizontal",
0x248 => "AC Flip Vertical",
0x249 => "AC Mirror Horizontal",
0x24A => "AC Mirror Vertical",
0x24B => "AC Font Select",
0x24C => "AC Font Color",
0x24D => "AC Font Size",
0x24E => "AC Justify Left",
0x24F => "AC Justify Center H",
0x250 => "AC Justify Right",
0x251 => "AC Justify Block H",
0x252 => "AC Justify Top",
0x253 => "AC Justify Center V",
0x254 => "AC Justify Bottom",
0x255 => "AC Justify Block V",
0x256 => "AC Indent Decrease",
0x257 => "AC Indent Increase",
0x258 => "AC Numbered List",
0x259 => "AC Restart Numbering",
0x25A => "AC Bulleted List",
0x25B => "AC Promote",
0x25C => "AC Demote",
0x25D => "AC Yes",
0x25E => "AC No",
0x25F => "AC Cancel",
0x260 => "AC Catalog",
0x261 => "AC Buy/Checkout",
0x262 => "AC Add to Cart",
0x263 => "AC Expand",
0x264 => "AC Expand All",
0x265 => "AC Collapse",
0x266 => "AC Collapse All",
0x267 => "AC Print Preview",
0x268 => "AC Paste Special",
0x269 => "AC Insert Mode",
0x26A => "AC Delete",
0x26B => "AC Lock",
0x26C => "AC Unlock",
0x26D => "AC Protect",
0x26E => "AC Unprotect",
0x26F => "AC Attach Comment",
0x270 => "AC Delete Comment",
0x271 => "AC View Comment",
0x272 => "AC Select Word",
0x273 => "AC Select Sentence",
0x274 => "AC Select Paragraph",
0x275 => "AC Select Column",
0x276 => "AC Select Row",
0x277 => "AC Select Table",
0x278 => "AC Select Object",
0x279 => "AC Redo/Repeat",
0x27A => "AC Sort",
0x27B => "AC Sort Ascending",
0x27C => "AC Sort Descending",
0x27D => "AC Filter",
0x27E => "AC Set Clock",
0x27F => "AC View Clock",
0x280 => "AC Select Time Zone",
0x281 => "AC Edit Time Zones",
0x282 => "AC Set Alarm",
0x283 => "AC Clear Alarm",
0x284 => "AC Snooze Alarm",
0x285 => "AC Reset Alarm",
0x286 => "AC Synchronize",
0x287 => "AC Send/Receive",
0x288 => "AC Send To",
0x289 => "AC Reply",
0x28A => "AC Reply All",
0x28B => "AC Forward Msg",
0x28C => "AC Send",
0x28D => "AC Attach File",
0x28E => "AC Upload",
0x28F => "AC Download (Save Target As)",
0x290 => "AC Set Borders",
0x291 => "AC Insert Row",
0x292 => "AC Insert Column",
0x293 => "AC Insert File",
0x294 => "AC Insert Picture",
0x295 => "AC Insert Object",
0x296 => "AC Insert Symbol",
0x297 => "AC Save and Close",
0x298 => "AC Rename",
0x299 => "AC Merge",
0x29A => "AC Split",
0x29B => "AC Disribute Horizontally",
0x29C => "AC Distribute Vertically",
0x29D => "AC Next Keyboard Layout Select",
0x29E => "AC Navigation Guidance",
0x29F => "AC Desktop Show All Windows",
0x2A0 => "AC Soft Key Left",
0x2A1 => "AC Soft Key Right",
0x2A2 => "AC Desktop Show All Applications",
0x2B0 => "AC Idle Keep Alive",
0x2C0 => "Extended Keyboard Attributes Collection",
0x2C1 => "Keyboard Form Factor",
0x2C2 => "Keyboard Key Type",
0x2C3 => "Keyboard Physical Layout",
0x2C4 => "Vendor-Specific Keyboard Physical Layout",
0x2C5 => "Keyboard IETF Language Tag Index",
0x2C6 => "Implemented Keyboard Input Assist Controls",
0x2C7 => "Keyboard Input Assist Previous",
0x2C8 => "Keyboard Input Assist Next",
0x2C9 => "Keyboard Input Assist Previous Group",
0x2CA => "Keyboard Input Assist Next Group",
0x2CB => "Keyboard Input Assist Accept",
0x2CC => "Keyboard Input Assist Cancel",
0x2D0 => "Privacy Screen Toggle",
0x2D1 => "Privacy Screen Level Decrement",
0x2D2 => "Privacy Screen Level Increment",
0x2D3 => "Privacy Screen Level Minimum",
0x2D4 => "Privacy Screen Level Maximum",
0x500 => "Contact Edited",
0x501 => "Contact Added",
0x502 => "Contact Record Active",
0x503 => "Contact Index",
0x504 => "Contact Nickname",
0x505 => "Contact First Name",
0x506 => "Contact Last Name",
0x507 => "Contact Full Name",
0x508 => "Contact Phone Number Personal",
0x509 => "Contact Phone Number Business",
0x50A => "Contact Phone Number Mobile",
0x50B => "Contact Phone Number Pager",
0x50C => "Contact Phone Number Fax",
0x50D => "Contact Phone Number Other",
0x50E => "Contact Email Personal",
0x50F => "Contact Email Business",
0x510 => "Contact Email Other",
0x511 => "Contact Email Main",
0x512 => "Contact Speed Dial Number",
0x513 => "Contact Status Flag",
0x514 => "Contact Misc",
_ => "Reserved",
}),
0x0D => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Digitizer",
0x02 => "Pen",
0x03 => "Light Pen",
0x04 => "Touch Screen",
0x05 => "Touch Pad",
0x06 => "Whiteboard",
0x07 => "Coordinate Measuring Machine",
0x08 => "3D Digitizer",
0x09 => "Stereo Plotter",
0x0A => "Articulated Arm",
0x0B => "Armature",
0x0C => "Multiple Point Digitizer",
0x0D => "Free Space Wand",
0x0E => "Device Configuration",
0x0F => "Capacitive Heat Map Digitizer",
0x20 => "Stylus [55] CA/CL 16.2",
0x21 => "Puck",
0x22 => "Finger",
0x23 => "Device settings",
0x24 => "Character Gesture",
0x30 => "Tip Pressure",
0x31 => "Barrel Pressure",
0x32 => "In Range",
0x33 => "Touch",
0x34 => "Untouch",
0x35 => "Tap",
0x36 => "Quality",
0x37 => "Data Valid",
0x38 => "Transducer Index",
0x39 => "Tablet Function Keys",
0x3A => "Program Change Keys",
0x3B => "Battery Strength",
0x3C => "Invert",
0x3D => "X Tilt",
0x3E => "Y Tilt",
0x3F => "Azimuth",
0x40 => "Altitude",
0x41 => "Twist",
0x42 => "Tip Switch",
0x43 => "Secondary Tip Switch",
0x44 => "Barrel Switch",
0x45 => "Eraser",
0x46 => "Tablet Pick",
0x47 => "Touch Valid",
0x48 => "Width",
0x49 => "Height",
0x51 => "Contact Identifier",
0x52 => "Device Mode",
0x53 => "Device Identifier [7] DV/SV 16.7",
0x54 => "Contact Count",
0x55 => "Contact Count Maximum",
0x56 => "Scan Time",
0x57 => "Surface Switch",
0x58 => "Button Switch",
0x59 => "Pad Type",
0x5A => "Secondary Barrel Switch",
0x5B => "Transducer Serial Number",
0x5C => "Preferred Color",
0x5D => "Preferred Color is Locked",
0x5E => "Preferred Line Width",
0x5F => "Preferred Line Width is Locked",
0x60 => "Latency Mode",
0x61 => "Gesture Character Quality",
0x62 => "Character Gesture Data Length",
0x63 => "Character Gesture Data",
0x64 => "Gesture Character Encoding",
0x65 => "UTF8 Character Gesture Encoding",
0x66 => "UTF16 Little Endian Character Gesture Encoding",
0x67 => "UTF16 Big Endian Character Gesture Encoding",
0x68 => "UTF32 Little Endian Character Gesture Encoding",
0x69 => "UTF32 Big Endian Character Gesture Encoding",
0x6A => "Capacitive Heat Map Protocol Vendor ID",
0x6B => "Capacitive Heat Map Protocol Version",
0x6C => "Capacitive Heat Map Frame Data",
0x6D => "Gesture Character Enable",
0x6E => "Transducer Serial Number Part 2",
0x6F => "No Preferred Color",
0x70 => "Preferred Line Style",
0x71 => "Preferred Line Style is Locked",
0x72 => "Ink",
0x73 => "Pencil",
0x74 => "Highlighter",
0x75 => "Chisel Marker",
0x76 => "Brush",
0x77 => "No Preference",
0x80 => "Digitizer Diagnostic",
0x81 => "Digitizer Error",
0x82 => "Err Normal Status",
0x83 => "Err Transducers Exceeded",
0x84 => "Err Full Trans Features Unavailable",
0x85 => "Err Charge Low",
0x90 => "Transducer Software Info",
0x91 => "Transducer Vendor Id",
0x92 => "Transducer Product Id",
0x93 => "Device Supported Protocols [36] NAry/CL 16.3.1",
0x94 => "Transducer Supported Protocols [36] NAry/CL 16.3.1",
0x95 => "No Protocol",
0x96 => "Wacom AES Protocol",
0x97 => "USI Protocol",
0x98 => "Microsoft Pen Protocol",
0xA0 => "Supported Report Rates [36] SV/CL 16.3.1",
0xA1 => "Report Rate",
0xA2 => "Transducer Connected",
0xA3 => "Switch Disabled",
0xA4 => "Switch Unimplemented",
0xA5 => "Transducer Switches",
0xA6 => "Transducer Index Selector",
0xB0 => "Button Press Threshold",
_ => "Reserved",
}),
0x0E => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Simple Haptic Controller CA/CL 17.1",
0x10 => "Waveform List",
0x11 => "Duration List",
0x20 => "Auto Trigger",
0x21 => "Manual Trigger",
0x22 => "Auto Trigger Associated Control",
0x23 => "Intensity",
0x24 => "Repeat Count",
0x25 => "Retrigger Period",
0x26 => "Waveform Vendor Page",
0x27 => "Waveform Vendor ID",
0x28 => "Waveform Cutoff Time",
0x1001 => "Waveform None",
0x1002 => "Waveform Stop",
0x1003 => "Waveform Click",
0x1004 => "Waveform Buzz Continuous",
0x1005 => "Waveform Rumble Continuous",
0x1006 => "Waveform Press",
0x1007 => "Waveform Release",
0x1008 => "Waveform Hover",
0x1009 => "Waveform Success",
0x100A => "Waveform Error",
0x100B => "Waveform Ink Continuous",
0x100C => "Waveform Pencil Continuous",
0x100D => "Waveform Marker Continuous",
0x100E => "Waveform Chisel Marker Continuous",
0x100F => "Waveform Brush Continuous",
0x1010 => "Waveform Eraser Continuous",
0x1011 => "Waveform Sparkle Continuous",
_ => "Reserved",
}),
0x0F => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Physical Input Device",
0x20 => "Normal",
0x21 => "Set Effect Report",
0x22 => "Effect Parameter Block Index",
0x23 => "Parameter Block Offset",
0x24 => "ROM Flag",
0x25 => "Effect Type",
0x26 => "ET Constant-Force",
0x27 => "ET Ramp",
0x28 => "ET Custom-Force",
0x30 => "ET Square",
0x31 => "ET Sine",
0x32 => "ET Triangle",
0x33 => "ET Sawtooth Up",
0x34 => "ET Sawtooth Down",
0x40 => "ET Spring",
0x41 => "ET Damper",
0x42 => "ET Inertia",
0x43 => "ET Friction",
0x50 => "Duration",
0x51 => "Sample Period",
0x52 => "Gain",
0x53 => "Trigger Button",
0x54 => "Trigger Repeat Interval",
0x55 => "Axes Enable",
0x56 => "Direction Enable",
0x57 => "Direction",
0x58 => "Type Specific Block Offset",
0x59 => "Block Type",
0x5A => "Set Envelope Report CL/SV 18.5",
0x5B => "Attack Level",
0x5C => "Attack Time",
0x5D => "Fade Level",
0x5E => "Fade Time",
0x5F => "Set Condition Report CL/SV 18.6",
0x60 => "Center-Point Offset",
0x61 => "Positive Coefficient",
0x62 => "Negative Coefficient",
0x63 => "Positive Saturation",
0x64 => "Negative Saturation",
0x65 => "Dead Band",
0x66 => "Download Force Sample",
0x67 => "Isoch Custom-Force Enable",
0x68 => "Custom-Force Data Report",
0x69 => "Custom-Force Data",
0x6A => "Custom-Force Vendor Defined Data",
0x6B => "Set Custom-Force Report CL/SV 18.10",
0x6C => "Custom-Force Data Offset",
0x6D => "Sample Count",
0x6E => "Set Periodic Report CL/SV 18.7",
0x6F => "Offset",
0x70 => "Magnitude",
0x71 => "Phase",
0x72 => "Period",
0x73 => "Set Constant-Force Report CL/SV 18.8",
0x74 => "Set Ramp-Force Report CL/SV 18.9",
0x75 => "Ramp Start",
0x76 => "Ramp End",
0x77 => "Effect Operation Report",
0x78 => "Effect Operation",
0x79 => "Op Effect Start",
0x7A => "Op Effect Start Solo",
0x7B => "Op Effect Stop",
0x7C => "Loop Count",
0x7D => "Device Gain Report",
0x7E => "Device Gain",
0x7F => "Parameter Block Pools Report",
0x80 => "RAM Pool Size",
0x81 => "ROM Pool Size",
0x82 => "ROM Effect Block Count",
0x83 => "Simultaneous Effects Max",
0x84 => "Pool Alignment",
0x85 => "Parameter Block Move Report",
0x86 => "Move Source",
0x87 => "Move Destination",
0x88 => "Move Length",
0x89 => "Effect Parameter Block Load Report",
0x8B => "Effect Parameter Block Load Status",
0x8C => "Block Load Success",
0x8D => "Block Load Full",
0x8E => "Block Load Error",
0x8F => "Block Handle",
0x90 => "Effect Parameter Block Free Report",
0x91 => "Type Specific Block Handle",
0x92 => "PID State Report",
0x94 => "Effect Playing",
0x95 => "PID Device Control Report",
0x96 => "PID Device Control",
0x97 => "DC Enable Actuators",
0x98 => "DC Disable Actuators",
0x99 => "DC Stop All Effects",
0x9A => "DC Reset",
0x9B => "DC Pause",
0x9C => "DC Continue",
0x9F => "Device Paused",
0xA0 => "Actuators Enabled",
0xA4 => "Safety Switch",
0xA5 => "Actuator Override Switch",
0xA6 => "Actuator Power",
0xA7 => "Start Delay",
0xA8 => "Parameter Block Size",
0xA9 => "Device-Managed Pool",
0xAA => "Shared Parameter Blocks",
0xAB => "Create New Effect Parameter Block Report",
0xAC => "RAM Pool Available",
_ => "Reserved",
}),
0x10 => Cow::Owned(format!(
"\"{}\"",
char::from_u32(usage).unwrap_or('\u{FFFD}')
)),
0x11 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "SocControl",
0x02 => "FirmwareTransfer",
0x03 => "FirmwareFileId",
0x04 => "FileOffsetInBytes",
0x05 => "FileTransferSizeMaxInBytes",
0x06 => "FilePayload",
0x07 => "FilePayloadSizeInBytes",
0x08 => "FilePayloadContainsLastBytes",
0x09 => "FileTransferStop",
0x0A => "FileTransferTillEnd",
_ => "Reserved",
}),
0x12 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Eye Tracker",
0x02 => "Head Tracker",
0x10 => "Tracking Data",
0x11 => "Capabilities",
0x12 => "Configuration",
0x13 => "Status",
0x14 => "Control",
0x20 => "Sensor Timestamp",
0x21 => "Position X",
0x22 => "Position Y",
0x23 => "Position Z",
0x24 => "Gaze Point",
0x25 => "Left Eye Position",
0x26 => "Right Eye Position",
0x27 => "Head Position",
0x28 => "Head Direction Point",
0x29 => "Rotation about X axis",
0x2A => "Rotation about Y axis",
0x2B => "Rotation about Z axis",
0x100 => "Tracker Quality",
0x101 => "Minimum Tracking Distance",
0x102 => "Optimum Tracking Distance",
0x103 => "Maximum Tracking Distance",
0x104 => "Maximum Screen Plane Width",
0x105 => "Maximum Screen Plane Height",
0x200 => "Display Manufacturer ID",
0x201 => "Display Product ID",
0x202 => "Display Serial Number",
0x203 => "Display Manufacturer Date",
0x204 => "Calibrated Screen Width",
0x205 => "Calibrated Screen Height",
0x300 => "Sampling Frequency",
0x301 => "Configuration Status",
0x400 => "Device Mode Request",
_ => "Reserved",
}),
0x14 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Alphanumeric Display",
0x02 => "Auxiliary Display",
0x20 => "Display Attributes Report",
0x21 => "ASCII Character Set",
0x22 => "Data Read Back",
0x23 => "Font Read Back",
0x24 => "Display Control Report",
0x25 => "Clear Display",
0x26 => "Display Enable",
0x27 => "Screen Saver Delay",
0x28 => "Screen Saver Enable",
0x29 => "Vertical Scroll",
0x2A => "Horizontal Scroll",
0x2B => "Character Report",
0x2C => "Display Data",
0x2D => "Display Status",
0x2E => "Stat Not Ready",
0x2F => "Stat Ready",
0x30 => "Err Not a loadable character",
0x31 => "Err Font data cannot be read",
0x32 => "Cursor Position Report",
0x33 => "Row",
0x34 => "Column",
0x35 => "Rows",
0x36 => "Columns",
0x37 => "Cursor Pixel Positioning",
0x38 => "Cursor Mode",
0x39 => "Cursor Enable",
0x3A => "Cursor Blink",
0x3B => "Font Report",
0x3C => "Font Data",
0x3D => "Character Width",
0x3E => "Character Height",
0x3F => "Character Spacing Horizontal",
0x40 => "Character Spacing Vertical",
0x41 => "Unicode Character Set",
0x42 => "Font 7-Segment",
0x43 => "7-Segment Direct Map",
0x44 => "Font 14-Segment",
0x45 => "14-Segment Direct Map",
0x46 => "Display Brightness",
0x47 => "Display Contrast",
0x48 => "Character Attribute",
0x49 => "Attribute Readback",
0x4A => "Attribute Data",
0x4B => "Char Attr Enhance",
0x4C => "Char Attr Underline",
0x4D => "Char Attr Blink",
0x80 => "Bitmap Size X",
0x81 => "Bitmap Size Y",
0x82 => "Max Blit Size",
0x83 => "Bit Depth Format",
0x84 => "Display Orientation",
0x85 => "Palette Report",
0x86 => "Palette Data Size",
0x87 => "Palette Data Offset",
0x88 => "Palette Data",
0x8A => "Blit Report",
0x8B => "Blit Rectangle X1",
0x8C => "Blit Rectangle Y1",
0x8D => "Blit Rectangle X2",
0x8E => "Blit Rectangle Y2",
0x8F => "Blit Data",
0x90 => "Soft Button",
0x91 => "Soft Button ID",
0x92 => "Soft Button Side",
0x93 => "Soft Button Offset 1",
0x94 => "Soft Button Offset 2",
0x95 => "Soft Button Report",
0xC2 => "Soft Keys",
0xCC => "Display Data Extensions",
0xCF => "Character Mapping",
0xDD => "Unicode Equivalent",
0xDF => "Character Page Mapping",
0xFF => "Request Report",
_ => "Reserved",
}),
0x20 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Sensor",
0x10 => "Biometric",
0x11 => "Biometric: Human Presence",
0x12 => "Biometric: Human Proximity",
0x13 => "Biometric: Human Touch",
0x14 => "Biometric: Blood Pressure",
0x15 => "Biometric: Body Temperature",
0x16 => "Biometric: Heart Rate",
0x17 => "Biometric: Heart Rate Variability",
0x18 => "Biometric: Peripheral Oxygen Saturation",
0x19 => "Biometric: Respiratory Rate",
0x20 => "Electrical",
0x21 => "Electrical: Capacitance",
0x22 => "Electrical: Current",
0x23 => "Electrical: Power",
0x24 => "Electrical: Inductance",
0x25 => "Electrical: Resistance",
0x26 => "Electrical: Voltage",
0x27 => "Electrical: Potentiometer",
0x28 => "Electrical: Frequency",
0x29 => "Electrical: Period",
0x30 => "Environmental",
0x31 => "Environmental: Atmospheric Pressure",
0x32 => "Environmental: Humidity",
0x33 => "Environmental: Temperature",
0x34 => "Environmental: Wind Direction",
0x35 => "Environmental: Wind Speed",
0x36 => "Environmental: Air Quality",
0x37 => "Environmental: Heat Index",
0x38 => "Environmental: Surface Temperature",
0x39 => "Environmental: Volatile Organic Compounds",
0x3A => "Environmental: Object Presence",
0x3B => "Environmental: Object Proximity",
0x40 => "Light",
0x41 => "Light: Ambient Light",
0x42 => "Light: Consumer Infrared",
0x43 => "Light: Infrared Light",
0x44 => "Light: Visible Light",
0x45 => "Light: Ultraviolet Light",
0x50 => "Location",
0x51 => "Location: Broadcast",
0x52 => "Location: Dead Reckoning",
0x53 => "Location: GPS (Global Positioning System)",
0x54 => "Location: Lookup",
0x55 => "Location: Other",
0x56 => "Location: Static",
0x57 => "Location: Triangulation",
0x60 => "Mechanical",
0x61 => "Mechanical: Boolean Switch",
0x62 => "Mechanical: Boolean Switch Array",
0x63 => "Mechanical: Multivalue Switch",
0x64 => "Mechanical: Force",
0x65 => "Mechanical: Pressure",
0x66 => "Mechanical: Strain",
0x67 => "Mechanical: Weight",
0x68 => "Mechanical: Haptic Vibrator",
0x69 => "Mechanical: Hall Effect Switch",
0x70 => "Motion",
0x71 => "Motion: Accelerometer 1D",
0x72 => "Motion: Accelerometer 2D",
0x73 => "Motion: Accelerometer 3D",
0x74 => "Motion: Gyrometer 1D",
0x75 => "Motion: Gyrometer 2D",
0x76 => "Motion: Gyrometer 3D",
0x77 => "Motion: Motion Detector",
0x78 => "Motion: Speedometer",
0x79 => "Motion: Accelerometer",
0x7A => "Motion: Gyrometer",
0x7B => "Motion: Gravity Vector",
0x7C => "Motion: Linear Accelerometer",
0x80 => "Orientation",
0x81 => "Orientation: Compass 1D",
0x82 => "Orientation: Compass 2D",
0x83 => "Orientation: Compass 3D",
0x84 => "Orientation: Inclinometer 1D",
0x85 => "Orientation: Inclinometer 2D",
0x86 => "Orientation: Inclinometer 3D",
0x87 => "Orientation: Distance 1D",
0x88 => "Orientation: Distance 2D",
0x89 => "Orientation: Distance 3D",
0x8A => "Orientation: Device Orientation",
0x8B => "Orientation: Compass",
0x8C => "Orientation: Inclinometer",
0x8D => "Orientation: Distance",
0x8E => "Orientation: Relative Orientation",
0x8F => "Orientation: Simple Orientation",
0x90 => "Scanner",
0x91 => "Scanner: Barcode",
0x92 => "Scanner: RFID",
0x93 => "Scanner: NFC",
0xA0 => "Time",
0xA1 => "Time: Alarm Timer",
0xA2 => "Time: Real Time Clock",
0xB0 => "Personal Activity",
0xB1 => "Personal Activity: Activity Detection",
0xB2 => "Personal Activity: Device Position",
0xB3 => "Personal Activity: Floor Tracker",
0xB4 => "Personal Activity: Pedometer",
0xB5 => "Personal Activity: Step Detection",
0xC0 => "Orientation Extended",
0xC1 => "Orientation Extended: Geomagnetic Orientation",
0xC2 => "Orientation Extended: Magnetometer",
0xD0 => "Gesture",
0xD1 => "Gesture: Chassis Flip Gesture",
0xD2 => "Gesture: Hinge Fold Gesture",
0xE0 => "Other",
0xE1 => "Other: Custom",
0xE2 => "Other: Generic",
0xE3 => "Other: Generic Enumerator",
0xE4 => "Other: Hinge Angle",
0xF0 => "Vendor Reserved 1",
0xF1 => "Vendor Reserved 2",
0xF2 => "Vendor Reserved 3",
0xF3 => "Vendor Reserved 4",
0xF4 => "Vendor Reserved 5",
0xF5 => "Vendor Reserved 6",
0xF6 => "Vendor Reserved 7",
0xF7 => "Vendor Reserved 8",
0xF8 => "Vendor Reserved 9",
0xF9 => "Vendor Reserved 10",
0xFA => "Vendor Reserved 11",
0xFB => "Vendor Reserved 12",
0xFC => "Vendor Reserved 13",
0xFD => "Vendor Reserved 14",
0xFE => "Vendor Reserved 15",
0xFF => "Vendor Reserved 16",
0x200 => "Event",
0x201 => "Event: Sensor State",
0x202 => "Event: Sensor Event",
0x300 => "Property",
0x301 => "Property: Friendly Name",
0x302 => "Property: Persistent Unique ID",
0x303 => "Property: Sensor Status",
0x304 => "Property: Minimum Report Interval",
0x305 => "Property: Sensor Manufacturer",
0x306 => "Property: Sensor Model",
0x307 => "Property: Sensor Serial Number",
0x308 => "Property: Sensor Description",
0x309 => "Property: Sensor Connection Type",
0x30A => "Property: Sensor Device Path",
0x30B => "Property: Hardware Revision",
0x30C => "Property: Firmware Version",
0x30D => "Property: Release Date",
0x30E => "Property: Report Interval",
0x30F => "Property: Change Sensitivity Absolute",
0x310 => "Property: Change Sensitivity Percent of Range",
0x311 => "Property: Change Sensitivity Percent Relative",
0x312 => "Property: Accuracy",
0x313 => "Property: Resolution",
0x314 => "Property: Maximum",
0x315 => "Property: Minimum",
0x316 => "Property: Reporting State",
0x317 => "Property: Sampling Rate",
0x318 => "Property: Response Curve",
0x319 => "Property: Power State",
0x31A => "Property: Maximum FIFO Events",
0x31B => "Property: Report Latency",
0x31C => "Property: Flush FIFO Events",
0x31D => "Property: Maximum Power Consumption",
0x31E => "Property: Is Primary",
0x31F => "Property: Human Presence Detection Type",
0x400 => "Data Field: Location",
0x402 => "Data Field: Altitude Antenna Sea Level",
0x403 => "Data Field: Differential Reference Station ID",
0x404 => "Data Field: Altitude Ellipsoid Error",
0x405 => "Data Field: Altitude Ellipsoid",
0x406 => "Data Field: Altitude Sea Level Error",
0x407 => "Data Field: Altitude Sea Level",
0x408 => "Data Field: Differential GPS Data Age",
0x409 => "Data Field: Error Radius",
0x40A => "Data Field: Fix Quality",
0x40B => "Data Field: Fix Type",
0x40C => "Data Field: Geoidal Separation",
0x40D => "Data Field: GPS Operation Mode",
0x40E => "Data Field: GPS Selection Mode",
0x40F => "Data Field: GPS Status",
0x410 => "Data Field: Position Dilution of Precision",
0x411 => "Data Field: Horizontal Dilution of Precision",
0x412 => "Data Field: Vertical Dilution of Precision",
0x413 => "Data Field: Latitude",
0x414 => "Data Field: Longitude",
0x415 => "Data Field: True Heading",
0x416 => "Data Field: Magnetic Heading",
0x417 => "Data Field: Magnetic Variation",
0x418 => "Data Field: Speed",
0x419 => "Data Field: Satellites in View",
0x41A => "Data Field: Satellites in View Azimuth",
0x41B => "Data Field: Satellites in View Elevation",
0x41C => "Data Field: Satellites in View IDs",
0x41D => "Data Field: Satellites in View PRNs",
0x41E => "Data Field: Satellites in View S/N Ratios",
0x41F => "Data Field: Satellites Used Count",
0x420 => "Data Field: Satellites Used PRNs",
0x421 => "Data Field: NMEA Sentence",
0x422 => "Data Field: Address Line 1",
0x423 => "Data Field: Address Line 2",
0x424 => "Data Field: City",
0x425 => "Data Field: State or Province",
0x426 => "Data Field: Country or Region",
0x427 => "Data Field: Postal Code",
0x42A => "Property: Location",
0x42B => "Property: Location Desired Accuracy",
0x430 => "Data Field: Environmental",
0x431 => "Data Field: Atmospheric Pressure",
0x433 => "Data Field: Relative Humidity",
0x434 => "Data Field: Temperature",
0x435 => "Data Field: Wind Direction",
0x436 => "Data Field: Wind Speed",
0x437 => "Data Field: Air Quality Index",
0x438 => "Data Field: Equivalent CO2",
0x439 => "Data Field: Volatile Organic Compound Concentration",
0x43A => "Data Field: Object Presence",
0x43B => "Data Field: Object Proximity Range",
0x43C => "Data Field: Object Proximity Out of Range",
0x440 => "Property: Environmental",
0x441 => "Property: Reference Pressure",
0x450 => "Data Field: Motion",
0x451 => "Data Field: Motion State",
0x452 => "Data Field: Acceleration",
0x453 => "Data Field: Acceleration Axis X",
0x454 => "Data Field: Acceleration Axis Y",
0x455 => "Data Field: Acceleration Axis Z",
0x456 => "Data Field: Angular Velocity",
0x457 => "Data Field: Angular Velocity about X Axis",
0x458 => "Data Field: Angular Velocity about Y Axis",
0x459 => "Data Field: Angular Velocity about Z Axis",
0x45A => "Data Field: Angular Position",
0x45B => "Data Field: Angular Position about X Axis",
0x45C => "Data Field: Angular Position about Y Axis",
0x45D => "Data Field: Angular Position about Z Axis",
0x45E => "Data Field: Motion Speed",
0x45F => "Data Field: Motion Intensity",
0x470 => "Data Field: Orientation",
0x471 => "Data Field: Heading",
0x472 => "Data Field: Heading X Axis",
0x473 => "Data Field: Heading Y Axis",
0x474 => "Data Field: Heading Z Axis",
0x475 => "Data Field: Heading Compensated Magnetic North",
0x476 => "Data Field: Heading Compensated True North",
0x477 => "Data Field: Heading Magnetic North",
0x478 => "Data Field: Heading True North",
0x479 => "Data Field: Distance",
0x47A => "Data Field: Distance X Axis",
0x47B => "Data Field: Distance Y Axis",
0x47C => "Data Field: Distance Z Axis",
0x47D => "Data Field: Distance Out-of-Range",
0x47E => "Data Field: Tilt",
0x47F => "Data Field: Tilt X Axis",
0x480 => "Data Field: Tilt Y Axis",
0x481 => "Data Field: Tilt Z Axis",
0x482 => "Data Field: Rotation Matrix",
0x483 => "Data Field: Quaternion",
0x484 => "Data Field: Magnetic Flux",
0x485 => "Data Field: Magnetic Flux X Axis",
0x486 => "Data Field: Magnetic Flux Y Axis",
0x487 => "Data Field: Magnetic Flux Z Axis",
0x488 => "Data Field: Magnetometer Accuracy",
0x489 => "Data Field: Simple Orientation Direction",
0x490 => "Data Field: Mechanical",
0x491 => "Data Field: Boolean Switch State",
0x492 => "Data Field: Boolean Switch Array States",
0x493 => "Data Field: Multivalue Switch Value",
0x494 => "Data Field: Force",
0x495 => "Data Field: Absolute Pressure",
0x496 => "Data Field: Gauge Pressure",
0x497 => "Data Field: Strain",
0x498 => "Data Field: Weight",
0x4A0 => "Property: Mechanical",
0x4A1 => "Property: Vibration State",
0x4A2 => "Property: Forward Vibration Speed",
0x4A3 => "Property: Backward Vibration Speed",
0x4B0 => "Data Field: Biometric",
0x4B1 => "Data Field: Human Presence",
0x4B2 => "Data Field: Human Proximity Range",
0x4B3 => "Data Field: Human Proximity Out of Range",
0x4B4 => "Data Field: Human Touch State",
0x4B5 => "Data Field: Blood Pressure",
0x4B6 => "Data Field: Blood Pressure Diastolic",
0x4B7 => "Data Field: Blood Pressure Systolic",
0x4B8 => "Data Field: Heart Rate",
0x4B9 => "Data Field: Resting Heart Rate",
0x4BA => "Data Field: Heartbeat Interval",
0x4BB => "Data Field: Respiratory Rate",
0x4BC => "Data Field: SpO2",
0x4BD => "Data Field: Human Attention Detected",
0x4BE => "Data Field: Human Head Azimuth",
0x4BF => "Data Field: Human Head Altitude",
0x4C0 => "Data Field: Human Head Roll",
0x4C1 => "Data Field: Human Head Pitch",
0x4C2 => "Data Field: Human Head Yaw",
0x4C3 => "Data Field: Human Correlation Id",
0x4D0 => "Data Field: Light",
0x4D1 => "Data Field: Illuminance",
0x4D2 => "Data Field: Color Temperature",
0x4D3 => "Data Field: Chromaticity",
0x4D4 => "Data Field: Chromaticity X",
0x4D5 => "Data Field: Chromaticity Y",
0x4D6 => "Data Field: Consumer IR Sentence Receive",
0x4D7 => "Data Field: Infrared Light",
0x4D8 => "Data Field: Red Light",
0x4D9 => "Data Field: Green Light",
0x4DA => "Data Field: Blue Light",
0x4DB => "Data Field: Ultraviolet A Light",
0x4DC => "Data Field: Ultraviolet B Light",
0x4DD => "Data Field: Ultraviolet Index",
0x4DE => "Data Field: Near Infrared Light",
0x4DF => "Property: Light",
0x4E0 => "Property: Consumer IR Sentence Send",
0x4E2 => "Property: Auto Brightness Preferred",
0x4E3 => "Property: Auto Color Preferred",
0x4F0 => "Data Field: Scanner",
0x4F1 => "Data Field: RFID Tag 40 Bit",
0x4F2 => "Data Field: NFC Sentence Receive",
0x4F8 => "Property: Scanner",
0x4F9 => "Property: NFC Sentence Send",
0x500 => "Data Field: Electrical",
0x501 => "Data Field: Capacitance",
0x502 => "Data Field: Current",
0x503 => "Data Field: Electrical Power",
0x504 => "Data Field: Inductance",
0x505 => "Data Field: Resistance",
0x506 => "Data Field: Voltage",
0x507 => "Data Field: Frequency",
0x508 => "Data Field: Period",
0x509 => "Data Field: Percent of Range",
0x520 => "Data Field: Time",
0x521 => "Data Field: Year",
0x522 => "Data Field: Month",
0x523 => "Data Field: Day",
0x524 => "Data Field: Day of Week",
0x525 => "Data Field: Hour",
0x526 => "Data Field: Minute",
0x527 => "Data Field: Second",
0x528 => "Data Field: Millisecond",
0x529 => "Data Field: Timestamp",
0x52A => "Data Field: Julian Day of Year",
0x52B => "Data Field: Time Since System Boot",
0x530 => "Property: Time",
0x531 => "Property: Time Zone Offset from UTC",
0x532 => "Property: Time Zone Name",
0x533 => "Property: Daylight Savings Time Observed",
0x534 => "Property: Time Trim Adjustment",
0x535 => "Property: Arm Alarm",
0x540 => "Data Field: Custom",
0x541 => "Data Field: Custom Usage",
0x542 => "Data Field: Custom Boolean Array",
0x543 => "Data Field: Custom Value",
0x544 => "Data Field: Custom Value 1",
0x545 => "Data Field: Custom Value 2",
0x546 => "Data Field: Custom Value 3",
0x547 => "Data Field: Custom Value 4",
0x548 => "Data Field: Custom Value 5",
0x549 => "Data Field: Custom Value 6",
0x54A => "Data Field: Custom Value 7",
0x54B => "Data Field: Custom Value 8",
0x54C => "Data Field: Custom Value 9",
0x54D => "Data Field: Custom Value 10",
0x54E => "Data Field: Custom Value 11",
0x54F => "Data Field: Custom Value 12",
0x550 => "Data Field: Custom Value 13",
0x551 => "Data Field: Custom Value 14",
0x552 => "Data Field: Custom Value 15",
0x553 => "Data Field: Custom Value 16",
0x554 => "Data Field: Custom Value 17",
0x555 => "Data Field: Custom Value 18",
0x556 => "Data Field: Custom Value 19",
0x557 => "Data Field: Custom Value 20",
0x558 => "Data Field: Custom Value 21",
0x559 => "Data Field: Custom Value 22",
0x55A => "Data Field: Custom Value 23",
0x55B => "Data Field: Custom Value 24",
0x55C => "Data Field: Custom Value 25",
0x55D => "Data Field: Custom Value 26",
0x55E => "Data Field: Custom Value 27",
0x55F => "Data Field: Custom Value 28",
0x560 => "Data Field: Generic",
0x561 => "Data Field: Generic GUID or PROPERTYKEY",
0x562 => "Data Field: Generic Category GUID",
0x563 => "Data Field: Generic Type GUID",
0x564 => "Data Field: Generic Event PROPERTYKEY",
0x565 => "Data Field: Generic Property PROPERTYKEY",
0x566 => "Data Field: Generic Data Field PROPERTYKEY",
0x567 => "Data Field: Generic Event",
0x568 => "Data Field: Generic Property",
0x569 => "Data Field: Generic Data Field",
0x56A => "Data Field: Enumerator Table Row Index",
0x56B => "Data Field: Enumerator Table Row Count",
0x56C => "Data Field: Generic GUID or PROPERTYKEY kind",
0x56D => "Data Field: Generic GUID",
0x56E => "Data Field: Generic PROPERTYKEY",
0x56F => "Data Field: Generic Top Level Collection ID",
0x570 => "Data Field: Generic Report ID",
0x571 => "Data Field: Generic Report Item Position Index",
0x572 => "Data Field: Generic Firmware VARTYPE",
0x573 => "Data Field: Generic Unit of Measure",
0x574 => "Data Field: Generic Unit Exponent",
0x575 => "Data Field: Generic Report Size",
0x576 => "Data Field: Generic Report Count",
0x580 => "Property: Generic",
0x581 => "Property: Enumerator Table Row Index",
0x582 => "Property: Enumerator Table Row Count",
0x590 => "Data Field: Personal Activity",
0x591 => "Data Field: Activity Type",
0x592 => "Data Field: Activity State",
0x593 => "Data Field: Device Position",
0x594 => "Data Field: Step Count",
0x595 => "Data Field: Step Count Reset",
0x596 => "Data Field: Step Duration",
0x597 => "Data Field: Step Type",
0x5A0 => "Property: Minimum Activity Detection Interval",
0x5A1 => "Property: Supported Activity Types",
0x5A2 => "Property: Subscribed Activity Types",
0x5A3 => "Property: Supported Step Types",
0x5A4 => "Property: Subscribed Step Types",
0x5A5 => "Property: Floor Height",
0x5B0 => "Data Field: Custom Type ID",
0x5C0 => "Property: Custom",
0x5C1 => "Property: Custom Value 1",
0x5C2 => "Property: Custom Value 2",
0x5C3 => "Property: Custom Value 3",
0x5C4 => "Property: Custom Value 4",
0x5C5 => "Property: Custom Value 5",
0x5C6 => "Property: Custom Value 6",
0x5C7 => "Property: Custom Value 7",
0x5C8 => "Property: Custom Value 8",
0x5C9 => "Property: Custom Value 9",
0x5CA => "Property: Custom Value 10",
0x5CB => "Property: Custom Value 11",
0x5CC => "Property: Custom Value 12",
0x5CD => "Property: Custom Value 13",
0x5CE => "Property: Custom Value 14",
0x5CF => "Property: Custom Value 15",
0x5D0 => "Property: Custom Value 16",
0x5E0 => "Data Field: Hinge",
0x5E1 => "Data Field: Hinge Angle",
0x5F0 => "Data Field: Gesture Sensor",
0x5F1 => "Data Field: Gesture State",
0x5F2 => "Data Field: Hinge Fold Initial Angle",
0x5F3 => "Data Field: Hinge Fold Final Angle",
0x5F4 => "Data Field: Hinge Fold Contributing Panel",
0x5F5 => "Data Field: Hinge Fold Type",
0x800 => "Sensor State: Undefined",
0x801 => "Sensor State: Ready",
0x802 => "Sensor State: Not Available",
0x803 => "Sensor State: No Data",
0x804 => "Sensor State: Initializing",
0x805 => "Sensor State: Access Denied",
0x806 => "Sensor State: Error",
0x810 => "Sensor Event: Unknown",
0x811 => "Sensor Event: State Changed",
0x812 => "Sensor Event: Property Changed",
0x813 => "Sensor Event: Data Updated",
0x814 => "Sensor Event: Poll Response",
0x815 => "Sensor Event: Change Sensitivity",
0x816 => "Sensor Event: Range Maximum Reached",
0x817 => "Sensor Event: Range Minimum Reached",
0x818 => "Sensor Event: High Threshold Cross Upward",
0x819 => "Sensor Event: High Threshold Cross Downward",
0x81A => "Sensor Event: Low Threshold Cross Upward",
0x81B => "Sensor Event: Low Threshold Cross Downward",
0x81C => "Sensor Event: Zero Threshold Cross Upward",
0x81D => "Sensor Event: Zero Threshold Cross Downward",
0x81E => "Sensor Event: Period Exceeded",
0x81F => "Sensor Event: Frequency Exceeded",
0x820 => "Sensor Event: Complex Trigger",
0x830 => "Connection Type: PC Integrated",
0x831 => "Connection Type: PC Attached",
0x832 => "Connection Type: PC External",
0x840 => "Reporting State: Report No Events",
0x841 => "Reporting State: Report All Events",
0x842 => "Reporting State: Report Threshold Events",
0x843 => "Reporting State: Wake On No Events",
0x844 => "Reporting State: Wake On All Events",
0x845 => "Reporting State: Wake On Threshold Events",
0x846 => "Reporting State: Anytime",
0x850 => "Power State: Undefined",
0x851 => "Power State: D0 Full Power",
0x852 => "Power State: D1 Low Power",
0x853 => "Power State: D2 Standby Power with Wakeup",
0x854 => "Power State: D3 Sleep with Wakeup",
0x855 => "Power State: D4 Power Off",
0x860 => "Accuracy: Default",
0x861 => "Accuracy: High",
0x862 => "Accuracy: Medium",
0x863 => "Accuracy: Low",
0x870 => "Fix Quality: No Fix",
0x871 => "Fix Quality: GPS",
0x872 => "Fix Quality: DGPS",
0x880 => "Fix Type: No Fix",
0x881 => "Fix Type: GPS SPS Mode, Fix Valid",
0x882 => "Fix Type: DGPS SPS Mode, Fix Valid",
0x883 => "Fix Type: GPS PPS Mode, Fix Valid",
0x884 => "Fix Type: Real Time Kinematic",
0x885 => "Fix Type: Float RTK",
0x886 => "Fix Type: Estimated (dead reckoned)",
0x887 => "Fix Type: Manual Input Mode",
0x888 => "Fix Type: Simulator Mode",
0x890 => "GPS Operation Mode: Manual",
0x891 => "GPS Operation Mode: Automatic",
0x8A0 => "GPS Selection Mode: Autonomous",
0x8A1 => "GPS Selection Mode: DGPS",
0x8A2 => "GPS Selection Mode: Estimated (dead reckoned)",
0x8A3 => "GPS Selection Mode: Manual Input",
0x8A4 => "GPS Selection Mode: Simulator",
0x8A5 => "GPS Selection Mode: Data Not Valid",
0x8B0 => "GPS Status Data: Valid",
0x8B1 => "GPS Status Data: Not Valid",
0x8C0 => "Day of Week: Sunday",
0x8C1 => "Day of Week: Monday",
0x8C2 => "Day of Week: Tuesday",
0x8C3 => "Day of Week: Wednesday",
0x8C4 => "Day of Week: Thursday",
0x8C5 => "Day of Week: Friday",
0x8C6 => "Day of Week: Saturday",
0x8D0 => "Kind: Category",
0x8D1 => "Kind: Type",
0x8D2 => "Kind: Event",
0x8D3 => "Kind: Property",
0x8D4 => "Kind: Data Field",
0x8E0 => "Magnetometer Accuracy: Low",
0x8E1 => "Magnetometer Accuracy: Medium",
0x8E2 => "Magnetometer Accuracy: High",
0x8F0 => "Simple Orientation Direction: Not Rotated",
0x8F1 => "Simple Orientation Direction: Rotated 90 Degrees CCW",
0x8F2 => "Simple Orientation Direction: Degrees CCW",
0x8F3 => "Simple Orientation Direction: Degrees CCW",
0x8F4 => "Simple Orientation Direction: Face Up",
0x8F5 => "Simple Orientation Direction: Face Down",
0x900 => "VT_NULL",
0x901 => "VT_BOOL",
0x902 => "VT_UI1",
0x903 => "VT_I1",
0x904 => "VT_UI2",
0x905 => "VT_I2",
0x906 => "VT_UI4",
0x907 => "VT_I4",
0x908 => "VT_UI8",
0x909 => "VT_I8",
0x90A => "VT_R4",
0x90B => "VT_R8",
0x90C => "VT_WSTR",
0x90D => "VT_STR",
0x90E => "VT_CLSID",
0x90F => "VT_VECTOR VT_UI1",
0x910 => "VT_F16E0",
0x911 => "VT_F16E1",
0x912 => "VT_F16E2",
0x913 => "VT_F16E3",
0x914 => "VT_F16E4",
0x915 => "VT_F16E5",
0x916 => "VT_F16E6",
0x917 => "VT_F16E7",
0x918 => "VT_F16E8",
0x919 => "VT_F16E9",
0x91A => "VT_F16EA",
0x91B => "VT_F16EB",
0x91C => "VT_F16EC",
0x91D => "VT_F16ED",
0x91E => "VT_F16EE",
0x91F => "VT_F16EF",
0x920 => "VT_F32E0",
0x921 => "VT_F32E1",
0x922 => "VT_F32E2",
0x923 => "VT_F32E3",
0x924 => "VT_F32E4",
0x925 => "VT_F32E5",
0x926 => "VT_F32E6",
0x927 => "VT_F32E7",
0x928 => "VT_F32E8",
0x929 => "VT_F32E9",
0x92A => "VT_F32EA",
0x92B => "VT_F32EB",
0x92C => "VT_F32EC",
0x92D => "VT_F32ED",
0x92E => "VT_F32EE",
0x92F => "VT_F32EF",
0x930 => "Activity Type: Unknown",
0x931 => "Activity Type: Stationary",
0x932 => "Activity Type: Fidgeting",
0x933 => "Activity Type: Walking",
0x934 => "Activity Type: Running",
0x935 => "Activity Type: In Vehicle",
0x936 => "Activity Type: Biking",
0x937 => "Activity Type: Idle",
0x940 => "Unit: Not Specified",
0x941 => "Unit: Lux",
0x942 => "Unit: Degrees Kelvin",
0x943 => "Unit: Degrees Celsius",
0x944 => "Unit: Pascal",
0x945 => "Unit: Newton",
0x946 => "Unit: Meters/Second",
0x947 => "Unit: Kilogram",
0x948 => "Unit: Meter",
0x949 => "Unit: Meters/Second/Second",
0x94A => "Unit: Farad",
0x94B => "Unit: Ampere",
0x94C => "Unit: Watt",
0x94D => "Unit: Henry",
0x94E => "Unit: Ohm",
0x94F => "Unit: Volt",
0x950 => "Unit: Hertz",
0x951 => "Unit: Bar",
0x952 => "Unit: Degrees Anti-clockwise",
0x953 => "Unit: Degrees Clockwise",
0x954 => "Unit: Degrees",
0x955 => "Unit: Degrees/Second",
0x956 => "Unit: Degrees/Second/Second",
0x957 => "Unit: Knot",
0x958 => "Unit: Percent",
0x959 => "Unit: Second",
0x95A => "Unit: Millisecond",
0x95B => "Unit: G",
0x95C => "Unit: Bytes",
0x95D => "Unit: Milligauss",
0x95E => "Unit: Bits",
0x960 => "Activity State: No State Change",
0x961 => "Activity State: Start Activity",
0x962 => "Activity State: End Activity",
0x970 => "Exponent 0",
0x971 => "Exponent 1",
0x972 => "Exponent 2",
0x973 => "Exponent 3",
0x974 => "Exponent 4",
0x975 => "Exponent 5",
0x976 => "Exponent 6",
0x977 => "Exponent 7",
0x978 => "Exponent 8",
0x979 => "Exponent 9",
0x97A => "Exponent A",
0x97B => "Exponent B",
0x97C => "Exponent C",
0x97D => "Exponent D",
0x97E => "Exponent E",
0x97F => "Exponent F",
0x980 => "Device Position: Unknown",
0x981 => "Device Position: Unchanged",
0x982 => "Device Position: On Desk",
0x983 => "Device Position: In Hand",
0x984 => "Device Position: Moving in Bag",
0x985 => "Device Position: Stationary in Bag",
0x990 => "Step Type: Unknown",
0x991 => "Step Type: Walking",
0x992 => "Step Type: Running",
0x9A0 => "Gesture State: Unknown",
0x9A1 => "Gesture State: Started",
0x9A2 => "Gesture State: Completed",
0x9A3 => "Gesture State: Cancelled",
0x9B0 => "Hinge Fold Contributing Panel: Unknown",
0x9B1 => "Hinge Fold Contributing Panel: Panel 1",
0x9B2 => "Hinge Fold Contributing Panel: Panel 2",
0x9B3 => "Hinge Fold Contributing Panel: Both",
0x9B4 => "Hinge Fold Type: Unknown",
0x9B5 => "Hinge Fold Type: Increasing",
0x9B6 => "Hinge Fold Type: Decreasing",
0x9C0 => "Human Presence Detection Type: Vendor-Defined Non-Biometric",
0x9C1 => "Human Presence Detection Type: Vendor-Defined Biometric",
0x9C2 => "Human Presence Detection Type: Facial Biometric",
0x9C3 => "Human Presence Detection Type: Audio Biometric",
0x1000 => "Modifier: Change Sensitivity Absolute",
0x2000 => "Modifier: Maximum",
0x3000 => "Modifier: Minimum",
0x4000 => "Modifier: Accuracy",
0x5000 => "Modifier: Resolution",
0x6000 => "Modifier: Threshold High",
0x7000 => "Modifier: Threshold Low",
0x8000 => "Modifier: Calibration Offset",
0x9000 => "Modifier: Calibration Multiplier",
0xA000 => "Modifier: Report Interval",
0xB000 => "Modifier: Frequency Max",
0xC000 => "Modifier: Period Max",
0xD000 => "Modifier: Change Sensitivity Percent of Range",
0xE000 => "Modifier: Change Sensitivity Percent Relative",
0xF000 => "Modifier: Vendor Reserved",
_ => "Reserved",
}),
0x40 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Medical Ultrasound",
0x20 => "VCR/Acquisition",
0x21 => "Freeze/Thaw",
0x22 => "Clip Store",
0x23 => "Update",
0x24 => "Next",
0x25 => "Save",
0x26 => "Print",
0x27 => "Microphone Enable",
0x40 => "Cine",
0x41 => "Transmit Power",
0x42 => "Volume",
0x43 => "Focus",
0x44 => "Depth",
0x60 => "Soft Step - Primary",
0x61 => "Soft Step - Secondary",
0x70 => "Depth Gain Compensation",
0x80 => "Zoom Select",
0x81 => "Zoom Adjust",
0x82 => "Spectral Doppler Mode Select",
0x83 => "Spectral Doppler Adjust",
0x84 => "Color Doppler Mode Select",
0x85 => "Color Doppler Adjust",
0x86 => "Motion Mode Select",
0x87 => "Motion Mode Adjust",
0x88 => "2-D Mode Select",
0x89 => "2-D Mode Adjust",
0xA0 => "Soft Control Select",
0xA1 => "Soft Control Adjust",
_ => "Reserved",
}),
0x41 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Braille Display",
0x02 => "Braille Row",
0x03 => "8 Dot Braille Cell",
0x04 => "6 Dot Braille Cell",
0x05 => "Number of Braille Cells",
0x06 => "Screen Reader Control",
0x07 => "Screen Reader Identifier",
0xFA => "Router Set 1",
0xFB => "Router Set 2",
0xFC => "Router Set 3",
0x100 => "Router Key",
0x101 => "Row Router Key",
0x200 => "Braille Buttons",
0x201 => "Braille Keyboard Dot 1",
0x202 => "Braille Keyboard Dot 2",
0x203 => "Braille Keyboard Dot 3",
0x204 => "Braille Keyboard Dot 4",
0x205 => "Braille Keyboard Dot 5",
0x206 => "Braille Keyboard Dot 6",
0x207 => "Braille Keyboard Dot 7",
0x208 => "Braille Keyboard Dot 8",
0x209 => "Braille Keyboard Space",
0x20A => "Braille Keyboard Left Space",
0x20B => "Braille Keyboard Right Space",
0x20C => "Braille Face Controls",
0x20D => "Braille Left Controls",
0x20E => "Braille Right Controls",
0x20F => "Braille Top Controls",
0x210 => "Braille Joystick Center",
0x211 => "Braille Joystick Up",
0x212 => "Braille Joystick Down",
0x213 => "Braille Joystick Left",
0x214 => "Braille Joystick Right",
0x215 => "Braille D-Pad Center",
0x216 => "Braille D-Pad Up",
0x217 => "Braille D-Pad Down",
0x218 => "Braille D-Pad Left",
0x219 => "Braille D-Pad Right",
0x21A => "Braille Pan Left",
0x21B => "Braille Pan Right",
0x21C => "Braille Rocker Up",
0x21D => "Braille Rocker Down",
0x21E => "Braille Rocker Press",
_ => "Reserved",
}),
0x59 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "LampArray",
0x02 => "LampArrayAttributesReport",
0x03 => "LampCount",
0x04 => "BoundingBoxWidthInMicrometers",
0x05 => "BoundingBoxHeightInMicrometers",
0x06 => "BoundingBoxDepthInMicrometers",
0x07 => "LampArrayKind",
0x08 => "MinUpdateIntervalInMicroseconds",
0x20 => "LampAttributesRequestReport",
0x21 => "LampId",
0x22 => "LampAttributesResponseReport",
0x23 => "PositionXInMicrometers",
0x24 => "PositionYInMicrometers",
0x25 => "PositionZInMicrometers",
0x26 => "LampPurposes",
0x27 => "UpdateLatencyInMicroseconds",
0x28 => "RedLevelCount",
0x29 => "GreenLevelCount",
0x2A => "BlueLevelCount",
0x2B => "IntensityLevelCount",
0x2C => "IsProgrammable",
0x2D => "InputBinding",
0x50 => "LampMultiUpdateReport",
0x51 => "RedUpdateChannel",
0x52 => "GreenUpdateChannel",
0x53 => "BlueUpdateChannel",
0x54 => "IntensityUpdateChannel",
0x55 => "LampUpdateFlags",
0x60 => "LampRangeUpdateReport",
0x61 => "LampIdStart",
0x62 => "LampIdEnd",
0x70 => "LampArrayControlReport",
0x71 => "AutonomousMode",
_ => "Reserved",
}),
0x80 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Monitor Control",
0x02 => "EDID Information",
0x03 => "VDIF Information",
0x04 => "VESA Version",
_ => "Reserved",
}),
0x81 => match usage {
0x00 => Cow::Borrowed("Reserved"),
_ => Cow::Owned(format!("Enum {}", usage)),
},
0x82 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Degauss",
0x10 => "Brightness",
0x12 => "Contrast",
0x16 => "Red Video Gain",
0x18 => "Green Video Gain",
0x1A => "Blue Video Gain",
0x1C => "Focus",
0x20 => "Horizontal Position",
0x22 => "Horizontal Size",
0x24 => "Horizontal Pincushion",
0x26 => "Horizontal Pincushion Balance",
0x28 => "Horizontal Misconvergence",
0x2A => "Horizontal Linearity",
0x2C => "Horizontal Linearity Balance",
0x30 => "Vertical Position",
0x32 => "Vertical Size",
0x34 => "Vertical Pincushion",
0x36 => "Vertical Pincushion Balance",
0x38 => "Vertical Misconvergence",
0x3A => "Vertical Linearity",
0x3C => "Vertical Linearity Balance",
0x40 => "Parallelogram Distortion (Key Balance)",
0x42 => "Trapezoidal Distortion (Key)",
0x44 => "Tilt (Rotation)",
0x46 => "Top Corner Distortion Control",
0x48 => "Top Corner Distortion Balance",
0x4A => "Bottom Corner Distortion Control",
0x4C => "Bottom Corner Distortion Balance",
0x56 => "Horizontal Moiré",
0x58 => "Vertical Moiré",
0x5E => "Input Level Select",
0x60 => "Input Source Select",
0x6C => "Red Video Black Level",
0x6E => "Green Video Black Level",
0x70 => "Blue Video Black Level",
0xA2 => "Auto Size Center",
0xA4 => "Polarity Horizontal Synchronization",
0xA6 => "Polarity Vertical Synchronization",
0xA8 => "Synchronization Type",
0xAA => "Screen Orientation",
0xAC => "Horizontal Frequency",
0xAE => "Vertical Frequency",
0xB0 => "Settings",
0xCA => "On Screen Display",
0xD4 => "Stereo Mode",
_ => "Reserved",
}),
0x84 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "iName",
0x02 => "Present Status",
0x03 => "Changed Status",
0x04 => "UPS",
0x05 => "Power Supply",
0x10 => "Battery System",
0x11 => "Battery System Id",
0x12 => "Battery",
0x13 => "Battery Id",
0x14 => "Charger",
0x15 => "Charger Id",
0x16 => "Power Converter",
0x17 => "Power Converter Id",
0x18 => "Outlet System",
0x19 => "Outlet System Id",
0x1A => "Input",
0x1B => "Input Id",
0x1C => "Output",
0x1D => "Output Id",
0x1E => "Flow",
0x1F => "Flow Id",
0x20 => "Outlet",
0x21 => "Outlet Id",
0x22 => "Gang",
0x23 => "Gang Id",
0x24 => "Power Summary",
0x25 => "Power Summary Id",
0x30 => "Voltage",
0x31 => "Current",
0x32 => "Frequency",
0x33 => "Apparent Power",
0x34 => "Active Power",
0x35 => "Percent Load",
0x36 => "Temperature",
0x37 => "Humidity",
0x38 => "Bad Count",
0x40 => "Config Voltage",
0x41 => "Config Current",
0x42 => "Config Frequency",
0x43 => "Config Apparent Power",
0x44 => "Config Active Power",
0x45 => "Config Percent Load",
0x46 => "Config Temperature",
0x47 => "Config Humidity",
0x50 => "Switch On Control",
0x51 => "Switch Off Control",
0x52 => "Toggle Control",
0x53 => "Low Voltage Transfer",
0x54 => "High Voltage Transfer",
0x55 => "Delay Before Reboot",
0x56 => "Delay Before Startup",
0x57 => "Delay Before Shutdown",
0x58 => "Test",
0x59 => "Module Reset",
0x5A => "Audible Alarm Control",
0x60 => "Present",
0x61 => "Good",
0x62 => "Internal Failure",
0x63 => "Voltag Out Of Range",
0x64 => "Frequency Out Of Range",
0x65 => "Overload",
0x66 => "Over Charged",
0x67 => "Over Temperature",
0x68 => "Shutdown Requested",
0x69 => "Shutdown Imminent",
0x6B => "Switch On/Off",
0x6C => "Switchable",
0x6D => "Used",
0x6E => "Boost",
0x6F => "Buck",
0x70 => "Initialized",
0x71 => "Tested",
0x72 => "Awaiting Power",
0x73 => "Communication Lost",
0xFD => "iManufacturer",
0xFE => "iProduct",
0xFF => "iSerialNumber",
_ => "Reserved",
}),
0x85 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Smart Battery Battery Mode",
0x02 => "Smart Battery Battery Status",
0x03 => "Smart Battery Alarm Warning",
0x04 => "Smart Battery Charger Mode",
0x05 => "Smart Battery Charger Status",
0x06 => "Smart Battery Charger Spec Info",
0x07 => "Smart Battery Selector State",
0x08 => "Smart Battery Selector Presets",
0x09 => "Smart Battery Selector Info",
0x10 => "Optional Mfg Function 1",
0x11 => "Optional Mfg Function 2",
0x12 => "Optional Mfg Function 3",
0x13 => "Optional Mfg Function 4",
0x14 => "Optional Mfg Function 5",
0x15 => "Connection To SM Bus",
0x16 => "Output Connection",
0x17 => "Charger Connection",
0x18 => "Battery Insertion",
0x19 => "Use Next",
0x1A => "OK To Use",
0x1B => "Battery Supported",
0x1C => "Selector Revision",
0x1D => "Charging Indicator",
0x28 => "Manufacturer Access",
0x29 => "Remaining Capacity Limit",
0x2A => "Remaining Time Limit",
0x2B => "At Rate",
0x2C => "Capacity Mode",
0x2D => "Broadcast To Charger",
0x2E => "Primary Battery",
0x2F => "Charge Controller",
0x40 => "Terminate Charge",
0x41 => "Terminate Discharge",
0x42 => "Below Remaining Capacity Limit",
0x43 => "Remaining Time Limit Expired",
0x44 => "Charging",
0x45 => "Discharging",
0x46 => "Fully Charged",
0x47 => "Fully Discharged",
0x48 => "Conditioning Flag",
0x49 => "At Rate OK",
0x4A => "Smart Battery Error Code",
0x4B => "Need Replacement",
0x60 => "At Rate Time To Full",
0x61 => "At Rate Time To Empty",
0x62 => "Average Current",
0x63 => "Max Error",
0x64 => "Relative State Of Charge",
0x65 => "Absolute State Of Charge",
0x66 => "Remaining Capacity",
0x67 => "Full Charge Capacity",
0x68 => "Run Time To Empty",
0x69 => "Average Time To Empty",
0x6A => "Average Time To Full",
0x6B => "Cycle Count",
0x80 => "Battery Pack Model Level",
0x81 => "Internal Charge Controller",
0x82 => "Primary Battery Support",
0x83 => "Design Capacity",
0x84 => "Specification Info",
0x85 => "Manufacture Date",
0x86 => "Serial Number",
0x87 => "iManufacturer Name",
0x88 => "iDevice Name",
0x89 => "iDevice Chemistry",
0x8A => "Manufacturer Data",
0x8B => "Rechargable",
0x8C => "Warning Capacity Limit",
0x8D => "Capacity Granularity 1",
0x8E => "Capacity Granularity 2",
0x8F => "iOEM Information",
0xC0 => "Inhibit Charge",
0xC1 => "Enable Polling",
0xC2 => "Reset To Zero",
0xD0 => "AC Present",
0xD1 => "Battery Present",
0xD2 => "Power Fail",
0xD3 => "Alarm Inhibited",
0xD4 => "Thermistor Under Range",
0xD5 => "Thermistor Hot",
0xD6 => "Thermistor Cold",
0xD7 => "Thermistor Over Range",
0xD8 => "Voltage Out Of Range",
0xD9 => "Current Out Of Range",
0xDA => "Current Not Regulated",
0xDB => "Voltage Not Regulated",
0xDC => "Master Mode",
0xF0 => "Charger Selector Support",
0xF1 => "Charger Spec",
0xF2 => "Level 2",
0xF3 => "Level 3",
_ => "Reserved",
}),
0x8C => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Barcode Badge Reader",
0x02 => "Barcode Scanner",
0x03 => "Dumb Bar Code Scanner",
0x04 => "Cordless Scanner Base",
0x05 => "Bar Code Scanner Cradle",
0x10 => "Attribute Report",
0x11 => "Settings Report",
0x12 => "Scanned Data Report",
0x13 => "Raw Scanned Data Report",
0x14 => "Trigger Report",
0x15 => "Status Report",
0x16 => "UPC/EAN Control Report",
0x17 => "EAN 2/3 Label Control Report",
0x18 => "Code 39 Control Report",
0x19 => "Interleaved 2 of 5 Control Report",
0x1A => "Standard 2 of 5 Control Report",
0x1B => "MSI Plessey Control Report",
0x1C => "Codabar Control Report",
0x1D => "Code 128 Control Report",
0x1E => "Misc 1D Control Report",
0x1F => "2D Control Report",
0x30 => "Aiming/Pointer Mode",
0x31 => "Bar Code Present Sensor",
0x32 => "Class 1A Laser",
0x33 => "Class 2 Laser",
0x34 => "Heater Present",
0x35 => "Contact Scanner",
0x36 => "Electronic Article Surveillance Notification",
0x37 => "Constant Electronic Article Surveillance",
0x38 => "Error Indication",
0x39 => "Fixed Beeper",
0x3A => "Good Decode Indication",
0x3B => "Hands Free Scanning",
0x3C => "Intrinsically Safe",
0x3D => "Klasse Eins Laser",
0x3E => "Long Range Scanner",
0x3F => "Mirror Speed Control",
0x40 => "Not On File Indication",
0x41 => "Programmable Beeper",
0x42 => "Triggerless",
0x43 => "Wand",
0x44 => "Water Resistant",
0x45 => "Multi-Range Scanner",
0x46 => "Proximity Sensor",
0x4D => "Fragment Decoding",
0x4E => "Scanner Read Confidence",
0x4F => "Data Prefix",
0x50 => "Prefix AIMI",
0x51 => "Prefix None",
0x52 => "Prefix Proprietary",
0x55 => "Active Time",
0x56 => "Aiming Laser Pattern",
0x57 => "Bar Code Present",
0x58 => "Beeper State",
0x59 => "Laser On Time",
0x5A => "Laser State",
0x5B => "Lockout Time",
0x5C => "Motor State",
0x5D => "Motor Timeout",
0x5E => "Power On Reset Scanner",
0x5F => "Prevent Read of Barcodes",
0x60 => "Initiate Barcode Read",
0x61 => "Trigger State",
0x62 => "Trigger Mode",
0x63 => "Trigger Mode Blinking Laser On",
0x64 => "Trigger Mode Continuous Laser On",
0x65 => "Trigger Mode Laser on while Pulled",
0x66 => "Trigger Mode Laser stays on after release",
0x6D => "Commit Parameters to NVM",
0x6E => "Parameter Scanning",
0x6F => "Parameters Changed",
0x70 => "Set parameter default values",
0x75 => "Scanner In Cradle",
0x76 => "Scanner In Range",
0x7A => "Aim Duration",
0x7B => "Good Read Lamp Duration",
0x7C => "Good Read Lamp Intensity",
0x7D => "Good Read LED",
0x7E => "Good Read Tone Frequency",
0x7F => "Good Read Tone Length",
0x80 => "Good Read Tone Volume",
0x82 => "No Read Message",
0x83 => "Not on File Volume",
0x84 => "Powerup Beep",
0x85 => "Sound Error Beep",
0x86 => "Sound Good Read Beep",
0x87 => "Sound Not On File Beep",
0x88 => "Good Read When to Write",
0x89 => "GRWTI After Decode",
0x8A => "GRWTI Beep/Lamp after transmit",
0x8B => "GRWTI No Beep/Lamp use at all",
0x91 => "Bookland EAN",
0x92 => "Convert EAN 8 to 13 Type",
0x93 => "Convert UPC A to EAN-13",
0x94 => "Convert UPC-E to A",
0x95 => "EAN-13",
0x96 => "EAN-8",
0x97 => "EAN-99 128 Mandatory",
0x98 => "EAN-99 P5/128 Optional",
0x99 => "Enable EAN Two Label",
0x9A => "UPC/EAN",
0x9B => "UPC/EAN Coupon Code",
0x9C => "UPC/EAN Periodicals",
0x9D => "UPC-A",
0x9E => "UPC-A Mandatory",
0x9F => "UPC-A Optional",
0xA0 => "UPC-A with P5 Optional",
0xA1 => "UPC-E",
0xA2 => "UPC-E1",
0xA9 => "Periodical",
0xAA => "Periodical Auto-Discriminate +2",
0xAB => "Periodical Only Decode with +2",
0xAC => "Periodical Ignore +2",
0xAD => "Periodical Auto-Discriminate +5",
0xAE => "Periodical Only Decode with +5",
0xAF => "Periodical Ignore +5",
0xB0 => "Check",
0xB1 => "Check Disable Price",
0xB2 => "Check Enable 4 digit Price",
0xB3 => "Check Enable 5 digit Price",
0xB4 => "Check Enable European 4 digit Price",
0xB5 => "Check Enable European 5 digit Price",
0xB7 => "EAN Two Label",
0xB8 => "EAN Three Label",
0xB9 => "EAN 8 Flag Digit 1",
0xBA => "EAN 8 Flag Digit 2",
0xBB => "EAN 8 Flag Digit 3",
0xBC => "EAN 13 Flag Digit 1",
0xBD => "EAN 13 Flag Digit 2",
0xBE => "EAN 13 Flag Digit 3",
0xBF => "Add Label Definition",
0xC0 => "Clear all Label Definitions",
0xC3 => "Codabar",
0xC4 => "Code 128",
0xC7 => "Code 39",
0xC8 => "Code 93",
0xC9 => "Full ASCII Conversion",
0xCA => "Interleaved 2 of 5",
0xCB => "Italian Pharmacy Code",
0xCC => "MSI/Plessey",
0xCD => "Standard 2 of 5 IATA",
0xCE => "Standard 2 of 5",
0xD3 => "Transmit Start/Stop",
0xD4 => "Tri-Optic",
0xD5 => "UCC/EAN-128",
0xD6 => "Check Digit",
0xD7 => "Check Digit Disable",
0xD8 => "Check Digit Enable Interleaved 2 of 5 OPCC",
0xD9 => "Check Digit Enable Interleaved 2 of 5 USS",
0xDA => "Check Digit Enable Standard 2 of 5 OPCC",
0xDB => "Check Digit Enable Standard 2 of 5 USS",
0xDC => "Check Digit Enable One MSI Plessey",
0xDD => "Check Digit Enable Two MSI Plessey",
0xDE => "Check Digit Codabar Enable",
0xDF => "Check Digit Code 39 Enable",
0xF0 => "Transmit Check Digit",
0xF1 => "Disable Check Digit Transmit",
0xF2 => "Enable Check Digit Transmit",
0xFB => "Symbology Identifier 1",
0xFC => "Symbology Identifier 2",
0xFD => "Symbology Identifier 3",
0xFE => "Decoded Data",
0xFF => "Decode Data Continued",
0x100 => "Bar Space Data",
0x101 => "Scanner Data Accuracy",
0x102 => "Raw Data Polarity",
0x103 => "Polarity Inverted Bar Code",
0x104 => "Polarity Normal Bar Code",
0x106 => "Minimum Length to Decode",
0x107 => "Maximum Length to Decode",
0x108 => "Discrete Length to Decode 1",
0x109 => "Discrete Length to Decode 2",
0x10A => "Data Length Method",
0x10B => "DL Method Read any",
0x10C => "DL Method Check in Range",
0x10D => "DL Method Check for Discrete",
0x110 => "Aztec Code",
0x111 => "BC412",
0x112 => "Channel Code",
0x113 => "Code 16",
0x114 => "Code 32",
0x115 => "Code 49",
0x116 => "Code One",
0x117 => "Colorcode",
0x118 => "Data Matrix",
0x119 => "MaxiCode",
0x11A => "MicroPDF",
0x11B => "PDF-417",
0x11C => "PosiCode",
0x11D => "QR Code",
0x11E => "SuperCode",
0x11F => "UltraCode",
0x120 => "USD-5 (Slug Code)",
0x121 => "VeriCode",
_ => "Reserved",
}),
0x8D => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "Scales",
0x20 => "Scale Device",
0x21 => "Scale Class",
0x22 => "Scale Class I Metric",
0x23 => "Scale Class II Metric",
0x24 => "Scale Class III Metric",
0x25 => "Scale Class IIIL Metric",
0x26 => "Scale Class IV Metric",
0x27 => "Scale Class III English",
0x28 => "Scale Class IIIL English",
0x29 => "Scale Class IV English",
0x2A => "Scale Class Generic",
0x30 => "Scale Attribute Report",
0x31 => "Scale Control Report",
0x32 => "Scale Data Report",
0x33 => "Scale Status Report",
0x34 => "Scale Weight Limit Report",
0x35 => "Scale Statistics Report",
0x40 => "Data Weight",
0x41 => "Data Scaling",
0x50 => "Weight Unit",
0x51 => "Weight Unit Milligram",
0x52 => "Weight Unit Gram",
0x53 => "Weight Unit Kilogram",
0x54 => "Weight Unit Carats",
0x55 => "Weight Unit Taels",
0x56 => "Weight Unit Grains",
0x57 => "Weight Unit Pennyweights",
0x58 => "Weight Unit Metric Ton",
0x59 => "Weight Unit Avoir Ton",
0x5A => "Weight Unit Troy Ounce",
0x5B => "Weight Unit Ounce",
0x5C => "Weight Unit Pound",
0x60 => "Calibration Count",
0x61 => "Re-Zero Count",
0x70 => "Scale Status",
0x71 => "Scale Status Fault",
0x72 => "Scale Status Stable at Center of Zero",
0x73 => "Scale Status In Motion",
0x74 => "Scale Status Weight Stable",
0x75 => "Scale Status Under Zero",
0x76 => "Scale Status Over Weight Limit",
0x77 => "Scale Status Requires Calibration",
0x78 => "Scale Status Requires Rezeroing",
0x80 => "Zero Scale",
0x81 => "Enforced Zero Return",
_ => "Reserved",
}),
0x8E => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "MSR Device Read-Only",
0x11 => "Track 1 Length",
0x12 => "Track 2 Length",
0x13 => "Track 3 Length",
0x14 => "Track JIS Length",
0x20 => "Track Data",
0x21 => "Track 1 Data",
0x22 => "Track 2 Data",
0x23 => "Track 3 Data",
0x24 => "Track JIS Data",
_ => "Reserved",
}),
0x90 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x20 => "Camera Auto-focus",
0x21 => "Camera Shutter",
_ => "Reserved",
}),
0x91 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "General Purpose IO Card",
0x02 => "Coin Door",
0x03 => "Watchdog Timer",
0x30 => "General Purpose Analog Input State",
0x31 => "General Purpose Digital Input State",
0x32 => "General Purpose Optical Input State",
0x33 => "General Purpose Digital Output State",
0x34 => "Number of Coin Doors",
0x35 => "Coin Drawer Drop Count",
0x36 => "Coin Drawer Start",
0x37 => "Coin Drawer Service",
0x38 => "Coin Drawer Tilt",
0x39 => "Coin Door Test",
0x40 => "Coin Door Lockout",
0x41 => "Watchdog Timeout",
0x42 => "Watchdog Action",
0x43 => "Watchdog Reboot",
0x44 => "Watchdog Restart",
0x45 => "Alarm Input",
0x46 => "Coin Door Counter",
0x47 => "I/O Direction Mapping",
0x48 => "Set I/O Direction Mapping",
0x49 => "Extended Optical Input State",
0x4A => "Pin Pad Input State",
0x4B => "Pin Pad Status",
0x4C => "Pin Pad Output",
0x4D => "Pin Pad Command",
_ => "Reserved",
}),
0x92 => Cow::Borrowed(match usage {
0x40 => "ACK",
0x41 => "Enable",
0x42 => "Disable",
0x43 => "Self Test",
0x44 => "Request GAT Report",
0x47 => "Calculate CRC",
0x210 => "Number of Note Data Entries",
0x211 => "Read Note Table",
0x212 => "Extend Timeout",
0x213 => "Accept Note/Ticket",
0x214 => "Return Note/Ticket",
0x21A => "Read Note Acceptor Metrics",
_ => "Reserved",
}),
0xF1D0 => Cow::Borrowed(match usage {
0x00 => "Undefined",
0x01 => "U2F Authenticator Device",
0x20 => "Input Report Data",
0x21 => "Output Report Data",
_ => "Reserved",
}),
_ => Cow::Borrowed(""),
}
}
impl Display for Usage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.usage_page {
Some(usage_page) => {
let usage = __usage_format_helper(
__data_to_unsigned(self.data()),
__data_to_unsigned(usage_page.data()),
);
if usage.is_empty() {
write!(f, "Usage")
} else {
write!(f, "Usage ({})", usage)
}
}
None => write!(f, "Usage"),
}
}
}
impl Display for UsageMinimum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.usage_page {
Some(usage_page) => {
let usage = __usage_format_helper(
__data_to_unsigned(self.data()),
__data_to_unsigned(usage_page.data()),
);
if usage.is_empty() {
write!(f, "Usage Minimum")
} else {
write!(f, "Usage Minimum ({})", usage)
}
}
None => write!(f, "Usage Minimum"),
}
}
}
impl Display for UsageMaximum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.usage_page {
Some(usage_page) => {
let usage = __usage_format_helper(
__data_to_unsigned(self.data()),
__data_to_unsigned(usage_page.data()),
);
if usage.is_empty() {
write!(f, "Usage Maximum")
} else {
write!(f, "Usage Maximum ({})", usage)
}
}
None => write!(f, "Usage Maximum"),
}
}
}
impl Display for DesignatorIndex {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "Designator Index"),
1.. => write!(f, "Designator Index ({})", __data_to_unsigned(self.data())),
}
}
}
impl Display for DesignatorMinimum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "Designator Minimum"),
1.. => write!(
f,
"Designator Minimum ({})",
__data_to_unsigned(self.data())
),
}
}
}
impl Display for DesignatorMaximum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "Designator Maximum"),
1.. => write!(
f,
"Designator Maximum ({})",
__data_to_unsigned(self.data())
),
}
}
}
impl Display for StringIndex {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "String Index"),
1.. => write!(f, "String Index ({})", __data_to_unsigned(self.data())),
}
}
}
impl Display for StringMinimum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "String Minimum"),
1.. => write!(f, "String Minimum ({})", __data_to_unsigned(self.data())),
}
}
}
impl Display for StringMaximum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "String Maximum"),
1.. => write!(f, "String Maximum ({})", __data_to_unsigned(self.data())),
}
}
}
impl Display for Delimiter {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.data().len() {
0 => write!(f, "Delimiter"),
1.. => write!(f, "Delimiter ({})", __data_to_unsigned(self.data())),
}
}
}