Compare commits

...

18 Commits

Author SHA1 Message Date
QMK Bot
584dc1a856 Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 08:03:04 +00:00
QMK Bot
f830b53a7a Merge remote-tracking branch 'origin/master' into develop 2023-06-11 07:56:32 +00:00
Joe Scotto
fdb2851187
[Keyboard] Add ScottoSplit Keyboard (#20945)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-06-11 01:56:20 -06:00
QMK Bot
332a8ad1a2 Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 07:56:01 +00:00
flashquark
40c3b71569
[Keyboard] Add Flashquark Horizon Z (#21055)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-06-11 01:55:06 -06:00
QMK Bot
1fcb9a0228 Merge remote-tracking branch 'origin/master' into develop 2023-06-11 07:53:05 +00:00
Joe Scotto
33c93d3a96
[Keyboard] Add Scotto34 (PCB Edition) (#21085)
Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>
2023-06-11 01:52:43 -06:00
QMK Bot
acdc9ea74f Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 07:52:32 +00:00
Joe Scotto
1914fbd951
[Keyboard] Add Scotto9 handwired macropad (#21105)
Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-06-11 01:52:24 -06:00
QMK Bot
beaf6505ed Merge remote-tracking branch 'origin/master' into develop 2023-06-11 07:51:56 +00:00
FanXingStudio
bfdfeb6f3f
[Keyboard] Add kibou/winter (#21161) 2023-06-11 01:51:17 -06:00
QMK Bot
ab469db17a Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 07:49:34 +00:00
Duncan Sutherland
cf6c92426d
[Keyboard] correct and modernise dactyl_manuform/6x7 variant (#21176) 2023-06-11 01:48:56 -06:00
QMK Bot
c3468f9a40 Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 06:55:46 +00:00
Albert Y
3444e9656d
Refactor the rain lighting decision operator (#21139) 2023-06-10 23:55:03 -07:00
QMK Bot
0c527df562 Merge remote-tracking branch 'origin/develop' into xap 2023-06-11 06:28:36 +00:00
QMK Bot
55f226159b Merge remote-tracking branch 'origin/master' into develop 2023-06-11 06:27:53 +00:00
blindassassin111
8cd9f07c30
[Keyboard] Adding OSAv2 Topre PCB (#21080) 2023-06-10 23:27:13 -07:00
48 changed files with 2496 additions and 35 deletions

View File

@ -0,0 +1,78 @@
/* Copyright 2023 Flashquark
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifdef RGB_MATRIX_ENABLE
# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
# define RGB_MATRIX_KEYPRESSES
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
# define ENABLE_RGB_MATRIX_ALPHAS_MODS
// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_BREATHING
// # define ENABLE_RGB_MATRIX_BAND_SAT
# define ENABLE_RGB_MATRIX_BAND_VAL
// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# define ENABLE_RGB_MATRIX_CYCLE_ALL
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# define ENABLE_RGB_MATRIX_DUAL_BEACON
# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# define ENABLE_RGB_MATRIX_RAINDROPS
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
# define ENABLE_RGB_MATRIX_HUE_BREATHING
# define ENABLE_RGB_MATRIX_HUE_PENDULUM
# define ENABLE_RGB_MATRIX_HUE_WAVE
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
# define ENABLE_RGB_MATRIX_PIXEL_FLOW
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
// # define ENABLE_RGB_MATRIX_SPLASH
// # define ENABLE_RGB_MATRIX_MULTISPLASH
// # define ENABLE_RGB_MATRIX_SOLID_SPLASH
// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
# define DRIVER_ADDR_1 0b1010000
# define DRIVER_COUNT 1
# define RGB_MATRIX_LED_COUNT 62
#endif

View File

@ -0,0 +1,95 @@
/* Copyright 2023 Flashquark
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
{0, B_1, A_1, C_1},
{0, B_2, A_2, C_2},
{0, B_3, A_3, C_3},
{0, B_4, A_4, C_4},
{0, B_5, A_5, C_5},
{0, B_6, A_6, C_6},
{0, B_7, A_7, C_7},
{0, B_8, A_8, C_8},
{0, B_9, A_9, C_9},
{0, B_10, A_10, C_10},
{0, B_11, A_11, C_11},
{0, B_12, A_12, C_12},
{0, B_13, A_13, C_13},
{0, B_14, A_14, C_14},
{0, E_1, D_1, F_1},
{0, E_2, D_2, F_2},
{0, E_3, D_3, F_3},
{0, E_4, D_4, F_4},
{0, E_5, D_5, F_5},
{0, E_6, D_6, F_6},
{0, E_7, D_7, F_7},
{0, E_8, D_8, F_8},
{0, E_9, D_9, F_9},
{0, E_10, D_10, F_10},
{0, E_11, D_11, F_11},
{0, E_12, D_12, F_12},
{0, E_13, D_13, F_13},
{0, E_14, D_14, F_14},
{0, H_1, G_1, I_1},
{0, H_2, G_2, I_2},
{0, H_3, G_3, I_3},
{0, H_4, G_4, I_4},
{0, H_5, G_5, I_5},
{0, H_6, G_6, I_6},
{0, H_7, G_7, I_7},
{0, H_8, G_8, I_8},
{0, H_9, G_9, I_9},
{0, H_10, G_10, I_10},
{0, H_11, G_11, I_11},
{0, H_12, G_12, I_12},
{0, H_13, G_13, I_13},
{0, K_1, J_1, L_1},
{0, K_2, J_2, L_2},
{0, K_3, J_3, L_3},
{0, K_4, J_4, L_4},
{0, K_5, J_5, L_5},
{0, K_6, J_6, L_6},
{0, K_7, J_7, L_7},
{0, K_8, J_8, L_8},
{0, K_9, J_9, L_9},
{0, K_10, J_10, L_10},
{0, K_11, J_11, L_11},
{0, K_14, J_14, L_14},
{0, B_16, A_16, C_16},
{0, E_16, D_16, F_16},
{0, H_16, G_16, I_16},
{0, K_16, J_16, L_16},
{0, K_15, J_15, L_15},
{0, K_12, J_12, L_12},
{0, K_13, J_13, L_13},
{0, H_14, G_14, I_14},
};
#endif
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(28, 0xFF, 0xFF, 0xFF);
}
return true;
}

View File

@ -0,0 +1,162 @@
{
"manufacturer": "FLASHQUARK",
"keyboard_name": "Horizon_Z",
"maintainer": "FLASHQUARK",
"bootloader": "atmel-dfu",
"debounce": 3,
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["B5", "B6", "C6", "C7", "F7", "F6", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5"],
"rows": ["F0", "F1", "F4", "F5", "B4"]
},
"processor": "atmega32u4",
"rgb_matrix": {
"driver": "IS31FL3733",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
{ "flags": 4, "matrix": [0, 1], "x": 16, "y": 0 },
{ "flags": 4, "matrix": [0, 2], "x": 32, "y": 0 },
{ "flags": 4, "matrix": [0, 3], "x": 48, "y": 0 },
{ "flags": 4, "matrix": [0, 4], "x": 64, "y": 0 },
{ "flags": 4, "matrix": [0, 5], "x": 80, "y": 0 },
{ "flags": 4, "matrix": [0, 6], "x": 96, "y": 0 },
{ "flags": 4, "matrix": [0, 7], "x": 112, "y": 0 },
{ "flags": 4, "matrix": [0, 8], "x": 128, "y": 0 },
{ "flags": 4, "matrix": [0, 9], "x": 144, "y": 0 },
{ "flags": 4, "matrix": [0, 10], "x": 160, "y": 0 },
{ "flags": 4, "matrix": [0, 11], "x": 176, "y": 0 },
{ "flags": 4, "matrix": [0, 12], "x": 192, "y": 0 },
{ "flags": 1, "matrix": [0, 13], "x": 216, "y": 0 },
{ "flags": 4, "matrix": [1, 0], "x": 4, "y": 16 },
{ "flags": 4, "matrix": [1, 1], "x": 24, "y": 16 },
{ "flags": 4, "matrix": [1, 2], "x": 40, "y": 16 },
{ "flags": 4, "matrix": [1, 3], "x": 56, "y": 16 },
{ "flags": 4, "matrix": [1, 4], "x": 72, "y": 16 },
{ "flags": 4, "matrix": [1, 5], "x": 88, "y": 16 },
{ "flags": 4, "matrix": [1, 6], "x": 104, "y": 16 },
{ "flags": 4, "matrix": [1, 7], "x": 120, "y": 16 },
{ "flags": 4, "matrix": [1, 8], "x": 136, "y": 16 },
{ "flags": 4, "matrix": [1, 9], "x": 152, "y": 16 },
{ "flags": 4, "matrix": [1, 10], "x": 168, "y": 16 },
{ "flags": 4, "matrix": [1, 11], "x": 184, "y": 16 },
{ "flags": 4, "matrix": [1, 12], "x": 200, "y": 16 },
{ "flags": 4, "matrix": [1, 13], "x": 220, "y": 16 },
{ "flags": 4, "matrix": [2, 0], "x": 6, "y": 32 },
{ "flags": 4, "matrix": [2, 1], "x": 28, "y": 32 },
{ "flags": 4, "matrix": [2, 2], "x": 44, "y": 32 },
{ "flags": 4, "matrix": [2, 3], "x": 60, "y": 32 },
{ "flags": 4, "matrix": [2, 4], "x": 76, "y": 32 },
{ "flags": 4, "matrix": [2, 5], "x": 92, "y": 32 },
{ "flags": 4, "matrix": [2, 6], "x": 108, "y": 32 },
{ "flags": 4, "matrix": [2, 7], "x": 124, "y": 32 },
{ "flags": 4, "matrix": [2, 8], "x": 140, "y": 32 },
{ "flags": 4, "matrix": [2, 9], "x": 156, "y": 32 },
{ "flags": 4, "matrix": [2, 10], "x": 172, "y": 32 },
{ "flags": 4, "matrix": [2, 11], "x": 188, "y": 32 },
{ "flags": 1, "matrix": [2, 13], "x": 204, "y": 32 },
{ "flags": 1, "matrix": [3, 0], "x": 10, "y": 48 },
{ "flags": 4, "matrix": [3, 1], "x": 20, "y": 48 },
{ "flags": 4, "matrix": [3, 2], "x": 52, "y": 48 },
{ "flags": 4, "matrix": [3, 3], "x": 68, "y": 48 },
{ "flags": 4, "matrix": [3, 4], "x": 84, "y": 48 },
{ "flags": 4, "matrix": [3, 5], "x": 100, "y": 48 },
{ "flags": 4, "matrix": [3, 6], "x": 116, "y": 48 },
{ "flags": 4, "matrix": [3, 7], "x": 132, "y": 48 },
{ "flags": 4, "matrix": [3, 8], "x": 148, "y": 48 },
{ "flags": 4, "matrix": [3, 9], "x": 164, "y": 48 },
{ "flags": 4, "matrix": [3, 10], "x": 180, "y": 48 },
{ "flags": 1, "matrix": [3, 13], "x": 210, "y": 48 },
{ "flags": 1, "matrix": [4, 0], "x": 2, "y": 64 },
{ "flags": 1, "matrix": [4, 1], "x": 22, "y": 64 },
{ "flags": 1, "matrix": [4, 2], "x": 42, "y": 64 },
{ "flags": 1, "matrix": [4, 5], "x": 102, "y": 64 },
{ "flags": 1, "matrix": [4, 9], "x": 162, "y": 64 },
{ "flags": 1, "matrix": [4, 10], "x": 182, "y": 64 },
{ "flags": 1, "matrix": [4, 12], "x": 202, "y": 64 },
{ "flags": 1, "matrix": [4, 13], "x": 222, "y": 64 }
]
},
"url": "https://flashquark.com/product/flashquark-horizon-z-qmk-edition-custom-kit/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0223",
"vid": "0x4B42"
},
"community_layouts": ["60_ansi"],
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,35 @@
/* Copyright 2023 Flashquark
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT_60_ansi( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
CTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL),
[_LAYER1] = LAYOUT_60_ansi( /* FN */
QK_GESC, 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_DEL ,
KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT ,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_MNXT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

@ -0,0 +1,35 @@
/* Copyright 2023 Flashquark
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT_60_ansi( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
CTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL),
[_LAYER1] = LAYOUT_60_ansi( /* FN */
QK_GESC, 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_DEL ,
KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT ,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_MNXT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@ -0,0 +1,20 @@
# Horizon Z QMK Edition
A hotswap 60% keyboard by Flashquark
* Keyboard Maintainer: [Flashquark](https://flashquark.com)
* Hardware Supported: Horizon Z QMK
* Hardware Availability: [Horizon Z QMK Edition](https://flashquark.com/product/flashquark-horizon-z-qmk-edition-custom-kit/)
## Build
Make example for this keyboard (after setting up your build environment):
make flashquark/horizon_z:default
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
Press reset button on the back of keyboard.

View File

View File

@ -8,6 +8,17 @@
"pid": "0x3636", "pid": "0x3636",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"features": {
"bootmagic": true,
"command": true,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"audio": false,
"backlight": false,
"rgblight": false
},
"ws2812": { "ws2812": {
"pin": "D3" "pin": "D3"
}, },
@ -17,12 +28,15 @@
}, },
"diode_direction": "COL2ROW", "diode_direction": "COL2ROW",
"split": { "split": {
"enabled": true,
"soft_serial_pin": "D0" "soft_serial_pin": "D0"
}, },
"processor": "atmega32u4", "rgblight": {
"bootloader": "caterina", "led_count": 12
},
"development_board": "promicro",
"layouts": { "layouts": {
"LAYOUT_6x7": { "LAYOUT": {
"layout": [ "layout": [
{"matrix": [0, 0], "x": 0, "y": 0}, {"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0}, {"matrix": [0, 1], "x": 1, "y": 0},

View File

@ -12,7 +12,7 @@ enum custom_layer {
#define LOWER MO(_LOWER) #define LOWER MO(_LOWER)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_6x7( [_QWERTY] = 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_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_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_LBRC , KC_RBRC, _______, KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_LBRC , KC_RBRC,
_______, KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_QUOT , KC_BSLS, _______, KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_QUOT , KC_BSLS,
@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_BSPC,KC_GRV, KC_LGUI, KC_LALT KC_BSPC,KC_GRV, KC_LGUI, KC_LALT
), ),
[_LOWER] = LAYOUT_6x7( [_LOWER] = 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_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_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL , _______, _______, KC_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL , _______,
_______, _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS, _______, _______, _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS, _______,
@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______, _______,_______ _______,_______, _______,_______
), ),
[_RAISE] = LAYOUT_6x7( [_RAISE] = LAYOUT(
_______,KC_F12 , 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_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , _______,
_______,_______,_______,_______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NUM ,KC_INS ,KC_SCRL,KC_MUTE, _______, _______,_______,_______,_______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NUM ,KC_INS ,KC_SCRL,KC_MUTE, _______,
_______,_______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU, _______, _______,_______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU, _______,

View File

@ -10,7 +10,7 @@ enum custom_layer {
#define RAISE MO(_RAISE) #define RAISE MO(_RAISE)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTZ] = LAYOUT_6x7( [_QWERTZ] = 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_HOME, 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_HOME,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_END , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_END ,
XXXXXXX, KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, XXXXXXX, KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC,
@ -18,12 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_MPLY, KC_LCTL, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_MPLY,
KC_LEFT, KC_RGHT, KC_UP , KC_DOWN, KC_LEFT, KC_RGHT, KC_UP , KC_DOWN,
KC_SPC , KC_LSFT, KC_RALT, KC_ENT , KC_SPC , KC_LSFT, KC_RALT, KC_ENT ,
KC_LGUI, KC_LALT, KC_BSPC, KC_DEL , KC_LGUI, KC_LALT, KC_BSPC, KC_DEL ,
KC_PGDN, KC_PGUP, KC_TAB , KC_INS KC_PGDN, KC_PGUP, KC_TAB , KC_INS
), ),
[_RAISE] = LAYOUT_6x7( [_RAISE] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -31,7 +30,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD,
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______ _______, _______, _______, _______
) )

View File

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

View File

@ -0,0 +1,47 @@
{
"manufacturer": "ScottoKeebs",
"keyboard_name": "Scotto9",
"maintainer": "joe-scotto",
"diode_direction": "COL2ROW",
"development_board": "promicro",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
// 4, 5, 6
"cols": ["D4", "C6", "D7"],
// 15, 14, 16
"rows": ["B1", "B3", "B2"]
},
"url": "https://scottokeebs.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
"vid": "0x534B"
},
"community_layouts": ["ortho_3x3"],
"layouts": {
"LAYOUT_ortho_3x3": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
// Row 2
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
// Row 3
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2}
]
}
}
}

View File

@ -0,0 +1,27 @@
/*
Copyright 2022 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Keymap
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_3x3(
KC_1, KC_2, KC_3,
KC_4, KC_5, KC_6,
KC_7, KC_8, KC_9
)
};

View File

@ -0,0 +1,27 @@
# Scotto9
![Scotto9](https://i.imgur.com/inbmNSEh.jpeg)
A 9-key macropad. Case files available [here](https://github.com/joe-scotto/scottokeebs).
* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
* Hardware Supported: ATmega32U4
* Hardware Availability: [Amazon](https://amazon.com)
Make example for this keyboard (after setting up your build environment):
make handwired/scottokeebs/scotto9:default
Flashing example for this keyboard:
make handwired/scottokeebs/scotto9: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 key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,78 @@
{
"manufacturer": "ScottoKeebs",
"keyboard_name": "ScottoSplit",
"maintainer": "joe-scotto",
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
// 3, 4, 5, 6, 7, 8, 9, A3, A2, A1
"cols": ["D0", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6"]
// 15, 14, 16, 10
"rows": ["B1", "B3", "B2", "B6"]
},
"url": "https://scottokeebs.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x0012",
"vid": "0xFEED"
},
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [
// Row 1
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
// Row 2
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
// Row 3
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [2, 6], "x": 6, "y": 2 },
{ "matrix": [2, 7], "x": 7, "y": 2 },
{ "matrix": [2, 8], "x": 8, "y": 2 },
{ "matrix": [2, 9], "x": 9, "y": 2 },
// Row 4
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3 },
{ "matrix": [3, 7], "x": 7, "y": 3 }
]
}
}
}

View File

@ -1,6 +1,5 @@
/* /*
Copyright 2012 Jun Wako <wakojun@gmail.com> Copyright 2022 Joe Scotto
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -9,7 +8,7 @@ the Free Software Foundation, either version 2 of the License, or
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
@ -18,5 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
// WS2812 RGB LED strip input and number of LEDs
#define RGBLED_NUM 12 // Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD

View File

@ -0,0 +1,45 @@
/*
Copyright 2022 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
),
[1] = LAYOUT_split_3x5_3(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_split_3x5_3(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,23 @@
/*
Copyright 2022 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY

View File

@ -0,0 +1,174 @@
/*
Copyright 2022 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Tap dance declarations
enum {
TD_LCTL_ESC_SPOTLIGHT_EMOJI,
TD_LALT_ESC_WINDOWS_EMOJI
};
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
case LGUI_T(KC_SPC) :
case LT(1, KC_TAB) :
case LT(2, KC_ENT) :
return 200;
default:
return TAPPING_TERM;
}
};
// Begin quad TD
typedef enum {
TD_NONE,
TD_UNKNOWN,
TD_SINGLE_HOLD,
TD_SINGLE_TAP,
TD_DOUBLE_TAP,
TD_TRIPLE_TAP
} td_state_t;
typedef struct {
bool is_press_action;
td_state_t state;
} td_tap_t;
// Create an instance of 'td_tap_t' for the 'x' tap dance.
static td_tap_t xtap_state = {
.is_press_action = true,
.state = TD_NONE
};
td_state_t cur_dance(tap_dance_state_t *state) {
if (state->count == 1) {
if (state->interrupted || !state->pressed) {
return TD_SINGLE_TAP;
} else {
return TD_SINGLE_HOLD;
}
} else if (state->count == 2) {
return TD_DOUBLE_TAP;
} else if (state->count == 3) {
return TD_TRIPLE_TAP;
}
return TD_UNKNOWN;
}
void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP: register_code(KC_ESC); break;
case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
default: break;
}
}
void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) {
case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
default: break;
}
xtap_state.state = TD_NONE;
}
void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP: register_code(KC_ESC); break;
case TD_SINGLE_HOLD: register_code(KC_LALT); break;
case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
default: break;
}
}
void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) {
case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
default: break;
}
xtap_state.state = TD_NONE;
}
// Tap Dance definitions
tap_dance_action_t tap_dance_actions[] = {
[TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
[TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
};
// For the x tap dance. Put it here so it can be used in any keymap
void x_finished(tap_dance_state_t *state, void *user_data);
void x_reset(tap_dance_state_t *state, void *user_data);
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
),
[1] = LAYOUT_split_3x5_3(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
),
[2] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
),
[3] = LAYOUT_split_3x5_3(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
),
[4] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
),
[5] = LAYOUT_split_3x5_3(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
),
[6] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
),
[7] = LAYOUT_split_3x5_3(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
)
};

View File

@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes

View File

@ -0,0 +1,27 @@
# ScottoSplit
![ScottoSplit](https://i.imgur.com/u6rSzyHh.jpg)
A 36-key split column-staggered ortholinear keyboard that uses a single MCU and VGA cable to connect the halves. Case files available [here](https://github.com/joe-scotto/scottokeebs).
* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
* Hardware Supported: ATmega32U4
* Hardware Availability: [Amazon](https://amazon.com)
Make example for this keyboard (after setting up your build environment):
make handwired/jscotto/scottosplit:default
Flashing example for this keyboard:
make handwired/jscotto/scottosplit: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 key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,119 @@
{
"manufacturer": "kibou",
"keyboard_name": "winter",
"maintainer": "kibou",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "A4"
},
"matrix_pins": {
"cols": ["A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A3", "A6", "A10", "A15", "B9", "B4"],
"rows": ["B6", "B5", "B3", "A5", "B8", "B7"]
},
"processor": "STM32F072",
"url": "https://kibou.store/",
"usb": {
"device_version": "0.0.1",
"pid": "0xA003",
"vid": "0x586A"
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6.5, "y": 0 },
{ "matrix": [0, 7], "x": 7.5, "y": 0 },
{ "matrix": [0, 8], "x": 8.5, "y": 0 },
{ "matrix": [0, 9], "x": 9.5, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [0, 13], "x": 13, "y": 0 },
{ "matrix": [0, 14], "x": 14, "y": 0 },
{ "matrix": [0, 15], "x": 15.25, "y": 0 },
{ "matrix": [0, 16], "x": 16.25, "y": 0 },
{ "matrix": [0, 17], "x": 17.25, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "x": 2, "y": 1.25 },
{ "matrix": [1, 3], "x": 3, "y": 1.25 },
{ "matrix": [1, 4], "x": 4, "y": 1.25 },
{ "matrix": [1, 5], "x": 5, "y": 1.25 },
{ "matrix": [1, 6], "x": 6, "y": 1.25 },
{ "matrix": [1, 7], "x": 7, "y": 1.25 },
{ "matrix": [1, 8], "x": 8, "y": 1.25 },
{ "matrix": [1, 9], "x": 9, "y": 1.25 },
{ "matrix": [1, 10], "x": 10, "y": 1.25 },
{ "matrix": [1, 11], "x": 11, "y": 1.25 },
{ "matrix": [1, 12], "x": 12, "y": 1.25 },
{ "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
{ "matrix": [1, 15], "x": 15.25, "y": 1.25 },
{ "matrix": [1, 16], "x": 16.25, "y": 1.25 },
{ "matrix": [1, 17], "x": 17.25, "y": 1.25 },
{ "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "x": 1.5, "y": 2.25 },
{ "matrix": [2, 2], "x": 2.5, "y": 2.25 },
{ "matrix": [2, 3], "x": 3.5, "y": 2.25 },
{ "matrix": [2, 4], "x": 4.5, "y": 2.25 },
{ "matrix": [2, 5], "x": 5.5, "y": 2.25 },
{ "matrix": [2, 6], "x": 6.5, "y": 2.25 },
{ "matrix": [2, 7], "x": 7.5, "y": 2.25 },
{ "matrix": [2, 8], "x": 8.5, "y": 2.25 },
{ "matrix": [2, 9], "x": 9.5, "y": 2.25 },
{ "matrix": [2, 10], "x": 10.5, "y": 2.25 },
{ "matrix": [2, 11], "x": 11.5, "y": 2.25 },
{ "matrix": [2, 12], "x": 12.5, "y": 2.25 },
{ "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 },
{ "matrix": [2, 15], "x": 15.25, "y": 2.25 },
{ "matrix": [2, 16], "x": 16.25, "y": 2.25 },
{ "matrix": [2, 17], "x": 17.25, "y": 2.25 },
{ "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
{ "matrix": [3, 1], "x": 1.75, "y": 3.25 },
{ "matrix": [3, 2], "x": 2.75, "y": 3.25 },
{ "matrix": [3, 3], "x": 3.75, "y": 3.25 },
{ "matrix": [3, 4], "x": 4.75, "y": 3.25 },
{ "matrix": [3, 5], "x": 5.75, "y": 3.25 },
{ "matrix": [3, 6], "x": 6.75, "y": 3.25 },
{ "matrix": [3, 7], "x": 7.75, "y": 3.25 },
{ "matrix": [3, 8], "x": 8.75, "y": 3.25 },
{ "matrix": [3, 9], "x": 9.75, "y": 3.25 },
{ "matrix": [3, 10], "x": 10.75, "y": 3.25 },
{ "matrix": [3, 11], "x": 11.75, "y": 3.25 },
{ "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
{ "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
{ "matrix": [4, 1], "x": 2.25, "y": 4.25 },
{ "matrix": [4, 2], "x": 3.25, "y": 4.25 },
{ "matrix": [4, 3], "x": 4.25, "y": 4.25 },
{ "matrix": [4, 4], "x": 5.25, "y": 4.25 },
{ "matrix": [4, 5], "x": 6.25, "y": 4.25 },
{ "matrix": [4, 6], "x": 7.25, "y": 4.25 },
{ "matrix": [4, 7], "x": 8.25, "y": 4.25 },
{ "matrix": [4, 8], "x": 9.25, "y": 4.25 },
{ "matrix": [4, 9], "x": 10.25, "y": 4.25 },
{ "matrix": [4, 10], "x": 11.25, "y": 4.25 },
{ "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
{ "matrix": [4, 16], "x": 16.25, "y": 4.25 },
{ "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
{ "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
{ "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
{ "matrix": [5, 10], "w": 1.5, "x": 11, "y": 5.25 },
{ "matrix": [5, 14], "w": 1.5, "x": 13.5, "y": 5.25 },
{ "matrix": [5, 15], "x": 15.25, "y": 5.25 },
{ "matrix": [5, 16], "x": 16.25, "y": 5.25 },
{ "matrix": [5, 17], "x": 17.25, "y": 5.25 }
]
}
}
}

View File

@ -0,0 +1,15 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,15 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,23 @@
# winter
* Keyboard Maintainer: [kibou](https://kibou.store/)
* Hardware Supported: winter PCBs, STM32F072
* Hardware Availability: https://kibou.store/
Make example for this keyboard (after setting up your build environment):
make kibou/winter:default
Flashing example for this keyboard:
make kibou/winter: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 key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,75 @@
{
"manufacturer": "ScottoKeebs",
"keyboard_name": "Scotto34 (PCB Edition)",
"maintainer": "joe-scotto",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP18", "GP19", "GP20", "GP21", "GP22"],
"rows": ["GP0", "GP1", "GP14", "GP15"]
},
"processor": "RP2040",
"url": "https://scottokeebs.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x1013",
"vid": "0x534B"
},
"ws2812": {
"pin": "GP23",
"driver": "vendor"
},
"rgblight": {
"led_count": 1
},
"community_layouts": ["split_3x5_2"],
"layouts": {
"LAYOUT_split_3x5_2": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [2, 6], "x": 6, "y": 2 },
{ "matrix": [2, 7], "x": 7, "y": 2 },
{ "matrix": [2, 8], "x": 8, "y": 2 },
{ "matrix": [2, 9], "x": 9, "y": 2 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3 }
]
}
}
}

View File

@ -0,0 +1,23 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY

View File

@ -0,0 +1,45 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
),
[1] = LAYOUT_split_3x5_2(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_split_3x5_2(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_split_3x5_2(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,23 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY

View File

@ -0,0 +1,246 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Tap dance declarations
enum {
TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI,
TD_ESC_LCTL_LALT_WINDOWS_EMOJI
};
// Custom tapping term for multi function keys
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI) :
case TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI) :
case LGUI_T(KC_SPC) :
case LT(1, KC_SPC) :
case LT(1, KC_TAB) :
case LT(2, KC_ENT) :
return 200;
default:
return TAPPING_TERM;
}
};
// Begin quad TD
typedef enum {
TD_NONE,
TD_UNKNOWN,
TD_SINGLE_HOLD,
TD_DOUBLE_HOLD,
TD_TRIPLE_HOLD,
TD_SINGLE_TAP,
TD_DOUBLE_TAP,
TD_TRIPLE_TAP
} td_state_t;
typedef struct {
bool is_press_action;
td_state_t state;
} td_tap_t;
// Create an instance of 'td_tap_t' for the 'x' tap dance.
static td_tap_t xtap_state = {
.is_press_action = true,
.state = TD_NONE
};
td_state_t cur_dance(tap_dance_state_t *state) {
if (state->count == 1) {
if (state->interrupted || !state->pressed) {
return TD_SINGLE_TAP;
} else {
return TD_SINGLE_HOLD;
}
} else if (state->count == 2) {
if (state->interrupted || !state->pressed) {
return TD_DOUBLE_TAP;
} else {
return TD_DOUBLE_HOLD;
}
} else if (state->count == 3) {
if (state->interrupted || !state->pressed) {
return TD_TRIPLE_TAP;
} else {
return TD_TRIPLE_HOLD;
}
}
return TD_UNKNOWN;
}
void td_esc_lalt_lctl_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP: tap_code(KC_ESC); break;
case TD_SINGLE_HOLD: register_code(KC_LALT); break;
case TD_DOUBLE_HOLD: register_code(KC_LCTL); break;
case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
default: break;
}
}
void td_esc_lalt_lctl_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) {
case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
case TD_DOUBLE_HOLD: unregister_code(KC_LCTL); break;
default: break;
}
xtap_state.state = TD_NONE;
}
void td_esc_lctl_lalt_windows_emoji_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP: tap_code16(KC_ESC); break;
case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
default: break;
}
}
void td_esc_lctl_lalt_windows_emoji_reset(tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) {
case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
case TD_DOUBLE_HOLD: unregister_code(KC_LALT); break;
default: break;
}
xtap_state.state = TD_NONE;
}
// Tap Dance definitions
tap_dance_action_t tap_dance_actions[] = {
[TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lalt_lctl_spotlight_emoji_finished, td_esc_lalt_lctl_spotlight_emoji_reset),
[TD_ESC_LCTL_LALT_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lctl_lalt_windows_emoji_finished, td_esc_lctl_lalt_windows_emoji_reset)
};
// For the x tap dance. Put it here so it can be used in any keymap
void x_finished(tap_dance_state_t *state, void *user_data);
void x_reset(tap_dance_state_t *state, void *user_data);
// Onboard LED
#ifdef RGBLIGHT_ENABLE
// Configure LED
void keyboard_post_init_user(void) {
// Initialize RGB to static black
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom(HSV_BLACK);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
}
// Change LED
void housekeeping_task_user(void) {
// Caps lock status
if (host_keyboard_led_state().caps_lock) {
rgblight_setrgb_at(4, 4, 0, 0);
} else {
// Layers
switch (get_highest_layer(layer_state | default_layer_state)) {
case 0:
rgblight_setrgb_at(4, 4, 4, 0);
break;
case 1:
rgblight_setrgb_at(4, 4, 4, 0);
break;
case 2:
rgblight_setrgb_at(4, 4, 4, 0);
break;
case 3:
rgblight_setrgb_at(4, 4, 4, 0);
break;
case 4:
rgblight_setrgb_at(0, 0, 4, 0);
break;
case 5:
rgblight_setrgb_at(0, 4, 0, 0);
break;
case 6:
rgblight_setrgb_at(0, 0, 4, 0);
break;
case 7:
rgblight_setrgb_at(0, 0, 4, 0);
break;
case 8:
rgblight_setrgb_at(0, 0, 4, 0);
break;
}
}
}
#endif
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI), LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
),
[1] = LAYOUT_split_3x5_2(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_split_3x5_2(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_split_3x5_2(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(5), TO(4),
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[4] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI), LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT)
),
[5] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, KC_SLSH,
KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
),
[6] = LAYOUT_split_3x5_2(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[7] = LAYOUT_split_3x5_2(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(8), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[8] = LAYOUT_split_3x5_2(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), TO(5), TO(0),
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes

View File

@ -0,0 +1,29 @@
# Scotto34 (PCB Edition)
![Scotto34 (PCB Edition)](https://i.imgur.com/nTxYa7ih.jpg)
A low profile 34-key split monoblock ortholinear keyboard that uses 18x17mm spaced Choc switches and an exposed controller in the middle.
* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
* Hardware Supported: Scotto34 (PCB Edition), Raspberry Pi Pico
* Hardware Availability: [ScottoKeebs](https://scottokeebs.com), [Amazon](https://amazon.com), [AliExpress](https://aliexpress.com)
# Compiling
Make example for this keyboard (after setting up your build environment):
make scottokeebs/scotto34:default
Flashing example for this keyboard:
make scottokeebs/scotto34: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 key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,205 @@
/* Copyright 2023 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#include "ec.h"
#include "analog.h"
//#include "debug.h" // needed for debugging
// sensing channel definitions
#define A0 0
#define A1 1
#define A2 2
#define A3 3
#define A4 4
#define A5 5
#define A6 6
#define A7 7
// analog connection settings
#define DISCHARGE_PIN D3
#define ANALOG_PORT D4
#ifndef MUX_SEL_PIN
# define MUX_SEL_PINS \
{ D0, D1, D2 }
#endif
// pin connections
const uint8_t row_channels[] = MATRIX_ROW_PINS;
const uint8_t col_pins[] = MATRIX_COL_PINS;
const uint8_t mux_sel_pins[] = MUX_SEL_PINS;
_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS");
static ec_config_t config;
static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS];
static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); }
static inline void charge_capacitor(uint8_t col) {
setPinInput(DISCHARGE_PIN);
writePinHigh(col_pins[col]);
}
static inline void clear_all_col_pins(void) {
for (int col = 0; col < sizeof(col_pins); col++) {
writePinLow(col_pins[col]);
}
}
void init_mux_sel(void) {
for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) {
setPinOutput(mux_sel_pins[idx]);
}
}
void select_mux(uint8_t row) {
uint8_t ch = row_channels[row];
writePin(mux_sel_pins[0], ch & 1);
writePin(mux_sel_pins[1], ch & 2);
writePin(mux_sel_pins[2], ch & 4);
}
void init_col(void) {
for (int idx = 0; idx < sizeof(col_pins); idx++) {
setPinOutput(col_pins[idx]);
writePinLow(col_pins[idx]);
}
}
void ec_init(ec_config_t const* const ec_config) {
// save config
config = *ec_config;
// initialize discharge pin as discharge mode
writePinLow(DISCHARGE_PIN);
setPinOutput(DISCHARGE_PIN);
// set analog reference
analogReference(ADC_REF_POWER);
// initialize drive lines
init_col();
// initialize multiplexer select pin
init_mux_sel();
// set discharge pin to charge mode
setPinInput(DISCHARGE_PIN);
}
uint16_t ec_readkey_raw(uint8_t col, uint8_t row) {
uint16_t sw_value = 0;
discharge_capacitor();
select_mux(row);
clear_all_col_pins();
cli();
charge_capacitor(col);
sw_value = analogReadPin(ANALOG_PORT);
sei();
return sw_value;
}
bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) {
bool current_state = (*current_row >> col) & 1;
// press to release
if (current_state && sw_value < reset_pt) {
*current_row &= ~(MATRIX_ROW_SHIFTER << col);
return true;
}
// release to press
if ((!current_state) && sw_value > actuation_pt) {
*current_row |= (MATRIX_ROW_SHIFTER << col);
return true;
}
return false;
}
bool ec_matrix_scan(matrix_row_t current_matrix[]) {
bool updated = false;
for (int row = 0; row < sizeof(row_channels); row++) {
for (int col = 0; col < sizeof(col_pins); col++) {
uint16_t reset_pt = config.reset_pt;
uint16_t actuation_pt = config.actuation_pt;
//Modifying threshold values for overlapping pads
switch(row) {
case 0:
switch(col) {
case 14: // lower threshold for split backspace: left 1U( rest, btm)
case 15: // lower threshold for 2U backspace: 2U(38 rest, 60 btm)
reset_pt = 44;
actuation_pt = 48;
break;
}
break;
case 3:
switch(col) {
case 14: // Lower threshold for right shift: 1.75U(40 rest, 70 btm)
reset_pt = 48;
actuation_pt = 53;
break;
}
break;
case 4:
switch(col) {
case 3: // Lower threshold for left space: col3( rest, btm)
case 4: // Lower threshold for left space: col4(38 rest, 88 btm)
reset_pt = 50;
actuation_pt = 60;
break;
case 5: // Lower threshold for left space: col5( rest, btm)
case 6: // Lower threshold for left space: col6(40 rest, 80 btm)
reset_pt = 48;
actuation_pt = 58;
break;
case 14: // Lower threshold for right shift: 2.75U( rest, btm)
reset_pt = 48;
actuation_pt = 53;
break;
}
break;
}
ec_sw_value[col][row] = ec_readkey_raw(col, row);
updated |= ec_update_key(&current_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt);
}
}
return updated;
}
// console debugging for pad values
/*void ec_dprint_matrix(void) {
for (int row = 0; row < sizeof(row_channels); row++) {
for (int col = 0; col < sizeof(col_pins); col++) {
dprintf("%5d", ec_sw_value[col][row]);
}
dprintf("\n");
}
}*/

View File

@ -0,0 +1,31 @@
/* Copyright 2023 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include "matrix.h"
typedef struct {
uint16_t reset_pt;
uint16_t actuation_pt;
} ec_config_t;
void ec_init(ec_config_t const* const ec_config);
bool ec_matrix_scan(matrix_row_t current_matrix[]);
//void ec_dprint_matrix(void); // needed for debugging
uint16_t ec_readkey_raw(uint8_t col, uint8_t row);
bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);

View File

@ -0,0 +1,588 @@
{
"manufacturer": "Viktus Design LLC",
"keyboard_name": "OSAv2 - Topre",
"maintainer": "BlindAssassin111",
"url": "https://viktus.design",
"usb": {
"device_version": "1.6.0",
"vid": "0x5644",
"pid": "0x446F"
},
"bootloader": "atmel-dfu",
"processor": "atmega32u4",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"build": {
"lto": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "B7", "F1", "F0", "E6", "B0", "B1", "B2", "B3"],
"rows": ["A1", "A0", "A3", "A4", "A2"]
},
"indicators": {
"num_lock": "B4",
"caps_lock": "D7",
"scroll_lock": "D6"
},
"layouts": {
"LAYOUT_split_back": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_2u_back": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_split_back_175u_shift": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
{ "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_2u_back_175u_shift": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
{ "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_split_back_mirrored": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_2u_back_mirrored": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_split_back_175u_shift_mirrored": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
{ "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
},
"LAYOUT_2u_back_175u_shift_mirrored": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
{ "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
{ "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
{ "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
{ "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
{ "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
{ "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
{ "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
{ "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
{ "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
{ "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
{ "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
{ "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
{ "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
{ "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
{ "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
{ "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
{ "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
{ "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
{ "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
{ "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
{ "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
{ "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
{ "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
{ "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
{ "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
{ "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
{ "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
{ "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
{ "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
{ "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
{ "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
{ "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
{ "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
{ "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
{ "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
{ "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
{ "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
{ "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
{ "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
{ "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
{ "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
{ "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
{ "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
{ "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
{ "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
{ "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
{ "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
{ "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,34 @@
/* Copyright 2022 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_back_175u_shift(
KC_DEL, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_TILDE,
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_split_back_175u_shift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,34 @@
/* Copyright 2022 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_back_175u_shift(
KC_DEL, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_TILDE,
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_split_back_175u_shift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,49 @@
/* Copyright 2023 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#include "ec.h"
#include "matrix.h"
//#include "debug.h" // needed for debugging
#define RESET_PT 55
#define ACTUATION_PT 65
// console debugging for pad values
/*void keyboard_post_init_kb() {
debug_enable = true;
debug_matrix = true;
}*/
void matrix_init_custom(void) {
ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT};
ec_init(&ec_config);
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool updated = ec_matrix_scan(current_matrix);
// console debugging for pad values
/*static int cnt = 0;
if (cnt++ == 300) {
cnt = 0;
ec_dprint_matrix();
dprintf("\n");
}*/
return updated;
}

View File

@ -0,0 +1,25 @@
# OSAv2 Topre
![osav2_topre](https://i.imgur.com/WTRrpQFh.png)
- Keyboard Maintainer: BlindAssassin111
- Hardware Supported: OSAv2 Topre PCBs
- Hardware Availability: Viktus Design LLC
Make example for this keyboard (after setting up your build environment):
make viktus/osav2_topre:default
Flashing example for this keyboard:
make viktus/osav2_topre: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 key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,3 @@
CUSTOM_MATRIX = lite
QUANTUM_LIB_SRC += analog.c
SRC += ec.c

View File

@ -16,13 +16,9 @@ static bool PIXEL_RAIN(effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[led_index], params->flags)) { if (!HAS_ANY_FLAGS(g_led_config.flags[led_index], params->flags)) {
return; return;
} }
if (random8() & 2) { HSV hsv = (random8() & 2) ? (HSV){0, 0, 0} : (HSV){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v};
rgb_matrix_set_color(led_index, 0, 0, 0); RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
} else { rgb_matrix_set_color(led_index, rgb.r, rgb.g, rgb.b);
HSV hsv = {random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v};
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
rgb_matrix_set_color(led_index, rgb.r, rgb.g, rgb.b);
}
wait_timer = g_rgb_timer + interval(); wait_timer = g_rgb_timer + interval();
} }