1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""HID constant definitions.
6"""
7
8import usb_constants
9
10
11class DescriptorType(object):
12  """Class descriptors.
13
14  See Device Class Definition for Human Interface Devices (HID) Version 1.11
15  section 7.1.
16  """
17  HID = usb_constants.Type.CLASS | 0x01
18  REPORT = usb_constants.Type.CLASS | 0x02
19  PHYSICAL = usb_constants.Type.CLASS | 0x03
20
21
22class Scope(object):
23  """Item scope.
24
25  See Device Class Definition for Human Interface Devices (HID) Version 1.11
26  section 6.2.2.2.
27  """
28  MAIN = 0
29  GLOBAL = 1
30  LOCAL = 2
31
32
33class CollectionType(object):
34  """Collection types.
35
36  See Device Class Definition for Human Interface Devices (HID) Version 1.11
37  section 6.2.2.4.
38  """
39  PHYSICAL = 0
40  APPLICATION = 1
41  LOGICAL = 2
42  REPORT = 3
43  NAMED_ARRAY = 4
44  USAGE_SWITCH = 5
45  USAGE_MODIFIER = 6
46
47
48class Request(object):
49  """Class specific requests.
50
51  See Device Class Definition for Human Interface Devices (HID) Version 1.11
52  section 7.2.
53  """
54  GET_REPORT = 1
55  GET_IDLE = 2
56  GET_PROTOCOL = 3
57  SET_REPORT = 9
58  SET_IDLE = 0x0A
59  SET_PROTOCOL = 0x0B
60
61
62class ReportType(object):
63  """Report types.
64
65  See Device Class Definition for Human Interface Devices (HID) Version 1.11
66  section 7.2.1.
67  """
68  INPUT = 1
69  OUTPUT = 2
70  FEATURE = 3
71
72
73class ModifierKey(object):
74  """Keyboard modifier key report values.
75
76  See Device Class Definition for Human Interface Devices (HID) Version 1.11
77  section 8.3 and HID Usage Tables Version 1.1 Table 12.
78  """
79  L_CTRL = 0x01
80  L_SHIFT = 0x02
81  L_ALT = 0x04
82  L_GUI = 0x08
83  R_CTRL = 0x10
84  R_SHIFT = 0x20
85  R_ALT = 0x40
86  R_GUI = 0x80
87
88
89class LED(object):
90  """Keyboard LED report values.
91
92  See Device Class Definition for Human Interface Devices (HID) Version 1.11
93  section B.1 and HID Usage Tables Version 1.1 Table 13.
94  """
95  NUM_LOCK = 0x01
96  CAPS_LOCK = 0x02
97  SCROLL_LOCK = 0x04
98  COMPOSE = 0x08
99  KANA = 0x10
100
101
102class Mouse(object):
103  """Mouse button report values.
104
105  See Device Class Definition for Human Interface Devices (HID) Version 1.11
106  section B.2.
107  """
108  BUTTON_1 = 0x01
109  BUTTON_2 = 0x02
110  BUTTON_3 = 0x04
111
112
113KEY_CODES = {}
114for key, code in zip(xrange(ord('a'), ord('z') + 1), xrange(4, 30)):
115  KEY_CODES[chr(key)] = code
116for key, code in zip(xrange(ord('1'), ord('9') + 1), xrange(30, 39)):
117  KEY_CODES[chr(key)] = code
118for key, code in zip(['Enter', 'Esc', 'Backspace', 'Tab', ' '], xrange(40, 45)):
119  KEY_CODES[key] = code
120for key, code in zip('-=[]\\', xrange(45, 50)):
121  KEY_CODES[key] = code
122for key, code in zip(';\'`,./', xrange(51, 57)):
123  KEY_CODES[key] = code
124for key, code in zip(
125    ['CapsLock', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10',
126     'F11', 'F12', 'PrintScreen', 'ScrollLock', 'Pause', 'Insert', 'Home',
127     'PageUp', 'PageDown', 'Delete', 'End', 'PageDown', 'RightArrow',
128     'LeftArrow', 'DownArrow', 'UpArrow', 'NumLock'],
129    xrange(57, 84)):
130  KEY_CODES[key] = code
131
132SHIFT_KEY_CODES = {}
133for key, code in zip(xrange(ord('A'), ord('Z') + 1), xrange(4, 30)):
134  SHIFT_KEY_CODES[chr(key)] = code
135for key, code in zip('!@#$%^&*()', xrange(30, 40)):
136  SHIFT_KEY_CODES[key] = code
137for key, code in zip('_+{}|', xrange(45, 50)):
138  SHIFT_KEY_CODES[key] = code
139for key, code in zip(':"~<>?', xrange(51, 57)):
140  SHIFT_KEY_CODES[key] = code
141