From a553ab2b41b1e16e5d9f8f512f71f1ef432c3867 Mon Sep 17 00:00:00 2001 From: "Peter J. A. Cock" Date: Tue, 23 Sep 2025 01:35:56 +0100 Subject: [PATCH] Sort TC36K matrix by physical columns then rows (Qwerty QAZ first) This makes the first entry in the matrix (top-left) Qwerty 'Q' as conventional for a 36-key layout like this (and QMK boot magic). Note there are three scanning columns for the six thumb keys, only two keys each, making 13 scanning columns in total. --- keyboards/tutte_coxeter_36k/keyboard.json | 76 +++++++++++------------ keyboards/tutte_coxeter_36k/readme.md | 45 +++++++------- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/keyboards/tutte_coxeter_36k/keyboard.json b/keyboards/tutte_coxeter_36k/keyboard.json index 0039cc09..5b14a8e7 100644 --- a/keyboards/tutte_coxeter_36k/keyboard.json +++ b/keyboards/tutte_coxeter_36k/keyboard.json @@ -11,8 +11,8 @@ "nkro": false }, "matrix_pins": { - "cols": ["GP11", "GP10", "GP3", "GP4", "GP7", "GP26", "GP27", "GP28", "GP15", "GP21", "GP19", "GP20", "GP16"], - "rows": ["GP12", "GP8", "GP9", "GP1", "GP6", "GP2", "GP22", "GP0", "GP13", "GP14", "GP18", "GP17", "GP5"] + "cols": ["GP20", "GP21", "GP28", "GP27", "GP26", "GP19", "GP16", "GP15", "GP7", "GP4", "GP3", "GP10", "GP11"], + "rows": ["GP5", "GP8", "GP17", "GP1", "GP14", "GP18", "GP0", "GP13", "GP12", "GP22", "GP2", "GP6", "GP9"] }, "indicators": { "caps_lock": "GP25" @@ -28,42 +28,42 @@ "layouts": { "LAYOUT_split_3x5_3": { "layout": [ - {"label": "q", "matrix": [12, 11], "x": 0, "y": 0.25}, - {"label": "w", "matrix": [3, 9], "x": 1, "y": 0.125}, - {"label": "e", "matrix": [7, 7], "x": 2, "y": 0}, - {"label": "r", "matrix": [7, 6], "x": 3, "y": 0.125}, - {"label": "t", "matrix": [5, 5], "x": 4, "y": 0.25}, - {"label": "y", "matrix": [5, 4], "x": 7, "y": 0.25}, - {"label": "u", "matrix": [3, 3], "x": 8, "y": 0.125}, - {"label": "i", "matrix": [7, 2], "x": 9, "y": 0}, - {"label": "o", "matrix": [5, 1], "x": 10, "y": 0.125}, - {"label": "p", "matrix": [1, 0], "x": 11, "y": 0.25}, - {"label": "a", "matrix": [1, 11], "x": 0, "y": 1.25}, - {"label": "s", "matrix": [9, 9], "x": 1, "y": 1.125}, - {"label": "d", "matrix": [8, 7], "x": 2, "y": 1}, - {"label": "f", "matrix": [0, 6], "x": 3, "y": 1.125}, - {"label": "g", "matrix": [6, 5], "x": 4, "y": 1.25}, - {"label": "h", "matrix": [4, 4], "x": 7, "y": 1.25}, - {"label": "j", "matrix": [12, 3], "x": 8, "y": 1.125}, - {"label": "k", "matrix": [3, 2], "x": 9, "y": 1}, - {"label": "l", "matrix": [1, 1], "x": 10, "y": 1.125}, - {"label": ";", "matrix": [9, 0], "x": 11, "y": 1.25}, - {"label": "z", "matrix": [11, 11], "x": 0, "y": 2.25}, - {"label": "x", "matrix": [10, 9], "x": 1, "y": 2.125}, - {"label": "c", "matrix": [11, 7], "x": 2, "y": 2}, - {"label": "v", "matrix": [6, 6], "x": 3, "y": 2.125}, - {"label": "b", "matrix": [10, 5], "x": 4, "y": 2.25}, - {"label": "n", "matrix": [8, 4], "x": 7, "y": 2.25}, - {"label": "m", "matrix": [4, 3], "x": 8, "y": 2.125}, - {"label": ",", "matrix": [2, 2], "x": 9, "y": 2}, - {"label": ".", "matrix": [2, 1], "x": 10, "y": 2.125}, - {"label": "/", "matrix": [0, 0], "x": 11, "y": 2.25}, - {"label": "L1", "matrix": [11, 10], "x": 2.5, "y": 3.25}, - {"label": "L2", "matrix": [10, 10], "x": 3.5, "y": 3.5}, - {"label": "L3", "matrix": [6, 12], "x": 4.5, "y": 3.75}, - {"label": "R3", "matrix": [12, 12], "x": 6.5, "y": 3.75}, - {"label": "R2", "matrix": [8, 8], "x": 7.5, "y": 3.5}, - {"label": "R1", "matrix": [9, 8], "x": 8.5, "y": 3.25} + {"label": "q", "matrix": [0, 0], "x": 0, "y": 0.25}, + {"label": "w", "matrix": [3, 1], "x": 1, "y": 0.125}, + {"label": "e", "matrix": [6, 2], "x": 2, "y": 0}, + {"label": "r", "matrix": [6, 3], "x": 3, "y": 0.125}, + {"label": "t", "matrix": [10, 4], "x": 4, "y": 0.25}, + {"label": "y", "matrix": [10, 8], "x": 7, "y": 0.25}, + {"label": "u", "matrix": [3, 9], "x": 8, "y": 0.125}, + {"label": "i", "matrix": [6, 10], "x": 9, "y": 0}, + {"label": "o", "matrix": [10, 11], "x": 10, "y": 0.125}, + {"label": "p", "matrix": [1, 12], "x": 11, "y": 0.25}, + {"label": "a", "matrix": [1, 0], "x": 0, "y": 1.25}, + {"label": "s", "matrix": [4, 1], "x": 1, "y": 1.125}, + {"label": "d", "matrix": [7, 2], "x": 2, "y": 1}, + {"label": "f", "matrix": [8, 3], "x": 3, "y": 1.125}, + {"label": "g", "matrix": [9, 4], "x": 4, "y": 1.25}, + {"label": "h", "matrix": [11, 8], "x": 7, "y": 1.25}, + {"label": "j", "matrix": [0, 9], "x": 8, "y": 1.125}, + {"label": "k", "matrix": [3, 10], "x": 9, "y": 1}, + {"label": "l", "matrix": [1, 11], "x": 10, "y": 1.125}, + {"label": ";", "matrix": [4, 12], "x": 11, "y": 1.25}, + {"label": "z", "matrix": [2, 0], "x": 0, "y": 2.25}, + {"label": "x", "matrix": [5, 1], "x": 1, "y": 2.125}, + {"label": "c", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "v", "matrix": [9, 3], "x": 3, "y": 2.125}, + {"label": "b", "matrix": [5, 4], "x": 4, "y": 2.25}, + {"label": "n", "matrix": [7, 8], "x": 7, "y": 2.25}, + {"label": "m", "matrix": [11, 9], "x": 8, "y": 2.125}, + {"label": ",", "matrix": [12, 10], "x": 9, "y": 2}, + {"label": ".", "matrix": [12, 11], "x": 10, "y": 2.125}, + {"label": "/", "matrix": [8, 12], "x": 11, "y": 2.25}, + {"label": "L1", "matrix": [2, 5], "x": 2.5, "y": 3.25}, + {"label": "L2", "matrix": [5, 5], "x": 3.5, "y": 3.5}, + {"label": "L3", "matrix": [9, 6], "x": 4.5, "y": 3.75}, + {"label": "R3", "matrix": [0, 6], "x": 6.5, "y": 3.75}, + {"label": "R2", "matrix": [7, 7], "x": 7.5, "y": 3.5}, + {"label": "R1", "matrix": [4, 7], "x": 8.5, "y": 3.25} ] } } diff --git a/keyboards/tutte_coxeter_36k/readme.md b/keyboards/tutte_coxeter_36k/readme.md index d603b8b1..cd58b172 100644 --- a/keyboards/tutte_coxeter_36k/readme.md +++ b/keyboards/tutte_coxeter_36k/readme.md @@ -11,29 +11,28 @@ for background, although the final pin selection and trace routing changed). ![Partial Tutte-Coxeter Graph (26/30 vertices, 36/45 edges)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvS5QfAl7YotptMtpu0nG8XOHOsqG2vocUFF2sRgrn_QwAcUQNhDkctHt_42rQor3Bb5tbAW6FiOsYqv2craP086HMTuAqWk9U0A4yOeEsQkhyphenhyphenUxoayJWf5e-N3_Jg1TC1p9YAiVPTK02pEVCUu3hl72REIk5BAjXgZGoF7T-NWQ28iRirwFs6yzFzAe0/w200-h194/Screenshot%202025-05-28%20at%2014.59.35.png) -This matrix shows the full 15×15 Tutte-Coxeter bipartite scanning matrix with the -two unused rows and columns last (❌), and the further 9 keys this would allow (⭕) -if using 30 GPIOs rather than just 26 for a 13×13 scanning matrix. The allocation -of keys to matrix elements and scanning matrix rows and columns to GPIO pins was -arbitrary and down to how easy it was to layout the PCB traces: +This matrix shows the 13×13 partial Tutte-Coxeter bipartite scanning matrix +in the physical column order (QAZ colunm first) with rows sorted to ensure Q +is top left as the first matrix entry. If using the full matrix this would +be 15x15 using 30 GPIOs and have another 9 keys making 45 in all. +The allocation of keys to matrix elements and scanning matrix rows and columns +to GPIO pins was arbitrary and down to how easy it was to layout the PCB traces: -| GP | 11 | 10 | 3 | 4 | 7 | 26 | 27 | 28 | 15 | 21 | 19 | 20 | 16 | ❌ | ❌ | -|---:|:--:|:--:|:-:|:-:|:-:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| 12 | / | | | | | | F | | | | | | | | ⭕ | -| 8 | P | L | | | | | | | | | | A | | | | -| 9 | | . | , | | | | | | | | | | | ⭕ | | -| 1 | | | K | U | | | | | | W | | | | | | -| 6 | | | | M | H | | | | | | | | | | ⭕ | -| 2 | | O | | | Y | T | | | | | | | | | | -| 22 | | | | | | G | V | | | | | | L1 | | | -| 0 | | | I | | | | R | E | | | | | | | | -| 13 | | | | | N | | | D | R2 | | | | | | | -| 14 | ; | | | | | | | | R3 | S | | | | | | -| 18 | | | | | | B | | | | X | L2 | | | | | -| 17 | | | | | | | | C | | | L3 | Z | | | | -| 5 | | | | J | | | | | | | | Q | R1 | | | -| ❌ | | | | | | | | | ⭕ | | | | ⭕ | ⭕ | | -| ❌ | | | | | | | | | | | ⭕ | | | ⭕ | ⭕ | +| GP | 20 | 21 | 28 | 27 | 26 | 19 | 16 | 15 | 7 | 4 | 3 | 10 | 11 | +|---:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:-:|:-:|:-:|:--:|:--:| +| 5 | Q | | | | | | R1 | | | J | | | | +| 8 | A | | | | | | | | | | | L | P | +| 17 | Z | | C | | | L3 | | | | | | | | +| 1 | | W | | | | | | | | U | K | | | +| 14 | | S | | | | | | R3 | | | | | ; | +| 18 | | X | | | B | L2 | | | | | | | | +| 0 | | | E | R | | | | | | | I | | | +| 13 | | | D | | | | | R2 | N | | | | | +| 12 | | | | F | | | | | | | | | / | +| 22 | | | | V | G | | L1 | | | | | | | +| 2 | | | | | T | | | | Y | | | O | | +| 6 | | | | | | | | | H | M | | | | +| 9 | | | | | | | | | | | , | . | | The keys here are labeled as per Qwerty, with L3, L2, L1, R1, R2, and R3 for the thumbs: @@ -67,6 +66,6 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to Enter the bootloader in 3 ways: -* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (bottom right key, Qwerty `/`) and plug in the keyboard +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key, Qwerty `Q`) and plug in the keyboard * **Physical reset button**: Briefly press the button on the back of the controller (if physically accessible) * **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available