Kintwin controller for kinesis keyboard, split layout (#21614)

Co-authored-by: Ryan <fauxpark@gmail.com>
master
alvicstep 2023-08-14 00:01:31 -07:00 committed by GitHub
parent 3da773dbdb
commit 6f3beae895
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 566 additions and 23 deletions

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include "alvicstep.h" #include "alvicstep.h"
// begin section origin https://github.com/alvicstep/tmk_keyboard // begin section origin https://github.com/alvicstep/tmk_keyboard

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
#include "quantum.h" #include "quantum.h"

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
/* key matrix size */ /* key matrix size */

View File

@ -6,6 +6,16 @@
"pid": "0x6060", "pid": "0x6060",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"processor": "at90usb1286", "processor": "at90usb1286",
"bootloader": "halfkay", "bootloader": "halfkay",
"layouts": { "layouts": {

View File

@ -0,0 +1,135 @@
// Copyright 2023 Alex Stepanov (@alvicstep)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layer_names {
_BASE, // default layer
_KEYPAD, // arrow keys, shifted symbols, HOME, END, PGUP, PGDN, FKeys, CTRL(TAB)
_NUMPAD // numpad keys
};
/* ,------------------------------------------------------------------------------------------------------------------------.
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 |PSCR|SLCK|PAUS|KPAD|BOOT|
* |--------+------+------+------+-------+------+--------------------------------+------+------+------+------+------+--------|
* | -_ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | =+ |
* |--------+------+------+------+-------+------| +------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
* |--------+------+------+------+-------+------| |------+------+------+------+------+--------|
* | Del | A | S | D | F | G | | H | J | K | L | ;: | '" |
* |--------+------+------+------+-------+------| |------+------+------+------+------+--------|
* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? |Sht/Ent |
* `--------+------+------+------+-------+------- `------+------+------+------+------+--------'
* | `~ | Gui | Esc |MO(Num)| | [{ | ]} | | |
* `----------------------------' `---------------------------'
* ,---------------. ,---------------.
* |Alt+Tab| Alt | | Alt |TO(Num)|
* ,------|------ |-------| |-------+-------+------.
* | | | Shift | | Shift | | |
* | BkSp | KPAD |-------| |------ | KPAD | Space|
* | | | Ctrl | | Ctrl | | |
* `----------------------' `----------------------'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
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_SCRL,KC_PAUS,TO(_KEYPAD),QK_BOOT,
KC_MINS,KC_1,KC_2,KC_3,KC_4,KC_5, KC_6,KC_7,KC_8,KC_9,KC_0,KC_EQL,
KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T, KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLS,
KC_DEL,KC_A,KC_S,KC_D,KC_F,KC_G, KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,
KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B, KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,SC_SENT,
KC_GRV,KC_LGUI,KC_ESC,MO(_NUMPAD), KC_LBRC,KC_RBRC,KC_NO,KC_NO,
LALT(KC_TAB),KC_LALT, KC_RALT,TO(_NUMPAD),
KC_LSFT, KC_RSFT,
KC_BSPC,MO(_KEYPAD),KC_LCTL, KC_RCTL,MO(_KEYPAD),KC_SPC
),
/* ,------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | | | TO(BASE) | |
* |--------+------+------+------+------+------+---------------------------------+------+------+------+------+------+--------|
* | _ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F1 | F2 | F3 | F4 | F5 | | | Home | Up | End | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F6 | F7 | F8 | F9 | F10 | | Pgup | Lft | Dwn | Rgt | : | " |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | CapsLk | | | | F11 | F12 | | Pgdn | | < | > | ? | |
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
* | ~ | INS | | | | { | } | | |
* `---------------------------' `---------------------------'
* ,--------------. ,--------------------.
* |Ctl+Tab| | | | | |
* ,------|------ |------| |------+------+------.
* | | |Shift | |Shift | | |
* | | |------| |------| | |
* | | | Ctrl | | Ctrl | | |
* `-------------- ------' `--------------------'
*/
[_KEYPAD] = LAYOUT(
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,TO(_BASE),KC_NO,
KC_UNDS,KC_EXLM,KC_AT,KC_HASH,KC_DLR,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_PLUS,
KC_NO,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5, KC_NO,KC_HOME,KC_UP,KC_END,KC_NO,KC_PIPE,
KC_CAPS,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10, KC_PGUP,KC_LEFT,KC_DOWN,KC_RGHT,KC_COLN,KC_DQUO,
KC_NO,KC_NO,KC_NO,KC_NO,KC_F11,KC_F12, KC_PGDN,KC_NO,KC_LT,KC_GT,KC_QUES,KC_NO,
KC_TILD,KC_INS,KC_NO,KC_NO, KC_LCBR,KC_RCBR,KC_NO,KC_NO,
LCTL(KC_TAB),KC_NO, KC_NO,KC_NO,
KC_LSFT, KC_RSFT,
KC_NO,KC_NO,KC_LCTL, KC_RCTL,KC_NO,KC_NO
),
/*,--------+------+------+------+------+------+ +------+------+------+------+------+--------.
* | | | | | | | | | Base | = | / | * | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | | | | 7 | 8 | 9 | - | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Del | | | | | | | | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | BkSp | | | | | | | | 1 | 2 | 3 |Enter | Enter |
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
* | | | | | | . |Enter | | |
* `---------------------------' `---------------------------'
* ,-------------. ,-------------.
* | | | | | Base |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | BkSp | |------| |------| | 0 |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[_NUMPAD] = LAYOUT(
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,TO(_BASE),KC_EQL,KC_SLSH,KC_ASTR,KC_NO,
KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_7,KC_8,KC_9,KC_MINS,KC_NO,
KC_DEL,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_4,KC_5,KC_6,KC_PLUS,KC_NO,
KC_BSPC,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_1,KC_2,KC_3,KC_ENT,KC_ENT,
KC_NO,KC_NO,KC_NO,KC_NO, KC_DOT,KC_ENT,KC_NO,KC_NO,
KC_NO,KC_NO, KC_NO,TO(_BASE),
KC_NO, KC_NO,
KC_BSPC,KC_NO,KC_NO, KC_NO,KC_NO,KC_0
)
};
layer_state_t layer_state_set_user(layer_state_t state) {
//set LEDs which are triggered by a layer change
#ifdef LED_COMPOSE_PIN
writePin(LED_COMPOSE_PIN, !layer_state_cmp(state, _KEYPAD));
#endif
#ifdef LED_NUM_LOCK_PIN
writePin(LED_NUM_LOCK_PIN, !layer_state_cmp(state, _NUMPAD));
#endif
return state;
};
bool led_update_user(led_t led_state) {
#ifdef LED_CAPS_LOCK_PIN
writePin(LED_CAPS_LOCK_PIN, !led_state.caps_lock);
#endif
#ifdef LED_SCROLL_LOCK_PIN
writePin(LED_SCROLL_LOCK_PIN, !led_state.scroll_lock);
#endif
//disable default processing of LEDs
return false;
}

View File

@ -0,0 +1,105 @@
## Custom Layout
Kinesis Contoured family of keyboards belong to a relatively small group of keyboards that utilize thumb clusters. The keycap profiles of thumb cluster keys make it easy to press multiple keys simultaneously by a thumb finger. Co-locating CTRL, SHIFT and KEYPAD modifiers in the thumb cluster gives truly unique capabilities to these keyboards.
### "alvicstep" Layout
The **alvicstep** layout is optimized for software development on a Windows machine. It is a result of many years of daily usage. It is a great starting point for your own design.
#### Layout Features
- 3 layers: default layer, keypad layer, numpad layer
- keypad layer allows for 2 finger operation using **arrow** keys together with
- **CTRL** and/or **SHIFT** modifiers OR
- **HOME/END** keys OR
- **PAGEUP/PAGEDOWN** keys.
- two finger operations can be achieved by holding up to 3 modifier keys (KEYPAD/SHIFT/CTRL) with a thumb finger and using index/middle/ring finger by pressing keywell keys. For example, you can fully control caret position and text selection of:
- each letter
- each word
- from a current caret position to the beginning of the line
- from a current caret position to the end of the line
- multiple lines
- multiple pages
- with little practice you will be able to string together different key combinations. For example, executing `KEYPAD + O` and then `KEYPAD + SHIFT + U` selects the whole line of text with barely any finger movement. The best part is that it works in any text editor!
- keypad layer allows accessing **F1-F12** and **ESC** keys by moving only a single finger away from the home row, making it very fast and convenient
- **KEYPAD** key can be used to access US ANSI Shifted Symbols instead of pressing a SHIFT key. This gives you two advantages: it makes KEYPAD key a "go to" key which is used in almost all operations unrelated to typing of letters. To understand the second advantage, compare pressing `SHIFT + 0` and `KEYPAD + 0` using the right hand
- **NUMPAD** "momentary" modifier key can be used to quickly switch to a numeric pad while typing alphanumeric strings. In a stock Kinesis firmware you would have to switch to KEYPAD layer and then press NUMLOCK key which makes it unusable for this task
- **NUMPAD** key in the right thumb cluster can be used to switch to a numeric pad for long numeric sequences
#### Layout Layers
![](https://i.imgur.com/86LCI3zh.jpg)
![](https://i.imgur.com/Gv4WBw7h.jpg)
![](https://i.imgur.com/gKXMUI2h.jpg)
#### Notes
- MO(1) - switch to **KEYPAD** layer while key is being pressed
- MO(2) - switch to **NUMPAD** layer while key is being pressed
- TO(0) - switch to **BASE** layer
- TO(2) - switch to **NUMPAD** layer
- Rsft(Enter) - acts as an ENTER key when pressed and released. Acts as a SHIFT modifier in combination with other keys
- Bt - enter bootloader mode
- Alt(Tab) - toggle between last two active applications
- Ctrl(Tab) - toggle between last two active tabs
### Differences From Stock
- **{}[]** keys are moved to the left side of the keywell to be easily accessible
- **-** and **+** keys are switched
- **CAPS LOCK** key is moved to **KEYPAD** layer and is mapped to **DELETE** on **BASE** layer
### Shortcuts
|Shortcut | Control Caret |
|---------------------|---------------------------------------|
|`KEYPAD + J` | move caret one character left |
|`KEYPAD + L` | move caret one character right |
|`KEYPAD + I` | move caret one line up |
|`KEYPAD + K` | move caret one line down |
|`KEYPAD + CTRL + J` | move caret one word to the left |
|`KEYPAD + CTRL + L` | move caret one word to the right |
|`KEYPAD + U` | move caret to the start of the line |
|`KEYPAD + O` | move caret to the end of the line |
|`KEYPAD + H` | move caret one page up |
|`KEYPAD + N` | move caret one page down |
|Shortcut | Scroll Lock |
|---------------------|---------------------------------------|
|`KEYPAD + CTRL + I` | scroll page up |
|`KEYPAD + CTRL + K` | scroll page down |
|Shortcut | Select Text |
|-----------------------------|-------------------------------|
|`KEYPAD + CTRL + SHIFT + J` | select one word to the left |
|`KEYPAD + CTRL + SHIFT + L` | select one word to the right |
|`KEYPAD + CTRL + SHIFT + I` | select one line up |
|`KEYPAD + CTRL + SHIFT + K` | select one line down |
|`KEYPAD + SHIFT + H` | select one page up |
|`KEYPAD + SHIFT + N` | select one page down |
|`KEYPAD + CTRL + SHIFT + U` | select from beginning of the file up to the caret position |
|`KEYPAD + CTRL + SHIFT + O` | select from caret position to the end of the file |
|Shortcut | US ANSI Shifted Symbols |
|---------------------|---------------------------------------|
|`KEYPAD + -` | _ |
|`KEYPAD + 1` | ! |
|`KEYPAD + 2` | @ |
|`KEYPAD + 3` | # |
|`KEYPAD + 4` | $ |
|`KEYPAD + 5` | % |
|`KEYPAD + 6` | ^ |
|`KEYPAD + 7` | & |
|`KEYPAD + 8` | * |
|`KEYPAD + 9` | ( |
|`KEYPAD + 0` | ) |
|`KEYPAD + =` | + |
|`KEYPAD + \` | \| |
|`KEYPAD + '` | " |
|`KEYPAD + ;` | : |
|`KEYPAD + /` | ? |
|`KEYPAD + [` | { |
|`KEYPAD + ]` | } |
|`KEYPAD + ,` | < |
|`KEYPAD + .` | > |
|`KEYPAD + BACKTICK` | ~ |

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#define QWERTY 0 // Base qwerty #define QWERTY 0 // Base qwerty

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#define _DVORAK 0 // Base Dvorak layer #define _DVORAK 0 // Base Dvorak layer

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#define DVORAK_MAC_MODE 0 // Base Dvorak in Kinesis's Mac Mode with (Cmd, Option, Ctrl, Cmd) thumbkeys #define DVORAK_MAC_MODE 0 // Base Dvorak in Kinesis's Mac Mode with (Cmd, Option, Ctrl, Cmd) thumbkeys

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_german.h" #include "keymap_german.h"

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
enum layer_names { enum layer_names {

View File

@ -7,6 +7,16 @@
"device_version": "0.0.2", "device_version": "0.0.2",
"max_power": 100 "max_power": 100
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": { "build": {
"debounce_type": "sym_eager_pk" "debounce_type": "sym_eager_pk"
}, },

View File

@ -7,6 +7,16 @@
"device_version": "0.0.1", "device_version": "0.0.1",
"max_power": 100 "max_power": 100
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": { "build": {
"debounce_type": "sym_eager_pk" "debounce_type": "sym_eager_pk"
}, },

View File

@ -7,6 +7,16 @@
"device_version": "0.0.1", "device_version": "0.0.1",
"max_power": 100 "max_power": 100
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": { "build": {
"debounce_type": "sym_eager_pk" "debounce_type": "sym_eager_pk"
}, },

View File

@ -7,6 +7,16 @@
"device_version": "0.0.1", "device_version": "0.0.1",
"max_power": 50 "max_power": 50
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": { "build": {
"debounce_type": "sym_eager_pk" "debounce_type": "sym_eager_pk"
}, },

View File

@ -0,0 +1,146 @@
{
"development_board": "blackpill_f401",
"keyboard_name": "Kinesis",
"url": "https://github.com/alvicstep/kintwin",
"manufacturer": "https://github.com/alvicstep/kintwin",
"maintainer": "Alex Stepanov",
"usb": {
"device_version": "0.0.1",
"vid": "0x4B53",
"pid": "0x0001",
"shared_endpoint": {
"keyboard": true
}
},
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"matrix_pins": {
"rows": ["A0", "A1", "A2", "A3", "A4", "A5", "A6"],
"cols": ["A7", "B0", "B1", "B10", "B9", "B8", "B7", "B14", "B13", "B12", "C14", "C15", "B15", "B6", "B5"]
},
"diode_direction": "ROW2COL",
"indicators": {
"caps_lock": "A15",
"scroll_lock": "B3",
"num_lock": "B4",
"compose": "C13",
"on_state": 0
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 12], "x": 0, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [0, 13], "x": 0.7, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [0, 14], "x": 1.39, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [1, 12], "x": 2.09, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [1, 13], "x": 2.78, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [1, 14], "x": 3.48, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [2, 12], "x": 4.17, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [2, 13], "x": 4.87, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [2, 14], "x": 5.56, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [3, 12], "x": 9.25, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [3, 13], "x": 9.95, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [3, 14], "x": 10.64, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [4, 12], "x": 11.34, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [4, 13], "x": 12.03, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [4, 14], "x": 12.73, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [5, 12], "x": 13.42, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [5, 14], "x": 14.12, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [5, 13], "x": 14.81, "y": 0, "w": 0.69, "h": 0.85},
{"matrix": [0, 0], "x": 0, "y": 1.25, "w": 1.25},
{"matrix": [0, 1], "x": 1.25, "y": 1.25},
{"matrix": [0, 2], "x": 2.25, "y": 1},
{"matrix": [0, 3], "x": 3.25, "y": 1},
{"matrix": [0, 4], "x": 4.25, "y": 1},
{"matrix": [0, 5], "x": 5.25, "y": 1},
{"matrix": [0, 6], "x": 9.25, "y": 1},
{"matrix": [0, 7], "x": 10.25, "y": 1},
{"matrix": [0, 8], "x": 11.25, "y": 1},
{"matrix": [0, 9], "x": 12.25, "y": 1},
{"matrix": [0, 10], "x": 13.25, "y": 1.25},
{"matrix": [0, 11], "x": 14.25, "y": 1.25, "w": 1.25},
{"matrix": [1, 0], "x": 0, "y": 2.25, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 2},
{"matrix": [1, 3], "x": 3.25, "y": 2},
{"matrix": [1, 4], "x": 4.25, "y": 2},
{"matrix": [1, 5], "x": 5.25, "y": 2},
{"matrix": [1, 6], "x": 11.25, "y": 2.25},
{"matrix": [1, 7], "x": 12.25, "y": 2.25},
{"matrix": [1, 8], "x": 13.25, "y": 2.25},
{"matrix": [1, 9], "x": 14.25, "y": 2.25},
{"matrix": [1, 10], "x": 15.25, "y": 2.25},
{"matrix": [1, 11], "x": 16.25, "y": 2.25, "w": 1.25},
{"matrix": [2, 0], "x": 0, "y": 3.25, "w": 1.25},
{"matrix": [2, 1], "x": 1.25, "y": 3.25},
{"matrix": [2, 2], "x": 2.25, "y": 3},
{"matrix": [2, 3], "x": 3.25, "y": 3},
{"matrix": [2, 4], "x": 4.25, "y": 3},
{"matrix": [2, 5], "x": 5.25, "y": 3},
{"matrix": [2, 6], "x": 9.25, "y": 3},
{"matrix": [2, 7], "x": 10.25, "y": 3},
{"matrix": [2, 8], "x": 11.25, "y": 3},
{"matrix": [2, 9], "x": 12.25, "y": 3},
{"matrix": [2, 10], "x": 13.25, "y": 3.25},
{"matrix": [2, 11], "x": 14.25, "y": 3.25, "w": 1.25},
{"matrix": [3, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 4.25},
{"matrix": [3, 2], "x": 2.25, "y": 4},
{"matrix": [3, 3], "x": 3.25, "y": 4},
{"matrix": [3, 4], "x": 4.25, "y": 4},
{"matrix": [3, 5], "x": 5.25, "y": 4},
{"matrix": [3, 6], "x": 9.25, "y": 4},
{"matrix": [3, 7], "x": 10.25, "y": 4},
{"matrix": [3, 8], "x": 11.25, "y": 4},
{"matrix": [3, 9], "x": 12.25, "y": 4},
{"matrix": [3, 10], "x": 13.25, "y": 4.25},
{"matrix": [3, 11], "x": 14.25, "y": 4.25, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 5.25},
{"matrix": [4, 2], "x": 2.25, "y": 5},
{"matrix": [4, 3], "x": 3.25, "y": 5},
{"matrix": [4, 5], "x": 4.25, "y": 5},
{"matrix": [4, 6], "x": 10.25, "y": 5},
{"matrix": [4, 8], "x": 11.25, "y": 5},
{"matrix": [4, 9], "x": 12.25, "y": 5},
{"matrix": [4, 10], "x": 13.25, "y": 5.25},
{"matrix": [6, 5], "x": 5.25, "y": 6},
{"matrix": [5, 5], "x": 6.25, "y": 6},
{"matrix": [6, 9], "x": 8.25, "y": 6},
{"matrix": [5, 8], "x": 9.25, "y": 6},
{"matrix": [5, 3], "x": 6.25, "y": 7},
{"matrix": [6, 8], "x": 8.25, "y": 7},
{"matrix": [6, 3], "x": 4.25, "y": 7, "h": 2},
{"matrix": [6, 4], "x": 5.25, "y": 7, "h": 2},
{"matrix": [5, 2], "x": 6.25, "y": 8},
{"matrix": [6, 6], "x": 8.25, "y": 8},
{"matrix": [5, 7], "x": 9.25, "y": 7, "h": 2},
{"matrix": [5, 6], "x": 10.25, "y": 7, "h": 2}
]
}
}
}

View File

@ -0,0 +1,29 @@
// Copyright 2023 Alex Stepanov (@alvicstep)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
void matrix_init_kb(void) {
uint8_t led_delay_ms = 80;
/* LED pins setup */
setPinOutput(LED_CAPS_LOCK_PIN);
writePinLow(LED_CAPS_LOCK_PIN);
wait_ms(led_delay_ms);
setPinOutput(LED_NUM_LOCK_PIN);
writePinLow(LED_NUM_LOCK_PIN);
wait_ms(led_delay_ms);
setPinOutput(LED_SCROLL_LOCK_PIN);
writePinLow(LED_SCROLL_LOCK_PIN);
wait_ms(led_delay_ms);
setPinOutput(LED_COMPOSE_PIN);
writePinLow(LED_COMPOSE_PIN);
wait_ms(led_delay_ms);
writePinHigh(LED_COMPOSE_PIN);
matrix_init_user();
}

View File

@ -0,0 +1,32 @@
# KinTwin
[KinTwin](https://github.com/alvicstep/kintwin) is a drop-in replacement of a controller and thumb cluster PCB boards for [Kinesis Contoured keyboards](https://deskthority.net/wiki/Kinesis_Contoured). The controller board is a fork of [KinBP](https://github.com/DmNosachev/KinBP).
### Keyboard
![Kinesis keyboard](https://i.imgur.com/gmuYlUyh.jpg)
### Controller
![KinTwin controller](https://i.imgur.com/vu6pexwh.jpg)
The main difference between KinTwin and KinT controllers is that the former utilizes **Blackpill STM32F401** development board and the latter utilizes **Teensy** development boards.
* Keyboard Maintainer: Alex Stepanov
* Hardware Supported: KinTwin PCB, WeAct Black Pill STM32F401 micro controller
* Hardware Availability: [Open Source (CC-BY-SA)](https://github.com/alvicstep/kintwin)
Make example for this keyboard (after setting up your build environment):
make kinesis/kintwin:default
Flashing example for this keyboard:
make kinesis/kintwin: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 top left key and plug in the keyboard.
* **Physical reset button**. Hold 'boot0' button on MCU board, press 'reset', then release 'boot0'.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# File intentionally blank

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
/* key matrix size */ /* key matrix size */

View File

@ -6,6 +6,16 @@
"pid": "0x6060", "pid": "0x6060",
"device_version": "0.0.3" "device_version": "0.0.3"
}, },
"features": {
"bootmagic": true,
"console": false,
"command": true,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"indicators": { "indicators": {
"caps_lock": "E6", "caps_lock": "E6",
"num_lock": "D4", "num_lock": "D4",

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include "matrix.h" #include "matrix.h"
#include "quantum.h" #include "quantum.h"

View File

@ -1,11 +1,7 @@
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
COMMAND_ENABLE = yes
NKRO_ENABLE = yes # Enable N-Key Rollover
SLEEP_LED_ENABLE = yes SLEEP_LED_ENABLE = yes
CUSTOM_MATRIX = lite CUSTOM_MATRIX = lite
SRC += matrix.c SRC += matrix.c

View File

@ -1,12 +1,15 @@
# Firmware for the Kinesis Advantage/Contoured keyboard # Firmware for the Kinesis Advantage/Contoured keyboard
There are at least two different ways to replace the controller in this keyboard. There are at least three different ways to replace the controller in this keyboard.
The Stapelberg folder contains the docs and configuration for using the custom controller created by Michael Stapelberg. 1. The **stapelberg** directory contains the docs and configuration for using Teensy based controller created by Michael Stapelberg.
The alvicstep folder contains docs and configuration for directly wiring a Teensy2++ to the existing controller board. This follows the pinouts described in https://github.com/alvicstep/tmk_keyboard, which is where the name comes from. 2. The **alvicstep** directory contains docs and configuration for directly wiring a Teensy2++ to the existing controller board. This follows the pinouts described in https://github.com/alvicstep/tmk_keyboard, which is where the name comes from.
3. The **kintwin** directory contains the docs and configuration for using BlackPill based controller.
## Keymaps ## Keymaps
Both hardware solutions should work with the same keymaps All three hardware solutions should work with the same keymaps
## Switch Modifications
In addition to the drop-in replacements of the stock controller above, the directory **"keyboards\kin80"** contains the files to support 80 switch modification of the keyboard, compared to original 86 switches. Kin80 keymaps are not compatible with keymaps that are located inside of **kinesis** directory.

View File

@ -1,13 +0,0 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
DEFAULT_FOLDER = kinesis/alvicstep

View File

@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
/* don't know if this should be defined at the board or top level. Assuming board /* don't know if this should be defined at the board or top level. Assuming board

View File

@ -6,6 +6,16 @@
"pid": "0x6060", "pid": "0x6060",
"device_version": "0.0.2" "device_version": "0.0.2"
}, },
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"matrix_pins": { "matrix_pins": {
"cols": ["B0", "B1", "B2", "B3", "B4", "B5", "B6"], "cols": ["B0", "B1", "B2", "B3", "B4", "B5", "B6"],
"rows": ["D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", "C4", "C5", "C6"] "rows": ["D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", "C4", "C5", "C6"]