Kintwin controller for kinesis keyboard, split layout (#21614)
Co-authored-by: Ryan <fauxpark@gmail.com>master
parent
3da773dbdb
commit
6f3beae895
@ -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 |
||||
|
||||
 |
||||
 |
||||
 |
||||
|
||||
#### 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` | ~ | |
@ -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 |
||||
 |
||||
|
||||
### Controller |
||||
 |
||||
|
||||
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,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. |
||||
|
||||
## Keymaps |
||||
Both hardware solutions should work with the same keymaps |
||||
3. The **kintwin** directory contains the docs and configuration for using BlackPill based controller. |
||||
|
||||
## 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
|
Loading…
Reference in new issue