1use crate::{UsagePage, __data_size, __data_to_unsigned, __set_data_size, macros::*};
2use alloc::{borrow::Cow, format};
3use std::{
4 cmp::{Eq, PartialEq},
5 fmt::Display,
6};
7
8__impls_for_short_items! {
9 DesignatorIndex: 0b0011_1000;
12 DesignatorMinimum: 0b0100_1000;
15 DesignatorMaximum: 0b0101_1000;
18 StringIndex: 0b0111_1000;
21 StringMinimum: 0b1000_1000;
25 StringMaximum: 0b1001_1000;
29 Delimiter: 0b1010_1000;
32}
33
34#[derive(Clone, Debug)]
46pub struct Usage {
47 raw: [u8; 5],
48 usage_page: Option<UsagePage>,
49}
50
51#[derive(Clone, Debug)]
58pub struct UsageMinimum {
59 raw: [u8; 5],
60 usage_page: Option<UsagePage>,
61}
62#[derive(Clone, Debug)]
69pub struct UsageMaximum {
70 raw: [u8; 5],
71 usage_page: Option<UsagePage>,
72}
73
74impl AsRef<[u8]> for Usage {
75 fn as_ref(&self) -> &[u8] {
76 let end = __data_size(self.raw[0]) + 1;
77 &self.raw[..end]
78 }
79}
80
81impl Default for Usage {
82 fn default() -> Self {
83 Self {
84 raw: [Self::PREFIX, 0, 0, 0, 0],
85 usage_page: None,
86 }
87 }
88}
89
90impl Usage {
91 pub const PREFIX: u8 = 0b0000_1000;
94
95 pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
97 if raw.is_empty() {
98 return Err(crate::HidError::EmptyRawInput);
99 };
100 if raw[0] & 0b1111_1100 != Self::PREFIX {
101 return Err(crate::HidError::PrefixNotMatch);
102 }
103 let expected = crate::__data_size(raw[0]);
104 if expected + 1 != raw.len() {
105 return Err(crate::HidError::DataSizeNotMatch {
106 expected,
107 provided: raw.len() - 1,
108 });
109 };
110 let mut storage = [0; 5];
111 storage[..raw.len()].copy_from_slice(raw);
112 Ok(Self {
113 raw: storage,
114 usage_page: None,
115 })
116 }
117
118 pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
124 let mut storage = [0; 5];
125 storage[..raw.len()].copy_from_slice(raw);
126 Self {
127 raw: storage,
128 usage_page: None,
129 }
130 }
131
132 pub fn prefix(&self) -> u8 {
134 self.raw[0]
135 }
136
137 pub fn data(&self) -> &[u8] {
139 let end = __data_size(self.raw[0]) + 1;
140 &self.raw[1..end]
141 }
142
143 pub fn set_usage_page(&mut self, usage_page: UsagePage) {
150 self.usage_page = Some(usage_page);
151 }
152
153 pub fn usage_page(&self) -> Option<&UsagePage> {
155 self.usage_page.as_ref()
156 }
157
158 pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
162 let mut item = Self {
163 raw: [0; 5],
164 usage_page: None,
165 };
166 item.raw[0] = 0b0000_1000;
167 __set_data_size(&mut item.raw[0], data)?;
168 item.data_mut().copy_from_slice(data);
169 Ok(item)
170 }
171
172 pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
176 __set_data_size(&mut self.raw[0], data)?;
177 self.data_mut().copy_from_slice(data);
178 Ok(self)
179 }
180
181 pub fn data_mut(&mut self) -> &mut [u8] {
183 let end = __data_size(self.raw[0]) + 1;
184 &mut self.raw[1..end]
185 }
186}
187
188impl PartialEq for Usage {
189 fn eq(&self, other: &Self) -> bool {
190 self.raw.eq(&other.raw)
191 }
192}
193
194impl Eq for Usage {}
195
196impl AsRef<[u8]> for UsageMinimum {
197 fn as_ref(&self) -> &[u8] {
198 let end = __data_size(self.raw[0]) + 1;
199 &self.raw[..end]
200 }
201}
202
203impl Default for UsageMinimum {
204 fn default() -> Self {
205 Self {
206 raw: [Self::PREFIX, 0, 0, 0, 0],
207 usage_page: None,
208 }
209 }
210}
211
212impl UsageMinimum {
213 pub const PREFIX: u8 = 0b0001_1000;
216
217 pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
219 if raw.is_empty() {
220 return Err(crate::HidError::EmptyRawInput);
221 };
222 if raw[0] & 0b1111_1100 != Self::PREFIX {
223 return Err(crate::HidError::PrefixNotMatch);
224 }
225 let expected = crate::__data_size(raw[0]);
226 if expected + 1 != raw.len() {
227 return Err(crate::HidError::DataSizeNotMatch {
228 expected,
229 provided: raw.len() - 1,
230 });
231 };
232 let mut storage = [0; 5];
233 storage[..raw.len()].copy_from_slice(raw);
234 Ok(Self {
235 raw: storage,
236 usage_page: None,
237 })
238 }
239
240 pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
246 let mut storage = [0; 5];
247 storage[..raw.len()].copy_from_slice(raw);
248 Self {
249 raw: storage,
250 usage_page: None,
251 }
252 }
253
254 pub fn prefix(&self) -> u8 {
256 self.raw[0]
257 }
258
259 pub fn data(&self) -> &[u8] {
261 let end = __data_size(self.raw[0]) + 1;
262 &self.raw[1..end]
263 }
264
265 pub fn set_usage_page(&mut self, usage_page: UsagePage) {
272 self.usage_page = Some(usage_page);
273 }
274
275 pub fn usage_page(&self) -> Option<&UsagePage> {
277 self.usage_page.as_ref()
278 }
279
280 pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
284 let mut item = Self {
285 raw: [0; 5],
286 usage_page: None,
287 };
288 item.raw[0] = 0b0001_1000;
289 __set_data_size(&mut item.raw[0], data)?;
290 item.data_mut().copy_from_slice(data);
291 Ok(item)
292 }
293
294 pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
298 crate::__set_data_size(&mut self.raw[0], data)?;
299 self.data_mut().copy_from_slice(data);
300 Ok(self)
301 }
302
303 pub fn data_mut(&mut self) -> &mut [u8] {
305 let end = __data_size(self.raw[0]) + 1;
306 &mut self.raw[1..end]
307 }
308}
309
310impl PartialEq for UsageMinimum {
311 fn eq(&self, other: &Self) -> bool {
312 self.raw.eq(&other.raw)
313 }
314}
315
316impl Eq for UsageMinimum {}
317
318impl AsRef<[u8]> for UsageMaximum {
319 fn as_ref(&self) -> &[u8] {
320 let end = __data_size(self.raw[0]) + 1;
321 &self.raw[..end]
322 }
323}
324
325impl Default for UsageMaximum {
326 fn default() -> Self {
327 Self {
328 raw: [Self::PREFIX, 0, 0, 0, 0],
329 usage_page: None,
330 }
331 }
332}
333
334impl UsageMaximum {
335 pub const PREFIX: u8 = 0b0010_1000;
338
339 pub fn new(raw: &[u8]) -> Result<Self, crate::HidError> {
341 if raw.is_empty() {
342 return Err(crate::HidError::EmptyRawInput);
343 };
344 if raw[0] & 0b1111_1100 != Self::PREFIX {
345 return Err(crate::HidError::PrefixNotMatch);
346 }
347 let expected = crate::__data_size(raw[0]);
348 if expected + 1 != raw.len() {
349 return Err(crate::HidError::DataSizeNotMatch {
350 expected,
351 provided: raw.len() - 1,
352 });
353 };
354 let mut storage = [0; 5];
355 storage[..raw.len()].copy_from_slice(raw);
356 Ok(Self {
357 raw: storage,
358 usage_page: None,
359 })
360 }
361
362 pub unsafe fn new_unchecked(raw: &[u8]) -> Self {
368 let mut storage = [0; 5];
369 storage[..raw.len()].copy_from_slice(raw);
370 Self {
371 raw: storage,
372 usage_page: None,
373 }
374 }
375
376 pub fn prefix(&self) -> u8 {
378 self.raw[0]
379 }
380
381 pub fn data(&self) -> &[u8] {
383 let end = __data_size(self.raw[0]) + 1;
384 &self.raw[1..end]
385 }
386
387 pub fn set_usage_page(&mut self, usage_page: UsagePage) {
394 self.usage_page = Some(usage_page);
395 }
396
397 pub fn usage_page(&self) -> Option<&UsagePage> {
399 self.usage_page.as_ref()
400 }
401
402 pub fn new_with(data: &[u8]) -> Result<Self, crate::HidError> {
406 let mut item = Self {
407 raw: [0; 5],
408 usage_page: None,
409 };
410 item.raw[0] = 0b0010_1000;
411 crate::__set_data_size(&mut item.raw[0], data)?;
412 item.data_mut().copy_from_slice(data);
413 Ok(item)
414 }
415
416 pub fn set_data(&mut self, data: &[u8]) -> Result<&mut Self, crate::HidError> {
420 crate::__set_data_size(&mut self.raw[0], data)?;
421 self.data_mut().copy_from_slice(data);
422 Ok(self)
423 }
424
425 pub fn data_mut(&mut self) -> &mut [u8] {
427 let end = __data_size(self.raw[0]) + 1;
428 &mut self.raw[1..end]
429 }
430}
431
432impl PartialEq for UsageMaximum {
433 fn eq(&self, other: &Self) -> bool {
434 self.raw.eq(&other.raw)
435 }
436}
437
438impl Eq for UsageMaximum {}
439
440fn __usage_format_helper(usage: u32, usage_page: u32) -> Cow<'static, str> {
441 match usage_page {
442 0x01 => Cow::Borrowed(match usage {
444 0x00 => "Undefined",
445 0x01 => "Pointer",
446 0x02 => "Mouse",
447 0x04 => "Joystick",
448 0x05 => "Gamepad",
449 0x06 => "Keyboard",
450 0x07 => "Keypad",
451 0x08 => "Multi-Axis Controller",
452 0x09 => "Tablet PC System Controls",
453 0x0A => "Water Cooling Device",
454 0x0B => "Computer Chassis Device",
455 0x0C => "Wireless Radio Controls",
456 0x0D => "Portable Device Control",
457 0x0E => "System Multi-Axis Controller",
458 0x0F => "Spatial Controller",
459 0x10 => "Assistive Control",
460 0x11 => "Device Dock",
461 0x12 => "Dockable Device",
462 0x13 => "Call State Management Control",
463 0x30 => "X",
464 0x31 => "Y",
465 0x32 => "Z",
466 0x33 => "Rx",
467 0x34 => "Ry",
468 0x35 => "Rz",
469 0x36 => "Slider",
470 0x37 => "Dial",
471 0x38 => "Wheel",
472 0x39 => "Hat Switch",
473 0x3A => "Counted Buffer",
474 0x3B => "Byte Count",
475 0x3C => "Motion Wakeup",
476 0x3D => "Start",
477 0x3E => "Select",
478 0x40 => "Vx",
479 0x41 => "Vy",
480 0x42 => "Vz",
481 0x43 => "Vbrx",
482 0x44 => "Vbry",
483 0x45 => "Vbrz",
484 0x46 => "Vno",
485 0x47 => "Feature Notification",
486 0x48 => "Resolution Multiplier",
487 0x49 => "Qx",
488 0x4A => "Qy",
489 0x4B => "Qz",
490 0x4C => "Qw",
491 0x80 => "System Control",
492 0x81 => "System Power Down",
493 0x82 => "System Sleep",
494 0x83 => "System Wake Up",
495 0x84 => "System Context Menu",
496 0x85 => "System Main Menu",
497 0x86 => "System App Menu",
498 0x87 => "System Menu Help",
499 0x88 => "System Menu Exit",
500 0x89 => "System Menu Select",
501 0x8A => "System Menu Right",
502 0x8B => "System Menu Left",
503 0x8C => "System Menu Up",
504 0x8D => "System Menu Down",
505 0x8E => "System Cold Restart",
506 0x8F => "System Warm Restart",
507 0x90 => "D-pad Up",
508 0x91 => "D-pad Down",
509 0x92 => "D-pad Right",
510 0x93 => "D-pad Left",
511 0x94 => "Index Trigger",
512 0x95 => "Palm Trigger",
513 0x96 => "Thumbstick",
514 0x97 => "System Function Shift",
515 0x98 => "System Function Shift Lock",
516 0x99 => "System Function Shift Lock Indicator",
517 0x9A => "System Dismiss Notification",
518 0x9B => "System Do Not Disturb",
519 0xA0 => "System Dock",
520 0xA1 => "System Undock",
521 0xA2 => "System Setup",
522 0xA3 => "System Break",
523 0xA4 => "System Debugger Break",
524 0xA5 => "Application Break",
525 0xA6 => "Application Debugger Break",
526 0xA7 => "System Speaker Mute",
527 0xA8 => "System Hibernate",
528 0xA9 => "System Microphone Mute",
529 0xB0 => "System Display Invert",
530 0xB1 => "System Display Internal",
531 0xB2 => "System Display External",
532 0xB3 => "System Display Both",
533 0xB4 => "System Display Dual",
534 0xB5 => "System Display Toggle Int/Ext",
535 0xB6 => "System Display Swap Primary/Secondary",
536 0xB7 => "System Display LCD Autoscale",
537 0xC0 => "Sensor Zone",
538 0xC1 => "RPM",
539 0xC2 => "Coolant Level",
540 0xC3 => "Coolant Critical Level",
541 0xC4 => "Coolant Pump",
542 0xC5 => "Chassis Enclosure",
543 0xC6 => "Wireless Radio Button",
544 0xC7 => "Wireless Radio LED",
545 0xC8 => "Wireless Radio Slider Switch",
546 0xC9 => "System Display Rotation Lock Button",
547 0xCA => "System Display Rotation Lock Slider Switch",
548 0xCB => "Control Enable",
549 0xD0 => "Dockable Device Unique ID",
550 0xD1 => "Dockable Device Vendor ID",
551 0xD2 => "Dockable Device Primary Usage Page",
552 0xD3 => "Dockable Device Primary Usage ID",
553 0xD4 => "Dockable Device Docking State",
554 0xD5 => "Dockable Device Display Occlusion",
555 0xD6 => "Dockable Device Object Type",
556 0xE0 => "Call Active LED",
557 0xE1 => "Call Mute Toggle",
558 0xE2 => "Call Mute LED",
559 _ => "Reserved",
560 }),
561 0x02 => Cow::Borrowed(match usage {
563 0x00 => "Undefined",
564 0x01 => "Flight Simulation Device",
565 0x02 => "Automobile Simulation Device",
566 0x03 => "Tank Simulation Device",
567 0x04 => "Spaceship Simulation Device",
568 0x05 => "Submarine Simulation Device",
569 0x06 => "Sailing Simulation Device",
570 0x07 => "Motorcycle Simulation Device",
571 0x08 => "Sports Simulation Device",
572 0x09 => "Airplane Simulation Device",
573 0x0A => "Helicopter Simulation Device",
574 0x0B => "Magic Carpet Simulation Device",
575 0x0C => "Bicycle Simulation Device",
576 0x20 => "Flight Control Stick",
577 0x21 => "Flight Stick",
578 0x22 => "Cyclic Control",
579 0x23 => "Cyclic Trim",
580 0x24 => "Flight Yoke",
581 0x25 => "Track Control",
582 0xB0 => "Aileron",
583 0xB1 => "Aileron Trim",
584 0xB2 => "Anti-Torque Control",
585 0xB3 => "Autopilot Enable",
586 0xB4 => "Chaff Release",
587 0xB5 => "Collective Control",
588 0xB6 => "Dive Brake",
589 0xB7 => "Electronic Countermeasures",
590 0xB8 => "Elevator",
591 0xB9 => "Elevator Trim",
592 0xBA => "Rudder",
593 0xBB => "Throttle",
594 0xBC => "Flight Communications",
595 0xBD => "Flare Release",
596 0xBE => "Landing Gear",
597 0xBF => "Toe Brake",
598 0xC0 => "Trigger",
599 0xC1 => "Weapons Arm",
600 0xC2 => "Weapons Select",
601 0xC3 => "Wing Flaps",
602 0xC4 => "Accelerator",
603 0xC5 => "Brake",
604 0xC6 => "Clutch",
605 0xC7 => "Shifter",
606 0xC8 => "Steering",
607 0xC9 => "Turret Direction",
608 0xCA => "Barrel Elevation",
609 0xCB => "Dive Plane",
610 0xCC => "Ballast",
611 0xCD => "Bicycle Crank",
612 0xCE => "Handle Bars",
613 0xCF => "Front Brake",
614 0xD0 => "Rear Brake",
615 _ => "Reserved",
616 }),
617 0x03 => Cow::Borrowed(match usage {
619 0x00 => "Undefined",
620 0x01 => "Belt",
621 0x02 => "Body Suit",
622 0x03 => "Flexor",
623 0x04 => "Glove",
624 0x05 => "Head Tracker",
625 0x06 => "Head Mounted Display",
626 0x07 => "Hand Tracker",
627 0x08 => "Oculometer",
628 0x09 => "Vest",
629 0x0A => "Animatronic Device",
630 0x20 => "Stereo Enable",
631 0x21 => "Display Enable",
632 _ => "Reserved",
633 }),
634 0x04 => Cow::Borrowed(match usage {
636 0x00 => "Undefined",
637 0x01 => "Baseball Bat",
638 0x02 => "Golf Club",
639 0x03 => "Rowing Machine",
640 0x04 => "Treadmill",
641 0x30 => "Oar",
642 0x31 => "Slope",
643 0x32 => "Rate",
644 0x33 => "Stick Speed",
645 0x34 => "Stick Face Angle",
646 0x35 => "Stick Heel/Toe",
647 0x36 => "Stick Follow Through",
648 0x37 => "Stick Tempo",
649 0x38 => "Stick Type",
650 0x39 => "Stick Height",
651 0x50 => "Putter",
652 0x51 => "1 Iron",
653 0x52 => "2 Iron",
654 0x53 => "3 Iron",
655 0x54 => "4 Iron",
656 0x55 => "5 Iron",
657 0x56 => "6 Iron",
658 0x57 => "7 Iron",
659 0x58 => "8 Iron",
660 0x59 => "9 Iron",
661 0x5A => "10 Iron",
662 0x5B => "11 Iron",
663 0x5C => "Sand Wedge",
664 0x5D => "Loft Wedge",
665 0x5E => "Power Wedge",
666 0x5F => "1 Wood",
667 0x60 => "3 Wood",
668 0x61 => "5 Wood",
669 0x62 => "7 Wood",
670 0x63 => "9 Wood",
671 _ => "Reserved",
672 }),
673 0x05 => Cow::Borrowed(match usage {
675 0x00 => "Undefined",
676 0x01 => "3D Game Controller",
677 0x02 => "Pinball Device",
678 0x03 => "Gun Device",
679 0x20 => "Point of View",
680 0x21 => "Turn Right/Left",
681 0x22 => "Pitch Forward/Backward",
682 0x23 => "Roll Right/Left",
683 0x24 => "Move Right/Left",
684 0x25 => "Move Forward/Backward",
685 0x26 => "Move Up/Down",
686 0x27 => "Lean Right/Left",
687 0x28 => "Lean Forward/Backward",
688 0x29 => "Height of POV",
689 0x2A => "Flipper",
690 0x2B => "Secondary Flipper",
691 0x2C => "Bump",
692 0x2D => "New Game",
693 0x2E => "Shoot Ball",
694 0x2F => "Player",
695 0x30 => "Gun Bolt",
696 0x31 => "Gun Clip",
697 0x32 => "Gun Selector",
698 0x33 => "Gun Single Shot",
699 0x34 => "Gun Burst",
700 0x35 => "Gun Automatic",
701 0x36 => "Gun Safety",
702 0x37 => "Gamepad Fire/Jump",
703 0x39 => "Gamepad Trigger",
704 0x3A => "Form-fitting Gamepad",
705 _ => "Reserved",
706 }),
707 0x06 => Cow::Borrowed(match usage {
709 0x00 => "Undefined",
710 0x01 => "Background/Nonuser Controls",
711 0x20 => "Battery Strength",
712 0x21 => "Wireless Channel",
713 0x22 => "Wireless ID",
714 0x23 => "Discover Wireless Control",
715 0x24 => "Security Code Character Entered",
716 0x25 => "Security Code Character Erased",
717 0x26 => "Security Code Cleared",
718 0x27 => "Sequence ID",
719 0x28 => "Sequence ID Reset",
720 0x29 => "RF Signal Strength",
721 0x2A => "Software Version",
722 0x2B => "Protocol Version",
723 0x2C => "Hardware Version",
724 0x2D => "Major",
725 0x2E => "Minor",
726 0x2F => "Revision",
727 0x30 => "Handedness",
728 0x31 => "Either Hand",
729 0x32 => "Left Hand",
730 0x33 => "Right Hand",
731 0x34 => "Both Hands",
732 0x40 => "Grip Pose Offset",
733 0x41 => "Pointer Pose Offset",
734 _ => "Reserved",
735 }),
736 0x07 => Cow::Borrowed(match usage {
738 0x01 => "Keyboard ErrorRollOver",
739 0x02 => "Keyboard POSTFail",
740 0x03 => "Keyboard ErrorUndefined",
741 0x04 => "Keyboard a and A",
742 0x05 => "Keyboard b and B",
743 0x06 => "Keyboard c and C",
744 0x07 => "Keyboard d and D",
745 0x08 => "Keyboard e and E",
746 0x09 => "Keyboard f and F",
747 0x0A => "Keyboard g and G",
748 0x0B => "Keyboard h and H",
749 0x0C => "Keyboard i and I",
750 0x0D => "Keyboard j and J",
751 0x0E => "Keyboard k and K",
752 0x0F => "Keyboard l and L",
753 0x10 => "Keyboard m and M",
754 0x11 => "Keyboard n and N",
755 0x12 => "Keyboard o and O",
756 0x13 => "Keyboard p and P",
757 0x14 => "Keyboard q and Q",
758 0x15 => "Keyboard r and R",
759 0x16 => "Keyboard s and S",
760 0x17 => "Keyboard t and T",
761 0x18 => "Keyboard u and U",
762 0x19 => "Keyboard v and V",
763 0x1A => "Keyboard w and W",
764 0x1B => "Keyboard x and X",
765 0x1C => "Keyboard y and Y",
766 0x1D => "Keyboard z and Z",
767 0x1E => "Keyboard 1 and !",
768 0x1F => "Keyboard 2 and @",
769 0x20 => "Keyboard 3 and #",
770 0x21 => "Keyboard 4 and $",
771 0x22 => "Keyboard 5 and %",
772 0x23 => "Keyboard 6 and ∧",
773 0x24 => "Keyboard 7 and &",
774 0x25 => "Keyboard 8 and *",
775 0x26 => "Keyboard 9 and (",
776 0x27 => "Keyboard 0 and )",
777 0x28 => "Keyboard Return (ENTER)",
778 0x29 => "Keyboard ESCAPE",
779 0x2A => "Keyboard DELETE (Backspace)",
780 0x2B => "Keyboard Tab",
781 0x2C => "Keyboard Spacebar",
782 0x2D => "Keyboard - and (underscore)",
783 0x2E => "Keyboard = and +",
784 0x2F => "Keyboard [ and {",
785 0x30 => "Keyboard ] and }",
786 0x31 => "Keyboard \\ and |",
787 0x32 => "Keyboard Non-US # and ˜",
788 0x33 => "Keyboard ; and :",
789 0x34 => "Keyboard ‘ and “",
790 0x35 => "Keyboard Grave Accent and Tilde",
791 0x36 => "Keyboard , and <",
792 0x37 => "Keyboard . and >",
793 0x38 => "Keyboard / and ?",
794 0x39 => "Keyboard Caps Lock",
795 0x3A => "Keyboard F1",
796 0x3B => "Keyboard F2",
797 0x3C => "Keyboard F3",
798 0x3D => "Keyboard F4",
799 0x3E => "Keyboard F5",
800 0x3F => "Keyboard F6",
801 0x40 => "Keyboard F7",
802 0x41 => "Keyboard F8",
803 0x42 => "Keyboard F9",
804 0x43 => "Keyboard F10",
805 0x44 => "Keyboard F11",
806 0x45 => "Keyboard F12",
807 0x46 => "Keyboard PrintScreen",
808 0x47 => "Keyboard Scroll Lock",
809 0x48 => "Keyboard Pause",
810 0x49 => "Keyboard Insert",
811 0x4A => "Keyboard Home",
812 0x4B => "Keyboard PageUp",
813 0x4C => "Keyboard Delete Forward",
814 0x4D => "Keyboard End",
815 0x4E => "Keyboard PageDown",
816 0x4F => "Keyboard RightArrow",
817 0x50 => "Keyboard LeftArrow",
818 0x51 => "Keyboard DownArrow",
819 0x52 => "Keyboard UpArrow",
820 0x53 => "Keypad Num Lock and Clear",
821 0x54 => "Keypad /",
822 0x55 => "Keypad *",
823 0x56 => "Keypad -",
824 0x57 => "Keypad +",
825 0x58 => "Keypad ENTER",
826 0x59 => "Keypad 1 and End",
827 0x5A => "Keypad 2 and Down Arrow",
828 0x5B => "Keypad 3 and PageDn",
829 0x5C => "Keypad 4 and Left Arrow",
830 0x5D => "Keypad 5",
831 0x5E => "Keypad 6 and Right Arrow",
832 0x5F => "Keypad 7 and Home",
833 0x60 => "Keypad 8 and Up Arrow",
834 0x61 => "Keypad 9 and PageUp",
835 0x62 => "Keypad 0 and Insert",
836 0x63 => "Keypad . and Delete",
837 0x64 => "Keyboard Non-US \\ and |",
838 0x65 => "Keyboard Application",
839 0x66 => "Keyboard Power",
840 0x67 => "Keypad =",
841 0x68 => "Keyboard F13",
842 0x69 => "Keyboard F14",
843 0x6A => "Keyboard F15",
844 0x6B => "Keyboard F16",
845 0x6C => "Keyboard F17",
846 0x6D => "Keyboard F18",
847 0x6E => "Keyboard F19",
848 0x6F => "Keyboard F20",
849 0x70 => "Keyboard F21",
850 0x71 => "Keyboard F22",
851 0x72 => "Keyboard F23",
852 0x73 => "Keyboard F24",
853 0x74 => "Keyboard Execute",
854 0x75 => "Keyboard Help",
855 0x76 => "Keyboard Menu",
856 0x77 => "Keyboard",
857 0x78 => "Keyboard Stop",
858 0x79 => "Keyboard Again",
859 0x7A => "Keyboard Undo",
860 0x7B => "Keyboard Cut",
861 0x7C => "Keyboard Copy",
862 0x7D => "Keyboard Paste",
863 0x7E => "Keyboard Find",
864 0x7F => "Keyboard Mute",
865 0x80 => "Keyboard Volume Up",
866 0x81 => "Keyboard Volume Down",
867 0x82 => "Keyboard Locking Caps Lock",
868 0x83 => "Keyboard Locking Num Lock",
869 0x84 => "Keyboard Locking Scroll Lock",
870 0x85 => "Keypad Comma",
871 0x86 => "Keypad Equal Sign",
872 0x87 => "Keyboard International1",
873 0x88 => "Keyboard International2",
874 0x89 => "Keyboard International3",
875 0x8A => "Keyboard International4",
876 0x8B => "Keyboard International5",
877 0x8C => "Keyboard International6",
878 0x8D => "Keyboard International7",
879 0x8E => "Keyboard International8",
880 0x8F => "Keyboard International9",
881 0x90 => "Keyboard LANG1",
882 0x91 => "Keyboard LANG2",
883 0x92 => "Keyboard LANG3",
884 0x93 => "Keyboard LANG4",
885 0x94 => "Keyboard LANG5",
886 0x95 => "Keyboard LANG6",
887 0x96 => "Keyboard LANG7",
888 0x97 => "Keyboard LANG8",
889 0x98 => "Keyboard LANG9",
890 0x99 => "Keyboard Alternate Erase",
891 0x9A => "Keyboard SysReq/Attention",
892 0x9B => "Keyboard Cancel",
893 0x9C => "Keyboard Clear",
894 0x9D => "Keyboard Prior",
895 0x9E => "Keyboard Return",
896 0x9F => "Keyboard Separator",
897 0xA0 => "Keyboard Out",
898 0xA1 => "Keyboard Oper",
899 0xA2 => "Keyboard Clear/Again",
900 0xA3 => "Keyboard CrSel/Props",
901 0xA4 => "Keyboard ExSel",
902 0xB0 => "Keypad 00",
903 0xB1 => "Keypad 000",
904 0xB2 => "Thousands Separator",
905 0xB3 => "Decimal Separator",
906 0xB4 => "Currency Unit",
907 0xB5 => "Currency Sub-unit",
908 0xB6 => "Keypad (",
909 0xB7 => "Keypad )",
910 0xB8 => "Keypad {",
911 0xB9 => "Keypad }",
912 0xBA => "Keypad Tab",
913 0xBB => "Keypad Backspace",
914 0xBC => "Keypad A",
915 0xBD => "Keypad B",
916 0xBE => "Keypad C",
917 0xBF => "Keypad D",
918 0xC0 => "Keypad E",
919 0xC1 => "Keypad F",
920 0xC2 => "Keypad XOR",
921 0xC3 => "Keypad ∧",
922 0xC4 => "Keypad %",
923 0xC5 => "Keypad <",
924 0xC6 => "Keypad >",
925 0xC7 => "Keypad &",
926 0xC8 => "Keypad &&",
927 0xC9 => "Keypad |",
928 0xCA => "Keypad ||",
929 0xCB => "Keypad :",
930 0xCC => "Keypad #",
931 0xCD => "Keypad Space",
932 0xCE => "Keypad @",
933 0xCF => "Keypad !",
934 0xD0 => "Keypad Memory Store",
935 0xD1 => "Keypad Memory Recall",
936 0xD2 => "Keypad Memory Clear",
937 0xD3 => "Keypad Memory Add",
938 0xD4 => "Keypad Memory Subtract",
939 0xD5 => "Keypad Memory Multiply",
940 0xD6 => "Keypad Memory Divide",
941 0xD7 => "Keypad +/-",
942 0xD8 => "Keypad Clear",
943 0xD9 => "Keypad Clear Entry",
944 0xDA => "Keypad Binary",
945 0xDB => "Keypad Octal",
946 0xDC => "Keypad Decimal",
947 0xDD => "Keypad Hexadecimal",
948 0xE0 => "Keyboard LeftControl",
949 0xE1 => "Keyboard LeftShift",
950 0xE2 => "Keyboard LeftAlt",
951 0xE3 => "Keyboard Left GUI",
952 0xE4 => "Keyboard RightControl",
953 0xE5 => "Keyboard RightShift",
954 0xE6 => "Keyboard RightAlt",
955 0xE7 => "Keyboard Right GUI",
956 _ => "Reserved",
957 }),
958 0x08 => Cow::Borrowed(match usage {
960 0x00 => "Undefined",
961 0x01 => "Num Lock",
962 0x02 => "Caps Lock",
963 0x03 => "Scroll Lock",
964 0x04 => "Compose",
965 0x05 => "Kana",
966 0x06 => "Power",
967 0x07 => "Shift",
968 0x08 => "Do Not Disturb",
969 0x09 => "Mute",
970 0x0A => "Tone Enable",
971 0x0B => "High Cut Filter",
972 0x0C => "Low Cut Filter",
973 0x0D => "Equalizer Enable",
974 0x0E => "Sound Field On",
975 0x0F => "Surround On",
976 0x10 => "Repeat",
977 0x11 => "Stereo",
978 0x12 => "Sampling Rate Detect",
979 0x13 => "Spinning",
980 0x14 => "CAV",
981 0x15 => "CLV",
982 0x16 => "Recording Format Detect",
983 0x17 => "Off-Hook",
984 0x18 => "Ring",
985 0x19 => "Message Waiting",
986 0x1A => "Data Mode",
987 0x1B => "Battery Operation",
988 0x1C => "Battery OK",
989 0x1D => "Battery Low",
990 0x1E => "Speaker",
991 0x1F => "Headset",
992 0x20 => "Hold",
993 0x21 => "Microphone",
994 0x22 => "Coverage",
995 0x23 => "Night Mode",
996 0x24 => "Send Calls",
997 0x25 => "Call Pickup",
998 0x26 => "Conference",
999 0x27 => "Stand-by",
1000 0x28 => "Camera On",
1001 0x29 => "Camera Off",
1002 0x2A => "On-Line",
1003 0x2B => "Off-Line",
1004 0x2C => "Busy",
1005 0x2D => "Ready",
1006 0x2E => "Paper-Out",
1007 0x2F => "Paper-Jam",
1008 0x30 => "Remote",
1009 0x31 => "Forward",
1010 0x32 => "Reverse",
1011 0x33 => "Stop",
1012 0x34 => "Rewind",
1013 0x35 => "Fast Forward",
1014 0x36 => "Play",
1015 0x37 => "Pause",
1016 0x38 => "Record",
1017 0x39 => "Error",
1018 0x3A => "Usage Selected Indicator",
1019 0x3B => "Usage In Use Indicator",
1020 0x3C => "Usage Multi Mode Indicator",
1021 0x3D => "Indicator On",
1022 0x3E => "Indicator Flash",
1023 0x3F => "Indicator Slow Blink",
1024 0x40 => "Indicator Fast Blink",
1025 0x41 => "Indicator Off",
1026 0x42 => "Flash On Time",
1027 0x43 => "Slow Blink On Time",
1028 0x44 => "Slow Blink Off Time",
1029 0x45 => "Fast Blink On Time",
1030 0x46 => "Fast Blink Off Time",
1031 0x47 => "Usage Indicator Color",
1032 0x48 => "Indicator Red",
1033 0x49 => "Indicator Green",
1034 0x4A => "Indicator Amber",
1035 0x4B => "Generic Indicator",
1036 0x4C => "System Suspend",
1037 0x4D => "External Power Connected",
1038 0x4E => "Indicator Blue",
1039 0x4F => "Indicator Orange",
1040 0x50 => "Good Status",
1041 0x51 => "Warning Status",
1042 0x52 => "RGB LED",
1043 0x53 => "Red LED Channel",
1044 0x54 => "Blue LED Channel",
1045 0x55 => "Green LED Channel",
1046 0x56 => "LED Intensity",
1047 0x57 => "System Microphone Mute",
1048 0x60 => "Player Indicator",
1049 0x61 => "Player 1",
1050 0x62 => "Player 2",
1051 0x63 => "Player 3",
1052 0x64 => "Player 4",
1053 0x65 => "Player 5",
1054 0x66 => "Player 6",
1055 0x67 => "Player 7",
1056 0x68 => "Player 8",
1057 _ => "Reserved",
1058 }),
1059 0x09 => match usage {
1061 0x00 => Cow::Borrowed("No Button Pressed"),
1062 _ => Cow::Owned(format!("Button {}", usage)),
1063 },
1064 0x0A => match usage {
1066 0x00 => Cow::Borrowed("Reserved"),
1067 _ => Cow::Owned(format!("Instance {}", usage)),
1068 },
1069 0x0B => Cow::Borrowed(match usage {
1071 0x00 => "Undefined",
1072 0x01 => "Phone",
1073 0x02 => "Answering Machine",
1074 0x03 => "Message Controls",
1075 0x04 => "Handset",
1076 0x05 => "Headset CL/CA 14.1",
1077 0x06 => "Telephony Key Pad",
1078 0x07 => "Programmable Button",
1079 0x20 => "Hook Switch",
1080 0x21 => "Flash",
1081 0x22 => "Feature",
1082 0x23 => "Hold",
1083 0x24 => "Redial",
1084 0x25 => "Transfer",
1085 0x26 => "Drop",
1086 0x27 => "Park",
1087 0x28 => "Forward Calls",
1088 0x29 => "Alternate Function",
1089 0x2A => "Line OSC/NAry 14.3",
1090 0x2B => "Speaker Phone",
1091 0x2C => "Conference",
1092 0x2D => "Ring Enable",
1093 0x2E => "Ring Select",
1094 0x2F => "Phone Mute",
1095 0x30 => "Caller ID",
1096 0x31 => "Send",
1097 0x50 => "Speed Dial",
1098 0x51 => "Store Number",
1099 0x52 => "Recall Number",
1100 0x53 => "Phone Directory",
1101 0x70 => "Voice Mail",
1102 0x71 => "Screen Calls",
1103 0x72 => "Do Not Disturb",
1104 0x73 => "Message",
1105 0x74 => "Answer On/Off",
1106 0x90 => "Inside Dial Tone",
1107 0x91 => "Outside Dial Tone",
1108 0x92 => "Inside Ring Tone",
1109 0x93 => "Outside Ring Tone",
1110 0x94 => "Priority Ring Tone",
1111 0x95 => "Inside Ringback",
1112 0x96 => "Priority Ringback",
1113 0x97 => "Line Busy Tone",
1114 0x98 => "Reorder Tone",
1115 0x99 => "Call Waiting Tone",
1116 0x9A => "Confirmation Tone 1",
1117 0x9B => "Confirmation Tone 2",
1118 0x9C => "Tones Off",
1119 0x9D => "Outside Ringback",
1120 0x9E => "Ringer",
1121 0xB0 => "Phone Key 0",
1122 0xB1 => "Phone Key 1",
1123 0xB2 => "Phone Key 2",
1124 0xB3 => "Phone Key 3",
1125 0xB4 => "Phone Key 4",
1126 0xB5 => "Phone Key 5",
1127 0xB6 => "Phone Key 6",
1128 0xB7 => "Phone Key 7",
1129 0xB8 => "Phone Key 8",
1130 0xB9 => "Phone Key 9",
1131 0xBA => "Phone Key Star",
1132 0xBB => "Phone Key Pound",
1133 0xBC => "Phone Key A",
1134 0xBD => "Phone Key B",
1135 0xBE => "Phone Key C",
1136 0xBF => "Phone Key D",
1137 0xC0 => "Phone Call History Key",
1138 0xC1 => "Phone Caller ID Key",
1139 0xC2 => "Phone Settings Key",
1140 0xF0 => "Host Control",
1141 0xF1 => "Host Available",
1142 0xF2 => "Host Call Active",
1143 0xF3 => "Activate Handset Audio",
1144 0xF4 => "Ring Type",
1145 0xF5 => "Re-dialable Phone Number",
1146 0xF8 => "Stop Ring Tone",
1147 0xF9 => "PSTN Ring Tone",
1148 0xFA => "Host Ring Tone",
1149 0xFB => "Alert Sound Error",
1150 0xFC => "Alert Sound Confirm",
1151 0xFD => "Alert Sound Notification",
1152 0xFE => "Silent Ring",
1153 0x108 => "Email Message Waiting",
1154 0x109 => "Voicemail Message Waiting",
1155 0x10A => "Host Hold",
1156 0x110 => "Incoming Call History Count",
1157 0x111 => "Outgoing Call History Count",
1158 0x112 => "Incoming Call History",
1159 0x113 => "Outgoing Call History",
1160 0x114 => "Phone Locale",
1161 0x140 => "Phone Time Second",
1162 0x141 => "Phone Time Minute",
1163 0x142 => "Phone Time Hour",
1164 0x143 => "Phone Date Day",
1165 0x144 => "Phone Date Month",
1166 0x145 => "Phone Date Year",
1167 0x146 => "Handset Nickname",
1168 0x147 => "Address Book ID",
1169 0x14A => "Call Duration",
1170 0x14B => "Dual Mode Phone",
1171 _ => "Reserved",
1172 }),
1173 0x0C => Cow::Borrowed(match usage {
1175 0x00 => "Undefined",
1176 0x01 => "Consumer Control",
1177 0x02 => "Numeric Key Pad",
1178 0x03 => "Programmable Buttons",
1179 0x04 => "Microphone",
1180 0x05 => "Headphone",
1181 0x06 => "Graphic Equalizer",
1182 0x20 => "+10",
1183 0x21 => "+100",
1184 0x22 => "AM/PM",
1185 0x30 => "Power",
1186 0x31 => "Reset",
1187 0x32 => "Sleep",
1188 0x33 => "Sleep After",
1189 0x34 => "Sleep Mode",
1190 0x35 => "Illumination",
1191 0x36 => "Function Buttons",
1192 0x40 => "Menu",
1193 0x41 => "Menu Pick",
1194 0x42 => "Menu Up",
1195 0x43 => "Menu Down",
1196 0x44 => "Menu Left",
1197 0x45 => "Menu Right",
1198 0x46 => "Menu Escape",
1199 0x47 => "Menu Value Increase",
1200 0x48 => "Menu Value Decrease",
1201 0x60 => "Data On Screen",
1202 0x61 => "Closed Caption",
1203 0x62 => "Closed Caption Select",
1204 0x63 => "VCR/TV",
1205 0x64 => "Broadcast Mode",
1206 0x65 => "Snapshot",
1207 0x66 => "Still",
1208 0x67 => "Picture-in-Picture Toggle",
1209 0x68 => "Picture-in-Picture Swap",
1210 0x69 => "Red Menu Button",
1211 0x6A => "Green Menu Button",
1212 0x6B => "Blue Menu Button",
1213 0x6C => "Yellow Menu Button",
1214 0x6D => "Aspect",
1215 0x6E => "3D Mode Select",
1216 0x6F => "Display Brightness Increment",
1217 0x70 => "Display Brightness Decrement",
1218 0x71 => "Display Brightness",
1219 0x72 => "Display Backlight Toggle",
1220 0x73 => "Display Set Brightness to Minimum",
1221 0x74 => "Display Set Brightness to Maximum",
1222 0x75 => "Display Set Auto Brightness",
1223 0x76 => "Camera Access Enabled",
1224 0x77 => "Camera Access Disabled",
1225 0x78 => "Camera Access Toggle",
1226 0x79 => "Keyboard Brightness Increment",
1227 0x7A => "Keyboard Brightness Decrement",
1228 0x7B => "Keyboard Backlight Set Level",
1229 0x7C => "Keyboard Backlight OOC",
1230 0x7D => "Keyboard Backlight Set Minimum",
1231 0x7E => "Keyboard Backlight Set Maximum",
1232 0x7F => "Keyboard Backlight Auto",
1233 0x80 => "Selection",
1234 0x81 => "Assign Selection",
1235 0x82 => "Mode Step",
1236 0x83 => "Recall Last",
1237 0x84 => "Enter Channel",
1238 0x85 => "Order Movie",
1239 0x86 => "Channel",
1240 0x87 => "Media Selection",
1241 0x88 => "Media Select Computer",
1242 0x89 => "Media Select TV",
1243 0x8A => "Media Select WWW",
1244 0x8B => "Media Select DVD",
1245 0x8C => "Media Select Telephone",
1246 0x8D => "Media Select Program Guide",
1247 0x8E => "Media Select Video Phone",
1248 0x8F => "Media Select Games",
1249 0x90 => "Media Select Messages",
1250 0x91 => "Media Select CD",
1251 0x92 => "Media Select VCR",
1252 0x93 => "Media Select Tuner",
1253 0x94 => "Quit",
1254 0x95 => "Help",
1255 0x96 => "Media Select Tape",
1256 0x97 => "Media Select Cable",
1257 0x98 => "Media Select Satellite",
1258 0x99 => "Media Select Security",
1259 0x9A => "Media Select Home",
1260 0x9B => "Media Select Call",
1261 0x9C => "Channel Increment",
1262 0x9D => "Channel Decrement",
1263 0x9E => "Media Select SAP",
1264 0xA0 => "VCR Plus",
1265 0xA1 => "Once",
1266 0xA2 => "Daily",
1267 0xA3 => "Weekly",
1268 0xA4 => "Monthly",
1269 0xB0 => "Play",
1270 0xB1 => "Pause",
1271 0xB2 => "Record",
1272 0xB3 => "Fast Forward",
1273 0xB4 => "Rewind",
1274 0xB5 => "Scan Next Track",
1275 0xB6 => "Scan Previous Track",
1276 0xB7 => "Stop",
1277 0xB8 => "Eject",
1278 0xB9 => "Random Play",
1279 0xBA => "Select Disc",
1280 0xBB => "Enter Disc",
1281 0xBC => "Repeat",
1282 0xBD => "Tracking",
1283 0xBE => "Track Normal",
1284 0xBF => "Slow Tracking",
1285 0xC0 => "Frame Forward",
1286 0xC1 => "Frame Back",
1287 0xC2 => "Mark",
1288 0xC3 => "Clear Mark",
1289 0xC4 => "Repeat From Mark",
1290 0xC5 => "Return To Mark",
1291 0xC6 => "Search Mark Forward",
1292 0xC7 => "Search Mark Backwards",
1293 0xC8 => "Counter Reset",
1294 0xC9 => "Show Counter",
1295 0xCA => "Tracking Increment",
1296 0xCB => "Tracking Decrement",
1297 0xCC => "Stop/Eject",
1298 0xCD => "Play/Pause",
1299 0xCE => "Play/Skip",
1300 0xCF => "Voice Command",
1301 0xD0 => "Invoke Capture Interface",
1302 0xD1 => "Start or Stop Game Recording",
1303 0xD2 => "Historical Game Capture",
1304 0xD3 => "Capture Game Screenshot",
1305 0xD4 => "Show or Hide Recording Indicator",
1306 0xD5 => "Start or Stop Microphone Capture",
1307 0xD6 => "Start or Stop Camera Capture",
1308 0xD7 => "Start or Stop Game Broadcast",
1309 0xD8 => "Start or Stop Voice Dictation Session",
1310 0xD9 => "Invoke/Dismiss Emoji Picker",
1311 0xE0 => "Volume",
1312 0xE1 => "Balance",
1313 0xE2 => "Mute",
1314 0xE3 => "Bass",
1315 0xE4 => "Treble",
1316 0xE5 => "Bass Boost",
1317 0xE6 => "Surround Mode",
1318 0xE7 => "Loudness",
1319 0xE8 => "MPX",
1320 0xE9 => "Volume Increment",
1321 0xEA => "Volume Decrement",
1322 0xF0 => "Speed Select",
1323 0xF1 => "Playback Speed",
1324 0xF2 => "Standard Play",
1325 0xF3 => "Long Play",
1326 0xF4 => "Extended Play",
1327 0xF5 => "Slow",
1328 0x100 => "Fan Enable",
1329 0x101 => "Fan Speed",
1330 0x102 => "Light Enable",
1331 0x103 => "Light Illumination Level",
1332 0x104 => "Climate Control Enable",
1333 0x105 => "Room Temperature",
1334 0x106 => "Security Enable",
1335 0x107 => "Fire Alarm",
1336 0x108 => "Police Alarm",
1337 0x109 => "Proximity",
1338 0x10A => "Motion",
1339 0x10B => "Duress Alarm",
1340 0x10C => "Holdup Alarm",
1341 0x10D => "Medical Alarm",
1342 0x150 => "Balance Right",
1343 0x151 => "Balance Left",
1344 0x152 => "Bass Increment",
1345 0x153 => "Bass Decrement",
1346 0x154 => "Treble Increment",
1347 0x155 => "Treble Decrement",
1348 0x160 => "Speaker System",
1349 0x161 => "Channel Left",
1350 0x162 => "Channel Right",
1351 0x163 => "Channel Center",
1352 0x164 => "Channel Front",
1353 0x165 => "Channel Center Front",
1354 0x166 => "Channel Side",
1355 0x167 => "Channel Surround",
1356 0x168 => "Channel Low Frequency Enhancement",
1357 0x169 => "Channel Top",
1358 0x16A => "Channel Unknown",
1359 0x170 => "Sub-channel",
1360 0x171 => "Sub-channel Increment",
1361 0x172 => "Sub-channel Decrement",
1362 0x173 => "Alternate Audio Increment",
1363 0x174 => "Alternate Audio Decrement",
1364 0x180 => "Application Launch Buttons",
1365 0x181 => "AL Launch Button Configuration Tool",
1366 0x182 => "AL Programmable Button Configuration",
1367 0x183 => "AL Consumer Control Configuration",
1368 0x184 => "AL Word Processor",
1369 0x185 => "AL Text Editor",
1370 0x186 => "AL Spreadsheet",
1371 0x187 => "AL Graphics Editor",
1372 0x188 => "AL Presentation App",
1373 0x189 => "AL Database App",
1374 0x18A => "AL Email Reader",
1375 0x18B => "AL Newsreader",
1376 0x18C => "AL Voicemail",
1377 0x18D => "AL Contacts/Address Book",
1378 0x18E => "AL Calendar/Schedule",
1379 0x18F => "AL Task/Project Manager",
1380 0x190 => "AL Log/Journal/Timecard",
1381 0x191 => "AL Checkbook/Finance",
1382 0x192 => "AL Calculator",
1383 0x193 => "AL A/V Capture/Playback",
1384 0x194 => "AL Local Machine Browser",
1385 0x195 => "AL LAN/WAN Browser",
1386 0x196 => "AL Internet Browser",
1387 0x197 => "AL Remote Networking/ISP Connect",
1388 0x198 => "AL Network Conference",
1389 0x199 => "AL Network Chat",
1390 0x19A => "AL Telephony/Dialer",
1391 0x19B => "AL Logon",
1392 0x19C => "AL Logoff",
1393 0x19D => "AL Logon/Logoff",
1394 0x19E => "AL Terminal Lock/Screensaver",
1395 0x19F => "AL Control Panel",
1396 0x1A0 => "AL Command Line Processor/Run",
1397 0x1A1 => "AL Process/Task Manager",
1398 0x1A2 => "AL Select Task/Application",
1399 0x1A3 => "AL Next Task/Application",
1400 0x1A4 => "AL Previous Task/Application",
1401 0x1A5 => "AL Preemptive Halt Task/Application",
1402 0x1A6 => "AL Integrated Help Center",
1403 0x1A7 => "AL Documents",
1404 0x1A8 => "AL Thesaurus",
1405 0x1A9 => "AL Dictionary",
1406 0x1AA => "AL Desktop",
1407 0x1AB => "AL Spell Check",
1408 0x1AC => "AL Grammar Check",
1409 0x1AD => "AL Wireless Status",
1410 0x1AE => "AL Keyboard Layout",
1411 0x1AF => "AL Virus Protection",
1412 0x1B0 => "AL Encryption",
1413 0x1B1 => "AL Screen Saver",
1414 0x1B2 => "AL Alarms",
1415 0x1B3 => "AL Clock",
1416 0x1B4 => "AL File Browser",
1417 0x1B5 => "AL Power Status",
1418 0x1B6 => "AL Image Browser",
1419 0x1B7 => "AL Audio Browser",
1420 0x1B8 => "AL Movie Browser",
1421 0x1B9 => "AL Digital Rights Manager",
1422 0x1BA => "AL Digital Wallet",
1423 0x1BC => "AL Instant Messaging",
1424 0x1BD => "AL OEM Features/ Tips/Tutorial Browser",
1425 0x1BE => "AL OEM Help",
1426 0x1BF => "AL Online Community",
1427 0x1C0 => "AL Entertainment Content Browser",
1428 0x1C1 => "AL Online Shopping Browser",
1429 0x1C2 => "AL SmartCard Information/Help",
1430 0x1C3 => "AL Market Monitor/Finance Browser",
1431 0x1C4 => "AL Customized Corporate News Browser",
1432 0x1C5 => "AL Online Activity Browser",
1433 0x1C6 => "AL Research/Search Browser",
1434 0x1C7 => "AL Audio Player",
1435 0x1C8 => "AL Message Status",
1436 0x1C9 => "AL Contact Sync",
1437 0x1CA => "AL Navigation",
1438 0x1CB => "AL Context-aware Desktop Assistant",
1439 0x200 => "Generic GUI Application Controls",
1440 0x201 => "AC New",
1441 0x202 => "AC Open",
1442 0x203 => "AC Close",
1443 0x204 => "AC Exit",
1444 0x205 => "AC Maximize",
1445 0x206 => "AC Minimize",
1446 0x207 => "AC Save",
1447 0x208 => "AC Print",
1448 0x209 => "AC Properties",
1449 0x21A => "AC Undo",
1450 0x21B => "AC Copy",
1451 0x21C => "AC Cut",
1452 0x21D => "AC Paste",
1453 0x21E => "AC Select All",
1454 0x21F => "AC Find",
1455 0x220 => "AC Find and Replace",
1456 0x221 => "AC Search",
1457 0x222 => "AC Go To",
1458 0x223 => "AC Home",
1459 0x224 => "AC Back",
1460 0x225 => "AC Forward",
1461 0x226 => "AC Stop",
1462 0x227 => "AC Refresh",
1463 0x228 => "AC Previous Link",
1464 0x229 => "AC Next Link",
1465 0x22A => "AC Bookmarks",
1466 0x22B => "AC History",
1467 0x22C => "AC Subscriptions",
1468 0x22D => "AC Zoom In",
1469 0x22E => "AC Zoom Out",
1470 0x22F => "AC Zoom",
1471 0x230 => "AC Full Screen View",
1472 0x231 => "AC Normal View",
1473 0x232 => "AC View Toggle",
1474 0x233 => "AC Scroll Up",
1475 0x234 => "AC Scroll Down",
1476 0x235 => "AC Scroll",
1477 0x236 => "AC Pan Left",
1478 0x237 => "AC Pan Right",
1479 0x238 => "AC Pan",
1480 0x239 => "AC New Window",
1481 0x23A => "AC Tile Horizontally",
1482 0x23B => "AC Tile Vertically",
1483 0x23C => "AC Format",
1484 0x23D => "AC Edit",
1485 0x23E => "AC Bold",
1486 0x23F => "AC Italics",
1487 0x240 => "AC Underline",
1488 0x241 => "AC Strikethrough",
1489 0x242 => "AC Subscript",
1490 0x243 => "AC Superscript",
1491 0x244 => "AC All Caps",
1492 0x245 => "AC Rotate",
1493 0x246 => "AC Resize",
1494 0x247 => "AC Flip Horizontal",
1495 0x248 => "AC Flip Vertical",
1496 0x249 => "AC Mirror Horizontal",
1497 0x24A => "AC Mirror Vertical",
1498 0x24B => "AC Font Select",
1499 0x24C => "AC Font Color",
1500 0x24D => "AC Font Size",
1501 0x24E => "AC Justify Left",
1502 0x24F => "AC Justify Center H",
1503 0x250 => "AC Justify Right",
1504 0x251 => "AC Justify Block H",
1505 0x252 => "AC Justify Top",
1506 0x253 => "AC Justify Center V",
1507 0x254 => "AC Justify Bottom",
1508 0x255 => "AC Justify Block V",
1509 0x256 => "AC Indent Decrease",
1510 0x257 => "AC Indent Increase",
1511 0x258 => "AC Numbered List",
1512 0x259 => "AC Restart Numbering",
1513 0x25A => "AC Bulleted List",
1514 0x25B => "AC Promote",
1515 0x25C => "AC Demote",
1516 0x25D => "AC Yes",
1517 0x25E => "AC No",
1518 0x25F => "AC Cancel",
1519 0x260 => "AC Catalog",
1520 0x261 => "AC Buy/Checkout",
1521 0x262 => "AC Add to Cart",
1522 0x263 => "AC Expand",
1523 0x264 => "AC Expand All",
1524 0x265 => "AC Collapse",
1525 0x266 => "AC Collapse All",
1526 0x267 => "AC Print Preview",
1527 0x268 => "AC Paste Special",
1528 0x269 => "AC Insert Mode",
1529 0x26A => "AC Delete",
1530 0x26B => "AC Lock",
1531 0x26C => "AC Unlock",
1532 0x26D => "AC Protect",
1533 0x26E => "AC Unprotect",
1534 0x26F => "AC Attach Comment",
1535 0x270 => "AC Delete Comment",
1536 0x271 => "AC View Comment",
1537 0x272 => "AC Select Word",
1538 0x273 => "AC Select Sentence",
1539 0x274 => "AC Select Paragraph",
1540 0x275 => "AC Select Column",
1541 0x276 => "AC Select Row",
1542 0x277 => "AC Select Table",
1543 0x278 => "AC Select Object",
1544 0x279 => "AC Redo/Repeat",
1545 0x27A => "AC Sort",
1546 0x27B => "AC Sort Ascending",
1547 0x27C => "AC Sort Descending",
1548 0x27D => "AC Filter",
1549 0x27E => "AC Set Clock",
1550 0x27F => "AC View Clock",
1551 0x280 => "AC Select Time Zone",
1552 0x281 => "AC Edit Time Zones",
1553 0x282 => "AC Set Alarm",
1554 0x283 => "AC Clear Alarm",
1555 0x284 => "AC Snooze Alarm",
1556 0x285 => "AC Reset Alarm",
1557 0x286 => "AC Synchronize",
1558 0x287 => "AC Send/Receive",
1559 0x288 => "AC Send To",
1560 0x289 => "AC Reply",
1561 0x28A => "AC Reply All",
1562 0x28B => "AC Forward Msg",
1563 0x28C => "AC Send",
1564 0x28D => "AC Attach File",
1565 0x28E => "AC Upload",
1566 0x28F => "AC Download (Save Target As)",
1567 0x290 => "AC Set Borders",
1568 0x291 => "AC Insert Row",
1569 0x292 => "AC Insert Column",
1570 0x293 => "AC Insert File",
1571 0x294 => "AC Insert Picture",
1572 0x295 => "AC Insert Object",
1573 0x296 => "AC Insert Symbol",
1574 0x297 => "AC Save and Close",
1575 0x298 => "AC Rename",
1576 0x299 => "AC Merge",
1577 0x29A => "AC Split",
1578 0x29B => "AC Disribute Horizontally",
1579 0x29C => "AC Distribute Vertically",
1580 0x29D => "AC Next Keyboard Layout Select",
1581 0x29E => "AC Navigation Guidance",
1582 0x29F => "AC Desktop Show All Windows",
1583 0x2A0 => "AC Soft Key Left",
1584 0x2A1 => "AC Soft Key Right",
1585 0x2A2 => "AC Desktop Show All Applications",
1586 0x2B0 => "AC Idle Keep Alive",
1587 0x2C0 => "Extended Keyboard Attributes Collection",
1588 0x2C1 => "Keyboard Form Factor",
1589 0x2C2 => "Keyboard Key Type",
1590 0x2C3 => "Keyboard Physical Layout",
1591 0x2C4 => "Vendor-Specific Keyboard Physical Layout",
1592 0x2C5 => "Keyboard IETF Language Tag Index",
1593 0x2C6 => "Implemented Keyboard Input Assist Controls",
1594 0x2C7 => "Keyboard Input Assist Previous",
1595 0x2C8 => "Keyboard Input Assist Next",
1596 0x2C9 => "Keyboard Input Assist Previous Group",
1597 0x2CA => "Keyboard Input Assist Next Group",
1598 0x2CB => "Keyboard Input Assist Accept",
1599 0x2CC => "Keyboard Input Assist Cancel",
1600 0x2D0 => "Privacy Screen Toggle",
1601 0x2D1 => "Privacy Screen Level Decrement",
1602 0x2D2 => "Privacy Screen Level Increment",
1603 0x2D3 => "Privacy Screen Level Minimum",
1604 0x2D4 => "Privacy Screen Level Maximum",
1605 0x500 => "Contact Edited",
1606 0x501 => "Contact Added",
1607 0x502 => "Contact Record Active",
1608 0x503 => "Contact Index",
1609 0x504 => "Contact Nickname",
1610 0x505 => "Contact First Name",
1611 0x506 => "Contact Last Name",
1612 0x507 => "Contact Full Name",
1613 0x508 => "Contact Phone Number Personal",
1614 0x509 => "Contact Phone Number Business",
1615 0x50A => "Contact Phone Number Mobile",
1616 0x50B => "Contact Phone Number Pager",
1617 0x50C => "Contact Phone Number Fax",
1618 0x50D => "Contact Phone Number Other",
1619 0x50E => "Contact Email Personal",
1620 0x50F => "Contact Email Business",
1621 0x510 => "Contact Email Other",
1622 0x511 => "Contact Email Main",
1623 0x512 => "Contact Speed Dial Number",
1624 0x513 => "Contact Status Flag",
1625 0x514 => "Contact Misc",
1626 _ => "Reserved",
1627 }),
1628 0x0D => Cow::Borrowed(match usage {
1630 0x00 => "Undefined",
1631 0x01 => "Digitizer",
1632 0x02 => "Pen",
1633 0x03 => "Light Pen",
1634 0x04 => "Touch Screen",
1635 0x05 => "Touch Pad",
1636 0x06 => "Whiteboard",
1637 0x07 => "Coordinate Measuring Machine",
1638 0x08 => "3D Digitizer",
1639 0x09 => "Stereo Plotter",
1640 0x0A => "Articulated Arm",
1641 0x0B => "Armature",
1642 0x0C => "Multiple Point Digitizer",
1643 0x0D => "Free Space Wand",
1644 0x0E => "Device Configuration",
1645 0x0F => "Capacitive Heat Map Digitizer",
1646 0x20 => "Stylus [55] CA/CL 16.2",
1647 0x21 => "Puck",
1648 0x22 => "Finger",
1649 0x23 => "Device settings",
1650 0x24 => "Character Gesture",
1651 0x30 => "Tip Pressure",
1652 0x31 => "Barrel Pressure",
1653 0x32 => "In Range",
1654 0x33 => "Touch",
1655 0x34 => "Untouch",
1656 0x35 => "Tap",
1657 0x36 => "Quality",
1658 0x37 => "Data Valid",
1659 0x38 => "Transducer Index",
1660 0x39 => "Tablet Function Keys",
1661 0x3A => "Program Change Keys",
1662 0x3B => "Battery Strength",
1663 0x3C => "Invert",
1664 0x3D => "X Tilt",
1665 0x3E => "Y Tilt",
1666 0x3F => "Azimuth",
1667 0x40 => "Altitude",
1668 0x41 => "Twist",
1669 0x42 => "Tip Switch",
1670 0x43 => "Secondary Tip Switch",
1671 0x44 => "Barrel Switch",
1672 0x45 => "Eraser",
1673 0x46 => "Tablet Pick",
1674 0x47 => "Touch Valid",
1675 0x48 => "Width",
1676 0x49 => "Height",
1677 0x51 => "Contact Identifier",
1678 0x52 => "Device Mode",
1679 0x53 => "Device Identifier [7] DV/SV 16.7",
1680 0x54 => "Contact Count",
1681 0x55 => "Contact Count Maximum",
1682 0x56 => "Scan Time",
1683 0x57 => "Surface Switch",
1684 0x58 => "Button Switch",
1685 0x59 => "Pad Type",
1686 0x5A => "Secondary Barrel Switch",
1687 0x5B => "Transducer Serial Number",
1688 0x5C => "Preferred Color",
1689 0x5D => "Preferred Color is Locked",
1690 0x5E => "Preferred Line Width",
1691 0x5F => "Preferred Line Width is Locked",
1692 0x60 => "Latency Mode",
1693 0x61 => "Gesture Character Quality",
1694 0x62 => "Character Gesture Data Length",
1695 0x63 => "Character Gesture Data",
1696 0x64 => "Gesture Character Encoding",
1697 0x65 => "UTF8 Character Gesture Encoding",
1698 0x66 => "UTF16 Little Endian Character Gesture Encoding",
1699 0x67 => "UTF16 Big Endian Character Gesture Encoding",
1700 0x68 => "UTF32 Little Endian Character Gesture Encoding",
1701 0x69 => "UTF32 Big Endian Character Gesture Encoding",
1702 0x6A => "Capacitive Heat Map Protocol Vendor ID",
1703 0x6B => "Capacitive Heat Map Protocol Version",
1704 0x6C => "Capacitive Heat Map Frame Data",
1705 0x6D => "Gesture Character Enable",
1706 0x6E => "Transducer Serial Number Part 2",
1707 0x6F => "No Preferred Color",
1708 0x70 => "Preferred Line Style",
1709 0x71 => "Preferred Line Style is Locked",
1710 0x72 => "Ink",
1711 0x73 => "Pencil",
1712 0x74 => "Highlighter",
1713 0x75 => "Chisel Marker",
1714 0x76 => "Brush",
1715 0x77 => "No Preference",
1716 0x80 => "Digitizer Diagnostic",
1717 0x81 => "Digitizer Error",
1718 0x82 => "Err Normal Status",
1719 0x83 => "Err Transducers Exceeded",
1720 0x84 => "Err Full Trans Features Unavailable",
1721 0x85 => "Err Charge Low",
1722 0x90 => "Transducer Software Info",
1723 0x91 => "Transducer Vendor Id",
1724 0x92 => "Transducer Product Id",
1725 0x93 => "Device Supported Protocols [36] NAry/CL 16.3.1",
1726 0x94 => "Transducer Supported Protocols [36] NAry/CL 16.3.1",
1727 0x95 => "No Protocol",
1728 0x96 => "Wacom AES Protocol",
1729 0x97 => "USI Protocol",
1730 0x98 => "Microsoft Pen Protocol",
1731 0xA0 => "Supported Report Rates [36] SV/CL 16.3.1",
1732 0xA1 => "Report Rate",
1733 0xA2 => "Transducer Connected",
1734 0xA3 => "Switch Disabled",
1735 0xA4 => "Switch Unimplemented",
1736 0xA5 => "Transducer Switches",
1737 0xA6 => "Transducer Index Selector",
1738 0xB0 => "Button Press Threshold",
1739 _ => "Reserved",
1740 }),
1741 0x0E => Cow::Borrowed(match usage {
1743 0x00 => "Undefined",
1744 0x01 => "Simple Haptic Controller CA/CL 17.1",
1745 0x10 => "Waveform List",
1746 0x11 => "Duration List",
1747 0x20 => "Auto Trigger",
1748 0x21 => "Manual Trigger",
1749 0x22 => "Auto Trigger Associated Control",
1750 0x23 => "Intensity",
1751 0x24 => "Repeat Count",
1752 0x25 => "Retrigger Period",
1753 0x26 => "Waveform Vendor Page",
1754 0x27 => "Waveform Vendor ID",
1755 0x28 => "Waveform Cutoff Time",
1756 0x1001 => "Waveform None",
1757 0x1002 => "Waveform Stop",
1758 0x1003 => "Waveform Click",
1759 0x1004 => "Waveform Buzz Continuous",
1760 0x1005 => "Waveform Rumble Continuous",
1761 0x1006 => "Waveform Press",
1762 0x1007 => "Waveform Release",
1763 0x1008 => "Waveform Hover",
1764 0x1009 => "Waveform Success",
1765 0x100A => "Waveform Error",
1766 0x100B => "Waveform Ink Continuous",
1767 0x100C => "Waveform Pencil Continuous",
1768 0x100D => "Waveform Marker Continuous",
1769 0x100E => "Waveform Chisel Marker Continuous",
1770 0x100F => "Waveform Brush Continuous",
1771 0x1010 => "Waveform Eraser Continuous",
1772 0x1011 => "Waveform Sparkle Continuous",
1773 _ => "Reserved",
1774 }),
1775 0x0F => Cow::Borrowed(match usage {
1777 0x00 => "Undefined",
1778 0x01 => "Physical Input Device",
1779 0x20 => "Normal",
1780 0x21 => "Set Effect Report",
1781 0x22 => "Effect Parameter Block Index",
1782 0x23 => "Parameter Block Offset",
1783 0x24 => "ROM Flag",
1784 0x25 => "Effect Type",
1785 0x26 => "ET Constant-Force",
1786 0x27 => "ET Ramp",
1787 0x28 => "ET Custom-Force",
1788 0x30 => "ET Square",
1789 0x31 => "ET Sine",
1790 0x32 => "ET Triangle",
1791 0x33 => "ET Sawtooth Up",
1792 0x34 => "ET Sawtooth Down",
1793 0x40 => "ET Spring",
1794 0x41 => "ET Damper",
1795 0x42 => "ET Inertia",
1796 0x43 => "ET Friction",
1797 0x50 => "Duration",
1798 0x51 => "Sample Period",
1799 0x52 => "Gain",
1800 0x53 => "Trigger Button",
1801 0x54 => "Trigger Repeat Interval",
1802 0x55 => "Axes Enable",
1803 0x56 => "Direction Enable",
1804 0x57 => "Direction",
1805 0x58 => "Type Specific Block Offset",
1806 0x59 => "Block Type",
1807 0x5A => "Set Envelope Report CL/SV 18.5",
1808 0x5B => "Attack Level",
1809 0x5C => "Attack Time",
1810 0x5D => "Fade Level",
1811 0x5E => "Fade Time",
1812 0x5F => "Set Condition Report CL/SV 18.6",
1813 0x60 => "Center-Point Offset",
1814 0x61 => "Positive Coefficient",
1815 0x62 => "Negative Coefficient",
1816 0x63 => "Positive Saturation",
1817 0x64 => "Negative Saturation",
1818 0x65 => "Dead Band",
1819 0x66 => "Download Force Sample",
1820 0x67 => "Isoch Custom-Force Enable",
1821 0x68 => "Custom-Force Data Report",
1822 0x69 => "Custom-Force Data",
1823 0x6A => "Custom-Force Vendor Defined Data",
1824 0x6B => "Set Custom-Force Report CL/SV 18.10",
1825 0x6C => "Custom-Force Data Offset",
1826 0x6D => "Sample Count",
1827 0x6E => "Set Periodic Report CL/SV 18.7",
1828 0x6F => "Offset",
1829 0x70 => "Magnitude",
1830 0x71 => "Phase",
1831 0x72 => "Period",
1832 0x73 => "Set Constant-Force Report CL/SV 18.8",
1833 0x74 => "Set Ramp-Force Report CL/SV 18.9",
1834 0x75 => "Ramp Start",
1835 0x76 => "Ramp End",
1836 0x77 => "Effect Operation Report",
1837 0x78 => "Effect Operation",
1838 0x79 => "Op Effect Start",
1839 0x7A => "Op Effect Start Solo",
1840 0x7B => "Op Effect Stop",
1841 0x7C => "Loop Count",
1842 0x7D => "Device Gain Report",
1843 0x7E => "Device Gain",
1844 0x7F => "Parameter Block Pools Report",
1845 0x80 => "RAM Pool Size",
1846 0x81 => "ROM Pool Size",
1847 0x82 => "ROM Effect Block Count",
1848 0x83 => "Simultaneous Effects Max",
1849 0x84 => "Pool Alignment",
1850 0x85 => "Parameter Block Move Report",
1851 0x86 => "Move Source",
1852 0x87 => "Move Destination",
1853 0x88 => "Move Length",
1854 0x89 => "Effect Parameter Block Load Report",
1855 0x8B => "Effect Parameter Block Load Status",
1856 0x8C => "Block Load Success",
1857 0x8D => "Block Load Full",
1858 0x8E => "Block Load Error",
1859 0x8F => "Block Handle",
1860 0x90 => "Effect Parameter Block Free Report",
1861 0x91 => "Type Specific Block Handle",
1862 0x92 => "PID State Report",
1863 0x94 => "Effect Playing",
1864 0x95 => "PID Device Control Report",
1865 0x96 => "PID Device Control",
1866 0x97 => "DC Enable Actuators",
1867 0x98 => "DC Disable Actuators",
1868 0x99 => "DC Stop All Effects",
1869 0x9A => "DC Reset",
1870 0x9B => "DC Pause",
1871 0x9C => "DC Continue",
1872 0x9F => "Device Paused",
1873 0xA0 => "Actuators Enabled",
1874 0xA4 => "Safety Switch",
1875 0xA5 => "Actuator Override Switch",
1876 0xA6 => "Actuator Power",
1877 0xA7 => "Start Delay",
1878 0xA8 => "Parameter Block Size",
1879 0xA9 => "Device-Managed Pool",
1880 0xAA => "Shared Parameter Blocks",
1881 0xAB => "Create New Effect Parameter Block Report",
1882 0xAC => "RAM Pool Available",
1883 _ => "Reserved",
1884 }),
1885 0x10 => Cow::Owned(format!(
1887 "\"{}\"",
1888 char::from_u32(usage).unwrap_or('\u{FFFD}')
1889 )),
1890 0x11 => Cow::Borrowed(match usage {
1892 0x00 => "Undefined",
1893 0x01 => "SocControl",
1894 0x02 => "FirmwareTransfer",
1895 0x03 => "FirmwareFileId",
1896 0x04 => "FileOffsetInBytes",
1897 0x05 => "FileTransferSizeMaxInBytes",
1898 0x06 => "FilePayload",
1899 0x07 => "FilePayloadSizeInBytes",
1900 0x08 => "FilePayloadContainsLastBytes",
1901 0x09 => "FileTransferStop",
1902 0x0A => "FileTransferTillEnd",
1903 _ => "Reserved",
1904 }),
1905 0x12 => Cow::Borrowed(match usage {
1907 0x00 => "Undefined",
1908 0x01 => "Eye Tracker",
1909 0x02 => "Head Tracker",
1910 0x10 => "Tracking Data",
1911 0x11 => "Capabilities",
1912 0x12 => "Configuration",
1913 0x13 => "Status",
1914 0x14 => "Control",
1915 0x20 => "Sensor Timestamp",
1916 0x21 => "Position X",
1917 0x22 => "Position Y",
1918 0x23 => "Position Z",
1919 0x24 => "Gaze Point",
1920 0x25 => "Left Eye Position",
1921 0x26 => "Right Eye Position",
1922 0x27 => "Head Position",
1923 0x28 => "Head Direction Point",
1924 0x29 => "Rotation about X axis",
1925 0x2A => "Rotation about Y axis",
1926 0x2B => "Rotation about Z axis",
1927 0x100 => "Tracker Quality",
1928 0x101 => "Minimum Tracking Distance",
1929 0x102 => "Optimum Tracking Distance",
1930 0x103 => "Maximum Tracking Distance",
1931 0x104 => "Maximum Screen Plane Width",
1932 0x105 => "Maximum Screen Plane Height",
1933 0x200 => "Display Manufacturer ID",
1934 0x201 => "Display Product ID",
1935 0x202 => "Display Serial Number",
1936 0x203 => "Display Manufacturer Date",
1937 0x204 => "Calibrated Screen Width",
1938 0x205 => "Calibrated Screen Height",
1939 0x300 => "Sampling Frequency",
1940 0x301 => "Configuration Status",
1941 0x400 => "Device Mode Request",
1942 _ => "Reserved",
1943 }),
1944 0x14 => Cow::Borrowed(match usage {
1946 0x00 => "Undefined",
1947 0x01 => "Alphanumeric Display",
1948 0x02 => "Auxiliary Display",
1949 0x20 => "Display Attributes Report",
1950 0x21 => "ASCII Character Set",
1951 0x22 => "Data Read Back",
1952 0x23 => "Font Read Back",
1953 0x24 => "Display Control Report",
1954 0x25 => "Clear Display",
1955 0x26 => "Display Enable",
1956 0x27 => "Screen Saver Delay",
1957 0x28 => "Screen Saver Enable",
1958 0x29 => "Vertical Scroll",
1959 0x2A => "Horizontal Scroll",
1960 0x2B => "Character Report",
1961 0x2C => "Display Data",
1962 0x2D => "Display Status",
1963 0x2E => "Stat Not Ready",
1964 0x2F => "Stat Ready",
1965 0x30 => "Err Not a loadable character",
1966 0x31 => "Err Font data cannot be read",
1967 0x32 => "Cursor Position Report",
1968 0x33 => "Row",
1969 0x34 => "Column",
1970 0x35 => "Rows",
1971 0x36 => "Columns",
1972 0x37 => "Cursor Pixel Positioning",
1973 0x38 => "Cursor Mode",
1974 0x39 => "Cursor Enable",
1975 0x3A => "Cursor Blink",
1976 0x3B => "Font Report",
1977 0x3C => "Font Data",
1978 0x3D => "Character Width",
1979 0x3E => "Character Height",
1980 0x3F => "Character Spacing Horizontal",
1981 0x40 => "Character Spacing Vertical",
1982 0x41 => "Unicode Character Set",
1983 0x42 => "Font 7-Segment",
1984 0x43 => "7-Segment Direct Map",
1985 0x44 => "Font 14-Segment",
1986 0x45 => "14-Segment Direct Map",
1987 0x46 => "Display Brightness",
1988 0x47 => "Display Contrast",
1989 0x48 => "Character Attribute",
1990 0x49 => "Attribute Readback",
1991 0x4A => "Attribute Data",
1992 0x4B => "Char Attr Enhance",
1993 0x4C => "Char Attr Underline",
1994 0x4D => "Char Attr Blink",
1995 0x80 => "Bitmap Size X",
1996 0x81 => "Bitmap Size Y",
1997 0x82 => "Max Blit Size",
1998 0x83 => "Bit Depth Format",
1999 0x84 => "Display Orientation",
2000 0x85 => "Palette Report",
2001 0x86 => "Palette Data Size",
2002 0x87 => "Palette Data Offset",
2003 0x88 => "Palette Data",
2004 0x8A => "Blit Report",
2005 0x8B => "Blit Rectangle X1",
2006 0x8C => "Blit Rectangle Y1",
2007 0x8D => "Blit Rectangle X2",
2008 0x8E => "Blit Rectangle Y2",
2009 0x8F => "Blit Data",
2010 0x90 => "Soft Button",
2011 0x91 => "Soft Button ID",
2012 0x92 => "Soft Button Side",
2013 0x93 => "Soft Button Offset 1",
2014 0x94 => "Soft Button Offset 2",
2015 0x95 => "Soft Button Report",
2016 0xC2 => "Soft Keys",
2017 0xCC => "Display Data Extensions",
2018 0xCF => "Character Mapping",
2019 0xDD => "Unicode Equivalent",
2020 0xDF => "Character Page Mapping",
2021 0xFF => "Request Report",
2022 _ => "Reserved",
2023 }),
2024 0x20 => Cow::Borrowed(match usage {
2026 0x00 => "Undefined",
2027 0x01 => "Sensor",
2028 0x10 => "Biometric",
2029 0x11 => "Biometric: Human Presence",
2030 0x12 => "Biometric: Human Proximity",
2031 0x13 => "Biometric: Human Touch",
2032 0x14 => "Biometric: Blood Pressure",
2033 0x15 => "Biometric: Body Temperature",
2034 0x16 => "Biometric: Heart Rate",
2035 0x17 => "Biometric: Heart Rate Variability",
2036 0x18 => "Biometric: Peripheral Oxygen Saturation",
2037 0x19 => "Biometric: Respiratory Rate",
2038 0x20 => "Electrical",
2039 0x21 => "Electrical: Capacitance",
2040 0x22 => "Electrical: Current",
2041 0x23 => "Electrical: Power",
2042 0x24 => "Electrical: Inductance",
2043 0x25 => "Electrical: Resistance",
2044 0x26 => "Electrical: Voltage",
2045 0x27 => "Electrical: Potentiometer",
2046 0x28 => "Electrical: Frequency",
2047 0x29 => "Electrical: Period",
2048 0x30 => "Environmental",
2049 0x31 => "Environmental: Atmospheric Pressure",
2050 0x32 => "Environmental: Humidity",
2051 0x33 => "Environmental: Temperature",
2052 0x34 => "Environmental: Wind Direction",
2053 0x35 => "Environmental: Wind Speed",
2054 0x36 => "Environmental: Air Quality",
2055 0x37 => "Environmental: Heat Index",
2056 0x38 => "Environmental: Surface Temperature",
2057 0x39 => "Environmental: Volatile Organic Compounds",
2058 0x3A => "Environmental: Object Presence",
2059 0x3B => "Environmental: Object Proximity",
2060 0x40 => "Light",
2061 0x41 => "Light: Ambient Light",
2062 0x42 => "Light: Consumer Infrared",
2063 0x43 => "Light: Infrared Light",
2064 0x44 => "Light: Visible Light",
2065 0x45 => "Light: Ultraviolet Light",
2066 0x50 => "Location",
2067 0x51 => "Location: Broadcast",
2068 0x52 => "Location: Dead Reckoning",
2069 0x53 => "Location: GPS (Global Positioning System)",
2070 0x54 => "Location: Lookup",
2071 0x55 => "Location: Other",
2072 0x56 => "Location: Static",
2073 0x57 => "Location: Triangulation",
2074 0x60 => "Mechanical",
2075 0x61 => "Mechanical: Boolean Switch",
2076 0x62 => "Mechanical: Boolean Switch Array",
2077 0x63 => "Mechanical: Multivalue Switch",
2078 0x64 => "Mechanical: Force",
2079 0x65 => "Mechanical: Pressure",
2080 0x66 => "Mechanical: Strain",
2081 0x67 => "Mechanical: Weight",
2082 0x68 => "Mechanical: Haptic Vibrator",
2083 0x69 => "Mechanical: Hall Effect Switch",
2084 0x70 => "Motion",
2085 0x71 => "Motion: Accelerometer 1D",
2086 0x72 => "Motion: Accelerometer 2D",
2087 0x73 => "Motion: Accelerometer 3D",
2088 0x74 => "Motion: Gyrometer 1D",
2089 0x75 => "Motion: Gyrometer 2D",
2090 0x76 => "Motion: Gyrometer 3D",
2091 0x77 => "Motion: Motion Detector",
2092 0x78 => "Motion: Speedometer",
2093 0x79 => "Motion: Accelerometer",
2094 0x7A => "Motion: Gyrometer",
2095 0x7B => "Motion: Gravity Vector",
2096 0x7C => "Motion: Linear Accelerometer",
2097 0x80 => "Orientation",
2098 0x81 => "Orientation: Compass 1D",
2099 0x82 => "Orientation: Compass 2D",
2100 0x83 => "Orientation: Compass 3D",
2101 0x84 => "Orientation: Inclinometer 1D",
2102 0x85 => "Orientation: Inclinometer 2D",
2103 0x86 => "Orientation: Inclinometer 3D",
2104 0x87 => "Orientation: Distance 1D",
2105 0x88 => "Orientation: Distance 2D",
2106 0x89 => "Orientation: Distance 3D",
2107 0x8A => "Orientation: Device Orientation",
2108 0x8B => "Orientation: Compass",
2109 0x8C => "Orientation: Inclinometer",
2110 0x8D => "Orientation: Distance",
2111 0x8E => "Orientation: Relative Orientation",
2112 0x8F => "Orientation: Simple Orientation",
2113 0x90 => "Scanner",
2114 0x91 => "Scanner: Barcode",
2115 0x92 => "Scanner: RFID",
2116 0x93 => "Scanner: NFC",
2117 0xA0 => "Time",
2118 0xA1 => "Time: Alarm Timer",
2119 0xA2 => "Time: Real Time Clock",
2120 0xB0 => "Personal Activity",
2121 0xB1 => "Personal Activity: Activity Detection",
2122 0xB2 => "Personal Activity: Device Position",
2123 0xB3 => "Personal Activity: Floor Tracker",
2124 0xB4 => "Personal Activity: Pedometer",
2125 0xB5 => "Personal Activity: Step Detection",
2126 0xC0 => "Orientation Extended",
2127 0xC1 => "Orientation Extended: Geomagnetic Orientation",
2128 0xC2 => "Orientation Extended: Magnetometer",
2129 0xD0 => "Gesture",
2130 0xD1 => "Gesture: Chassis Flip Gesture",
2131 0xD2 => "Gesture: Hinge Fold Gesture",
2132 0xE0 => "Other",
2133 0xE1 => "Other: Custom",
2134 0xE2 => "Other: Generic",
2135 0xE3 => "Other: Generic Enumerator",
2136 0xE4 => "Other: Hinge Angle",
2137 0xF0 => "Vendor Reserved 1",
2138 0xF1 => "Vendor Reserved 2",
2139 0xF2 => "Vendor Reserved 3",
2140 0xF3 => "Vendor Reserved 4",
2141 0xF4 => "Vendor Reserved 5",
2142 0xF5 => "Vendor Reserved 6",
2143 0xF6 => "Vendor Reserved 7",
2144 0xF7 => "Vendor Reserved 8",
2145 0xF8 => "Vendor Reserved 9",
2146 0xF9 => "Vendor Reserved 10",
2147 0xFA => "Vendor Reserved 11",
2148 0xFB => "Vendor Reserved 12",
2149 0xFC => "Vendor Reserved 13",
2150 0xFD => "Vendor Reserved 14",
2151 0xFE => "Vendor Reserved 15",
2152 0xFF => "Vendor Reserved 16",
2153 0x200 => "Event",
2154 0x201 => "Event: Sensor State",
2155 0x202 => "Event: Sensor Event",
2156 0x300 => "Property",
2157 0x301 => "Property: Friendly Name",
2158 0x302 => "Property: Persistent Unique ID",
2159 0x303 => "Property: Sensor Status",
2160 0x304 => "Property: Minimum Report Interval",
2161 0x305 => "Property: Sensor Manufacturer",
2162 0x306 => "Property: Sensor Model",
2163 0x307 => "Property: Sensor Serial Number",
2164 0x308 => "Property: Sensor Description",
2165 0x309 => "Property: Sensor Connection Type",
2166 0x30A => "Property: Sensor Device Path",
2167 0x30B => "Property: Hardware Revision",
2168 0x30C => "Property: Firmware Version",
2169 0x30D => "Property: Release Date",
2170 0x30E => "Property: Report Interval",
2171 0x30F => "Property: Change Sensitivity Absolute",
2172 0x310 => "Property: Change Sensitivity Percent of Range",
2173 0x311 => "Property: Change Sensitivity Percent Relative",
2174 0x312 => "Property: Accuracy",
2175 0x313 => "Property: Resolution",
2176 0x314 => "Property: Maximum",
2177 0x315 => "Property: Minimum",
2178 0x316 => "Property: Reporting State",
2179 0x317 => "Property: Sampling Rate",
2180 0x318 => "Property: Response Curve",
2181 0x319 => "Property: Power State",
2182 0x31A => "Property: Maximum FIFO Events",
2183 0x31B => "Property: Report Latency",
2184 0x31C => "Property: Flush FIFO Events",
2185 0x31D => "Property: Maximum Power Consumption",
2186 0x31E => "Property: Is Primary",
2187 0x31F => "Property: Human Presence Detection Type",
2188 0x400 => "Data Field: Location",
2189 0x402 => "Data Field: Altitude Antenna Sea Level",
2190 0x403 => "Data Field: Differential Reference Station ID",
2191 0x404 => "Data Field: Altitude Ellipsoid Error",
2192 0x405 => "Data Field: Altitude Ellipsoid",
2193 0x406 => "Data Field: Altitude Sea Level Error",
2194 0x407 => "Data Field: Altitude Sea Level",
2195 0x408 => "Data Field: Differential GPS Data Age",
2196 0x409 => "Data Field: Error Radius",
2197 0x40A => "Data Field: Fix Quality",
2198 0x40B => "Data Field: Fix Type",
2199 0x40C => "Data Field: Geoidal Separation",
2200 0x40D => "Data Field: GPS Operation Mode",
2201 0x40E => "Data Field: GPS Selection Mode",
2202 0x40F => "Data Field: GPS Status",
2203 0x410 => "Data Field: Position Dilution of Precision",
2204 0x411 => "Data Field: Horizontal Dilution of Precision",
2205 0x412 => "Data Field: Vertical Dilution of Precision",
2206 0x413 => "Data Field: Latitude",
2207 0x414 => "Data Field: Longitude",
2208 0x415 => "Data Field: True Heading",
2209 0x416 => "Data Field: Magnetic Heading",
2210 0x417 => "Data Field: Magnetic Variation",
2211 0x418 => "Data Field: Speed",
2212 0x419 => "Data Field: Satellites in View",
2213 0x41A => "Data Field: Satellites in View Azimuth",
2214 0x41B => "Data Field: Satellites in View Elevation",
2215 0x41C => "Data Field: Satellites in View IDs",
2216 0x41D => "Data Field: Satellites in View PRNs",
2217 0x41E => "Data Field: Satellites in View S/N Ratios",
2218 0x41F => "Data Field: Satellites Used Count",
2219 0x420 => "Data Field: Satellites Used PRNs",
2220 0x421 => "Data Field: NMEA Sentence",
2221 0x422 => "Data Field: Address Line 1",
2222 0x423 => "Data Field: Address Line 2",
2223 0x424 => "Data Field: City",
2224 0x425 => "Data Field: State or Province",
2225 0x426 => "Data Field: Country or Region",
2226 0x427 => "Data Field: Postal Code",
2227 0x42A => "Property: Location",
2228 0x42B => "Property: Location Desired Accuracy",
2229 0x430 => "Data Field: Environmental",
2230 0x431 => "Data Field: Atmospheric Pressure",
2231 0x433 => "Data Field: Relative Humidity",
2232 0x434 => "Data Field: Temperature",
2233 0x435 => "Data Field: Wind Direction",
2234 0x436 => "Data Field: Wind Speed",
2235 0x437 => "Data Field: Air Quality Index",
2236 0x438 => "Data Field: Equivalent CO2",
2237 0x439 => "Data Field: Volatile Organic Compound Concentration",
2238 0x43A => "Data Field: Object Presence",
2239 0x43B => "Data Field: Object Proximity Range",
2240 0x43C => "Data Field: Object Proximity Out of Range",
2241 0x440 => "Property: Environmental",
2242 0x441 => "Property: Reference Pressure",
2243 0x450 => "Data Field: Motion",
2244 0x451 => "Data Field: Motion State",
2245 0x452 => "Data Field: Acceleration",
2246 0x453 => "Data Field: Acceleration Axis X",
2247 0x454 => "Data Field: Acceleration Axis Y",
2248 0x455 => "Data Field: Acceleration Axis Z",
2249 0x456 => "Data Field: Angular Velocity",
2250 0x457 => "Data Field: Angular Velocity about X Axis",
2251 0x458 => "Data Field: Angular Velocity about Y Axis",
2252 0x459 => "Data Field: Angular Velocity about Z Axis",
2253 0x45A => "Data Field: Angular Position",
2254 0x45B => "Data Field: Angular Position about X Axis",
2255 0x45C => "Data Field: Angular Position about Y Axis",
2256 0x45D => "Data Field: Angular Position about Z Axis",
2257 0x45E => "Data Field: Motion Speed",
2258 0x45F => "Data Field: Motion Intensity",
2259 0x470 => "Data Field: Orientation",
2260 0x471 => "Data Field: Heading",
2261 0x472 => "Data Field: Heading X Axis",
2262 0x473 => "Data Field: Heading Y Axis",
2263 0x474 => "Data Field: Heading Z Axis",
2264 0x475 => "Data Field: Heading Compensated Magnetic North",
2265 0x476 => "Data Field: Heading Compensated True North",
2266 0x477 => "Data Field: Heading Magnetic North",
2267 0x478 => "Data Field: Heading True North",
2268 0x479 => "Data Field: Distance",
2269 0x47A => "Data Field: Distance X Axis",
2270 0x47B => "Data Field: Distance Y Axis",
2271 0x47C => "Data Field: Distance Z Axis",
2272 0x47D => "Data Field: Distance Out-of-Range",
2273 0x47E => "Data Field: Tilt",
2274 0x47F => "Data Field: Tilt X Axis",
2275 0x480 => "Data Field: Tilt Y Axis",
2276 0x481 => "Data Field: Tilt Z Axis",
2277 0x482 => "Data Field: Rotation Matrix",
2278 0x483 => "Data Field: Quaternion",
2279 0x484 => "Data Field: Magnetic Flux",
2280 0x485 => "Data Field: Magnetic Flux X Axis",
2281 0x486 => "Data Field: Magnetic Flux Y Axis",
2282 0x487 => "Data Field: Magnetic Flux Z Axis",
2283 0x488 => "Data Field: Magnetometer Accuracy",
2284 0x489 => "Data Field: Simple Orientation Direction",
2285 0x490 => "Data Field: Mechanical",
2286 0x491 => "Data Field: Boolean Switch State",
2287 0x492 => "Data Field: Boolean Switch Array States",
2288 0x493 => "Data Field: Multivalue Switch Value",
2289 0x494 => "Data Field: Force",
2290 0x495 => "Data Field: Absolute Pressure",
2291 0x496 => "Data Field: Gauge Pressure",
2292 0x497 => "Data Field: Strain",
2293 0x498 => "Data Field: Weight",
2294 0x4A0 => "Property: Mechanical",
2295 0x4A1 => "Property: Vibration State",
2296 0x4A2 => "Property: Forward Vibration Speed",
2297 0x4A3 => "Property: Backward Vibration Speed",
2298 0x4B0 => "Data Field: Biometric",
2299 0x4B1 => "Data Field: Human Presence",
2300 0x4B2 => "Data Field: Human Proximity Range",
2301 0x4B3 => "Data Field: Human Proximity Out of Range",
2302 0x4B4 => "Data Field: Human Touch State",
2303 0x4B5 => "Data Field: Blood Pressure",
2304 0x4B6 => "Data Field: Blood Pressure Diastolic",
2305 0x4B7 => "Data Field: Blood Pressure Systolic",
2306 0x4B8 => "Data Field: Heart Rate",
2307 0x4B9 => "Data Field: Resting Heart Rate",
2308 0x4BA => "Data Field: Heartbeat Interval",
2309 0x4BB => "Data Field: Respiratory Rate",
2310 0x4BC => "Data Field: SpO2",
2311 0x4BD => "Data Field: Human Attention Detected",
2312 0x4BE => "Data Field: Human Head Azimuth",
2313 0x4BF => "Data Field: Human Head Altitude",
2314 0x4C0 => "Data Field: Human Head Roll",
2315 0x4C1 => "Data Field: Human Head Pitch",
2316 0x4C2 => "Data Field: Human Head Yaw",
2317 0x4C3 => "Data Field: Human Correlation Id",
2318 0x4D0 => "Data Field: Light",
2319 0x4D1 => "Data Field: Illuminance",
2320 0x4D2 => "Data Field: Color Temperature",
2321 0x4D3 => "Data Field: Chromaticity",
2322 0x4D4 => "Data Field: Chromaticity X",
2323 0x4D5 => "Data Field: Chromaticity Y",
2324 0x4D6 => "Data Field: Consumer IR Sentence Receive",
2325 0x4D7 => "Data Field: Infrared Light",
2326 0x4D8 => "Data Field: Red Light",
2327 0x4D9 => "Data Field: Green Light",
2328 0x4DA => "Data Field: Blue Light",
2329 0x4DB => "Data Field: Ultraviolet A Light",
2330 0x4DC => "Data Field: Ultraviolet B Light",
2331 0x4DD => "Data Field: Ultraviolet Index",
2332 0x4DE => "Data Field: Near Infrared Light",
2333 0x4DF => "Property: Light",
2334 0x4E0 => "Property: Consumer IR Sentence Send",
2335 0x4E2 => "Property: Auto Brightness Preferred",
2336 0x4E3 => "Property: Auto Color Preferred",
2337 0x4F0 => "Data Field: Scanner",
2338 0x4F1 => "Data Field: RFID Tag 40 Bit",
2339 0x4F2 => "Data Field: NFC Sentence Receive",
2340 0x4F8 => "Property: Scanner",
2341 0x4F9 => "Property: NFC Sentence Send",
2342 0x500 => "Data Field: Electrical",
2343 0x501 => "Data Field: Capacitance",
2344 0x502 => "Data Field: Current",
2345 0x503 => "Data Field: Electrical Power",
2346 0x504 => "Data Field: Inductance",
2347 0x505 => "Data Field: Resistance",
2348 0x506 => "Data Field: Voltage",
2349 0x507 => "Data Field: Frequency",
2350 0x508 => "Data Field: Period",
2351 0x509 => "Data Field: Percent of Range",
2352 0x520 => "Data Field: Time",
2353 0x521 => "Data Field: Year",
2354 0x522 => "Data Field: Month",
2355 0x523 => "Data Field: Day",
2356 0x524 => "Data Field: Day of Week",
2357 0x525 => "Data Field: Hour",
2358 0x526 => "Data Field: Minute",
2359 0x527 => "Data Field: Second",
2360 0x528 => "Data Field: Millisecond",
2361 0x529 => "Data Field: Timestamp",
2362 0x52A => "Data Field: Julian Day of Year",
2363 0x52B => "Data Field: Time Since System Boot",
2364 0x530 => "Property: Time",
2365 0x531 => "Property: Time Zone Offset from UTC",
2366 0x532 => "Property: Time Zone Name",
2367 0x533 => "Property: Daylight Savings Time Observed",
2368 0x534 => "Property: Time Trim Adjustment",
2369 0x535 => "Property: Arm Alarm",
2370 0x540 => "Data Field: Custom",
2371 0x541 => "Data Field: Custom Usage",
2372 0x542 => "Data Field: Custom Boolean Array",
2373 0x543 => "Data Field: Custom Value",
2374 0x544 => "Data Field: Custom Value 1",
2375 0x545 => "Data Field: Custom Value 2",
2376 0x546 => "Data Field: Custom Value 3",
2377 0x547 => "Data Field: Custom Value 4",
2378 0x548 => "Data Field: Custom Value 5",
2379 0x549 => "Data Field: Custom Value 6",
2380 0x54A => "Data Field: Custom Value 7",
2381 0x54B => "Data Field: Custom Value 8",
2382 0x54C => "Data Field: Custom Value 9",
2383 0x54D => "Data Field: Custom Value 10",
2384 0x54E => "Data Field: Custom Value 11",
2385 0x54F => "Data Field: Custom Value 12",
2386 0x550 => "Data Field: Custom Value 13",
2387 0x551 => "Data Field: Custom Value 14",
2388 0x552 => "Data Field: Custom Value 15",
2389 0x553 => "Data Field: Custom Value 16",
2390 0x554 => "Data Field: Custom Value 17",
2391 0x555 => "Data Field: Custom Value 18",
2392 0x556 => "Data Field: Custom Value 19",
2393 0x557 => "Data Field: Custom Value 20",
2394 0x558 => "Data Field: Custom Value 21",
2395 0x559 => "Data Field: Custom Value 22",
2396 0x55A => "Data Field: Custom Value 23",
2397 0x55B => "Data Field: Custom Value 24",
2398 0x55C => "Data Field: Custom Value 25",
2399 0x55D => "Data Field: Custom Value 26",
2400 0x55E => "Data Field: Custom Value 27",
2401 0x55F => "Data Field: Custom Value 28",
2402 0x560 => "Data Field: Generic",
2403 0x561 => "Data Field: Generic GUID or PROPERTYKEY",
2404 0x562 => "Data Field: Generic Category GUID",
2405 0x563 => "Data Field: Generic Type GUID",
2406 0x564 => "Data Field: Generic Event PROPERTYKEY",
2407 0x565 => "Data Field: Generic Property PROPERTYKEY",
2408 0x566 => "Data Field: Generic Data Field PROPERTYKEY",
2409 0x567 => "Data Field: Generic Event",
2410 0x568 => "Data Field: Generic Property",
2411 0x569 => "Data Field: Generic Data Field",
2412 0x56A => "Data Field: Enumerator Table Row Index",
2413 0x56B => "Data Field: Enumerator Table Row Count",
2414 0x56C => "Data Field: Generic GUID or PROPERTYKEY kind",
2415 0x56D => "Data Field: Generic GUID",
2416 0x56E => "Data Field: Generic PROPERTYKEY",
2417 0x56F => "Data Field: Generic Top Level Collection ID",
2418 0x570 => "Data Field: Generic Report ID",
2419 0x571 => "Data Field: Generic Report Item Position Index",
2420 0x572 => "Data Field: Generic Firmware VARTYPE",
2421 0x573 => "Data Field: Generic Unit of Measure",
2422 0x574 => "Data Field: Generic Unit Exponent",
2423 0x575 => "Data Field: Generic Report Size",
2424 0x576 => "Data Field: Generic Report Count",
2425 0x580 => "Property: Generic",
2426 0x581 => "Property: Enumerator Table Row Index",
2427 0x582 => "Property: Enumerator Table Row Count",
2428 0x590 => "Data Field: Personal Activity",
2429 0x591 => "Data Field: Activity Type",
2430 0x592 => "Data Field: Activity State",
2431 0x593 => "Data Field: Device Position",
2432 0x594 => "Data Field: Step Count",
2433 0x595 => "Data Field: Step Count Reset",
2434 0x596 => "Data Field: Step Duration",
2435 0x597 => "Data Field: Step Type",
2436 0x5A0 => "Property: Minimum Activity Detection Interval",
2437 0x5A1 => "Property: Supported Activity Types",
2438 0x5A2 => "Property: Subscribed Activity Types",
2439 0x5A3 => "Property: Supported Step Types",
2440 0x5A4 => "Property: Subscribed Step Types",
2441 0x5A5 => "Property: Floor Height",
2442 0x5B0 => "Data Field: Custom Type ID",
2443 0x5C0 => "Property: Custom",
2444 0x5C1 => "Property: Custom Value 1",
2445 0x5C2 => "Property: Custom Value 2",
2446 0x5C3 => "Property: Custom Value 3",
2447 0x5C4 => "Property: Custom Value 4",
2448 0x5C5 => "Property: Custom Value 5",
2449 0x5C6 => "Property: Custom Value 6",
2450 0x5C7 => "Property: Custom Value 7",
2451 0x5C8 => "Property: Custom Value 8",
2452 0x5C9 => "Property: Custom Value 9",
2453 0x5CA => "Property: Custom Value 10",
2454 0x5CB => "Property: Custom Value 11",
2455 0x5CC => "Property: Custom Value 12",
2456 0x5CD => "Property: Custom Value 13",
2457 0x5CE => "Property: Custom Value 14",
2458 0x5CF => "Property: Custom Value 15",
2459 0x5D0 => "Property: Custom Value 16",
2460 0x5E0 => "Data Field: Hinge",
2461 0x5E1 => "Data Field: Hinge Angle",
2462 0x5F0 => "Data Field: Gesture Sensor",
2463 0x5F1 => "Data Field: Gesture State",
2464 0x5F2 => "Data Field: Hinge Fold Initial Angle",
2465 0x5F3 => "Data Field: Hinge Fold Final Angle",
2466 0x5F4 => "Data Field: Hinge Fold Contributing Panel",
2467 0x5F5 => "Data Field: Hinge Fold Type",
2468 0x800 => "Sensor State: Undefined",
2469 0x801 => "Sensor State: Ready",
2470 0x802 => "Sensor State: Not Available",
2471 0x803 => "Sensor State: No Data",
2472 0x804 => "Sensor State: Initializing",
2473 0x805 => "Sensor State: Access Denied",
2474 0x806 => "Sensor State: Error",
2475 0x810 => "Sensor Event: Unknown",
2476 0x811 => "Sensor Event: State Changed",
2477 0x812 => "Sensor Event: Property Changed",
2478 0x813 => "Sensor Event: Data Updated",
2479 0x814 => "Sensor Event: Poll Response",
2480 0x815 => "Sensor Event: Change Sensitivity",
2481 0x816 => "Sensor Event: Range Maximum Reached",
2482 0x817 => "Sensor Event: Range Minimum Reached",
2483 0x818 => "Sensor Event: High Threshold Cross Upward",
2484 0x819 => "Sensor Event: High Threshold Cross Downward",
2485 0x81A => "Sensor Event: Low Threshold Cross Upward",
2486 0x81B => "Sensor Event: Low Threshold Cross Downward",
2487 0x81C => "Sensor Event: Zero Threshold Cross Upward",
2488 0x81D => "Sensor Event: Zero Threshold Cross Downward",
2489 0x81E => "Sensor Event: Period Exceeded",
2490 0x81F => "Sensor Event: Frequency Exceeded",
2491 0x820 => "Sensor Event: Complex Trigger",
2492 0x830 => "Connection Type: PC Integrated",
2493 0x831 => "Connection Type: PC Attached",
2494 0x832 => "Connection Type: PC External",
2495 0x840 => "Reporting State: Report No Events",
2496 0x841 => "Reporting State: Report All Events",
2497 0x842 => "Reporting State: Report Threshold Events",
2498 0x843 => "Reporting State: Wake On No Events",
2499 0x844 => "Reporting State: Wake On All Events",
2500 0x845 => "Reporting State: Wake On Threshold Events",
2501 0x846 => "Reporting State: Anytime",
2502 0x850 => "Power State: Undefined",
2503 0x851 => "Power State: D0 Full Power",
2504 0x852 => "Power State: D1 Low Power",
2505 0x853 => "Power State: D2 Standby Power with Wakeup",
2506 0x854 => "Power State: D3 Sleep with Wakeup",
2507 0x855 => "Power State: D4 Power Off",
2508 0x860 => "Accuracy: Default",
2509 0x861 => "Accuracy: High",
2510 0x862 => "Accuracy: Medium",
2511 0x863 => "Accuracy: Low",
2512 0x870 => "Fix Quality: No Fix",
2513 0x871 => "Fix Quality: GPS",
2514 0x872 => "Fix Quality: DGPS",
2515 0x880 => "Fix Type: No Fix",
2516 0x881 => "Fix Type: GPS SPS Mode, Fix Valid",
2517 0x882 => "Fix Type: DGPS SPS Mode, Fix Valid",
2518 0x883 => "Fix Type: GPS PPS Mode, Fix Valid",
2519 0x884 => "Fix Type: Real Time Kinematic",
2520 0x885 => "Fix Type: Float RTK",
2521 0x886 => "Fix Type: Estimated (dead reckoned)",
2522 0x887 => "Fix Type: Manual Input Mode",
2523 0x888 => "Fix Type: Simulator Mode",
2524 0x890 => "GPS Operation Mode: Manual",
2525 0x891 => "GPS Operation Mode: Automatic",
2526 0x8A0 => "GPS Selection Mode: Autonomous",
2527 0x8A1 => "GPS Selection Mode: DGPS",
2528 0x8A2 => "GPS Selection Mode: Estimated (dead reckoned)",
2529 0x8A3 => "GPS Selection Mode: Manual Input",
2530 0x8A4 => "GPS Selection Mode: Simulator",
2531 0x8A5 => "GPS Selection Mode: Data Not Valid",
2532 0x8B0 => "GPS Status Data: Valid",
2533 0x8B1 => "GPS Status Data: Not Valid",
2534 0x8C0 => "Day of Week: Sunday",
2535 0x8C1 => "Day of Week: Monday",
2536 0x8C2 => "Day of Week: Tuesday",
2537 0x8C3 => "Day of Week: Wednesday",
2538 0x8C4 => "Day of Week: Thursday",
2539 0x8C5 => "Day of Week: Friday",
2540 0x8C6 => "Day of Week: Saturday",
2541 0x8D0 => "Kind: Category",
2542 0x8D1 => "Kind: Type",
2543 0x8D2 => "Kind: Event",
2544 0x8D3 => "Kind: Property",
2545 0x8D4 => "Kind: Data Field",
2546 0x8E0 => "Magnetometer Accuracy: Low",
2547 0x8E1 => "Magnetometer Accuracy: Medium",
2548 0x8E2 => "Magnetometer Accuracy: High",
2549 0x8F0 => "Simple Orientation Direction: Not Rotated",
2550 0x8F1 => "Simple Orientation Direction: Rotated 90 Degrees CCW",
2551 0x8F2 => "Simple Orientation Direction: Degrees CCW",
2552 0x8F3 => "Simple Orientation Direction: Degrees CCW",
2553 0x8F4 => "Simple Orientation Direction: Face Up",
2554 0x8F5 => "Simple Orientation Direction: Face Down",
2555 0x900 => "VT_NULL",
2556 0x901 => "VT_BOOL",
2557 0x902 => "VT_UI1",
2558 0x903 => "VT_I1",
2559 0x904 => "VT_UI2",
2560 0x905 => "VT_I2",
2561 0x906 => "VT_UI4",
2562 0x907 => "VT_I4",
2563 0x908 => "VT_UI8",
2564 0x909 => "VT_I8",
2565 0x90A => "VT_R4",
2566 0x90B => "VT_R8",
2567 0x90C => "VT_WSTR",
2568 0x90D => "VT_STR",
2569 0x90E => "VT_CLSID",
2570 0x90F => "VT_VECTOR VT_UI1",
2571 0x910 => "VT_F16E0",
2572 0x911 => "VT_F16E1",
2573 0x912 => "VT_F16E2",
2574 0x913 => "VT_F16E3",
2575 0x914 => "VT_F16E4",
2576 0x915 => "VT_F16E5",
2577 0x916 => "VT_F16E6",
2578 0x917 => "VT_F16E7",
2579 0x918 => "VT_F16E8",
2580 0x919 => "VT_F16E9",
2581 0x91A => "VT_F16EA",
2582 0x91B => "VT_F16EB",
2583 0x91C => "VT_F16EC",
2584 0x91D => "VT_F16ED",
2585 0x91E => "VT_F16EE",
2586 0x91F => "VT_F16EF",
2587 0x920 => "VT_F32E0",
2588 0x921 => "VT_F32E1",
2589 0x922 => "VT_F32E2",
2590 0x923 => "VT_F32E3",
2591 0x924 => "VT_F32E4",
2592 0x925 => "VT_F32E5",
2593 0x926 => "VT_F32E6",
2594 0x927 => "VT_F32E7",
2595 0x928 => "VT_F32E8",
2596 0x929 => "VT_F32E9",
2597 0x92A => "VT_F32EA",
2598 0x92B => "VT_F32EB",
2599 0x92C => "VT_F32EC",
2600 0x92D => "VT_F32ED",
2601 0x92E => "VT_F32EE",
2602 0x92F => "VT_F32EF",
2603 0x930 => "Activity Type: Unknown",
2604 0x931 => "Activity Type: Stationary",
2605 0x932 => "Activity Type: Fidgeting",
2606 0x933 => "Activity Type: Walking",
2607 0x934 => "Activity Type: Running",
2608 0x935 => "Activity Type: In Vehicle",
2609 0x936 => "Activity Type: Biking",
2610 0x937 => "Activity Type: Idle",
2611 0x940 => "Unit: Not Specified",
2612 0x941 => "Unit: Lux",
2613 0x942 => "Unit: Degrees Kelvin",
2614 0x943 => "Unit: Degrees Celsius",
2615 0x944 => "Unit: Pascal",
2616 0x945 => "Unit: Newton",
2617 0x946 => "Unit: Meters/Second",
2618 0x947 => "Unit: Kilogram",
2619 0x948 => "Unit: Meter",
2620 0x949 => "Unit: Meters/Second/Second",
2621 0x94A => "Unit: Farad",
2622 0x94B => "Unit: Ampere",
2623 0x94C => "Unit: Watt",
2624 0x94D => "Unit: Henry",
2625 0x94E => "Unit: Ohm",
2626 0x94F => "Unit: Volt",
2627 0x950 => "Unit: Hertz",
2628 0x951 => "Unit: Bar",
2629 0x952 => "Unit: Degrees Anti-clockwise",
2630 0x953 => "Unit: Degrees Clockwise",
2631 0x954 => "Unit: Degrees",
2632 0x955 => "Unit: Degrees/Second",
2633 0x956 => "Unit: Degrees/Second/Second",
2634 0x957 => "Unit: Knot",
2635 0x958 => "Unit: Percent",
2636 0x959 => "Unit: Second",
2637 0x95A => "Unit: Millisecond",
2638 0x95B => "Unit: G",
2639 0x95C => "Unit: Bytes",
2640 0x95D => "Unit: Milligauss",
2641 0x95E => "Unit: Bits",
2642 0x960 => "Activity State: No State Change",
2643 0x961 => "Activity State: Start Activity",
2644 0x962 => "Activity State: End Activity",
2645 0x970 => "Exponent 0",
2646 0x971 => "Exponent 1",
2647 0x972 => "Exponent 2",
2648 0x973 => "Exponent 3",
2649 0x974 => "Exponent 4",
2650 0x975 => "Exponent 5",
2651 0x976 => "Exponent 6",
2652 0x977 => "Exponent 7",
2653 0x978 => "Exponent 8",
2654 0x979 => "Exponent 9",
2655 0x97A => "Exponent A",
2656 0x97B => "Exponent B",
2657 0x97C => "Exponent C",
2658 0x97D => "Exponent D",
2659 0x97E => "Exponent E",
2660 0x97F => "Exponent F",
2661 0x980 => "Device Position: Unknown",
2662 0x981 => "Device Position: Unchanged",
2663 0x982 => "Device Position: On Desk",
2664 0x983 => "Device Position: In Hand",
2665 0x984 => "Device Position: Moving in Bag",
2666 0x985 => "Device Position: Stationary in Bag",
2667 0x990 => "Step Type: Unknown",
2668 0x991 => "Step Type: Walking",
2669 0x992 => "Step Type: Running",
2670 0x9A0 => "Gesture State: Unknown",
2671 0x9A1 => "Gesture State: Started",
2672 0x9A2 => "Gesture State: Completed",
2673 0x9A3 => "Gesture State: Cancelled",
2674 0x9B0 => "Hinge Fold Contributing Panel: Unknown",
2675 0x9B1 => "Hinge Fold Contributing Panel: Panel 1",
2676 0x9B2 => "Hinge Fold Contributing Panel: Panel 2",
2677 0x9B3 => "Hinge Fold Contributing Panel: Both",
2678 0x9B4 => "Hinge Fold Type: Unknown",
2679 0x9B5 => "Hinge Fold Type: Increasing",
2680 0x9B6 => "Hinge Fold Type: Decreasing",
2681 0x9C0 => "Human Presence Detection Type: Vendor-Defined Non-Biometric",
2682 0x9C1 => "Human Presence Detection Type: Vendor-Defined Biometric",
2683 0x9C2 => "Human Presence Detection Type: Facial Biometric",
2684 0x9C3 => "Human Presence Detection Type: Audio Biometric",
2685 0x1000 => "Modifier: Change Sensitivity Absolute",
2686 0x2000 => "Modifier: Maximum",
2687 0x3000 => "Modifier: Minimum",
2688 0x4000 => "Modifier: Accuracy",
2689 0x5000 => "Modifier: Resolution",
2690 0x6000 => "Modifier: Threshold High",
2691 0x7000 => "Modifier: Threshold Low",
2692 0x8000 => "Modifier: Calibration Offset",
2693 0x9000 => "Modifier: Calibration Multiplier",
2694 0xA000 => "Modifier: Report Interval",
2695 0xB000 => "Modifier: Frequency Max",
2696 0xC000 => "Modifier: Period Max",
2697 0xD000 => "Modifier: Change Sensitivity Percent of Range",
2698 0xE000 => "Modifier: Change Sensitivity Percent Relative",
2699 0xF000 => "Modifier: Vendor Reserved",
2700 _ => "Reserved",
2701 }),
2702 0x40 => Cow::Borrowed(match usage {
2704 0x00 => "Undefined",
2705 0x01 => "Medical Ultrasound",
2706 0x20 => "VCR/Acquisition",
2707 0x21 => "Freeze/Thaw",
2708 0x22 => "Clip Store",
2709 0x23 => "Update",
2710 0x24 => "Next",
2711 0x25 => "Save",
2712 0x26 => "Print",
2713 0x27 => "Microphone Enable",
2714 0x40 => "Cine",
2715 0x41 => "Transmit Power",
2716 0x42 => "Volume",
2717 0x43 => "Focus",
2718 0x44 => "Depth",
2719 0x60 => "Soft Step - Primary",
2720 0x61 => "Soft Step - Secondary",
2721 0x70 => "Depth Gain Compensation",
2722 0x80 => "Zoom Select",
2723 0x81 => "Zoom Adjust",
2724 0x82 => "Spectral Doppler Mode Select",
2725 0x83 => "Spectral Doppler Adjust",
2726 0x84 => "Color Doppler Mode Select",
2727 0x85 => "Color Doppler Adjust",
2728 0x86 => "Motion Mode Select",
2729 0x87 => "Motion Mode Adjust",
2730 0x88 => "2-D Mode Select",
2731 0x89 => "2-D Mode Adjust",
2732 0xA0 => "Soft Control Select",
2733 0xA1 => "Soft Control Adjust",
2734 _ => "Reserved",
2735 }),
2736 0x41 => Cow::Borrowed(match usage {
2738 0x00 => "Undefined",
2739 0x01 => "Braille Display",
2740 0x02 => "Braille Row",
2741 0x03 => "8 Dot Braille Cell",
2742 0x04 => "6 Dot Braille Cell",
2743 0x05 => "Number of Braille Cells",
2744 0x06 => "Screen Reader Control",
2745 0x07 => "Screen Reader Identifier",
2746 0xFA => "Router Set 1",
2747 0xFB => "Router Set 2",
2748 0xFC => "Router Set 3",
2749 0x100 => "Router Key",
2750 0x101 => "Row Router Key",
2751 0x200 => "Braille Buttons",
2752 0x201 => "Braille Keyboard Dot 1",
2753 0x202 => "Braille Keyboard Dot 2",
2754 0x203 => "Braille Keyboard Dot 3",
2755 0x204 => "Braille Keyboard Dot 4",
2756 0x205 => "Braille Keyboard Dot 5",
2757 0x206 => "Braille Keyboard Dot 6",
2758 0x207 => "Braille Keyboard Dot 7",
2759 0x208 => "Braille Keyboard Dot 8",
2760 0x209 => "Braille Keyboard Space",
2761 0x20A => "Braille Keyboard Left Space",
2762 0x20B => "Braille Keyboard Right Space",
2763 0x20C => "Braille Face Controls",
2764 0x20D => "Braille Left Controls",
2765 0x20E => "Braille Right Controls",
2766 0x20F => "Braille Top Controls",
2767 0x210 => "Braille Joystick Center",
2768 0x211 => "Braille Joystick Up",
2769 0x212 => "Braille Joystick Down",
2770 0x213 => "Braille Joystick Left",
2771 0x214 => "Braille Joystick Right",
2772 0x215 => "Braille D-Pad Center",
2773 0x216 => "Braille D-Pad Up",
2774 0x217 => "Braille D-Pad Down",
2775 0x218 => "Braille D-Pad Left",
2776 0x219 => "Braille D-Pad Right",
2777 0x21A => "Braille Pan Left",
2778 0x21B => "Braille Pan Right",
2779 0x21C => "Braille Rocker Up",
2780 0x21D => "Braille Rocker Down",
2781 0x21E => "Braille Rocker Press",
2782 _ => "Reserved",
2783 }),
2784 0x59 => Cow::Borrowed(match usage {
2786 0x00 => "Undefined",
2787 0x01 => "LampArray",
2788 0x02 => "LampArrayAttributesReport",
2789 0x03 => "LampCount",
2790 0x04 => "BoundingBoxWidthInMicrometers",
2791 0x05 => "BoundingBoxHeightInMicrometers",
2792 0x06 => "BoundingBoxDepthInMicrometers",
2793 0x07 => "LampArrayKind",
2794 0x08 => "MinUpdateIntervalInMicroseconds",
2795 0x20 => "LampAttributesRequestReport",
2796 0x21 => "LampId",
2797 0x22 => "LampAttributesResponseReport",
2798 0x23 => "PositionXInMicrometers",
2799 0x24 => "PositionYInMicrometers",
2800 0x25 => "PositionZInMicrometers",
2801 0x26 => "LampPurposes",
2802 0x27 => "UpdateLatencyInMicroseconds",
2803 0x28 => "RedLevelCount",
2804 0x29 => "GreenLevelCount",
2805 0x2A => "BlueLevelCount",
2806 0x2B => "IntensityLevelCount",
2807 0x2C => "IsProgrammable",
2808 0x2D => "InputBinding",
2809 0x50 => "LampMultiUpdateReport",
2810 0x51 => "RedUpdateChannel",
2811 0x52 => "GreenUpdateChannel",
2812 0x53 => "BlueUpdateChannel",
2813 0x54 => "IntensityUpdateChannel",
2814 0x55 => "LampUpdateFlags",
2815 0x60 => "LampRangeUpdateReport",
2816 0x61 => "LampIdStart",
2817 0x62 => "LampIdEnd",
2818 0x70 => "LampArrayControlReport",
2819 0x71 => "AutonomousMode",
2820 _ => "Reserved",
2821 }),
2822 0x80 => Cow::Borrowed(match usage {
2824 0x00 => "Undefined",
2825 0x01 => "Monitor Control",
2826 0x02 => "EDID Information",
2827 0x03 => "VDIF Information",
2828 0x04 => "VESA Version",
2829 _ => "Reserved",
2830 }),
2831 0x81 => match usage {
2833 0x00 => Cow::Borrowed("Reserved"),
2834 _ => Cow::Owned(format!("Enum {}", usage)),
2835 },
2836 0x82 => Cow::Borrowed(match usage {
2838 0x00 => "Undefined",
2839 0x01 => "Degauss",
2840 0x10 => "Brightness",
2841 0x12 => "Contrast",
2842 0x16 => "Red Video Gain",
2843 0x18 => "Green Video Gain",
2844 0x1A => "Blue Video Gain",
2845 0x1C => "Focus",
2846 0x20 => "Horizontal Position",
2847 0x22 => "Horizontal Size",
2848 0x24 => "Horizontal Pincushion",
2849 0x26 => "Horizontal Pincushion Balance",
2850 0x28 => "Horizontal Misconvergence",
2851 0x2A => "Horizontal Linearity",
2852 0x2C => "Horizontal Linearity Balance",
2853 0x30 => "Vertical Position",
2854 0x32 => "Vertical Size",
2855 0x34 => "Vertical Pincushion",
2856 0x36 => "Vertical Pincushion Balance",
2857 0x38 => "Vertical Misconvergence",
2858 0x3A => "Vertical Linearity",
2859 0x3C => "Vertical Linearity Balance",
2860 0x40 => "Parallelogram Distortion (Key Balance)",
2861 0x42 => "Trapezoidal Distortion (Key)",
2862 0x44 => "Tilt (Rotation)",
2863 0x46 => "Top Corner Distortion Control",
2864 0x48 => "Top Corner Distortion Balance",
2865 0x4A => "Bottom Corner Distortion Control",
2866 0x4C => "Bottom Corner Distortion Balance",
2867 0x56 => "Horizontal Moiré",
2868 0x58 => "Vertical Moiré",
2869 0x5E => "Input Level Select",
2870 0x60 => "Input Source Select",
2871 0x6C => "Red Video Black Level",
2872 0x6E => "Green Video Black Level",
2873 0x70 => "Blue Video Black Level",
2874 0xA2 => "Auto Size Center",
2875 0xA4 => "Polarity Horizontal Synchronization",
2876 0xA6 => "Polarity Vertical Synchronization",
2877 0xA8 => "Synchronization Type",
2878 0xAA => "Screen Orientation",
2879 0xAC => "Horizontal Frequency",
2880 0xAE => "Vertical Frequency",
2881 0xB0 => "Settings",
2882 0xCA => "On Screen Display",
2883 0xD4 => "Stereo Mode",
2884 _ => "Reserved",
2885 }),
2886 0x84 => Cow::Borrowed(match usage {
2888 0x00 => "Undefined",
2889 0x01 => "iName",
2890 0x02 => "Present Status",
2891 0x03 => "Changed Status",
2892 0x04 => "UPS",
2893 0x05 => "Power Supply",
2894 0x10 => "Battery System",
2895 0x11 => "Battery System Id",
2896 0x12 => "Battery",
2897 0x13 => "Battery Id",
2898 0x14 => "Charger",
2899 0x15 => "Charger Id",
2900 0x16 => "Power Converter",
2901 0x17 => "Power Converter Id",
2902 0x18 => "Outlet System",
2903 0x19 => "Outlet System Id",
2904 0x1A => "Input",
2905 0x1B => "Input Id",
2906 0x1C => "Output",
2907 0x1D => "Output Id",
2908 0x1E => "Flow",
2909 0x1F => "Flow Id",
2910 0x20 => "Outlet",
2911 0x21 => "Outlet Id",
2912 0x22 => "Gang",
2913 0x23 => "Gang Id",
2914 0x24 => "Power Summary",
2915 0x25 => "Power Summary Id",
2916 0x30 => "Voltage",
2917 0x31 => "Current",
2918 0x32 => "Frequency",
2919 0x33 => "Apparent Power",
2920 0x34 => "Active Power",
2921 0x35 => "Percent Load",
2922 0x36 => "Temperature",
2923 0x37 => "Humidity",
2924 0x38 => "Bad Count",
2925 0x40 => "Config Voltage",
2926 0x41 => "Config Current",
2927 0x42 => "Config Frequency",
2928 0x43 => "Config Apparent Power",
2929 0x44 => "Config Active Power",
2930 0x45 => "Config Percent Load",
2931 0x46 => "Config Temperature",
2932 0x47 => "Config Humidity",
2933 0x50 => "Switch On Control",
2934 0x51 => "Switch Off Control",
2935 0x52 => "Toggle Control",
2936 0x53 => "Low Voltage Transfer",
2937 0x54 => "High Voltage Transfer",
2938 0x55 => "Delay Before Reboot",
2939 0x56 => "Delay Before Startup",
2940 0x57 => "Delay Before Shutdown",
2941 0x58 => "Test",
2942 0x59 => "Module Reset",
2943 0x5A => "Audible Alarm Control",
2944 0x60 => "Present",
2945 0x61 => "Good",
2946 0x62 => "Internal Failure",
2947 0x63 => "Voltag Out Of Range",
2948 0x64 => "Frequency Out Of Range",
2949 0x65 => "Overload",
2950 0x66 => "Over Charged",
2951 0x67 => "Over Temperature",
2952 0x68 => "Shutdown Requested",
2953 0x69 => "Shutdown Imminent",
2954 0x6B => "Switch On/Off",
2955 0x6C => "Switchable",
2956 0x6D => "Used",
2957 0x6E => "Boost",
2958 0x6F => "Buck",
2959 0x70 => "Initialized",
2960 0x71 => "Tested",
2961 0x72 => "Awaiting Power",
2962 0x73 => "Communication Lost",
2963 0xFD => "iManufacturer",
2964 0xFE => "iProduct",
2965 0xFF => "iSerialNumber",
2966 _ => "Reserved",
2967 }),
2968 0x85 => Cow::Borrowed(match usage {
2970 0x00 => "Undefined",
2971 0x01 => "Smart Battery Battery Mode",
2972 0x02 => "Smart Battery Battery Status",
2973 0x03 => "Smart Battery Alarm Warning",
2974 0x04 => "Smart Battery Charger Mode",
2975 0x05 => "Smart Battery Charger Status",
2976 0x06 => "Smart Battery Charger Spec Info",
2977 0x07 => "Smart Battery Selector State",
2978 0x08 => "Smart Battery Selector Presets",
2979 0x09 => "Smart Battery Selector Info",
2980 0x10 => "Optional Mfg Function 1",
2981 0x11 => "Optional Mfg Function 2",
2982 0x12 => "Optional Mfg Function 3",
2983 0x13 => "Optional Mfg Function 4",
2984 0x14 => "Optional Mfg Function 5",
2985 0x15 => "Connection To SM Bus",
2986 0x16 => "Output Connection",
2987 0x17 => "Charger Connection",
2988 0x18 => "Battery Insertion",
2989 0x19 => "Use Next",
2990 0x1A => "OK To Use",
2991 0x1B => "Battery Supported",
2992 0x1C => "Selector Revision",
2993 0x1D => "Charging Indicator",
2994 0x28 => "Manufacturer Access",
2995 0x29 => "Remaining Capacity Limit",
2996 0x2A => "Remaining Time Limit",
2997 0x2B => "At Rate",
2998 0x2C => "Capacity Mode",
2999 0x2D => "Broadcast To Charger",
3000 0x2E => "Primary Battery",
3001 0x2F => "Charge Controller",
3002 0x40 => "Terminate Charge",
3003 0x41 => "Terminate Discharge",
3004 0x42 => "Below Remaining Capacity Limit",
3005 0x43 => "Remaining Time Limit Expired",
3006 0x44 => "Charging",
3007 0x45 => "Discharging",
3008 0x46 => "Fully Charged",
3009 0x47 => "Fully Discharged",
3010 0x48 => "Conditioning Flag",
3011 0x49 => "At Rate OK",
3012 0x4A => "Smart Battery Error Code",
3013 0x4B => "Need Replacement",
3014 0x60 => "At Rate Time To Full",
3015 0x61 => "At Rate Time To Empty",
3016 0x62 => "Average Current",
3017 0x63 => "Max Error",
3018 0x64 => "Relative State Of Charge",
3019 0x65 => "Absolute State Of Charge",
3020 0x66 => "Remaining Capacity",
3021 0x67 => "Full Charge Capacity",
3022 0x68 => "Run Time To Empty",
3023 0x69 => "Average Time To Empty",
3024 0x6A => "Average Time To Full",
3025 0x6B => "Cycle Count",
3026 0x80 => "Battery Pack Model Level",
3027 0x81 => "Internal Charge Controller",
3028 0x82 => "Primary Battery Support",
3029 0x83 => "Design Capacity",
3030 0x84 => "Specification Info",
3031 0x85 => "Manufacture Date",
3032 0x86 => "Serial Number",
3033 0x87 => "iManufacturer Name",
3034 0x88 => "iDevice Name",
3035 0x89 => "iDevice Chemistry",
3036 0x8A => "Manufacturer Data",
3037 0x8B => "Rechargable",
3038 0x8C => "Warning Capacity Limit",
3039 0x8D => "Capacity Granularity 1",
3040 0x8E => "Capacity Granularity 2",
3041 0x8F => "iOEM Information",
3042 0xC0 => "Inhibit Charge",
3043 0xC1 => "Enable Polling",
3044 0xC2 => "Reset To Zero",
3045 0xD0 => "AC Present",
3046 0xD1 => "Battery Present",
3047 0xD2 => "Power Fail",
3048 0xD3 => "Alarm Inhibited",
3049 0xD4 => "Thermistor Under Range",
3050 0xD5 => "Thermistor Hot",
3051 0xD6 => "Thermistor Cold",
3052 0xD7 => "Thermistor Over Range",
3053 0xD8 => "Voltage Out Of Range",
3054 0xD9 => "Current Out Of Range",
3055 0xDA => "Current Not Regulated",
3056 0xDB => "Voltage Not Regulated",
3057 0xDC => "Master Mode",
3058 0xF0 => "Charger Selector Support",
3059 0xF1 => "Charger Spec",
3060 0xF2 => "Level 2",
3061 0xF3 => "Level 3",
3062 _ => "Reserved",
3063 }),
3064 0x8C => Cow::Borrowed(match usage {
3066 0x00 => "Undefined",
3067 0x01 => "Barcode Badge Reader",
3068 0x02 => "Barcode Scanner",
3069 0x03 => "Dumb Bar Code Scanner",
3070 0x04 => "Cordless Scanner Base",
3071 0x05 => "Bar Code Scanner Cradle",
3072 0x10 => "Attribute Report",
3073 0x11 => "Settings Report",
3074 0x12 => "Scanned Data Report",
3075 0x13 => "Raw Scanned Data Report",
3076 0x14 => "Trigger Report",
3077 0x15 => "Status Report",
3078 0x16 => "UPC/EAN Control Report",
3079 0x17 => "EAN 2/3 Label Control Report",
3080 0x18 => "Code 39 Control Report",
3081 0x19 => "Interleaved 2 of 5 Control Report",
3082 0x1A => "Standard 2 of 5 Control Report",
3083 0x1B => "MSI Plessey Control Report",
3084 0x1C => "Codabar Control Report",
3085 0x1D => "Code 128 Control Report",
3086 0x1E => "Misc 1D Control Report",
3087 0x1F => "2D Control Report",
3088 0x30 => "Aiming/Pointer Mode",
3089 0x31 => "Bar Code Present Sensor",
3090 0x32 => "Class 1A Laser",
3091 0x33 => "Class 2 Laser",
3092 0x34 => "Heater Present",
3093 0x35 => "Contact Scanner",
3094 0x36 => "Electronic Article Surveillance Notification",
3095 0x37 => "Constant Electronic Article Surveillance",
3096 0x38 => "Error Indication",
3097 0x39 => "Fixed Beeper",
3098 0x3A => "Good Decode Indication",
3099 0x3B => "Hands Free Scanning",
3100 0x3C => "Intrinsically Safe",
3101 0x3D => "Klasse Eins Laser",
3102 0x3E => "Long Range Scanner",
3103 0x3F => "Mirror Speed Control",
3104 0x40 => "Not On File Indication",
3105 0x41 => "Programmable Beeper",
3106 0x42 => "Triggerless",
3107 0x43 => "Wand",
3108 0x44 => "Water Resistant",
3109 0x45 => "Multi-Range Scanner",
3110 0x46 => "Proximity Sensor",
3111 0x4D => "Fragment Decoding",
3112 0x4E => "Scanner Read Confidence",
3113 0x4F => "Data Prefix",
3114 0x50 => "Prefix AIMI",
3115 0x51 => "Prefix None",
3116 0x52 => "Prefix Proprietary",
3117 0x55 => "Active Time",
3118 0x56 => "Aiming Laser Pattern",
3119 0x57 => "Bar Code Present",
3120 0x58 => "Beeper State",
3121 0x59 => "Laser On Time",
3122 0x5A => "Laser State",
3123 0x5B => "Lockout Time",
3124 0x5C => "Motor State",
3125 0x5D => "Motor Timeout",
3126 0x5E => "Power On Reset Scanner",
3127 0x5F => "Prevent Read of Barcodes",
3128 0x60 => "Initiate Barcode Read",
3129 0x61 => "Trigger State",
3130 0x62 => "Trigger Mode",
3131 0x63 => "Trigger Mode Blinking Laser On",
3132 0x64 => "Trigger Mode Continuous Laser On",
3133 0x65 => "Trigger Mode Laser on while Pulled",
3134 0x66 => "Trigger Mode Laser stays on after release",
3135 0x6D => "Commit Parameters to NVM",
3136 0x6E => "Parameter Scanning",
3137 0x6F => "Parameters Changed",
3138 0x70 => "Set parameter default values",
3139 0x75 => "Scanner In Cradle",
3140 0x76 => "Scanner In Range",
3141 0x7A => "Aim Duration",
3142 0x7B => "Good Read Lamp Duration",
3143 0x7C => "Good Read Lamp Intensity",
3144 0x7D => "Good Read LED",
3145 0x7E => "Good Read Tone Frequency",
3146 0x7F => "Good Read Tone Length",
3147 0x80 => "Good Read Tone Volume",
3148 0x82 => "No Read Message",
3149 0x83 => "Not on File Volume",
3150 0x84 => "Powerup Beep",
3151 0x85 => "Sound Error Beep",
3152 0x86 => "Sound Good Read Beep",
3153 0x87 => "Sound Not On File Beep",
3154 0x88 => "Good Read When to Write",
3155 0x89 => "GRWTI After Decode",
3156 0x8A => "GRWTI Beep/Lamp after transmit",
3157 0x8B => "GRWTI No Beep/Lamp use at all",
3158 0x91 => "Bookland EAN",
3159 0x92 => "Convert EAN 8 to 13 Type",
3160 0x93 => "Convert UPC A to EAN-13",
3161 0x94 => "Convert UPC-E to A",
3162 0x95 => "EAN-13",
3163 0x96 => "EAN-8",
3164 0x97 => "EAN-99 128 Mandatory",
3165 0x98 => "EAN-99 P5/128 Optional",
3166 0x99 => "Enable EAN Two Label",
3167 0x9A => "UPC/EAN",
3168 0x9B => "UPC/EAN Coupon Code",
3169 0x9C => "UPC/EAN Periodicals",
3170 0x9D => "UPC-A",
3171 0x9E => "UPC-A Mandatory",
3172 0x9F => "UPC-A Optional",
3173 0xA0 => "UPC-A with P5 Optional",
3174 0xA1 => "UPC-E",
3175 0xA2 => "UPC-E1",
3176 0xA9 => "Periodical",
3177 0xAA => "Periodical Auto-Discriminate +2",
3178 0xAB => "Periodical Only Decode with +2",
3179 0xAC => "Periodical Ignore +2",
3180 0xAD => "Periodical Auto-Discriminate +5",
3181 0xAE => "Periodical Only Decode with +5",
3182 0xAF => "Periodical Ignore +5",
3183 0xB0 => "Check",
3184 0xB1 => "Check Disable Price",
3185 0xB2 => "Check Enable 4 digit Price",
3186 0xB3 => "Check Enable 5 digit Price",
3187 0xB4 => "Check Enable European 4 digit Price",
3188 0xB5 => "Check Enable European 5 digit Price",
3189 0xB7 => "EAN Two Label",
3190 0xB8 => "EAN Three Label",
3191 0xB9 => "EAN 8 Flag Digit 1",
3192 0xBA => "EAN 8 Flag Digit 2",
3193 0xBB => "EAN 8 Flag Digit 3",
3194 0xBC => "EAN 13 Flag Digit 1",
3195 0xBD => "EAN 13 Flag Digit 2",
3196 0xBE => "EAN 13 Flag Digit 3",
3197 0xBF => "Add Label Definition",
3198 0xC0 => "Clear all Label Definitions",
3199 0xC3 => "Codabar",
3200 0xC4 => "Code 128",
3201 0xC7 => "Code 39",
3202 0xC8 => "Code 93",
3203 0xC9 => "Full ASCII Conversion",
3204 0xCA => "Interleaved 2 of 5",
3205 0xCB => "Italian Pharmacy Code",
3206 0xCC => "MSI/Plessey",
3207 0xCD => "Standard 2 of 5 IATA",
3208 0xCE => "Standard 2 of 5",
3209 0xD3 => "Transmit Start/Stop",
3210 0xD4 => "Tri-Optic",
3211 0xD5 => "UCC/EAN-128",
3212 0xD6 => "Check Digit",
3213 0xD7 => "Check Digit Disable",
3214 0xD8 => "Check Digit Enable Interleaved 2 of 5 OPCC",
3215 0xD9 => "Check Digit Enable Interleaved 2 of 5 USS",
3216 0xDA => "Check Digit Enable Standard 2 of 5 OPCC",
3217 0xDB => "Check Digit Enable Standard 2 of 5 USS",
3218 0xDC => "Check Digit Enable One MSI Plessey",
3219 0xDD => "Check Digit Enable Two MSI Plessey",
3220 0xDE => "Check Digit Codabar Enable",
3221 0xDF => "Check Digit Code 39 Enable",
3222 0xF0 => "Transmit Check Digit",
3223 0xF1 => "Disable Check Digit Transmit",
3224 0xF2 => "Enable Check Digit Transmit",
3225 0xFB => "Symbology Identifier 1",
3226 0xFC => "Symbology Identifier 2",
3227 0xFD => "Symbology Identifier 3",
3228 0xFE => "Decoded Data",
3229 0xFF => "Decode Data Continued",
3230 0x100 => "Bar Space Data",
3231 0x101 => "Scanner Data Accuracy",
3232 0x102 => "Raw Data Polarity",
3233 0x103 => "Polarity Inverted Bar Code",
3234 0x104 => "Polarity Normal Bar Code",
3235 0x106 => "Minimum Length to Decode",
3236 0x107 => "Maximum Length to Decode",
3237 0x108 => "Discrete Length to Decode 1",
3238 0x109 => "Discrete Length to Decode 2",
3239 0x10A => "Data Length Method",
3240 0x10B => "DL Method Read any",
3241 0x10C => "DL Method Check in Range",
3242 0x10D => "DL Method Check for Discrete",
3243 0x110 => "Aztec Code",
3244 0x111 => "BC412",
3245 0x112 => "Channel Code",
3246 0x113 => "Code 16",
3247 0x114 => "Code 32",
3248 0x115 => "Code 49",
3249 0x116 => "Code One",
3250 0x117 => "Colorcode",
3251 0x118 => "Data Matrix",
3252 0x119 => "MaxiCode",
3253 0x11A => "MicroPDF",
3254 0x11B => "PDF-417",
3255 0x11C => "PosiCode",
3256 0x11D => "QR Code",
3257 0x11E => "SuperCode",
3258 0x11F => "UltraCode",
3259 0x120 => "USD-5 (Slug Code)",
3260 0x121 => "VeriCode",
3261 _ => "Reserved",
3262 }),
3263 0x8D => Cow::Borrowed(match usage {
3265 0x00 => "Undefined",
3266 0x01 => "Scales",
3267 0x20 => "Scale Device",
3268 0x21 => "Scale Class",
3269 0x22 => "Scale Class I Metric",
3270 0x23 => "Scale Class II Metric",
3271 0x24 => "Scale Class III Metric",
3272 0x25 => "Scale Class IIIL Metric",
3273 0x26 => "Scale Class IV Metric",
3274 0x27 => "Scale Class III English",
3275 0x28 => "Scale Class IIIL English",
3276 0x29 => "Scale Class IV English",
3277 0x2A => "Scale Class Generic",
3278 0x30 => "Scale Attribute Report",
3279 0x31 => "Scale Control Report",
3280 0x32 => "Scale Data Report",
3281 0x33 => "Scale Status Report",
3282 0x34 => "Scale Weight Limit Report",
3283 0x35 => "Scale Statistics Report",
3284 0x40 => "Data Weight",
3285 0x41 => "Data Scaling",
3286 0x50 => "Weight Unit",
3287 0x51 => "Weight Unit Milligram",
3288 0x52 => "Weight Unit Gram",
3289 0x53 => "Weight Unit Kilogram",
3290 0x54 => "Weight Unit Carats",
3291 0x55 => "Weight Unit Taels",
3292 0x56 => "Weight Unit Grains",
3293 0x57 => "Weight Unit Pennyweights",
3294 0x58 => "Weight Unit Metric Ton",
3295 0x59 => "Weight Unit Avoir Ton",
3296 0x5A => "Weight Unit Troy Ounce",
3297 0x5B => "Weight Unit Ounce",
3298 0x5C => "Weight Unit Pound",
3299 0x60 => "Calibration Count",
3300 0x61 => "Re-Zero Count",
3301 0x70 => "Scale Status",
3302 0x71 => "Scale Status Fault",
3303 0x72 => "Scale Status Stable at Center of Zero",
3304 0x73 => "Scale Status In Motion",
3305 0x74 => "Scale Status Weight Stable",
3306 0x75 => "Scale Status Under Zero",
3307 0x76 => "Scale Status Over Weight Limit",
3308 0x77 => "Scale Status Requires Calibration",
3309 0x78 => "Scale Status Requires Rezeroing",
3310 0x80 => "Zero Scale",
3311 0x81 => "Enforced Zero Return",
3312 _ => "Reserved",
3313 }),
3314 0x8E => Cow::Borrowed(match usage {
3316 0x00 => "Undefined",
3317 0x01 => "MSR Device Read-Only",
3318 0x11 => "Track 1 Length",
3319 0x12 => "Track 2 Length",
3320 0x13 => "Track 3 Length",
3321 0x14 => "Track JIS Length",
3322 0x20 => "Track Data",
3323 0x21 => "Track 1 Data",
3324 0x22 => "Track 2 Data",
3325 0x23 => "Track 3 Data",
3326 0x24 => "Track JIS Data",
3327 _ => "Reserved",
3328 }),
3329 0x90 => Cow::Borrowed(match usage {
3331 0x00 => "Undefined",
3332 0x20 => "Camera Auto-focus",
3333 0x21 => "Camera Shutter",
3334 _ => "Reserved",
3335 }),
3336 0x91 => Cow::Borrowed(match usage {
3338 0x00 => "Undefined",
3339 0x01 => "General Purpose IO Card",
3340 0x02 => "Coin Door",
3341 0x03 => "Watchdog Timer",
3342 0x30 => "General Purpose Analog Input State",
3343 0x31 => "General Purpose Digital Input State",
3344 0x32 => "General Purpose Optical Input State",
3345 0x33 => "General Purpose Digital Output State",
3346 0x34 => "Number of Coin Doors",
3347 0x35 => "Coin Drawer Drop Count",
3348 0x36 => "Coin Drawer Start",
3349 0x37 => "Coin Drawer Service",
3350 0x38 => "Coin Drawer Tilt",
3351 0x39 => "Coin Door Test",
3352 0x40 => "Coin Door Lockout",
3353 0x41 => "Watchdog Timeout",
3354 0x42 => "Watchdog Action",
3355 0x43 => "Watchdog Reboot",
3356 0x44 => "Watchdog Restart",
3357 0x45 => "Alarm Input",
3358 0x46 => "Coin Door Counter",
3359 0x47 => "I/O Direction Mapping",
3360 0x48 => "Set I/O Direction Mapping",
3361 0x49 => "Extended Optical Input State",
3362 0x4A => "Pin Pad Input State",
3363 0x4B => "Pin Pad Status",
3364 0x4C => "Pin Pad Output",
3365 0x4D => "Pin Pad Command",
3366 _ => "Reserved",
3367 }),
3368 0x92 => Cow::Borrowed(match usage {
3370 0x40 => "ACK",
3371 0x41 => "Enable",
3372 0x42 => "Disable",
3373 0x43 => "Self Test",
3374 0x44 => "Request GAT Report",
3375 0x47 => "Calculate CRC",
3376 0x210 => "Number of Note Data Entries",
3377 0x211 => "Read Note Table",
3378 0x212 => "Extend Timeout",
3379 0x213 => "Accept Note/Ticket",
3380 0x214 => "Return Note/Ticket",
3381 0x21A => "Read Note Acceptor Metrics",
3382 _ => "Reserved",
3383 }),
3384 0xF1D0 => Cow::Borrowed(match usage {
3386 0x00 => "Undefined",
3387 0x01 => "U2F Authenticator Device",
3388 0x20 => "Input Report Data",
3389 0x21 => "Output Report Data",
3390 _ => "Reserved",
3391 }),
3392 _ => Cow::Borrowed(""),
3393 }
3394}
3395
3396impl Display for Usage {
3397 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3398 match &self.usage_page {
3399 Some(usage_page) => {
3400 let usage = __usage_format_helper(
3401 __data_to_unsigned(self.data()),
3402 __data_to_unsigned(usage_page.data()),
3403 );
3404 if usage.is_empty() {
3405 write!(f, "Usage")
3406 } else {
3407 write!(f, "Usage ({})", usage)
3408 }
3409 }
3410 None => write!(f, "Usage"),
3411 }
3412 }
3413}
3414
3415impl Display for UsageMinimum {
3416 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3417 match &self.usage_page {
3418 Some(usage_page) => {
3419 let usage = __usage_format_helper(
3420 __data_to_unsigned(self.data()),
3421 __data_to_unsigned(usage_page.data()),
3422 );
3423 if usage.is_empty() {
3424 write!(f, "Usage Minimum")
3425 } else {
3426 write!(f, "Usage Minimum ({})", usage)
3427 }
3428 }
3429 None => write!(f, "Usage Minimum"),
3430 }
3431 }
3432}
3433
3434impl Display for UsageMaximum {
3435 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3436 match &self.usage_page {
3437 Some(usage_page) => {
3438 let usage = __usage_format_helper(
3439 __data_to_unsigned(self.data()),
3440 __data_to_unsigned(usage_page.data()),
3441 );
3442 if usage.is_empty() {
3443 write!(f, "Usage Maximum")
3444 } else {
3445 write!(f, "Usage Maximum ({})", usage)
3446 }
3447 }
3448 None => write!(f, "Usage Maximum"),
3449 }
3450 }
3451}
3452
3453impl Display for DesignatorIndex {
3454 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3455 match self.data().len() {
3456 0 => write!(f, "Designator Index"),
3457 1.. => write!(f, "Designator Index ({})", __data_to_unsigned(self.data())),
3458 }
3459 }
3460}
3461
3462impl Display for DesignatorMinimum {
3463 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3464 match self.data().len() {
3465 0 => write!(f, "Designator Minimum"),
3466 1.. => write!(
3467 f,
3468 "Designator Minimum ({})",
3469 __data_to_unsigned(self.data())
3470 ),
3471 }
3472 }
3473}
3474
3475impl Display for DesignatorMaximum {
3476 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3477 match self.data().len() {
3478 0 => write!(f, "Designator Maximum"),
3479 1.. => write!(
3480 f,
3481 "Designator Maximum ({})",
3482 __data_to_unsigned(self.data())
3483 ),
3484 }
3485 }
3486}
3487
3488impl Display for StringIndex {
3489 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3490 match self.data().len() {
3491 0 => write!(f, "String Index"),
3492 1.. => write!(f, "String Index ({})", __data_to_unsigned(self.data())),
3493 }
3494 }
3495}
3496
3497impl Display for StringMinimum {
3498 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3499 match self.data().len() {
3500 0 => write!(f, "String Minimum"),
3501 1.. => write!(f, "String Minimum ({})", __data_to_unsigned(self.data())),
3502 }
3503 }
3504}
3505
3506impl Display for StringMaximum {
3507 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3508 match self.data().len() {
3509 0 => write!(f, "String Maximum"),
3510 1.. => write!(f, "String Maximum ({})", __data_to_unsigned(self.data())),
3511 }
3512 }
3513}
3514
3515impl Display for Delimiter {
3516 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3517 match self.data().len() {
3518 0 => write!(f, "Delimiter"),
3519 1.. => write!(f, "Delimiter ({})", __data_to_unsigned(self.data())),
3520 }
3521 }
3522}