Add HID keycodes in a semi-structured manner
This commit is contained in:
parent
2476a65b30
commit
27f1e971b0
@ -7,3 +7,163 @@ class DiodeOrientation:
|
|||||||
|
|
||||||
COLUMNS = 0
|
COLUMNS = 0
|
||||||
ROWS = 1
|
ROWS = 1
|
||||||
|
|
||||||
|
|
||||||
|
class KeycodeCategory(type):
|
||||||
|
def __contains__(cls, kc):
|
||||||
|
'''
|
||||||
|
Enables the 'in' operator for keycode groupings. Not super useful in
|
||||||
|
most cases, but does allow for sanity checks like
|
||||||
|
|
||||||
|
```python
|
||||||
|
assert requested_key in Keycodes.Modifiers
|
||||||
|
```
|
||||||
|
|
||||||
|
This is not bulletproof due to how HID codes are defined (there is
|
||||||
|
overlap). Keycodes.Common.KC_A, for example, is equal in value to
|
||||||
|
Keycodes.Modifiers.KC_LALT, but it can still prevent silly mistakes
|
||||||
|
like trying to use, say, Keycodes.Common.KC_Q as a modifier.
|
||||||
|
|
||||||
|
This is recursive across subgroups, enabling stuff like:
|
||||||
|
|
||||||
|
```python
|
||||||
|
assert requested_key in Keycodes
|
||||||
|
```
|
||||||
|
|
||||||
|
To ensure that a valid keycode has been requested to begin with. Again,
|
||||||
|
not bulletproof, but adds at least some cushion to stuff that would
|
||||||
|
otherwise cause AttributeErrors and crash the keyboard.
|
||||||
|
'''
|
||||||
|
subcategories = (
|
||||||
|
category for category in cls.__dict__.values()
|
||||||
|
if isinstance(category, KeycodeCategory)
|
||||||
|
)
|
||||||
|
|
||||||
|
if any(
|
||||||
|
kc == _kc
|
||||||
|
for name, _kc in cls.__dict__.items()
|
||||||
|
if name.startswith('KC_')
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return any(kc in sc for sc in subcategories)
|
||||||
|
|
||||||
|
|
||||||
|
class Keycodes(metaclass=KeycodeCategory):
|
||||||
|
'''
|
||||||
|
A massive grouping of keycodes
|
||||||
|
'''
|
||||||
|
class Modifiers(metaclass=KeycodeCategory):
|
||||||
|
KC_CTRL = KC_LEFT_CTRL = 0x01
|
||||||
|
KC_SHIFT = KC_LEFT_SHIFT = 0x02
|
||||||
|
KC_ALT = KC_LALT = 0x04
|
||||||
|
KC_GUI = KC_LGUI = 0x08
|
||||||
|
KC_RCTRL = 0x10
|
||||||
|
KC_RSHIFT = 0x20
|
||||||
|
KC_RALT = 0x40
|
||||||
|
KC_RGUI = 0x80
|
||||||
|
|
||||||
|
class Common(metaclass=KeycodeCategory):
|
||||||
|
KC_A = 4
|
||||||
|
KC_B = 5
|
||||||
|
KC_C = 6
|
||||||
|
KC_D = 7
|
||||||
|
KC_E = 8
|
||||||
|
KC_F = 9
|
||||||
|
KC_G = 10
|
||||||
|
KC_H = 11
|
||||||
|
KC_I = 12
|
||||||
|
KC_J = 13
|
||||||
|
KC_K = 14
|
||||||
|
KC_L = 15
|
||||||
|
KC_M = 16
|
||||||
|
KC_N = 17
|
||||||
|
KC_O = 18
|
||||||
|
KC_P = 19
|
||||||
|
KC_Q = 20
|
||||||
|
KC_R = 21
|
||||||
|
KC_S = 22
|
||||||
|
KC_T = 23
|
||||||
|
KC_U = 24
|
||||||
|
KC_V = 25
|
||||||
|
KC_W = 26
|
||||||
|
KC_X = 27
|
||||||
|
KC_Y = 28
|
||||||
|
KC_Z = 29
|
||||||
|
KC_1 = 30
|
||||||
|
KC_2 = 31
|
||||||
|
KC_3 = 32
|
||||||
|
KC_4 = 33
|
||||||
|
KC_5 = 34
|
||||||
|
KC_6 = 35
|
||||||
|
KC_7 = 36
|
||||||
|
KC_8 = 37
|
||||||
|
KC_9 = 38
|
||||||
|
KC_0 = 39
|
||||||
|
|
||||||
|
KC_ENTER = 40
|
||||||
|
KC_ESC = 41
|
||||||
|
KC_BACKSPACE = 42
|
||||||
|
KC_TAB = 43
|
||||||
|
KC_SPACE = 44
|
||||||
|
KC_MINUS = 45
|
||||||
|
KC_EQUAL = 46
|
||||||
|
KC_LBRC = 47
|
||||||
|
KC_RBRC = 48
|
||||||
|
KC_BACKSLASH = 49
|
||||||
|
KC_NUMBER = 50
|
||||||
|
KC_SEMICOLON = 51
|
||||||
|
KC_QUOTE = 52
|
||||||
|
KC_TILDE = 53
|
||||||
|
KC_COMMA = 54
|
||||||
|
KC_PERIOD = 55
|
||||||
|
KC_SLASH = 56
|
||||||
|
KC_CAPS_LOCK = 57
|
||||||
|
|
||||||
|
class FunctionKeys(metaclass=KeycodeCategory):
|
||||||
|
KC_F1 = 58
|
||||||
|
KC_F2 = 59
|
||||||
|
KC_F3 = 60
|
||||||
|
KC_F4 = 61
|
||||||
|
KC_F5 = 62
|
||||||
|
KC_F6 = 63
|
||||||
|
KC_F7 = 64
|
||||||
|
KC_F8 = 65
|
||||||
|
KC_F9 = 66
|
||||||
|
KC_F10 = 67
|
||||||
|
KC_F11 = 68
|
||||||
|
KC_F12 = 69
|
||||||
|
|
||||||
|
class NavAndLocks(metaclass=KeycodeCategory):
|
||||||
|
KC_PRINTSCREEN = 70
|
||||||
|
KC_SCROLL_LOCK = 71
|
||||||
|
KC_PAUSE = 72
|
||||||
|
KC_INSERT = 73
|
||||||
|
KC_HOME = 74
|
||||||
|
KC_PGUP = 75
|
||||||
|
KC_DELETE = 76
|
||||||
|
KC_END = 77
|
||||||
|
KC_PGDN = 78
|
||||||
|
KC_RIGHT = 79
|
||||||
|
KC_LEFT = 80
|
||||||
|
KC_DOWN = 81
|
||||||
|
KC_UP = 82
|
||||||
|
|
||||||
|
class Numpad(metaclass=KeycodeCategory):
|
||||||
|
KC_NUMLOCK = 83
|
||||||
|
KC_KP_SLASH = 84
|
||||||
|
KC_KP_ASTERIX = 85
|
||||||
|
KC_KP_MINUS = 86
|
||||||
|
KC_KP_PLUS = 87
|
||||||
|
KC_KP_ENTER = 88
|
||||||
|
KC_KP_1 = 89
|
||||||
|
KC_KP_2 = 90
|
||||||
|
KC_KP_3 = 91
|
||||||
|
KC_KP_4 = 92
|
||||||
|
KC_KP_5 = 93
|
||||||
|
KC_KP_6 = 94
|
||||||
|
KC_KP_7 = 95
|
||||||
|
KC_KP_8 = 96
|
||||||
|
KC_KP_9 = 97
|
||||||
|
KC_KP_0 = 98
|
||||||
|
KC_KP_PERIOD = 99
|
||||||
|
Loading…
x
Reference in New Issue
Block a user