commit: f5f11b7c797c28f2ed8177fcf7c81e6207346184
parent 6fbfd659ff361072a512ba8cbdb77632c0357dcc
Author: Michael Büchler <michael.buechler@posteo.net>
Date: Wed, 6 Nov 2024 08:45:20 +0100
Add keyboards/converter/thinkpad_t6x/rpi_pico (#23696)
Diffstat:
3 files changed, 175 insertions(+), 0 deletions(-)
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json b/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json
@@ -0,0 +1,131 @@
+{
+ "manufacturer": "strobo5",
+ "keyboard_name": "converter/thinkpad_t6x/rpi_pico",
+ "maintainer": "strobo5",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "matrix_pins": {
+ "cols": ["GP7", "GP9", "GP11", "GP13", "GP17", "GP16", "GP14", "GP12", "GP15", "GP8", "GP10", "GP6", "GP4", "GP2", "GP5", "GP3"],
+ "rows": ["GP20", "GP26", "GP22", "GP21", "GP18", "GP19", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "ps2": {
+ "clock_pin": "GP1",
+ "data_pin": "GP0",
+ "driver": "vendor",
+ "enabled": true,
+ "mouse_enabled": true
+ },
+ "url": "https://github.com/strobo5/T61_PiPico_Scanner",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [5, 0], "x": 0, "y": 0, "w": 0.9, "h": 0.75},
+ {"label": "Mute", "matrix": [4, 10], "x": 0.9, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol -", "matrix": [3, 10], "x": 1.65, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol +", "matrix": [2, 10], "x": 2.4, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "ThinkVantage", "matrix": [5, 10], "x": 3.5, "y": 0, "w": 1.25, "h": 0.5},
+ {"label": "PrtSc", "matrix": [1, 13], "x": 8.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "ScrLk", "matrix": [2, 13], "x": 9.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Pause", "matrix": [6, 12], "x": 10.7, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Insert", "matrix": [0, 9], "x": 12, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Home", "matrix": [0, 12], "x": 12.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "PgUp", "matrix": [0, 11], "x": 13.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "F1", "matrix": [0, 1], "x": 0, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F2", "matrix": [0, 2], "x": 0.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F3", "matrix": [3, 2], "x": 1.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F4", "matrix": [5, 2], "x": 2.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F5", "matrix": [5, 8], "x": 4, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F6", "matrix": [5, 5], "x": 4.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F7", "matrix": [3, 6], "x": 5.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F8", "matrix": [0, 6], "x": 6.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F9", "matrix": [0, 8], "x": 8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F10", "matrix": [1, 8], "x": 8.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F11", "matrix": [1, 10], "x": 9.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F12", "matrix": [1, 9], "x": 10.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "Delete", "matrix": [0, 10], "x": 12, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "End", "matrix": [1, 12], "x": 12.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "PgDn", "matrix": [1, 11], "x": 13.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "`\u00ac", "matrix": [0, 0], "x": 0, "y": 1.4},
+ {"label": "1!", "matrix": [1, 0], "x": 1, "y": 1.4},
+ {"label": "2\"", "matrix": [1, 1], "x": 2, "y": 1.4},
+ {"label": "3\u00a3", "matrix": [1, 2], "x": 3, "y": 1.4},
+ {"label": "4$", "matrix": [1, 3], "x": 4, "y": 1.4},
+ {"label": "5%", "matrix": [0, 3], "x": 5, "y": 1.4},
+ {"label": "6^", "matrix": [0, 4], "x": 6, "y": 1.4},
+ {"label": "7&", "matrix": [1, 4], "x": 7, "y": 1.4},
+ {"label": "8*", "matrix": [1, 5], "x": 8, "y": 1.4},
+ {"label": "9(", "matrix": [1, 6], "x": 9, "y": 1.4},
+ {"label": "0)", "matrix": [1, 7], "x": 10, "y": 1.4},
+ {"label": "-_", "matrix": [0, 7], "x": 11, "y": 1.4},
+ {"label": "=+", "matrix": [0, 5], "x": 12, "y": 1.4},
+ {"label": "Bksp", "matrix": [3, 8], "x": 13, "y": 1.4, "w": 2},
+ {"label": "Tab", "matrix": [3, 0], "x": 0, "y": 2.4, "w": 1.5},
+ {"label": "Q", "matrix": [2, 0], "x": 1.5, "y": 2.4},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 2.4},
+ {"label": "E", "matrix": [2, 2], "x": 3.5, "y": 2.4},
+ {"label": "R", "matrix": [2, 3], "x": 4.5, "y": 2.4},
+ {"label": "T", "matrix": [3, 3], "x": 5.5, "y": 2.4},
+ {"label": "Y", "matrix": [3, 4], "x": 6.5, "y": 2.4},
+ {"label": "U", "matrix": [2, 4], "x": 7.5, "y": 2.4},
+ {"label": "I", "matrix": [2, 5], "x": 8.5, "y": 2.4},
+ {"label": "O", "matrix": [2, 6], "x": 9.5, "y": 2.4},
+ {"label": "P", "matrix": [2, 7], "x": 10.5, "y": 2.4},
+ {"label": "[{", "matrix": [3, 7], "x": 11.5, "y": 2.4},
+ {"label": "]}", "matrix": [3, 5], "x": 12.5, "y": 2.4},
+ {"label": "Caps Lock", "matrix": [3, 1], "x": 0, "y": 3.4, "w": 1.75},
+ {"label": "A", "matrix": [4, 0], "x": 1.75, "y": 3.4},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.4},
+ {"label": "D", "matrix": [4, 2], "x": 3.75, "y": 3.4},
+ {"label": "F", "matrix": [4, 3], "x": 4.75, "y": 3.4},
+ {"label": "G", "matrix": [5, 3], "x": 5.75, "y": 3.4},
+ {"label": "H", "matrix": [5, 4], "x": 6.75, "y": 3.4},
+ {"label": "J", "matrix": [4, 4], "x": 7.75, "y": 3.4},
+ {"label": "K", "matrix": [4, 5], "x": 8.75, "y": 3.4},
+ {"label": "L", "matrix": [4, 6], "x": 9.75, "y": 3.4},
+ {"label": ";:", "matrix": [4, 7], "x": 10.75, "y": 3.4},
+ {"label": "'@", "matrix": [5, 7], "x": 11.75, "y": 3.4},
+ {"label": "#~", "matrix": [6, 7], "x": 12.75, "y": 3.4},
+ {"label": "Enter", "matrix": [6, 8], "x": 13.75, "y": 2.4, "w": 1.25, "h": 2},
+ {"label": "Shift", "matrix": [3, 14], "x": 0, "y": 4.4, "w": 1.25},
+ {"label": "\\|", "matrix": [5, 1], "x": 1.25, "y": 4.4},
+ {"label": "Z", "matrix": [6, 0], "x": 2.25, "y": 4.4},
+ {"label": "X", "matrix": [6, 1], "x": 3.25, "y": 4.4},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 4.4},
+ {"label": "V", "matrix": [6, 3], "x": 5.25, "y": 4.4},
+ {"label": "B", "matrix": [7, 3], "x": 6.25, "y": 4.4},
+ {"label": "N", "matrix": [7, 4], "x": 7.25, "y": 4.4},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 4.4},
+ {"label": ",<", "matrix": [6, 5], "x": 9.25, "y": 4.4},
+ {"label": ".>", "matrix": [6, 6], "x": 10.25, "y": 4.4},
+ {"label": "/?", "matrix": [7, 7], "x": 11.25, "y": 4.4},
+ {"label": "Shift", "matrix": [6, 14], "x": 12.25, "y": 4.4, "w": 2.75},
+ {"label": "Fn", "matrix": [4, 9], "x": 0, "y": 5.4},
+ {"label": "Ctrl", "matrix": [0, 15], "x": 1, "y": 5.4, "w": 1.25},
+ {"label": "Left OS", "matrix": [2, 11], "x": 2.25, "y": 5.4, "w": 0.9},
+ {"label": "Alt", "matrix": [5, 13], "x": 3.15, "y": 5.4},
+ {"label": "Space", "matrix": [7, 8], "x": 4.15, "y": 5.4, "w": 5},
+ {"label": "AltGr", "matrix": [7, 13], "x": 9.25, "y": 5.4},
+ {"label": "Menu", "matrix": [4, 11], "x": 10.25, "y": 5.4},
+ {"label": "Ctrl", "matrix": [6, 15], "x": 11.25, "y": 5.4},
+ {"label": "Browser Back", "matrix": [6, 11], "x": 12.25, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Up", "matrix": [5, 12], "x": 13.15, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Browser Forward", "matrix": [7, 11], "x": 14.05, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Left", "matrix": [7, 12], "x": 12.25, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Down", "matrix": [7, 10], "x": 13.15, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Right", "matrix": [7, 9], "x": 14.05, "y": 6.15, "w": 0.9, "h": 0.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c b/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso(
+ KC_ESC, KC_MUTE, KC_VOLD, KC_VOLU, QK_BOOT, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_END, KC_PGDN,
+ 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_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_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_NO, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_WBAK, KC_UP , KC_WFWD,
+ KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md b/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md
@@ -0,0 +1,27 @@
+# converter/thinkpad_t6x/rpi_pico
+
+
+
+This is a converter PCB for Lenovo Thinkpad keyboards from a wide range of models (T60, T61, X220, ...), based on the Raspberry Pi Pico. The QMK implementation here is specific to the converter in the link below. Similar PCB designs to convert a Thinkpad keyboard to USB exist, but they use a different microcontroller and wiring of the keyboard connector with the MCU.
+
+* Keyboard Maintainer: [Michael Büchler](https://github.com/strobo5)
+* Hardware Supported: The linked converter PCB with keyboards from various Thinkpad models
+* Hardware Availability: [Custom PCB](https://github.com/strobo5/T61_PiPico_Scanner)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/thinkpad_t6x/rpi_pico:default
+
+Flashing example for this keyboard:
+
+ make converter/thinkpad_t6x/rpi_pico:default:flash
+
+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).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available