Co-authored-by: Ryan <fauxpark@gmail.com>pull/21773/head
@ -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` | ~ | |
@ -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,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 |