-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathdata.py
More file actions
1175 lines (1100 loc) · 60.7 KB
/
data.py
File metadata and controls
1175 lines (1100 loc) · 60.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# SPDX-License-Identifier: MIT
import enum
import sys
from collections.abc import Collection
from typing import Any, Generic, Optional, Union
if sys.version_info >= (3, 13):
from typing import TypeVar
else:
from typing_extensions import TypeVar
class _DataMeta(type):
"""
This metaclass populates _single and _range, following the structure described bellow
The class should declare data as follows
MY_DATA_VALUE = 0x01, 'Data description'
or, for ranges,
MY_DATA_RANGE = 0x02, ..., 0x06, 'Data range description'
_single and _range will then be populated with
MY_DATA_VALUE = 0x01
_single[0x01] = ('Data description', None)
MY_DATA_RANGE = range(0x02, 0x06+1)
_range.append(tuple(0x02, 0x06, ('Data range description', None)))
As you can see, for single data insertions, the variable will be kept with
the first value of the tuple. Both single and range data insertions will
register the data into the correspondent data holders.
You can also define subdata,
MY_DATA_VALUE = 0x01, 'Data description', OTHER_DATA_TYPE
MY_DATA_RANGE = 0x02, ..., 0x06, 'Data range description', YET_OTHER_DATA_TYPE
Which will result in
MY_DATA_VALUE = 0x01
_single[0x01] = ('Data description', OTHER_DATA_TYPE)
_range.append(tuple(0x02, 0x06, ('Data range description', YET_OTHER_DATA_TYPE)))
This metaclass also does some verification to prevent duplicated data.
"""
def __new__(cls, name: str, bases: tuple[Any], obj_dict: dict[str, Any]): # type: ignore[no-untyped-def] # noqa: C901
obj_dict['_single'] = {}
obj_dict['_range'] = []
# allow constructing data via a data obj_dicttionary as opposed to directly in the object body
if 'data' in obj_dict:
data = obj_dict.pop('data')
else:
data = obj_dict
for attr in data:
if not attr.startswith('_') and isinstance(data[attr], tuple):
if len(data[attr]) == 2 or len(data[attr]) == 4: # missing sub data
data[attr] = data[attr] + (None,)
if len(data[attr]) == 3: # single
num, desc, sub = data[attr]
if not isinstance(num, int):
msg = f"First element of '{attr}' should be an int"
raise TypeError(msg)
if not isinstance(desc, str):
msg = f"Second element of '{attr}' should be a string"
raise TypeError(msg)
if num in obj_dict['_single']:
msg = f"Duplicated value in '{attr}' ({num})"
raise ValueError(msg)
for nmin, nmax, _ in obj_dict['_range']:
if nmin <= num <= nmax:
msg = f"Duplicated value in '{attr}' ({num})"
raise ValueError(msg)
obj_dict[attr] = num
obj_dict['_single'][num] = desc, sub
elif len(data[attr]) == 5: # range
nmin, el, nmax, desc, sub = data[attr]
if not el == Ellipsis:
msg = f"Second element of '{attr}' should be an ellipsis (...)"
raise TypeError(msg)
if not isinstance(nmin, int):
msg = f"First element of '{attr}' should be an int"
raise TypeError(msg)
if not isinstance(nmax, int):
msg = f"Third element of '{attr}' should be an int"
raise TypeError(msg)
if not isinstance(desc, str):
msg = f"Fourth element of '{attr}' should be a string"
raise TypeError(msg)
for num in obj_dict['_single']:
if nmin <= num <= nmax:
msg = f"Duplicated value in '{attr}' ({num})"
raise ValueError(msg)
obj_dict[attr] = range(nmin, nmax + 1)
obj_dict['_range'].append((nmin, nmax, (desc, sub)))
else:
msg = f'Invalid field: {attr}'
raise ValueError(msg)
return super().__new__(cls, name, bases, obj_dict)
_SubdataType = TypeVar('_SubdataType', default=None)
class _Data(Generic[_SubdataType], metaclass=_DataMeta):
"""
This class provides a get_description method to get data out of _single and _range.
See the _DataMeta documentation for more information.
"""
_single: dict[int, tuple[str, _SubdataType]]
_range: list[tuple[int, int, tuple[str, _SubdataType]]]
data: dict[str, tuple[int, str, _SubdataType]]
@classmethod
def _get_data(cls, num: Optional[int]) -> tuple[str, _SubdataType]:
if num is None:
msg = 'Data index is not an int'
raise KeyError(msg)
if num in cls._single:
return cls._single[num]
for nmin, nmax, data in cls._range:
if nmin <= num <= nmax:
return data
msg = f'Data not found for index 0x{num:02x} in {cls.__name__}'
raise KeyError(msg)
@classmethod
def get_description(cls, num: Optional[int]) -> str:
return cls._get_data(num)[0]
@classmethod
def get_subdata(cls, num: Optional[int]) -> _SubdataType:
subdata = cls._get_data(num)[1]
if not subdata:
msg = 'Sub-data not available'
raise ValueError(msg)
return subdata
class UsageTypes(enum.Enum):
# controls
LINEAR_CONTROL = LC = 0
ON_OFF_CONTROL = OOC = 1
MOMENTARY_CONTROL = MC = 2
ONE_SHOT_CONTROL = OSC = 3
RE_TRIGGER_CONTROL = RTC = 4
# data
SELECTOR = SEL = 5
STATIC_VALUE = SV = 6
STATIC_FLAG = SF = 7
DYNAMIC_FLAG = DF = 8
DYNAMIC_VALUE = DV = 9
# collection
NAMED_ARRAY = NARY = 10
COLLECTION_APPLICATION = CA = 11
COLLECTION_LOGICAL = CL = 12
COLLECTION_PHYSICAL = CP = 13
USAGE_SWITCH = US = 14
USAGE_MODIFIER = UM = 15
UsageTypesControls = (
UsageTypes.LINEAR_CONTROL,
UsageTypes.ON_OFF_CONTROL,
UsageTypes.ONE_SHOT_CONTROL,
UsageTypes.RE_TRIGGER_CONTROL,
)
UsageTypesData = (
UsageTypes.SELECTOR,
UsageTypes.STATIC_VALUE,
UsageTypes.STATIC_FLAG,
UsageTypes.DYNAMIC_VALUE,
UsageTypes.DYNAMIC_FLAG,
)
UsageTypesCollection = (
UsageTypes.NAMED_ARRAY,
UsageTypes.COLLECTION_APPLICATION,
UsageTypes.COLLECTION_LOGICAL,
UsageTypes.COLLECTION_PHYSICAL,
UsageTypes.USAGE_SWITCH,
UsageTypes.USAGE_MODIFIER,
)
class Collections(_Data):
PHYSICAL = 0x00, 'Physical'
APPLICATION = 0x01, 'Application'
LOGICAL = 0x02, 'Logical'
REPORT = 0x03, 'Report'
NAMED_ARRAY = 0x04, 'Named Array'
USAGE_SWITCH = 0x05, 'Usage Switch'
USAGE_MODIFIER = 0x06, 'Usage Modifier'
VENDOR = 0x80, ..., 0xFF, 'Vendor'
class UsagePage(_Data[Union[UsageTypes, Collection[UsageTypes]]]):
pass
class GenericDesktopControls(UsagePage):
POINTER = 0x01, 'Pointer', UsageTypes.CP
MOUSE = 0x02, 'Mouse', UsageTypes.CA
JOYSTICK = 0x04, 'Joystick', UsageTypes.CA
GAMEPAD = 0x05, 'Game Pad', UsageTypes.CA
KEYBOARD = 0x06, 'Keyboard', UsageTypes.CA
KEYPAD = 0x07, 'Keypad', UsageTypes.CA
MULTI_AXIS_CONTROLLER = 0x08, 'Multi-axis Controller', UsageTypes.CA
TABLET_PC_SYSTEM_CONTROLS = 0x09, 'Tablet PC System Controls', UsageTypes.CA
X = 0x30, 'X', UsageTypes.DV
Y = 0x31, 'Y', UsageTypes.DV
Z = 0x32, 'Z', UsageTypes.DV
RX = 0x33, 'Rx', UsageTypes.DV
RY = 0x34, 'Ry', UsageTypes.DV
RZ = 0x35, 'Rz', UsageTypes.DV
SLIDER = 0x36, 'Slider', UsageTypes.DV
DIAL = 0x37, 'Dial', UsageTypes.DV
WHEEL = 0x38, 'Wheel', UsageTypes.DV
HAT_SWITCH = 0x39, 'Hat switch', UsageTypes.DV
COUNTED_BUFFER = 0x3A, 'Counted Buffer', UsageTypes.CL
BYTE_COUNT = 0x3B, 'Byte Count', UsageTypes.DV
MOTION_WAKEUP = 0x3C, 'Motion Wakeup', UsageTypes.OSC
START = 0x3D, 'Start', UsageTypes.OOC
SELECT = 0x3E, 'Select', UsageTypes.OOC
VX = 0x40, 'Vx', UsageTypes.DV
VY = 0x41, 'Vy', UsageTypes.DV
VZ = 0x42, 'Vz', UsageTypes.DV
VBRX = 0x43, 'Vbrx', UsageTypes.DV
VBRY = 0x44, 'Vbry', UsageTypes.DV
VBRZ = 0x45, 'Vbrz', UsageTypes.DV
VNO = 0x46, 'Vno', UsageTypes.DV
FEATURE_NOTIFICATION = 0x47, 'Feature Notification', (UsageTypes.DV, UsageTypes.DF)
RESOLUTION_MULTIPLIER = 0x48, 'Resolution Multiplier', UsageTypes.DV
SYSTEM_CONTROL = 0x80, 'System Control', UsageTypes.CA
SYSTEM_POWER_CONTROL = 0x81, 'System Power Down', UsageTypes.OSC
SYSTEM_SLEEP = 0x82, 'System Sleep', UsageTypes.OSC
SYSTEM_WAKE_UP = 0x83, 'System Wake Up', UsageTypes.OSC
SYSTEM_CONTEXT_MENU = 0x84, 'System Context Menu', UsageTypes.OSC
SYSTEM_MAIN_MENU = 0x85, 'System Main Menu', UsageTypes.OSC
SYSTEM_APP_MENU = 0x86, 'System App Menu', UsageTypes.OSC
SYSTEM_MENU_HELP = 0x87, 'System Menu Help', UsageTypes.OSC
SYSTEM_MENU_EXIT = 0x88, 'System Menu Exit', UsageTypes.OSC
SYSTEM_MENU_SELECT = 0x89, 'System Menu Select', UsageTypes.OSC
SYSTEM_MENU_RIGHT = 0x8A, 'System Menu Right', UsageTypes.RTC
SYSTEM_MENU_LEFT = 0x8B, 'System Menu Left', UsageTypes.RTC
SYSTEM_MENU_UP = 0x8C, 'System Menu Up', UsageTypes.RTC
SYSTEM_MENU_DOWN = 0x8D, 'System Menu Down', UsageTypes.RTC
SYSTEM_COLD_RESTART = 0x8E, 'System Cold Restart', UsageTypes.OSC
SYSTEM_WARM_RESTART = 0x8F, 'System Warm Restart', UsageTypes.OSC
DPAD_UP = 0x90, 'D-pad Up', UsageTypes.OOC
DPAD_DOWN = 0x91, 'D-pad Down', UsageTypes.OOC
DPAD_RIGHT = 0x92, 'D-pad Right', UsageTypes.OOC
DPAD_LEFT = 0x93, 'D-pad Left', UsageTypes.OOC
SYSTEM_DOCK = 0xA0, 'System Dock', UsageTypes.OSC
SYSTEM_UNDOCK = 0xA1, 'System Undock', UsageTypes.OSC
SYSTEM_SETUP = 0xA2, 'System Setup', UsageTypes.OSC
SYSTEM_BREAK = 0xA3, 'System Break', UsageTypes.OSC
SYSTEM_DEBBUGER_BREAK = 0xA4, 'System Debugger Break', UsageTypes.OSC
APPLICATION_BREAK = 0xA5, 'Application Break', UsageTypes.OSC
APPLICATION_DEBBUGER_BREAK = 0xA6, 'Application Debugger Break', UsageTypes.OSC
SYSTEM_SPEAKER_MUTE = 0xA7, 'System Speaker Mute', UsageTypes.OSC
SYSTEM_HIBERNATE = 0xA8, 'System Hibernate', UsageTypes.OSC
SYSTEM_DISPLAY_INVERT = 0xB0, 'System Display Invert', UsageTypes.OSC
SYSTEM_DISPLAY_INTERNAL = 0xB1, 'System Display Internal', UsageTypes.OSC
SYSTEM_DISPLAY_EXTERNAL = 0xB2, 'System Display External', UsageTypes.OSC
SYSTEM_DISPLAY_BOTH = 0xB3, 'System Display Both', UsageTypes.OSC
SYSTEM_DISPLAY_DUAL = 0xB4, 'System Display Dual', UsageTypes.OSC
SYSTEM_DISPLAY_TOGGLE = 0xB5, 'System Display Toggle Int/Ext', UsageTypes.OSC
SYSTEM_DISPLAY_SWAP = 0xB6, 'System Display Swap Primary/Secondary', UsageTypes.OSC
SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7, 'System Display LCD Autoscale', UsageTypes.OSC
class KeyboardKeypad(UsagePage):
NO_EVENT = 0x00, 'No event indicated', UsageTypes.SEL
KEYBOARD_ERROR_ROLL_OVER = 0x01, 'Keyboard ErrorRollOver', UsageTypes.SEL
KEYBOARD_POST = 0x02, 'Keyboard POSTFail', UsageTypes.SEL
KEYBOARD_ERROR_UNDEFINED = 0x03, 'Keyboard ErrorUndefined', UsageTypes.SEL
KEYBOARD_A = 0x04, 'Keyboard a and A', UsageTypes.SEL
KEYBOARD_B = 0x05, 'Keyboard b and B', UsageTypes.SEL
KEYBOARD_C = 0x06, 'Keyboard c and C', UsageTypes.SEL
KEYBOARD_D = 0x07, 'Keyboard d and D', UsageTypes.SEL
KEYBOARD_E = 0x08, 'Keyboard e and E', UsageTypes.SEL
KEYBOARD_F = 0x09, 'Keyboard f and F', UsageTypes.SEL
KEYBOARD_G = 0x0A, 'Keyboard g and G', UsageTypes.SEL
KEYBOARD_H = 0x0B, 'Keyboard h and H', UsageTypes.SEL
KEYBOARD_I = 0x0C, 'Keyboard i and I', UsageTypes.SEL
KEYBOARD_J = 0x0D, 'Keyboard j and J', UsageTypes.SEL
KEYBOARD_K = 0x0E, 'Keyboard k and K', UsageTypes.SEL
KEYBOARD_L = 0x0F, 'Keyboard l and L', UsageTypes.SEL
KEYBOARD_M = 0x10, 'Keyboard m and M', UsageTypes.SEL
KEYBOARD_N = 0x11, 'Keyboard n and N', UsageTypes.SEL
KEYBOARD_O = 0x12, 'Keyboard o and O', UsageTypes.SEL
KEYBOARD_P = 0x13, 'Keyboard p and P', UsageTypes.SEL
KEYBOARD_Q = 0x14, 'Keyboard q and Q', UsageTypes.SEL
KEYBOARD_R = 0x15, 'Keyboard r and R', UsageTypes.SEL
KEYBOARD_S = 0x16, 'Keyboard s and S', UsageTypes.SEL
KEYBOARD_T = 0x17, 'Keyboard t and T', UsageTypes.SEL
KEYBOARD_U = 0x18, 'Keyboard u and U', UsageTypes.SEL
KEYBOARD_V = 0x19, 'Keyboard v and V', UsageTypes.SEL
KEYBOARD_W = 0x1A, 'Keyboard w and W', UsageTypes.SEL
KEYBOARD_X = 0x1B, 'Keyboard x and X', UsageTypes.SEL
KEYBOARD_Y = 0x1C, 'Keyboard y and Y', UsageTypes.SEL
KEYBOARD_Z = 0x1D, 'Keyboard z and Z', UsageTypes.SEL
KEYBOARD_1 = 0x1E, 'Keyboard 1 and !', UsageTypes.SEL
KEYBOARD_2 = 0x1F, 'Keyboard 2 and @', UsageTypes.SEL
KEYBOARD_3 = 0x20, 'Keyboard 3 and #', UsageTypes.SEL
KEYBOARD_4 = 0x21, 'Keyboard 4 and $', UsageTypes.SEL
KEYBOARD_5 = 0x22, 'Keyboard 5 and %', UsageTypes.SEL
KEYBOARD_6 = 0x23, 'Keyboard 6 and ^', UsageTypes.SEL
KEYBOARD_7 = 0x24, 'Keyboard 7 and &', UsageTypes.SEL
KEYBOARD_8 = 0x25, 'Keyboard 8 and *', UsageTypes.SEL
KEYBOARD_9 = 0x26, 'Keyboard 9 and (', UsageTypes.SEL
KEYBOARD_0 = 0x27, 'Keyboard 0 and )', UsageTypes.SEL
KEYBOARD_ENTER = 0x28, 'Keyboard Return (ENTER)', UsageTypes.SEL
KEYBOARD_ESCAPE = 0x29, 'Keyboard ESCAPE', UsageTypes.SEL
KEYBOARD_DELETE = 0x2A, 'Keyboard DELETE (Backspace)', UsageTypes.SEL
KEYBOARD_TAB = 0x2B, 'Keyboard Tab', UsageTypes.SEL
KEYBOARD_SPACEBAR = 0x2C, 'Keyboard Spacebar', UsageTypes.SEL
KEYBOARD_MINUS = 0x2D, 'Keyboard - and (underscore)', UsageTypes.SEL
KEYBOARD_PLUS = 0x2E, 'Keyboard = and +', UsageTypes.SEL
KEYBOARD_LEFT_BRACKET = 0x2F, 'Keyboard [ and {', UsageTypes.SEL
KEYBOARD_RIGHT_BRACKET = 0x30, 'Keyboard ] and }', UsageTypes.SEL
KEYBOARD_BACKSLASH = 0x31, 'Keyboard \\ and |', UsageTypes.SEL
KEYBOARD_CARDINAL = 0x32, 'Keyboard Non-US # and ~', UsageTypes.SEL
KEYBOARD_SEMICOLON = 0x33, 'Keyboard ; and :', UsageTypes.SEL
KEYBOARD_QUOTE = 0x34, 'Keyboard \' and "', UsageTypes.SEL
KEYBOARD_GRAVE = 0x35, 'Keyboard Grave Accent and Tilde', UsageTypes.SEL
KEYBOARD_COMMA = 0x36, 'Keyboard , and <', UsageTypes.SEL
KEYBOARD_DOT = 0x37, 'Keyboard . and >', UsageTypes.SEL
KEYBOARD_SLASH = 0x38, 'Keyboard / and ?', UsageTypes.SEL
KEYBOARD_CAPS_LOCK = 0x39, 'Keyboard Caps Lock', UsageTypes.SEL
KEYBOARD_F1 = 0x3A, 'Keyboard F1', UsageTypes.SEL
KEYBOARD_F2 = 0x3B, 'Keyboard F2', UsageTypes.SEL
KEYBOARD_F3 = 0x3C, 'Keyboard F3', UsageTypes.SEL
KEYBOARD_F4 = 0x3D, 'Keyboard F4', UsageTypes.SEL
KEYBOARD_F5 = 0x3E, 'Keyboard F5', UsageTypes.SEL
KEYBOARD_F6 = 0x3F, 'Keyboard F6', UsageTypes.SEL
KEYBOARD_F7 = 0x40, 'Keyboard F7', UsageTypes.SEL
KEYBOARD_F8 = 0x41, 'Keyboard F8', UsageTypes.SEL
KEYBOARD_F9 = 0x42, 'Keyboard F9', UsageTypes.SEL
KEYBOARD_F10 = 0x43, 'Keyboard F10', UsageTypes.SEL
KEYBOARD_F11 = 0x44, 'Keyboard F11', UsageTypes.SEL
KEYBOARD_F12 = 0x45, 'Keyboard F12', UsageTypes.SEL
KEYBOARD_PRINTSCREEN = 0x46, 'Keyboard PrintScreen', UsageTypes.SEL
KEYBOARD_SCROLL_LOCK = 0x47, 'Keyboard Scroll Lock', UsageTypes.SEL
KEYBOARD_PAUSE = 0x48, 'Keyboard Pause', UsageTypes.SEL
KEYBOARD_INSERT = 0x49, 'Keyboard Insert', UsageTypes.SEL
KEYBOARD_HOME = 0x4A, 'Keyboard Home', UsageTypes.SEL
KEYBOARD_PAGE_UP = 0x4B, 'Keyboard PageUp', UsageTypes.SEL
KEYBOARD_DELETE_FORWARD = 0x4C, 'Keyboard Delete Forward', UsageTypes.SEL
KEYBOARD_END = 0x4D, 'Keyboard End', UsageTypes.SEL
KEYBOARD_PAGE_DOWN = 0x4E, 'Keyboard PageDown', UsageTypes.SEL
KEYBOARD_RIGHT_ARROW = 0x4F, 'Keyboard RightArrow', UsageTypes.SEL
KEYBOARD_LEFT_ARROW = 0x50, 'Keyboard LeftArrow', UsageTypes.SEL
KEYBOARD_UP_ARROW = 0x51, 'Keyboard DownArrow', UsageTypes.SEL
KEYBOARD_DOWN_ARROW = 0x52, 'Keyboard UpArrow', UsageTypes.SEL
KEYBOARD_NUM_LOCK = 0x53, 'Keypad Num Lock and Clear', UsageTypes.SEL
KEYPAD_SLASH = 0x54, 'Keypad /', UsageTypes.SEL
KEYPAD_ASTERISK = 0x55, 'Keypad *', UsageTypes.SEL
KEYPAD_MINUS = 0x56, 'Keypad -', UsageTypes.SEL
KEYPAD_PLUS = 0x57, 'Keypad +', UsageTypes.SEL
KEYPAD_ENTER = 0x58, 'Keypad ENTER', UsageTypes.SEL
KEYPAD_1 = 0x59, 'Keypad 1 and End', UsageTypes.SEL
KEYPAD_2 = 0x5A, 'Keypad 2 and Down Arrow', UsageTypes.SEL
KEYPAD_3 = 0x5B, 'Keypad 3 and PageDn', UsageTypes.SEL
KEYPAD_4 = 0x5C, 'Keypad 4 and Left Arrow', UsageTypes.SEL
KEYPAD_5 = 0x5D, 'Keypad 5', UsageTypes.SEL
KEYPAD_6 = 0x5E, 'Keypad 6 and Right Arrow', UsageTypes.SEL
KEYPAD_7 = 0x5F, 'Keypad 7 and Home', UsageTypes.SEL
KEYPAD_8 = 0x60, 'Keypad 8 and Up Arrow', UsageTypes.SEL
KEYPAD_9 = 0x61, 'Keypad 9 and PageUp', UsageTypes.SEL
KEYPAD_0 = 0x62, 'Keypad 0 and Insert', UsageTypes.SEL
KEYPAD_DOT = 0x63, 'Keypad . and Delete', UsageTypes.SEL
KEYPAD_BACKSLASH = 0x64, 'Keyboard Non-US \\ and |', UsageTypes.SEL
KEYPAD_APPLICATION = 0x65, 'Keyboard Application', UsageTypes.SEL
KEYPAD_POWER = 0x66, 'Keyboard Power', UsageTypes.SEL
KEYPAD_EQUALS = 0x67, 'Keypad =', UsageTypes.SEL
KEYBOARD_F13 = 0x68, 'Keyboard F13', UsageTypes.SEL
KEYBOARD_F14 = 0x69, 'Keyboard F14', UsageTypes.SEL
KEYBOARD_F15 = 0x6A, 'Keyboard F15', UsageTypes.SEL
KEYBOARD_F16 = 0x6B, 'Keyboard F16', UsageTypes.SEL
KEYBOARD_F17 = 0x6C, 'Keyboard F17', UsageTypes.SEL
KEYBOARD_F18 = 0x6D, 'Keyboard F18', UsageTypes.SEL
KEYBOARD_F19 = 0x6E, 'Keyboard F19', UsageTypes.SEL
KEYBOARD_F20 = 0x6F, 'Keyboard F20', UsageTypes.SEL
KEYBOARD_F21 = 0x70, 'Keyboard F21', UsageTypes.SEL
KEYBOARD_F22 = 0x71, 'Keyboard F22', UsageTypes.SEL
KEYBOARD_F23 = 0x72, 'Keyboard F23', UsageTypes.SEL
KEYBOARD_F24 = 0x73, 'Keyboard F24', UsageTypes.SEL
KEYBOARD_EXECUTE = 0x74, 'Keyboard Execute', UsageTypes.SEL
KEYBOARD_HELP = 0x75, 'Keyboard Help', UsageTypes.SEL
KEYBOARD_MENU = 0x76, 'Keyboard Menu', UsageTypes.SEL
KEYBOARD_SELECT = 0x77, 'Keyboard Select', UsageTypes.SEL
KEYBOARD_STOP = 0x78, 'Keyboard Stop', UsageTypes.SEL
KEYBOARD_AGAIN = 0x79, 'Keyboard Again', UsageTypes.SEL
KEYBOARD_UNDO = 0x7A, 'Keyboard Undo', UsageTypes.SEL
KEYBOARD_CUT = 0x7B, 'Keyboard Cut', UsageTypes.SEL
KEYBOARD_COPY = 0x7C, 'Keyboard Copy', UsageTypes.SEL
KEYBOARD_PASTE = 0x7D, 'Keyboard Paste', UsageTypes.SEL
KEYBOARD_FIND = 0x7E, 'Keyboard Find', UsageTypes.SEL
KEYBOARD_MUTE = 0x7F, 'Keyboard Mute', UsageTypes.SEL
KEYBOARD_VOLUME_UP = 0x80, 'Keyboard Volume Up', UsageTypes.SEL
KEYBOARD_VOLUME_DOWN = 0x81, 'Keyboard Volume Down', UsageTypes.SEL
KEYBOARD_LOCKING_CAPS_LOCK = 0x82, 'Keyboard Locking Caps Lock', UsageTypes.SEL
KEYBOARD_LOCKING_NUM_LOCK = 0x83, 'Keyboard Locking Num Lock', UsageTypes.SEL
KEYBOARD_LOCKING_SCROLL_LOCK = 0x84, 'Keyboard Locking Scroll Lock', UsageTypes.SEL
KEYPAD_COMMA = 0x85, 'Keypad Comma', UsageTypes.SEL
KEYPAD_EQUALS_SIGN = 0x86, 'Keypad Equal Sign', UsageTypes.SEL
KEYBOARD_INTERNATIONAL1 = 0x87, 'Keyboard International1', UsageTypes.SEL
KEYBOARD_INTERNATIONAL2 = 0x88, 'Keyboard International2', UsageTypes.SEL
KEYBOARD_INTERNATIONAL3 = 0x89, 'Keyboard International3', UsageTypes.SEL
KEYBOARD_INTERNATIONAL4 = 0x8A, 'Keyboard International4', UsageTypes.SEL
KEYBOARD_INTERNATIONAL5 = 0x8B, 'Keyboard International5', UsageTypes.SEL
KEYBOARD_INTERNATIONAL6 = 0x8C, 'Keyboard International6', UsageTypes.SEL
KEYBOARD_INTERNATIONAL7 = 0x8D, 'Keyboard International7', UsageTypes.SEL
KEYBOARD_INTERNATIONAL8 = 0x8E, 'Keyboard International8', UsageTypes.SEL
KEYBOARD_INTERNATIONAL9 = 0x8F, 'Keyboard International9', UsageTypes.SEL
KEYBOARD_LANG1 = 0x90, 'Keyboard LANG1', UsageTypes.SEL
KEYBOARD_LANG2 = 0x91, 'Keyboard LANG2', UsageTypes.SEL
KEYBOARD_LANG3 = 0x92, 'Keyboard LANG3', UsageTypes.SEL
KEYBOARD_LANG4 = 0x93, 'Keyboard LANG4', UsageTypes.SEL
KEYBOARD_LANG5 = 0x94, 'Keyboard LANG5', UsageTypes.SEL
KEYBOARD_LANG6 = 0x95, 'Keyboard LANG6', UsageTypes.SEL
KEYBOARD_LANG7 = 0x96, 'Keyboard LANG7', UsageTypes.SEL
KEYBOARD_LANG8 = 0x97, 'Keyboard LANG8', UsageTypes.SEL
KEYBOARD_LANG9 = 0x98, 'Keyboard LANG9', UsageTypes.SEL
KEYBOARD_ALTERNATE_ERASE = 0x99, 'Keyboard Alternate Erase', UsageTypes.SEL
KEYBOARD_SYSREQ_ATTENTION = 0x9A, 'Keyboard SysReq/Attention', UsageTypes.SEL
KEYBOARD_CANCEL = 0x9B, 'Keyboard Cancel', UsageTypes.SEL
KEYBOARD_CLEAR = 0x9C, 'Keyboard Clear', UsageTypes.SEL
KEYBOARD_PRIOR = 0x9D, 'Keyboard Prior', UsageTypes.SEL
KEYBOARD_RETURN = 0x9E, 'Keyboard Return', UsageTypes.SEL
KEYBOARD_SEPARATOE = 0x9F, 'Keyboard Separator', UsageTypes.SEL
KEYBOARD_OUT = 0xA0, 'Keyboard Out', UsageTypes.SEL
KEYBOARD_OPER = 0xA1, 'Keyboard Oper', UsageTypes.SEL
KEYBOARD_CLEAR_AGAIN = 0xA2, 'Keyboard Clear/Again', UsageTypes.SEL
KEYBOARD_CRSEL_PROPS = 0xA3, 'Keyboard CrSel/Props', UsageTypes.SEL
KEYBOARD_EXSELL = 0xA4, 'Keyboard ExSel', UsageTypes.SEL
KEYPAD_ZERO_ZERO = 0xB0, 'Keypad 00', UsageTypes.SEL
KEYPAD_ZERO_ZERO_ZERO = 0xB1, 'Keypad 000', UsageTypes.SEL
THOUSANDS_SEPARATOR = 0xB2, 'Thousands Separator', UsageTypes.SEL
DECIMAL_SEPARATOR = 0xB3, 'Decimal Separator', UsageTypes.SEL
CURRENCY_UNIT = 0xB4, 'Currency Unit', UsageTypes.SEL
CURRENCY_SUBUNIT = 0xB5, 'Currency Sub-unit', UsageTypes.SEL
KEYPAD_LEFT_PARENTHESIS = 0xB6, 'Keypad (', UsageTypes.SEL
KEYPAD_RIGHT_PARENTHESIS = 0xB7, 'Keypad )', UsageTypes.SEL
KEYPAD_LEFT_CURLY_BRACKET = 0xB8, 'Keypad {', UsageTypes.SEL
KEYPAD_RIGHT_CURLY_BRACKET = 0xB9, 'Keypad }', UsageTypes.SEL
KEYPAD_TAB = 0xBA, 'Keypad Tab', UsageTypes.SEL
KEYPAD_BACKSPACE = 0xBB, 'Keypad Backspace', UsageTypes.SEL
KEYPAD_A = 0xBC, 'Keypad A', UsageTypes.SEL
KEYPAD_B = 0xBD, 'Keypad B', UsageTypes.SEL
KEYPAD_C = 0xBE, 'Keypad C', UsageTypes.SEL
KEYPAD_D = 0xBF, 'Keypad D', UsageTypes.SEL
KEYPAD_E = 0xC0, 'Keypad E', UsageTypes.SEL
KEYPAD_F = 0xC1, 'Keypad F', UsageTypes.SEL
KEYPAD_XOR = 0xC2, 'Keypad XOR', UsageTypes.SEL
KEYPAD_AND = 0xC3, 'Keypad ^', UsageTypes.SEL
KEYPAD_PERCENTAGE = 0xC4, 'Keypad %', UsageTypes.SEL
KEYPAD_LESS_THAN = 0xC5, 'Keypad <', UsageTypes.SEL
KEYPAD_MORE_THAN = 0xC6, 'Keypad >', UsageTypes.SEL
KEYPAD_AMPERSAND = 0xC7, 'Keypad &', UsageTypes.SEL
KEYPAD_2_AMPERSAND = 0xC8, 'Keypad &&', UsageTypes.SEL
KEYPAD_VERTICAL_BAR = 0xC9, 'Keypad |', UsageTypes.SEL
KEYPAD_2_VERTICAL_BAR = 0xCA, 'Keypad ||', UsageTypes.SEL
KEYPAD_COLON = 0xCB, 'Keypad :', UsageTypes.SEL
KEYPAD_CARDINAL = 0xCC, 'Keypad #', UsageTypes.SEL
KEYPAD_SPACE = 0xCD, 'Keypad Space', UsageTypes.SEL
KEYPAD_AT = 0xCE, 'Keypad @', UsageTypes.SEL
KEYPAD_EXCLAMATION = 0xCF, 'Keypad !', UsageTypes.SEL
KEYPAD_MEMORY_STORE = 0xD0, 'Keypad Memory Store', UsageTypes.SEL
KEYPAD_MEMORY_RECALL = 0xD1, 'Keypad Memory Recall', UsageTypes.SEL
KEYPAD_MEMORY_CLEAR = 0xD2, 'Keypad Memory Clear', UsageTypes.SEL
KEYPAD_MEMORY_ADD = 0xD3, 'Keypad Memory Add', UsageTypes.SEL
KEYPAD_MEMORY_SUBTRACT = 0xD4, 'Keypad Memory Subtract', UsageTypes.SEL
KEYPAD_MEMORY_MULTIPLY = 0xD5, 'Keypad Memory Multiply', UsageTypes.SEL
KEYPAD_MEMORY_DIVIDE = 0xD6, 'Keypad Memory Divide', UsageTypes.SEL
KEYPAD_PLUS_MINUS = 0xD7, 'Keypad +/-', UsageTypes.SEL
KEYPAD_CLEAR = 0xD8, 'Keypad Clear', UsageTypes.SEL
KEYPAD_CLEAR_ENTRY = 0xD9, 'Keypad Clear Entry', UsageTypes.SEL
KEYPAD_BINARY = 0xDA, 'Keypad Binary', UsageTypes.SEL
KEYPAD_OCTAL = 0xDB, 'Keypad Octal', UsageTypes.SEL
KEYPAD_DECIMAL = 0xDC, 'Keypad Decimal', UsageTypes.SEL
KEYPAD_HEXADECIMAL = 0xDD, 'Keypad Hexadecimal', UsageTypes.DV
KEYBOARD_LEFT_CONTROL = 0xE0, 'Keyboard LeftControl', UsageTypes.DV
KEYBOARD_LEFT_SHIFT = 0xE1, 'Keyboard LeftShift', UsageTypes.DV
KEYBOARD_LEFT_ALT = 0xE2, 'Keyboard LeftAlt', UsageTypes.DV
KEYBOARD_LEFT_GUI = 0xE3, 'Keyboard Left GUI', UsageTypes.DV
KEYBOARD_RIGHT_CONTROL = 0xE4, 'Keyboard RightControl', UsageTypes.DV
KEYBOARD_RIGHT_SHIFT = 0xE5, 'Keyboard RightShift', UsageTypes.DV
KEYBOARD_RIGHT_ALT = 0xE6, 'Keyboard RightAlt', UsageTypes.DV
KEYBOARD_RIGHT_GUI = 0xE7, 'Keyboard Right GUI', UsageTypes.DV
class Led(UsagePage):
NUM_LOCK = 0x01, 'Num Lock', UsageTypes.OOC
CAPS_LOCK = 0x02, 'Caps Lock', UsageTypes.OOC
SCROLL_LOCK = 0x03, 'Scroll Lock', UsageTypes.OOC
COMPOSE = 0x04, 'Compose', UsageTypes.OOC
KANA = 0x05, 'Kana', UsageTypes.OOC
POWER = 0x06, 'Power', UsageTypes.OOC
SHIFT = 0x07, 'Shift', UsageTypes.OOC
DO_NOT_DISTURB = 0x08, 'Do Not Disturb', UsageTypes.OOC
MUTE = 0x09, 'Mute', UsageTypes.OOC
TONE_ENABLE = 0x0A, 'Tone Enable', UsageTypes.OOC
HIGH_CUT_FILTER = 0x0B, 'High Cut Filter', UsageTypes.OOC
LOW_CUT_FILTER = 0x0C, 'Low Cut Filter', UsageTypes.OOC
EQUALIZER_ENABLE = 0x0D, 'Equalizer Enable', UsageTypes.OOC
SOUND_FIELD_ON = 0x0E, 'Sound Field On', UsageTypes.OOC
SURROUND_ON = 0x0F, 'Surround On', UsageTypes.OOC
REPEAR = 0x10, 'Repeat', UsageTypes.OOC
STEREO = 0x11, 'Stereo', UsageTypes.OOC
SAMPLING_RATE_DETECT = 0x12, 'Sampling Rate Detect', UsageTypes.OOC
SPINNING = 0x13, 'Spinning', UsageTypes.OOC
CAV = 0x14, 'CAV', UsageTypes.OOC
CLV = 0x15, 'CLV', UsageTypes.OOC
RECORDING_FORMAT_DETECT = 0x16, 'Recording Format Detect', UsageTypes.OOC
OFF_HOOK = 0x17, 'Off-Hook', UsageTypes.OOC
RING = 0x18, 'Ring', UsageTypes.OOC
MESSAGE_WAITING = 0x19, 'Message Waiting', UsageTypes.OOC
DATA_MODE = 0x1A, 'Data Mode', UsageTypes.OOC
BATTERY_OPERATION = 0x1B, 'Battery Operation', UsageTypes.OOC
BATTERY_OK = 0x1C, 'Battery OK', UsageTypes.OOC
BATTERY_LOW = 0x1D, 'Battery Low', UsageTypes.OOC
SPEAKER = 0x1E, 'Speaker', UsageTypes.OOC
HEAD_SET = 0x1F, 'Head Set', UsageTypes.OOC
HOLD = 0x20, 'Hold', UsageTypes.OOC
MICROPHONE = 0x21, 'Microphone', UsageTypes.OOC
COVERAGE = 0x22, 'Coverage', UsageTypes.OOC
NIGHT_MODE = 0x23, 'Night Mode', UsageTypes.OOC
SEND_CALLS = 0x24, 'Send Calls', UsageTypes.OOC
CALL_PICKUP = 0x25, 'Call Pickup', UsageTypes.OOC
CONFERENCE = 0x26, 'Conference', UsageTypes.OOC
STAND_BY = 0x27, 'Stand-by', UsageTypes.OOC
CAMERA_ON = 0x28, 'Camera On', UsageTypes.OOC
CAMERA_OFF = 0x29, 'Camera Off', UsageTypes.OOC
ON_LINE = 0x2A, 'On-Line', UsageTypes.OOC
OFF_LINE = 0x2B, 'Off-Line', UsageTypes.OOC
BUSY = 0x2C, 'Busy', UsageTypes.OOC
READY = 0x2D, 'Ready', UsageTypes.OOC
PAPER_OUT = 0x2E, 'Paper-Out', UsageTypes.OOC
PAPER_JAM = 0x2F, 'Paper-Jam', UsageTypes.OOC
REMOTE = 0x30, 'Remote', UsageTypes.OOC
FORWARD = 0x31, 'Forward', UsageTypes.OOC
REVERSE = 0x32, 'Reverse', UsageTypes.OOC
STOP = 0x33, 'Stop', UsageTypes.OOC
REWIND = 0x34, 'Rewind', UsageTypes.OOC
FAST_FORWARD = 0x35, 'Fast Forward', UsageTypes.OOC
PLAY = 0x36, 'Play', UsageTypes.OOC
PAUSE = 0x37, 'Pause', UsageTypes.OOC
RECORD = 0x38, 'Record', UsageTypes.OOC
ERROR = 0x39, 'Error', UsageTypes.OOC
USAGE_SELECTED_INDICATOR = 0x3A, 'Usage Selected Indicator', UsageTypes.US
USAGE_IN_USE_INDICATOR = 0x3B, 'Usage In Use Indicator', UsageTypes.US
USAGE_MULTI_MODE_INDICATOR = 0x3C, 'Usage Multi Mode Indicator', UsageTypes.UM
INDICATOR_ON = 0x3D, 'Indicator On', UsageTypes.SEL
INDICATOR_FLASH = 0x3E, 'Indicator Flash', UsageTypes.SEL
INDICATOR_SLOW_BLINK = 0x3F, 'Indicator Slow Blink', UsageTypes.SEL
INDICATOR_FAST_BLINK = 0x40, 'Indicator Fast Blink', UsageTypes.SEL
INDICATOR_OFF = 0x41, 'Indicator Off', UsageTypes.SEL
FLASH_ON_TIME = 0x42, 'Flash On Time', UsageTypes.DV
SLOW_BLINK_ON_TIME = 0x43, 'Slow Blink On Time', UsageTypes.DV
SLOW_BLINK_OFF_TIME = 0x44, 'Slow Blink Off Time', UsageTypes.DV
FAST_BLINK_ON_TIME = 0x45, 'Fast Blink On Time', UsageTypes.DV
FAST_BLINK_OFF_TIME = 0x46, 'Fast Blink Off Time', UsageTypes.DV
USAGE_INDICATOR_COLOR = 0x47, 'Usage Indicator Color', UsageTypes.UM
INDICATOR_RED = 0x48, 'Indicator Red', UsageTypes.SEL
INDICATOR_GREEN = 0x49, 'Indicator Green', UsageTypes.SEL
INDICATOR_AMBER = 0x4A, 'Indicator Amber', UsageTypes.SEL
GENERIC_INDICATOR = 0x4B, 'Generic Indicator', UsageTypes.OOC
SYSTEM_SUSPEND = 0x4C, 'System Suspend', UsageTypes.OOC
EXTERNAL_POWER_CONNECTED = 0x4D, 'External Power Connected', UsageTypes.OOC
class Button(UsagePage):
_USAGE_TYPES = (
UsageTypes.SEL,
UsageTypes.OOC,
UsageTypes.MC,
UsageTypes.OSC,
)
# XXX: The type of the 'data' variable includes a generic type bound to the
# class, which currently isn't supported in ClassVar, so we don't
# define 'data' as a ClassVar. Ruff complains about it in RUF012, but
# since we can't define `data` as ClassVar, let's just ignore it.
data = { # noqa: RUF012
'NO_BUTTON': (0x0000, 'Button 1 (primary/trigger)', _USAGE_TYPES),
'BUTTON_1': (0x0001, 'Button 1 (primary/trigger)', _USAGE_TYPES),
'BUTTON_2': (0x0002, 'Button 2 (secondary)', _USAGE_TYPES),
'BUTTON_3': (0x0003, 'Button 3 (tertiary)', _USAGE_TYPES),
}
for _i in range(0x0004, 0xFFFF):
data[f'BUTTON_{_i}'] = _i, f'Button {_i}', _USAGE_TYPES
class Consumer(UsagePage):
CONSUMER_CONTROL = 0x0001, 'Consumer Control', UsageTypes.CA
NUMERIC_KEY_PAD = 0x0002, 'Numeric Key Pad', UsageTypes.NARY
PROGRAMMABLE_BUTTONS = 0x0003, 'Programmable Buttons', UsageTypes.NARY
MICROPHONE = 0x0004, 'Microphone', UsageTypes.CA
HEADPHONE = 0x0005, 'Headphone', UsageTypes.CA
GRAPHIC_EQUALIZER = 0x0006, 'Graphic Equalizer', UsageTypes.CA
PLUS10 = 0x0020, '+10', UsageTypes.OSC
PULS100 = 0x0021, '+100', UsageTypes.OSC
AM_PM = 0x0022, 'AM/PM', UsageTypes.OSC
POWER = 0x0030, 'Power', UsageTypes.OOC
REST = 0x0031, 'Reset', UsageTypes.OSC
SLEEP = 0x0032, 'Sleep', UsageTypes.OSC
SLEEP_AFTER = 0x0033, 'Sleep After', UsageTypes.OSC
SLEEP_MODE = 0x0034, 'Sleep Mode', UsageTypes.RTC
ILLUMINATION = 0x0035, 'Illumination', UsageTypes.OOC
FUNCTION_BUTTONS = 0x0036, 'Function Buttons', UsageTypes.NARY
MENU = 0x0040, 'Menu', UsageTypes.OOC
MENU_PICK = 0x0041, 'Menu Pick', UsageTypes.OSC
MENU_UP = 0x0042, 'Menu Up', UsageTypes.OSC
MENU_DOWN = 0x0043, 'Menu Down', UsageTypes.OSC
MENU_LEFT = 0x0044, 'Menu Left', UsageTypes.OSC
MENU_RIGHT = 0x0045, 'Menu Right', UsageTypes.OSC
MENU_ESCAPE = 0x0046, 'Menu Escape', UsageTypes.OSC
MENU_VALUE_INCREASE = 0x0047, 'Menu Value Increase', UsageTypes.OSC
MENU_VALUE_DECREASE = 0x0048, 'Menu Value Decrease', UsageTypes.OSC
DATA_ON_SCREEN = 0x0060, 'Data On Screen', UsageTypes.OOC
CLOSED_CAPTION = 0x0061, 'Closed Caption', UsageTypes.OOC
CLOSED_CAPTION_SELECT = 0x0062, 'Closed Caption Select', UsageTypes.OOC
VCR_TV = 0x0063, 'VCR/TV', UsageTypes.OSC
BROADCAST_MODE = 0x0064, 'Broadcast Mode', UsageTypes.OOC
SNAPSHOT = 0x0065, 'Snapshot', UsageTypes.OOC
STILL = 0x0066, 'Still', UsageTypes.OOC
SELECTION = 0x0080, 'Selection', UsageTypes.NARY
ASSIGN_SELECTION = 0x0081, 'Assign Selection', UsageTypes.OSC
MODE_STEP = 0x0082, 'Mode Step', UsageTypes.OSC
RECALL_LAST = 0x0083, 'Recall Last', UsageTypes.OSC
ENTER_CHANNEL = 0x0084, 'Enter Channel', UsageTypes.OSC
ORDER_MOVIE = 0x0085, 'Order Movie', UsageTypes.OSC
CHANNEL = 0x0086, 'Channel', UsageTypes.LC
MEDIA_SELECTION = 0x0087, 'Media Selection', UsageTypes.NARY
MEDIA_SELECT_COMPUTER = 0x0088, 'Media Select Computer', UsageTypes.SEL
MEDIA_SELECT_TV = 0x0089, 'Media Select TV', UsageTypes.SEL
MEDIA_SELECT_WWW = 0x008A, 'Media Select WWW', UsageTypes.SEL
MEDIA_SELECT_DVD = 0x008B, 'Media Select DVD', UsageTypes.SEL
MEDIA_SELECT_TELEPHONE = 0x008C, 'Media Select Telephone', UsageTypes.SEL
MEDIA_SELECT_PROGRAM_GUIDE = 0x008D, 'Media Select Program Guide', UsageTypes.SEL
MEDIA_SELECT_VIDEO_PHONE = 0x008E, 'Media Select Video Phone', UsageTypes.SEL
MEDIA_SELECT_GAMES = 0x008F, 'Media Select Games', UsageTypes.SEL
MEDIA_SELECT_MESSAGES = 0x0090, 'Media Select Messages', UsageTypes.SEL
MEDIA_SELECT_CD = 0x0091, 'Media Select CD ', UsageTypes.SEL
MEDIA_SELECT_VCR = 0x0092, 'Media Select VCR', UsageTypes.SEL
MEDIA_SELECT_TUNER = 0x0093, 'Media Select Tuner', UsageTypes.SEL
QUIT = 0x0094, 'Quit', UsageTypes.OSC
HELP = 0x0095, 'Help', UsageTypes.OOC
MEDIA_SELECT_TAPE = 0x0096, 'Media Select Tape', UsageTypes.SEL
MEDIA_SELECT_CABLE = 0x0097, 'Media Select Cable', UsageTypes.SEL
MEDIA_SELECT_SATELLITE = 0x0098, 'Media Select Satellite', UsageTypes.SEL
MEDIA_SELECT_SECURITY = 0x0099, 'Media Select Security', UsageTypes.SEL
MEDIA_SELECT_HOME = 0x009A, 'Media Select Home', UsageTypes.SEL
MEDIA_SELECT_CALL = 0x009B, 'Media Select Call', UsageTypes.SEL
CHANNEL_INCREMENT = 0x009C, 'Channel Increment', UsageTypes.OSC
CHANNEL_DECREMENT = 0x009D, 'Channel Decrement', UsageTypes.OSC
MEDIA_SELECT_SAP = 0x009E, 'Media Select SAP', UsageTypes.SEL
VCR_PLUS = 0x00A0, 'VCR Plus', UsageTypes.OSC
ONCE = 0x00A1, 'Once', UsageTypes.OSC
DAILY = 0x00A2, 'Daily', UsageTypes.OSC
WEEKLY = 0x00A3, 'Weekly', UsageTypes.OSC
MONTHLY = 0x00A4, 'Monthly', UsageTypes.OSC
PLAY = 0x00B0, 'Play', UsageTypes.OOC
PAUSE = 0x00B1, 'Pause', UsageTypes.OOC
RECORD = 0x00B2, 'Record', UsageTypes.OOC
FAST_FORWARD = 0x00B3, 'Fast Forward', UsageTypes.OOC
REWIND = 0x00B4, 'Rewind', UsageTypes.OOC
SCAN_NEXT_TRACK = 0x00B5, 'Scan Next Track', UsageTypes.OSC
SCAN_PREVIOUS_TRACK = 0x00B6, 'Scan Previous Track', UsageTypes.OSC
STOP = 0x00B7, 'Stop', UsageTypes.OSC
EJECT = 0x00B8, 'Eject', UsageTypes.OSC
RANDOM_PLAY = 0x00B9, 'Random Play', UsageTypes.OOC
SELECT_DISC = 0x00BA, 'Select Disc', UsageTypes.NARY
ENTER_DISC = 0x00BB, 'Enter Disc', UsageTypes.MC
REPEAT = 0x00BC, 'Repeat', UsageTypes.OSC
TRACKING = 0x00BD, 'Tracking', UsageTypes.LC
TRACK_NORMAL = 0x00BE, 'Track Normal', UsageTypes.OSC
SLOW_TRACKING = 0x00BF, 'Slow Tracking', UsageTypes.LC
FRAME_FORWARD = 0x00C0, 'Frame Forward', UsageTypes.RTC
FRAME_BACK = 0x00C1, 'Frame Back', UsageTypes.RTC
MARK = 0x00C2, 'Mark', UsageTypes.OSC
CLEAR_MARK = 0x00C3, 'Clear Mark', UsageTypes.OSC
REPEAT_FROM_MARK = 0x00C4, 'Repeat From Mark', UsageTypes.OOC
RETURN_TO_MARK = 0x00C5, 'Return To Mark', UsageTypes.OSC
SEARCH_MARK_FORWARD = 0x00C6, 'Search Mark Forward', UsageTypes.OSC
SEARCH_MARK_BACKWARDS = 0x00C7, 'Search Mark Backwards', UsageTypes.OSC
COUNTER_RESET = 0x00C8, 'Counter Reset', UsageTypes.OSC
SHOW_COUNTER = 0x00C9, 'Show Counter', UsageTypes.OSC
TRACKING_INCREMENT = 0x00CA, 'Tracking Increment', UsageTypes.RTC
TRACKING_DECREMENT = 0x00CB, 'Tracking Decrement', UsageTypes.RTC
STOP_EJECT = 0x00CC, 'Stop/Eject', UsageTypes.OSC
PLAY_PAUSE = 0x00CD, 'Play/Pause', UsageTypes.OSC
PLAY_SKIP = 0x00CE, 'Play/Skip', UsageTypes.OSC
VOLUME = 0x00E0, 'Volume', UsageTypes.LC
BALANCE = 0x00E1, 'Balance', UsageTypes.LC
MUTE = 0x00E2, 'Mute', UsageTypes.OOC
BASS = 0x00E3, 'Bass', UsageTypes.LC
TREBLE = 0x00E4, 'Treble', UsageTypes.LC
BASS_BOOST = 0x00E5, 'Bass Boost', UsageTypes.OOC
SURROUND_MODE = 0x00E6, 'Surround Mode', UsageTypes.OSC
LOUDNESS = 0x00E7, 'Loudness', UsageTypes.OOC
MPX = 0x00E8, 'MPX', UsageTypes.OOC
VOLUME_INCREMENT = 0x00E9, 'Volume Increment', UsageTypes.RTC
VOLUME_DECREMENT = 0x00EA, 'Volume Decrement', UsageTypes.RTC
SPEED_SELECT = 0x00F0, 'Speed Select', UsageTypes.OSC
PLAYBACK_SPEED = 0x00F1, 'Playback Speed', UsageTypes.NARY
STANDARD_PLAY = 0x00F2, 'Standard Play', UsageTypes.SEL
LONG_PLAY = 0x00F3, 'Long Play', UsageTypes.SEL
EXTENDED_PLAY = 0x00F4, 'Extended Play', UsageTypes.SEL
SLOW = 0x00F5, 'Slow', UsageTypes.OSC
FAN_ENABLE = 0x0100, 'Fan Enable', UsageTypes.OOC
FAN_SPEED = 0x0101, 'Fan Speed', UsageTypes.LC
LIGHT_ENABLE = 0x0102, 'Light Enable', UsageTypes.OOC
LIGHT_ILLUMINATION_LEVEL = 0x0103, 'Light Illumination Level', UsageTypes.LC
CLIMATE_CONTROL_ENABLE = 0x0104, 'Climate Control Enable', UsageTypes.OOC
ROOM_TEMPERATURE = 0x0105, 'Room Temperature', UsageTypes.LC
SECURITY_ENABLE = 0x0106, 'Security Enable', UsageTypes.OOC
FIRE_ALARM = 0x0107, 'Fire Alarm', UsageTypes.OSC
POLICE_ALARM = 0x0108, 'Police Alarm', UsageTypes.OSC
PROXIMITY = 0x0109, 'Proximity', UsageTypes.LC
MOTION = 0x010A, 'Motion', UsageTypes.OSC
DURESS_ALARM = 0x010B, 'Duress Alarm', UsageTypes.OSC
HOLDUP_ALARM = 0x010C, 'Holdup Alarm', UsageTypes.OSC
MEDICAL_ALARM = 0x010D, 'Medical Alarm', UsageTypes.OSC
BALANCE_RIGHT = 0x0150, 'Balance Right', UsageTypes.RTC
BALANCE_LEFT = 0x0151, 'Balance Left', UsageTypes.RTC
BASS_INCREMENT = 0x0152, 'Bass Increment', UsageTypes.RTC
BASS_DECREMENT = 0x0153, 'Bass Decrement', UsageTypes.RTC
TREBLE_INCREMENT = 0x0154, 'Treble Increment', UsageTypes.RTC
TREBLE_DECREMENT = 0x0155, 'Treble Decrement', UsageTypes.RTC
SPEAKER_SYSTEM = 0x0160, 'Speaker System', UsageTypes.CL
CHANNEL_LEFT = 0x0161, 'Channel Left', UsageTypes.CL
CHANNEL_RIGHT = 0x0162, 'Channel Right', UsageTypes.CL
CHANNEL_CENTER = 0x0163, 'Channel Center', UsageTypes.CL
CHANNEL_FRONT = 0x0164, 'Channel Front', UsageTypes.CL
CHANNEL_CENTER_FRONT = 0x0165, 'Channel Center Front', UsageTypes.CL
CHANNEL_SIDE = 0x0166, 'Channel Side', UsageTypes.CL
CHANNEL_SURROUND = 0x0167, 'Channel Surround', UsageTypes.CL
CHANNEL_LOW_FREQUENCY_ENHANCEMENT = 0x0168, 'Channel Low Frequency Enhancement', UsageTypes.CL
CHANNEL_TOP = 0x0169, 'Channel Top', UsageTypes.CL
CHANNEL_UNKNOWN = 0x016A, 'Channel Unknown', UsageTypes.CL
SUBCHANNEL = 0x0170, 'Sub-channel', UsageTypes.LC
SUBCHANNEL_INCREMENT = 0x0171, 'Sub-channel Increment', UsageTypes.OSC
SUBCHANNEL_DECREMENT = 0x0172, 'Sub-channel Decrement', UsageTypes.OSC
ALTERNATE_AUDIO_INCREMENT = 0x0173, 'Alternate Audio Increment', UsageTypes.OSC
ALTERNATE_AUDIO_DECREMENT = 0x0174, 'Alternate Audio Decrement', UsageTypes.OSC
APPLICATION_LAUNCH_BUTTONS = 0x0180, 'Application Launch Buttons', UsageTypes.NARY
AL_LAUCH_BUTTON_CONFIGURATION_TOOL = 0x0181, 'AL Launch Button Configuration Tool', UsageTypes.SEL
AL_PROGRAMMABLE_BUTTON_CONFIGURATION = 0x0182, 'AL Programmable Button Configuration', UsageTypes.SEL
AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, 'AL Consumer Control Configuration', UsageTypes.SEL
AL_WORD_PROCESSOR = 0x0184, 'AL Word Processor', UsageTypes.SEL
AL_TEXT_EDITOR = 0x0185, 'AL Text Editor', UsageTypes.SEL
AL_SPREADSHEET = 0x0186, 'AL Spreadsheet', UsageTypes.SEL
AL_GRAPHICS_EDITOR = 0x0187, 'AL Graphics Editor', UsageTypes.SEL
AL_PRESENTATION_APP = 0x0188, 'AL Presentation App', UsageTypes.SEL
AL_DATABASE_APP = 0x0189, 'AL Database App', UsageTypes.SEL
AL_EMAIL_READER = 0x018A, 'AL Email Reader', UsageTypes.SEL
AL_NEWSREADER = 0x018B, 'AL Newsreader', UsageTypes.SEL
AL_VOICEMAIL = 0x018C, 'AL Voicemail', UsageTypes.SEL
AL_CONTACTS_ADDRESS_BOOK = 0x018D, 'AL Contacts/Address Book', UsageTypes.SEL
AL_CALENDAR_SCHEDULE = 0x018E, 'AL Calendar/Schedule', UsageTypes.SEL
AL_TASK_PROJECT_MANAGER = 0x018F, 'AL Task/Project Manager', UsageTypes.SEL
AL_LOG_JOURNAL_TIMECARD = 0x0190, 'AL Log/Journal/Timecard', UsageTypes.SEL
AL_CHECKBOOK_FINANCE = 0x0191, 'AL Checkbook/Finance', UsageTypes.SEL
AL_CALCULATOR = 0x0192, 'AL Calculator', UsageTypes.SEL
AL_AV_CAPTURE_PLAYBACK = 0x0193, 'AL A/V Capture/Playback', UsageTypes.SEL
AL_LOCAL_MACHINE_BROWSER = 0x0194, 'AL Local Machine Browser', UsageTypes.SEL
AL_LAN_WAN_BROWSER = 0x0195, 'AL LAN/WAN Browser', UsageTypes.SEL
AL_INTERNET_BROWSER = 0x0196, 'AL Internet Browser', UsageTypes.SEL
AL_REMOTE_NETWORKING_ISP_CONNECT = 0x0197, 'AL Remote Networking/ISP Connect', UsageTypes.SEL
AL_NETWORK_CONFERENCE = 0x0198, 'AL Network Conference', UsageTypes.SEL
AL_NETWORK_CHAT = 0x0199, 'AL Network Chat', UsageTypes.SEL
AL_TELEPHONY_DIALER = 0x019A, 'AL Telephony/Dialer', UsageTypes.SEL
AL_LOGON = 0x019B, 'AL Logon', UsageTypes.SEL
AL_LOGOFF = 0x019C, 'AL Logoff', UsageTypes.SEL
AL_LOGON_LOGOFF = 0x019D, 'AL Logon/Logoff', UsageTypes.SEL
AL_LOCK_SCREEN_SAVER = 0x019E, 'AL Terminal Lock/Screensaver', UsageTypes.SEL
AL_CONTROL_PANEL = 0x019F, 'AL Control Panel', UsageTypes.SEL
AL_COMMAND_LINE_PROCESSOR_RUN = 0x01A0, 'AL Command Line Processor/Run', UsageTypes.SEL
AL_PROCESS_TASK_MANAGER = 0x01A1, 'AL Process/Task Manager', UsageTypes.SEL
AL_SELECT_TASK_APPLICATION = 0x01A2, 'AL Select Task/Application', UsageTypes.SEL
AL_NEXT_TASK_APPLICATION = 0x01A3, 'AL Next Task/Application', UsageTypes.SEL
AL_PREVIOUS_TASK_APPLICATION = 0x01A4, 'AL Previous Task/Application', UsageTypes.SEL
AL_HALT_TASK_APPLICATION = 0x01A5, 'AL Preemptive Halt Task/Application', UsageTypes.SEL
AL_INTEGRATED_HELP_CENTER = 0x01A6, 'AL Integrated Help Center', UsageTypes.SEL
AL_DOCUMENTS = 0x01A7, 'AL Documents', UsageTypes.SEL
AL_THESAURUS = 0x01A8, 'AL Thesaurus', UsageTypes.SEL
AL_DICTIONARY = 0x01A9, 'AL Dictionary', UsageTypes.SEL
AL_DESKTOP = 0x01AA, 'AL Desktop', UsageTypes.SEL
AL_SPELL_CHECK = 0x01AB, 'AL Spell Check', UsageTypes.SEL
AL_GRAMMAR_CHECK = 0x01AC, 'AL Grammar Check', UsageTypes.SEL
AL_WIRELESS_STATUS = 0x01AD, 'AL Wireless Status', UsageTypes.SEL
AL_KEYBOARD_LAYOUT = 0x01AE, 'AL Keyboard Layout', UsageTypes.SEL
AL_VIRUS_PROTECTION = 0x01AF, 'AL Virus Protection', UsageTypes.SEL
AL_ENCRYPTION = 0x01B0, 'AL Encryption', UsageTypes.SEL
AL_SCREEN_SAVER = 0x01B1, 'AL Screen Saver', UsageTypes.SEL
AL_ALARMS = 0x01B2, 'AL Alarms', UsageTypes.SEL
AL_CLOCK = 0x01B3, 'AL Clock', UsageTypes.SEL
AL_FILE_BROWSER = 0x01B4, 'AL File Browser', UsageTypes.SEL
AL_POWER_STATUS = 0x01B5, 'AL Power Status', UsageTypes.SEL
AL_IMAGE_BROWSER = 0x01B6, 'AL Image Browser', UsageTypes.SEL
AL_AUDIO_BROWSER = 0x01B7, 'AL Audio Browser', UsageTypes.SEL
AL_VIDEO_BROWSER = 0x01B8, 'AL Movie Browser', UsageTypes.SEL
AL_DIGITAL_RIGHTS_MANAGER = 0x01B9, 'AL Digital Rights Manager', UsageTypes.SEL
AL_DIGITAL_WALLET = 0x01BA, 'AL Digital Wallet', UsageTypes.SEL
AL_INSTANT_MESSAGING = 0x01BC, 'AL Instant Messaging', UsageTypes.SEL
AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER = 0x01BD, 'AL OEM Features/ Tips/Tutorial Browser', UsageTypes.SEL
AL_OEM_HELP = 0x01BE, 'AL OEM Help', UsageTypes.SEL
AL_ONLINE_COMMUNITY = 0x01BF, 'AL Online Community', UsageTypes.SEL
AL_ENTERTAINMENT_CONTENT_BROWSER = 0x01C0, 'AL Entertainment Content Browser', UsageTypes.SEL
AL_ONLINE_SHOPPING_BROWSER = 0x01C1, 'AL Online Shopping Browser', UsageTypes.SEL
AL_SMARTCARD_INFORMATION_HELP = 0x01C2, 'AL SmartCard Information/Help', UsageTypes.SEL
AL_MARKET_MONITOR_FINANCE_BROWSER = 0x01C3, 'AL Market Monitor/Finance Browser', UsageTypes.SEL
AL_CUSTOMIZED_CORPORATE_NEWS_BROWSER = 0x01C4, 'AL Customized Corporate News Browser', UsageTypes.SEL
AL_ONLINE_ACTIVITY_BROWSER = 0x01C5, 'AL Online Activity Browser', UsageTypes.SEL
AL_RESEARCH_SEARCH_BROWSER = 0x01C6, 'AL Research/Search Browser', UsageTypes.SEL
AL_AUDIO_PLAYER = 0x01C7, 'AL Audio Player', UsageTypes.SEL
GENERIC_GUI_APPLICATION_CONTROLS = 0x0200, 'Generic GUI Application Controls', UsageTypes.NARY
AC_NEW = 0x0201, 'AC New', UsageTypes.SEL
AC_OPEN = 0x0202, 'AC Open', UsageTypes.SEL
AC_CLOSE = 0x0203, 'AC Close', UsageTypes.SEL
AC_EXIT = 0x0204, 'AC Exit', UsageTypes.SEL
AC_MAXIMIZE = 0x0205, 'AC Maximize', UsageTypes.SEL
AC_MINIMIZE = 0x0206, 'AC Minimize', UsageTypes.SEL
AC_SAVE = 0x0207, 'AC Save', UsageTypes.SEL
AC_PRINT = 0x0208, 'AC Print', UsageTypes.SEL
AC_PROPERTIES = 0x0209, 'AC Properties', UsageTypes.SEL
AC_UNDO = 0x021A, 'AC Undo', UsageTypes.SEL
AC_COPY = 0x021B, 'AC Copy', UsageTypes.SEL
AC_CUT = 0x021C, 'AC Cut', UsageTypes.SEL
AC_PASTE = 0x021D, 'AC Paste', UsageTypes.SEL
AC_SELECT_ALL = 0x021E, 'AC Select All', UsageTypes.SEL
AC_FIND = 0x021F, 'AC Find', UsageTypes.SEL
AC_FIND_AND_REPLACE = 0x0220, 'AC Find and Replace', UsageTypes.SEL
AC_SEARCH = 0x0221, 'AC Search', UsageTypes.SEL
AC_GO_TO = 0x0222, 'AC Go To', UsageTypes.SEL
AC_HOME = 0x0223, 'AC Home', UsageTypes.SEL
AC_BACK = 0x0224, 'AC Back', UsageTypes.SEL
AC_FORWARD = 0x0225, 'AC Forward', UsageTypes.SEL
AC_STOP = 0x0226, 'AC Stop', UsageTypes.SEL
AC_REFRESH = 0x0227, 'AC Refresh', UsageTypes.SEL
AC_PREVIOUS_LINK = 0x0228, 'AC Previous Link', UsageTypes.SEL
AC_NEXT_LINK = 0x0229, 'AC Next Link', UsageTypes.SEL
AC_BOOKMARKS = 0x022A, 'AC Bookmarks', UsageTypes.SEL
AC_HISTORY = 0x022B, 'AC History', UsageTypes.SEL
AC_SUBSCRIPTIONS = 0x022C, 'AC Subscriptions', UsageTypes.SEL
AC_ZOOM_IN = 0x022D, 'AC Zoom In', UsageTypes.SEL
AC_ZOOM_OUT = 0x022E, 'AC Zoom Out', UsageTypes.SEL
AC_ZOOM = 0x022F, 'AC Zoom', UsageTypes.LC
AC_FULL_SCREEN_VIEW = 0x0230, 'AC Full Screen View', UsageTypes.SEL
AC_NORMAL_VIEW = 0x0231, 'AC Normal View', UsageTypes.SEL
AC_VIEW_TOGGLE = 0x0232, 'AC View Toggle', UsageTypes.SEL
AC_SCROLL_UP = 0x0233, 'AC Scroll Up', UsageTypes.SEL
AC_SCROLL_DOWN = 0x0234, 'AC Scroll Down', UsageTypes.SEL
AC_SCROLL = 0x0235, 'AC Scroll', UsageTypes.LC
AC_PAN_LEFT = 0x0236, 'AC Pan Left', UsageTypes.SEL
AC_PAN_RIGHT = 0x0237, 'AC Pan Right', UsageTypes.SEL
AC_PAN = 0x0238, 'AC Pan', UsageTypes.LC
AC_NEW_WINDOWS = 0x0239, 'AC New Window', UsageTypes.SEL
AC_TILE_HORIZONTALLY = 0x023A, 'AC Tile Horizontally', UsageTypes.SEL
AC_TILE_VERTICALLY = 0x023B, 'AC Tile Vertically', UsageTypes.SEL
AC_FORMAT = 0x023C, 'AC Format', UsageTypes.SEL
AC_EDIT = 0x023D, 'AC Edit', UsageTypes.SEL
AC_BOLD = 0x023E, 'AC Bold', UsageTypes.SEL
AC_ITALICS = 0x023F, 'AC Italics', UsageTypes.SEL
AC_UNDERLINE = 0x0240, 'AC Underline', UsageTypes.SEL
AC_STRIKETHROUGH = 0x0241, 'AC Strikethrough', UsageTypes.SEL
AC_SUBSCRIPT = 0x0242, 'AC Subscript', UsageTypes.SEL
AC_SUPERSCRIPT = 0x0243, 'AC Superscript', UsageTypes.SEL
AC_ALL_CAPS = 0x0244, 'AC All Caps', UsageTypes.SEL
AC_ROTATE = 0x0245, 'AC Rotate', UsageTypes.SEL
AC_RESIZE = 0x0246, 'AC Resize', UsageTypes.SEL
AC_FLIP_HORIZONTAL = 0x0247, 'AC Flip horizontal', UsageTypes.SEL
AC_FLIP_VERTICAL = 0x0248, 'AC Flip Vertical', UsageTypes.SEL
AC_MIRROR_HORIZONTAL = 0x0249, 'AC Mirror Horizontal', UsageTypes.SEL
AC_MIRROR_VERTICAL = 0x024A, 'AC Mirror Vertical', UsageTypes.SEL
AC_FONT_SELECT = 0x024B, 'AC Font Select', UsageTypes.SEL
AC_FONT_COLOR = 0x024C, 'AC Font Color', UsageTypes.SEL
AC_FONT_SIZE = 0x024D, 'AC Font Size', UsageTypes.SEL
AC_JUSTIFY_LEFT = 0x024E, 'AC Justify Left', UsageTypes.SEL
AC_JUSTIFY_CENTER_H = 0x024F, 'AC Justify Center H', UsageTypes.SEL
AC_JUSTIFY_RIGHT = 0x0250, 'AC Justify Right', UsageTypes.SEL
AC_JUSTIFY_BLOCK_H = 0x0251, 'AC Justify Block H', UsageTypes.SEL
AC_JUSTIFY_TOP = 0x0252, 'AC Justify Top', UsageTypes.SEL
AC_JUSTIFY_CENTER_V = 0x0253, 'AC Justify Center V', UsageTypes.SEL
AC_JUSTIFY_BOTTOM = 0x0254, 'AC Justify Bottom', UsageTypes.SEL
AC_JUSTIFY_BLOCK_V = 0x0255, 'AC Justify Block V', UsageTypes.SEL
AC_INDENT_INCREASE = 0x0256, 'AC Indent Decrease', UsageTypes.SEL
AC_INDENT_DECREASE = 0x0257, 'AC Indent Increase', UsageTypes.SEL
AC_NUMBERED_LIST = 0x0258, 'AC Numbered List', UsageTypes.SEL
AC_RESTART_NUMBERING = 0x0259, 'AC Restart Numbering', UsageTypes.SEL
AC_BULLETED_LIST = 0x025A, 'AC Bulleted List', UsageTypes.SEL
AC_PROMOTE = 0x025B, 'AC Promote', UsageTypes.SEL
AC_DEMOTE = 0x025C, 'AC Demote', UsageTypes.SEL
AC_YES = 0x025D, 'AC Yes', UsageTypes.SEL
AC_NO = 0x025E, 'AC No', UsageTypes.SEL
AC_CANCEL = 0x025F, 'AC Cancel', UsageTypes.SEL
AC_CATALOG = 0x0260, 'AC Catalog', UsageTypes.SEL
AC_BUY_CHECKOUT = 0x0261, 'AC Buy/Checkout', UsageTypes.SEL
AC_ADD_TO_CART = 0x0262, 'AC Add to Cart', UsageTypes.SEL
AC_EXPAND = 0x0263, 'AC Expand', UsageTypes.SEL
AC_EXPAND_ALL = 0x0264, 'AC Expand All', UsageTypes.SEL
AC_COLLAPSE = 0x0265, 'AC Collapse', UsageTypes.SEL
AC_COLLAPSE_ALL = 0x0266, 'AC Collapse All', UsageTypes.SEL
AC_PRINT_PREVIEW = 0x0267, 'AC Print Preview', UsageTypes.SEL
AC_PASTE_SPECIAL = 0x0268, 'AC Paste Special', UsageTypes.SEL
AC_INSER_MODE = 0x0269, 'AC Insert Mode', UsageTypes.SEL
AC_DELETE = 0x026A, 'AC Delete', UsageTypes.SEL
AC_LOCK = 0x026B, 'AC Lock', UsageTypes.SEL
AC_UNLOCK = 0x026C, 'AC Unlock', UsageTypes.SEL
AC_PROTECT = 0x026D, 'AC Protect', UsageTypes.SEL
AC_UNPROTECT = 0x026E, 'AC Unprotect', UsageTypes.SEL
AC_ATTACH_COMMENT = 0x026F, 'AC Attach Comment', UsageTypes.SEL
AC_DELETE_COMMENT = 0x0270, 'AC Delete Comment', UsageTypes.SEL
AC_VIEW_COMMENT = 0x0271, 'AC View Comment', UsageTypes.SEL
AC_SELECT_WORD = 0x0272, 'AC Select Word', UsageTypes.SEL
AC_SELECT_SENTENCE = 0x0273, 'AC Select Sentence', UsageTypes.SEL
AC_SELECT_PARAGRAPH = 0x0274, 'AC Select Paragraph', UsageTypes.SEL
AC_SELECT_COLUMN = 0x0275, 'AC Select Column', UsageTypes.SEL
AC_SELECT_ROW = 0x0276, 'AC Select Row', UsageTypes.SEL
AC_SELECT_TABLE = 0x0277, 'AC Select Table', UsageTypes.SEL
AC_SELECT_OBJECT = 0x0278, 'AC Select Object', UsageTypes.SEL
AC_REDO_REPEAT = 0x0279, 'AC Redo/Repeat', UsageTypes.SEL
AC_SORT = 0x027A, 'AC Sort', UsageTypes.SEL
AC_SORT_ASCENDING = 0x027B, 'AC Sort Ascending', UsageTypes.SEL
AC_SORT_DESCENDING = 0x027C, 'AC Sort Descending', UsageTypes.SEL
AC_FILTER = 0x027D, 'AC Filter', UsageTypes.SEL
AC_SET_CLOCK = 0x027E, 'AC Set Clock', UsageTypes.SEL
AC_VIEW_CLOCK = 0x027F, 'AC View Clock', UsageTypes.SEL
AC_SELECT_TIME_ZONE = 0x0280, 'AC Select Time Zone', UsageTypes.SEL
AC_EDIT_TIME_ZONES = 0x0281, 'AC Edit Time Zones', UsageTypes.SEL
AC_SET_ALARM = 0x0282, 'AC Set Alarm', UsageTypes.SEL
AC_CLEAR_ALARM = 0x0283, 'AC Clear Alarm', UsageTypes.SEL
AC_SNOOZE_ALARM = 0x0284, 'AC Snooze Alarm', UsageTypes.SEL
AC_RESET_ALARM = 0x0285, 'AC Reset Alarm', UsageTypes.SEL
AC_SYNCHRONIZE = 0x0286, 'AC Synchronize', UsageTypes.SEL
AC_SEND_RECEIVE = 0x0287, 'AC Send/Receive', UsageTypes.SEL
AC_SEND_TO = 0x0288, 'AC Send To', UsageTypes.SEL
AC_REPLY = 0x0289, 'AC Reply', UsageTypes.SEL
AC_REPLY_ALL = 0x028A, 'AC Reply All', UsageTypes.SEL
AC_FORWARD_MSG = 0x028B, 'AC Forward Msg', UsageTypes.SEL
AC_SEND = 0x028C, 'AC Send', UsageTypes.SEL
AC_ATTACH_FILE = 0x028D, 'AC Attach File', UsageTypes.SEL
AC_UPLOAD = 0x028E, 'AC Upload', UsageTypes.SEL
AC_DOWNLOAD = 0x028F, 'AC Download (Save Target As)', UsageTypes.SEL
AC_SET_BORDERS = 0x0290, 'AC Set Borders', UsageTypes.SEL
AC_INSERT_ROW = 0x0291, 'AC Insert Row', UsageTypes.SEL
AC_INSERT_COLUMN = 0x0292, 'AC Insert Column', UsageTypes.SEL
AC_INSERT_FILE = 0x0293, 'AC Insert File', UsageTypes.SEL
AC_INSERT_PICTURE = 0x0294, 'AC Insert Picture', UsageTypes.SEL
AC_INSERT_OBJECT = 0x0295, 'AC Insert Object', UsageTypes.SEL
AC_INSERT_SYMBOL = 0x0296, 'AC Insert Symbol', UsageTypes.SEL
AC_SAVE_AND_CLOSE = 0x0297, 'AC Save and Close', UsageTypes.SEL
AC_RENAME = 0x0298, 'AC Rename', UsageTypes.SEL
AC_MERGE = 0x0299, 'AC Merge', UsageTypes.SEL
AC_SPLIT = 0x029A, 'AC Split', UsageTypes.SEL
AC_DISTRIBUTE_HORIZONTICALLY = 0x029B, 'AC Disribute Horizontally', UsageTypes.SEL
AC_DISTRIBUTE_VERTICALLY = 0x029C, 'AC Distribute Vertically', UsageTypes.SEL
class PowerDevice(UsagePage):
INAME = 0x01, 'iName', UsageTypes.SV
PRESENT_STATUS = 0x02, 'PresentStatus', UsageTypes.CL
CHARGED_STATUS = 0x03, 'ChangedStatus', UsageTypes.CL
UPS = 0x04, 'UPS', UsageTypes.CA
POWER_SUPPLY = 0x05, 'PowerSupply', UsageTypes.CA
BATTERY_SYSTEM = 0x10, 'BatterySystem', UsageTypes.CP
BATTERY_SYSTEM_ID = 0x11, 'BatterySystemID', UsageTypes.SV
BATTERY = 0x12, 'Battery', UsageTypes.CP