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.
This commit is contained in:
Peter J. A. Cock 2025-09-23 01:35:56 +01:00 committed by Peter Cock
commit a553ab2b41
2 changed files with 60 additions and 61 deletions

View file

@ -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}
]
}
}

View file

@ -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