if
__name__
=
=
'__main__'
:
device
=
AlienwareUSBDriver()
device.acquire()
keymap
=
{
'esc'
:
1
,
'f1'
:
2
,
'f2'
:
3
,
'f3'
:
4
,
'f4'
:
5
,
'f5'
:
6
,
'f6'
:
7
,
'f7'
:
8
,
'f8'
:
9
,
'f9'
:
0xa
,
'f10'
:
0xb
,
'f11'
:
0xc
,
'f12'
:
0xd
,
'home'
:
0xe
,
'end'
:
0xf
,
'del'
:
0x10
,
'`'
:
0x15
,
'1'
:
0x16
,
'2'
:
0x17
,
'3'
:
0x18
,
'4'
:
0x19
,
'5'
:
0x1a
,
'6'
:
0x1b
,
'7'
:
0x1c
,
'8'
:
0x1d
,
'9'
:
0x1e
,
'0'
:
0x1f
,
'-'
:
0x20
,
'='
:
0x21
,
'back'
:
0x24
,
'microphone'
:
0x14
,
'tab'
:
0x29
,
'q'
:
0x2b
,
'w'
:
0x2c
,
'e'
:
0x2d
,
'r'
:
0x2e
,
't'
:
0x2f
,
'y'
:
0x30
,
'u'
:
0x31
,
'i'
:
0x32
,
'o'
:
0x33
,
'p'
:
0x34
,
'['
:
0x35
,
']'
:
0x36
,
'\\': 0x38, '
voice0
': 0x11, '
caps
': 0x3e, '
a
': 0x3f, '
s
': 0x40, '
d
': 0x41, '
f
': 0x42, '
g
': 0x43, '
h
': 0x44, '
j
': 0x45, '
k':
0x46
,
'l'
:
0x47
,
';'
:
0x48
,
'\''
:
0x49
,
'enter'
:
0x4b
,
'voice+'
:
0x13
,
'lshift'
:
0x52
,
'z'
:
0x54
,
'x'
:
0x55
,
'c'
:
0x56
,
'v'
:
0x57
,
'b'
:
0x58
,
'n'
:
0x59
,
'm'
:
0x5a
,
','
:
0x5b
,
'.'
:
0x5c
,
'/'
:
0x5d
,
'rshift'
:
0x5f
,
'up'
:
0x73
,
'voice-'
:
0x12
,
'lctrl'
:
0x65
,
'fn'
:
0x66
,
'lwin'
:
0x68
,
'lalt'
:
0x69
,
'space'
:
0x6a
,
'ralt'
:
0x70
,
'rwin'
:
0x6e
,
'rctrl'
:
0x71
,
'left'
:
0x86
,
'down'
:
0x87
,
'right'
:
0x88
}
def
get_key_bytes(a, b, a_color, b_color):
header
=
bytes.fromhex(
'cc8c0200'
)
a_bytes
=
(a <<
24
| a_color).to_bytes(
4
, byteorder
=
'big'
)
b_bytes
=
(b <<
24
| b_color).to_bytes(
4
, byteorder
=
'big'
)
data
=
header
+
a_bytes
+
b_bytes
out
=
data
+
bytes(
64
-
len
(data))
return
out
chars
=
list
(keymap.keys())
a
=
0
a_color
=
0
b
=
0
b_color
=
0
for
i, k
in
enumerate
(chars):
key
=
keymap[k]
a
=
key
a_color
=
0xff0000
b
=
0
b_color
=
0
if
i >
0
:
b
=
keymap[chars[i
-
1
]]
b_color
=
0x00ff00
device.write_packet(get_key_bytes(a, b, a_color, b_color))
time.sleep(
0.3
)
a_color
=
0x00ff00
b_color
=
0x00ff00
device.write_packet(get_key_bytes(a, b, a_color, b_color))