Kintwin controller for kinesis keyboard, split layout (#21614)
Co-authored-by: Ryan <fauxpark@gmail.com>master
parent
3da773dbdb
commit
6f3beae895
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "alvicstep.h"
|
||||
|
||||
// begin section origin https://github.com/alvicstep/tmk_keyboard
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* key matrix size */
|
||||
|
|
|
@ -6,6 +6,16 @@
|
|||
"pid": "0x6060",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"processor": "at90usb1286",
|
||||
"bootloader": "halfkay",
|
||||
"layouts": {
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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` | ~ |
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define QWERTY 0 // Base qwerty
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define _DVORAK 0 // Base Dvorak layer
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define DVORAK_MAC_MODE 0 // Base Dvorak in Kinesis's Mac Mode with (Cmd, Option, Ctrl, Cmd) thumbkeys
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_german.h"
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
"device_version": "0.0.2",
|
||||
"max_power": 100
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"build": {
|
||||
"debounce_type": "sym_eager_pk"
|
||||
},
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
"device_version": "0.0.1",
|
||||
"max_power": 100
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"build": {
|
||||
"debounce_type": "sym_eager_pk"
|
||||
},
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
"device_version": "0.0.1",
|
||||
"max_power": 100
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"build": {
|
||||
"debounce_type": "sym_eager_pk"
|
||||
},
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
"device_version": "0.0.1",
|
||||
"max_power": 50
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"build": {
|
||||
"debounce_type": "sym_eager_pk"
|
||||
},
|
||||
|
|
|
@ -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}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
# File intentionally blank
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* key matrix size */
|
||||
|
|
|
@ -6,6 +6,16 @@
|
|||
"pid": "0x6060",
|
||||
"device_version": "0.0.3"
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": true,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "E6",
|
||||
"num_lock": "D4",
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "matrix.h"
|
||||
|
||||
#include "quantum.h"
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
# Build Options
|
||||
# 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
|
||||
CUSTOM_MATRIX = lite
|
||||
SRC += matrix.c
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
# 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
|
||||
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.
|
|
@ -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
|
|
@ -1,3 +1,6 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* don't know if this should be defined at the board or top level. Assuming board
|
||||
|
|
|
@ -6,6 +6,16 @@
|
|||
"pid": "0x6060",
|
||||
"device_version": "0.0.2"
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"console": false,
|
||||
"command": false,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"audio": false,
|
||||
"backlight": false
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["B0", "B1", "B2", "B3", "B4", "B5", "B6"],
|
||||
"rows": ["D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", "C4", "C5", "C6"]
|
||||
|
|
Loading…
Reference in New Issue