Merge remote-tracking branch 'origin/master' into develop

This commit is contained in:
zvecr 2023-08-21 22:59:43 +01:00
commit 892ba2ed01
82 changed files with 3870 additions and 17 deletions

View file

@ -0,0 +1,20 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi_blocker(
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_BSPC, KC_DEL,
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_HOME,
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_PGUP,
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_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
KC_GRV, 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_MUTE,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD,
_______, _______, _______, EE_CLR, KC_APP, _______, KC_HOME, KC_PGDN, KC_END
)
};

View file

@ -0,0 +1,5 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_LAYER_COUNT 8

View file

@ -0,0 +1,20 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi_blocker(
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_BSPC, KC_DEL,
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_HOME,
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_PGUP,
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_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
KC_GRV, 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_MUTE,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD,
_______, _______, _______, EE_CLR, KC_APP, _______, KC_HOME, KC_PGDN, KC_END
)
};

View file

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

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <board.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U

View file

@ -0,0 +1,29 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define ADC_BUFFER_DEPTH 4
#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
#define I2C_DRIVER I2CD2
#define I2C1_SCL_PIN A9
#define I2C1_SDA_PIN A10
#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
#define EXTERNAL_EEPROM_WP_PIN B5
#define EEPROM_I2C_24LC256
#define DRIVER_ADDR_1 0b1010011
#define DRIVER_ADDR_2 0b1011111
#define DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 111
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_CYCLE_ZONES_ENABLE
#define RGB_MATRIX_CAPS_LOCK_INDEX 30

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_ADC TRUE
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,261 @@
{
"keyboard_name": "ALT v2",
"manufacturer": "Drop Inc.",
"maintainer": "zvecr",
"processor": "STM32F303",
"bootloader": "tinyuf2",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C0", "C1", "C2", "C3", "B4", "B3", "C6", "C7", "C8", "C9", "C10", "C11", "C12", "C13", "C14"],
"rows": ["A0", "A1", "A2", "A3", "B10"]
},
"usb": {
"vid": "0x359B",
"pid": "0x0006",
"device_version": "2.0.0"
},
"eeprom": {
"driver": "i2c"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"community_layouts": ["65_ansi_blocker"],
"layout_aliases": {
"LAYOUT": "LAYOUT_65_ansi_blocker"
},
"layouts": {
"LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [0, 0], "label":"ESCAPE", "x":0, "y":0},
{"matrix": [0, 1], "label":"1", "x":1, "y":0},
{"matrix": [0, 2], "label":"2", "x":2, "y":0},
{"matrix": [0, 3], "label":"3", "x":3, "y":0},
{"matrix": [0, 4], "label":"4", "x":4, "y":0},
{"matrix": [0, 5], "label":"5", "x":5, "y":0},
{"matrix": [0, 6], "label":"6", "x":6, "y":0},
{"matrix": [0, 7], "label":"7", "x":7, "y":0},
{"matrix": [0, 8], "label":"8", "x":8, "y":0},
{"matrix": [0, 9], "label":"9", "x":9, "y":0},
{"matrix": [0, 10], "label":"0", "x":10, "y":0},
{"matrix": [0, 11], "label":"MINUS", "x":11, "y":0},
{"matrix": [0, 12], "label":"EQUALS", "x":12, "y":0},
{"matrix": [0, 13], "label":"BACKSPACE", "x":13, "y":0, "w":2},
{"matrix": [0, 14], "label":"DELETE", "x":15, "y":0},
{"matrix": [1, 0], "label":"TAB", "x":0, "y":1, "w":1.5},
{"matrix": [1, 1], "label":"Q", "x":1.5, "y":1},
{"matrix": [1, 2], "label":"W", "x":2.5, "y":1},
{"matrix": [1, 3], "label":"E", "x":3.5, "y":1},
{"matrix": [1, 4], "label":"R", "x":4.5, "y":1},
{"matrix": [1, 5], "label":"T", "x":5.5, "y":1},
{"matrix": [1, 6], "label":"Y", "x":6.5, "y":1},
{"matrix": [1, 7], "label":"U", "x":7.5, "y":1},
{"matrix": [1, 8], "label":"I", "x":8.5, "y":1},
{"matrix": [1, 9], "label":"O", "x":9.5, "y":1},
{"matrix": [1, 10], "label":"P", "x":10.5, "y":1},
{"matrix": [1, 11], "label":"LEFT BRACKET", "x":11.5, "y":1},
{"matrix": [1, 12], "label":"RIGHT BRACKET", "x":12.5, "y":1},
{"matrix": [1, 13], "label":"BACK SLASH", "x":13.5, "y":1, "w":1.5},
{"matrix": [1, 14], "label":"HOME", "x":15, "y":1},
{"matrix": [2, 0], "label":"CAPS LOCK", "x":0, "y":2, "w":1.75},
{"matrix": [2, 1], "label":"A", "x":1.75, "y":2},
{"matrix": [2, 2], "label":"S", "x":2.75, "y":2},
{"matrix": [2, 3], "label":"D", "x":3.75, "y":2},
{"matrix": [2, 4], "label":"F", "x":4.75, "y":2},
{"matrix": [2, 5], "label":"G", "x":5.75, "y":2},
{"matrix": [2, 6], "label":"H", "x":6.75, "y":2},
{"matrix": [2, 7], "label":"J", "x":7.75, "y":2},
{"matrix": [2, 8], "label":"K", "x":8.75, "y":2},
{"matrix": [2, 9], "label":"L", "x":9.75, "y":2},
{"matrix": [2, 10], "label":"SEMICOLON", "x":10.75, "y":2},
{"matrix": [2, 11], "label":"SINGLE TICK", "x":11.75, "y":2},
{"matrix": [2, 13], "label":"ENTER", "x":12.75, "y":2, "w":2.25},
{"matrix": [2, 14], "label":"PAGE UP", "x":15, "y":2},
{"matrix": [3, 0], "label":"LEFT SHIFT", "x":0, "y":3, "w":2.25},
{"matrix": [3, 2], "label":"Z", "x":2.25, "y":3},
{"matrix": [3, 3], "label":"X", "x":3.25, "y":3},
{"matrix": [3, 4], "label":"C", "x":4.25, "y":3},
{"matrix": [3, 5], "label":"V", "x":5.25, "y":3},
{"matrix": [3, 6], "label":"B", "x":6.25, "y":3},
{"matrix": [3, 7], "label":"N", "x":7.25, "y":3},
{"matrix": [3, 8], "label":"M", "x":8.25, "y":3},
{"matrix": [3, 9], "label":"COMMA", "x":9.25, "y":3},
{"matrix": [3, 10], "label":"PERIOD", "x":10.25, "y":3},
{"matrix": [3, 11], "label":"FORWARD SLASH", "x":11.25, "y":3},
{"matrix": [3, 12], "label":"RIGHT SHIFT", "x":12.25, "y":3, "w":1.75},
{"matrix": [3, 13], "label":"UP ARROW", "x":14, "y":3},
{"matrix": [3, 14], "label":"PAGE DOWN", "x":15, "y":3},
{"matrix": [4, 0], "label":"LEFT CTRL", "x":0, "y":4, "w":1.25},
{"matrix": [4, 1], "label":"LEFT WIN", "x":1.25, "y":4, "w":1.25},
{"matrix": [4, 2], "label":"LEFT ALT", "x":2.5, "y":4, "w":1.25},
{"matrix": [4, 6], "label":"SPACEBAR", "x":3.75, "y":4, "w":6.25},
{"matrix": [4, 10], "label":"RIGHT ALT", "x":10, "y":4, "w":1.25},
{"matrix": [4, 11], "label":"FN", "x":11.25, "y":4, "w":1.25},
{"matrix": [4, 12], "label":"LEFT ARROW", "x":13, "y":4},
{"matrix": [4, 13], "label":"DOWN ARROW", "x":14, "y":4},
{"matrix": [4, 14], "label":"RIGHT ARROW", "x":15, "y":4}
]
}
},
"rgb_matrix": {
"driver": "IS31FL3733",
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{ "flags": 4, "matrix": [0, 0], "x": 8, "y": 56 },
{ "flags": 4, "matrix": [0, 1], "x": 22, "y": 56 },
{ "flags": 4, "matrix": [0, 2], "x": 35, "y": 56 },
{ "flags": 4, "matrix": [0, 3], "x": 49, "y": 56 },
{ "flags": 4, "matrix": [0, 4], "x": 63, "y": 56 },
{ "flags": 4, "matrix": [0, 5], "x": 77, "y": 56 },
{ "flags": 4, "matrix": [0, 6], "x": 91, "y": 56 },
{ "flags": 4, "matrix": [0, 7], "x": 105, "y": 56 },
{ "flags": 4, "matrix": [0, 8], "x": 118, "y": 56 },
{ "flags": 4, "matrix": [0, 9], "x": 132, "y": 56 },
{ "flags": 4, "matrix": [0, 10], "x": 146, "y": 56 },
{ "flags": 4, "matrix": [0, 11], "x": 160, "y": 56 },
{ "flags": 4, "matrix": [0, 12], "x": 174, "y": 56 },
{ "flags": 4, "matrix": [0, 13], "x": 195, "y": 56 },
{ "flags": 4, "matrix": [0, 14], "x": 215, "y": 56 },
{ "flags": 4, "matrix": [1, 0], "x": 11, "y": 44 },
{ "flags": 4, "matrix": [1, 1], "x": 28, "y": 44 },
{ "flags": 4, "matrix": [1, 2], "x": 42, "y": 44 },
{ "flags": 4, "matrix": [1, 3], "x": 56, "y": 44 },
{ "flags": 4, "matrix": [1, 4], "x": 70, "y": 44 },
{ "flags": 4, "matrix": [1, 5], "x": 84, "y": 44 },
{ "flags": 4, "matrix": [1, 6], "x": 98, "y": 44 },
{ "flags": 4, "matrix": [1, 7], "x": 112, "y": 44 },
{ "flags": 4, "matrix": [1, 8], "x": 125, "y": 44 },
{ "flags": 4, "matrix": [1, 9], "x": 139, "y": 44 },
{ "flags": 4, "matrix": [1, 10], "x": 153, "y": 44 },
{ "flags": 4, "matrix": [1, 11], "x": 167, "y": 44 },
{ "flags": 4, "matrix": [1, 12], "x": 181, "y": 44 },
{ "flags": 4, "matrix": [1, 13], "x": 198, "y": 44 },
{ "flags": 4, "matrix": [1, 14], "x": 215, "y": 44 },
{ "flags": 4, "matrix": [2, 0], "x": 13, "y": 32 },
{ "flags": 4, "matrix": [2, 1], "x": 32, "y": 32 },
{ "flags": 4, "matrix": [2, 2], "x": 46, "y": 32 },
{ "flags": 4, "matrix": [2, 3], "x": 60, "y": 32 },
{ "flags": 4, "matrix": [2, 4], "x": 73, "y": 32 },
{ "flags": 4, "matrix": [2, 5], "x": 87, "y": 32 },
{ "flags": 4, "matrix": [2, 6], "x": 101, "y": 32 },
{ "flags": 4, "matrix": [2, 7], "x": 115, "y": 32 },
{ "flags": 4, "matrix": [2, 8], "x": 129, "y": 32 },
{ "flags": 4, "matrix": [2, 9], "x": 143, "y": 32 },
{ "flags": 4, "matrix": [2, 10], "x": 156, "y": 32 },
{ "flags": 4, "matrix": [2, 11], "x": 170, "y": 32 },
{ "flags": 4, "matrix": [2, 13], "x": 193, "y": 32 },
{ "flags": 4, "matrix": [2, 14], "x": 215, "y": 32 },
{ "flags": 4, "matrix": [3, 0], "x": 16, "y": 19 },
{ "flags": 4, "matrix": [3, 2], "x": 39, "y": 19 },
{ "flags": 4, "matrix": [3, 3], "x": 53, "y": 19 },
{ "flags": 4, "matrix": [3, 4], "x": 67, "y": 19 },
{ "flags": 4, "matrix": [3, 5], "x": 80, "y": 19 },
{ "flags": 4, "matrix": [3, 6], "x": 94, "y": 19 },
{ "flags": 4, "matrix": [3, 7], "x": 108, "y": 19 },
{ "flags": 4, "matrix": [3, 8], "x": 122, "y": 19 },
{ "flags": 4, "matrix": [3, 9], "x": 136, "y": 19 },
{ "flags": 4, "matrix": [3, 10], "x": 150, "y": 19 },
{ "flags": 4, "matrix": [3, 11], "x": 163, "y": 19 },
{ "flags": 4, "matrix": [3, 12], "x": 182, "y": 19 },
{ "flags": 4, "matrix": [3, 13], "x": 201, "y": 19 },
{ "flags": 4, "matrix": [3, 14], "x": 215, "y": 19 },
{ "flags": 4, "matrix": [4, 0], "x": 9, "y": 7 },
{ "flags": 4, "matrix": [4, 1], "x": 27, "y": 7 },
{ "flags": 4, "matrix": [4, 2], "x": 44, "y": 7 },
{ "flags": 4, "matrix": [4, 6], "x": 96, "y": 7 },
{ "flags": 4, "matrix": [4, 10], "x": 148, "y": 7 },
{ "flags": 4, "matrix": [4, 11], "x": 165, "y": 7 },
{ "flags": 4, "matrix": [4, 12], "x": 188, "y": 7 },
{ "flags": 4, "matrix": [4, 13], "x": 201, "y": 7 },
{ "flags": 4, "matrix": [4, 14], "x": 215, "y": 7 },
{ "flags": 2, "x": 1, "y": 1 },
{ "flags": 2, "x": 15, "y": 0 },
{ "flags": 2, "x": 31, "y": 0 },
{ "flags": 2, "x": 47, "y": 0 },
{ "flags": 2, "x": 63, "y": 0 },
{ "flags": 2, "x": 79, "y": 0 },
{ "flags": 2, "x": 95, "y": 0 },
{ "flags": 2, "x": 112, "y": 0 },
{ "flags": 2, "x": 128, "y": 0 },
{ "flags": 2, "x": 144, "y": 0 },
{ "flags": 2, "x": 160, "y": 0 },
{ "flags": 2, "x": 176, "y": 0 },
{ "flags": 2, "x": 192, "y": 0 },
{ "flags": 2, "x": 208, "y": 0 },
{ "flags": 2, "x": 222, "y": 1 },
{ "flags": 2, "x": 224, "y": 13 },
{ "flags": 2, "x": 224, "y": 25 },
{ "flags": 2, "x": 224, "y": 38 },
{ "flags": 2, "x": 224, "y": 50 },
{ "flags": 2, "x": 222, "y": 62 },
{ "flags": 2, "x": 191, "y": 64 },
{ "flags": 2, "x": 179, "y": 64 },
{ "flags": 2, "x": 167, "y": 64 },
{ "flags": 2, "x": 153, "y": 64 },
{ "flags": 2, "x": 139, "y": 64 },
{ "flags": 2, "x": 125, "y": 64 },
{ "flags": 2, "x": 112, "y": 64 },
{ "flags": 2, "x": 98, "y": 64 },
{ "flags": 2, "x": 84, "y": 64 },
{ "flags": 2, "x": 70, "y": 64 },
{ "flags": 2, "x": 56, "y": 64 },
{ "flags": 2, "x": 42, "y": 64 },
{ "flags": 2, "x": 28, "y": 64 },
{ "flags": 2, "x": 1, "y": 62 },
{ "flags": 2, "x": 0, "y": 50 },
{ "flags": 2, "x": 0, "y": 38 },
{ "flags": 2, "x": 0, "y": 25 },
{ "flags": 2, "x": 0, "y": 13 }
]
}
}

View file

@ -0,0 +1,20 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 16
#undef STM32_PREDIV_VALUE
#define STM32_PREDIV_VALUE 2
#undef STM32_ADC_USE_ADC2
#define STM32_ADC_USE_ADC2 TRUE
#undef STM32_ADC_USE_ADC3
#define STM32_ADC_USE_ADC3 TRUE
#undef STM32_I2C_USE_I2C2
#define STM32_I2C_USE_I2C2 TRUE

View file

@ -0,0 +1,24 @@
# ALT v2
The Drop ALT v2 is a 65% mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
* Hardware Availability: [Drop ALT Mechanical Keyboard](https://drop.com/buy/drop-alt-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make drop/alt/v2:default
Flashing example for this keyboard:
make drop/alt/v2: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**: Quickly double tap the button located under the spacebar
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1,4 @@
UF2_DEVICE_TYPE_ID = 0x35446147
UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
SRC += analog.c lib/common.c lib/mux.c

114
keyboards/drop/alt/v2/v2.c Normal file
View file

@ -0,0 +1,114 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef RGB_MATRIX_ENABLE
# include "rgb_matrix.h"
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
{ 1, B_2, A_2, C_2 },
{ 1, E_3, D_3, F_3 },
{ 1, E_4, D_4, F_4 },
{ 1, E_5, D_5, F_5 },
{ 1, E_6, D_6, F_6 },
{ 1, E_7, D_7, F_7 },
{ 1, E_8, D_8, F_8 },
{ 1, B_13, A_13, C_13 },
{ 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, B_7, A_7, C_7 },
{ 1, E_2, D_2, F_2 },
{ 1, H_3, G_3, I_3 },
{ 1, H_4, G_4, I_4 },
{ 1, H_5, G_5, I_5 },
{ 1, H_6, G_6, I_6 },
{ 1, H_7, G_7, I_7 },
{ 1, H_8, G_8, I_8 },
{ 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, K_11, J_11, L_11 },
{ 0, H_6, G_6, I_6 },
{ 0, E_7, D_7, F_7 },
{ 1, H_2, G_2, I_2 },
{ 1, K_3, J_3, L_3 },
{ 1, K_4, J_4, L_4 },
{ 1, K_5, J_5, L_5 },
{ 1, K_6, J_6, L_6 },
{ 1, K_7, J_7, L_7 },
{ 1, K_8, J_8, L_8 },
{ 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, H_7, G_7, I_7 },
{ 1, K_2, J_2, L_2 },
{ 1, E_9, D_9, F_9 },
{ 1, B_9, A_9, C_9 },
{ 1, K_9, J_9, L_9 },
{ 1, H_9, G_9, I_9 },
{ 1, K_12, J_12, L_12 },
{ 1, K_13, J_13, L_13 },
{ 0, K_9, J_9, L_9 },
{ 0, K_10, J_10, L_10 },
{ 0, H_10, G_10, I_10 },
{ 0, H_11, G_11, I_11 },
{ 0, B_11, A_11, C_11 },
{ 0, E_11, D_11, F_11 },
{ 0, K_7, J_7, L_7 },
{ 1, H_10, G_10, I_10 },
{ 1, E_10, D_10, F_10 },
{ 1, B_10, A_10, C_10 },
{ 1, H_12, G_12, I_12 },
{ 0, E_10, D_10, F_10 },
{ 0, B_10, A_10, C_10 },
{ 0, B_12, A_12, C_12 },
{ 0, H_12, G_12, I_12 },
{ 0, E_12, D_12, F_12 },
{ 1, K_11, J_11, L_11 },
{ 1, H_11, G_11, I_11 },
{ 1, E_11, D_11, F_11 },
{ 1, B_11, A_11, C_11 },
{ 1, B_12, A_12, C_12 },
{ 1, E_12, D_12, F_12 },
{ 1, E_13, D_13, F_13 },
{ 1, H_13, G_13, I_13 },
{ 0, H_9, G_9, I_9 },
{ 0, E_9, D_9, F_9 },
{ 0, B_9, A_9, C_9 },
{ 0, B_13, A_13, C_13 },
{ 0, H_13, G_13, I_13 },
{ 0, E_13, D_13, F_13 },
{ 0, K_13, J_13, L_13 },
{ 0, K_12, J_12, L_12 },
{ 0, K_8, J_8, L_8 },
{ 0, H_8, G_8, I_8 },
{ 0, E_8, D_8, F_8 },
{ 0, B_8, A_8, C_8 },
{ 0, B_6, A_6, C_6 },
{ 0, B_5, A_5, C_5 },
{ 0, B_4, A_4, C_4 },
{ 0, B_3, A_3, C_3 },
{ 0, B_2, A_2, C_2 },
{ 0, B_1, A_1, C_1 },
{ 0, B_14, A_14, C_14 },
{ 1, B_8, A_8, C_8 },
{ 1, B_7, A_7, C_7 },
{ 1, B_6, A_6, C_6 },
{ 1, B_5, A_5, C_5 },
{ 1, B_4, A_4, C_4 },
{ 1, B_3, A_3, C_3 },
{ 1, B_1, A_1, C_1 },
{ 1, E_1, D_1, F_1 },
{ 1, H_1, G_1, I_1 },
{ 1, K_1, J_1, L_1 },
{ 1, K_10, J_10, L_10 },
};
#endif

View file

@ -0,0 +1,22 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi(
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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -0,0 +1,5 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_LAYER_COUNT 8

View file

@ -0,0 +1,22 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi(
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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
)
};

View file

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

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <board.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U

View file

@ -0,0 +1,29 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define ADC_BUFFER_DEPTH 4
#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
#define I2C_DRIVER I2CD2
#define I2C1_SCL_PIN A9
#define I2C1_SDA_PIN A10
#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
#define EXTERNAL_EEPROM_WP_PIN B5
#define EEPROM_I2C_24LC256
#define DRIVER_ADDR_1 0b1010011
#define DRIVER_ADDR_2 0b1011111
#define DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 119
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_CYCLE_ZONES_ENABLE
#define RGB_MATRIX_CAPS_LOCK_INDEX 50

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_ADC TRUE
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,295 @@
{
"keyboard_name": "CTRL v2",
"manufacturer": "Drop Inc.",
"maintainer": "zvecr",
"processor": "STM32F303",
"bootloader": "tinyuf2",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C0", "C1", "C2", "C3", "C6", "C7", "C8", "C9"],
"rows": ["A0", "A1", "A2", "A3", "C10", "C11", "C12", "B3", "C14", "C13", "C15"]
},
"usb": {
"vid": "0x359B",
"pid": "0x0009",
"device_version": "2.0.0"
},
"eeprom": {
"driver": "i2c"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"community_layouts": ["tkl_ansi"],
"layout_aliases": {
"LAYOUT": "LAYOUT_tkl_ansi"
},
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "label":"ESCAPE", "x":0, "y":0},
{"matrix": [0, 1], "label":"F1", "x":2, "y":0},
{"matrix": [0, 2], "label":"F2", "x":3, "y":0},
{"matrix": [0, 3], "label":"F3", "x":4, "y":0},
{"matrix": [0, 4], "label":"F4", "x":5, "y":0},
{"matrix": [0, 5], "label":"F5", "x":6.5, "y":0},
{"matrix": [0, 6], "label":"F6", "x":7.5, "y":0},
{"matrix": [0, 7], "label":"F7", "x":8.5, "y":0},
{"matrix": [6, 0], "label":"F8", "x":9.5, "y":0},
{"matrix": [6, 1], "label":"F9", "x":11, "y":0},
{"matrix": [6, 2], "label":"F10", "x":12, "y":0},
{"matrix": [6, 3], "label":"F11", "x":13, "y":0},
{"matrix": [6, 4], "label":"F12", "x":14, "y":0},
{"matrix": [6, 5], "label":"PRINT SCREEN", "x":15.5, "y":0},
{"matrix": [6, 6], "label":"SCROLL LOCK", "x":16.5, "y":0},
{"matrix": [6, 7], "label":"PAUSE BREAK", "x":17.5, "y":0},
{"matrix": [1, 0], "label":"BACKTICK", "x":0, "y":1.5},
{"matrix": [1, 1], "label":"1", "x":1, "y":1.5},
{"matrix": [1, 2], "label":"2", "x":2, "y":1.5},
{"matrix": [1, 3], "label":"3", "x":3, "y":1.5},
{"matrix": [1, 4], "label":"4", "x":4, "y":1.5},
{"matrix": [1, 5], "label":"5", "x":5, "y":1.5},
{"matrix": [1, 6], "label":"6", "x":6, "y":1.5},
{"matrix": [1, 7], "label":"7", "x":7, "y":1.5},
{"matrix": [7, 0], "label":"8", "x":8, "y":1.5},
{"matrix": [7, 1], "label":"9", "x":9, "y":1.5},
{"matrix": [7, 2], "label":"0", "x":10, "y":1.5},
{"matrix": [7, 3], "label":"MINUS", "x":11, "y":1.5},
{"matrix": [7, 4], "label":"EQUALS", "x":12, "y":1.5},
{"matrix": [7, 5], "label":"BACKSPACE", "x":13, "y":1.5, "w":2},
{"matrix": [7, 6], "label":"INSERT", "x":15.5, "y":1.5},
{"matrix": [7, 7], "label":"HOME", "x":16.5, "y":1.5},
{"matrix": [9, 7], "label":"PAGE UP", "x":17.5, "y":1.5},
{"matrix": [2, 0], "label":"TAB", "x":0, "y":2.5, "w":1.5},
{"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.5},
{"matrix": [2, 2], "label":"W", "x":2.5, "y":2.5},
{"matrix": [2, 3], "label":"E", "x":3.5, "y":2.5},
{"matrix": [2, 4], "label":"R", "x":4.5, "y":2.5},
{"matrix": [2, 5], "label":"T", "x":5.5, "y":2.5},
{"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.5},
{"matrix": [2, 7], "label":"U", "x":7.5, "y":2.5},
{"matrix": [8, 0], "label":"I", "x":8.5, "y":2.5},
{"matrix": [8, 1], "label":"O", "x":9.5, "y":2.5},
{"matrix": [8, 2], "label":"P", "x":10.5, "y":2.5},
{"matrix": [8, 3], "label":"LEFT BRACKET", "x":11.5, "y":2.5},
{"matrix": [8, 4], "label":"RIGHT BRACKET", "x":12.5, "y":2.5},
{"matrix": [8, 5], "label":"BACK SLASH", "x":13.5, "y":2.5, "w":1.5},
{"matrix": [8, 6], "label":"DELETE", "x":15.5, "y":2.5},
{"matrix": [8, 7], "label":"END", "x":16.5, "y":2.5},
{"matrix": [9, 6], "label":"PAGE DOWN", "x":17.5, "y":2.5},
{"matrix": [3, 0], "label":"CAPS LOCK", "x":0, "y":3.5, "w":1.75},
{"matrix": [3, 1], "label":"A", "x":1.75, "y":3.5},
{"matrix": [3, 2], "label":"S", "x":2.75, "y":3.5},
{"matrix": [3, 3], "label":"D", "x":3.75, "y":3.5},
{"matrix": [3, 4], "label":"F", "x":4.75, "y":3.5},
{"matrix": [3, 5], "label":"G", "x":5.75, "y":3.5},
{"matrix": [3, 6], "label":"H", "x":6.75, "y":3.5},
{"matrix": [3, 7], "label":"J", "x":7.75, "y":3.5},
{"matrix": [9, 0], "label":"K", "x":8.75, "y":3.5},
{"matrix": [9, 1], "label":"L", "x":9.75, "y":3.5},
{"matrix": [9, 2], "label":"SEMICOLON", "x":10.75, "y":3.5},
{"matrix": [9, 3], "label":"SINGLE TICK", "x":11.75, "y":3.5},
{"matrix": [9, 4], "label":"ENTER", "x":12.75, "y":3.5, "w":2.25},
{"matrix": [4, 0], "label":"LEFT SHIFT", "x":0, "y":4.5, "w":2.25},
{"matrix": [4, 1], "label":"Z", "x":2.25, "y":4.5},
{"matrix": [4, 2], "label":"X", "x":3.25, "y":4.5},
{"matrix": [4, 3], "label":"C", "x":4.25, "y":4.5},
{"matrix": [4, 4], "label":"V", "x":5.25, "y":4.5},
{"matrix": [4, 5], "label":"B", "x":6.25, "y":4.5},
{"matrix": [4, 6], "label":"N", "x":7.25, "y":4.5},
{"matrix": [4, 7], "label":"M", "x":8.25, "y":4.5},
{"matrix": [10, 0], "label":"COMMA", "x":9.25, "y":4.5},
{"matrix": [10, 1], "label":"PERIOD", "x":10.25, "y":4.5},
{"matrix": [10, 2], "label":"FORWARD SLASH", "x":11.25, "y":4.5},
{"matrix": [10, 3], "label":"RIGHT SHIFT", "x":12.25, "y":4.5, "w":2.75},
{"matrix": [9, 5], "label":"UP ARROW", "x":16.5, "y":4.5},
{"matrix": [5, 0], "label":"LEFT CTRL", "x":0, "y":5.5, "w":1.25},
{"matrix": [5, 1], "label":"LEFT WIN", "x":1.25, "y":5.5, "w":1.25},
{"matrix": [5, 2], "label":"LEFT ALT", "x":2.5, "y":5.5, "w":1.25},
{"matrix": [5, 3], "label":"SPACEBAR", "x":3.75, "y":5.5, "w":6.25},
{"matrix": [5, 4], "label":"RIGHT ALT", "x":10, "y":5.5, "w":1.25},
{"matrix": [5, 5], "label":"FN", "x":11.25, "y":5.5, "w":1.25},
{"matrix": [5, 6], "label":"MENU", "x":12.5, "y":5.5, "w":1.25},
{"matrix": [5, 7], "label":"RIGHT CTRL", "x":13.75, "y":5.5, "w":1.25},
{"matrix": [10, 4], "label":"LEFT ARROW", "x":15.5, "y":5.5},
{"matrix": [10, 5], "label":"DOWN ARROW", "x":16.5, "y":5.5},
{"matrix": [10, 6], "label":"RIGHT ARROW", "x":17.5, "y":5.5}
]
}
},
"rgb_matrix": {
"driver": "IS31FL3733",
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 7, "y": 5 },
{ "flags": 4, "matrix": [0, 1], "x": 31, "y": 5 },
{ "flags": 4, "matrix": [0, 2], "x": 43, "y": 5 },
{ "flags": 4, "matrix": [0, 3], "x": 55, "y": 5 },
{ "flags": 4, "matrix": [0, 4], "x": 67, "y": 5 },
{ "flags": 1, "matrix": [0, 5], "x": 85, "y": 5 },
{ "flags": 1, "matrix": [0, 6], "x": 97, "y": 5 },
{ "flags": 1, "matrix": [0, 7], "x": 109, "y": 5 },
{ "flags": 1, "matrix": [6, 0], "x": 121, "y": 5 },
{ "flags": 4, "matrix": [6, 1], "x": 139, "y": 5 },
{ "flags": 4, "matrix": [6, 2], "x": 151, "y": 5 },
{ "flags": 4, "matrix": [6, 3], "x": 163, "y": 5 },
{ "flags": 4, "matrix": [6, 4], "x": 175, "y": 5 },
{ "flags": 1, "matrix": [6, 5], "x": 193, "y": 5 },
{ "flags": 9, "matrix": [6, 6], "x": 205, "y": 5 },
{ "flags": 1, "matrix": [6, 7], "x": 217, "y": 5 },
{ "flags": 4, "matrix": [1, 0], "x": 7, "y": 20 },
{ "flags": 4, "matrix": [1, 1], "x": 19, "y": 20 },
{ "flags": 4, "matrix": [1, 2], "x": 31, "y": 20 },
{ "flags": 4, "matrix": [1, 3], "x": 43, "y": 20 },
{ "flags": 4, "matrix": [1, 4], "x": 55, "y": 20 },
{ "flags": 4, "matrix": [1, 5], "x": 67, "y": 20 },
{ "flags": 4, "matrix": [1, 6], "x": 79, "y": 20 },
{ "flags": 4, "matrix": [1, 7], "x": 91, "y": 20 },
{ "flags": 4, "matrix": [7, 0], "x": 103, "y": 20 },
{ "flags": 4, "matrix": [7, 1], "x": 115, "y": 20 },
{ "flags": 4, "matrix": [7, 2], "x": 127, "y": 20 },
{ "flags": 4, "matrix": [7, 3], "x": 139, "y": 20 },
{ "flags": 4, "matrix": [7, 4], "x": 151, "y": 20 },
{ "flags": 1, "matrix": [7, 5], "x": 169, "y": 20 },
{ "flags": 1, "matrix": [7, 6], "x": 193, "y": 20 },
{ "flags": 1, "matrix": [7, 7], "x": 205, "y": 20 },
{ "flags": 1, "matrix": [9, 7], "x": 217, "y": 20 },
{ "flags": 1, "matrix": [2, 0], "x": 10, "y": 30 },
{ "flags": 4, "matrix": [2, 1], "x": 25, "y": 30 },
{ "flags": 4, "matrix": [2, 2], "x": 37, "y": 30 },
{ "flags": 4, "matrix": [2, 3], "x": 49, "y": 30 },
{ "flags": 4, "matrix": [2, 4], "x": 61, "y": 30 },
{ "flags": 4, "matrix": [2, 5], "x": 73, "y": 30 },
{ "flags": 4, "matrix": [2, 6], "x": 85, "y": 30 },
{ "flags": 4, "matrix": [2, 7], "x": 97, "y": 30 },
{ "flags": 4, "matrix": [8, 0], "x": 109, "y": 30 },
{ "flags": 4, "matrix": [8, 1], "x": 121, "y": 30 },
{ "flags": 4, "matrix": [8, 2], "x": 133, "y": 30 },
{ "flags": 4, "matrix": [8, 3], "x": 145, "y": 30 },
{ "flags": 4, "matrix": [8, 4], "x": 157, "y": 30 },
{ "flags": 4, "matrix": [8, 5], "x": 172, "y": 30 },
{ "flags": 1, "matrix": [8, 6], "x": 193, "y": 30 },
{ "flags": 1, "matrix": [8, 7], "x": 205, "y": 30 },
{ "flags": 1, "matrix": [9, 6], "x": 217, "y": 30 },
{ "flags": 9, "matrix": [3, 0], "x": 11, "y": 39 },
{ "flags": 4, "matrix": [3, 1], "x": 28, "y": 39 },
{ "flags": 4, "matrix": [3, 2], "x": 40, "y": 39 },
{ "flags": 4, "matrix": [3, 3], "x": 52, "y": 39 },
{ "flags": 4, "matrix": [3, 4], "x": 64, "y": 39 },
{ "flags": 4, "matrix": [3, 5], "x": 76, "y": 39 },
{ "flags": 4, "matrix": [3, 6], "x": 88, "y": 39 },
{ "flags": 4, "matrix": [3, 7], "x": 100, "y": 39 },
{ "flags": 4, "matrix": [9, 0], "x": 112, "y": 39 },
{ "flags": 4, "matrix": [9, 1], "x": 124, "y": 39 },
{ "flags": 4, "matrix": [9, 2], "x": 136, "y": 39 },
{ "flags": 4, "matrix": [9, 3], "x": 148, "y": 39 },
{ "flags": 1, "matrix": [9, 4], "x": 168, "y": 39 },
{ "flags": 1, "matrix": [4, 0], "x": 14, "y": 49 },
{ "flags": 4, "matrix": [4, 1], "x": 34, "y": 49 },
{ "flags": 4, "matrix": [4, 2], "x": 46, "y": 49 },
{ "flags": 4, "matrix": [4, 3], "x": 58, "y": 49 },
{ "flags": 4, "matrix": [4, 4], "x": 70, "y": 49 },
{ "flags": 4, "matrix": [4, 5], "x": 82, "y": 49 },
{ "flags": 4, "matrix": [4, 6], "x": 94, "y": 49 },
{ "flags": 4, "matrix": [4, 7], "x": 106, "y": 49 },
{ "flags": 4, "matrix": [10, 0], "x": 118, "y": 49 },
{ "flags": 4, "matrix": [10, 1], "x": 130, "y": 49 },
{ "flags": 4, "matrix": [10, 2], "x": 142, "y": 49 },
{ "flags": 1, "matrix": [10, 3], "x": 165, "y": 49 },
{ "flags": 1, "matrix": [9, 5], "x": 205, "y": 49 },
{ "flags": 1, "matrix": [5, 0], "x": 8, "y": 59 },
{ "flags": 1, "matrix": [5, 1], "x": 23, "y": 59 },
{ "flags": 1, "matrix": [5, 2], "x": 38, "y": 59 },
{ "flags": 4, "matrix": [5, 3], "x": 83, "y": 59 },
{ "flags": 1, "matrix": [5, 4], "x": 129, "y": 59 },
{ "flags": 1, "matrix": [5, 5], "x": 144, "y": 59 },
{ "flags": 1, "matrix": [5, 6], "x": 159, "y": 59 },
{ "flags": 1, "matrix": [5, 7], "x": 174, "y": 59 },
{ "flags": 1, "matrix": [10, 4], "x": 193, "y": 59 },
{ "flags": 1, "matrix": [10, 5], "x": 205, "y": 59 },
{ "flags": 1, "matrix": [10, 6], "x": 217, "y": 59 },
{ "flags": 2, "x": 224, "y": 64 },
{ "flags": 2, "x": 204, "y": 64 },
{ "flags": 2, "x": 186, "y": 64 },
{ "flags": 2, "x": 167, "y": 64 },
{ "flags": 2, "x": 149, "y": 64 },
{ "flags": 2, "x": 130, "y": 64 },
{ "flags": 2, "x": 112, "y": 64 },
{ "flags": 2, "x": 94, "y": 64 },
{ "flags": 2, "x": 75, "y": 64 },
{ "flags": 2, "x": 57, "y": 64 },
{ "flags": 2, "x": 38, "y": 64 },
{ "flags": 2, "x": 20, "y": 64 },
{ "flags": 2, "x": 0, "y": 64 },
{ "flags": 2, "x": 0, "y": 47 },
{ "flags": 2, "x": 0, "y": 32 },
{ "flags": 2, "x": 0, "y": 17 },
{ "flags": 2, "x": 0, "y": 0 },
{ "flags": 2, "x": 20, "y": 0 },
{ "flags": 2, "x": 38, "y": 0 },
{ "flags": 2, "x": 57, "y": 0 },
{ "flags": 2, "x": 75, "y": 0 },
{ "flags": 2, "x": 94, "y": 0 },
{ "flags": 2, "x": 112, "y": 0 },
{ "flags": 2, "x": 130, "y": 0 },
{ "flags": 2, "x": 149, "y": 0 },
{ "flags": 2, "x": 167, "y": 0 },
{ "flags": 2, "x": 186, "y": 0 },
{ "flags": 2, "x": 204, "y": 0 },
{ "flags": 2, "x": 224, "y": 0 },
{ "flags": 2, "x": 224, "y": 17 },
{ "flags": 2, "x": 224, "y": 32 },
{ "flags": 2, "x": 224, "y": 47 }
]
}
}

View file

@ -0,0 +1,20 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 16
#undef STM32_PREDIV_VALUE
#define STM32_PREDIV_VALUE 2
#undef STM32_ADC_USE_ADC2
#define STM32_ADC_USE_ADC2 TRUE
#undef STM32_ADC_USE_ADC3
#define STM32_ADC_USE_ADC3 TRUE
#undef STM32_I2C_USE_I2C2
#define STM32_I2C_USE_I2C2 TRUE

View file

@ -0,0 +1,24 @@
# CTRL v2
The Drop CTRL v2 is a TKL mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
* Hardware Availability: [Drop CTRL Mechanical Keyboard](https://drop.com/buy/drop-ctrl-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make drop/ctrl/v2:default
Flashing example for this keyboard:
make drop/ctrl/v2: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**: Quickly double tap the button located under the spacebar
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1,4 @@
UF2_DEVICE_TYPE_ID = 0x27b9a6ea
UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
SRC += analog.c lib/common.c lib/mux.c

128
keyboards/drop/ctrl/v2/v2.c Normal file
View file

@ -0,0 +1,128 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef RGB_MATRIX_ENABLE
# include "rgb_matrix.h"
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
{ 1, B_2, A_2, C_2 },
{ 1, E_3, D_3, F_3 },
{ 1, E_4, D_4, F_4 },
{ 1, E_5, D_5, F_5 },
{ 1, B_6, A_6, C_6 },
{ 1, E_7, D_7, F_7 },
{ 1, E_8, D_8, F_8 },
{ 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 },
{ 1, H_1, G_1, I_1 },
{ 1, H_2, G_2, I_2 },
{ 1, H_3, G_3, I_3 },
{ 1, H_4, G_4, I_4 },
{ 1, H_5, G_5, I_5 },
{ 1, H_6, G_6, I_6 },
{ 1, H_7, G_7, I_7 },
{ 1, H_8, G_8, I_8 },
{ 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 },
{ 1, K_1, J_1, L_1 },
{ 1, K_2, J_2, L_2 },
{ 1, K_3, J_3, L_3 },
{ 1, K_4, J_4, L_4 },
{ 1, K_5, J_5, L_5 },
{ 1, K_6, J_6, L_6 },
{ 1, K_7, J_7, L_7 },
{ 1, K_8, J_8, L_8 },
{ 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 },
{ 1, E_1, D_1, F_1 },
{ 1, E_2, D_2, F_2 },
{ 1, K_13, J_13, L_13 },
{ 1, K_12, J_12, L_12 },
{ 1, K_11, J_11, L_11 },
{ 1, E_6, D_6, F_6 },
{ 1, K_10, J_10, L_10 },
{ 1, K_9, J_9, L_9 },
{ 0, K_16, J_16, L_16 },
{ 0, K_15, J_15, L_15 },
{ 0, K_14, J_14, L_14 },
{ 0, K_13, J_13, L_13 },
{ 0, K_12, J_12, L_12 },
{ 1, E_14, D_14, F_14 },
{ 1, E_13, D_13, F_13 },
{ 1, H_12, G_12, I_12 },
{ 1, E_12, D_12, F_12 },
{ 1, E_11, D_11, F_11 },
{ 1, E_10, D_10, F_10 },
{ 1, E_9, D_9, F_9 },
{ 1, H_9, G_9, I_9 },
{ 0, H_16, G_16, I_16 },
{ 0, H_15, G_15, I_15 },
{ 0, H_14, G_14, I_14 },
{ 0, H_13, G_13, I_13 },
{ 0, H_11, G_11, I_11 },
{ 1, K_14, J_14, L_14 },
{ 1, H_14, G_14, I_14 },
{ 1, H_13, G_13, I_13 },
{ 1, H_10, G_10, I_10 },
{ 0, E_16, D_16, F_16 },
{ 0, E_15, D_15, F_15 },
{ 0, E_14, D_14, F_14 },
{ 0, E_13, D_13, F_13 },
{ 0, H_12, G_12, I_12 },
{ 0, E_12, D_12, F_12 },
{ 0, E_11, D_11, F_11 },
{ 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, B_15, A_15, C_15 },
{ 0, B_16, A_16, C_16 },
{ 1, B_9, A_9, C_9 },
{ 1, B_10, A_10, C_10 },
{ 1, B_11, A_11, C_11 },
{ 1, B_12, A_12, C_12 },
{ 1, B_13, A_13, C_13 },
{ 1, B_14, A_14, C_14 },
{ 1, B_15, A_15, C_15 },
{ 1, K_15, J_15, L_15 },
{ 1, E_15, D_15, F_15 },
{ 1, H_15, G_15, I_15 },
{ 1, B_1, A_1, C_1 },
{ 1, B_3, A_3, C_3 },
{ 1, B_4, A_4, C_4 },
{ 1, B_5, A_5, C_5 },
{ 1, B_7, A_7, C_7 },
{ 1, B_8, A_8, C_8 },
{ 0, B_1, A_1, C_1 },
{ 0, B_2, A_2, C_2 },
{ 0, B_3, A_3, C_3 },
{ 0, B_5, A_5, C_5 },
{ 0, B_6, A_6, C_6 },
{ 0, B_8, A_8, C_8 },
{ 0, B_10, A_10, C_10 },
{ 0, H_10, G_10, I_10 },
{ 0, K_10, J_10, L_10 },
{ 0, E_10, D_10, F_10 },
};
#endif

View file

@ -0,0 +1,54 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef RGB_MATRIX_ENABLE
# include "host.h"
# include "rgb_matrix.h"
# define LED_FLAG_ANY_SWITCH (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR)
# ifdef RGB_MATRIX_CAPS_LOCK_INDEX
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_WHITE);
} else if ((rgb_matrix_get_flags() & LED_FLAG_ANY_SWITCH) == 0) {
rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_OFF);
}
return true;
}
# endif
# ifdef RGB_MATRIX_CYCLE_ZONES_ENABLE
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
if (!record->event.pressed) {
switch (keycode) {
case RGB_TOG:
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL:
rgb_matrix_set_flags(LED_FLAG_ANY_SWITCH);
break;
case LED_FLAG_ANY_SWITCH:
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
break;
case LED_FLAG_UNDERGLOW:
rgb_matrix_set_flags(LED_FLAG_NONE);
break;
default:
rgb_matrix_set_flags(LED_FLAG_ALL);
break;
}
return false;
}
}
return true;
};
# endif
#endif

94
keyboards/drop/lib/mux.c Normal file
View file

@ -0,0 +1,94 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include "keyboard.h"
#include "analog.h"
#include "gpio.h"
#include "wait.h"
#define S_UP B12
#define E_UP_N B13
#define S_DN1 B14
#define E_DN1_N B15
#define E_VBUS_1 A8
#define E_VBUS_2 A15
#define SRC_1 B8
#define SRC_2 B9
#define HUB_RESET_N D2
#define IRST B1
#define SDB_N B2
#define C1_A5_SENSE A4
#define C1_B5_SENSE A7
#define C2_A5_SENSE C4
#define C2_B5_SENSE B0
static inline void digital_write(pin_t pin, uint8_t level) {
setPinOutput(pin);
writePin(pin, level);
}
uint16_t v_con_1 = 0;
uint16_t v_con_2 = 0;
uint16_t v_con_3 = 0;
uint16_t v_con_4 = 0;
void keyboard_USB_enable(void) {
// initial state
digital_write(S_UP, 0);
digital_write(E_UP_N, 1);
digital_write(S_DN1, 1);
digital_write(E_DN1_N, 1);
digital_write(E_VBUS_1, 0);
digital_write(E_VBUS_2, 0);
digital_write(SRC_1, 1);
digital_write(SRC_2, 1);
setPinInput(C1_A5_SENSE);
setPinInput(C1_B5_SENSE);
setPinInput(C2_A5_SENSE);
setPinInput(C2_B5_SENSE);
// reset hub
digital_write(HUB_RESET_N, 0);
wait_ms(100);
digital_write(HUB_RESET_N, 1);
wait_ms(500); // Allow power dissipation time on CC lines
v_con_1 = analogReadPin(C1_A5_SENSE);
v_con_2 = analogReadPin(C1_B5_SENSE);
v_con_3 = analogReadPin(C2_A5_SENSE);
v_con_4 = analogReadPin(C2_B5_SENSE);
// TODO: dynamic port port configure logic?
digital_write(E_UP_N, 0); // HOST enable
digital_write(E_DN1_N, 0); // EXTRA enable
digital_write(E_VBUS_1, 1); // USBC-1 enable full power I/O
digital_write(E_VBUS_2, 1); // USBC-2 enable full power I/O
if ((v_con_1 + v_con_2) > (v_con_3 + v_con_4)) {
digital_write(S_UP, 0); // HOST to USBC-1
digital_write(S_DN1, 1); // EXTRA to USBC-2
digital_write(SRC_1, 1); // HOST on USBC-1
digital_write(SRC_2, 0); // EXTRA available on USBC-2
} else {
digital_write(S_UP, 1); // EXTRA to USBC-1
digital_write(S_DN1, 0); // HOST to USBC-2
digital_write(SRC_1, 0); // EXTRA available on USBC-1
digital_write(SRC_2, 1); // HOST on USBC-2
}
}
void keyboard_ISSI_enable(void) {
#ifdef RGB_MATRIX_ENABLE
digital_write(IRST, 0);
digital_write(SDB_N, 1);
#endif
}
void keyboard_pre_init_kb(void) {
keyboard_USB_enable();
keyboard_ISSI_enable();
keyboard_pre_init_user();
}

View file

@ -0,0 +1,22 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_1800_ansi(
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
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_NUM, KC_PSLS, KC_PAST, KC_PSCR,
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_P7, KC_P8, KC_P9, KC_PMNS,
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_P4, KC_P5, KC_P6, KC_PPLS,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
[1] = LAYOUT_1800_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_MPLY, KC_MSTP, KC_VOLU, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_SCRL,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, KC_APP, _______, _______, _______, _______, _______, _______
)
};

View file

@ -0,0 +1,5 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_LAYER_COUNT 8

View file

@ -0,0 +1,22 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_1800_ansi(
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
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_NUM, KC_PSLS, KC_PAST, KC_PSCR,
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_P7, KC_P8, KC_P9, KC_PMNS,
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_P4, KC_P5, KC_P6, KC_PPLS,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
[1] = LAYOUT_1800_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_MPLY, KC_MSTP, KC_VOLU, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_SCRL,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, KC_APP, _______, _______, _______, _______, _______, _______
)
};

View file

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

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <board.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U

View file

@ -0,0 +1,29 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define ADC_BUFFER_DEPTH 4
#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
#define I2C_DRIVER I2CD2
#define I2C1_SCL_PIN A9
#define I2C1_SDA_PIN A10
#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
#define EXTERNAL_EEPROM_WP_PIN B5
#define EEPROM_I2C_24LC256
#define DRIVER_ADDR_1 0b1010011
#define DRIVER_ADDR_2 0b1011111
#define DRIVER_ADDR_3 0b1010000
#define DRIVER_COUNT 3
#define RGB_MATRIX_LED_COUNT 166
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_CYCLE_ZONES_ENABLE

View file

@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_ADC TRUE
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,350 @@
{
"keyboard_name": "SHIFT v2",
"manufacturer": "Drop Inc.",
"maintainer": "zvecr",
"processor": "STM32F303",
"bootloader": "tinyuf2",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C0", "C1", "C2", "C3", "C6", "C7", "C8", "C9", "B3", "B4", "C13", "C14", "C15"],
"rows": ["A0", "A1", "A2", "A3", "B10", "C10", "C11", "C12"]
},
"usb": {
"vid": "0x359B",
"pid": "0x000C",
"device_version": "2.0.0"
},
"eeprom": {
"driver": "i2c"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"layouts": {
"LAYOUT_1800_ansi": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
{"matrix": [0, 1], "x":1.25, "y":0},
{"matrix": [0, 2], "x":2.25, "y":0},
{"matrix": [1, 2], "x":3.25, "y":0},
{"matrix": [0, 3], "x":4.25, "y":0},
{"matrix": [0, 4], "x":5.5, "y":0},
{"matrix": [0, 5], "x":6.5, "y":0},
{"matrix": [0, 6], "x":7.5, "y":0},
{"matrix": [1, 6], "x":8.5, "y":0},
{"matrix": [0, 7], "x":9.75, "y":0},
{"matrix": [1, 7], "x":10.75, "y":0},
{"matrix": [0, 8], "x":11.75, "y":0},
{"matrix": [1, 8], "x":12.75, "y":0},
{"matrix": [1, 9], "x":14, "y":0},
{"matrix": [0, 10], "x":15.5, "y":0},
{"matrix": [1, 10], "x":16.5, "y":0},
{"matrix": [0, 11], "x":17.5, "y":0},
{"matrix": [1, 11], "x":18.5, "y":0},
{"matrix": [1, 0], "x":0, "y":1.25},
{"matrix": [1, 1], "x":1, "y":1.25},
{"matrix": [2, 1], "x":2, "y":1.25},
{"matrix": [2, 2], "x":3, "y":1.25},
{"matrix": [3, 2], "x":4, "y":1.25},
{"matrix": [1, 3], "x":5, "y":1.25},
{"matrix": [2, 3], "x":6, "y":1.25},
{"matrix": [1, 4], "x":7, "y":1.25},
{"matrix": [1, 5], "x":8, "y":1.25},
{"matrix": [2, 5], "x":9, "y":1.25},
{"matrix": [2, 6], "x":10, "y":1.25},
{"matrix": [3, 6], "x":11, "y":1.25},
{"matrix": [2, 7], "x":12, "y":1.25},
{"matrix": [2, 8], "x":13, "y":1.25, "w":2},
{"matrix": [2, 9], "x":15.5, "y":1.25},
{"matrix": [2, 10], "x":16.5, "y":1.25},
{"matrix": [2, 11], "x":17.5, "y":1.25},
{"matrix": [2, 12], "x":18.5, "y":1.25},
{"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
{"matrix": [3, 1], "x":1.5, "y":2.25},
{"matrix": [4, 1], "x":2.5, "y":2.25},
{"matrix": [4, 2], "x":3.5, "y":2.25},
{"matrix": [3, 3], "x":4.5, "y":2.25},
{"matrix": [4, 3], "x":5.5, "y":2.25},
{"matrix": [2, 4], "x":6.5, "y":2.25},
{"matrix": [3, 4], "x":7.5, "y":2.25},
{"matrix": [3, 5], "x":8.5, "y":2.25},
{"matrix": [4, 5], "x":9.5, "y":2.25},
{"matrix": [4, 6], "x":10.5, "y":2.25},
{"matrix": [3, 7], "x":11.5, "y":2.25},
{"matrix": [3, 8], "x":12.5, "y":2.25},
{"matrix": [4, 8], "x":13.5, "y":2.25, "w":1.5},
{"matrix": [3, 9], "x":15.5, "y":2.25},
{"matrix": [3, 10], "x":16.5, "y":2.25},
{"matrix": [3, 11], "x":17.5, "y":2.25},
{"matrix": [3, 12], "x":18.5, "y":2.25},
{"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
{"matrix": [5, 1], "x":1.75, "y":3.25},
{"matrix": [6, 1], "x":2.75, "y":3.25},
{"matrix": [5, 2], "x":3.75, "y":3.25},
{"matrix": [5, 3], "x":4.75, "y":3.25},
{"matrix": [6, 3], "x":5.75, "y":3.25},
{"matrix": [4, 4], "x":6.75, "y":3.25},
{"matrix": [5, 4], "x":7.75, "y":3.25},
{"matrix": [5, 5], "x":8.75, "y":3.25},
{"matrix": [5, 6], "x":9.75, "y":3.25},
{"matrix": [4, 7], "x":10.75, "y":3.25},
{"matrix": [5, 8], "x":11.75, "y":3.25},
{"matrix": [6, 8], "x":12.75, "y":3.25, "w":2.25},
{"matrix": [4, 9], "x":15.5, "y":3.25},
{"matrix": [4, 10], "x":16.5, "y":3.25},
{"matrix": [4, 11], "x":17.5, "y":3.25},
{"matrix": [4, 12], "x":18.5, "y":3.25},
{"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
{"matrix": [7, 1], "x":2.25, "y":4.25},
{"matrix": [6, 2], "x":3.25, "y":4.25},
{"matrix": [7, 2], "x":4.25, "y":4.25},
{"matrix": [7, 3], "x":5.25, "y":4.25},
{"matrix": [6, 4], "x":6.25, "y":4.25},
{"matrix": [7, 5], "x":7.25, "y":4.25},
{"matrix": [6, 5], "x":8.25, "y":4.25},
{"matrix": [6, 6], "x":9.25, "y":4.25},
{"matrix": [5, 7], "x":10.25, "y":4.25},
{"matrix": [6, 7], "x":11.25, "y":4.25},
{"matrix": [7, 8], "x":12.25, "y":4.25, "w":1.75},
{"matrix": [6, 9], "x":14.25, "y":4.5},
{"matrix": [5, 9], "x":15.5, "y":4.25},
{"matrix": [5, 10], "x":16.5, "y":4.25},
{"matrix": [5, 11], "x":17.5, "y":4.25},
{"matrix": [5, 12], "x":18.5, "y":4.25, "h":2},
{"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
{"matrix": [6, 0], "x":1.25, "y":5.25, "w":1.25},
{"matrix": [7, 0], "x":2.5, "y":5.25, "w":1.25},
{"matrix": [7, 4], "x":3.75, "y":5.25, "w":6.25},
{"matrix": [7, 6], "x":10, "y":5.25, "w":1.5},
{"matrix": [7, 7], "x":11.5, "y":5.25, "w":1.5},
{"matrix": [7, 9], "x":13.25, "y":5.5},
{"matrix": [7, 10], "x":14.25, "y":5.5},
{"matrix": [6, 10], "x":15.25, "y":5.5},
{"matrix": [6, 11], "x":16.5, "y":5.25},
{"matrix": [6, 12], "x":17.5, "y":5.25}
]
}
},
"rgb_matrix": {
"driver": "IS31FL3733",
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{ "flags": 4, "matrix": [0, 0], "x": 6, "y": 7 },
{ "flags": 4, "matrix": [0, 1], "x": 20, "y": 7 },
{ "flags": 4, "matrix": [0, 2], "x": 31, "y": 7 },
{ "flags": 4, "matrix": [1, 2], "x": 43, "y": 7 },
{ "flags": 4, "matrix": [0, 3], "x": 54, "y": 7 },
{ "flags": 4, "matrix": [0, 4], "x": 69, "y": 7 },
{ "flags": 4, "matrix": [0, 5], "x": 80, "y": 7 },
{ "flags": 4, "matrix": [0, 6], "x": 91, "y": 7 },
{ "flags": 4, "matrix": [1, 6], "x": 103, "y": 7 },
{ "flags": 4, "matrix": [0, 7], "x": 117, "y": 7 },
{ "flags": 4, "matrix": [1, 7], "x": 129, "y": 7 },
{ "flags": 4, "matrix": [0, 8], "x": 140, "y": 7 },
{ "flags": 4, "matrix": [1, 8], "x": 152, "y": 7 },
{ "flags": 4, "matrix": [1, 9], "x": 166, "y": 7 },
{ "flags": 4, "matrix": [0, 10], "x": 183, "y": 7 },
{ "flags": 4, "matrix": [1, 10], "x": 194, "y": 7 },
{ "flags": 4, "matrix": [0, 11], "x": 206, "y": 7 },
{ "flags": 4, "matrix": [1, 11], "x": 217, "y": 7 },
{ "flags": 4, "matrix": [1, 0], "x": 6, "y": 18 },
{ "flags": 4, "matrix": [1, 1], "x": 17, "y": 18 },
{ "flags": 4, "matrix": [2, 1], "x": 29, "y": 18 },
{ "flags": 4, "matrix": [2, 2], "x": 40, "y": 18 },
{ "flags": 4, "matrix": [3, 2], "x": 51, "y": 18 },
{ "flags": 4, "matrix": [1, 3], "x": 63, "y": 18 },
{ "flags": 4, "matrix": [2, 3], "x": 74, "y": 18 },
{ "flags": 4, "matrix": [1, 4], "x": 86, "y": 18 },
{ "flags": 4, "matrix": [1, 5], "x": 97, "y": 18 },
{ "flags": 4, "matrix": [2, 5], "x": 109, "y": 18 },
{ "flags": 4, "matrix": [2, 6], "x": 120, "y": 18 },
{ "flags": 4, "matrix": [3, 6], "x": 132, "y": 18 },
{ "flags": 4, "matrix": [2, 7], "x": 143, "y": 18 },
{ "flags": 4, "matrix": [2, 8], "x": 160, "y": 18 },
{ "flags": 4, "matrix": [2, 9], "x": 183, "y": 18 },
{ "flags": 4, "matrix": [2, 10], "x": 194, "y": 18 },
{ "flags": 4, "matrix": [2, 11], "x": 206, "y": 18 },
{ "flags": 4, "matrix": [2, 12], "x": 217, "y": 18 },
{ "flags": 4, "matrix": [2, 0], "x": 9, "y": 27 },
{ "flags": 4, "matrix": [3, 1], "x": 23, "y": 27 },
{ "flags": 4, "matrix": [4, 1], "x": 34, "y": 27 },
{ "flags": 4, "matrix": [4, 2], "x": 46, "y": 27 },
{ "flags": 4, "matrix": [3, 3], "x": 57, "y": 27 },
{ "flags": 4, "matrix": [4, 3], "x": 69, "y": 27 },
{ "flags": 4, "matrix": [2, 4], "x": 80, "y": 27 },
{ "flags": 4, "matrix": [3, 4], "x": 91, "y": 27 },
{ "flags": 4, "matrix": [3, 5], "x": 103, "y": 27 },
{ "flags": 4, "matrix": [4, 5], "x": 114, "y": 27 },
{ "flags": 4, "matrix": [4, 6], "x": 126, "y": 27 },
{ "flags": 4, "matrix": [3, 7], "x": 137, "y": 27 },
{ "flags": 4, "matrix": [3, 8], "x": 149, "y": 27 },
{ "flags": 4, "matrix": [4, 8], "x": 163, "y": 27 },
{ "flags": 4, "matrix": [3, 9], "x": 183, "y": 27 },
{ "flags": 4, "matrix": [3, 10], "x": 194, "y": 27 },
{ "flags": 4, "matrix": [3, 11], "x": 206, "y": 27 },
{ "flags": 4, "matrix": [3, 12], "x": 217, "y": 27 },
{ "flags": 4, "matrix": [3, 0], "x": 10, "y": 36 },
{ "flags": 4, "matrix": [5, 1], "x": 26, "y": 36 },
{ "flags": 4, "matrix": [6, 1], "x": 37, "y": 36 },
{ "flags": 4, "matrix": [5, 2], "x": 49, "y": 36 },
{ "flags": 4, "matrix": [5, 3], "x": 60, "y": 36 },
{ "flags": 4, "matrix": [6, 3], "x": 71, "y": 36 },
{ "flags": 4, "matrix": [4, 4], "x": 83, "y": 36 },
{ "flags": 4, "matrix": [5, 4], "x": 94, "y": 36 },
{ "flags": 4, "matrix": [5, 5], "x": 106, "y": 36 },
{ "flags": 4, "matrix": [5, 6], "x": 117, "y": 36 },
{ "flags": 4, "matrix": [4, 7], "x": 129, "y": 36 },
{ "flags": 4, "matrix": [5, 8], "x": 140, "y": 36 },
{ "flags": 4, "matrix": [6, 8], "x": 159, "y": 36 },
{ "flags": 4, "matrix": [4, 9], "x": 183, "y": 36 },
{ "flags": 4, "matrix": [4, 10], "x": 194, "y": 36 },
{ "flags": 4, "matrix": [4, 11], "x": 206, "y": 36 },
{ "flags": 4, "matrix": [4, 12], "x": 217, "y": 36 },
{ "flags": 4, "matrix": [4, 0], "x": 13, "y": 46 },
{ "flags": 4, "matrix": [7, 1], "x": 31, "y": 46 },
{ "flags": 4, "matrix": [6, 2], "x": 43, "y": 46 },
{ "flags": 4, "matrix": [7, 2], "x": 54, "y": 46 },
{ "flags": 4, "matrix": [7, 3], "x": 66, "y": 46 },
{ "flags": 4, "matrix": [6, 4], "x": 77, "y": 46 },
{ "flags": 4, "matrix": [7, 5], "x": 89, "y": 46 },
{ "flags": 4, "matrix": [6, 5], "x": 100, "y": 46 },
{ "flags": 4, "matrix": [6, 6], "x": 112, "y": 46 },
{ "flags": 4, "matrix": [5, 7], "x": 123, "y": 46 },
{ "flags": 4, "matrix": [6, 7], "x": 134, "y": 46 },
{ "flags": 4, "matrix": [7, 8], "x": 150, "y": 46 },
{ "flags": 4, "matrix": [6, 9], "x": 169, "y": 48 },
{ "flags": 4, "matrix": [5, 9], "x": 183, "y": 46 },
{ "flags": 4, "matrix": [5, 10], "x": 194, "y": 46 },
{ "flags": 4, "matrix": [5, 11], "x": 206, "y": 46 },
{ "flags": 4, "matrix": [5, 12], "x": 214, "y": 50 },
{ "flags": 4, "matrix": [5, 0], "x": 7, "y": 55 },
{ "flags": 4, "matrix": [6, 0], "x": 21, "y": 55 },
{ "flags": 4, "matrix": [7, 0], "x": 36, "y": 55 },
{ "flags": 4, "matrix": [7, 4], "x": 79, "y": 55 },
{ "flags": 4, "matrix": [7, 6], "x": 123, "y": 55 },
{ "flags": 4, "matrix": [7, 7], "x": 140, "y": 55 },
{ "flags": 4, "matrix": [7, 9], "x": 157, "y": 58 },
{ "flags": 4, "matrix": [7, 10], "x": 169, "y": 58 },
{ "flags": 4, "matrix": [6, 10], "x": 180, "y": 58 },
{ "flags": 4, "matrix": [6, 11], "x": 194, "y": 55 },
{ "flags": 4, "matrix": [6, 12], "x": 206, "y": 55 },
{ "flags": 2, "x": 1, "y": 1 },
{ "flags": 2, "x": 6, "y": 0 },
{ "flags": 2, "x": 26, "y": 0 },
{ "flags": 2, "x": 35, "y": 0 },
{ "flags": 2, "x": 45, "y": 0 },
{ "flags": 2, "x": 54, "y": 0 },
{ "flags": 2, "x": 64, "y": 0 },
{ "flags": 2, "x": 74, "y": 0 },
{ "flags": 2, "x": 83, "y": 0 },
{ "flags": 2, "x": 93, "y": 0 },
{ "flags": 2, "x": 102, "y": 0 },
{ "flags": 2, "x": 112, "y": 0 },
{ "flags": 2, "x": 122, "y": 0 },
{ "flags": 2, "x": 131, "y": 0 },
{ "flags": 2, "x": 141, "y": 0 },
{ "flags": 2, "x": 150, "y": 0 },
{ "flags": 2, "x": 160, "y": 0 },
{ "flags": 2, "x": 170, "y": 0 },
{ "flags": 2, "x": 179, "y": 0 },
{ "flags": 2, "x": 189, "y": 0 },
{ "flags": 2, "x": 198, "y": 0 },
{ "flags": 2, "x": 218, "y": 0 },
{ "flags": 2, "x": 222, "y": 1 },
{ "flags": 2, "x": 224, "y": 5 },
{ "flags": 2, "x": 224, "y": 12 },
{ "flags": 2, "x": 224, "y": 20 },
{ "flags": 2, "x": 224, "y": 28 },
{ "flags": 2, "x": 224, "y": 35 },
{ "flags": 2, "x": 224, "y": 43 },
{ "flags": 2, "x": 224, "y": 51 },
{ "flags": 2, "x": 224, "y": 58 },
{ "flags": 2, "x": 222, "y": 64 },
{ "flags": 2, "x": 218, "y": 64 },
{ "flags": 2, "x": 208, "y": 64 },
{ "flags": 2, "x": 198, "y": 64 },
{ "flags": 2, "x": 189, "y": 64 },
{ "flags": 2, "x": 179, "y": 64 },
{ "flags": 2, "x": 170, "y": 64 },
{ "flags": 2, "x": 160, "y": 64 },
{ "flags": 2, "x": 150, "y": 64 },
{ "flags": 2, "x": 141, "y": 64 },
{ "flags": 2, "x": 131, "y": 64 },
{ "flags": 2, "x": 122, "y": 64 },
{ "flags": 2, "x": 112, "y": 64 },
{ "flags": 2, "x": 102, "y": 64 },
{ "flags": 2, "x": 93, "y": 64 },
{ "flags": 2, "x": 83, "y": 64 },
{ "flags": 2, "x": 74, "y": 64 },
{ "flags": 2, "x": 64, "y": 64 },
{ "flags": 2, "x": 54, "y": 64 },
{ "flags": 2, "x": 45, "y": 64 },
{ "flags": 2, "x": 35, "y": 64 },
{ "flags": 2, "x": 26, "y": 64 },
{ "flags": 2, "x": 16, "y": 64 },
{ "flags": 2, "x": 6, "y": 64 },
{ "flags": 2, "x": 1, "y": 64 },
{ "flags": 2, "x": 0, "y": 58 },
{ "flags": 2, "x": 0, "y": 51 },
{ "flags": 2, "x": 0, "y": 43 },
{ "flags": 2, "x": 0, "y": 35 },
{ "flags": 2, "x": 0, "y": 28 },
{ "flags": 2, "x": 0, "y": 20 },
{ "flags": 2, "x": 0, "y": 12 },
{ "flags": 2, "x": 0, "y": 5 },
{ "flags": 8, "x": 174, "y": 5 },
{ "flags": 8, "x": 174, "y": 10 },
{ "flags": 8, "x": 174, "y": 15 }
]
}
}

View file

@ -0,0 +1,20 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 16
#undef STM32_PREDIV_VALUE
#define STM32_PREDIV_VALUE 2
#undef STM32_ADC_USE_ADC2
#define STM32_ADC_USE_ADC2 TRUE
#undef STM32_ADC_USE_ADC3
#define STM32_ADC_USE_ADC3 TRUE
#undef STM32_I2C_USE_I2C2
#define STM32_I2C_USE_I2C2 TRUE

View file

@ -0,0 +1,24 @@
# SHIFT v2
The Drop SHIFT v2 is a compact 1800 layout mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
* Hardware Availability: [Drop SHIFT Mechanical Keyboard](https://drop.com/buy/drop-shift-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make drop/shift/v2:default
Flashing example for this keyboard:
make drop/shift/v2: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**: Quickly double tap the button located under the spacebar
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1,4 @@
UF2_DEVICE_TYPE_ID = 0x9bc1e968
UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
SRC += analog.c lib/common.c lib/mux.c

View file

@ -0,0 +1,189 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef RGB_MATRIX_ENABLE
# include "rgb_matrix.h"
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
{ 0, K_1, J_1, L_1 },// LED1
{ 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_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 },// LED9
{ 1, K_1, J_1, L_1 },// LED10
{ 1, K_2, J_2, L_2 },// LED11
{ 1, K_3, J_3, L_3 },// LED12
{ 1, K_4, J_4, L_4 },// LED13
{ 1, K_9, J_9, L_9 },// LED18
{ 1, K_5, J_5, L_5 },// LED15
{ 1, K_6, J_6, L_6 },// LED19
{ 1, K_7, J_7, L_7 },// LED16
{ 1, K_8, J_8, L_8 },// LED20
{ 0, H_1, G_1, I_1 },//start2
{ 0, H_11, G_11, I_11 },
{ 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 },
{ 1, E_1, D_1, F_1 },
{ 1, E_2, D_2, F_2 },
{ 1, E_4, D_4, F_4 },
{ 1, E_5, D_5, F_5 },
{ 1, E_6, D_6, F_6 },
{ 1, E_7, D_7, F_7 },
{ 1, E_8, D_8, F_8 },
{ 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 },
{ 1, B_1, A_1, C_1 },
{ 1, B_2, A_2, C_2 },
{ 1, B_3, A_3, C_3 },
{ 1, B_4, A_4, C_4 },
{ 1, B_5, A_5, C_5 },
{ 1, B_6, A_6, C_6 },
{ 1, B_7, A_7, C_7 },
{ 1, B_8, A_8, C_8 },
{ 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 },
{ 1, B_9, A_9, C_9 },
{ 1, B_10, A_10, C_10 },
{ 1, B_11, A_11, C_11 },
{ 1, B_13, A_13, C_13 },
{ 1, B_14, A_14, C_14 },
{ 1, B_15, A_15, C_15 },
{ 1, B_16, A_16, C_16 },
{ 0, B_11, A_11, C_11 },
{ 0, B_12, A_12, C_12 },
{ 0, B_13, A_13, C_13 },
{ 0, H_13, G_13, I_13 },
{ 0, H_14, G_14, I_14 },
{ 0, B_14, A_14, C_14 },
{ 0, E_15, D_15, F_15 },
{ 0, B_15, A_15, C_15 },
{ 0, B_16, A_16, C_16 },
{ 1, E_9, D_9, F_9 },
{ 1, E_10, D_10, F_10 },
{ 1, E_11, D_11, F_11 },
{ 1, E_12, D_12, F_12 },
{ 1, E_13, D_13, F_13 },
{ 1, E_14, D_14, F_14 },
{ 1, E_15, D_15, F_15 },
{ 1, H_16, G_16, I_16 },
{ 0, E_11, D_11, F_11 },//start6
{ 0, E_12, D_12, F_12 },
{ 0, E_13, D_13, F_13 },
{ 0, E_14, D_14, F_14 },
{ 1, H_9, G_9, I_9 },
{ 1, H_10, G_10, I_10 },
{ 1, H_11, G_11, I_11 },
{ 1, H_12, G_12, I_12 },
{ 1, H_13, G_13, I_13 },
{ 1, H_14, G_14, I_14 },
{ 1, H_15, G_15, I_15 },
{ 2, H_1, G_1, I_1 },//start underglow
{ 2, K_1, J_1, L_1 },
{ 2, B_1, A_1, C_1 },
{ 2, E_1, D_1, F_1 },
{ 2, E_2, D_2, F_2 },
{ 2, B_2, A_2, C_2 },
{ 2, B_3, A_3, C_3 },
{ 2, E_3, D_3, F_3 },
{ 2, E_4, D_4, F_4 },
{ 2, B_4, A_4, C_4 },
{ 2, B_5, A_5, C_5 },
{ 2, E_5, D_5, F_5 },
{ 2, E_6, D_6, F_6 },
{ 2, B_6, A_6, C_6 },
{ 2, B_7, A_7, C_7 },
{ 2, E_7, D_7, F_7 },
{ 2, E_8, D_8, F_8 },
{ 2, B_8, A_8, C_8 },
{ 2, B_9, A_9, C_9 },
{ 2, E_9, D_9, F_9 },
{ 2, E_10, D_10, F_10 },
{ 2, B_10, A_10, C_10 },
{ 2, B_11, A_11, C_11 },//125
{ 2, E_11, D_11, F_11 },
{ 2, E_12, D_12, F_12 },
{ 2, B_12, A_12, C_12 },
{ 2, B_13, A_13, C_13 },
{ 2, E_13, D_13, F_13 },
{ 2, E_14, D_14, F_14 },
{ 2, B_14, A_14, C_14 },
{ 2, B_15, A_15, C_15 },
{ 2, E_15, D_15, F_15 },
{ 2, E_16, D_16, F_16 },
{ 2, B_16, A_16, C_16 },
{ 2, H_16, G_16, I_16 },
{ 2, K_16, J_16, L_16 },
{ 2, K_15, J_15, L_15 },
{ 2, H_15, G_15, I_15 },
{ 2, H_14, G_14, I_14 },
{ 2, K_14, J_14, L_14 },
{ 2, K_13, J_13, L_13 },
{ 2, H_13, G_13, I_13 },
{ 2, H_12, G_12, I_12 },
{ 2, K_12, J_12, L_12 },
{ 2, K_11, J_11, L_11 },
{ 2, H_11, G_11, I_11 },
{ 2, H_10, G_10, I_10 },
{ 2, K_10, J_10, L_10 },
{ 2, K_9, J_9, L_9 },
{ 2, H_9, G_9, I_9 },
{ 2, H_8, G_8, I_8 },
{ 2, K_8, J_8, L_8 },
{ 2, K_7, J_7, L_7 },
{ 2, H_7, G_7, I_7 },
{ 2, H_6, G_6, I_6 },
{ 2, K_6, J_6, L_6 },
{ 2, K_5, J_5, L_5 },
{ 2, H_5, G_5, I_5 },
{ 2, H_4, G_4, I_4 },
{ 2, K_4, J_4, L_4 },
{ 2, K_3, J_3, L_3 },
{ 2, H_3, G_3, I_3 },
{ 2, H_2, G_2, I_2 },
{ 2, K_2, J_2, L_2 },
{ 1, K_10, J_10, L_10 },
{ 1, K_11, J_11, L_11 },
{ 1, E_3, D_3, F_3 },
};
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
return false;
}
uint8_t num_state = host_keyboard_led_state().num_lock ? 0xFF : 0;
uint8_t caps_state = host_keyboard_led_state().caps_lock ? 0xFF : 0;
uint8_t scroll_state = host_keyboard_led_state().scroll_lock ? 0xFF : 0;
rgb_matrix_set_color(163, num_state, num_state, num_state);
rgb_matrix_set_color(164, caps_state, caps_state, caps_state);
rgb_matrix_set_color(165, scroll_state, scroll_state, scroll_state);
return true;
}
#endif

View file

@ -0,0 +1,11 @@
// Copyright 2023 ziptyze (@ziptyze)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Define RGB */
#define RGB_MATRIX_LED_COUNT 37
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL

View file

@ -0,0 +1,140 @@
{
"manufacturer": "Lx3",
"keyboard_name": "favepada",
"maintainer": "keydler",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
},
"matrix_pins": {
"cols": ["A14", "A15", "B3", "B4"],
"rows": ["A9", "A8", "B15", "B14", "B13", "B12"]
},
"processor": "STM32F072",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [5, 2], "x": 149, "y": 59 },
{ "flags": 1, "matrix": [5, 0], "x": 0, "y": 59 },
{ "flags": 1, "matrix": [4, 0], "x": 0, "y": 51 },
{ "flags": 1, "matrix": [4, 1], "x": 74, "y": 51 },
{ "flags": 1, "matrix": [4, 2], "x": 149, "y": 51 },
{ "flags": 1, "matrix": [4, 3], "x": 224, "y": 51 },
{ "flags": 1, "matrix": [3, 2], "x": 149, "y": 38 },
{ "flags": 1, "matrix": [3, 1], "x": 74, "y": 38 },
{ "flags": 1, "matrix": [3, 0], "x": 0, "y": 38 },
{ "flags": 1, "matrix": [2, 0], "x": 0, "y": 26 },
{ "flags": 1, "matrix": [2, 1], "x": 74, "y": 26 },
{ "flags": 1, "matrix": [2, 2], "x": 149, "y": 26 },
{ "flags": 1, "matrix": [2, 3], "x": 224, "y": 26 },
{ "flags": 1, "matrix": [1, 3], "x": 224, "y": 13 },
{ "flags": 1, "matrix": [1, 2], "x": 149, "y": 13 },
{ "flags": 1, "matrix": [1, 1], "x": 74, "y": 13 },
{ "flags": 9, "matrix": [1, 0], "x": 0, "y": 13 },
{ "flags": 2, "matrix": [0, 0], "x": 0, "y": 0 },
{ "flags": 2, "matrix": [0, 1], "x": 74, "y": 0 },
{ "flags": 2, "matrix": [0, 2], "x": 149, "y": 0 },
{ "flags": 2, "matrix": [0, 3], "x": 224, "y": 0 },
{ "flags": 4, "x": 224, "y": 5 },
{ "flags": 4, "x": 149, "y": 5 },
{ "flags": 4, "x": 74, "y": 5 },
{ "flags": 4, "x": 0, "y": 5 },
{ "flags": 4, "x": 0, "y": 18 },
{ "flags": 4, "x": 0, "y": 31 },
{ "flags": 4, "x": 0, "y": 43 },
{ "flags": 4, "x": 0, "y": 56 },
{ "flags": 4, "x": 0, "y": 64 },
{ "flags": 4, "x": 74, "y": 64 },
{ "flags": 4, "x": 149, "y": 64 },
{ "flags": 4, "x": 224, "y": 64 },
{ "flags": 4, "x": 224, "y": 56 },
{ "flags": 4, "x": 224, "y": 43 },
{ "flags": 4, "x": 224, "y": 31 },
{ "flags": 4, "x": 224, "y": 18 }
],
"max_brightness": 120
},
"ws2812": {
"pin": "B1"
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x000B",
"vid": "0x4C58"
},
"community_layouts": ["numpad_6x4"],
"layouts": {
"LAYOUT_numpad_6x4": {
"layout": [
{ "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "Num Lock", "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "label": "/", "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "label": "*", "matrix": [1, 2], "x": 2, "y": 1.25 },
{ "label": "-", "matrix": [1, 3], "x": 3, "y": 1.25 },
{ "label": "7", "matrix": [2, 0], "x": 0, "y": 2.25 },
{ "label": "8", "matrix": [2, 1], "x": 1, "y": 2.25 },
{ "label": "9", "matrix": [2, 2], "x": 2, "y": 2.25 },
{ "label": "4", "matrix": [3, 0], "x": 0, "y": 3.25 },
{ "label": "5", "matrix": [3, 1], "x": 1, "y": 3.25 },
{ "label": "6", "matrix": [3, 2], "x": 2, "y": 3.25 },
{ "h": 2, "label": "+", "matrix": [2, 3], "x": 3, "y": 2.25 },
{ "label": "1", "matrix": [4, 0], "x": 0, "y": 4.25 },
{ "label": "2", "matrix": [4, 1], "x": 1, "y": 4.25 },
{ "label": "3", "matrix": [4, 2], "x": 2, "y": 4.25 },
{ "label": "0", "matrix": [5, 0], "w": 2, "x": 0, "y": 5.25 },
{ "label": "Del", "matrix": [5, 2], "x": 2, "y": 5.25 },
{ "h": 2, "label": "Enter", "matrix": [4, 3], "x": 3, "y": 4.25 }
]
}
}
}

View file

@ -0,0 +1,35 @@
/* Copyright 2020 noroadsleft
*
* 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_numpad_6x4(
MO(1), KC_A, KC_B, KC_C,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
),
[1] = LAYOUT_numpad_6x4(
KC_TRNS, RGB_TOG, RGB_MOD, KC_D,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
)
};

View file

@ -0,0 +1,35 @@
/* Copyright 2020 noroadsleft
*
* 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_numpad_6x4(
MO(1), KC_A, KC_B, KC_C,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
),
[1] = LAYOUT_numpad_6x4(
KC_TRNS, RGB_TOG, RGB_MOD, KC_D,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
)
};

View file

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

View file

@ -0,0 +1,18 @@
# linworks/favepada
![linworks/favepada front](https://i.imgur.com/tkKHcL2h.png)
![linworks/favepada back](https://i.imgur.com/1x5UokRh.png)
* Keyboard Maintainer: [keydler](https://github.com/duilchoi)
* Hardware Supported:
* Hardware Availability: None, feel free to order/manufacture parts yourself.
Make example for this keyboard (after setting up your build environment):
make linworks/favepada:default
Flashing example for this keyboard:
make linworks/favepada: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).

View file

View file

@ -0,0 +1,23 @@
/*
* Copyright 2023 owlab
*
* 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
/* RGB Strip*/
# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 5
# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.0
# define RGBLIGHT_EFFECT_BREATHE_MAX 100

View file

@ -0,0 +1,93 @@
{
"keyboard_name": "Jelly Evolv Hotswap_6.25U",
"usb": {
"pid": "0x3655",
"device_version": "0.0.1"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
{"matrix": [0, 1], "x":1.5, "y":0},
{"matrix": [0, 2], "x":2.5, "y":0},
{"matrix": [0, 3], "x":3.5, "y":0},
{"matrix": [0, 4], "x":4.5, "y":0},
{"matrix": [0, 5], "x":6, "y":0},
{"matrix": [0, 6], "x":7, "y":0},
{"matrix": [0, 7], "x":8, "y":0},
{"matrix": [0, 8], "x":9, "y":0},
{"matrix": [0, 9], "x":10.5, "y":0},
{"matrix": [0, 10], "x":11.5, "y":0},
{"matrix": [0, 11], "x":12.5, "y":0},
{"matrix": [0, 12], "x":13.5, "y":0},
{"matrix": [0, 14], "x":15, "y":0},
{"matrix": [1, 0], "x":0, "y":1.5},
{"matrix": [1, 1], "x":1, "y":1.5},
{"matrix": [1, 2], "x":2, "y":1.5},
{"matrix": [1, 3], "x":3, "y":1.5},
{"matrix": [1, 4], "x":4, "y":1.5},
{"matrix": [1, 5], "x":5, "y":1.5},
{"matrix": [1, 6], "x":6, "y":1.5},
{"matrix": [1, 7], "x":7, "y":1.5},
{"matrix": [1, 8], "x":8, "y":1.5},
{"matrix": [1, 9], "x":9, "y":1.5},
{"matrix": [1, 10], "x":10, "y":1.5},
{"matrix": [1, 11], "x":11, "y":1.5},
{"matrix": [1, 12], "x":12, "y":1.5},
{"matrix": [1, 13], "x":13, "y":1.5, "w":2},
{"matrix": [1, 14], "x":15, "y":1.5},
{"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
{"matrix": [2, 1], "x":1.5, "y":2.5},
{"matrix": [2, 2], "x":2.5, "y":2.5},
{"matrix": [2, 3], "x":3.5, "y":2.5},
{"matrix": [2, 4], "x":4.5, "y":2.5},
{"matrix": [2, 5], "x":5.5, "y":2.5},
{"matrix": [2, 6], "x":6.5, "y":2.5},
{"matrix": [2, 7], "x":7.5, "y":2.5},
{"matrix": [2, 8], "x":8.5, "y":2.5},
{"matrix": [2, 9], "x":9.5, "y":2.5},
{"matrix": [2, 10], "x":10.5, "y":2.5},
{"matrix": [2, 11], "x":11.5, "y":2.5},
{"matrix": [2, 12], "x":12.5, "y":2.5},
{"matrix": [2, 13], "x":13.5, "y":2.5, "w":1.5},
{"matrix": [2, 14], "x":15, "y":2.5},
{"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
{"matrix": [3, 1], "x":1.75, "y":3.5},
{"matrix": [3, 2], "x":2.75, "y":3.5},
{"matrix": [3, 3], "x":3.75, "y":3.5},
{"matrix": [3, 4], "x":4.75, "y":3.5},
{"matrix": [3, 5], "x":5.75, "y":3.5},
{"matrix": [3, 6], "x":6.75, "y":3.5},
{"matrix": [3, 7], "x":7.75, "y":3.5},
{"matrix": [3, 8], "x":8.75, "y":3.5},
{"matrix": [3, 9], "x":9.75, "y":3.5},
{"matrix": [3, 10], "x":10.75, "y":3.5},
{"matrix": [3, 11], "x":11.75, "y":3.5},
{"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
{"matrix": [3, 14], "x":15, "y":3.5},
{"matrix": [4, 0], "x":0, "y":4.5, "w":2.25},
{"matrix": [4, 1], "x":2.25, "y":4.5},
{"matrix": [4, 2], "x":3.25, "y":4.5},
{"matrix": [4, 3], "x":4.25, "y":4.5},
{"matrix": [4, 4], "x":5.25, "y":4.5},
{"matrix": [4, 5], "x":6.25, "y":4.5},
{"matrix": [4, 6], "x":7.25, "y":4.5},
{"matrix": [4, 7], "x":8.25, "y":4.5},
{"matrix": [4, 8], "x":9.25, "y":4.5},
{"matrix": [4, 9], "x":10.25, "y":4.5},
{"matrix": [4, 10], "x":11.25, "y":4.5},
{"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
{"matrix": [4, 13], "x":14, "y":4.5},
{"matrix": [5, 0], "x":0, "y":5.5, "w":1.25},
{"matrix": [5, 1], "x":1.25, "y":5.5, "w":1.25},
{"matrix": [5, 2], "x":2.5, "y":5.5, "w":1.25},
{"matrix": [5, 5], "x":3.75, "y":5.5, "w":6.25},
{"matrix": [5, 9], "x":10, "y":5.5, "w":1.25},
{"matrix": [5, 10], "x":11.25, "y":5.5, "w":1.25},
{"matrix": [5, 12], "x":13, "y":5.5},
{"matrix": [5, 13], "x":14, "y":5.5},
{"matrix": [5, 14], "x":15, "y":5.5}
]
}
}
}

View file

@ -0,0 +1,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_DEL,
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_PGUP,
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_PGDN,
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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_DEL,
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_PGUP,
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_PGDN,
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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View file

@ -0,0 +1,21 @@
# Jelly Evolv - Hotswap 6.25U PCB
![jelly evolv](https://i.imgur.com/vkHux8Fh.jpg)
A 75% made by Owlab.
* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
* Hardware Supported: Jelly Evolv Hotswap 6.25U PCB
* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
Make example for this keyboard (after setting up your build environment):
make owlab/jelly_evolv/hotswap/625u:default
Flashing example for this keyboard:
make owlab/jelly_evolv/hotswap/625u:default:flash
**Bootloader:** Press the button B of the PCB while plugging in the board.
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).

View file

@ -0,0 +1,5 @@
MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
DFU_SUFFIX_ARGS = -v 1688 -p 2220
BOOTLOADER_TYPE = stm32duino
OPT_DEFS += -DBOOTLOADER_STM32DUINO

View file

@ -0,0 +1,92 @@
{
"keyboard_name": "Jelly Evolv Hotswap_7U",
"usb": {
"pid": "0x3755",
"device_version": "0.0.1"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
{"matrix": [0, 1], "x":1.5, "y":0},
{"matrix": [0, 2], "x":2.5, "y":0},
{"matrix": [0, 3], "x":3.5, "y":0},
{"matrix": [0, 4], "x":4.5, "y":0},
{"matrix": [0, 5], "x":6, "y":0},
{"matrix": [0, 6], "x":7, "y":0},
{"matrix": [0, 7], "x":8, "y":0},
{"matrix": [0, 8], "x":9, "y":0},
{"matrix": [0, 9], "x":10.5, "y":0},
{"matrix": [0, 10], "x":11.5, "y":0},
{"matrix": [0, 11], "x":12.5, "y":0},
{"matrix": [0, 12], "x":13.5, "y":0},
{"matrix": [0, 14], "x":15, "y":0},
{"matrix": [1, 0], "x":0, "y":1.5},
{"matrix": [1, 1], "x":1, "y":1.5},
{"matrix": [1, 2], "x":2, "y":1.5},
{"matrix": [1, 3], "x":3, "y":1.5},
{"matrix": [1, 4], "x":4, "y":1.5},
{"matrix": [1, 5], "x":5, "y":1.5},
{"matrix": [1, 6], "x":6, "y":1.5},
{"matrix": [1, 7], "x":7, "y":1.5},
{"matrix": [1, 8], "x":8, "y":1.5},
{"matrix": [1, 9], "x":9, "y":1.5},
{"matrix": [1, 10], "x":10, "y":1.5},
{"matrix": [1, 11], "x":11, "y":1.5},
{"matrix": [1, 12], "x":12, "y":1.5},
{"matrix": [1, 13], "x":13, "y":1.5, "w":2},
{"matrix": [1, 14], "x":15, "y":1.5},
{"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
{"matrix": [2, 1], "x":1.5, "y":2.5},
{"matrix": [2, 2], "x":2.5, "y":2.5},
{"matrix": [2, 3], "x":3.5, "y":2.5},
{"matrix": [2, 4], "x":4.5, "y":2.5},
{"matrix": [2, 5], "x":5.5, "y":2.5},
{"matrix": [2, 6], "x":6.5, "y":2.5},
{"matrix": [2, 7], "x":7.5, "y":2.5},
{"matrix": [2, 8], "x":8.5, "y":2.5},
{"matrix": [2, 9], "x":9.5, "y":2.5},
{"matrix": [2, 10], "x":10.5, "y":2.5},
{"matrix": [2, 11], "x":11.5, "y":2.5},
{"matrix": [2, 12], "x":12.5, "y":2.5},
{"matrix": [2, 13], "x":13.5, "y":2.5, "w":1.5},
{"matrix": [2, 14], "x":15, "y":2.5},
{"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
{"matrix": [3, 1], "x":1.75, "y":3.5},
{"matrix": [3, 2], "x":2.75, "y":3.5},
{"matrix": [3, 3], "x":3.75, "y":3.5},
{"matrix": [3, 4], "x":4.75, "y":3.5},
{"matrix": [3, 5], "x":5.75, "y":3.5},
{"matrix": [3, 6], "x":6.75, "y":3.5},
{"matrix": [3, 7], "x":7.75, "y":3.5},
{"matrix": [3, 8], "x":8.75, "y":3.5},
{"matrix": [3, 9], "x":9.75, "y":3.5},
{"matrix": [3, 10], "x":10.75, "y":3.5},
{"matrix": [3, 11], "x":11.75, "y":3.5},
{"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
{"matrix": [3, 14], "x":15, "y":3.5},
{"matrix": [4, 0], "x":0, "y":4.5, "w":2.25},
{"matrix": [4, 1], "x":2.25, "y":4.5},
{"matrix": [4, 2], "x":3.25, "y":4.5},
{"matrix": [4, 3], "x":4.25, "y":4.5},
{"matrix": [4, 4], "x":5.25, "y":4.5},
{"matrix": [4, 5], "x":6.25, "y":4.5},
{"matrix": [4, 6], "x":7.25, "y":4.5},
{"matrix": [4, 7], "x":8.25, "y":4.5},
{"matrix": [4, 8], "x":9.25, "y":4.5},
{"matrix": [4, 9], "x":10.25, "y":4.5},
{"matrix": [4, 10], "x":11.25, "y":4.5},
{"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
{"matrix": [4, 13], "x":14, "y":4.5},
{"matrix": [5, 0], "x":0, "y":5.5, "w":1.5},
{"matrix": [5, 1], "x":1.5, "y":5.5, "w":1.5},
{"matrix": [5, 2], "x":3.5, "y":5.5},
{"matrix": [5, 5], "x":4.5, "y":5.5, "w":7},
{"matrix": [5, 10], "x":11.5, "y":5.5},
{"matrix": [5, 12], "x":13, "y":5.5},
{"matrix": [5, 13], "x":14, "y":5.5},
{"matrix": [5, 14], "x":15, "y":5.5}
]
}
}
}

View file

@ -0,0 +1,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_DEL,
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_PGUP,
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_PGDN,
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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_DEL,
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_PGUP,
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_PGDN,
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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View file

@ -0,0 +1,21 @@
# Jelly Evolv - Hotswap 7U PCB
![jelly evolv](https://i.imgur.com/yZ89zVkh.jpg)
A 75% made by Owlab.
* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
* Hardware Supported: Jelly Evolv Hotswap 7U PCB
* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
Make example for this keyboard (after setting up your build environment):
make owlab/jelly_evolv/hotswap/7u:default
Flashing example for this keyboard:
make owlab/jelly_evolv/hotswap/7u:default:flash
**Bootloader:** Press the button B of the PCB while plugging in the board.
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).

View file

@ -0,0 +1,5 @@
MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
DFU_SUFFIX_ARGS = -v 1688 -p 2220
BOOTLOADER_TYPE = stm32duino
OPT_DEFS += -DBOOTLOADER_STM32DUINO

View file

@ -0,0 +1,44 @@
{
"manufacturer": "OwLab",
"url": "",
"maintainer": "Owlab",
"usb": {
"vid": "0x4F53"
},
"matrix_pins": {
"cols": ["A7", "B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A15", "B4"],
"rows": ["A1", "A2", "A3", "A5", "A4", "A6"]
},
"diode_direction": "COL2ROW",
"ws2812": {
"pin": "B3"
},
"indicators": {
"caps_lock": "A0",
"on_state": 0
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"processor": "STM32F103",
"board": "STM32_F103_STM32DUINO",
"rgblight": {
"animations": {
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true
},
"brightness_steps": 10,
"led_count": 123,
"max_brightness": 100,
"saturation_steps": 8
}
}

View file

@ -0,0 +1,89 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/*
* STM32F103x8 memory setup for use with the STM32Duino bootloader.
*/
f103_flash_size = 128k;
MEMORY
{
/*Here we give 22K flash to bootloader*/
/*0x08005800 : the application bin start address*/
flash0 : org = 0x08006000, len = f103_flash_size - 0x6000
flash1 : org = 0x00000000, len = 0
flash2 : org = 0x00000000, len = 0
flash3 : org = 0x00000000, len = 0
flash4 : org = 0x00000000, len = 0
flash5 : org = 0x00000000, len = 0
flash6 : org = 0x00000000, len = 0
flash7 : org = 0x00000000, len = 0
ram0 : org = 0x20000000, len = 20k
ram1 : org = 0x00000000, len = 0
ram2 : org = 0x00000000, len = 0
ram3 : org = 0x00000000, len = 0
ram4 : org = 0x00000000, len = 0
ram5 : org = 0x00000000, len = 0
ram6 : org = 0x00000000, len = 0
ram7 : org = 0x00000000, len = 0
}
/* For each data/text section two region are defined, a virtual region
and a load region (_LMA suffix).*/
/* Flash region to be used for exception vectors.*/
REGION_ALIAS("VECTORS_FLASH", flash0);
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
/* Flash region to be used for constructors and destructors.*/
REGION_ALIAS("XTORS_FLASH", flash0);
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
/* Flash region to be used for code text.*/
REGION_ALIAS("TEXT_FLASH", flash0);
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
/* Flash region to be used for read only data.*/
REGION_ALIAS("RODATA_FLASH", flash0);
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
/* Flash region to be used for various.*/
REGION_ALIAS("VARIOUS_FLASH", flash0);
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
/* Flash region to be used for RAM(n) initialization data.*/
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
/* RAM region to be used for Main stack. This stack accommodates the processing
of all exceptions and interrupts.*/
REGION_ALIAS("MAIN_STACK_RAM", ram0);
/* RAM region to be used for the process stack. This is the stack used by
the main() function.*/
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
/* RAM region to be used for data segment.*/
REGION_ALIAS("DATA_RAM", ram0);
REGION_ALIAS("DATA_RAM_LMA", flash0);
/* RAM region to be used for BSS segment.*/
REGION_ALIAS("BSS_RAM", ram0);
/* RAM region to be used for the default heap.*/
REGION_ALIAS("HEAP_RAM", ram0);
/* Generic rules inclusion.*/
INCLUDE rules.ld

View file

@ -0,0 +1,95 @@
{
"keyboard_name": "Jelly Evolv Solder",
"usb": {
"pid": "0x4A56",
"device_version": "0.0.1"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
{"matrix": [0, 1], "x":1.5, "y":0},
{"matrix": [0, 2], "x":2.5, "y":0},
{"matrix": [0, 3], "x":3.5, "y":0},
{"matrix": [0, 4], "x":4.5, "y":0},
{"matrix": [0, 5], "x":6, "y":0},
{"matrix": [0, 6], "x":7, "y":0},
{"matrix": [0, 7], "x":8, "y":0},
{"matrix": [0, 8], "x":9, "y":0},
{"matrix": [0, 9], "x":10.5, "y":0},
{"matrix": [0, 10], "x":11.5, "y":0},
{"matrix": [0, 11], "x":12.5, "y":0},
{"matrix": [0, 12], "x":13.5, "y":0},
{"matrix": [0, 14], "x":15, "y":0},
{"matrix": [1, 0], "x":0, "y":1.5},
{"matrix": [1, 1], "x":1, "y":1.5},
{"matrix": [1, 2], "x":2, "y":1.5},
{"matrix": [1, 3], "x":3, "y":1.5},
{"matrix": [1, 4], "x":4, "y":1.5},
{"matrix": [1, 5], "x":5, "y":1.5},
{"matrix": [1, 6], "x":6, "y":1.5},
{"matrix": [1, 7], "x":7, "y":1.5},
{"matrix": [1, 8], "x":8, "y":1.5},
{"matrix": [1, 9], "x":9, "y":1.5},
{"matrix": [1, 10], "x":10, "y":1.5},
{"matrix": [1, 11], "x":11, "y":1.5},
{"matrix": [1, 12], "x":12, "y":1.5},
{"matrix": [2, 13], "x":13, "y":1.5},
{"matrix": [1, 13], "x":14, "y":1.5},
{"matrix": [1, 14], "x":15, "y":1.5},
{"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
{"matrix": [2, 1], "x":1.5, "y":2.5},
{"matrix": [2, 2], "x":2.5, "y":2.5},
{"matrix": [2, 3], "x":3.5, "y":2.5},
{"matrix": [2, 4], "x":4.5, "y":2.5},
{"matrix": [2, 5], "x":5.5, "y":2.5},
{"matrix": [2, 6], "x":6.5, "y":2.5},
{"matrix": [2, 7], "x":7.5, "y":2.5},
{"matrix": [2, 8], "x":8.5, "y":2.5},
{"matrix": [2, 9], "x":9.5, "y":2.5},
{"matrix": [2, 10], "x":10.5, "y":2.5},
{"matrix": [2, 11], "x":11.5, "y":2.5},
{"matrix": [2, 12], "x":12.5, "y":2.5},
{"matrix": [3, 12], "x":13.5, "y":2.5, "w":1.5},
{"matrix": [2, 14], "x":15, "y":2.5},
{"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
{"matrix": [3, 1], "x":1.75, "y":3.5},
{"matrix": [3, 2], "x":2.75, "y":3.5},
{"matrix": [3, 3], "x":3.75, "y":3.5},
{"matrix": [3, 4], "x":4.75, "y":3.5},
{"matrix": [3, 5], "x":5.75, "y":3.5},
{"matrix": [3, 6], "x":6.75, "y":3.5},
{"matrix": [3, 7], "x":7.75, "y":3.5},
{"matrix": [3, 8], "x":8.75, "y":3.5},
{"matrix": [3, 9], "x":9.75, "y":3.5},
{"matrix": [3, 10], "x":10.75, "y":3.5},
{"matrix": [3, 11], "x":11.75, "y":3.5},
{"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
{"matrix": [3, 14], "x":15, "y":3.5},
{"matrix": [4, 0], "x":0, "y":4.5, "w":1.25},
{"matrix": [5, 3], "x":1.25, "y":4.5},
{"matrix": [4, 1], "x":2.25, "y":4.5},
{"matrix": [4, 2], "x":3.25, "y":4.5},
{"matrix": [4, 3], "x":4.25, "y":4.5},
{"matrix": [4, 4], "x":5.25, "y":4.5},
{"matrix": [4, 5], "x":6.25, "y":4.5},
{"matrix": [4, 6], "x":7.25, "y":4.5},
{"matrix": [4, 7], "x":8.25, "y":4.5},
{"matrix": [4, 8], "x":9.25, "y":4.5},
{"matrix": [4, 9], "x":10.25, "y":4.5},
{"matrix": [4, 10], "x":11.25, "y":4.5},
{"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
{"matrix": [4, 13], "x":14, "y":4.5},
{"matrix": [5, 0], "x":0, "y":5.5, "w":1.25},
{"matrix": [5, 1], "x":1.25, "y":5.5, "w":1.25},
{"matrix": [5, 2], "x":2.5, "y":5.5, "w":1.25},
{"matrix": [5, 5], "x":3.75, "y":5.5, "w":6.25},
{"matrix": [5, 9], "x":10, "y":5.5, "w":1.25},
{"matrix": [5, 10], "x":11.25, "y":5.5, "w":1.25},
{"matrix": [5, 12], "x":13, "y":5.5},
{"matrix": [5, 13], "x":14, "y":5.5},
{"matrix": [5, 14], "x":15, "y":5.5}
]
}
}
}

View file

@ -0,0 +1,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_BSLS, KC_BSPC, KC_DEL,
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_PGUP,
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_PGDN,
KC_LSFT, 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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,37 @@
/*
* Copyright 2023 owlab
*
* 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(
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_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_BSLS, KC_BSPC, KC_DEL,
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_PGUP,
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_PGDN,
KC_LSFT, 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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
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, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, 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,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View file

@ -0,0 +1,21 @@
# Jelly Evolv - soldered PCB
![jelly evolv](https://i.imgur.com/Kk49RUVh.jpg)
A 75% made by Owlab.
* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
* Hardware Supported: Jelly Evolv solder PCB
* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
Make example for this keyboard (after setting up your build environment):
make owlab/jelly_evolv/solder:default
Flashing example for this keyboard:
make owlab/jelly_evolv/solder:default:flash
**Bootloader:** Press the button B of the PCB while plugging in the board.
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).

View file

@ -0,0 +1,5 @@
MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
DFU_SUFFIX_ARGS = -v 1688 -p 2220
BOOTLOADER_TYPE = stm32duino
OPT_DEFS += -DBOOTLOADER_STM32DUINO

View file

@ -0,0 +1,24 @@
/* Copyright 2023 Pangorin <https://github.com/pangorin>
*
* 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
/* RGB Matrix config */
#define RGB_MATRIX_LED_COUNT 84
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif

View file

@ -0,0 +1,246 @@
{
"keyboard_name": "Tan67",
"manufacturer": "Unknown",
"maintainer": "Pangorin",
"usb": {
"vid": "0x4D4B",
"pid": "0x6067",
"device_version": "0.0.1"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A5", "B10", "A3", "A2", "B0", "A9", "B1", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15"],
"rows": ["B12", "B11", "B14", "A8", "A1"]
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"features": {
"bootmagic": true,
"mousekey": false,
"extrakey": true,
"console": false,
"command": false,
"nkro": true,
"rgb_matrix": true
},
"ws2812": {
"pin": "B15"
},
"rgb_matrix": {
"driver": "WS2812",
"max_brightness": 200,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_rain": true,
"pixel_flow": true,
"pixel_fractal": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 15, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 30, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 60, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 75, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 90, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 105, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 119, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 134, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 149, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 164, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 179, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 202, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 224, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 1},
{"matrix": [1, 1], "x": 22, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 37, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 52, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 67, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 82, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 97, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 112, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 127, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 142, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 157, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 172, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 187, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 205, "y": 16, "flags": 4},
{"matrix": [1, 14], "x": 224, "y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 8},
{"matrix": [2, 1], "x": 26, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 41, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 56, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 71, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 86, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 101, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 116, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 131, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 146, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 161, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 175, "y": 32, "flags": 4},
{"matrix": [2, 12], "x": 200, "y": 32, "flags": 1},
{"matrix": [2, 14], "x": 224, "y": 32, "flags": 4},
{"matrix": [3, 0], "x": 9, "y": 48, "flags": 1},
{"matrix": [3, 1], "x": 34, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 49, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 63, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 78, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 93, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 108, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 123, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 138, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 153, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 168, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 189, "y": 48, "flags": 1},
{"matrix": [3, 12], "x": 209, "y": 48, "flags": 4},
{"matrix": [3, 14], "x": 224, "y": 48, "flags": 4},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 1], "x": 21, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 39, "y": 64, "flags": 1},
{"matrix": [4, 5], "x": 95, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 151, "y": 64, "flags": 1},
{"matrix": [4, 10], "x": 170, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 194, "y": 64, "flags": 4},
{"matrix": [4, 12], "x": 209, "y": 64, "flags": 4},
{"matrix": [4, 13], "x": 224, "y": 64, "flags": 4},
{"x": 220, "y": 56, "flags": 2},
{"x": 202, "y": 56, "flags": 2},
{"x": 179, "y": 56, "flags": 2},
{"x": 161, "y": 56, "flags": 2},
{"x": 131, "y": 56, "flags": 2},
{"x": 105, "y": 56, "flags": 2},
{"x": 82, "y": 56, "flags": 2},
{"x": 52, "y": 56, "flags": 2},
{"x": 30, "y": 56, "flags": 2},
{"x": 4, "y": 56, "flags": 2},
{"x": 19, "y": 8, "flags": 2},
{"x": 52, "y": 8, "flags": 2},
{"x": 90, "y": 8, "flags": 2},
{"x": 127, "y": 8, "flags": 2},
{"x": 164, "y": 8, "flags": 2},
{"x": 205, "y": 8, "flags": 2}
]
},
"community_layouts": ["65_ansi_blocker"],
"layouts": {
"LAYOUT_65_ansi_blocker": {
"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": [0, 14], "x": 15, "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": [1, 14], "x": 15, "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, 12], "w": 2.25, "x": 12.75, "y": 2},
{"matrix": [2, 14], "x": 15, "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, 11], "w": 1.75, "x": 12.25, "y": 3},
{"matrix": [3, 12], "x": 14, "y": 3},
{"matrix": [3, 14], "x": 15, "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, 11], "x": 13, "y": 4},
{"matrix": [4, 12], "x": 14, "y": 4},
{"matrix": [4, 13], "x": 15, "y": 4}
]
}
}
}

View file

@ -0,0 +1,80 @@
/* Copyright 2023 Pangorin <https://github.com/pangorin>
*
* 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
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layer_names {
_BASE,
_FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
` 1 2 3 4 5 6 7 8 9 0 - = Bksp Home
Tab Q W E R T Y U I O P [ ] |\ PgUp
Caps A S D F G H J K L ; ' Enter PgDn
Shift Z X C V B N M , . / RShift Up End
LCtrlWin LAlt Space MO(1)RCtrl LeftDownRigh
*/
/* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
[_BASE] = LAYOUT_65_ansi_blocker(
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_BSPC, KC_HOME,
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_PGUP,
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_PGDN,
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_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/*
` F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Reset
Togg |
Vai+
Vai-
*/
/* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
[_FN1] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QK_BOOT, _______,
_______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
_______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______
)
};

View file

@ -0,0 +1,80 @@
/* Copyright 2023 Pangorin <https://github.com/pangorin>
*
* 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
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layer_names {
_BASE,
_FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
` 1 2 3 4 5 6 7 8 9 0 - = Bksp Home
Tab Q W E R T Y U I O P [ ] |\ PgUp
Caps A S D F G H J K L ; ' Enter PgDn
Shift Z X C V B N M , . / RShift Up End
LCtrlWin LAlt Space MO(1)RCtrl LeftDownRigh
*/
/* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
[_BASE] = LAYOUT_65_ansi_blocker(
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_BSPC, KC_HOME,
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_PGUP,
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_PGDN,
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_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/*
` F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Reset
Togg |
Vai+
Vai-
*/
/* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
[_FN1] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QK_BOOT, _______,
_______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
_______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______
)
};

View file

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

View file

@ -0,0 +1,23 @@
# TAN67 PCB
A 65% PCB, which controlled by an STM32F072 chipset.
* Keyboard Maintainer: [Pangorin](https://github.com/pangorin)
* Hardware Supported: STM32F072
Make example for this keyboard (after setting up your build environment):
make pangorin/tan67:default
Flashing example for this keyboard:
make pangorin/tan67: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 2 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix and plug in the keyboard
* **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,52 @@
/* Copyright 2023 Pangorin <https://github.com/pangorin>
*
* 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
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): {
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
case (LED_FLAG_UNDERGLOW): {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_enable_noeeprom();
}
break;
}
}
return false;
}
return process_record_user(keycode, record);
}
#endif

View file

@ -9,6 +9,7 @@ TKL H87/88c compatible PCB with support for the most common layouts.
* Hardware Availability: https://RNDKBD.com; https://geon.works/
* Rev1 firmware is used for Galatea PCBs with no RGB underglow.
* Rev2 firmware is used for Galatea PCBs with RGB underglow.
* Rev3 firmware is used for Galatea PCBs with RP2040 chip w/ RGB underglow.
Make example for this keyboard (after setting up your build environment):

View file

@ -1,15 +0,0 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_MODE_TWINKLE

View file

@ -33,11 +33,23 @@
"pin": "D4"
},
"rgblight": {
"led_count": 24,
"hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"led_count": 24,
"max_brightness": 200,
"sleep": true
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"layouts": {
"LAYOUT": {

View file

@ -0,0 +1,374 @@
{
"manufacturer": "Studio Kestra",
"keyboard_name": "Galatea",
"maintainer": "studiokestra",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP14", "GP6"],
"rows": ["GP3", "GP4", "GP1", "GP2", "GP5", "GP29", "GP20", "GP19", "GP17", "GP16", "GP13", "GP12"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8803",
"vid": "0x7C10"
},
"ws2812": {
"driver": "vendor",
"pin": "GP15"
},
"rgblight": {
"led_count": 24,
"hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"max_brightness": 200,
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1.25, "y": 0},
{"matrix": [0, 1], "x": 2.25, "y": 0},
{"matrix": [0, 2], "x": 3.25, "y": 0},
{"matrix": [1, 2], "x": 4.25, "y": 0},
{"matrix": [0, 3], "x": 5.5, "y": 0},
{"matrix": [1, 3], "x": 6.5, "y": 0},
{"matrix": [0, 4], "x": 7.5, "y": 0},
{"matrix": [1, 4], "x": 8.5, "y": 0},
{"matrix": [0, 5], "x": 9.75, "y": 0},
{"matrix": [1, 5], "x": 10.75, "y": 0},
{"matrix": [0, 6], "x": 11.75, "y": 0},
{"matrix": [1, 6], "x": 12.75, "y": 0},
{"matrix": [0, 7], "x": 14, "y": 0},
{"matrix": [1, 7], "x": 15.25, "y": 0},
{"matrix": [0, 8], "x": 16.25, "y": 0},
{"matrix": [1, 8], "x": 17.25, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1.25},
{"matrix": [3, 0], "x": 1, "y": 1.25},
{"matrix": [2, 1], "x": 2, "y": 1.25},
{"matrix": [3, 1], "x": 3, "y": 1.25},
{"matrix": [2, 2], "x": 4, "y": 1.25},
{"matrix": [3, 2], "x": 5, "y": 1.25},
{"matrix": [2, 3], "x": 6, "y": 1.25},
{"matrix": [3, 3], "x": 7, "y": 1.25},
{"matrix": [2, 4], "x": 8, "y": 1.25},
{"matrix": [3, 4], "x": 9, "y": 1.25},
{"matrix": [2, 5], "x": 10, "y": 1.25},
{"matrix": [3, 5], "x": 11, "y": 1.25},
{"matrix": [2, 6], "x": 12, "y": 1.25},
{"matrix": [3, 6], "x": 13, "y": 1.25},
{"matrix": [2, 7], "x": 14, "y": 1.25},
{"matrix": [3, 7], "x": 15.25, "y": 1.25},
{"matrix": [2, 8], "x": 16.25, "y": 1.25},
{"matrix": [3, 8], "x": 17.25, "y": 1.25},
{"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [5, 0], "x": 1.5, "y": 2.25},
{"matrix": [4, 1], "x": 2.5, "y": 2.25},
{"matrix": [5, 1], "x": 3.5, "y": 2.25},
{"matrix": [4, 2], "x": 4.5, "y": 2.25},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"matrix": [4, 3], "x": 6.5, "y": 2.25},
{"matrix": [5, 3], "x": 7.5, "y": 2.25},
{"matrix": [4, 4], "x": 8.5, "y": 2.25},
{"matrix": [5, 4], "x": 9.5, "y": 2.25},
{"matrix": [4, 5], "x": 10.5, "y": 2.25},
{"matrix": [5, 5], "x": 11.5, "y": 2.25},
{"matrix": [4, 6], "x": 12.5, "y": 2.25},
{"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [5, 7], "x": 15.25, "y": 2.25},
{"matrix": [4, 8], "x": 16.25, "y": 2.25},
{"matrix": [5, 8], "x": 17.25, "y": 2.25},
{"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [7, 0], "x": 1.75, "y": 3.25},
{"matrix": [6, 1], "x": 2.75, "y": 3.25},
{"matrix": [7, 1], "x": 3.75, "y": 3.25},
{"matrix": [6, 2], "x": 4.75, "y": 3.25},
{"matrix": [7, 2], "x": 5.75, "y": 3.25},
{"matrix": [6, 3], "x": 6.75, "y": 3.25},
{"matrix": [7, 3], "x": 7.75, "y": 3.25},
{"matrix": [6, 4], "x": 8.75, "y": 3.25},
{"matrix": [7, 4], "x": 9.75, "y": 3.25},
{"matrix": [6, 5], "x": 10.75, "y": 3.25},
{"matrix": [7, 5], "x": 11.75, "y": 3.25},
{"matrix": [6, 6], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [9, 0], "x": 1.25, "y": 4.25},
{"matrix": [8, 1], "x": 2.25, "y": 4.25},
{"matrix": [9, 1], "x": 3.25, "y": 4.25},
{"matrix": [8, 2], "x": 4.25, "y": 4.25},
{"matrix": [9, 2], "x": 5.25, "y": 4.25},
{"matrix": [8, 3], "x": 6.25, "y": 4.25},
{"matrix": [9, 3], "x": 7.25, "y": 4.25},
{"matrix": [8, 4], "x": 8.25, "y": 4.25},
{"matrix": [9, 4], "x": 9.25, "y": 4.25},
{"matrix": [8, 5], "x": 10.25, "y": 4.25},
{"matrix": [9, 5], "x": 11.25, "y": 4.25},
{"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
{"matrix": [8, 7], "x": 14, "y": 4.25},
{"matrix": [8, 8], "x": 16.25, "y": 4.25},
{"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [11, 7], "x": 15.25, "y": 5.25},
{"matrix": [10, 8], "x": 16.25, "y": 5.25},
{"matrix": [11, 8], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_f13_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1.25, "y": 0},
{"matrix": [0, 1], "x": 2.25, "y": 0},
{"matrix": [0, 2], "x": 3.25, "y": 0},
{"matrix": [1, 2], "x": 4.25, "y": 0},
{"matrix": [0, 3], "x": 5.5, "y": 0},
{"matrix": [1, 3], "x": 6.5, "y": 0},
{"matrix": [0, 4], "x": 7.5, "y": 0},
{"matrix": [1, 4], "x": 8.5, "y": 0},
{"matrix": [0, 5], "x": 9.75, "y": 0},
{"matrix": [1, 5], "x": 10.75, "y": 0},
{"matrix": [0, 6], "x": 11.75, "y": 0},
{"matrix": [1, 6], "x": 12.75, "y": 0},
{"matrix": [0, 7], "x": 14, "y": 0},
{"matrix": [1, 7], "x": 15.25, "y": 0},
{"matrix": [0, 8], "x": 16.25, "y": 0},
{"matrix": [1, 8], "x": 17.25, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1.25},
{"matrix": [3, 0], "x": 1, "y": 1.25},
{"matrix": [2, 1], "x": 2, "y": 1.25},
{"matrix": [3, 1], "x": 3, "y": 1.25},
{"matrix": [2, 2], "x": 4, "y": 1.25},
{"matrix": [3, 2], "x": 5, "y": 1.25},
{"matrix": [2, 3], "x": 6, "y": 1.25},
{"matrix": [3, 3], "x": 7, "y": 1.25},
{"matrix": [2, 4], "x": 8, "y": 1.25},
{"matrix": [3, 4], "x": 9, "y": 1.25},
{"matrix": [2, 5], "x": 10, "y": 1.25},
{"matrix": [3, 5], "x": 11, "y": 1.25},
{"matrix": [2, 6], "x": 12, "y": 1.25},
{"matrix": [3, 6], "x": 13, "y": 1.25, "w": 2},
{"matrix": [3, 7], "x": 15.25, "y": 1.25},
{"matrix": [2, 8], "x": 16.25, "y": 1.25},
{"matrix": [3, 8], "x": 17.25, "y": 1.25},
{"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [5, 0], "x": 1.5, "y": 2.25},
{"matrix": [4, 1], "x": 2.5, "y": 2.25},
{"matrix": [5, 1], "x": 3.5, "y": 2.25},
{"matrix": [4, 2], "x": 4.5, "y": 2.25},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"matrix": [4, 3], "x": 6.5, "y": 2.25},
{"matrix": [5, 3], "x": 7.5, "y": 2.25},
{"matrix": [4, 4], "x": 8.5, "y": 2.25},
{"matrix": [5, 4], "x": 9.5, "y": 2.25},
{"matrix": [4, 5], "x": 10.5, "y": 2.25},
{"matrix": [5, 5], "x": 11.5, "y": 2.25},
{"matrix": [4, 6], "x": 12.5, "y": 2.25},
{"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [5, 7], "x": 15.25, "y": 2.25},
{"matrix": [4, 8], "x": 16.25, "y": 2.25},
{"matrix": [5, 8], "x": 17.25, "y": 2.25},
{"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [7, 0], "x": 1.75, "y": 3.25},
{"matrix": [6, 1], "x": 2.75, "y": 3.25},
{"matrix": [7, 1], "x": 3.75, "y": 3.25},
{"matrix": [6, 2], "x": 4.75, "y": 3.25},
{"matrix": [7, 2], "x": 5.75, "y": 3.25},
{"matrix": [6, 3], "x": 6.75, "y": 3.25},
{"matrix": [7, 3], "x": 7.75, "y": 3.25},
{"matrix": [6, 4], "x": 8.75, "y": 3.25},
{"matrix": [7, 4], "x": 9.75, "y": 3.25},
{"matrix": [6, 5], "x": 10.75, "y": 3.25},
{"matrix": [7, 5], "x": 11.75, "y": 3.25},
{"matrix": [6, 6], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [8, 1], "x": 2.25, "y": 4.25},
{"matrix": [9, 1], "x": 3.25, "y": 4.25},
{"matrix": [8, 2], "x": 4.25, "y": 4.25},
{"matrix": [9, 2], "x": 5.25, "y": 4.25},
{"matrix": [8, 3], "x": 6.25, "y": 4.25},
{"matrix": [9, 3], "x": 7.25, "y": 4.25},
{"matrix": [8, 4], "x": 8.25, "y": 4.25},
{"matrix": [9, 4], "x": 9.25, "y": 4.25},
{"matrix": [8, 5], "x": 10.25, "y": 4.25},
{"matrix": [9, 5], "x": 11.25, "y": 4.25},
{"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 2.75},
{"matrix": [8, 8], "x": 16.25, "y": 4.25},
{"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [11, 7], "x": 15.25, "y": 5.25},
{"matrix": [10, 8], "x": 16.25, "y": 5.25},
{"matrix": [11, 8], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_f13_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1.25, "y": 0},
{"matrix": [0, 1], "x": 2.25, "y": 0},
{"matrix": [0, 2], "x": 3.25, "y": 0},
{"matrix": [1, 2], "x": 4.25, "y": 0},
{"matrix": [0, 3], "x": 5.5, "y": 0},
{"matrix": [1, 3], "x": 6.5, "y": 0},
{"matrix": [0, 4], "x": 7.5, "y": 0},
{"matrix": [1, 4], "x": 8.5, "y": 0},
{"matrix": [0, 5], "x": 9.75, "y": 0},
{"matrix": [1, 5], "x": 10.75, "y": 0},
{"matrix": [0, 6], "x": 11.75, "y": 0},
{"matrix": [1, 6], "x": 12.75, "y": 0},
{"matrix": [0, 7], "x": 14, "y": 0},
{"matrix": [1, 7], "x": 15.25, "y": 0},
{"matrix": [0, 8], "x": 16.25, "y": 0},
{"matrix": [1, 8], "x": 17.25, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1.25},
{"matrix": [3, 0], "x": 1, "y": 1.25},
{"matrix": [2, 1], "x": 2, "y": 1.25},
{"matrix": [3, 1], "x": 3, "y": 1.25},
{"matrix": [2, 2], "x": 4, "y": 1.25},
{"matrix": [3, 2], "x": 5, "y": 1.25},
{"matrix": [2, 3], "x": 6, "y": 1.25},
{"matrix": [3, 3], "x": 7, "y": 1.25},
{"matrix": [2, 4], "x": 8, "y": 1.25},
{"matrix": [3, 4], "x": 9, "y": 1.25},
{"matrix": [2, 5], "x": 10, "y": 1.25},
{"matrix": [3, 5], "x": 11, "y": 1.25},
{"matrix": [2, 6], "x": 12, "y": 1.25},
{"matrix": [3, 6], "x": 13, "y": 1.25, "w": 2},
{"matrix": [3, 7], "x": 15.25, "y": 1.25},
{"matrix": [2, 8], "x": 16.25, "y": 1.25},
{"matrix": [3, 8], "x": 17.25, "y": 1.25},
{"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [5, 0], "x": 1.5, "y": 2.25},
{"matrix": [4, 1], "x": 2.5, "y": 2.25},
{"matrix": [5, 1], "x": 3.5, "y": 2.25},
{"matrix": [4, 2], "x": 4.5, "y": 2.25},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"matrix": [4, 3], "x": 6.5, "y": 2.25},
{"matrix": [5, 3], "x": 7.5, "y": 2.25},
{"matrix": [4, 4], "x": 8.5, "y": 2.25},
{"matrix": [5, 4], "x": 9.5, "y": 2.25},
{"matrix": [4, 5], "x": 10.5, "y": 2.25},
{"matrix": [5, 5], "x": 11.5, "y": 2.25},
{"matrix": [4, 6], "x": 12.5, "y": 2.25},
{"matrix": [5, 7], "x": 15.25, "y": 2.25},
{"matrix": [4, 8], "x": 16.25, "y": 2.25},
{"matrix": [5, 8], "x": 17.25, "y": 2.25},
{"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [7, 0], "x": 1.75, "y": 3.25},
{"matrix": [6, 1], "x": 2.75, "y": 3.25},
{"matrix": [7, 1], "x": 3.75, "y": 3.25},
{"matrix": [6, 2], "x": 4.75, "y": 3.25},
{"matrix": [7, 2], "x": 5.75, "y": 3.25},
{"matrix": [6, 3], "x": 6.75, "y": 3.25},
{"matrix": [7, 3], "x": 7.75, "y": 3.25},
{"matrix": [6, 4], "x": 8.75, "y": 3.25},
{"matrix": [7, 4], "x": 9.75, "y": 3.25},
{"matrix": [6, 5], "x": 10.75, "y": 3.25},
{"matrix": [7, 5], "x": 11.75, "y": 3.25},
{"matrix": [6, 6], "x": 12.75, "y": 3.25},
{"matrix": [4, 7], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [9, 0], "x": 1.25, "y": 4.25},
{"matrix": [8, 1], "x": 2.25, "y": 4.25},
{"matrix": [9, 1], "x": 3.25, "y": 4.25},
{"matrix": [8, 2], "x": 4.25, "y": 4.25},
{"matrix": [9, 2], "x": 5.25, "y": 4.25},
{"matrix": [8, 3], "x": 6.25, "y": 4.25},
{"matrix": [9, 3], "x": 7.25, "y": 4.25},
{"matrix": [8, 4], "x": 8.25, "y": 4.25},
{"matrix": [9, 4], "x": 9.25, "y": 4.25},
{"matrix": [8, 5], "x": 10.25, "y": 4.25},
{"matrix": [9, 5], "x": 11.25, "y": 4.25},
{"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 2.75},
{"matrix": [8, 8], "x": 16.25, "y": 4.25},
{"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [11, 7], "x": 15.25, "y": 5.25},
{"matrix": [10, 8], "x": 16.25, "y": 5.25},
{"matrix": [11, 8], "x": 17.25, "y": 5.25}
]
}
}
}

View file

@ -0,0 +1,38 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* EscF1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12F13 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = LBkRBk InsHomPgU
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD
*
* Caps A S D F G H J K L ; ' Enter
*
* Shft \ Z X C V B N M , . / Shift Mo1
*
* CtrlGUI Alt Alt GUIMenuCtrl
*
*/
[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_F13, 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_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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
[1] = LAYOUT(
QK_BOOT, 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS ),
};

View file

@ -0,0 +1,40 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* EscF1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12F13 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = LBkRBk InsHomPgU
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD
*
* Caps A S D F G H J K L ; ' Enter
*
* Shft \ Z X C V B N M , . / Shift Mo1
*
* CtrlGUI Alt Alt GUIMenuCtrl
*
*/
[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_F13, 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_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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
[1] = LAYOUT(
QK_BOOT, 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS ),
};

View file

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

View file

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