diff options
Diffstat (limited to 'keyboards/ps2avrGB/program')
-rwxr-xr-x | keyboards/ps2avrGB/program | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/keyboards/ps2avrGB/program b/keyboards/ps2avrGB/program new file mode 100755 index 000000000..a88d9cd9b --- /dev/null +++ b/keyboards/ps2avrGB/program | |||
@@ -0,0 +1,74 @@ | |||
1 | #!/usr/bin/env python | ||
2 | # Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com> | ||
3 | # | ||
4 | # This program is free software: you can redistribute it and/or modify | ||
5 | # it under the terms of the GNU General Public License as published by | ||
6 | # the Free Software Foundation, either version 2 of the License, or | ||
7 | # (at your option) any later version. | ||
8 | # | ||
9 | # This program is distributed in the hope that it will be useful, | ||
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | # GNU General Public License for more details. | ||
13 | # | ||
14 | # You should have received a copy of the GNU General Public License | ||
15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | |||
17 | from __future__ import print_function | ||
18 | |||
19 | import os | ||
20 | import sys | ||
21 | import time | ||
22 | import usb | ||
23 | |||
24 | if len(sys.argv) < 2: | ||
25 | print('Usage: %s <firmware.hex>' % sys.argv[0]) | ||
26 | sys.exit(1) | ||
27 | |||
28 | print('Searching for ps2avrGB... ', end='') | ||
29 | |||
30 | dev = usb.core.find(idVendor=0x20A0, idProduct=0x422D) | ||
31 | if dev is None: | ||
32 | raise ValueError('Device not found') | ||
33 | |||
34 | print('Found', end='\n\n') | ||
35 | |||
36 | print('Device Information:') | ||
37 | print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor)) | ||
38 | print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct)) | ||
39 | print('Manufacturer: %s' % (dev.iManufacturer)) | ||
40 | print('Serial: %s' % (dev.iSerialNumber)) | ||
41 | print('Product: %s' % (dev.iProduct), end='\n\n') | ||
42 | |||
43 | print('Transferring control to bootloader... ', end='') | ||
44 | |||
45 | dev.set_configuration() | ||
46 | |||
47 | request_type = usb.util.build_request_type( | ||
48 | usb.util.CTRL_OUT, | ||
49 | usb.util.CTRL_TYPE_CLASS, | ||
50 | usb.util.CTRL_RECIPIENT_DEVICE) | ||
51 | |||
52 | USBRQ_HID_SET_REPORT = 0x09 | ||
53 | HID_REPORT_OPTION = 0x0301 | ||
54 | |||
55 | |||
56 | try: | ||
57 | dev.ctrl_transfer( | ||
58 | request_type, | ||
59 | USBRQ_HID_SET_REPORT, | ||
60 | HID_REPORT_OPTION, | ||
61 | 0, | ||
62 | [0, 0, 0xFF] + [0] * 5 | ||
63 | ) | ||
64 | except usb.core.USBError: | ||
65 | # for some reason I keep getting USBError, but it works! | ||
66 | pass | ||
67 | |||
68 | # wait a bit until bootloader starts up | ||
69 | time.sleep(2) | ||
70 | |||
71 | print('OK') | ||
72 | print('Programming...') | ||
73 | if os.system('bootloadHID -r "%s"' % sys.argv[1]) == 0: | ||
74 | print('\nDone!') | ||