aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/converter
diff options
context:
space:
mode:
authorGravatar Alex Ong <the.onga@gmail.com>2019-01-04 19:43:45 +1100
committerGravatar Alex Ong <the.onga@gmail.com>2019-01-04 19:43:45 +1100
commit2bb2977c133646c4e056960e72029270d77cc1eb (patch)
tree235d491f992121ac1716c5bf2fafb80983748576 /keyboards/converter
parenta55c838961c89097ab849ed6cb1f261791e6b9b4 (diff)
parent47c91fc7f75ae0a477e55b687aa0fc30da0a283c (diff)
downloadqmk_firmware-2bb2977c133646c4e056960e72029270d77cc1eb.tar.gz
Merge branch 'master' into debounce_refactor
# Conflicts: # tmk_core/common/keyboard.c
Diffstat (limited to 'keyboards/converter')
-rw-r--r--keyboards/converter/adb_usb/README.md83
-rw-r--r--keyboards/converter/adb_usb/adb_usb.c3
-rw-r--r--keyboards/converter/adb_usb/adb_usb.h109
-rw-r--r--keyboards/converter/adb_usb/config.h43
-rw-r--r--keyboards/converter/adb_usb/info.json204
-rw-r--r--keyboards/converter/adb_usb/keymaps/13bit/keymap.c26
-rw-r--r--keyboards/converter/adb_usb/keymaps/default/keymap.c13
-rw-r--r--keyboards/converter/adb_usb/led.c27
-rw-r--r--keyboards/converter/adb_usb/led.h43
-rw-r--r--keyboards/converter/adb_usb/matrix.c267
-rw-r--r--keyboards/converter/adb_usb/rules.mk73
-rw-r--r--keyboards/converter/hp_46010a/config.h35
-rw-r--r--keyboards/converter/hp_46010a/hp_46010a.c3
-rw-r--r--keyboards/converter/hp_46010a/hp_46010a.h60
-rw-r--r--keyboards/converter/hp_46010a/info.json121
-rw-r--r--keyboards/converter/hp_46010a/keymaps/default/keymap.c45
-rw-r--r--keyboards/converter/hp_46010a/matrix.c244
-rw-r--r--keyboards/converter/hp_46010a/readme.md52
-rw-r--r--keyboards/converter/hp_46010a/rules.mk72
-rw-r--r--keyboards/converter/ibm_5291/config.h42
-rw-r--r--keyboards/converter/ibm_5291/ibm_5291.c3
-rw-r--r--keyboards/converter/ibm_5291/ibm_5291.h69
-rw-r--r--keyboards/converter/ibm_5291/info.json97
-rw-r--r--keyboards/converter/ibm_5291/keymaps/default/keymap.c233
-rw-r--r--keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdfbin0 -> 13054 bytes
-rw-r--r--keyboards/converter/ibm_5291/matrix.c284
-rw-r--r--keyboards/converter/ibm_5291/matrix.csv96
-rw-r--r--keyboards/converter/ibm_5291/readme.md72
-rw-r--r--keyboards/converter/ibm_5291/rules.mk72
-rw-r--r--keyboards/converter/ibm_terminal/README.md40
-rw-r--r--keyboards/converter/ibm_terminal/ibm_terminal.h10
-rw-r--r--keyboards/converter/ibm_terminal/info.json245
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/config.h7
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/keymap.c12
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/rules.mk2
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/config.h7
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c28
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk2
-rw-r--r--keyboards/converter/ibm_terminal/readme.md39
-rw-r--r--keyboards/converter/ibm_terminal/rules.mk2
-rw-r--r--keyboards/converter/m0110_usb/README.md18
-rw-r--r--keyboards/converter/m0110_usb/info.json172
-rw-r--r--keyboards/converter/palm_usb/config.h120
-rw-r--r--keyboards/converter/palm_usb/matrix.c398
-rw-r--r--keyboards/converter/palm_usb/readme.md96
-rw-r--r--keyboards/converter/palm_usb/rules.mk46
-rw-r--r--keyboards/converter/palm_usb/stowaway/info.json83
-rw-r--r--keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c59
-rw-r--r--keyboards/converter/palm_usb/stowaway/rules.mk0
-rw-r--r--keyboards/converter/palm_usb/stowaway/stowaway.h53
-rw-r--r--keyboards/converter/sun_usb/command_extra.c64
-rw-r--r--keyboards/converter/sun_usb/config.h88
-rw-r--r--keyboards/converter/sun_usb/led.c32
-rw-r--r--keyboards/converter/sun_usb/matrix.c197
-rw-r--r--keyboards/converter/sun_usb/readme.md89
-rw-r--r--keyboards/converter/sun_usb/rules.mk44
-rw-r--r--keyboards/converter/sun_usb/type3/info.json109
-rw-r--r--keyboards/converter/sun_usb/type3/keymaps/default/keymap.c29
-rw-r--r--keyboards/converter/sun_usb/type3/rules.mk0
-rw-r--r--keyboards/converter/sun_usb/type3/type3.h66
-rw-r--r--keyboards/converter/sun_usb/type5/info.json381
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/default/keymap.c30
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c31
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md12
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk1
-rw-r--r--keyboards/converter/sun_usb/type5/rules.mk0
-rw-r--r--keyboards/converter/sun_usb/type5/type5.h148
-rw-r--r--keyboards/converter/usb_usb/ble/config.h10
-rw-r--r--keyboards/converter/usb_usb/ble/rules.mk20
-rw-r--r--keyboards/converter/usb_usb/info.json485
-rw-r--r--keyboards/converter/usb_usb/keymap.c288
-rw-r--r--keyboards/converter/usb_usb/keymaps/ble/keymap.c18
-rw-r--r--keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c44
-rw-r--r--keyboards/converter/usb_usb/keymaps/default/keymap.c22
-rw-r--r--keyboards/converter/usb_usb/usb_usb.h56
-rw-r--r--keyboards/converter/xt_usb/README.md17
-rw-r--r--keyboards/converter/xt_usb/config.h78
-rw-r--r--keyboards/converter/xt_usb/info.json229
-rw-r--r--keyboards/converter/xt_usb/keymaps/default/config.h1
-rw-r--r--keyboards/converter/xt_usb/keymaps/default/keymap.c55
-rw-r--r--keyboards/converter/xt_usb/led.c22
-rw-r--r--keyboards/converter/xt_usb/matrix.c309
-rw-r--r--keyboards/converter/xt_usb/rules.mk62
-rw-r--r--keyboards/converter/xt_usb/xt_usb.c1
-rw-r--r--keyboards/converter/xt_usb/xt_usb.h132
85 files changed, 6625 insertions, 475 deletions
diff --git a/keyboards/converter/adb_usb/README.md b/keyboards/converter/adb_usb/README.md
new file mode 100644
index 000000000..ed7175008
--- /dev/null
+++ b/keyboards/converter/adb_usb/README.md
@@ -0,0 +1,83 @@
+ADB-to USB Keyboard Converter
+=============================
+This firmware converts Apple Desktop Bus (ADB) keyboard protocol to USB so that you can use an ADB keyboard on a modern computer. It works on the PJRC Teensy 2.0 and other USB AVR MCUs (ATMega32U4, AT90USB64/128, etc) and needs at least 10KB of flash memory.
+
+
+This is a port of the TMK ADB-to-USB converter to QMK. For information on QMK, please consult the following:
+https://github.com/qmk/qmk_firmware
+https://docs.qmk.fm
+
+
+Wiring
+------
+Connect the VCC, GND, and DATA lines of the ADB keyboard to the controller (Teensy 2.0 or similar). By default the DATA line uses port PD0. The Power SW line is unused by the converter.
+
+ADB female socket from the front:
+
+ ,--_--.
+ / o4 3o \ 1: DATA
+ | o2 1o | 2: Power SW
+ - === - 3: VCC
+ `-___-' 4: GND
+
+This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable. Using an external pull-up resistor (1K-10K Ohm) between the DATA and VCC lines is strongly recommended.
+
+Pull-up resistor:
+
+ Keyboard Converter
+ ,------.
+ 5V------+------|VCC |
+ | | |
+ [R] | |
+ | | |
+ Signal--+------|PD0 |
+ | |
+ GND------------|GND |
+ `------'
+ R: 1K Ohm resistor
+
+
+Define following macros for ADB connection in config.h if you use other than port PD0.
+
+ ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
+
+
+Building the Firmware
+------------------------------------------
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+
+Keymap
+------
+To build the default keymap run this command:
+
+ $ make converter/adb_usb:default
+
+You may add your own keymap to the converter/adb_usb/keymaps directory, as you would with any other QMK-powered keyboard.
+
+To build your custom keymap, change the build command to:
+
+ $ make converter/adb_usb:my_keymap
+
+Where 'my_keymap' is the name of your custom keymap directory.
+
+
+Locking Caps Lock
+----------------
+Many old ADB keyboards use a locking switch for the caps lock key. This converter supports the locking caps lock key by default.
+
+
+Notes
+-----
+Non-extended ADB keyboards make no distinction between the left and right modifiers,
+i.e. the keycode for the left modifier will be sent even if the right modifier
+
+The Apple Extended Keyboard and Apple Extended Keyboard II can differentiate between the left and right modifiers except for the GUI key (Windows/Command).
+
+Most ADB keyboards have no diodes in its matrix so they are not NKRO,
+though the ADB protocol itself supports it. See protocol/adb.c for more info.
+
+
+QMK Port Changelog
+---------
+- 2018/09/16 - Initial release.
diff --git a/keyboards/converter/adb_usb/adb_usb.c b/keyboards/converter/adb_usb/adb_usb.c
new file mode 100644
index 000000000..7026d6275
--- /dev/null
+++ b/keyboards/converter/adb_usb/adb_usb.c
@@ -0,0 +1,3 @@
+#include "adb_usb.h"
+#include <avr/io.h>
+#include "quantum.h"
diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h
new file mode 100644
index 000000000..8691adcc6
--- /dev/null
+++ b/keyboards/converter/adb_usb/adb_usb.h
@@ -0,0 +1,109 @@
+/*
+Copyright 2011,2012,2013 Jun Wako <wakojun@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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#ifndef ADB_USB_H
+#define ADB_USB_H
+
+#include "quantum.h"
+
+/* M0115/M3501 Apple Extended Keyboard ANSI
+ * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
+ * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
+ * `---' `---------------' `---------------' `---------------' `-----------' `---'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
+ * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
+ * |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ */
+#define LAYOUT_ext_ansi( \
+ K35, K7A,K78,K63,K76,K60,K61,K62,K64,K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
+ K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
+ K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
+ K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
+ { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \
+ { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \
+ { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \
+ { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K78, K79, K7A, K7B, K7C, K7D, KC_NO, K7F } \
+}
+
+/* M0116 Apple Standard Keyboard ANSI
+ * +-------+
+ * | power |
+ * +-------+
+ * +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+
+ * |esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | bks | |clr| = | / | * |
+ * +---------------------------------------------------------+ +---+---+---+---+
+ * | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | + |
+ * +-----------------------------------------------------+ | +---+---+---+---+
+ * | ctrl | a | s | d | f | g | h | j | k | l | ; | ' |return| | 4 | 5 | 6 | - |
+ * +---------------------------------------------------------+ +---+---+---+---+
+ * | shift | z | x | c | v | b | n | m | , | . | / | shift | | 1 | 2 | 3 | |
+ * +---------------------------------------------------------+ +-------+---|ent|
+ * |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
+ * +---------------------------------------------------------+ +-------+---+---+
+ */
+#define LAYOUT_m0116_ansi( \
+ K7F, \
+ K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \
+ K36,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K4E, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K53,K54,K55, \
+ K39,K3A,K37,K32, K31, K2A,K3B,K3C,K3D,K3E, K52, K41,K4C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
+ { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO }, \
+ { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, K7B, KC_NO, KC_NO, KC_NO, K7F } \
+}
+
+#endif
diff --git a/keyboards/converter/adb_usb/config.h b/keyboards/converter/adb_usb/config.h
new file mode 100644
index 000000000..a5845a029
--- /dev/null
+++ b/keyboards/converter/adb_usb/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2011 Jun Wako <wakojun@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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#pragma once
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0ADB
+#define DEVICE_VER 0x0101
+#define MANUFACTURER QMK
+#define PRODUCT ADB keyboard converter
+#define DESCRIPTION Convert ADB keyboard to USB
+
+/* matrix size */
+#define MATRIX_ROWS 16 // keycode bit: 3-0
+#define MATRIX_COLS 8 // keycode bit: 6-4
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* ADB port setting */
+#define ADB_PORT PORTD
+#define ADB_PIN PIND
+#define ADB_DDR DDRD
+#define ADB_DATA_BIT 0
+//#define ADB_PSW_BIT 1 // optional
diff --git a/keyboards/converter/adb_usb/info.json b/keyboards/converter/adb_usb/info.json
new file mode 100644
index 000000000..e06f9c1ad
--- /dev/null
+++ b/keyboards/converter/adb_usb/info.json
@@ -0,0 +1,204 @@
+{
+ "keyboard_name": "ADB to USB Keyboard Converter",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 7,
+ "layouts": {
+ "LAYOUT_ext_ansi": {
+ "layout": [
+ {"label":"Escape", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"Eject", "x":21.5, "y":0},
+ {"label":"`", "x":0, "y":2},
+ {"label":"1", "x":1, "y":2},
+ {"label":"2", "x":2, "y":2},
+ {"label":"3", "x":3, "y":2},
+ {"label":"4", "x":4, "y":2},
+ {"label":"5", "x":5, "y":2},
+ {"label":"6", "x":6, "y":2},
+ {"label":"7", "x":7, "y":2},
+ {"label":"8", "x":8, "y":2},
+ {"label":"9", "x":9, "y":2},
+ {"label":"0", "x":10, "y":2},
+ {"label":"-", "x":11, "y":2},
+ {"label":"=", "x":12, "y":2},
+ {"label":"Backspace", "x":13, "y":2, "w":2},
+ {"label":"Insert", "x":15.25, "y":2},
+ {"label":"Home", "x":16.25, "y":2},
+ {"label":"Page Up", "x":17.25, "y":2},
+ {"label":"Num Lock", "x":18.5, "y":2},
+ {"label":"Num =", "x":19.5, "y":2},
+ {"label":"Num /", "x":20.5, "y":2},
+ {"label":"Num *", "x":21.5, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3},
+ {"label":"W", "x":2.5, "y":3},
+ {"label":"E", "x":3.5, "y":3},
+ {"label":"R", "x":4.5, "y":3},
+ {"label":"T", "x":5.5, "y":3},
+ {"label":"Y", "x":6.5, "y":3},
+ {"label":"U", "x":7.5, "y":3},
+ {"label":"I", "x":8.5, "y":3},
+ {"label":"O", "x":9.5, "y":3},
+ {"label":"P", "x":10.5, "y":3},
+ {"label":"[", "x":11.5, "y":3},
+ {"label":"]", "x":12.5, "y":3},
+ {"label":"\\", "x":13.5, "y":3, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3},
+ {"label":"End", "x":16.25, "y":3},
+ {"label":"Page Down", "x":17.25, "y":3},
+ {"label":"Num 7", "x":18.5, "y":3},
+ {"label":"Num 8", "x":19.5, "y":3},
+ {"label":"Num 9", "x":20.5, "y":3},
+ {"label":"Num -", "x":21.5, "y":3},
+ {"label":"Lcap", "x":0, "y":4, "w":1.75},
+ {"label":"A", "x":1.75, "y":4},
+ {"label":"S", "x":2.75, "y":4},
+ {"label":"D", "x":3.75, "y":4},
+ {"label":"F", "x":4.75, "y":4},
+ {"label":"G", "x":5.75, "y":4},
+ {"label":"H", "x":6.75, "y":4},
+ {"label":"J", "x":7.75, "y":4},
+ {"label":"K", "x":8.75, "y":4},
+ {"label":"L", "x":9.75, "y":4},
+ {"label":";", "x":10.75, "y":4},
+ {"label":"\"", "x":11.75, "y":4},
+ {"label":"Enter", "x":12.75, "y":4, "w":2.25},
+ {"label":"Num 4", "x":18.5, "y":4},
+ {"label":"Num 5", "x":19.5, "y":4},
+ {"label":"Num 6", "x":20.5, "y":4},
+ {"label":"Num +", "x":21.5, "y":4},
+ {"label":"Shift", "x":0, "y":5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":5},
+ {"label":"X", "x":3.25, "y":5},
+ {"label":"C", "x":4.25, "y":5},
+ {"label":"V", "x":5.25, "y":5},
+ {"label":"B", "x":6.25, "y":5},
+ {"label":"N", "x":7.25, "y":5},
+ {"label":"M", "x":8.25, "y":5},
+ {"label":",", "x":9.25, "y":5},
+ {"label":".", "x":10.25, "y":5},
+ {"label":"/", "x":11.25, "y":5},
+ {"label":"Shift", "x":12.25, "y":5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":5},
+ {"label":"Num 1", "x":18.5, "y":5},
+ {"label":"Num 2", "x":19.5, "y":5},
+ {"label":"Num 3", "x":20.5, "y":5},
+ {"label":"Ctrl", "x":0, "y":6, "w":1.5},
+ {"label":"Alt", "x":1.5, "y":6, "w":1.25},
+ {"label":"Command", "x":2.75, "y":6, "w":1.5},
+ {"label":"Space", "x":4.25, "y":6, "w":6.5},
+ {"label":"Alt", "x":12.25, "y":6, "w":1.25},
+ {"label":"Ctrl", "x":13.5, "y":6, "w":1.5},
+ {"label":"Left", "x":15.25, "y":6},
+ {"label":"Down", "x":16.25, "y":6},
+ {"label":"Right", "x":17.25, "y":6},
+ {"label":"Num 0", "x":18.5, "y":6, "w":2},
+ {"label":"Num .", "x":20.5, "y":6},
+ {"label":"Num Enter", "x":21.5, "y":5, "h":2}
+ ]
+ },
+ "LAYOUT_m0116_ansi": {
+ "width": 19.5,
+ "height": 6.25,
+ "layout": [
+ {"label":"Power", "x":5, "y":0, "w":2},
+ {"label":"Esc", "x":0, "y":1.25},
+ {"label":"1", "x":1, "y":1.25},
+ {"label":"2", "x":2, "y":1.25},
+ {"label":"3", "x":3, "y":1.25},
+ {"label":"4", "x":4, "y":1.25},
+ {"label":"5", "x":5, "y":1.25},
+ {"label":"6", "x":6, "y":1.25},
+ {"label":"7", "x":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"-", "x":11, "y":1.25},
+ {"label":"=", "x":12, "y":1.25},
+ {"label":"Delete", "x":13, "y":1.25, "w":1.5},
+ {"label":"Clear", "x":15.5, "y":1.25},
+ {"label":"Num =", "x":16.5, "y":1.25},
+ {"label":"Num /", "x":17.5, "y":1.25},
+ {"label":"Num *", "x":18.5, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"[", "x":11.5, "y":2.25},
+ {"label":"]", "x":12.5, "y":2.25},
+ {"label":"Num 7", "x":15.5, "y":2.25},
+ {"label":"Num 8", "x":16.5, "y":2.25},
+ {"label":"Num 9", "x":17.5, "y":2.25},
+ {"label":"Num +", "x":18.5, "y":2.25},
+ {"label":"Ctrl", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":";", "x":10.75, "y":3.25},
+ {"label":"'", "x":11.75, "y":3.25},
+ {"label":"Return", "x":12.75, "y":3.25, "w":1.75},
+ {"label":"Num 4", "x":15.5, "y":3.25},
+ {"label":"Num 5", "x":16.5, "y":3.25},
+ {"label":"Num 6", "x":17.5, "y":3.25},
+ {"label":"Num -", "x":18.5, "y":3.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":",", "x":9.25, "y":4.25},
+ {"label":".", "x":10.25, "y":4.25},
+ {"label":"/", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":2.25},
+ {"label":"Num 1", "x":15.5, "y":4.25},
+ {"label":"Num 2", "x":16.5, "y":4.25},
+ {"label":"Num 3", "x":17.5, "y":4.25},
+ {"label":"Caps Lock", "x":0, "y":5.25},
+ {"label":"Option", "x":1, "y":5.25},
+ {"label":"Command", "x":2, "y":5.25, "w":1.75},
+ {"label":"`", "x":3.75, "y":5.25},
+ {"label":"Space", "x":4.75, "y":5.25, "w":4.75},
+ {"label":"\\", "x":9.5, "y":5.25},
+ {"label":"Left", "x":10.5, "y":5.25},
+ {"label":"Right", "x":11.5, "y":5.25},
+ {"label":"Down", "x":12.5, "y":5.25},
+ {"label":"Up", "x":13.5, "y":5.25},
+ {"label":"Num 0", "x":15.5, "y":5.25, "w":2},
+ {"label":"Num .", "x":17.5, "y":5.25},
+ {"label":"Num Enter", "x":18.5, "y":4.25, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/adb_usb/keymaps/13bit/keymap.c b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c
new file mode 100644
index 000000000..3b36a20c2
--- /dev/null
+++ b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+
+#define MCTL LCTL(KC_UP)
+#define SCST LSFT(LGUI(KC_4))
+#define SLP LALT(LGUI(KC_EJCT))
+
+#define APP1 LSFT(LALT(LCTL(LGUI(KC_1))))
+#define APP2 LSFT(LALT(LCTL(LGUI(KC_2))))
+#define APP3 LSFT(LALT(LCTL(LGUI(KC_3))))
+#define APP4 LSFT(LALT(LCTL(LGUI(KC_4))))
+#define APP5 LSFT(LALT(LCTL(LGUI(KC_5))))
+#define APP6 LSFT(LALT(LCTL(LGUI(KC_6))))
+#define APP7 LSFT(LALT(LCTL(LGUI(KC_7))))
+#define APP8 LSFT(LALT(LCTL(LGUI(KC_8))))
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ext_ansi(
+ KC_ESC, APP1, APP2, APP3, APP4, APP5, APP6, APP7, APP8, MCTL, KC_MUTE, KC_VOLD, KC_VOLU, SCST, KC_SLCK, KC_PAUS, SLP,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+};
diff --git a/keyboards/converter/adb_usb/keymaps/default/keymap.c b/keyboards/converter/adb_usb/keymaps/default/keymap.c
new file mode 100644
index 000000000..6b63c1a3c
--- /dev/null
+++ b/keyboards/converter/adb_usb/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ext_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_EJCT,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+};
diff --git a/keyboards/converter/adb_usb/led.c b/keyboards/converter/adb_usb/led.c
new file mode 100644
index 000000000..ea9bf77b5
--- /dev/null
+++ b/keyboards/converter/adb_usb/led.c
@@ -0,0 +1,27 @@
+/*
+Copyright 2011 Jun Wako <wakojun@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/>.
+*/
+
+#include <stdint.h>
+#include <util/delay.h>
+#include "adb.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+ adb_host_kbd_led(ADB_ADDR_KEYBOARD, ~usb_led);
+}
diff --git a/keyboards/converter/adb_usb/led.h b/keyboards/converter/adb_usb/led.h
new file mode 100644
index 000000000..19952fae2
--- /dev/null
+++ b/keyboards/converter/adb_usb/led.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2011 Jun Wako <wakojun@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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#ifndef LED_H
+#define LED_H
+#include "stdint.h"
+
+
+/* keyboard LEDs */
+#define USB_LED_NUM_LOCK 0
+#define USB_LED_CAPS_LOCK 1
+#define USB_LED_SCROLL_LOCK 2
+#define USB_LED_COMPOSE 3
+#define USB_LED_KANA 4
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void led_set(uint8_t usb_led);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/keyboards/converter/adb_usb/matrix.c b/keyboards/converter/adb_usb/matrix.c
new file mode 100644
index 000000000..8ee48bf23
--- /dev/null
+++ b/keyboards/converter/adb_usb/matrix.c
@@ -0,0 +1,267 @@
+/*
+Copyright 2011 Jun Wako <wakojun@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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "util.h"
+#include "debug.h"
+#include "adb.h"
+#include "matrix.h"
+#include "report.h"
+#include "host.h"
+#include "led.h"
+#include "timer.h"
+
+static bool is_iso_layout = false;
+
+// matrix state buffer(1:on, 0:off)
+static matrix_row_t matrix[MATRIX_ROWS];
+
+static void register_key(uint8_t key);
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ // LED on
+ DDRD |= (1<<6); PORTD |= (1<<6);
+
+ adb_host_init();
+ // wait for keyboard to boot up and receive command
+ _delay_ms(2000);
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ led_set(host_keyboard_leds());
+
+ // debug_enable = false;
+ // debug_matrix = true;
+ // debug_keyboard = true;
+ // debug_mouse = true;
+ // print("debug enabled.\n");
+
+ // LED off
+ DDRD |= (1<<6); PORTD &= ~(1<<6);
+ matrix_init_quantum();
+}
+
+#ifdef ADB_MOUSE_ENABLE
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+
+static report_mouse_t mouse_report = {};
+
+void adb_mouse_task(void)
+{
+ uint16_t codes;
+ int16_t x, y;
+ static int8_t mouseacc;
+
+ /* tick of last polling */
+ static uint16_t tick_ms;
+
+ // polling with 12ms interval
+ if (timer_elapsed(tick_ms) < 12) return;
+ tick_ms = timer_read();
+
+ codes = adb_host_mouse_recv();
+ // If nothing received reset mouse acceleration, and quit.
+ if (!codes) {
+ mouseacc = 1;
+ return;
+ };
+ // Bit sixteen is button.
+ if (~codes & (1 << 15))
+ mouse_report.buttons |= MOUSE_BTN1;
+ if (codes & (1 << 15))
+ mouse_report.buttons &= ~MOUSE_BTN1;
+ // lower seven bits are movement, as signed int_7.
+ // low byte is X-axis, high byte is Y.
+ y = (codes>>8 & 0x3F);
+ x = (codes>>0 & 0x3F);
+ // bit seven and fifteen is negative
+ // usb does not use int_8, but int_7 (measuring distance) with sign-bit.
+ if (codes & (1 << 6))
+ x = (x-0x40);
+ if (codes & (1 << 14))
+ y = (y-0x40);
+ // Accelerate mouse. (They weren't meant to be used on screens larger than 320x200).
+ x *= mouseacc;
+ y *= mouseacc;
+ // Cap our two bytes per axis to one byte.
+ // Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)...
+ // I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127)
+ mouse_report.x = -MAX(-MAX(x, -127), -127);
+ mouse_report.y = -MAX(-MAX(y, -127), -127);
+ if (debug_mouse) {
+ print("adb_host_mouse_recv: "); print_bin16(codes); print("\n");
+ print("adb_mouse raw: [");
+ phex(mouseacc); print(" ");
+ phex(mouse_report.buttons); print("|");
+ print_decs(mouse_report.x); print(" ");
+ print_decs(mouse_report.y); print("]\n");
+ }
+ // Send result by usb.
+ host_mouse_send(&mouse_report);
+ // increase acceleration of mouse
+ mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 );
+ return;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ /* extra_key is volatile and more convoluted than necessary because gcc refused
+ to generate valid code otherwise. Making extra_key uint8_t and constructing codes
+ here via codes = extra_key<<8 | 0xFF; would consistently fail to even LOAD
+ extra_key from memory, and leave garbage in the high byte of codes. I tried
+ dozens of code variations and it kept generating broken assembly output. So
+ beware if attempting to make extra_key code more logical and efficient. */
+ static volatile uint16_t extra_key = 0xFFFF;
+ uint16_t codes;
+ uint8_t key0, key1;
+
+ /* tick of last polling */
+ static uint16_t tick_ms;
+
+ codes = extra_key;
+ extra_key = 0xFFFF;
+
+ if ( codes == 0xFFFF )
+ {
+ // polling with 12ms interval
+ if (timer_elapsed(tick_ms) < 12) return 0;
+ tick_ms = timer_read();
+
+ codes = adb_host_kbd_recv();
+ }
+
+ key0 = codes>>8;
+ key1 = codes&0xFF;
+
+ if (debug_matrix && codes) {
+ print("adb_host_kbd_recv: "); phex16(codes); print("\n");
+ }
+
+ if (codes == 0) { // no keys
+ return 0;
+ } else if (codes == 0x7F7F) { // power key press
+ register_key(0x7F);
+ } else if (codes == 0xFFFF) { // power key release
+ register_key(0xFF);
+ } else if (key0 == 0xFF) { // error
+ xprintf("adb_host_kbd_recv: ERROR(%d)\n", codes);
+ // something wrong or plug-in
+ matrix_init();
+ return key1;
+ } else {
+ /* Swap codes for ISO keyboard
+ * https://github.com/tmk/tmk_keyboard/issues/35
+ *
+ * ANSI
+ * ,----------- ----------.
+ * | *a| 1| 2 =|Backspa|
+ * |----------- ----------|
+ * |Tab | Q| | ]| *c|
+ * |----------- ----------|
+ * |CapsLo| A| '|Return |
+ * |----------- ----------|
+ * |Shift | Shift |
+ * `----------- ----------'
+ *
+ * ISO
+ * ,----------- ----------.
+ * | *a| 1| 2 =|Backspa|
+ * |----------- ----------|
+ * |Tab | Q| | ]|Retur|
+ * |----------- -----` |
+ * |CapsLo| A| '| *c| |
+ * |----------- ----------|
+ * |Shif| *b| Shift |
+ * `----------- ----------'
+ *
+ * ADB scan code USB usage
+ * ------------- ---------
+ * Key ANSI ISO ANSI ISO
+ * ---------------------------------------------
+ * *a 0x32 0x0A 0x35 0x35
+ * *b ---- 0x32 ---- 0x64
+ * *c 0x2A 0x2A 0x31 0x31(or 0x32)
+ */
+ if (is_iso_layout) {
+ if ((key0 & 0x7F) == 0x32) {
+ key0 = (key0 & 0x80) | 0x0A;
+ } else if ((key0 & 0x7F) == 0x0A) {
+ key0 = (key0 & 0x80) | 0x32;
+ }
+ }
+ register_key(key0);
+ if (key1 != 0xFF) // key1 is 0xFF when no second key.
+ extra_key = key1<<8 | 0xFF; // process in a separate call
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+void matrix_print(void){
+
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+inline
+static void register_key(uint8_t key)
+{
+ uint8_t col, row;
+ col = key&0x07;
+ row = (key>>3)&0x0F;
+ if (key&0x80) {
+ matrix[row] &= ~(1<<col);
+ } else {
+ matrix[row] |= (1<<col);
+ }
+}
diff --git a/keyboards/converter/adb_usb/rules.mk b/keyboards/converter/adb_usb/rules.mk
new file mode 100644
index 000000000..3a9b6dedc
--- /dev/null
+++ b/keyboards/converter/adb_usb/rules.mk
@@ -0,0 +1,73 @@
+# MCU name
+# atmega32u4 Teensy2.0
+# atemga32u4 TMK Converter rev.1
+# atemga32u2 TMK Converter rev.2
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+#
+F_CPU = 16000000
+# F_CPU = 8000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096 for TMK Converter rev.1/rev.2
+# LUFA bootloader 4096
+# USBaspLoader 2048
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - not yet supported in LUFA
+EXTRAKEY_ENABLE = yes
+USB_HID_ENABLE = yes
+BACKLIGHT_ENABLE = no
+#BLUETOOTH = AdafruitBLE # For Adafruit Feather 32U4 BLE support, uncomment this line
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \
+ adb.c
diff --git a/keyboards/converter/hp_46010a/config.h b/keyboards/converter/hp_46010a/config.h
new file mode 100644
index 000000000..f77ed4115
--- /dev/null
+++ b/keyboards/converter/hp_46010a/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 1
+#define MANUFACTURER QMK
+#define PRODUCT 46010A keyboard converter
+#define DESCRIPTION 46010A keyboard converter
+
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 8
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+
diff --git a/keyboards/converter/hp_46010a/hp_46010a.c b/keyboards/converter/hp_46010a/hp_46010a.c
new file mode 100644
index 000000000..915a220f9
--- /dev/null
+++ b/keyboards/converter/hp_46010a/hp_46010a.c
@@ -0,0 +1,3 @@
+#include "hp_46010a.h"
+#include <avr/io.h>
+#include "quantum.h" \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/hp_46010a.h b/keyboards/converter/hp_46010a/hp_46010a.h
new file mode 100644
index 000000000..fd5adfc63
--- /dev/null
+++ b/keyboards/converter/hp_46010a/hp_46010a.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------.
+ * | res|stop| | f1| f2| f3| f4|menu|user| f5| f6| f7| f8| |clrl|clrd| | | | | |
+ * `---------' `---------------------------------------------------------' `---------' `-------------------'
+ * ,------------------------------------------------------------------------..---------. ,-------------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| +| back||insl|dell| | *| /| +| -|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||insc|delc| | 7| 8| 9|pade|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr|| cur|prev| | 4| 5| 6| ,|
+ * |------------------------------------------------------------------------------------ |-------------------|
+ * |dele|lshf | z| x| c| v| b| n| m| ,| .| /|rshf |sel | up|next| | 1| 2| 3| tab|
+ * |-------------------------------------------------------------------------|---------| |--------------- |
+ * |prnt| |lalt| space |ralt| |left|down|rght| | 0| .| |
+ * `-----------------------------------------------------------------------------------' `-------------------'
+ */
+
+#define LAYOUT( \
+ KEY_RES, KEY_STOP, KEY_F1, KEY_F2, KEY_F3, KEY_F4,KEY_MENU,KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_B1, KEY_B2, KEY_B3, KEY_B4, \
+ KEY_GRAV, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_MULT, KEY_DIV, KEY_ADD, KEY_SUBT, \
+ KEY_TAB, KEY_Q,KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_P7, KEY_P8, KEY_P9, KEY_PADE, \
+ KEY_CAPS, KEY_CTRL, KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_P4, KEY_P5, KEY_P6, KEY_PCOM, \
+ KEY_DELE, KEY_LSHF, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMA, KEY_DOT, KEY_SLAS,KEY_RSHF, KEY_SEL, KEY_UP, KEY_NEXT, KEY_P1, KEY_P2, KEY_P3, KEY_PTAB, \
+ KEY_PRNT, KEY_LALT, KEY_SPACE , KEY_RALT, KEY_LEFT, KEY_DOWN, KEY_RGHT, KEY_P0, KEY_PDOT \
+) { \
+ {KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_MENU }, \
+ {KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_8 }, \
+ {KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_I }, \
+ {KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_J }, \
+ {KEY_COMA, KEY_DOT, KEY_SLAS, KEY_1, KEY_SEL, KEY_UP, KEY_NEXT, KEY_M }, \
+ {KEY_SPACE, KEY_LALT, KEY_RALT, KC_NO, KEY_LEFT, KEY_DOWN, KEY_RGHT, KC_NO }, \
+ {KEY_F3, KEY_F2, KEY_F1, KEY_GRAV, KEY_CTRL, KEY_STOP, KEY_G, KEY_F4 }, \
+ {KEY_6, KEY_5, KEY_4, KEY_3, KEY_CAPS, KEY_RSHF, KEY_LSHF, KEY_7 }, \
+ {KEY_Y, KEY_T, KEY_R, KEY_E, KEY_W, KEY_Q, KEY_TAB, KEY_U }, \
+ {KEY_RES, KEY_F, KEY_D, KEY_S, KEY_A, KC_NO, KEY_2, KEY_H }, \
+ {KEY_P7, KEY_P4, KEY_P8, KEY_P5, KEY_P9, KEY_P6, KEY_PADE, KEY_PCOM }, \
+ {KEY_MULT, KEY_P1, KEY_DIV, KEY_P2, KEY_PLUS, KEY_P3, KEY_MINU, KEY_PTAB }, \
+ {KEY_B1, KEY_P0, KEY_B2, KC_NO, KEY_B3, KEY_PDOT, KEY_B4, KC_NO }, \
+ {KEY_B, KEY_V, KEY_C, KEY_X, KEY_Z, KEY_PRNT, KEY_DELE, KEY_N }, \
+}
diff --git a/keyboards/converter/hp_46010a/info.json b/keyboards/converter/hp_46010a/info.json
new file mode 100644
index 000000000..91dcf97ec
--- /dev/null
+++ b/keyboards/converter/hp_46010a/info.json
@@ -0,0 +1,121 @@
+{
+ "keyboard_name": "HP_46010A",
+ "keyboard_folder": "converter/HP_46010A",
+ "url": "https://deskthority.net/wiki/HP_46010A",
+ "maintainer": "listofoptions",
+ "width": 22,
+ "height": 7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Reset", "x":0, "y":0},
+ {"label":"Stop", "x":1, "y":0},
+ {"label":"F1", "x":2.5, "y":0, "w":1.25},
+ {"label":"F2", "x":3.75, "y":0, "w":1.25},
+ {"label":"F3", "x":5, "y":0, "w":1.25},
+ {"label":"F4", "x":6.25, "y":0, "w":1.25},
+ {"label":"Menu", "x":7.5, "y":0},
+ {"label":"User", "x":8.5, "y":0},
+ {"label":"F5", "x":9.5, "y":0, "w":1.25},
+ {"label":"F6", "x":10.75, "y":0, "w":1.25},
+ {"label":"F7", "x":12, "y":0, "w":1.25},
+ {"label":"F8", "x":13.25, "y":0, "w":1.25},
+ {"label":"Clear line", "x":15, "y":0},
+ {"label":"Clear display", "x":16, "y":0},
+ {"x":18, "y":0},
+ {"x":19, "y":0},
+ {"x":20, "y":0},
+ {"x":21, "y":0},
+ {"label":"`", "x":0, "y":2, "w":1.25},
+ {"label":"1", "x":1.25, "y":2},
+ {"label":"2", "x":2.25, "y":2},
+ {"label":"3", "x":3.25, "y":2},
+ {"label":"4", "x":4.25, "y":2},
+ {"label":"5", "x":5.25, "y":2},
+ {"label":"6", "x":6.25, "y":2},
+ {"label":"7", "x":7.25, "y":2},
+ {"label":"8", "x":8.25, "y":2},
+ {"label":"9", "x":9.25, "y":2},
+ {"label":"0", "x":10.25, "y":2},
+ {"label":"-", "x":11.25, "y":2},
+ {"label":"=", "x":12.25, "y":2},
+ {"label":"Backspace", "x":13.25, "y":2, "w":1.5},
+ {"label":"Insert line", "x":15, "y":2},
+ {"label":"Delete line", "x":16, "y":2},
+ {"label":"*", "x":18, "y":2},
+ {"label":"/", "x":19, "y":2},
+ {"label":"+", "x":20, "y":2},
+ {"label":"-", "x":21, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.75},
+ {"label":"Q", "x":1.75, "y":3},
+ {"label":"W", "x":2.75, "y":3},
+ {"label":"E", "x":3.75, "y":3},
+ {"label":"R", "x":4.75, "y":3},
+ {"label":"T", "x":5.75, "y":3},
+ {"label":"Y", "x":6.75, "y":3},
+ {"label":"U", "x":7.75, "y":3},
+ {"label":"I", "x":8.75, "y":3},
+ {"label":"O", "x":9.75, "y":3},
+ {"label":"P", "x":10.75, "y":3},
+ {"label":"[", "x":11.75, "y":3},
+ {"label":"]", "x":12.75, "y":3},
+ {"label":"\\", "x":13.75, "y":3},
+ {"label":"Insert char", "x":15, "y":3},
+ {"label":"Delete char", "x":16, "y":3},
+ {"label":"7", "x":18, "y":3},
+ {"label":"8", "x":19, "y":3},
+ {"label":"9", "x":20, "y":3},
+ {"label":"Enter", "x":21, "y":3},
+ {"label":"Caps Lock", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"A", "x":2, "y":4},
+ {"label":"S", "x":3, "y":4},
+ {"label":"D", "x":4, "y":4},
+ {"label":"F", "x":5, "y":4},
+ {"label":"G", "x":6, "y":4},
+ {"label":"H", "x":7, "y":4},
+ {"label":"J", "x":8, "y":4},
+ {"label":"K", "x":9, "y":4},
+ {"label":"L", "x":10, "y":4},
+ {"label":";", "x":11, "y":4},
+ {"label":"'", "x":12, "y":4},
+ {"label":"Return", "x":13, "y":4, "w":1.75},
+ {"label":"Cursor", "x":15, "y":4},
+ {"label":"Prev", "x":16, "y":4},
+ {"label":"4", "x":18, "y":4},
+ {"label":"5", "x":19, "y":4},
+ {"label":"6", "x":20, "y":4},
+ {"label":",", "x":21, "y":4},
+ {"label":"Del", "x":0, "y":5},
+ {"label":"Shift", "x":1.25, "y":5, "w":1.25},
+ {"label":"Z", "x":2.5, "y":5},
+ {"label":"X", "x":3.5, "y":5},
+ {"label":"C", "x":4.5, "y":5},
+ {"label":"V", "x":5.5, "y":5},
+ {"label":"B", "x":6.5, "y":5},
+ {"label":"N", "x":7.5, "y":5},
+ {"label":"M", "x":8.5, "y":5},
+ {"label":",", "x":9.5, "y":5},
+ {"label":".", "x":10.5, "y":5},
+ {"label":"/", "x":11.5, "y":5},
+ {"label":"Shift", "x":12.5, "y":5, "w":1.25},
+ {"label":"Select", "x":14, "y":5},
+ {"label":"Up", "x":15, "y":5},
+ {"label":"Next", "x":16, "y":5},
+ {"label":"1", "x":18, "y":5},
+ {"label":"2", "x":19, "y":5},
+ {"label":"3", "x":20, "y":5},
+ {"label":"Tab", "x":21, "y":5, "h":2},
+ {"label":"Win", "x":0, "y":6},
+ {"label":"Extend Char", "x":2.5, "y":6},
+ {"x":3.5, "y":6, "w":8},
+ {"label":"Extend Char", "x":11.5, "y":6},
+ {"label":"Left", "x":14, "y":6},
+ {"label":"Down", "x":15, "y":6},
+ {"label":"Right", "x":16, "y":6},
+ {"label":"0", "x":18, "y":6, "w":2},
+ {"label":".", "x":20, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c
new file mode 100644
index 000000000..cb65bd422
--- /dev/null
+++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------.
+ * | esc|xxxx| | f1| f2| f3| f4|xxxx|xxxx| f5| f6| f7| f8| |xxxx|xxxx| | f9| f10| f11| f12|
+ * `---------' `---------------------------------------------------------' `---------' `-------------------'
+ * ,------------------------------------------------------------------------..---------. ,-------------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| back||ins |home| | *| /| +| -|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||del | end| | 7| 8| 9|pade|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr||xxxx|pgup| | 4| 5| 6| ,|
+ * |------------------------------------------------------------------------------------ |-------------------|
+ * |del |lsft | z| x| c| v| b| n| m| ,| .| /|rsft | app| up|pgdn| | 1| 2| 3| tab|
+ * |-------------------------------------------------------------------------|---------| |--------------- |
+ * | gui| |lalt| space |ralt| |left|down|rght| | 0| .| |
+ * `-----------------------------------------------------------------------------------' `-------------------'
+ */
+
+ [0] = LAYOUT(
+ KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \
+ KC_TAB, KC_Q,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \
+ KC_CAPS, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PCMM, \
+ KC_DEL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,KC_RSFT, KC_APP, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_TAB, \
+ KC_LGUI, KC_LALT, KC_SPACE , KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ )
+} ; \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/matrix.c b/keyboards/converter/hp_46010a/matrix.c
new file mode 100644
index 000000000..2ca7d0357
--- /dev/null
+++ b/keyboards/converter/hp_46010a/matrix.c
@@ -0,0 +1,244 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include <util/delay.h>
+
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+#include "LUFA/Drivers/Peripheral/SPI.h"
+
+#include "config.h"
+
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint16_t debouncing_time ;
+static bool debouncing = false ;
+#endif
+
+static uint8_t matrix [MATRIX_ROWS] = {0};
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint8_t matrix_debounce_old [MATRIX_ROWS] = {0};
+static uint8_t matrix_debounce_new [MATRIX_ROWS] = {0};
+#endif
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+// the keyboard's internal wiring is such that the inputs to the logic are
+// a clock signal, and a reset line.
+// the output is a single output pin. im bitbanging here, but the SPI controller
+// would work normally
+//
+// the device functions, by using the clock signal to count 128 bits, the lower
+// 3 bits of this 7 bit counter are tied to a 1-of-8 multiplexer, this forms
+// the columns.
+// the upper 4 bits form the rows, and are decoded using bcd to decimal
+// decoders, so that 14 out of 16 of the outputs are wired to the rows of the
+// matrix. each switch has a diode, such that the row signal feeds into the
+// switch, and then into the diode, then into one of the columns into the
+// matrix. the reset pin can be used to reset the entire counter.
+
+#define RESET _BV(PB0)
+#define SCLK _BV(PB1)
+#define SDATA _BV(PB3)
+#define LED _BV(PD6)
+
+inline
+static
+void SCLK_increment(void) {
+ PORTB &= ~SCLK ;
+ _delay_us( 4 ) ; // make sure the line is stable
+ PORTB |= SCLK ;
+ _delay_us( 4 ) ;
+
+ return ;
+}
+
+inline
+static
+void Matrix_Reset(void) {
+ PORTB |= RESET ;
+ _delay_us( 4 ) ; // make sure the line is stable
+ PORTB &= ~RESET ;
+
+ return ;
+}
+
+inline
+static
+uint8_t Matrix_ReceiveByte (void) {
+ uint8_t received = 0 ;
+ uint8_t temp = 0 ;
+ for ( uint8_t bit = 0; bit < MATRIX_COLS; ++bit ) {
+ // toggle the clock
+ SCLK_increment();
+ temp = (PINB & SDATA) << 4 ;
+ received |= temp >> bit ;
+ }
+
+ return received ;
+}
+
+inline
+static
+void Matrix_ThrowByte(void) {
+ // we use MATRIX_COLS - 1 here because that would put us at 7 clocks
+ for ( uint8_t bit = 0; bit < MATRIX_COLS - 1; ++bit ) {
+ // toggle the clock
+ SCLK_increment();
+ }
+
+ return ;
+}
+
+void matrix_init () {
+ // debug_matrix = 1;
+ // PB0 (SS) and PB1 (SCLK) set to outputs
+ DDRB |= RESET | SCLK ;
+ // PB2, is unused, and PB3 is our serial input
+ DDRB &= ~SDATA ;
+
+ // SS is reset for this board, and is active High
+ // SCLK is the serial clock and is active High
+ PORTB &= ~RESET ;
+ PORTB |= SCLK ;
+
+ // led pin
+ DDRD |= LED ;
+ PORTD &= ~LED ;
+
+ matrix_init_quantum();
+
+ //toggle reset, to put the keyboard logic into a known state
+ Matrix_Reset() ;
+}
+
+uint8_t matrix_scan(void) {
+
+ // the first byte of the keyboard's output data can be ignored
+ Matrix_ThrowByte();
+
+#if ( DEBOUNCING_DELAY > 0 )
+
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ //transfer old debouncing values
+ matrix_debounce_old[row] = matrix_debounce_new[row] ;
+ // read new key-states in
+ matrix_debounce_new[row] = Matrix_ReceiveByte() ;
+
+ if ( matrix_debounce_new[row] != matrix_debounce_old[row] ) {
+ debouncing = true ;
+ debouncing_time = timer_read() ;
+ }
+ }
+
+#else
+ // without debouncing we simply just read in the raw matrix
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ matrix[row] = Matrix_ReceiveByte ;
+ }
+#endif
+
+
+#if ( DEBOUNCING_DELAY > 0 )
+ if ( debouncing && ( timer_elapsed( debouncing_time ) > DEBOUNCING_DELAY ) ) {
+
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ matrix[row] = matrix_debounce_new[row] ;
+ }
+
+ debouncing = false ;
+ }
+#endif
+ Matrix_Reset() ;
+
+ matrix_scan_quantum() ;
+ return 1;
+}
+
+inline
+uint8_t matrix_get_row( uint8_t row ) {
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_bin_reverse8(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+// as an aside, I used the M0110 converter:
+// tmk_core/common/keyboard.c, quantum/matrix.c, and the project layout of the planck
+// the online ducmentation starting from :
+// https://docs.qmk.fm/#/config_options
+// https://docs.qmk.fm/#/understanding_qmk
+// and probably a few i forgot.... \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/readme.md b/keyboards/converter/hp_46010a/readme.md
new file mode 100644
index 000000000..2321faa6e
--- /dev/null
+++ b/keyboards/converter/hp_46010a/readme.md
@@ -0,0 +1,52 @@
+# HP 46010A
+
+![46010A](https://deskthority.net/w/images/a/a5/HP_46010A_--_top.jpg)
+
+A converter for the eponymous keyboard.
+
+Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions)
+Hardware Supported: HP 46010A, Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/HP_46010A:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+to get a matrix created if your board uses a different one (i used the US layout) please see the following gists:
+for the matrix itself: https://gist.github.com/listofoptions/cdf70d94767e9c6c027741850a24c568
+for the program to generate the matrix: https://gist.github.com/listofoptions/d245e370678024edbe5bed8c8ab17999
+
+to build the actual converter, you are going to need to either splice into the a connector or, use a multi-meter to buzz/ohm out which wires go where.
+from the bottom of the pcb the pins are arraged as follows:
+
+
+ 4 5 6
+ 3 2 1
+
+
+connect a six pin modular connector of the 6p6c variaty.
+then lop off the other end of the cable, striping the wires inside.
+use the ohm-meter to find the corresponding wire for each pin on the bottom of the pcb
+
+the pin meanings are as follows:
+1 reset
+2 no connection
+3 vcc
+4 data out
+5 clock
+6 ground
+
+wire the ground and power pins to ground and 5v power on the teensy (or other avr device of your choice)
+connect
+on the teensy the connection is as follows
+
+
+teensy | HP 46010A
+----|-----
+gnd | gnd (6)
+vcc | vcc (3)
+PB0 | reset (1)
+PB1 | clock (5)
+PB3 | data out (4)
+gnd | no connection (2) -- optional
diff --git a/keyboards/converter/hp_46010a/rules.mk b/keyboards/converter/hp_46010a/rules.mk
new file mode 100644
index 000000000..ddd2d593b
--- /dev/null
+++ b/keyboards/converter/hp_46010a/rules.mk
@@ -0,0 +1,72 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+SPLIT_KEYBOARD = no
+WAIT_FOR_USB = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+LAYOUTS_HAS_RGB = NO
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/config.h b/keyboards/converter/ibm_5291/config.h
new file mode 100644
index 000000000..5c9ca1e4a
--- /dev/null
+++ b/keyboards/converter/ibm_5291/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 1
+#define MANUFACTURER QMK
+#define PRODUCT 5291 keyboard converter
+#define DESCRIPTION 5291 keyboard converter
+
+#define MATRIX_ROWS 24
+#define MATRIX_COLS 4
+
+#define MATRIX_ROW_PINS {B2, B3, B4, B5, B6}
+#define MATRIX_COL_PINS {B0, B1}
+#define MATRIX_DATA_PIN D0
+#define MATRIX_STROBE_PIN D1
+#define LED_PIN D6
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+
diff --git a/keyboards/converter/ibm_5291/ibm_5291.c b/keyboards/converter/ibm_5291/ibm_5291.c
new file mode 100644
index 000000000..9b937a545
--- /dev/null
+++ b/keyboards/converter/ibm_5291/ibm_5291.c
@@ -0,0 +1,3 @@
+#include "ibm_5291.h"
+#include <avr/io.h>
+#include "quantum.h" \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/ibm_5291.h b/keyboards/converter/ibm_5291/ibm_5291.h
new file mode 100644
index 000000000..aa1b40324
--- /dev/null
+++ b/keyboards/converter/ibm_5291/ibm_5291.h
@@ -0,0 +1,69 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/*
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+*/
+
+#define LAYOUT_5291( \
+ KEY_F1,KEY_F2, KEY_ESC, KEY_1, KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_0, KEY_MIN, KEY_EQU, KEY_BACK, KEY_NLOCK, KEY_SLOCK, \
+ KEY_F3,KEY_F4, KEY_TAB, KEY_Q, KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O, KEY_P, KEY_LBRC,KEY_RBRC, KEY_PAD7,KEY_PAD8, KEY_PAD9,KEY_PMIN, \
+ KEY_F5,KEY_F6, KEY_LCTR,KEY_A, KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_SEMI,KEY_QUOT,KEY_TICK, KEY_ENTR,KEY_PAD4,KEY_PAD5, KEY_PAD6, \
+ KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \
+ KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \
+) \
+{ {KEY_Z, KEY_S, KEY_W, KEY_3 }\
+, {KEY_X, KEY_D, KEY_E, KEY_4 }\
+, {KEY_C, KEY_F, KEY_R, KEY_5 }\
+, {KEY_V, KEY_G, KEY_T, KEY_6 }\
+, {KEY_B, KEY_H, KEY_Y, KEY_7 }\
+, {KEY_N, KEY_J, KEY_U, KEY_8 }\
+, {KEY_PAD2, KEY_PAD5,KEY_PAD8,KEY_NLOCK }\
+, {KEY_M, KEY_K, KEY_I, KEY_9 }\
+, {KEY_COMM, KEY_L, KEY_O, KEY_0 }\
+, {KEY_DOT, KEY_SEMI,KEY_P, KEY_MIN }\
+, {KEY_SLS, KEY_QUOT,KEY_LBRC,KEY_EQU }\
+, {KEY_SPACE, KEY_RSFS,KEY_TICK,KEY_RBRC }\
+, {KEY_CLOCK, KEY_PAST,KEY_ENTR,KEY_BACK }\
+, {KEY_PAD0, KEY_PAD1,KEY_PAD4,KEY_PAD7 }\
+, {KEY_PPLS, KC_NO, KEY_PMIN,KEY_SLOCK }\
+, {KEY_PDOT, KEY_PAD3,KEY_PAD6,KEY_PAD9 }\
+, {KEY_BSLS, KEY_A, KEY_Q, KEY_2 }\
+, {KEY_LALT, KC_NO, KC_NO, KEY_1 }\
+, {KEY_F7, KEY_F5, KEY_F3, KEY_F1 }\
+, {KEY_F8, KEY_F6, KEY_F4, KEY_F2 }\
+, {KC_F10, KC_NO, KC_NO, KC_NO }\
+, {KC_F9, KC_NO, KC_NO, KC_NO }\
+, {KEY_LSFS, KEY_LCTR,KEY_TAB, KEY_ESC }\
+, {KC_NO, KC_NO, KC_NO, KC_NO }\
+}
+
+#define LAYOUT LAYOUT_5291 \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/info.json b/keyboards/converter/ibm_5291/info.json
new file mode 100644
index 000000000..2cb3b76c2
--- /dev/null
+++ b/keyboards/converter/ibm_5291/info.json
@@ -0,0 +1,97 @@
+{
+ "keyboard_name": "IBM 5291",
+ "keyboard_folder": "converter/ibm_5291",
+ "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard",
+ "maintainer": "listofoptions",
+ "width": 21,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Sys Req", "x":0, "y":0},
+ {"label":"Cmd", "x":1, "y":0},
+ {"label":"`", "x":2.25, "y":0},
+ {"label":"1", "x":3.25, "y":0},
+ {"label":"2", "x":4.25, "y":0},
+ {"label":"3", "x":5.25, "y":0},
+ {"label":"4", "x":6.25, "y":0},
+ {"label":"5", "x":7.25, "y":0},
+ {"label":"6", "x":8.25, "y":0},
+ {"label":"7", "x":9.25, "y":0},
+ {"label":"8", "x":10.25, "y":0},
+ {"label":"9", "x":11.25, "y":0},
+ {"label":"0", "x":12.25, "y":0},
+ {"label":"-", "x":13.25, "y":0},
+ {"label":"=", "x":14.25, "y":0},
+ {"label":"Backspace", "x":15.25, "y":0, "w":1.75},
+ {"label":"Reverse Tab", "x":17, "y":0, "w":2},
+ {"label":"Dup", "x":19, "y":0, "w":2},
+ {"label":"Del", "x":0, "y":1},
+ {"label":"Erase Input", "x":1, "y":1},
+ {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+ {"label":"Q", "x":3.75, "y":1},
+ {"label":"W", "x":4.75, "y":1},
+ {"label":"E", "x":5.75, "y":1},
+ {"label":"R", "x":6.75, "y":1},
+ {"label":"T", "x":7.75, "y":1},
+ {"label":"Y", "x":8.75, "y":1},
+ {"label":"U", "x":9.75, "y":1},
+ {"label":"I", "x":10.75, "y":1},
+ {"label":"O", "x":11.75, "y":1},
+ {"label":"P", "x":12.75, "y":1},
+ {"label":"&cent;", "x":13.75, "y":1},
+ {"label":"\\", "x":14.75, "y":1, "w":1.25},
+ {"label":"7", "x":17, "y":1},
+ {"label":"8", "x":18, "y":1},
+ {"label":"9", "x":19, "y":1},
+ {"label":"Field -", "x":20, "y":1},
+ {"label":"Print", "x":0, "y":2},
+ {"label":"Help", "x":1, "y":2},
+ {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75},
+ {"label":"A", "x":4, "y":2},
+ {"label":"S", "x":5, "y":2},
+ {"label":"D", "x":6, "y":2},
+ {"label":"F", "x":7, "y":2},
+ {"label":"G", "x":8, "y":2},
+ {"label":"H", "x":9, "y":2},
+ {"label":"J", "x":10, "y":2},
+ {"label":"K", "x":11, "y":2},
+ {"label":"L", "x":12, "y":2},
+ {"label":";", "x":13, "y":2},
+ {"label":"'", "x":14, "y":2},
+ {"label":"{", "x":15, "y":2},
+ {"label":"Field Exit", "x":16, "y":1, "h":2},
+ {"label":"4", "x":17, "y":2},
+ {"label":"5", "x":18, "y":2},
+ {"label":"6", "x":19, "y":2},
+ {"label":"Roll Up", "x":0, "y":3},
+ {"label":"Roll Down", "x":1, "y":3},
+ {"label":"Shift", "x":2.25, "y":3, "w":1.25},
+ {"label":"<", "x":3.5, "y":3},
+ {"label":"Z", "x":4.5, "y":3},
+ {"label":"X", "x":5.5, "y":3},
+ {"label":"C", "x":6.5, "y":3},
+ {"label":"V", "x":7.5, "y":3},
+ {"label":"B", "x":8.5, "y":3},
+ {"label":"N", "x":9.5, "y":3},
+ {"label":"M", "x":10.5, "y":3},
+ {"label":",", "x":11.5, "y":3},
+ {"label":".", "x":12.5, "y":3},
+ {"label":"/", "x":13.5, "y":3},
+ {"label":"Shift", "x":14.5, "y":3, "w":1.5},
+ {"label":"Return", "x":16, "y":3},
+ {"label":"1", "x":17, "y":3},
+ {"label":"2", "x":18, "y":3},
+ {"label":"3", "x":19, "y":3},
+ {"label":"Field +", "x":20, "y":2, "h":3},
+ {"label":"Left", "x":0, "y":4},
+ {"label":"Right", "x":1, "y":4},
+ {"label":"Error Reset", "x":2.25, "y":4, "w":2},
+ {"label":"Space", "x":4.25, "y":4, "w":9.75},
+ {"label":"Enter Rec Adv", "x":14, "y":4, "w":2},
+ {"label":"0", "x":16, "y":4, "w":2},
+ {"label":".", "x":18, "y":4, "w":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/ibm_5291/keymaps/default/keymap.c b/keyboards/converter/ibm_5291/keymaps/default/keymap.c
new file mode 100644
index 000000000..9b286c887
--- /dev/null
+++ b/keyboards/converter/ibm_5291/keymaps/default/keymap.c
@@ -0,0 +1,233 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+/*
+enum xt_keycodes
+ { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen
+ , XT_SLCK // XT scroll lock / break
+ , XT_F6 // F6 / app key
+ , XT_F5 // F5 / gui
+ , XT_F9 // F9 / F11
+ , XT_F10 // F10 / F12
+ } ;
+
+static bool shift_pressed = false ,
+ alt_pressed = false ,
+ ctrl_pressed = false ,
+ xt_pscr_pressed = false ,
+ xt_brk_pressed = false ,
+ xt_app_pressed = false ,
+ xt_gui_pressed = false ,
+ xt_lout_pressed = false ,
+ xt_f11_pressed = false ,
+ xt_f12_pressed = false ;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_LSFT:
+ case KC_RSFT:
+ if (record->event.pressed) {
+ shift_pressed = true ;
+ } else {
+ shift_pressed = false ;
+ }
+ return true;
+ break;
+
+ case KC_LALT:
+ if (record->event.pressed) {
+ alt_pressed = true ;
+ } else {
+ alt_pressed = false ;
+ }
+ return true;
+ break;
+
+ case KC_LCTL:
+ if (record->event.pressed) {
+ ctrl_pressed = true ;
+ } else {
+ ctrl_pressed = false ;
+ }
+ return true;
+ break;
+
+ case XT_PAST:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_pscr_pressed = true ;
+ register_code(KC_PSCR);
+ } else {
+ register_code(KC_PAST);
+ }
+ } else {
+ if (xt_pscr_pressed) {
+ xt_pscr_pressed = false ;
+ unregister_code(KC_PSCR);
+ } else {
+ unregister_code(KC_PAST);
+ }
+ }
+ return false;
+ break;
+
+ case XT_SLCK:
+ if (record->event.pressed) {
+ if (ctrl_pressed) {
+ xt_brk_pressed = true ;
+ register_code(KC_BRK);
+ } else {
+ register_code(KC_SLCK);
+ }
+ } else {
+ if (xt_brk_pressed) {
+ xt_brk_pressed = false ;
+ unregister_code(KC_BRK);
+ } else {
+ unregister_code(KC_SLCK);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F6:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_app_pressed = true ;
+ register_code(KC_APP);
+ } else {
+ register_code(KC_F6);
+ }
+ } else {
+ if (xt_app_pressed) {
+ xt_app_pressed = false ;
+ unregister_code(KC_APP);
+ } else {
+ unregister_code(KC_F6);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F5:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_gui_pressed = true ;
+ register_code(KC_LGUI);
+ } else if (ctrl_pressed) {
+ xt_lout_pressed = true ;
+ register_code (KC_LGUI) ;
+ register_code (KC_L) ;
+ } else {
+ register_code(KC_F5);
+ }
+ } else {
+ if (xt_gui_pressed) {
+ xt_gui_pressed = false ;
+ unregister_code(KC_LGUI);
+ } else if (xt_lout_pressed) {
+ xt_lout_pressed = false ;
+ unregister_code (KC_LGUI) ;
+ unregister_code (KC_L) ;
+ } else {
+ unregister_code(KC_F5);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F9:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_f11_pressed = true ;
+ register_code(KC_F11);
+ } else {
+ register_code(KC_F9);
+ }
+ } else {
+ if (xt_f11_pressed) {
+ xt_f11_pressed = false ;
+ unregister_code(KC_F11);
+ } else {
+ unregister_code(KC_F9);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F10:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_f12_pressed = true ;
+ register_code(KC_F12);
+ } else {
+ register_code(KC_F10);
+ }
+ } else {
+ if (xt_f12_pressed) {
+ xt_f12_pressed = false ;
+ unregister_code(KC_F12);
+ } else {
+ unregister_code(KC_F10);
+ }
+ }
+ return false;
+ break;
+
+ default:
+ return true;
+ break;
+ }
+
+ return true;
+}
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// default layout is the standard XT layout
+/*
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+*/
+/*
+ [0] = LAYOUT (
+ KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, XT_SLCK,
+ KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
+ XT_F5,XT_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
+ KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
+ XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
+ )
+*/
+ [0] = LAYOUT (
+ KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
+ KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
+ KC_F5,KC_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
+ KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
+ KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
+ )
+} ;
+
diff --git a/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf
new file mode 100644
index 000000000..3560598f0
--- /dev/null
+++ b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf
Binary files differ
diff --git a/keyboards/converter/ibm_5291/matrix.c b/keyboards/converter/ibm_5291/matrix.c
new file mode 100644
index 000000000..58f6e37b6
--- /dev/null
+++ b/keyboards/converter/ibm_5291/matrix.c
@@ -0,0 +1,284 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include <util/delay.h>
+
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+#include "config.h"
+
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#define print_matrix_header() print("\nr/c 01234567\n")
+#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+#define matrix_bitpop(i) bitpop(matrix[i])
+#define ROW_SHIFTER ((uint8_t)1)
+#define check_bit(var,pos) ((var) & (1<<(pos)))
+
+#define NUM_ROW_PINS 5
+#define NUM_COL_PINS 2
+
+static const uint8_t row_pins [NUM_ROW_PINS] = MATRIX_ROW_PINS ;
+static const uint8_t col_pins [NUM_ROW_PINS] = MATRIX_COL_PINS ;
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint16_t debouncing_time ;
+static bool debouncing = false ;
+#endif
+
+static uint8_t matrix [MATRIX_ROWS] = {0};
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint8_t matrix_debounce [MATRIX_ROWS] = {0};
+#endif
+
+static
+inline
+void toggle_led(void) {
+ uint8_t pin = LED_PIN ;
+ _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF);
+}
+
+static
+inline
+void init_led(void) {
+ uint8_t pin = LED_PIN ;
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static
+inline
+void init_data(void) {
+ uint8_t pin = MATRIX_DATA_PIN ;
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LO
+}
+
+static
+inline
+void init_strobe(void) {
+ uint8_t pin = MATRIX_STROBE_PIN ;
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static
+inline
+void init_rows(void) {
+ for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) {
+ uint8_t pin = row_pins[i];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+}
+
+static
+inline
+void init_cols(void) {
+ for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) {
+ uint8_t pin = col_pins[i];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+}
+
+static
+inline
+void select_row(uint8_t current_row) {
+ for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) {
+ uint8_t pin = row_pins[i] ;
+ if ( check_bit( current_row, i ) ) {
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+ }
+ wait_us(30) ;
+}
+
+static
+inline
+void select_col(uint8_t current_col) {
+ for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) {
+ uint8_t pin = col_pins[i] ;
+ if ( check_bit( current_col, i ) ) {
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+ }
+ wait_us(30) ;
+}
+
+static
+inline
+uint8_t matrix_strobe(uint8_t col_index) {
+ uint8_t strobe_pin = MATRIX_STROBE_PIN ;
+ uint8_t data_pin = MATRIX_DATA_PIN ;
+
+ // set strobe pin low
+ _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF);
+
+ wait_us(30) ;
+
+ // read data
+ uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ;
+
+ // set strobe pin hi
+ _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF);
+
+ uint8_t out = data ? (1 << col_index) : 0 ;
+ return out ;
+}
+
+static
+bool matrix_read(uint8_t current_matrix[], uint8_t current_row) {
+ // Store last value of row prior to reading
+ uint8_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ select_row(current_row);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; ++col_index) {
+
+ select_col(col_index) ;
+
+ // strobe the matrix
+ // Populate the matrix row with the state of the data pin
+ current_matrix[current_row] |= matrix_strobe(col_index) ;
+ }
+
+ bool test = last_row_value != current_matrix[current_row] ;
+ return test ;
+}
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_init(void) {
+ init_led() ;
+ init_rows() ;
+ init_cols() ;
+ init_data() ;
+ init_strobe() ;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+# if (DEBOUNCING_DELAY > 0)
+ matrix_debounce [i] = 0;
+# endif
+ }
+
+ matrix_init_quantum() ;
+}
+
+uint8_t matrix_scan(void) {
+ for ( uint8_t current_row = 0; current_row < MATRIX_ROWS; ++current_row ) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = matrix_read(matrix_debounce, current_row);
+
+ if (matrix_changed) {
+ debouncing = true ;
+ debouncing_time = timer_read();
+ }
+
+# else
+ matrix_read(matrix, current_row);
+# endif
+ }
+
+# if (DEBOUNCING_DELAY > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debounce[i];
+ }
+ debouncing = false;
+ }
+# endif
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+void matrix_print(void) {
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
diff --git a/keyboards/converter/ibm_5291/matrix.csv b/keyboards/converter/ibm_5291/matrix.csv
new file mode 100644
index 000000000..40462c214
--- /dev/null
+++ b/keyboards/converter/ibm_5291/matrix.csv
@@ -0,0 +1,96 @@
+0,Z
+1,S
+2,W
+3,3
+4,X
+5,D
+6,E
+7,4
+8,C
+9,F
+10,R
+11,5
+12,V
+13,G
+14,T
+15,6
+16,B
+17,H
+18,Y
+19,7
+20,N
+21,J
+22,U
+23,8
+24,PAD_2
+25,PAD_5
+26,PAD_8
+27,NUM_LOCK
+28,M
+29,K
+30,I
+31,9
+32,COMMA
+33,L
+34,O
+35,0
+36,PERIOD
+37,SEMICOLON
+38,P
+39,MINUS
+40,SLASH
+41,QUOTE
+42,LEFT_BRACE
+43,EQUAL
+44,SPACE
+45,RSHIFT
+46,BACK_QUOTE
+47,RIGHT_BRACE
+48,CAPS_LOCK
+49,PAD_ASTERIX
+50,ENTER
+51,BACKSPACE
+52,PAD_0
+53,PAD_1
+54,PAD_4
+55,PAD_7
+56,PAD_PLUS
+57,UNASSIGNED
+58,PAD_MINUS
+59,SCROLL_LOCK
+60,PAD_PERIOD
+61,PAD_3
+62,PAD_6
+63,PAD_9
+64,BACKSLASH
+65,A
+66,Q
+67,2
+68,LALT
+69,UNASSIGNED
+70,UNASSIGNED
+71,1
+72,F7
+73,F5
+74,F3
+75,F1
+76,F8
+77,F6
+78,F4
+79,F2
+80,F10
+81,UNASSIGNED
+82,UNASSIGNED
+83,UNASSIGNED
+84,F9
+85,UNASSIGNED
+86,UNASSIGNED
+87,UNASSIGNED
+88,LSHIFT
+89,LCTRL
+90,TAB
+91,ESC
+92,UNASSIGNED
+93,UNASSIGNED
+94,UNASSIGNED
+95,UNASSIGNED
diff --git a/keyboards/converter/ibm_5291/readme.md b/keyboards/converter/ibm_5291/readme.md
new file mode 100644
index 000000000..03406d3f9
--- /dev/null
+++ b/keyboards/converter/ibm_5291/readme.md
@@ -0,0 +1,72 @@
+# IBM 5291 keyboard converter
+
+[IBM 5291](https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard)
+
+A converter for the eponymous keyboard.
+
+Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions)
+Hardware Supported: IBM 5291, Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/ibm_5291:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+
+The pinout is as follows:
+
+IBM−5291−Cable to Pinhead−14
+
+| pin | description
+----|------------------------
+1 | GND
+2 | NC
+3 | GND
+4 | GN)
+5 | +5V
+6 | D0
+7 | D1
+8 | D2
+9 | D3
+10| D4
+11| D5
+12| D6
+13| Strobe
+14| Out
+
+The pins on this connector are organized
+![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image)
+
+IBM−5291−2 Cable with DB15M connector
+
+| pin | description
+----|-------------
+|1,2,3 | GND
+|4 | +5V
+|5 | D0
+|6 | D1
+|7 | D2
+|8 | D3
+|9 | D4
+|10 | D5
+|11 | D6
+|12 | Strobe
+|13 | Out
+|14 | PE
+|15 | NC
+
+The above connector is actually numbered so it should be easier to determine
+where the needed connections are.
+
+To connect to the teensy, the following are pins are needed (if you should choose not set your own):
+
+* PB0 -> PB6 are connected to D0 -> D6
+* +5V is connected to the corresponding teensy pin
+* gnd is as well, only one of the gnd pins needs to be connected though.
+* strobe is connected to pin PD1
+* data is connected to PD0
+* PE does not need to be connected to anything, but it could also be connected to gnd
+
+sources:
+ http://www.retrocomputing.eu/documents/5291_MaintenanceLibrary.pdf
diff --git a/keyboards/converter/ibm_5291/rules.mk b/keyboards/converter/ibm_5291/rules.mk
new file mode 100644
index 000000000..ca0c850c0
--- /dev/null
+++ b/keyboards/converter/ibm_5291/rules.mk
@@ -0,0 +1,72 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+SPLIT_KEYBOARD = no
+WAIT_FOR_USB = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+LAYOUTS_HAS_RGB = NO
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \ No newline at end of file
diff --git a/keyboards/converter/ibm_terminal/README.md b/keyboards/converter/ibm_terminal/README.md
deleted file mode 100644
index dff26e059..000000000
--- a/keyboards/converter/ibm_terminal/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-Keyboard converter for IBM terminal keyboard
-============================================
-
-This is a port of TMK's converter/terminal_usb to QMK.
-
-It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
-I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
-
-Source code: https://github.com/qmk/qmk_firmware.git
-Article: http://geekhack.org/index.php?topic=27272.0
-
-
-CONNECTION
-----------
-Keyboard ATMega32U4
-----------------------
-Data: PD2
-Clock: PD5
-
-And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
-
-
-BUILD
------
-$ git clone https://github.com/qmk/qmk_firmware.git
-$ cd qmk_firmware
-$ make converter/ibm_terminal:default
-
-
-RESOURCE
---------
-Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
-102keys(1392595): http://geekhack.org/index.php?topic=10737.0
-122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
-KbdBabel: http://www.kbdbabel.org/
-RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
-DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
-WinAVR: http://winavr.sourceforge.net/
-
-EOF
diff --git a/keyboards/converter/ibm_terminal/ibm_terminal.h b/keyboards/converter/ibm_terminal/ibm_terminal.h
index c6468349c..adf048206 100644
--- a/keyboards/converter/ibm_terminal/ibm_terminal.h
+++ b/keyboards/converter/ibm_terminal/ibm_terminal.h
@@ -19,7 +19,7 @@ void matrix_init_user(void);
* 17| |
* +---------+
*/
-#define KEYMAP( \
+#define LAYOUT( \
K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F, \
K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, \
\
@@ -45,13 +45,13 @@ void matrix_init_user(void);
{ K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ K78, K79, K7A, K7B, K7C, K7D, K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO,}, \
+ { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO } \
}
/*
* IBM Terminal keyboard 1399625, 101-key
*/
-#define KEYMAP_101( \
+#define LAYOUT_101( \
K08, K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, K57,K5F,K62, \
\
K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
@@ -76,7 +76,7 @@ void matrix_init_user(void);
{ KC_NO, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ KC_NO, K79, K7A, KC_NO, K7C, K7D, K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO,}, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO } \
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/converter/ibm_terminal/info.json b/keyboards/converter/ibm_terminal/info.json
new file mode 100644
index 000000000..f064f3c5b
--- /dev/null
+++ b/keyboards/converter/ibm_terminal/info.json
@@ -0,0 +1,245 @@
+{
+ "keyboard_name": "Keyboard converter for IBM terminal keyboard",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 24.75,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"F13", "x":3.25, "y":0},
+ {"label":"F14", "x":4.25, "y":0},
+ {"label":"F15", "x":5.25, "y":0},
+ {"label":"F16", "x":6.25, "y":0},
+ {"label":"F17", "x":7.25, "y":0},
+ {"label":"F18", "x":8.25, "y":0},
+ {"label":"F19", "x":9.25, "y":0},
+ {"label":"F20", "x":10.25, "y":0},
+ {"label":"F21", "x":11.25, "y":0},
+ {"label":"F22", "x":12.25, "y":0},
+ {"label":"F23", "x":13.25, "y":0},
+ {"label":"F24", "x":14.25, "y":0},
+ {"label":"F1", "x":3.25, "y":1},
+ {"label":"F2", "x":4.25, "y":1},
+ {"label":"F3", "x":5.25, "y":1},
+ {"label":"F4", "x":6.25, "y":1},
+ {"label":"F5", "x":7.25, "y":1},
+ {"label":"F6", "x":8.25, "y":1},
+ {"label":"F7", "x":9.25, "y":1},
+ {"label":"F8", "x":10.25, "y":1},
+ {"label":"F9", "x":11.25, "y":1},
+ {"label":"F10", "x":12.25, "y":1},
+ {"label":"F11", "x":13.25, "y":1},
+ {"label":"F12", "x":14.25, "y":1},
+ {"label":"Print Screen", "x":0, "y":3},
+ {"label":"Esc", "x":1, "y":3},
+ {"label":"Esc", "x":2.25, "y":3},
+ {"label":"1", "x":3.25, "y":3},
+ {"label":"2", "x":4.25, "y":3},
+ {"label":"3", "x":5.25, "y":3},
+ {"label":"4", "x":6.25, "y":3},
+ {"label":"5", "x":7.25, "y":3},
+ {"label":"6", "x":8.25, "y":3},
+ {"label":"7", "x":9.25, "y":3},
+ {"label":"8", "x":10.25, "y":3},
+ {"label":"9", "x":11.25, "y":3},
+ {"label":"0", "x":12.25, "y":3},
+ {"label":"-", "x":13.25, "y":3},
+ {"label":"=", "x":14.25, "y":3},
+ {"label":"No", "x":15.25, "y":3},
+ {"label":"Back Space", "x":16.25, "y":3},
+ {"label":"Insert", "x":17.5, "y":3},
+ {"label":"Home", "x":18.5, "y":3},
+ {"label":"Page Up", "x":19.5, "y":3},
+ {"label":"Num Lock", "x":20.75, "y":3},
+ {"label":"/", "x":21.75, "y":3},
+ {"label":"*", "x":22.75, "y":3},
+ {"label":"-", "x":23.75, "y":3},
+ {"label":"Scroll Lock", "x":0, "y":4},
+ {"label":"Int4", "x":1, "y":4},
+ {"label":"Tab", "x":2.25, "y":4, "w":1.5},
+ {"label":"Q", "x":3.75, "y":4},
+ {"label":"W", "x":4.75, "y":4},
+ {"label":"E", "x":5.75, "y":4},
+ {"label":"R", "x":6.75, "y":4},
+ {"label":"T", "x":7.75, "y":4},
+ {"label":"Y", "x":8.75, "y":4},
+ {"label":"U", "x":9.75, "y":4},
+ {"label":"I", "x":10.75, "y":4},
+ {"label":"O", "x":11.75, "y":4},
+ {"label":"P", "x":12.75, "y":4},
+ {"label":"[", "x":13.75, "y":4},
+ {"label":"]", "x":14.75, "y":4},
+ {"label":"No", "x":15.75, "y":4, "w":1.5},
+ {"label":"Delete", "x":17.5, "y":4},
+ {"label":"End", "x":18.5, "y":4},
+ {"label":"Page Down", "x":19.5, "y":4},
+ {"label":"7", "x":20.75, "y":4},
+ {"label":"8", "x":21.75, "y":4},
+ {"label":"9", "x":22.75, "y":4},
+ {"label":"+", "x":23.75, "y":4},
+ {"label":"Pause", "x":0, "y":5},
+ {"label":"Int5", "x":1, "y":5},
+ {"label":"Caps Lock", "x":2.25, "y":5, "w":1.75},
+ {"label":"A", "x":4, "y":5},
+ {"label":"S", "x":5, "y":5},
+ {"label":"D", "x":6, "y":5},
+ {"label":"F", "x":7, "y":5},
+ {"label":"G", "x":8, "y":5},
+ {"label":"H", "x":9, "y":5},
+ {"label":"J", "x":10, "y":5},
+ {"label":"K", "x":11, "y":5},
+ {"label":"L", "x":12, "y":5},
+ {"label":";", "x":13, "y":5},
+ {"label":"'", "x":14, "y":5},
+ {"label":"\\", "x":15, "y":5},
+ {"label":"Enter", "x":16, "y":5, "w":1.25},
+ {"label":"Up", "x":18.5, "y":5},
+ {"label":"4", "x":20.75, "y":5},
+ {"label":"5", "x":21.75, "y":5},
+ {"label":"6", "x":22.75, "y":5},
+ {"label":",", "x":23.75, "y":5},
+ {"label":"App", "x":0, "y":6},
+ {"label":"Int6", "x":1, "y":6},
+ {"label":"Shift", "x":2.25, "y":6, "w":1.25},
+ {"label":"ISO \\", "x":3.5, "y":6},
+ {"label":"Z", "x":4.5, "y":6},
+ {"label":"X", "x":5.5, "y":6},
+ {"label":"C", "x":6.5, "y":6},
+ {"label":"V", "x":7.5, "y":6},
+ {"label":"B", "x":8.5, "y":6},
+ {"label":"N", "x":9.5, "y":6},
+ {"label":"M", "x":10.5, "y":6},
+ {"label":",", "x":11.5, "y":6},
+ {"label":".", "x":12.5, "y":6},
+ {"label":"/", "x":13.5, "y":6},
+ {"label":"No", "x":14.5, "y":6},
+ {"label":"Shift", "x":15.5, "y":6, "w":1.75},
+ {"label":"Left", "x":17.5, "y":6},
+ {"label":"Int2", "x":18.5, "y":6},
+ {"label":"Right", "x":19.5, "y":6},
+ {"label":"1", "x":20.75, "y":6},
+ {"label":"2", "x":21.75, "y":6},
+ {"label":"3", "x":22.75, "y":6},
+ {"label":"Enter", "x":23.75, "y":6},
+ {"label":"RGUI", "x":0, "y":7},
+ {"label":"lgui", "x":1, "y":7},
+ {"label":"Ctrl", "x":2.25, "y":7, "w":1.5},
+ {"label":"Alt", "x":4.75, "y":7, "w":1.5},
+ {"label":"Space", "x":6.25, "y":7, "w":7},
+ {"label":"Alt", "x":13.25, "y":7, "w":1.5},
+ {"label":"Ctrl", "x":15.75, "y":7, "w":1.5},
+ {"label":"Down", "x":18.5, "y":7},
+ {"label":"No", "x":20.75, "y":7},
+ {"label":"0", "x":21.75, "y":7},
+ {"label":".", "x":22.75, "y":7},
+ {"label":"No", "x":23.75, "y":7}
+ ]
+ },
+ "LAYOUT_101": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":2},
+ {"label":"1", "x":1, "y":2},
+ {"label":"2", "x":2, "y":2},
+ {"label":"3", "x":3, "y":2},
+ {"label":"4", "x":4, "y":2},
+ {"label":"5", "x":5, "y":2},
+ {"label":"6", "x":6, "y":2},
+ {"label":"7", "x":7, "y":2},
+ {"label":"8", "x":8, "y":2},
+ {"label":"9", "x":9, "y":2},
+ {"label":"0", "x":10, "y":2},
+ {"label":"-", "x":11, "y":2},
+ {"label":"=", "x":12, "y":2},
+ {"label":"Back Space", "x":13, "y":2, "w":2},
+ {"label":"Insert", "x":15.25, "y":2},
+ {"label":"Home", "x":16.25, "y":2},
+ {"label":"Page Up", "x":17.25, "y":2},
+ {"label":"Num Lock", "x":18.5, "y":2},
+ {"label":"/", "x":19.5, "y":2},
+ {"label":"*", "x":20.5, "y":2},
+ {"label":"-", "x":21.5, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3},
+ {"label":"W", "x":2.5, "y":3},
+ {"label":"E", "x":3.5, "y":3},
+ {"label":"R", "x":4.5, "y":3},
+ {"label":"T", "x":5.5, "y":3},
+ {"label":"Y", "x":6.5, "y":3},
+ {"label":"U", "x":7.5, "y":3},
+ {"label":"I", "x":8.5, "y":3},
+ {"label":"O", "x":9.5, "y":3},
+ {"label":"P", "x":10.5, "y":3},
+ {"label":"[", "x":11.5, "y":3},
+ {"label":"]", "x":12.5, "y":3},
+ {"label":"\\", "x":13.5, "y":3, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3},
+ {"label":"End", "x":16.25, "y":3},
+ {"label":"Page Down", "x":17.25, "y":3},
+ {"label":"7", "x":18.5, "y":3},
+ {"label":"8", "x":19.5, "y":3},
+ {"label":"9", "x":20.5, "y":3},
+ {"label":"Caps Lock", "x":0, "y":4, "w":1.75},
+ {"label":"A", "x":1.75, "y":4},
+ {"label":"S", "x":2.75, "y":4},
+ {"label":"D", "x":3.75, "y":4},
+ {"label":"F", "x":4.75, "y":4},
+ {"label":"G", "x":5.75, "y":4},
+ {"label":"H", "x":6.75, "y":4},
+ {"label":"J", "x":7.75, "y":4},
+ {"label":"K", "x":8.75, "y":4},
+ {"label":"L", "x":9.75, "y":4},
+ {"label":";", "x":10.75, "y":4},
+ {"label":"'", "x":11.75, "y":4},
+ {"label":"Enter", "x":12.75, "y":4, "w":2.25},
+ {"label":"4", "x":18.5, "y":4},
+ {"label":"5", "x":19.5, "y":4},
+ {"label":"6", "x":20.5, "y":4},
+ {"label":"+", "x":21.5, "y":3, "h":2},
+ {"label":"Shift", "x":0, "y":5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":5},
+ {"label":"X", "x":3.25, "y":5},
+ {"label":"C", "x":4.25, "y":5},
+ {"label":"V", "x":5.25, "y":5},
+ {"label":"B", "x":6.25, "y":5},
+ {"label":"N", "x":7.25, "y":5},
+ {"label":"M", "x":8.25, "y":5},
+ {"label":",", "x":9.25, "y":5},
+ {"label":".", "x":10.25, "y":5},
+ {"label":"/", "x":11.25, "y":5},
+ {"label":"Shift", "x":12.25, "y":5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":5},
+ {"label":"1", "x":18.5, "y":5},
+ {"label":"2", "x":19.5, "y":5},
+ {"label":"3", "x":20.5, "y":5},
+ {"label":"Ctrl", "x":0, "y":6, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":6, "w":1.5},
+ {"label":"Space", "x":4, "y":6, "w":7},
+ {"label":"Alt", "x":11, "y":6, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":6, "w":1.5},
+ {"label":"Left", "x":15.25, "y":6},
+ {"label":"Down", "x":16.25, "y":6},
+ {"label":"Right", "x":17.25, "y":6},
+ {"label":"0", "x":18.5, "y":6, "w":2},
+ {"label":".", "x":20.5, "y":6},
+ {"label":"Enter", "x":21.5, "y":5, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/config.h b/keyboards/converter/ibm_terminal/keymaps/default/config.h
index 7fa3bf328..271f48d00 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/config.h
+++ b/keyboards/converter/ibm_terminal/keymaps/default/config.h
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-#endif
+// place overrides here
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
index 2beb51106..59187ef33 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
+++ b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
@@ -15,18 +15,12 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "ibm_terminal.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Layer 0
- KEYMAP(
+ LAYOUT(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
@@ -56,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `----' `---------------------------------------' `----' `-----------' `---------------'
*/
/*
- KEYMAP_101(
+ LAYOUT_101(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK, KC_BRK,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
index 19eb5972e..76d349920 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = no
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
index 7fa3bf328..271f48d00 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-#endif
+// place overrides here
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
index 47a5181dd..3d6da6eab 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
@@ -15,17 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "ibm_terminal.h"
-#include "action_layer.h"
-
-// Fillers to make layering clearer
-
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+#include QMK_KEYBOARD_H
enum layers {
QWE, // qwerty
@@ -159,7 +149,7 @@ const uint32_t PROGMEM unicode_map[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* qwerty */
- [QWE] = KEYMAP(
+ [QWE] = LAYOUT(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_PSCR, KC_SLCK, KC_PAUS,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
@@ -171,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* colemak */
- [COL] = KEYMAP(
+ [COL] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -183,7 +173,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* workman */
- [WOR] = KEYMAP(
+ [WOR] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -195,7 +185,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* dvorak */
- [DVO] = KEYMAP(
+ [DVO] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -207,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* system */
- [SYS] = KEYMAP(
+ [SYS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -219,7 +209,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* mouse keys */
- [MOU] = KEYMAP(
+ [MOU] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -231,7 +221,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* emoji */
- [EMO] = KEYMAP(
+ [EMO] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -243,7 +233,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/*
- [XXX] = KEYMAP(
+ [XXX] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
index 19eb5972e..76d349920 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = no
diff --git a/keyboards/converter/ibm_terminal/readme.md b/keyboards/converter/ibm_terminal/readme.md
new file mode 100644
index 000000000..b781b0468
--- /dev/null
+++ b/keyboards/converter/ibm_terminal/readme.md
@@ -0,0 +1,39 @@
+# Keyboard converter for IBM terminal keyboard
+
+This is a port of TMK's converter/terminal_usb to QMK.
+
+It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
+I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
+
+Source code: https://github.com/qmk/qmk_firmware.git
+Article: http://geekhack.org/index.php?topic=27272.0
+
+
+## Connection
+
+Keyboard | ATMega32U4
+:------- | :---------
+Data | PD2
+Clock | PD5
+
+And VCC and GND, of course. See Resource section for keyboard connector pin assign.
+
+
+## Build
+
+```
+git clone https://github.com/qmk/qmk_firmware.git
+cd qmk_firmware
+make converter/ibm_terminal:default
+```
+
+## Resource
+
+- Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
+- 102keys(1392595): http://geekhack.org/index.php?topic=10737.0
+- 122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
+- KbdBabel: http://www.kbdbabel.org/
+- RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
+- DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
+- WinAVR: http://winavr.sourceforge.net/
+
diff --git a/keyboards/converter/ibm_terminal/rules.mk b/keyboards/converter/ibm_terminal/rules.mk
index 9401cf199..77b3a6f3f 100644
--- a/keyboards/converter/ibm_terminal/rules.mk
+++ b/keyboards/converter/ibm_terminal/rules.mk
@@ -61,7 +61,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = n
CUSTOM_MATRIX = yes
diff --git a/keyboards/converter/m0110_usb/README.md b/keyboards/converter/m0110_usb/README.md
index 3041eb0b4..2e8a2eaef 100644
--- a/keyboards/converter/m0110_usb/README.md
+++ b/keyboards/converter/m0110_usb/README.md
@@ -1,19 +1,19 @@
-M0110(A) keyboard converter
-======================================
+# M0110(A) keyboard converter
+
This is a port of the original M0110 converter from TMK to QMK. The original converter was designed to work with **ATmega32U2** and **ATmega32U4** based microcontrollers to convert Apple M0110/M0110A keyboards and M0120 numpads to USB. This port has been tested to be compatible with the [**Adafruit Feather 32U4 BLE**](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le).
-### Enabling Bluetooth for the Adafruit Feather 32U4 BLE
-----------------------------------------------------
+## Enabling Bluetooth for the Adafruit Feather 32U4 BLE
+
Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` and `DESCRIPTION` values from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
-### Pins
-----
+## Pins
+
This port utilizes the same pins that the TMK converter used. `PD1` is used for `CLOCK` and `PD0` is used for the `DATA` from the keyboard. These pins can be changed in `config.h`.
-### Other important hardware notes from the original TMK converter Readme:
+## Other important hardware notes from the original TMK converter Readme:
>### Hardware
>--------
>You can buy preassembled [TMK converter] or make yourown with AVR dev board like PJRC [Teensy].
@@ -45,7 +45,7 @@ This port utilizes the same pins that the TMK converter used. `PD1` is used for
[**View the original TMK converter Repository**](https://github.com/tmk/tmk_keyboard/tree/master/converter/m0110_usb)
-### QMK Port Changelog
----------
+## QMK Port Changelog
+
- 2018/08/01 - Original Release
diff --git a/keyboards/converter/m0110_usb/info.json b/keyboards/converter/m0110_usb/info.json
new file mode 100644
index 000000000..6ef610334
--- /dev/null
+++ b/keyboards/converter/m0110_usb/info.json
@@ -0,0 +1,172 @@
+{
+ "keyboard_name": "M0110(A) keyboard converter",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 78,
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":1.5},
+ {"label":"Num Lock", "x":15.25, "y":0},
+ {"label":"=", "x":16.25, "y":0},
+ {"label":"/", "x":17.25, "y":0},
+ {"label":"*", "x":18.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"7", "x":15.25, "y":1},
+ {"label":"8", "x":16.25, "y":1},
+ {"label":"9", "x":17.25, "y":1},
+ {"label":"-", "x":18.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":1.75},
+ {"label":"4", "x":15.25, "y":2},
+ {"label":"5", "x":16.25, "y":2},
+ {"label":"6", "x":17.25, "y":2},
+ {"label":"+", "x":18.25, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Up", "x":13.5, "y":3},
+ {"label":"1", "x":15.25, "y":3},
+ {"label":"2", "x":16.25, "y":3},
+ {"label":"3", "x":17.25, "y":3},
+ {"label":"Enter", "x":18.25, "y":3, "h":2},
+ {"label":"Alt", "x":0, "y":4, "w":1.5},
+ {"label":"GUI", "x":1.5, "y":4, "w":2},
+ {"label":"Space", "x":3.5, "y":4, "w":6},
+ {"label":"MO(1)", "x":9.5, "y":4},
+ {"label":"\\", "x":10.5, "y":4},
+ {"label":"Left", "x":11.5, "y":4},
+ {"label":"Right", "x":12.5, "y":4},
+ {"label":"Down", "x":13.5, "y":4},
+ {"label":"0", "x":15.25, "y":4, "w":2},
+ {"label":".", "x":17.25, "y":4}
+ ]
+ },
+ "LAYOUT_iso": {
+ "key_count": 75,
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":1.5},
+ {"label":"Num Lock", "x":15.25, "y":0},
+ {"label":"=", "x":16.25, "y":0},
+ {"label":"/", "x":17.25, "y":0},
+ {"label":"*", "x":18.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"Return", "x":13.75, "y":1, "w":0.75, "h":2},
+ {"label":"7", "x":15.25, "y":1},
+ {"label":"8", "x":16.25, "y":1},
+ {"label":"9", "x":17.25, "y":1},
+ {"label":"-", "x":18.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"#", "x":12.75, "y":2},
+ {"label":"4", "x":15.25, "y":2},
+ {"label":"5", "x":16.25, "y":2},
+ {"label":"6", "x":17.25, "y":2},
+ {"label":"+", "x":18.25, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"\\", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"1", "x":15.25, "y":3},
+ {"label":"2", "x":16.25, "y":3},
+ {"label":"3", "x":17.25, "y":3},
+ {"label":"Enter", "x":18.25, "y":3, "h":2},
+ {"label":"Option", "x":1, "y":4},
+ {"label":"GUI", "x":2, "y":4, "w":1.5},
+ {"label":"Space", "x":3.5, "y":4, "w":7.5},
+ {"label":"Enter", "x":11, "y":4, "w":1.5},
+ {"label":"0", "x":15.25, "y":4, "w":2},
+ {"label":".", "x":17.25, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/palm_usb/config.h b/keyboards/converter/palm_usb/config.h
new file mode 100644
index 000000000..4520725a1
--- /dev/null
+++ b/keyboards/converter/palm_usb/config.h
@@ -0,0 +1,120 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+/* This code makes use of cy384's Arduino USB HID adapter for the Palm Portable
+ Keyboard, released under the BSD licence */
+
+
+
+
+#pragma once
+
+#define CUSTOM_MATRIX 2
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0100
+#define MANUFACTURER QMK
+#define PRODUCT Stowaway converter
+#define DESCRIPTION USB converter for Stowaway keyboard
+
+// IO pins to serial
+// https://deskthority.net/wiki/Arduino_Pro_Micro for pin lookup
+#define VCC_PIN D1 // pro micro 2
+#define RX_PIN D0 //pro micro 3 , was 8 on cy384
+#define RTS_PIN C6 // 5 //[ was D4 // 4 on the cy384
+#define DCD_PIN E6 //7
+
+// if using the particular arduino pinout of CY384
+#ifdef CY384
+ #define GND_PIN D7 //6
+ #define PULLDOWN_PIN B1 // 15
+#endif
+
+#ifndef HANDSPRING
+// Set to 1 for Handspring or to disable RTS/DCD based handshake.
+ #define HANDSPRING 0
+#endif
+
+#define MAXDROP 10 // check if keyboard is connected every X polling cycles
+#define SLEEP_TIMEOUT 500000 // check keyboard/reset this many millis
+
+
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 8
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+/* Serial(USART) configuration
+ * asynchronous, negative logic, 9600baud, no flow control
+ * 1-start bit, 8-data bit, non parity, 1-stop bit
+ */
+#define SERIAL_SOFT_BAUD 9600
+#define SERIAL_SOFT_PARITY_NONE
+#define SERIAL_SOFT_BIT_ORDER_LSB
+#if (HANDSPRING == 0)
+ #define SERIAL_SOFT_LOGIC_NEGATIVE //RS232 logic
+#endif
+/* RXD Port */
+#define SERIAL_SOFT_RXD_ENABLE
+
+// we are using Pro micro pin 3 / D0 as serial
+#define SERIAL_SOFT_RXD_DDR DDRD
+#define SERIAL_SOFT_RXD_PORT PORTD
+#define SERIAL_SOFT_RXD_PIN PIND
+#define SERIAL_SOFT_RXD_BIT 0
+#define SERIAL_SOFT_RXD_VECT INT0_vect
+
+/* RXD Interupt */
+#define SERIAL_SOFT_RXD_INIT() do { \
+ /* pin configuration: input with pull-up */ \
+ SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
+ SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
+ /* enable interrupt: INT0(rising edge) */ \
+ EICRA |= ((1<<ISC01)|(1<<ISC00)); \
+ EIMSK |= (1<<INT0); \
+ sei(); \
+} while (0)
+#define SERIAL_SOFT_RXD_INT_ENTER()
+#define SERIAL_SOFT_RXD_INT_EXIT() do { \
+ /* clear interrupt flag */ \
+ EIFR = (1<<INTF0); \
+} while (0)
+#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
+
+/* TXD Port */
+#define SERIAL_SOFT_TXD_ENABLE
+#define SERIAL_SOFT_TXD_DDR DDRD
+#define SERIAL_SOFT_TXD_PORT PORTD
+#define SERIAL_SOFT_TXD_PIN PIND
+#define SERIAL_SOFT_TXD_BIT 3
+#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_INIT() do { \
+ /* pin configuration: output */ \
+ SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
+ /* idle */ \
+ SERIAL_SOFT_TXD_ON(); \
+} while (0)
+
+
diff --git a/keyboards/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c
new file mode 100644
index 000000000..49212f2ef
--- /dev/null
+++ b/keyboards/converter/palm_usb/matrix.c
@@ -0,0 +1,398 @@
+/*
+Copyright 2018 milestogo
+with elements Copyright 2014 cy384 under a modified BSD license
+building on qmk structure Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+#include "timer.h"
+#include "pincontrol.h"
+
+
+/*
+ * Matrix Array usage:
+ *
+ * ROW: 12(4bits)
+ * COL: 8(3bits)
+ *
+ * +---------+
+ * 0|00 ... 07|
+ * 1|00 ... 07|
+ * :| ... |
+ * :| ... |
+ * A| |
+ * B| |
+ * +---------+
+ */
+static uint8_t matrix[MATRIX_ROWS];
+
+
+// we're going to need a sleep timer
+static uint16_t last_activity ;
+// and a byte to track duplicate up events signalling all keys up.
+static uint16_t last_upKey ;
+// serial device can disconnect. Check every MAXDROP characters.
+static uint16_t disconnect_counter = 0;
+
+
+// bitmath masks.
+#define KEY_MASK 0b10000000
+#define COL_MASK 0b00000111
+#define ROW_MASK 0b01111000
+
+
+#define ROW(code) (( code & ROW_MASK ) >>3)
+#define COL(code) ((code & COL_MASK) )
+#define KEYUP(code) ((code & KEY_MASK) >>7 )
+
+static bool is_modified = false;
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+
+void pins_init(void) {
+ // set pins for pullups, Rts , power &etc.
+
+ //print ("pins setup\n");
+ pinMode(VCC_PIN, PinDirectionOutput);
+ digitalWrite(VCC_PIN, PinLevelLow);
+
+#if ( HANDSPRING == 0)
+
+#ifdef CY835
+ pinMode(GND_PIN, PinDirectionOutput);
+ digitalWrite(GND_PIN, PinLevelLow);
+
+ pinMode(PULLDOWN_PIN, PinDirectionOutput);
+ digitalWrite(PULLDOWN_PIN, PinLevelLow);
+#endif
+
+ pinMode(DCD_PIN, PinDirectionInput);
+ pinMode(RTS_PIN, PinDirectionInput);
+#endif
+
+/* check that the other side isn't powered up.
+ test=digitalRead(DCD_PIN);
+ xprintf("b%02X:", test);
+ test=digitalRead(RTS_PIN);
+ xprintf("%02X\n", test);
+*/
+
+}
+
+uint8_t rts_reset(void) {
+ static uint8_t firstread ;
+/* bounce RTS so device knows it is rebooted */
+
+// On boot, we keep rts as input, then switch roles here
+// on leaving sleep, we toggle the same way
+
+ firstread=digitalRead(RTS_PIN);
+ // printf("r%02X:", firstread);
+
+ pinMode(RTS_PIN, PinDirectionOutput);
+
+ if (firstread == PinLevelHigh) {
+ digitalWrite(RTS_PIN, PinLevelLow);
+ }
+ _delay_ms(10);
+ digitalWrite(RTS_PIN, PinLevelHigh);
+
+
+/* the future is Arm
+ if (palReadPad(RTS_PIN_IOPRT) == PinLevelLow)
+ {
+ _delay_ms(10);
+ palSetPadMode(RTS_PINn_IOPORT, PinDirectionOutput_PUSHPULL);
+ palSetPad(RTS_PORT, RTS_PIN);
+ }
+ else
+ {
+ palSetPadMode(RTS_PIN_RTS_PORT, PinDirectionOutput_PUSHPULL);
+ palSetPad(RTS_PORT, RTS_PIN);
+ palClearPad(RTS_PORT, RTS_PIN);
+ _delay_ms(10);
+ palSetPad(RTS_PORT, RTS_PIN);
+ }
+*/
+
+
+ _delay_ms(5);
+ //print("rts\n");
+ return 1;
+}
+
+uint8_t get_serial_byte(void) {
+ static uint8_t code;
+ while(1) {
+ code = serial_recv();
+ if (code) {
+ debug_hex(code); debug(" ");
+ return code;
+ }
+ }
+}
+
+uint8_t palm_handshake(void) {
+ // assumes something has seen DCD go high, we've toggled RTS
+ // and we now need to verify handshake.
+ // listen for up to 4 packets before giving up.
+ // usually I get the sequence FF FA FD
+ static uint8_t codeA=0;
+
+ for (uint8_t i=0; i < 5; i++) {
+ codeA=get_serial_byte();
+ if ( 0xFA == codeA) {
+ if( 0xFD == get_serial_byte()) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+uint8_t palm_reset(void) {
+ print("@");
+ rts_reset(); // shouldn't need to power cycle.
+
+ if ( palm_handshake() ) {
+ last_activity = timer_read();
+ return 1;
+ } else {
+ print("failed reset");
+ return 0;
+ }
+
+}
+
+uint8_t handspring_handshake(void) {
+ // should be sent 15 ms after power up.
+ // listen for up to 4 packets before giving up.
+ static uint8_t codeA=0;
+
+ for (uint8_t i=0; i < 5; i++) {
+ codeA=get_serial_byte();
+ if ( 0xF9 == codeA) {
+ if( 0xFB == get_serial_byte()) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+uint8_t handspring_reset(void) {
+ digitalWrite(VCC_PIN, PinLevelLow);
+ _delay_ms(5);
+ digitalWrite(VCC_PIN, PinLevelHigh);
+
+ if ( handspring_handshake() ) {
+ last_activity = timer_read();
+ disconnect_counter=0;
+ return 1;
+ } else {
+ print("-HSreset");
+ return 0;
+ }
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ //debug_matrix =true;
+
+ serial_init(); // arguments all #defined
+
+#if (HANDSPRING == 0)
+ pins_init(); // set all inputs and outputs.
+#endif
+
+ print("power up\n");
+ digitalWrite(VCC_PIN, PinLevelHigh);
+
+ // wait for DCD strobe from keyboard - it will do this
+ // up to 3 times, then the board needs the RTS toggled to try again
+
+#if ( HANDSPRING == 1)
+ if ( handspring_handshake() ) {
+ last_activity = timer_read();
+ } else {
+ print("failed handshake");
+ _delay_ms(1000);
+ //BUG /should/ power cycle or toggle RTS & reset, but this usually works.
+ }
+
+#else /// Palm / HP device with DCD
+ while( digitalRead(DCD_PIN) != PinLevelHigh ) {;}
+ print("dcd\n");
+
+ rts_reset(); // at this point the keyboard should think all is well.
+
+ if ( palm_handshake() ) {
+ last_activity = timer_read();
+ } else {
+ print("failed handshake");
+ _delay_ms(1000);
+ //BUG /should/ power cycle or toggle RTS & reset, but this usually works.
+ }
+
+#endif
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ matrix_init_quantum();
+ return;
+
+
+}
+
+
+uint8_t matrix_scan(void)
+{
+ uint8_t code;
+ code = serial_recv();
+ if (!code) {
+/*
+ disconnect_counter ++;
+ if (disconnect_counter > MAXDROP) {
+ // set all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+ }
+*/
+ // check if the keyboard is asleep.
+ if (timer_elapsed(last_activity) > SLEEP_TIMEOUT) {
+#if(HANDSPRING ==0 )
+ palm_reset();
+#else
+ handspring_reset();
+#endif
+ return 0;
+ }
+
+ }
+
+ last_activity = timer_read();
+ disconnect_counter=0; // if we are getting serial data, we're connected.
+
+ debug_hex(code); debug(" ");
+
+
+ switch (code) {
+ case 0xFD: // unexpected reset byte 2
+ print("rstD ");
+ return 0;
+ case 0xFA: // unexpected reset
+ print("rstA ");
+ return 0;
+ }
+
+ if (KEYUP(code)) {
+ if (code == last_upKey) {
+ // all keys are not pressed.
+ // Manual says to disable all modifiers left open now.
+ // but that could defeat sticky keys.
+ // BUG? dropping this byte.
+ last_upKey=0;
+ return 0;
+ }
+ // release
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ last_upKey=code;
+ }
+ } else {
+ // press
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= (1<<COL(code));
+
+ }
+ }
+
+ matrix_scan_quantum();
+ return code;
+}
+
+bool matrix_is_modified(void)
+{
+ return is_modified;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<<col));
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < matrix_rows(); row++) {
+ phex(row); print(": ");
+ pbin_reverse(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop(matrix[i]);
+ }
+ return count;
+}
diff --git a/keyboards/converter/palm_usb/readme.md b/keyboards/converter/palm_usb/readme.md
new file mode 100644
index 000000000..17ba329da
--- /dev/null
+++ b/keyboards/converter/palm_usb/readme.md
@@ -0,0 +1,96 @@
+# Stowaway Serial keyboard to USB protocol converter
+
+A converter for Palm Pilot era Stowaway serial keyboards.
+
+Makes extensive use of the code from [cy384](https://github.com/cy384/ppk_usb). Ported to QMK by [milestogo](https://github.com/milestogo).
+
+Hardware Supported: See hardware section below
+Hardware Availability: self-built
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/palm_usb/stowaway:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+
+## Hardware
+
+Target MCU is ATMega32u4 but other USB capable AVRs should also work.
+
+cy843 has a very specific way of wiring in order to fit all pins in sequence. It breaks
+qmk because the Arduino softserial library uses different pins from QMK.
+
+I've wired the pro micro hardware as follows.
+
+Label| TX0,RX1,GND,GND,2 ,3 ,4 ,5 ,6 ,7
+Palm | , , * ,GND,VCC,RX ,NC ,RTS,nc ,DCD
+MCU | ,D1 ,D0 , ,C6 , ,E6
+
+\* The RX line from the keyboard should be conected to a ~10K ohm pull down resistor to ground.
+RX --|--3
+ 10K
+ |
+ GND
+
+
+Power management is not implemented yet, this just reboots the keyboard frequently.
+
+### Keyboards:
+
+Think Outside Stowaway Keyboards
+There are at least 5 different versions of these keyboards out there.
+
+Group 1: Palm 3, Palm 5 & HP Journada 540, and Compaq iPaq keyboards. These share
+the same RTS protocol, but with different pinouts for each device.
+
+Group 2: Handspring keyboards. These don't do handshaking protocol, and use TTL signal.
+Set HANDSPRING to 1 in config.h
+
+Group 3: IRDA models. Untested but theoretically serial.
+
+### Connectors
+
+See https://github.com/cy384/ppk_usb for wiring & sample 3d printable sockets.
+
+Only Palm3 wiring has been tested.
+RXD pin is output from keyboard to MCU's RX.
+
+Viewed from left to right with the keyboard in typing position.
+
+Palm3: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND]
+Palm5: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND] (same order, different connector)
+Handspring: [VCC/TXD, NC, NC, NC, GND, NC, NC, RXD]
+Journada: [NC, NC, NC, GND, NC, RTS, NC, DTR/VCC, RXD, DCD, NC] [GND-IN, VCC-IN]
+Ipaq: [NC, NC, DTR/VCC, NC, NC, RTS, NC, RXD, DCD, GND, NC, NC]
+
+### Protocol
+
+ Signal: Asynchronous, Negative logic, 9600baud, No Flow control
+ Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
+
+ AVR USART engine expects positive logic while stowaway keyboard signal is negative.
+ To use AVR UART engine you need external inverter in front of RX and TX pin.
+ Otherwise you can software serial routine to communicate the keyboard.
+
+This converter uses software method, you doesn't need any inverter part.
+
+
+Commands From System To Keyboard
+ none
+
+Commands From Keyboard To System
+
+ 0xFA Reset/Ready Response(followed by 0xFD)
+
+References
+
+* http://www.splorp.com/pdf/stowawayhwref.pdf
+
+### Todo
+- Test on anything but a palm 3 model keyboard.
+- Change all of the soft serial to match the new Helix based code so that it is easier
+to switch pins.
+- The driver should check for a keyboard that pressed the delete key then disconnected.
+Check every MAXDROP scans that the keyboard is there, and if not, clear the matrix.
+Not implemented yet, since matrix scan is so much faster than serial.
diff --git a/keyboards/converter/palm_usb/rules.mk b/keyboards/converter/palm_usb/rules.mk
new file mode 100644
index 000000000..35ea3995e
--- /dev/null
+++ b/keyboards/converter/palm_usb/rules.mk
@@ -0,0 +1,46 @@
+MCU = atmega32u4 # Teensy 2.0
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = caterina
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = no
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+CUSTOM_MATRIX = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+#HARDWARE_SERIAL = yes
+
+SRC += matrix.c
+
+ifdef HARDWARE_SERIAL
+ # untested with palm_usb
+ SRC += protocol/serial_uart.c
+ OPT_DEFS += -DHARDWARE_SERIAL
+else
+ SRC += protocol/serial_soft.c
+endif
+
+DEFAULT_FOLDER = converter/palm_usb/stowaway
+
diff --git a/keyboards/converter/palm_usb/stowaway/info.json b/keyboards/converter/palm_usb/stowaway/info.json
new file mode 100644
index 000000000..8188d14bd
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Palm Stowaway Serial",
+ "keyboard_folder": "converter/palm_usb/stowaway",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"1", "x":0.5, "y":0},
+ {"label":"2", "x":1.5, "y":0},
+ {"label":"3", "x":2.5, "y":0},
+ {"label":"4", "x":3.5, "y":0},
+ {"label":"5", "x":4.5, "y":0},
+ {"label":"6", "x":5.5, "y":0},
+ {"label":"7", "x":6.5, "y":0},
+ {"label":"8", "x":7.5, "y":0},
+ {"label":"9", "x":8.5, "y":0},
+ {"label":"0", "x":9.5, "y":0},
+ {"label":"MINS", "x":10.5, "y":0},
+ {"label":"EQL", "x":11.5, "y":0},
+ {"label":"BACK", "x":12.5, "y":0, "w":1.5},
+ {"label":"APP0", "x":14.25, "y":1, "h":0.6875},
+ {"label":"TAB", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"LBRC", "x":11, "y":1},
+ {"label":"RBRC", "x":12, "y":1},
+ {"label":"BSLS", "x":13, "y":1},
+ {"label":"APP1", "x":14.25, "y":1.6875, "h":0.6875},
+ {"label":"CAPS", "x":0, "y":2, "w":1.25},
+ {"label":"A", "x":1.25, "y":2},
+ {"label":"S", "x":2.25, "y":2},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2},
+ {"label":"G", "x":5.25, "y":2},
+ {"label":"H", "x":6.25, "y":2},
+ {"label":"J", "x":7.25, "y":2},
+ {"label":"K", "x":8.25, "y":2},
+ {"label":"L", "x":9.25, "y":2},
+ {"label":"SCLN", "x":10.25, "y":2},
+ {"label":"QUOT", "x":11.25, "y":2},
+ {"label":"ENT", "x":12.25, "y":2, "w":1.75},
+ {"label":"APP2", "x":14.25, "y":2.375, "h":0.6875},
+ {"label":"LSFT", "x":0, "y":3, "w":1.75},
+ {"label":"Z", "x":1.75, "y":3},
+ {"label":"X", "x":2.75, "y":3},
+ {"label":"C", "x":3.75, "y":3},
+ {"label":"V", "x":4.75, "y":3},
+ {"label":"B", "x":5.75, "y":3},
+ {"label":"N", "x":6.75, "y":3},
+ {"label":"M", "x":7.75, "y":3},
+ {"label":"COMM", "x":8.75, "y":3},
+ {"label":"DOT", "x":9.75, "y":3},
+ {"label":"SLSH", "x":10.75, "y":3},
+ {"label":"RSFT", "x":11.75, "y":3, "w":1.25},
+ {"label":"UP", "x":13, "y":3},
+ {"label":"APP3", "x":14.25, "y":3.0625, "h":0.6875},
+ {"label":"LCTL", "x":0, "y":4, "w":1.25},
+ {"label":"FN", "x":1.25, "y":4},
+ {"label":"LALT", "x":2.25, "y":4},
+ {"label":"CMD", "x":3.25, "y":4},
+ {"label":"SPACE", "x":4.25, "y":4, "w":3.5},
+ {"label":"SPACE/New", "x":7.75, "y":4},
+ {"label":"GRAVE", "x":8.75, "y":4},
+ {"label":"DONE", "x":9.75, "y":4},
+ {"label":"DEL", "x":10.75, "y":4, "w":1.25},
+ {"label":"LEFT", "x":12, "y":4},
+ {"label":"DOWN", "x":13, "y":4},
+ {"label":"RIGHT", "x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c b/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c
new file mode 100644
index 000000000..09b41f95c
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/*
+ Copyright 2018 milestogo
+
+ 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/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+_QWERTY=0,
+_CDH,
+_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK, APP0,
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
+ LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
+
+*/
+ [_QWERTY] = LAYOUT( /* Base */
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, TG(_CDH),
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
+ ),
+
+ [_CDH] = LAYOUT( /* Base */
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN] = LAYOUT( // FN Key
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/converter/palm_usb/stowaway/rules.mk b/keyboards/converter/palm_usb/stowaway/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/rules.mk
diff --git a/keyboards/converter/palm_usb/stowaway/stowaway.h b/keyboards/converter/palm_usb/stowaway/stowaway.h
new file mode 100644
index 000000000..71af9bf4a
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/stowaway.h
@@ -0,0 +1,53 @@
+/*
+Copyright 2018 milestogo
+
+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/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+
+/* Stowaway Keyboard
+ based on matrix from http://www.splorp.com/pdf/stowawayhwref.pdf
+
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK APP0,
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
+ LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
+
+*/
+#define LAYOUT( \
+ K000, K001, K002, K004, K005, K006, K007, K064, K065, K066, K060, K061, K062, K063,\
+ K031, K011, K012, K013, K014, K015, K016, K074, K075, K076, K077, K070, K071, K072, K073,\
+ K030, K021, K022, K023, K024, K025, K026, K084, K085, K086, K087, K080, K081, K082,\
+ K110, K003, K020, K054, K055, K056, K057, K094, K095, K096, K090, K111, K091, K092,\
+ K032, K042, K043, K010, K027, K067, K017, K097, K100, K101, K102, K103 \
+) { \
+ { K000, K001, K002 , K003, K004, K005, K006, K007 }, \
+ { K010, K011, K012 , K013, K014, K015, K016, K017 }, \
+ { K020, K021, K022 , K023, K024, K025, K026, K027 }, \
+ { K030, K031, K032 , KC_NO,KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, K042 , K043, KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO,K054, K055, K056, K057 }, \
+ { K060, K061, K062 , K063, K064, K065, K066, K067 }, \
+ { K070, K071, K072 , K073, K074, K075, K076, K077 }, \
+ { K080, K081, K082 , KC_NO,K084, K085, K086, K087 }, \
+ { K090, K091, K092 , KC_NO,K094, K095, K096, K097 }, \
+ { K100, K101, K102 , K103, KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { K110, K111, KC_NO, KC_NO,KC_NO, KC_NO,KC_NO, KC_NO } \
+}
+
diff --git a/keyboards/converter/sun_usb/command_extra.c b/keyboards/converter/sun_usb/command_extra.c
new file mode 100644
index 000000000..756a9160b
--- /dev/null
+++ b/keyboards/converter/sun_usb/command_extra.c
@@ -0,0 +1,64 @@
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+bool sun_bell = false;
+bool sun_click = false;
+
+
+bool command_extra(uint8_t code)
+{
+ switch (code) {
+ case KC_H:
+ case KC_SLASH: /* ? */
+ print("\n\n----- Sun converter Help -----\n");
+ print("Home: Toggle Bell\n");
+ print("End: Toggle Click\n");
+ print("PgUp: LED all On\n");
+ print("PgDown: LED all Off\n");
+ print("Insert: Layout\n");
+ print("Delete: Reset\n");
+ return false;
+ case KC_DEL:
+ print("Reset\n");
+ serial_send(0x01);
+ break;
+ case KC_HOME:
+ sun_bell = !sun_bell;
+ if (sun_bell) {
+ print("Bell On\n");
+ serial_send(0x02);
+ } else {
+ print("Bell Off\n");
+ serial_send(0x03);
+ }
+ break;
+ case KC_END:
+ sun_click = !sun_click;
+ if (sun_click) {
+ print("Click On\n");
+ serial_send(0x0A);
+ } else {
+ print("Click Off\n");
+ serial_send(0x0B);
+ }
+ break;
+ case KC_PGUP:
+ print("LED all on\n");
+ serial_send(0x0E);
+ serial_send(0xFF);
+ break;
+ case KC_PGDOWN:
+ print("LED all off\n");
+ serial_send(0x0E);
+ serial_send(0x00);
+ break;
+ case KC_INSERT:
+ print("layout\n");
+ serial_send(0x0F);
+ break;
+ default:
+ xprintf("Unknown extra command: %02X\n", code);
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/converter/sun_usb/config.h b/keyboards/converter/sun_usb/config.h
new file mode 100644
index 000000000..f7ad41639
--- /dev/null
+++ b/keyboards/converter/sun_usb/config.h
@@ -0,0 +1,88 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define CUSTOM_MATRIX 2
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3333
+#define DEVICE_VER 0x0100
+#define MANUFACTURER QMK
+#define PRODUCT Sun keyboard converter
+#define DESCRIPTION USB converter for Sun type 5 keyboard
+
+/* matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+/* Serial(USART) configuration
+ * asynchronous, negative logic, 1200baud, no flow control
+ * 1-start bit, 8-data bit, non parity, 1-stop bit
+ */
+#define SERIAL_SOFT_BAUD 1200
+#define SERIAL_SOFT_PARITY_NONE
+#define SERIAL_SOFT_BIT_ORDER_LSB
+#define SERIAL_SOFT_LOGIC_NEGATIVE
+/* RXD Port */
+#define SERIAL_SOFT_RXD_ENABLE
+#define SERIAL_SOFT_RXD_DDR DDRD
+#define SERIAL_SOFT_RXD_PORT PORTD
+#define SERIAL_SOFT_RXD_PIN PIND
+#define SERIAL_SOFT_RXD_BIT 2
+#define SERIAL_SOFT_RXD_VECT INT2_vect
+/* RXD Interupt */
+#define SERIAL_SOFT_RXD_INIT() do { \
+ /* pin configuration: input with pull-up */ \
+ SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
+ SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
+ /* enable interrupt: INT2(rising edge) */ \
+ EICRA |= ((1<<ISC21)|(1<<ISC20)); \
+ EIMSK |= (1<<INT2); \
+ sei(); \
+} while (0)
+#define SERIAL_SOFT_RXD_INT_ENTER()
+#define SERIAL_SOFT_RXD_INT_EXIT() do { \
+ /* clear interrupt flag */ \
+ EIFR = (1<<INTF2); \
+} while (0)
+#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
+/* TXD Port */
+#define SERIAL_SOFT_TXD_ENABLE
+#define SERIAL_SOFT_TXD_DDR DDRD
+#define SERIAL_SOFT_TXD_PORT PORTD
+#define SERIAL_SOFT_TXD_PIN PIND
+#define SERIAL_SOFT_TXD_BIT 3
+#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_INIT() do { \
+ /* pin configuration: output */ \
+ SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
+ /* idle */ \
+ SERIAL_SOFT_TXD_ON(); \
+} while (0)
+
+#endif
diff --git a/keyboards/converter/sun_usb/led.c b/keyboards/converter/sun_usb/led.c
new file mode 100644
index 000000000..a409699e9
--- /dev/null
+++ b/keyboards/converter/sun_usb/led.c
@@ -0,0 +1,32 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+void led_set(uint8_t usb_led)
+{
+ uint8_t sun_led = 0;
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) sun_led |= (1<<0);
+ if (usb_led & (1<<USB_LED_COMPOSE)) sun_led |= (1<<1);
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) sun_led |= (1<<3);
+ xprintf("LED: %02X\n", usb_led);
+
+ serial_send(0x0E);
+ serial_send(sun_led);
+}
diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c
new file mode 100644
index 000000000..c379e8237
--- /dev/null
+++ b/keyboards/converter/sun_usb/matrix.c
@@ -0,0 +1,197 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+/*
+ * Matrix Array usage:
+ *
+ * ROW: 16(4bits)
+ * COL: 8(3bits)
+ *
+ * 8bit wide
+ * +---------+
+ * 0|00 ... 07|
+ * 1|08 ... 0F|
+ * :| ... |
+ * :| ... |
+ * E|70 ... 77|
+ * F|78 ... 7F|
+ * +---------+
+ */
+static uint8_t matrix[MATRIX_ROWS];
+#define ROW(code) ((code>>3)&0xF)
+#define COL(code) (code&0x07)
+
+static bool is_modified = false;
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ /* DDRD |= (1<<6); */
+ /* PORTD |= (1<<6); */
+ debug_enable = true;
+
+ serial_init();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ /* // wait for keyboard coming up */
+ /* // otherwise LED status update fails */
+ /* print("Reseting "); */
+ /* while (1) { */
+ /* print("."); */
+ /* while (serial_recv()); */
+ /* serial_send(0x01); */
+ /* _delay_ms(500); */
+ /* if (serial_recv() == 0xFF) { */
+ /* _delay_ms(500); */
+ /* if (serial_recv() == 0x04) */
+ /* break; */
+ /* } */
+ /* } */
+ /* print(" Done\n"); */
+
+ /* PORTD &= ~(1<<6); */
+
+ matrix_init_quantum();
+ return;
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t code;
+ code = serial_recv();
+ if (!code) return 0;
+
+ debug_hex(code); debug(" ");
+
+ switch (code) {
+ case 0xFF: // reset success: FF 04
+ print("reset: ");
+ _delay_ms(500);
+ code = serial_recv();
+ xprintf("%02X\n", code);
+ if (code == 0x04) {
+ // LED status
+ led_set(host_keyboard_leds());
+ }
+ return 0;
+ case 0xFE: // layout: FE <layout>
+ print("layout: ");
+ _delay_ms(500);
+ xprintf("%02X\n", serial_recv());
+ return 0;
+ case 0x7E: // reset fail: 7E 01
+ print("reset fail: ");
+ _delay_ms(500);
+ xprintf("%02X\n", serial_recv());
+ return 0;
+ case 0x7F:
+ // all keys up
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+ return 0;
+ }
+
+ if (code&0x80) {
+ // break code
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ }
+ } else {
+ // make code
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= (1<<COL(code));
+ }
+ }
+
+ matrix_scan_quantum();
+ return code;
+}
+
+bool matrix_is_modified(void)
+{
+ return is_modified;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<<col));
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < matrix_rows(); row++) {
+ phex(row); print(": ");
+ pbin_reverse(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop(matrix[i]);
+ }
+ return count;
+}
diff --git a/keyboards/converter/sun_usb/readme.md b/keyboards/converter/sun_usb/readme.md
new file mode 100644
index 000000000..3470e6091
--- /dev/null
+++ b/keyboards/converter/sun_usb/readme.md
@@ -0,0 +1,89 @@
+# Sun to USB keyboard protocol converter
+
+A converter for using non-USB Sun keyboards.
+
+Original code from the [TMK firmware](https://github.com/tmk/tmk_keyboard/tree/master/converter/sun_usb). Ported to QMK by [Yann Hodique](https://github.com/sigma).
+
+Keyboard Maintainer: [Yann Hodique](https://github.com/sigma)
+Hardware Supported: See hardware section below
+Hardware Availability: self-built
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/sun_usb/type5:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+
+## Hardware
+
+Target MCU is ATMega32u4 but other USB capable AVR will also work. The maintainer mostly uses Teensy 2.0 boards.
+Supported keyboards: Sun Type 3 and 5 Keyboards,
+
+### Connector
+
+8Pin mini DIN
+
+ ___ ___
+ / |_| \
+ / 8 7 6 \
+ | 5 4 3 |
+ \_ 2 1 _/
+ \_____/
+ (receptacle)
+
+
+Wiring:
+
+ Pin mini DIN MCU
+ ----------------------------------
+ 1 GND GND
+ 2 GND GND
+ 3 5V
+ 4 RX/TX(Mouse)
+ 5 RX PD3
+ 6 TX PD2
+ 7 GND GND
+ 8 5V VCC
+
+
+### Protocol
+
+ Signal: Asynchronous, Negative logic, 1200baud, No Flow control
+ Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
+
+ AVR USART engine expects positive logic while Sun keyboard signal is negative.
+ To use AVR UART engine you need external inverter in front of RX and TX pin.
+ Otherwise you can software serial routine to communicate the keyboard.
+
+This converter uses software method, you doesn't need any inverter part.
+
+
+Commands From System To Keyboard
+
+ 0x01 Reset
+ Keyboard responds with following byte sequence:
+ Success: 0xFF 0x04 0x7F
+ Fail: 0x7E 0x01 0x7F
+ 0x02 Bell On
+ 0x03 Bell Off
+ 0x0A Click On
+ 0x0B Click Off
+ 0x0E LED
+ followed by LED status byte:
+ bit: 3 2 1 0
+ LED: CapsLk ScrLk Compose NumLk
+ 0x0F Layout
+ Keyboard responds with 'Layout Response' 0xFE 0xXX
+
+Commands From Keyboard To System
+
+ 0x7F Idle
+ means no keys pressed.
+ 0xFE Layout Response
+ 0xFF Reset Response(followed by 0x04)
+
+References
+
+* http://kentie.net/article/sunkbd/page2.htm
+* http://kentie.net/article/sunkbd/KBD.pdf
diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk
new file mode 100644
index 000000000..3cf503b1d
--- /dev/null
+++ b/keyboards/converter/sun_usb/rules.mk
@@ -0,0 +1,44 @@
+MCU = atmega32u4 # Teensy 2.0
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = lufa-dfu
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = yes
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+CUSTOM_MATRIX = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+#HARDWARE_SERIAL = yes
+
+SRC += matrix.c led.c
+
+ifdef HARDWARE_SERIAL
+ SRC += protocol/serial_uart.c
+ OPT_DEFS += -DHARDWARE_SERIAL
+else
+ SRC += protocol/serial_soft.c
+endif
+
+DEFAULT_FOLDER = converter/sun_usb/type5
diff --git a/keyboards/converter/sun_usb/type3/info.json b/keyboards/converter/sun_usb/type3/info.json
new file mode 100644
index 000000000..f8525b15c
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/info.json
@@ -0,0 +1,109 @@
+{
+ "keyboard_name": "Sun Type 3",
+ "keyboard_folder": "converter/sun_usb/type3",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 21,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"STOP", "x":0, "y":0},
+ {"label":"AGAIN", "x":1, "y":0},
+ {"label":"CAPS LOCK", "x":2.5, "y":0},
+ {"label":"F2", "x":3.5, "y":0},
+ {"label":"F3", "x":4.5, "y":0, "w":2},
+ {"label":"F4", "x":6.5, "y":0, "w":2},
+ {"label":"F5", "x":8.5, "y":0, "w":2},
+ {"label":"F6", "x":10.5, "y":0, "w":2},
+ {"label":"F7", "x":12.5, "y":0, "w":2},
+ {"label":"F8", "x":14.5, "y":0},
+ {"label":"F9", "x":15.5, "y":0},
+ {"label":"BACKSPACE", "x":16.5, "y":0},
+ {"label":"R1", "x":18, "y":0},
+ {"label":"R2", "x":19, "y":0},
+ {"label":"R3", "x":20, "y":0},
+ {"label":"PROPS", "x":0, "y":1},
+ {"label":"UNDO", "x":1, "y":1},
+ {"label":"ESC", "x":2.5, "y":1},
+ {"label":"1", "x":3.5, "y":1},
+ {"label":"2", "x":4.5, "y":1},
+ {"label":"3", "x":5.5, "y":1},
+ {"label":"4", "x":6.5, "y":1},
+ {"label":"5", "x":7.5, "y":1},
+ {"label":"6", "x":8.5, "y":1},
+ {"label":"7", "x":9.5, "y":1},
+ {"label":"8", "x":10.5, "y":1},
+ {"label":"9", "x":11.5, "y":1},
+ {"label":"0", "x":12.5, "y":1},
+ {"label":"MINUS", "x":13.5, "y":1},
+ {"label":"EQUAL", "x":14.5, "y":1},
+ {"label":"BACKSLASH", "x":15.5, "y":1},
+ {"label":"GRAVE", "x":16.5, "y":1},
+ {"label":"R4", "x":18, "y":1},
+ {"label":"R5", "x":19, "y":1},
+ {"label":"R6", "x":20, "y":1},
+ {"label":"FRONT", "x":0, "y":2},
+ {"label":"COPY", "x":1, "y":2},
+ {"label":"TAB", "x":2.5, "y":2, "w":1.5},
+ {"label":"Q", "x":4, "y":2},
+ {"label":"W", "x":5, "y":2},
+ {"label":"E", "x":6, "y":2},
+ {"label":"R", "x":7, "y":2},
+ {"label":"T", "x":8, "y":2},
+ {"label":"Y", "x":9, "y":2},
+ {"label":"U", "x":10, "y":2},
+ {"label":"I", "x":11, "y":2},
+ {"label":"O", "x":12, "y":2},
+ {"label":"P", "x":13, "y":2},
+ {"label":"LBRACKET", "x":14, "y":2},
+ {"label":"RBRACKET", "x":15, "y":2},
+ {"label":"DELETE", "x":16, "y":2, "w":1.5},
+ {"label":"R7", "x":18, "y":2},
+ {"label":"R8", "x":19, "y":2},
+ {"label":"R9", "x":20, "y":2},
+ {"label":"OPEN", "x":0, "y":3},
+ {"label":"PASTE", "x":1, "y":3},
+ {"label":"CONTROL", "x":2.5, "y":3, "w":1.75},
+ {"label":"A", "x":4.25, "y":3},
+ {"label":"S", "x":5.25, "y":3},
+ {"label":"D", "x":6.25, "y":3},
+ {"label":"F", "x":7.25, "y":3},
+ {"label":"G", "x":8.25, "y":3},
+ {"label":"H", "x":9.25, "y":3},
+ {"label":"J", "x":10.25, "y":3},
+ {"label":"K", "x":11.25, "y":3},
+ {"label":"L", "x":12.25, "y":3},
+ {"label":"SEMICOLON", "x":13.25, "y":3},
+ {"label":"QUOTE", "x":14.25, "y":3},
+ {"label":"RETURN", "x":15.25, "y":3, "w":2.25},
+ {"label":"R10", "x":18, "y":3},
+ {"label":"R11", "x":19, "y":3},
+ {"label":"R12", "x":20, "y":3},
+ {"label":"FIND", "x":0, "y":4},
+ {"label":"CUT", "x":1, "y":4},
+ {"label":"LSHIFT", "x":2.5, "y":4, "w":2.25},
+ {"label":"Z", "x":4.75, "y":4},
+ {"label":"X", "x":5.75, "y":4},
+ {"label":"C", "x":6.75, "y":4},
+ {"label":"V", "x":7.75, "y":4},
+ {"label":"B", "x":8.75, "y":4},
+ {"label":"N", "x":9.75, "y":4},
+ {"label":"M", "x":10.75, "y":4},
+ {"label":"COMMA", "x":11.75, "y":4},
+ {"label":"PERIOD", "x":12.75, "y":4},
+ {"label":"SLASH", "x":13.75, "y":4},
+ {"label":"RSHIFT", "x":14.75, "y":4, "w":1.75},
+ {"label":"LINE FEED", "x":16.5, "y":4},
+ {"label":"R13", "x":18, "y":4},
+ {"label":"R14", "x":19, "y":4},
+ {"label":"R15", "x":20, "y":4},
+ {"label":"CAPS", "x":2.5, "y":5, "w":1.25},
+ {"label":"LEFT", "x":3.75, "y":5, "w":1.5},
+ {"label":"SPACE", "x":5.25, "y":5, "w":9},
+ {"label":"RIGHT", "x":14.25, "y":5, "w":1.5},
+ {"label":"ALTERNATE", "x":15.75, "y":5, "w":1.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c b/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c
new file mode 100644
index 000000000..e8b4799b9
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+ Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT(
+ KC_F10,KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_BSPC, KC_VOLD, KC_MUTE, KC_VOLU,
+ KC_F12,KC_F13, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT,
+ KC_F14,KC_F15, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P, KC_LBRC,KC_RBRC, KC_DEL, KC_HOME, KC_UP, KC_PGUP,
+ KC_F16,KC_F17, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_LEFT,KC_INSERT,KC_RIGHT,
+ KC_F18,KC_F19, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,KC_RCTL, KC_END, KC_DOWN,KC_PGDOWN,
+ KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI
+ ),
+};
diff --git a/keyboards/converter/sun_usb/type3/rules.mk b/keyboards/converter/sun_usb/type3/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/rules.mk
diff --git a/keyboards/converter/sun_usb/type3/type3.h b/keyboards/converter/sun_usb/type3/type3.h
new file mode 100644
index 000000000..f6f14f4ef
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/type3.h
@@ -0,0 +1,66 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#ifndef TYPE3_H
+#define TYPE3_H
+
+#include "quantum.h"
+
+/* Sun type 3 keyboard
+,-------. ,-----------------------------------------------------------. ,-----------.
+| 01| 03| | 05| 06| 08| 0A| 0C| 0E| 10| 11| 12| 2B| | 15| 16| 17|
+|-------| |-----------------------------------------------------------| |-----------|
+| 19| 1A| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2D| 2E| 2F|
+|-------| |-----------------------------------------------------------| |-----------|
+| 31| 33| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 44| 45| 46|
+|-------| |-----------------------------------------------------------| |-----------|
+| 48| 49| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D|
+|-------| |-----------------------------------------------------------| |-----------|
+| 5F| 61| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 6F| | 70| 71| 72|
+`-------' |-----------------------------------------------------------| `-----------'
+ | 77 | 78 | 79 | 7A | 13 |
+ `-----------------------------------------------------------'
+*/
+
+
+#define LAYOUT( \
+ K01,K03, K05,K06, K08, K0A, K0C, K0E, K10,K11,K12,K2B, K15,K16,K17, \
+ K19,K1A, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2D,K2E,K2F, \
+ K31,K33, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K44,K45,K46, \
+ K48,K49, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K5F,K61, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E,K6F, K70,K71,K72, \
+ K77,K78, K79, K7A,K13 \
+) { \
+ { KC_NO, K01 , KC_NO, K03 , KC_NO, K05 , K06 , KC_NO }, \
+ { K08 , KC_NO, K0A , KC_NO, K0C , KC_NO, K0E , KC_NO }, \
+ { K10 , K11 , K12 , K13 , KC_NO, K15 , K16 , K17 }, \
+ { KC_NO, K19 , K1A , KC_NO, KC_NO, K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , KC_NO, K2D , K2E , K2F }, \
+ { KC_NO, K31 , KC_NO, K33 , KC_NO, K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , KC_NO, K44 , K45 , K46 , KC_NO }, \
+ { K48 , K49 , KC_NO, KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , KC_NO, K5B , K5C , K5D , KC_NO, K5F }, \
+ { KC_NO, K61 , KC_NO, K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , K6F }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, KC_NO, K77 }, \
+ { K78 , K79 , K7A , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/converter/sun_usb/type5/info.json b/keyboards/converter/sun_usb/type5/info.json
new file mode 100644
index 000000000..6785bbc07
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/info.json
@@ -0,0 +1,381 @@
+{
+ "keyboard_name": "Sun Type 5",
+ "keyboard_folder": "converter/sun_usb/type5",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 24.75,
+ "height": 7,
+ "layouts": {
+ "LAYOUT_jp_unix": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"NO", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"ESC", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSLASH", "x":15.25, "y":2},
+ {"label":"GRAVE", "x":16.25, "y":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSPACE", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"LCTRL", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"CAPS LOCK", "x":2.25, "y":6},
+ {"label":"LALT", "x":3.25, "y":6},
+ {"label":"LGUI", "x":4.25, "y":6},
+ {"label":"HENKAN", "x":5.25, "y":6, "w":1.5},
+ {"label":"SPACE", "x":6.75, "y":6, "w":5},
+ {"label":"MUHENKAN", "x":11.75, "y":6, "w":1.5},
+ {"label":"KANA", "x":13.25, "y":6},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ },
+ "LAYOUT_us_unix": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"NO", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"ESC", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSLASH", "x":15.25, "y":2},
+ {"label":"GRAVE", "x":16.25, "y":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSPACE", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"LCTRL", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"CAPS LOCK", "x":2.25, "y":6, "w":1.75},
+ {"label":"LALT", "x":4, "y":6},
+ {"label":"LGUI", "x":5, "y":6},
+ {"label":"SPACE", "x":6, "y":6, "w":8.25},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"ESC", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"GRAVE", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSPACE", "x":15.25, "y":2, "w":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSLASH", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"CAPS LOCK", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"LCTRL", "x":2.25, "y":6, "w":1.75},
+ {"label":"LALT", "x":4, "y":6},
+ {"label":"LGUI", "x":5, "y":6},
+ {"label":"SPACE", "x":6, "y":6, "w":8.25},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c
new file mode 100644
index 000000000..5e04ff4b3
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* LAYOUT_jp_unix is a superset of the other layouts, hence the default */
+ LAYOUT_jp_unix(
+ KC_HELP, KC_NO, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_PWR,
+ KC_STOP, KC_AGAIN, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ KC_MENU, KC_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_SELECT, KC_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_EXECUTE,KC_PASTE, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_FIND, KC_CUT, KC_CAPS,KC_LALT,KC_LGUI,KC_HENK, KC_SPC, KC_MHEN,KC_KANA,KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c
new file mode 100644
index 000000000..1c7ea3efc
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c
@@ -0,0 +1,31 @@
+/*
+Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma
+
+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/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "sigma.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+ {
+ [_QWERTY] = LAYOUT_us_unix(
+ KC_LEAD, KC_SCRT, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_OS_LOCK,
+ KC_STOP, KC_OS_REDO, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ VRSN, KC_OS_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_MAKE, KC_OS_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_EXECUTE,KC_OS_PASTE, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_FIND, KC_OS_CUT, KC_CAPS,KC_LGUI,KC_LALT, KC_SPC, KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT
+ ),
+ };
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md
new file mode 100644
index 000000000..6ae011f86
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md
@@ -0,0 +1,12 @@
+Overview
+========
+
+This is my personal Sun Type 5 configuration.
+
+How to build
+------------
+
+ make converter/sun_usb/type5:sigma:teensy
+
+Layers
+------
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk
new file mode 100644
index 000000000..09a3af829
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk
@@ -0,0 +1 @@
+BOOTLOADER = halfkay
diff --git a/keyboards/converter/sun_usb/type5/rules.mk b/keyboards/converter/sun_usb/type5/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/rules.mk
diff --git a/keyboards/converter/sun_usb/type5/type5.h b/keyboards/converter/sun_usb/type5/type5.h
new file mode 100644
index 000000000..da66d80ab
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/type5.h
@@ -0,0 +1,148 @@
+/*
+ Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#ifndef TYPE5_H
+#define TYPE5_H
+
+#include "quantum.h"
+
+/* sun type 5 keyboard, JP Unix-style
+,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47|
+|-------| |-----------------------------------------------------------| |------------ |---------------|
+| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| |
+|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+|-------| |-----------------------------------------------------------| ,---. |-----------|---|
+| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+| 5F| 61| | 77 | 13| 78 |*73 | 79 |*74 |*75| 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+`-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_jp_unix( \
+ K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K77,K13, K78, K73, K79, K74, K75, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , K73 , K74 , K75 , K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+
+/* Sun type 5 keyboard, US Unix-style
+,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47|
+|-------| |-----------------------------------------------------------| |------------ |---------------|
+| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| |
+|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+|-------| |-----------------------------------------------------------| ,---. |-----------|---|
+| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+| 5F| 61| | 77 | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+`-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_us_unix( \
+ K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K77,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+
+/* Sun type 5 keyboard, US ANSI-style
+ ,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+ | 76 | | 1D| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+ `-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+ ,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+ | 01| 03| | 2A| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2B | | 2C| 34| 60| | 62| 2E| 2F| 47|
+ |-------| |-----------------------------------------------------------| |------------ |---------------|
+ | 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 58 | | 42| 4A| 7B| | 44| 45| 46| |
+ |-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+ | 31| 33| | 77 | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+ |-------| |-----------------------------------------------------------| ,---. |-----------|---|
+ | 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+ |-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+ | 5F| 61| | 4C | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+ `-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_ansi( \
+ K76, K1D, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K2A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29, K2B, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K58, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K77, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K4C,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , KC_NO,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+#endif
diff --git a/keyboards/converter/usb_usb/ble/config.h b/keyboards/converter/usb_usb/ble/config.h
index 45aa778d5..3bf3b2963 100644
--- a/keyboards/converter/usb_usb/ble/config.h
+++ b/keyboards/converter/usb_usb/ble/config.h
@@ -1,13 +1,15 @@
-#ifndef CONFIG_BLE_H
-#define CONFIG_BLE_H
+#pragma once
#undef PRODUCT
#define PRODUCT QMK BLE Adapter
#undef DESCRIPTION
-#define DESCRIPTION
+#define DESCRIPTION
// Turn off the mode leds on the BLE module
#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0
#define ADAFRUIT_BLE_ENABLE_POWER_LED 0
-#endif
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_ONESHOT
+
diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk
index 16090962d..f5ab3880b 100644
--- a/keyboards/converter/usb_usb/ble/rules.mk
+++ b/keyboards/converter/usb_usb/ble/rules.mk
@@ -1,3 +1,23 @@
BLUETOOTH = AdafruitBLE
ADAFRUIT_BLE_ENABLE = yes
F_CPU = 8000000
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+EXTRAFLAGS += -flto
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
new file mode 100644
index 000000000..af3dd0b5e
--- /dev/null
+++ b/keyboards/converter/usb_usb/info.json
@@ -0,0 +1,485 @@
+{
+ "keyboard_name": "converter/usb_usb",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"F13", "x":2, "y":0},
+ {"label":"F14", "x":3, "y":0},
+ {"label":"F15", "x":4, "y":0},
+ {"label":"F16", "x":5, "y":0},
+ {"label":"F17", "x":6.5, "y":0},
+ {"label":"F18", "x":7.5, "y":0},
+ {"label":"F19", "x":8.5, "y":0},
+ {"label":"F20", "x":9.5, "y":0},
+ {"label":"F21", "x":11, "y":0},
+ {"label":"F22", "x":12, "y":0},
+ {"label":"F23", "x":13, "y":0},
+ {"label":"F24", "x":14, "y":0},
+ {"label":"Esc", "x":0, "y":1},
+ {"label":"F1", "x":2, "y":1},
+ {"label":"F2", "x":3, "y":1},
+ {"label":"F3", "x":4, "y":1},
+ {"label":"F4", "x":5, "y":1},
+ {"label":"F5", "x":6.5, "y":1},
+ {"label":"F6", "x":7.5, "y":1},
+ {"label":"F7", "x":8.5, "y":1},
+ {"label":"F8", "x":9.5, "y":1},
+ {"label":"F9", "x":11, "y":1},
+ {"label":"F10", "x":12, "y":1},
+ {"label":"F11", "x":13, "y":1},
+ {"label":"F12", "x":14, "y":1},
+ {"label":"Print Screen", "x":15.25, "y":1},
+ {"label":"Scroll Lock", "x":16.25, "y":1},
+ {"label":"Pause", "x":17.25, "y":1},
+ {"label":"Volume Down", "x":18.5, "y":1},
+ {"label":"Vol Up", "x":19.5, "y":1},
+ {"label":"Mute", "x":20.5, "y":1},
+ {"label":"Power", "x":21.5, "y":1},
+ {"label":"Help", "x":22.75, "y":1},
+ {"label":"`", "x":0, "y":2.5},
+ {"label":"1", "x":1, "y":2.5},
+ {"label":"2", "x":2, "y":2.5},
+ {"label":"3", "x":3, "y":2.5},
+ {"label":"4", "x":4, "y":2.5},
+ {"label":"5", "x":5, "y":2.5},
+ {"label":"6", "x":6, "y":2.5},
+ {"label":"7", "x":7, "y":2.5},
+ {"label":"8", "x":8, "y":2.5},
+ {"label":"9", "x":9, "y":2.5},
+ {"label":"0", "x":10, "y":2.5},
+ {"label":"-", "x":11, "y":2.5},
+ {"label":"=", "x":12, "y":2.5},
+ {"label":"Yen", "x":13, "y":2.5},
+ {"label":"Back Space", "x":14, "y":2.5},
+ {"label":"Insert", "x":15.25, "y":2.5},
+ {"label":"Home", "x":16.25, "y":2.5},
+ {"label":"Page Up", "x":17.25, "y":2.5},
+ {"label":"Num Lock", "x":18.5, "y":2.5},
+ {"label":"Num /", "x":19.5, "y":2.5},
+ {"label":"Num *", "x":20.5, "y":2.5},
+ {"label":"Num -", "x":21.5, "y":2.5},
+ {"label":"Stop", "x":22.75, "y":2.5},
+ {"label":"Again", "x":23.75, "y":2.5},
+ {"label":"Tab", "x":0, "y":3.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3.5},
+ {"label":"W", "x":2.5, "y":3.5},
+ {"label":"E", "x":3.5, "y":3.5},
+ {"label":"R", "x":4.5, "y":3.5},
+ {"label":"T", "x":5.5, "y":3.5},
+ {"label":"Y", "x":6.5, "y":3.5},
+ {"label":"U", "x":7.5, "y":3.5},
+ {"label":"I", "x":8.5, "y":3.5},
+ {"label":"O", "x":9.5, "y":3.5},
+ {"label":"P", "x":10.5, "y":3.5},
+ {"label":"[", "x":11.5, "y":3.5},
+ {"label":"]", "x":12.5, "y":3.5},
+ {"label":"\\", "x":13.5, "y":3.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3.5},
+ {"label":"End", "x":16.25, "y":3.5},
+ {"label":"Page Down", "x":17.25, "y":3.5},
+ {"label":"Num 7", "x":18.5, "y":3.5},
+ {"label":"Num 8", "x":19.5, "y":3.5},
+ {"label":"Num 9", "x":20.5, "y":3.5},
+ {"label":"Num +", "x":21.5, "y":3.5},
+ {"label":"Menu", "x":22.75, "y":3.5},
+ {"label":"Undo", "x":23.75, "y":3.5},
+ {"label":"Caps Lock", "x":0, "y":4.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":4.5},
+ {"label":"S", "x":2.75, "y":4.5},
+ {"label":"D", "x":3.75, "y":4.5},
+ {"label":"F", "x":4.75, "y":4.5},
+ {"label":"G", "x":5.75, "y":4.5},
+ {"label":"H", "x":6.75, "y":4.5},
+ {"label":"J", "x":7.75, "y":4.5},
+ {"label":"K", "x":8.75, "y":4.5},
+ {"label":"L", "x":9.75, "y":4.5},
+ {"label":";", "x":10.75, "y":4.5},
+ {"label":"\"", "x":11.75, "y":4.5},
+ {"label":"ISO #", "x":12.75, "y":4.5},
+ {"label":"Enter", "x":13.75, "y":4.5, "w":1.25},
+ {"label":"Num 4", "x":18.5, "y":4.5},
+ {"label":"Num 5", "x":19.5, "y":4.5},
+ {"label":"Num 6", "x":20.5, "y":4.5},
+ {"label":"Num , ", "x":21.5, "y":4.5},
+ {"label":"Select", "x":22.75, "y":4.5},
+ {"label":"Copy", "x":23.75, "y":4.5},
+ {"label":"Shift", "x":0, "y":5.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":5.5},
+ {"label":"Z", "x":2.25, "y":5.5},
+ {"label":"X", "x":3.25, "y":5.5},
+ {"label":"C", "x":4.25, "y":5.5},
+ {"label":"V", "x":5.25, "y":5.5},
+ {"label":"B", "x":6.25, "y":5.5},
+ {"label":"N", "x":7.25, "y":5.5},
+ {"label":"M", "x":8.25, "y":5.5},
+ {"label":",", "x":9.25, "y":5.5},
+ {"label":".", "x":10.25, "y":5.5},
+ {"label":"/", "x":11.25, "y":5.5},
+ {"label":"JIS \\", "x":12.25, "y":5.5},
+ {"label":"Shift", "x":13.25, "y":5.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":5.5},
+ {"label":"Num 1", "x":18.5, "y":5.5},
+ {"label":"Num 2", "x":19.5, "y":5.5},
+ {"label":"Num 3", "x":20.5, "y":5.5},
+ {"label":"Num =", "x":21.5, "y":5.5},
+ {"label":"Exec", "x":22.75, "y":5.5},
+ {"label":"Paste", "x":23.75, "y":5.5},
+ {"label":"Ctrl", "x":0, "y":6.5},
+ {"label":"GUI", "x":1, "y":6.5},
+ {"label":"Alt", "x":2, "y":6.5},
+ {"label":"JIS Muhenkan", "x":3, "y":6.5},
+ {"label":"Hanja", "x":4, "y":6.5},
+ {"label":"Space", "x":5, "y":6.5, "w":3},
+ {"label":"Hangul/English", "x":8, "y":6.5},
+ {"label":"JIS Henkan", "x":9, "y":6.5},
+ {"label":"JIS Katakana/Hiragana", "x":10, "y":6.5},
+ {"label":"Alt", "x":11, "y":6.5},
+ {"label":"GUI", "x":12, "y":6.5},
+ {"label":"App", "x":13, "y":6.5},
+ {"label":"Ctrl", "x":14, "y":6.5},
+ {"label":"Left", "x":15.25, "y":6.5},
+ {"label":"Down", "x":16.25, "y":6.5},
+ {"label":"Right", "x":17.25, "y":6.5},
+ {"label":"Num 0", "x":18.5, "y":6.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":6.5},
+ {"label":"Num Enter", "x":21.5, "y":6.5},
+ {"label":"Find", "x":22.75, "y":6.5},
+ {"label":"Cut", "x":23.75, "y":6.5}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "x":21.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"\\", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 6", "x":20.5, "y":3.5},
+ {"label":"Num +", "x":21.5, "y":2.5, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2}
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "x":21.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Num +", "x":21.5, "y":2.5, "h":2},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"ISO #", "x":12.75, "y":3.5},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 6", "x":20.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5}
+ ]
+ },
+ "LAYOUT_jis": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"JIS Hankaku / Zenkaku", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"&circ;", "x":12, "y":1.5},
+ {"label":"JIS Yen", "x":13, "y":1.5},
+ {"label":"Back Space", "x":14, "y":1.5},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "x":21.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"@", "x":11.5, "y":2.5},
+ {"label":"[", "x":12.5, "y":2.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Num +", "x":21.5, "y":2.5, "h":2},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":":", "x":11.75, "y":3.5},
+ {"label":"]", "x":12.75, "y":3.5},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 6", "x":20.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"JIS \\", "x":12.25, "y":4.5},
+ {"label":"Shift", "x":13.25, "y":4.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"JIS Muhenkan", "x":3.75, "y":5.5, "w":1.25},
+ {"label":"Space", "x":5, "y":5.5, "w":2.5},
+ {"label":"JIS Henkan", "x":7.5, "y":5.5, "w":1.25},
+ {"label":"JIS Hiragana / Katakana", "x":8.75, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/usb_usb/keymap.c b/keyboards/converter/usb_usb/keymap.c
deleted file mode 100644
index 16f2a2809..000000000
--- a/keyboards/converter/usb_usb/keymap.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-Copyright 2017 Balz Guenat <balz.guenat@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/>.
-*/
-
-#include "keymap_common.h"
-
-
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
- /* 0: plain Qwerty without layer switching
- * ,---------------. ,---------------. ,---------------.
- * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
- * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help |
- * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn|
- * |-----------------------------------------------------------| |-----------| |---------------| |-------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und|
- * |-----------------------------------------------------------| `-----------' |---------------| |-------|
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy|
- * |-----------------------------------------------------------| ,---. |---------------| |-------|
- * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst|
- * |-----------------------------------------------------------| ,-----------. |---------------| |-------|
- * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
- * `-----------------------------------------------------------' `-----------' `---------------' `-------'
- */
- // KEYMAP_ALL(
- // F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- // ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- // GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- // TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- // CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- // LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- // LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- // ),
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
- KEYMAP_ALL(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
- GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- CAPS,MPRV,VOLU,MNXT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,MUTE,VOLD,MPLY,TRNS,TRNS,LEFT,DOWN,UP, RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS
- ),
-};
-
-// const action_t fn_actions[] PROGMEM = {};
-
-const action_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
-
-
-
-/*
- * Keymap samples
- */
-#if 0
- /* ANSI layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
- * |-----------------------------------------------------------| `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* ISO layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Retn| |Del|End|PgD| | 7| 8| 9| +|
- * |------------------------------------------------------` | `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #| | | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shft|\ | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3|Ent|
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_ISO(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
- ),
-
- /* JIS layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| @| [| Retn| |Del|End|PgD| | 7| 8| 9| +|
- * |------------------------------------------------------` | `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| ]| | | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shft | Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|Ent|
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_JIS(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
- ),
-
- /* Colemak http://colemak.com
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return |
- * |-----------------------------------------------------------|
- * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- CAPS,A, O, E, U, I, D, H, T, N, S, MINS, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,SCLN,Q, J, K, X, B, M, W, V, Z, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- CAPS,A, S, H, T, G, Y, N, E, O, I, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
-
-/*
- * SpaceFN layout
- * http://geekhack.org/index.php?topic=51069.0
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: plain Qwerty
- * ,---------------. ,---------------. ,---------------.
- * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
- * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help |
- * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn|
- * |-----------------------------------------------------------| |-----------| |---------------| |-------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und|
- * |-----------------------------------------------------------| `-----------' |---------------| |-------|
- * |LCtrl | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy|
- * |-----------------------------------------------------------| ,---. |---------------| |-------|
- * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst|
- * |-----------------------------------------------------------| ,-----------. |---------------| |-------|
- * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
- * `-----------------------------------------------------------' `-----------' `---------------' `-------'
- */
- [0] = KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, FN0, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* 1: SpaceFN
- * ,-----------------------------------------------------------.
- * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * |Caps | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- * |-----------------------------------------------------------|
- * | | | | | | |PgU|Lef|Dow|Rig| | | |
- * |-----------------------------------------------------------|
- * | | | | | |Spc|PgD|` |~ | |Men| |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- [1] = KEYMAP_ALL(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- CAPS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, INS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS
- ),
-};
-
-const action_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
-
-#endif
diff --git a/keyboards/converter/usb_usb/keymaps/ble/keymap.c b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
index 094bd9569..190b3319f 100644
--- a/keyboards/converter/usb_usb/keymaps/ble/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,9 +36,9 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
@@ -47,18 +47,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
index 0cc66fd53..6dfd1ad79 100644
--- a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,7 +36,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- // KEYMAP_ALL(
+ // LAYOUT_all(
// F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
// ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
// GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -45,17 +45,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
// LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
// LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
// ),
- KEYMAP_ALL(
+ LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE,
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT
),
- KEYMAP_ALL(
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ LAYOUT_all(
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,
KC_GRV, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
KC_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
@@ -65,18 +65,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
@@ -113,7 +101,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP(
+ LAYOUT_ansi(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
@@ -138,13 +126,13 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP_ISO(
+ LAYOUT_iso(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
+ LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
),
/* JIS layout
@@ -163,13 +151,13 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP_JIS(
+ LAYOUT_jis(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
+ LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
),
/* Colemak http://colemak.com
@@ -185,7 +173,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -208,7 +196,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `-----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -231,7 +219,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `-----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -265,7 +253,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -288,7 +276,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
- [1] = KEYMAP_ALL(
+ [1] = LAYOUT_all(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
diff --git a/keyboards/converter/usb_usb/keymaps/default/keymap.c b/keyboards/converter/usb_usb/keymaps/default/keymap.c
index 9817a607d..170ed31ef 100644
--- a/keyboards/converter/usb_usb/keymaps/default/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/default/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,17 +36,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE,
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT
),
- [1] = KEYMAP_ALL(
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ [1] = LAYOUT_all(
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
@@ -56,18 +56,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/converter/usb_usb/usb_usb.h b/keyboards/converter/usb_usb/usb_usb.h
index c31fae1d0..e0c7c9c0d 100644
--- a/keyboards/converter/usb_usb/usb_usb.h
+++ b/keyboards/converter/usb_usb/usb_usb.h
@@ -62,7 +62,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* TODO: use same keycode to pass through instead of KC_NO?
*/
-#define KEYMAP_ALL( \
+#define LAYOUT_all( \
K68,K69,K6A,K6B,K6C,K6D,K6E,K6F,K70,K71,K72,K73, \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, K81,K80,K7F,K66, K75, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, K78,K79, \
@@ -120,21 +120,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP( \
+#define LAYOUT_ansi( \
K29,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C,K4D,K4E, K5F,K60,K61, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, K5C,K5D,K5E,K57, \
KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B, \
KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K31, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, KC_NO, K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K31, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, KC_NO, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
/* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
@@ -152,21 +152,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP_ISO( \
+#define LAYOUT_iso( \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K28, K4C,K4D,K4E, K5F,K60,K61,K57, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \
KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B,K58, \
KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, K64, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
/* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
@@ -184,20 +184,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP_JIS( \
+#define LAYOUT_jis( \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K28, K4C,K4D,K4E, K5F,K60,K61,K57, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \
KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,K58, \
KE0,KE3,KE2,K8B, K2C, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,K8B,KC_NO, K2C, KC_NO, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, K89, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, K87, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, K8B, KC_NO, K2C, KC_NO, K8A, K88, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
#endif
diff --git a/keyboards/converter/xt_usb/README.md b/keyboards/converter/xt_usb/README.md
new file mode 100644
index 000000000..40b265a18
--- /dev/null
+++ b/keyboards/converter/xt_usb/README.md
@@ -0,0 +1,17 @@
+XT to USB keyboard converter
+==============================
+This is a port of TMK's converter/xt_usb to QMK.
+
+This firmware converts XT keyboard protocol to USB.(It supports Scan Code Set 1.)
+
+
+Connect Wires
+-------------
+1. Connect **Vcc** and **GND**.
+2. Connect **Clock** and **Data** line. **Clock** is on `PD1`, **Data** on `PD0` by default. And optionally you can use `PB7` for **Reset**.(Compatible to Soarer's converter) To change pin configuration edit `config.h`.
+3. You need pull-up resistor. **1K-10K Ohm** will be OK.
+
+
+XT keyboard protocol resource
+------------------------------
+https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol
diff --git a/keyboards/converter/xt_usb/config.h b/keyboards/converter/xt_usb/config.h
new file mode 100644
index 000000000..963a3c639
--- /dev/null
+++ b/keyboards/converter/xt_usb/config.h
@@ -0,0 +1,78 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#pragma once
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6512
+#define DEVICE_VER 0x0001
+#define MANUFACTURER QMK
+#define PRODUCT XT keyboard converter
+#define DESCRIPTION convert XT keyboard to USB
+
+
+/* matrix size */
+#define MATRIX_ROWS 16 // keycode bit: 3-0
+#define MATRIX_COLS 8 // keycode bit: 6-4
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+//#define NO_SUSPEND_POWER_DOWN
+
+/*
+ * XT Pin interrupt
+ */
+#define XT_CLOCK_PORT PORTD
+#define XT_CLOCK_PIN PIND
+#define XT_CLOCK_DDR DDRD
+#define XT_CLOCK_BIT 1
+#define XT_DATA_PORT PORTD
+#define XT_DATA_PIN PIND
+#define XT_DATA_DDR DDRD
+#define XT_DATA_BIT 0
+#define XT_RST_PORT PORTB
+#define XT_RST_PIN PINB
+#define XT_RST_DDR DDRB
+#define XT_RST_BIT 7
+
+/* hard reset: low pulse for 500ms and after that HiZ for safety */
+#define XT_RESET() do { \
+ XT_RST_PORT &= ~(1<<XT_RST_BIT); \
+ XT_RST_DDR |= (1<<XT_RST_BIT); \
+ _delay_ms(500); \
+ XT_RST_DDR &= ~(1<<XT_RST_BIT); \
+} while (0)
+
+/* INT1 for falling edge of clock line */
+#define XT_INT_INIT() do { \
+ EICRA |= ((1<<ISC11) | \
+ (0<<ISC10)); \
+} while (0)
+/* clears flag and enables interrupt */
+#define XT_INT_ON() do { \
+ EIFR |= (1<<INTF1); \
+ EIMSK |= (1<<INT1); \
+} while (0)
+#define XT_INT_OFF() do { \
+ EIMSK &= ~(1<<INT1); \
+} while (0)
+#define XT_INT_VECT INT1_vect
diff --git a/keyboards/converter/xt_usb/info.json b/keyboards/converter/xt_usb/info.json
new file mode 100644
index 000000000..1fde77d1f
--- /dev/null
+++ b/keyboards/converter/xt_usb/info.json
@@ -0,0 +1,229 @@
+{
+ "keyboard_name": "IBM PC XT",
+ "keyboard_folder": "converter/xt_usb",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 21,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_xt": {
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"F2", "x":1, "y":0},
+ {"label":"Esc", "x":2.25, "y":0},
+ {"label":"1", "x":3.25, "y":0},
+ {"label":"2", "x":4.25, "y":0},
+ {"label":"3", "x":5.25, "y":0},
+ {"label":"4", "x":6.25, "y":0},
+ {"label":"5", "x":7.25, "y":0},
+ {"label":"6", "x":8.25, "y":0},
+ {"label":"7", "x":9.25, "y":0},
+ {"label":"8", "x":10.25, "y":0},
+ {"label":"9", "x":11.25, "y":0},
+ {"label":"0", "x":12.25, "y":0},
+ {"label":"-", "x":13.25, "y":0},
+ {"label":"=", "x":14.25, "y":0},
+ {"label":"Backspace", "x":15.25, "y":0, "w":1.75},
+ {"label":"Num Lock", "x":17, "y":0, "w":2},
+ {"label":"Scroll Lock", "x":19, "y":0, "w":2},
+ {"label":"F3", "x":0, "y":1},
+ {"label":"F4", "x":1, "y":1},
+ {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+ {"label":"Q", "x":3.75, "y":1},
+ {"label":"W", "x":4.75, "y":1},
+ {"label":"E", "x":5.75, "y":1},
+ {"label":"R", "x":6.75, "y":1},
+ {"label":"T", "x":7.75, "y":1},
+ {"label":"Y", "x":8.75, "y":1},
+ {"label":"U", "x":9.75, "y":1},
+ {"label":"I", "x":10.75, "y":1},
+ {"label":"O", "x":11.75, "y":1},
+ {"label":"P", "x":12.75, "y":1},
+ {"label":"[", "x":13.75, "y":1},
+ {"label":"]", "x":14.75, "y":1},
+ {"label":"7", "x":17, "y":1},
+ {"label":"8", "x":18, "y":1},
+ {"label":"9", "x":19, "y":1},
+ {"label":"-", "x":20, "y":1},
+ {"label":"F5", "x":0, "y":2},
+ {"label":"F6", "x":1, "y":2},
+ {"label":"Ctrl", "x":2.25, "y":2, "w":1.75},
+ {"label":"A", "x":4, "y":2},
+ {"label":"S", "x":5, "y":2},
+ {"label":"D", "x":6, "y":2},
+ {"label":"F", "x":7, "y":2},
+ {"label":"G", "x":8, "y":2},
+ {"label":"H", "x":9, "y":2},
+ {"label":"J", "x":10, "y":2},
+ {"label":"K", "x":11, "y":2},
+ {"label":"L", "x":12, "y":2},
+ {"label":";", "x":13, "y":2},
+ {"label":"'", "x":14, "y":2},
+ {"label":"`", "x":15, "y":2},
+ {"label":"Enter", "x":16, "y":1, "h":2},
+ {"label":"4", "x":17, "y":2},
+ {"label":"5", "x":18, "y":2},
+ {"label":"6", "x":19, "y":2},
+ {"label":"F7", "x":0, "y":3},
+ {"label":"F8", "x":1, "y":3},
+ {"label":"Shift", "x":2.25, "y":3, "w":1.25},
+ {"label":"\\", "x":3.5, "y":3},
+ {"label":"Z", "x":4.5, "y":3},
+ {"label":"X", "x":5.5, "y":3},
+ {"label":"C", "x":6.5, "y":3},
+ {"label":"V", "x":7.5, "y":3},
+ {"label":"B", "x":8.5, "y":3},
+ {"label":"N", "x":9.5, "y":3},
+ {"label":"M", "x":10.5, "y":3},
+ {"label":",", "x":11.5, "y":3},
+ {"label":".", "x":12.5, "y":3},
+ {"label":"/", "x":13.5, "y":3},
+ {"label":"Shift", "x":14.5, "y":3, "w":1.5},
+ {"label":"Print Screen", "x":16, "y":3},
+ {"label":"1", "x":17, "y":3},
+ {"label":"2", "x":18, "y":3},
+ {"label":"3", "x":19, "y":3},
+ {"label":"+", "x":20, "y":2, "h":3},
+ {"label":"F9", "x":0, "y":4},
+ {"label":"F10", "x":1, "y":4},
+ {"label":"Alt", "x":2.25, "y":4, "w":2},
+ {"label":"Space", "x":4.25, "y":4, "w":9.75},
+ {"label":"Caps Lock", "x":14, "y":4, "w":2},
+ {"label":"0", "x":16, "y":4, "w":2},
+ {"label":".", "x":18, "y":4, "w":2}
+ ]
+ },
+ "LAYOUT": {
+ "layout": [
+ {"label":"F13", "x":2, "y":0},
+ {"label":"F14", "x":3, "y":0},
+ {"label":"F15", "x":4, "y":0},
+ {"label":"F16", "x":5, "y":0},
+ {"label":"F17", "x":6, "y":0},
+ {"label":"F18", "x":7, "y":0},
+ {"label":"F19", "x":8, "y":0},
+ {"label":"F20", "x":9, "y":0},
+ {"label":"F21", "x":10, "y":0},
+ {"label":"F22", "x":11, "y":0},
+ {"label":"F23", "x":12, "y":0},
+ {"label":"F24", "x":13, "y":0},
+ {"label":"Esc", "x":0, "y":1},
+ {"label":"F1", "x":2, "y":1},
+ {"label":"F2", "x":3, "y":1},
+ {"label":"F3", "x":4, "y":1},
+ {"label":"F4", "x":5, "y":1},
+ {"label":"F5", "x":6, "y":1},
+ {"label":"F6", "x":7, "y":1},
+ {"label":"F7", "x":8, "y":1},
+ {"label":"F8", "x":9, "y":1},
+ {"label":"F9", "x":10, "y":1},
+ {"label":"F10", "x":11, "y":1},
+ {"label":"F11", "x":12, "y":1},
+ {"label":"F12", "x":13, "y":1},
+ {"label":"Print Screen", "x":15.25, "y":1},
+ {"label":"Scroll Lock", "x":16.25, "y":1},
+ {"label":"Pause", "x":17.25, "y":1},
+ {"label":"Volume Down", "x":19.5, "y":1},
+ {"label":"Volume Up", "x":20.5, "y":1},
+ {"label":"Mute", "x":21.5, "y":1},
+ {"label":"`", "x":0, "y":2.5},
+ {"label":"1", "x":1, "y":2.5},
+ {"label":"2", "x":2, "y":2.5},
+ {"label":"3", "x":3, "y":2.5},
+ {"label":"4", "x":4, "y":2.5},
+ {"label":"5", "x":5, "y":2.5},
+ {"label":"6", "x":6, "y":2.5},
+ {"label":"7", "x":7, "y":2.5},
+ {"label":"8", "x":8, "y":2.5},
+ {"label":"9", "x":9, "y":2.5},
+ {"label":"0", "x":10, "y":2.5},
+ {"label":"-", "x":11, "y":2.5},
+ {"label":"=", "x":12, "y":2.5},
+ {"label":"JP Yen", "x":13, "y":2.5},
+ {"label":"Back Space", "x":14, "y":2.5},
+ {"label":"Insert", "x":15.25, "y":2.5},
+ {"label":"Home", "x":16.25, "y":2.5},
+ {"label":"Page Up", "x":17.25, "y":2.5},
+ {"label":"Num Lock", "x":18.5, "y":2.5},
+ {"label":"KP/", "x":19.5, "y":2.5},
+ {"label":"KP*", "x":20.5, "y":2.5},
+ {"label":"KP-", "x":21.5, "y":2.5},
+ {"label":"Tab", "x":0, "y":3.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3.5},
+ {"label":"W", "x":2.5, "y":3.5},
+ {"label":"E", "x":3.5, "y":3.5},
+ {"label":"R", "x":4.5, "y":3.5},
+ {"label":"T", "x":5.5, "y":3.5},
+ {"label":"Y", "x":6.5, "y":3.5},
+ {"label":"U", "x":7.5, "y":3.5},
+ {"label":"I", "x":8.5, "y":3.5},
+ {"label":"O", "x":9.5, "y":3.5},
+ {"label":"P", "x":10.5, "y":3.5},
+ {"label":"[", "x":11.5, "y":3.5},
+ {"label":"]", "x":12.5, "y":3.5},
+ {"label":"\\", "x":13.5, "y":3.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3.5},
+ {"label":"End", "x":16.25, "y":3.5},
+ {"label":"Page Down", "x":17.25, "y":3.5},
+ {"label":"KP 7", "x":18.5, "y":3.5},
+ {"label":"KP 8", "x":19.5, "y":3.5},
+ {"label":"KP 9", "x":20.5, "y":3.5},
+ {"label":"KP+", "x":21.5, "y":3.5},
+ {"label":"Caps Lock", "x":0, "y":4.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":4.5},
+ {"label":"S", "x":2.75, "y":4.5},
+ {"label":"D", "x":3.75, "y":4.5},
+ {"label":"F", "x":4.75, "y":4.5},
+ {"label":"G", "x":5.75, "y":4.5},
+ {"label":"H", "x":6.75, "y":4.5},
+ {"label":"J", "x":7.75, "y":4.5},
+ {"label":"K", "x":8.75, "y":4.5},
+ {"label":"L", "x":9.75, "y":4.5},
+ {"label":";", "x":10.75, "y":4.5},
+ {"label":"'", "x":11.75, "y":4.5},
+ {"label":"ISO #", "x":12.75, "y":4.5},
+ {"label":"Enter", "x":13.75, "y":4.5, "w":1.25},
+ {"label":"KP 4", "x":18.5, "y":4.5},
+ {"label":"KP 5", "x":19.5, "y":4.5},
+ {"label":"KP 6", "x":20.5, "y":4.5},
+ {"label":"KP ,", "x":21.5, "y":4.5},
+ {"label":"Shift", "x":0, "y":5.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":5.5},
+ {"label":"Z", "x":2.25, "y":5.5},
+ {"label":"X", "x":3.25, "y":5.5},
+ {"label":"C", "x":4.25, "y":5.5},
+ {"label":"V", "x":5.25, "y":5.5},
+ {"label":"B", "x":6.25, "y":5.5},
+ {"label":"N", "x":7.25, "y":5.5},
+ {"label":"M", "x":8.25, "y":5.5},
+ {"label":",", "x":9.25, "y":5.5},
+ {"label":".", "x":10.25, "y":5.5},
+ {"label":"/", "x":11.25, "y":5.5},
+ {"label":"JP RO", "x":12.25, "y":5.5},
+ {"label":"Shift", "x":13.25, "y":5.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":5.5},
+ {"label":"KP 1", "x":18.5, "y":5.5},
+ {"label":"KP 2", "x":19.5, "y":5.5},
+ {"label":"KP 3", "x":20.5, "y":5.5},
+ {"label":"KP Enter", "x":21.5, "y":5.5},
+ {"label":"Ctrl", "x":0, "y":6.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":6.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":6.5, "w":1.25},
+ {"label":"Muhenkan", "x":3.75, "y":6.5, "w":1.25},
+ {"label":"Space", "x":5, "y":6.5, "w":3.25},
+ {"label":"Henkan", "x":8.25, "y":6.5, "w":1.25},
+ {"label":"Kana", "x":9.5, "y":6.5, "w":1.25},
+ {"label":"Alt", "x":10.75, "y":6.5},
+ {"label":"GUI", "x":11.75, "y":6.5},
+ {"label":"Menu", "x":12.75, "y":6.5},
+ {"label":"Ctrl", "x":13.75, "y":6.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":6.5},
+ {"label":"Down", "x":16.25, "y":6.5},
+ {"label":"Right", "x":17.25, "y":6.5},
+ {"label":"KP 0", "x":18.5, "y":6.5, "w":2},
+ {"label":"KP .", "x":20.5, "y":6.5},
+ {"label":"KP =", "x":21.5, "y":6.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/xt_usb/keymaps/default/config.h b/keyboards/converter/xt_usb/keymaps/default/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/converter/xt_usb/keymaps/default/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/converter/xt_usb/keymaps/default/keymap.c b/keyboards/converter/xt_usb/keymaps/default/keymap.c
new file mode 100644
index 000000000..3ef606070
--- /dev/null
+++ b/keyboards/converter/xt_usb/keymaps/default/keymap.c
@@ -0,0 +1,55 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* IBM XT keyboard layout
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+ */
+ LAYOUT_xt( \
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ KC_F5, KC_F6, KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_F7, KC_F8, KC_LSFT,KC_BSLS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PSCR,KC_P1, KC_P2, KC_P3, KC_PPLS,
+ KC_F9, KC_F10, KC_LALT, KC_SPC, KC_CAPS, KC_P0, KC_PDOT
+ ),
+
+ /* Extended keyboard layout
+ * ,-----------------------------------------------.
+ * |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|KP=|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ */
+ /* Try this if your keyboad has exotic keys.
+ LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_VOLD,KC_VOLU,KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_JYEN,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM,
+ KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_HENK,KC_KANA,KC_RALT,KC_RGUI,KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT,KC_PEQL
+ ),
+ */
+};
diff --git a/keyboards/converter/xt_usb/led.c b/keyboards/converter/xt_usb/led.c
new file mode 100644
index 000000000..6fa077032
--- /dev/null
+++ b/keyboards/converter/xt_usb/led.c
@@ -0,0 +1,22 @@
+/*
+Copyright 2016 Ethan Apodaca <papodaca@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/>.
+*/
+
+#include "led.h"
+
+void led_set(uint8_t usb_led) {
+ //XT Keyboards do not have LEDs, nothing to do.
+}
diff --git a/keyboards/converter/xt_usb/matrix.c b/keyboards/converter/xt_usb/matrix.c
new file mode 100644
index 000000000..e2d7117b1
--- /dev/null
+++ b/keyboards/converter/xt_usb/matrix.c
@@ -0,0 +1,309 @@
+/*
+Copyright 2011 Jun Wako <wakojun@gmail.com>
+Copyright 2016 Ethan Apodaca <papodaca@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/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "action.h"
+#include "print.h"
+#include "util.h"
+#include "debug.h"
+#include "xt.h"
+#include "matrix.h"
+
+
+static void matrix_make(uint8_t code);
+static void matrix_break(uint8_t code);
+
+static uint8_t matrix[MATRIX_ROWS];
+#define ROW(code) (code>>3)
+#define COL(code) (code&0x07)
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ xt_host_init();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ matrix_init_quantum();
+}
+
+// convert E0-escaped codes into unused area
+static uint8_t move_e0code(uint8_t code) {
+ switch(code) {
+ // Original IBM XT keyboard has these keys
+ case 0x37: return 0x54; // Print Screen
+ case 0x46: return 0x55; // Ctrl + Pause
+ case 0x1C: return 0x6F; // Keypad Enter
+ case 0x35: return 0x7F; // Keypad /
+
+ // Any XT keyobard with these keys?
+ // http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
+ // https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
+ case 0x5B: return 0x5A; // Left GUI
+ case 0x5C: return 0x5B; // Right GUI
+ case 0x5D: return 0x5C; // Application
+ case 0x5E: return 0x5D; // Power(not used)
+ case 0x5F: return 0x5E; // Sleep(not used)
+ case 0x63: return 0x5F; // Wake (not used)
+ case 0x48: return 0x60; // Up
+ case 0x4B: return 0x61; // Left
+ case 0x50: return 0x62; // Down
+ case 0x4D: return 0x63; // Right
+ case 0x52: return 0x71; // Insert
+ case 0x53: return 0x72; // Delete
+ case 0x47: return 0x74; // Home
+ case 0x4F: return 0x75; // End
+ case 0x49: return 0x77; // Home
+ case 0x51: return 0x78; // End
+ case 0x1D: return 0x7A; // Right Ctrl
+ case 0x38: return 0x7C; // Right Alt
+ }
+ return 0x00;
+}
+
+uint8_t matrix_scan(void)
+{
+ static enum {
+ INIT,
+ E0,
+ // Pause: E1 1D 45, E1 9D C5
+ E1,
+ E1_1D,
+ E1_9D,
+ } state = INIT;
+
+ uint8_t code = xt_host_recv();
+ if (!code) return 0;
+ xprintf("%02X ", code);
+ switch (state) {
+ case INIT:
+ switch (code) {
+ case 0xE0:
+ state = E0;
+ break;
+ case 0xE1:
+ state = E1;
+ break;
+ default:
+ if (code < 0x80)
+ matrix_make(code);
+ else
+ matrix_break(code & 0x7F);
+ break;
+ }
+ break;
+ case E0:
+ switch (code) {
+ case 0x2A:
+ case 0xAA:
+ case 0x36:
+ case 0xB6:
+ //ignore fake shift
+ state = INIT;
+ break;
+ default:
+ if (code < 0x80)
+ matrix_make(move_e0code(code));
+ else
+ matrix_break(move_e0code(code & 0x7F));
+ state = INIT;
+ break;
+ }
+ break;
+ case E1:
+ switch (code) {
+ case 0x1D:
+ state = E1_1D;
+ break;
+ case 0x9D:
+ state = E1_9D;
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ case E1_1D:
+ switch (code) {
+ case 0x45:
+ matrix_make(0x55);
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ case E1_9D:
+ switch (code) {
+ case 0x45:
+ matrix_break(0x55);
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ default:
+ state = INIT;
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+inline
+static void matrix_make(uint8_t code)
+{
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= 1<<COL(code);
+ }
+}
+
+inline
+static void matrix_break(uint8_t code)
+{
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ }
+}
+
+void matrix_clear(void)
+{
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix_get_row(row) & (1<<col));
+}
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+#endif
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+/*
+XT Scancodes
+============
+- http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
+- https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
+
+01-53: Normal codes used in original XT keyboard
+54-7F: Not used in original XT keyboard
+
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 50 - - - - * * x x x x * * * o o o
+ 60 * * * * x x x x x x x x x x x *
+ 70 x * * x * * x * * x * x * x x *
+
+-: codes existed in original XT keyboard
+*: E0-escaped codes converted into unused code area(internal use in TMK)
+x: Non-espcaped codes(not used in real keyboards probably, for CodeSet2-CodeSet1 translation purpose)
+o: reserved
+
+Usage in TMK:
+
+ 00 (reserved) DO NOT USE
+ 54 PrintScr*
+ 55 Pause*
+ 56 Euro2
+ 57 F11
+ 58 F12
+ 59 Keypad =
+ 5A LGUI*
+ 5B RGUI*
+ 5C APP*
+ 5D (reserved)
+ 5E (reserved)
+ 5F (reserved)
+ 60 cursor*
+ 61 cursor*
+ 62 cursor*
+ 63 cursor*
+ 64 F13
+ 65 F14
+ 66 F15
+ 67 F16
+ 68 F17
+ 69 F18
+ 6A F19
+ 6B F20
+ 6C F21
+ 6D F22
+ 6E F23
+ 6F Keypad Enter*
+ 70 KANA
+ 71 nav*
+ 72 nav*
+ 73 RO
+ 74 nav*
+ 75 nav*
+ 76 F24
+ 77 nav*
+ 78 nav*
+ 79 HENKAN
+ 7A RCTL*
+ 7B MUHENKAN
+ 7C RALT*
+ 7D JPY
+ 7E Keypad ,
+ 7F Keypad / *
+
+*/
diff --git a/keyboards/converter/xt_usb/rules.mk b/keyboards/converter/xt_usb/rules.mk
new file mode 100644
index 000000000..0b8731f32
--- /dev/null
+++ b/keyboards/converter/xt_usb/rules.mk
@@ -0,0 +1,62 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader
+# This indicates which bootloader is present on the board.
+# BOOTLOADER = caterina # Pro Micro
+BOOTLOADER = halfkay # Teensy
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+XT_ENABLE = yes
+CUSTOM_MATRIX = yes
+
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+SRC = matrix.c led.c
diff --git a/keyboards/converter/xt_usb/xt_usb.c b/keyboards/converter/xt_usb/xt_usb.c
new file mode 100644
index 000000000..88acee0b0
--- /dev/null
+++ b/keyboards/converter/xt_usb/xt_usb.c
@@ -0,0 +1 @@
+#include "xt_usb.h"
diff --git a/keyboards/converter/xt_usb/xt_usb.h b/keyboards/converter/xt_usb/xt_usb.h
new file mode 100644
index 000000000..9785158b4
--- /dev/null
+++ b/keyboards/converter/xt_usb/xt_usb.h
@@ -0,0 +1,132 @@
+/*
+Copyright 2011,2012,2013 Jun Wako <wakojun@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/>.
+*/
+#pragma once
+
+#include "quantum.h"
+
+/* IBM XT keyboard layout
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+ * Scan code set 1
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | 3B| 3C| | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E | 45 | 46 |
+ * |-------| |--------------------------------------------------------------------------|
+ * | 3D| 3E| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B | | 47| 48| 49| 4A|
+ * |-------| |------------------------------------------------------| 1C|---------------|
+ * | 3F| 40| | 1D | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| | 4B| 4C| 4D| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | 41| 42| | 2A | 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36 |*37| 4F| 50| 51| 4E|
+ * |-------| |----------------------------------------------------------------------| |
+ * | 43| 44| | 38 | 39 | 3A | 52 | 53 | |
+ * `-------' `--------------------------------------------------------------------------'
+ */
+#define LAYOUT_xt( \
+ K3B,K3C, K01,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E, K45, K46, \
+ K3D,K3E, K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K47,K48,K49,K4A, \
+ K3F,K40, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K1C,K4B,K4C,K4D, \
+ K41,K42, K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35,K36,K54,K4F,K50,K51,K4E, \
+ K43,K44, K38, K39, K3A, K52, K53 \
+) { \
+ { KC_NO, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, KC_NO }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
+ { K50, K51, K52, K53, K54, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+/* Extended keyboard layout
+ * ,-----------------------------------------------.
+ * |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ * ,-----------------------------------------------.
+ * | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 76|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * | 01| | 3B| 3C| 3D| 3E| 3F| 40| 41| 42| 43| 44| 57| 58| |*37| 46|*45| |e5E|e5F|e63|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 7D| 0E| |e52|e47|e49| | 45|e35| 37| 4A|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 2B | |e53|e4F|e51| | 47| 48| 49| 4E|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * | 3A | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 00| 1C | | 4B| 4C| 4D| 7E|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * | 2A | 56| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 73| 36 | |e48| | 4F| 50| 51|e1C|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * | 1D|e5B| 38| 7B | 39 | 79 | 70 |e38|e5C|e5D|e1D| |e4B|e50|e4D| | 52| 53| 59|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ * e: E0-escaped codes
+ * *: special handling codes
+ */
+#define LAYOUT( \
+ K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D,K6E,K76, \
+ K01, K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K57,K58, K54,K46,K55, K5D,K5E,K5F, \
+ K29,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K7D,K0E, K71,K74,K77, K45,K7F,K37,K4A, \
+ K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K2B, K72,K75,K78, K47,K48,K49,K4E, \
+ K3A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28, K00,K1C, K4B,K4C,K4D,K7E, \
+ K2A,K56,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35, K73,K36, K60, K4F,K50,K51,K6F, \
+ K1D,K5A,K38,K7B, K39, K79,K70,K7C,K5B,K5C,K7A, K61,K62,K63, K52,K53,K59 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
+}