Home | History | Annotate | Download | only in usb_gadget
      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 
      8 import usb_constants
      9 
     10 
     11 class 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 
     22 class 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 
     33 class 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 
     48 class 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 
     62 class 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 
     73 class 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 
     89 class 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 
    102 class 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 
    113 KEY_CODES = {}
    114 for key, code in zip(xrange(ord('a'), ord('z') + 1), xrange(4, 30)):
    115   KEY_CODES[chr(key)] = code
    116 for key, code in zip(xrange(ord('1'), ord('9') + 1), xrange(30, 39)):
    117   KEY_CODES[chr(key)] = code
    118 for key, code in zip(['Enter', 'Esc', 'Backspace', 'Tab', ' '], xrange(40, 45)):
    119   KEY_CODES[key] = code
    120 for key, code in zip('-=[]\\', xrange(45, 50)):
    121   KEY_CODES[key] = code
    122 for key, code in zip(';\'`,./', xrange(51, 57)):
    123   KEY_CODES[key] = code
    124 for 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 
    132 SHIFT_KEY_CODES = {}
    133 for key, code in zip(xrange(ord('A'), ord('Z') + 1), xrange(4, 30)):
    134   SHIFT_KEY_CODES[chr(key)] = code
    135 for key, code in zip('!@#$%^&*()', xrange(30, 40)):
    136   SHIFT_KEY_CODES[key] = code
    137 for key, code in zip('_+{}|', xrange(45, 50)):
    138   SHIFT_KEY_CODES[key] = code
    139 for key, code in zip(':"~<>?', xrange(51, 57)):
    140   SHIFT_KEY_CODES[key] = code
    141