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).

-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