summaryrefslogtreecommitdiff
path: root/keyboards/jj40/program
diff options
context:
space:
mode:
authorVadim Brodsky <VadimBrodsky@users.noreply.github.com>2017-10-13 16:20:56 -0400
committerJack Humbert <jack.humb@gmail.com>2017-10-13 10:20:56 -1000
commite094cd42b578bc1f378c4fd5b1c6efe112ec7073 (patch)
treec32d1ae556597f2211a7868e4fbfcd2ca1d8bc6f /keyboards/jj40/program
parent598cb8265538b5950868790b7f1b33603c2e2d3b (diff)
downloadqmk_firmware-e094cd42b578bc1f378c4fd5b1c6efe112ec7073.tar.gz
qmk_firmware-e094cd42b578bc1f378c4fd5b1c6efe112ec7073.zip
Add support for the JJ40 Keyboard (#1834)
* Add support for JJ40 * Update readme * Update maintaner
Diffstat (limited to 'keyboards/jj40/program')
-rwxr-xr-xkeyboards/jj40/program74
1 files changed, 74 insertions, 0 deletions
diff --git a/keyboards/jj40/program b/keyboards/jj40/program
new file mode 100755
index 0000000000..81552c2723
--- /dev/null
+++ b/keyboards/jj40/program
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function
+
+import os
+import sys
+import time
+import usb
+
+if len(sys.argv) < 2:
+ print('Usage: %s <firmware.hex>' % sys.argv[0])
+ sys.exit(1)
+
+print('Searching for jj40... ', end='')
+
+dev = usb.core.find(idVendor=0x20A0, idProduct=0x422D)
+if dev is None:
+ raise ValueError('Device not found')
+
+print('Found', end='\n\n')
+
+print('Device Information:')
+print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
+print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
+print('Manufacturer: %s' % (dev.iManufacturer))
+print('Serial: %s' % (dev.iSerialNumber))
+print('Product: %s' % (dev.iProduct), end='\n\n')
+
+print('Transferring control to bootloader... ', end='')
+
+dev.set_configuration()
+
+request_type = usb.util.build_request_type(
+ usb.util.CTRL_OUT,
+ usb.util.CTRL_TYPE_CLASS,
+ usb.util.CTRL_RECIPIENT_DEVICE)
+
+USBRQ_HID_SET_REPORT = 0x09
+HID_REPORT_OPTION = 0x0301
+
+
+try:
+ dev.ctrl_transfer(
+ request_type,
+ USBRQ_HID_SET_REPORT,
+ HID_REPORT_OPTION,
+ 0,
+ [0, 0, 0xFF] + [0] * 5
+ )
+except usb.core.USBError:
+ # for some reason I keep getting USBError, but it works!
+ pass
+
+# wait a bit until bootloader starts up
+time.sleep(2)
+
+print('OK')
+print('Programming...')
+if os.system('bootloadHID -r "%s"' % sys.argv[1]) == 0:
+ print('\nDone!')