15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)"""HID constant definitions.
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)"""
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import usb_constants
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class DescriptorType(object):
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Class descriptors.
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 7.1.
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  HID = usb_constants.Type.CLASS | 0x01
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  REPORT = usb_constants.Type.CLASS | 0x02
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PHYSICAL = usb_constants.Type.CLASS | 0x03
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class Scope(object):
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Item scope.
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 6.2.2.2.
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  MAIN = 0
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GLOBAL = 1
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  LOCAL = 2
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class CollectionType(object):
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Collection types.
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 6.2.2.4.
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PHYSICAL = 0
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  APPLICATION = 1
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  LOGICAL = 2
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  REPORT = 3
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  NAMED_ARRAY = 4
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  USAGE_SWITCH = 5
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  USAGE_MODIFIER = 6
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class Request(object):
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Class specific requests.
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 7.2.
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GET_REPORT = 1
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GET_IDLE = 2
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GET_PROTOCOL = 3
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SET_REPORT = 9
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SET_IDLE = 0x0A
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SET_PROTOCOL = 0x0B
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ReportType(object):
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Report types.
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 7.2.1.
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  INPUT = 1
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  OUTPUT = 2
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FEATURE = 3
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ModifierKey(object):
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Keyboard modifier key report values.
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section 8.3 and HID Usage Tables Version 1.1 Table 12.
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  L_CTRL = 0x01
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  L_SHIFT = 0x02
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  L_ALT = 0x04
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  L_GUI = 0x08
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  R_CTRL = 0x10
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  R_SHIFT = 0x20
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  R_ALT = 0x40
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  R_GUI = 0x80
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class LED(object):
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Keyboard LED report values.
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section B.1 and HID Usage Tables Version 1.1 Table 13.
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  NUM_LOCK = 0x01
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CAPS_LOCK = 0x02
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SCROLL_LOCK = 0x04
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  COMPOSE = 0x08
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KANA = 0x10
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class Mouse(object):
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Mouse button report values.
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  See Device Class Definition for Human Interface Devices (HID) Version 1.11
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  section B.2.
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  BUTTON_1 = 0x01
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  BUTTON_2 = 0x02
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  BUTTON_3 = 0x04
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)KEY_CODES = {}
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(xrange(ord('a'), ord('z') + 1), xrange(4, 30)):
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[chr(key)] = code
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(xrange(ord('1'), ord('9') + 1), xrange(30, 39)):
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[chr(key)] = code
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(['Enter', 'Esc', 'Backspace', 'Tab', ' '], xrange(40, 45)):
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[key] = code
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip('-=[]\\', xrange(45, 50)):
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[key] = code
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(';\'`,./', xrange(51, 57)):
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[key] = code
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ['CapsLock', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10',
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     'F11', 'F12', 'PrintScreen', 'ScrollLock', 'Pause', 'Insert', 'Home',
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     'PageUp', 'PageDown', 'Delete', 'End', 'PageDown', 'RightArrow',
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     'LeftArrow', 'DownArrow', 'UpArrow', 'NumLock'],
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    xrange(57, 84)):
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  KEY_CODES[key] = code
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SHIFT_KEY_CODES = {}
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(xrange(ord('A'), ord('Z') + 1), xrange(4, 30)):
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SHIFT_KEY_CODES[chr(key)] = code
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip('!@#$%^&*()', xrange(30, 40)):
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SHIFT_KEY_CODES[key] = code
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip('_+{}|', xrange(45, 50)):
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SHIFT_KEY_CODES[key] = code
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)for key, code in zip(':"~<>?', xrange(51, 57)):
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SHIFT_KEY_CODES[key] = code
141