diff --git a/zegonix/qua_ken/config.h b/zegonix/qua_ken/config.h new file mode 100644 index 0000000..55691bb --- /dev/null +++ b/zegonix/qua_ken/config.h @@ -0,0 +1,27 @@ +// Copyright 2024 zegonix (@zegonix) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT + +/* split settings */ +#define SPLIT_HAND_PIN_LOW_IS_LEFT +#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode. +#define SERIAL_USART_TX_PIN A11 // USART TX pin +#define SERIAL_USART_RX_PIN A12 // USART RX pin +#define SERIAL_USART_DRIVER SD6 // Select UART Driver for interface 6 diff --git a/zegonix/qua_ken/halconf.h b/zegonix/qua_ken/halconf.h new file mode 100644 index 0000000..dfddaac --- /dev/null +++ b/zegonix/qua_ken/halconf.h @@ -0,0 +1,5 @@ +#pragma once + +#define HAL_USE_SERIAL TRUE + +#include_next diff --git a/zegonix/qua_ken/keyboard.json b/zegonix/qua_ken/keyboard.json new file mode 100644 index 0000000..40ef431 --- /dev/null +++ b/zegonix/qua_ken/keyboard.json @@ -0,0 +1,127 @@ +{ + "manufacturer": "=", + "keyboard_name": "qua-ken", + "maintainer": "zegonix", + "processor": "STM32F401", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "url": "https://github.com/zegonix/qua-ken", + "features": { + "bootmagic": true, + "nkro": true, + "extrakey": true, + "mousekey": true, + }, + "required": ["lto"], + "usb": { + "device_version": "0.0.1", + "pid": "0x6337", + "vid": "0x7A78" + }, + "matrix_pins": { + "cols": ["B7", "B6", "B5", "B3", "D2", "C12"], + "rows": ["B8", "B4", "C11", "C10", "A15"] + }, + "encoder": { + "rotary": [ + { "pin_a": "B14", "pin_b": "B15", "resolution": 2 } + ] + }, + "split" : { + "enabled": true, + "handedness": { + "pin": "A2", + }, + "matrix_pins": { + "right": { + "cols": ["A5", "A6", "A7", "C5", "B0", "B1"], + "rows": ["A4", "C4", "B12", "B13", "C9"] + } + }, + "encoder": { + "right": { + "rotary": [ + { "pin_a": "A9", "pin_b": "A8", "resolution": 2 } + ] + } + } + }, + "tapping": { + "term": 200 + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0, "w": 1}, + {"label": "1!", "matrix": [0, 1], "x": 1, "y": 0, "w": 1}, + {"label": "2@", "matrix": [0, 2], "x": 2, "y": 0, "w": 1}, + {"label": "3#", "matrix": [0, 3], "x": 3, "y": 0, "w": 1}, + {"label": "4$", "matrix": [0, 4], "x": 4, "y": 0, "w": 1}, + {"label": "5%", "matrix": [0, 5], "x": 5, "y": 0, "w": 1}, + + {"label": "-_", "matrix": [5, 5], "x": 15, "y": 0, "w": 1}, + {"label": "0)", "matrix": [5, 4], "x": 14, "y": 0, "w": 1}, + {"label": "9(", "matrix": [5, 3], "x": 13, "y": 0, "w": 1}, + {"label": "8*", "matrix": [5, 2], "x": 12, "y": 0, "w": 1}, + {"label": "7&", "matrix": [5, 1], "x": 11, "y": 0, "w": 1}, + {"label": "6^", "matrix": [5, 0], "x": 10, "y": 0, "w": 1}, + + {"label": "TAB", "matrix": [1, 0], "x": 0, "y": 1, "w": 1}, + {"label": "Q", "matrix": [1, 1], "x": 1, "y": 1, "w": 1}, + {"label": "W", "matrix": [1, 2], "x": 2, "y": 1, "w": 1}, + {"label": "E", "matrix": [1, 3], "x": 3, "y": 1, "w": 1}, + {"label": "R", "matrix": [1, 4], "x": 4, "y": 1, "w": 1}, + {"label": "T", "matrix": [1, 5], "x": 5, "y": 1, "w": 1}, + + {"label": "[{", "matrix": [6, 5], "x": 15, "y": 1, "w": 1}, + {"label": "P", "matrix": [6, 4], "x": 14, "y": 1, "w": 1}, + {"label": "O", "matrix": [6, 3], "x": 13, "y": 1, "w": 1}, + {"label": "I", "matrix": [6, 2], "x": 12, "y": 1, "w": 1}, + {"label": "U", "matrix": [6, 1], "x": 11, "y": 1, "w": 1}, + {"label": "Y", "matrix": [6, 0], "x": 10, "y": 1, "w": 1}, + + {"label": "CAPS", "matrix": [2, 0], "x": 0, "y": 2, "w": 1}, + {"label": "A", "matrix": [2, 1], "x": 1, "y": 2, "w": 1}, + {"label": "S", "matrix": [2, 2], "x": 2, "y": 2, "w": 1}, + {"label": "D", "matrix": [2, 3], "x": 3, "y": 2, "w": 1}, + {"label": "F", "matrix": [2, 4], "x": 4, "y": 2, "w": 1}, + {"label": "G", "matrix": [2, 5], "x": 5, "y": 2, "w": 1}, + + {"label": "'\"", "matrix": [7, 5], "x": 15, "y": 2, "w": 1}, + {"label": ";:", "matrix": [7, 4], "x": 14, "y": 2, "w": 1}, + {"label": "L", "matrix": [7, 3], "x": 13, "y": 2, "w": 1}, + {"label": "K", "matrix": [7, 2], "x": 12, "y": 2, "w": 1}, + {"label": "J", "matrix": [7, 1], "x": 11, "y": 2, "w": 1}, + {"label": "H", "matrix": [7, 0], "x": 10, "y": 2, "w": 1}, + + {"label": "LSFT", "matrix": [3, 0], "x": 0, "y": 3, "w": 1}, + {"label": "Z", "matrix": [3, 1], "x": 1, "y": 3, "w": 1}, + {"label": "X", "matrix": [3, 2], "x": 2, "y": 3, "w": 1}, + {"label": "C", "matrix": [3, 3], "x": 3, "y": 3, "w": 1}, + {"label": "V", "matrix": [3, 4], "x": 4, "y": 3, "w": 1}, + {"label": "B", "matrix": [3, 5], "x": 5, "y": 3, "w": 1}, + + {"label": "RSFT", "matrix": [8, 5], "x": 15, "y": 3, "w": 1}, + {"label": "/?", "matrix": [8, 4], "x": 14, "y": 3, "w": 1}, + {"label": ".>", "matrix": [8, 3], "x": 13, "y": 3, "w": 1}, + {"label": ",<", "matrix": [8, 2], "x": 12, "y": 3, "w": 1}, + {"label": "M", "matrix": [8, 1], "x": 11, "y": 3, "w": 1}, + {"label": "N", "matrix": [8, 0], "x": 10, "y": 3, "w": 1}, + + {"label": "LALT", "matrix": [4, 0], "x": 0, "y": 4, "w": 1}, + {"label": "LCLT", "matrix": [4, 1], "x": 1, "y": 4, "w": 1}, + {"label": "____", "matrix": [4, 2], "x": 2, "y": 4, "w": 1}, + {"label": "SPC", "matrix": [4, 3], "x": 3, "y": 4, "w": 1}, + {"label": "ESC", "matrix": [4, 4], "x": 4, "y": 4, "w": 1}, + {"label": "ENCL", "matrix": [4, 5], "x": 5, "y": 4, "w": 1}, + + {"label": "ENCR", "matrix": [9, 5], "x": 15, "y": 4, "w": 1}, + {"label": "BSPC", "matrix": [9, 4], "x": 14, "y": 4, "w": 1}, + {"label": "ENT", "matrix": [9, 3], "x": 13, "y": 4, "w": 1}, + {"label": "_NAV", "matrix": [9, 2], "x": 12, "y": 4, "w": 1}, + {"label": "RALT", "matrix": [9, 1], "x": 11, "y": 4, "w": 1}, + {"label": "LGUI", "matrix": [9, 0], "x": 10, "y": 4, "w": 1}, + ] + } + } +} diff --git a/zegonix/qua_ken/keymaps/default/config.h b/zegonix/qua_ken/keymaps/default/config.h new file mode 100644 index 0000000..021487a --- /dev/null +++ b/zegonix/qua_ken/keymaps/default/config.h @@ -0,0 +1 @@ +#define DEBOUNCE 8 \ No newline at end of file diff --git a/zegonix/qua_ken/keymaps/default/keymap.c b/zegonix/qua_ken/keymaps/default/keymap.c new file mode 100644 index 0000000..ce771d9 --- /dev/null +++ b/zegonix/qua_ken/keymaps/default/keymap.c @@ -0,0 +1,133 @@ +/* + * KEYMAP KEYMAP KEYMAP, QUAK! + */ +#include QMK_KEYBOARD_H + +#define QUAK_A (MT(MOD_LGUI, KC_A)) +#define QUAK_S (MT(MOD_LALT, KC_S)) +#define QUAK_D (MT(MOD_LSFT, KC_D)) +#define QUAK_F (MT(MOD_LCTL, KC_F)) +#define QUAK_J (MT(MOD_LCTL, KC_J)) +#define QUAK_K (MT(MOD_LSFT, KC_K)) +#define QUAK_L (MT(MOD_LALT, KC_L)) +#define QUAK__ (MT(MOD_LGUI, KC_SCLN)) + +enum layer_names { + _BS, + _GM, + _NV, + _CH, + _MS, + + _CAPS, // for lighting layers only, do not assign keymap! +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * keyboard layout + * ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + * │ESC │ 1! │ 2@ │ 3# │ 4$ │ 5% │ │ 6^ │ 7& │ 8* │ 9( │ 0) │ __ │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │TAB │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ \| │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │_CH │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ;: │ '" │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │LSFT│ Z │ X │ C │ V │ B │ ┌────┐ ┌────┐ │ N │ M │ ,< │ .> │ /? │RSFT│ + * └────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┐│ENCL│ │ENCL│┌──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴────┘ + * │LALT│LCTL│ __ │SPC │ESC │└────┘ └────┘│LALT│LCTL│____│SPC │ESC │ + * └────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┘ + */ + +/// [TEMPLATE] +// [] = LAYOUT( +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// ), + +// base layer +[_BS] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + MO(_CH), QUAK_A, QUAK_S, QUAK_D, QUAK_F, KC_G, KC_H, QUAK_J, QUAK_K, QUAK_L, QUAK__, KC_QUOT, + 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_LALT, KC_LCTL, KC_ESC, KC_SPC, KC_DEL, _______, _______, KC_BSPC, KC_ENT, MO(_NV), _______, KC_RGUI, +), + +// gaming layer +[_GM] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_TAB, KC_T, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_LCTL, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_G, KC_B, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LALT, KC_LCTL, KC_ESC, KC_SPC, KC_DEL, DF(_BS), _______, KC_BSPC, KC_ENT, MO(_NV), _______, KC_RGUI, +), + +// navigation layer +[_NV] = LAYOUT( + 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_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_F12, + _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, +), + +// div +[_CH] = LAYOUT( + 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, +), + +// mouse layer +[_MS] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_BTN2, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +), +}; + +// /* Indicator LED Configuraton */ +// const rgblight_segment_t PROGMEM rgb_layer_BASE[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_YELLOW}); +// const rgblight_segment_t PROGMEM rgb_layer_GAME[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_SPRINGGREEN}); +// const rgblight_segment_t PROGMEM rgb_layer_NAV[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_DIV[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_MOUS[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_CAPS[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_WHITE}); +// +// const rgblight_segment_t * const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST( +// [_BASE] = rgb_layer_BASE, +// [_GAME] = rgb_layer_GAME, +// [_NAV] = rgb_layer_NAV, +// [_DIV] = rgb_layer_DIV, +// [_MOUS] = rgb_layer_MOUS, +// [_CAPS] = rgb_layer_CAPS +// ); +// +// void keyboard_post_init_user(void) { +// rgblight_layers = rgb_layers; +// } +// +// bool led_update_user(led_t led_state) { +// rgblight_set_layer_state(_CAPS, led_state.caps_lock); +// return true; +// } +// +// layer_state_t default_layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(_BASE, layer_state_cmp(state, _BASE)); +// rgblight_set_layer_state(_GAME, layer_state_cmp(state, _GAME)); +// return state; +// } +// +// layer_state_t layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(_NAV, layer_state_cmp(state, _NAV)); +// rgblight_set_layer_state(_DIV, layer_state_cmp(state, _DIV)); +// rgblight_set_layer_state(_MOUS, layer_state_cmp(state, _MOUS)); +// return state; +// } diff --git a/zegonix/qua_ken/keymaps/default/rules.mk b/zegonix/qua_ken/keymaps/default/rules.mk new file mode 100644 index 0000000..aeaecc0 --- /dev/null +++ b/zegonix/qua_ken/keymaps/default/rules.mk @@ -0,0 +1,2 @@ + +DEBOUNCE_TYPE = sym_defer_g \ No newline at end of file diff --git a/zegonix/qua_ken/keymaps/quaken/config.h b/zegonix/qua_ken/keymaps/quaken/config.h new file mode 100644 index 0000000..021487a --- /dev/null +++ b/zegonix/qua_ken/keymaps/quaken/config.h @@ -0,0 +1 @@ +#define DEBOUNCE 8 \ No newline at end of file diff --git a/zegonix/qua_ken/keymaps/quaken/keymap.c b/zegonix/qua_ken/keymaps/quaken/keymap.c new file mode 100644 index 0000000..732e12d --- /dev/null +++ b/zegonix/qua_ken/keymaps/quaken/keymap.c @@ -0,0 +1,141 @@ +/* + * KEYMAP KEYMAP KEYMAP, QUAK! + */ +#include QMK_KEYBOARD_H + +#define QUAK_A (MT(MOD_LGUI, KC_A)) +#define QUAK_S (MT(MOD_LALT, KC_S)) +#define QUAK_D (MT(MOD_LSFT, KC_D)) +#define QUAK_F (MT(MOD_LCTL, KC_F)) +#define QUAK_J (MT(MOD_LCTL, KC_J)) +#define QUAK_K (MT(MOD_LSFT, KC_K)) +#define QUAK_L (MT(MOD_LALT, KC_L)) +#define QUAK__ (MT(MOD_LGUI, KC_SCLN)) + +enum layer_names { + _BS, + _GM, + _NV, + _CH, + _MS, + + _CAPS, // for lighting layers only, do not assign keymap! +}; + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [_BS] = { ENCODER_CCW_CW(KC_WH_L, KC_WH_R), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [_GM] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [_NV] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(_______, _______) }, + [_CH] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + [_MS] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * keyboard layout + * ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + * │ESC │ 1! │ 2@ │ 3# │ 4$ │ 5% │ │ 6^ │ 7& │ 8* │ 9( │ 0) │ __ │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │TAB │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ \| │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │_CH │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ;: │ '" │ + * ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + * │LSFT│ Z │ X │ C │ V │ B │ ┌────┐ ┌────┐ │ N │ M │ ,< │ .> │ /? │RSFT│ + * └────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┐│ENCL│ │ENCL│┌──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴────┘ + * │LALT│LCTL│ESC │SPC │DEL │└────┘ └────┘│LALT│LCTL│____│SPC │ESC │ + * └────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┘ + */ + +/// [TEMPLATE] +// [] = LAYOUT( +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +// ), + +// base layer +[_BS] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + MO(_CH), QUAK_A, QUAK_S, QUAK_D, QUAK_F, KC_G, KC_H, QUAK_J, QUAK_K, QUAK_L, QUAK__, KC_QUOT, + 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_LALT, KC_LCTL, KC_ESC, KC_SPC, KC_DEL, _______, _______, KC_BSPC, KC_ENT, MO(_NV), _______, KC_RGUI +), + +// gaming layer +[_GM] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_TAB, KC_T, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_LCTL, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_G, KC_B, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LALT, KC_LCTL, KC_ESC, KC_SPC, KC_DEL, DF(_BS), _______, KC_BSPC, KC_ENT, MO(_NV), _______, KC_RGUI +), + +// navigation layer +[_NV] = LAYOUT( + 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_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_F12, + _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______ +), + +// div +[_CH] = LAYOUT( + 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______ +), + +// mouse layer +[_MS] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_BTN2, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +}; + +// /* Indicator LED Configuraton */ +// const rgblight_segment_t PROGMEM rgb_layer_BASE[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_YELLOW}); +// const rgblight_segment_t PROGMEM rgb_layer_GAME[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_SPRINGGREEN}); +// const rgblight_segment_t PROGMEM rgb_layer_NAV[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_DIV[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_MOUS[] = RGBLIGHT_LAYER_SEGMENTS({11, 2, HSV_PURPLE}); +// const rgblight_segment_t PROGMEM rgb_layer_CAPS[] = RGBLIGHT_LAYER_SEGMENTS({1, 1, HSV_WHITE}); +// +// const rgblight_segment_t * const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST( +// [_BASE] = rgb_layer_BASE, +// [_GAME] = rgb_layer_GAME, +// [_NAV] = rgb_layer_NAV, +// [_DIV] = rgb_layer_DIV, +// [_MOUS] = rgb_layer_MOUS, +// [_CAPS] = rgb_layer_CAPS +// ); +// +// void keyboard_post_init_user(void) { +// rgblight_layers = rgb_layers; +// } +// +// bool led_update_user(led_t led_state) { +// rgblight_set_layer_state(_CAPS, led_state.caps_lock); +// return true; +// } +// +// layer_state_t default_layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(_BASE, layer_state_cmp(state, _BASE)); +// rgblight_set_layer_state(_GAME, layer_state_cmp(state, _GAME)); +// return state; +// } +// +// layer_state_t layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(_NAV, layer_state_cmp(state, _NAV)); +// rgblight_set_layer_state(_DIV, layer_state_cmp(state, _DIV)); +// rgblight_set_layer_state(_MOUS, layer_state_cmp(state, _MOUS)); +// return state; +// } diff --git a/zegonix/qua_ken/keymaps/quaken/rules.mk b/zegonix/qua_ken/keymaps/quaken/rules.mk new file mode 100644 index 0000000..aeaecc0 --- /dev/null +++ b/zegonix/qua_ken/keymaps/quaken/rules.mk @@ -0,0 +1,2 @@ + +DEBOUNCE_TYPE = sym_defer_g \ No newline at end of file diff --git a/zegonix/qua_ken/mcuconf.h b/zegonix/qua_ken/mcuconf.h new file mode 100644 index 0000000..0319066 --- /dev/null +++ b/zegonix/qua_ken/mcuconf.h @@ -0,0 +1,6 @@ +#pragma once + +#include_next + +#undef STM32_SERIAL_USE_USART6 +#define STM32_SERIAL_USE_USART6 TRUE diff --git a/zegonix/qua_ken/qua_ken.c b/zegonix/qua_ken/qua_ken.c new file mode 100644 index 0000000..deeb426 --- /dev/null +++ b/zegonix/qua_ken/qua_ken.c @@ -0,0 +1,7 @@ + +#include "gpio.h" + +void keyboard_pre_init_kb(void) { + // set pulldown on handedness pin + gpio_set_pin_input_low(A2); +} diff --git a/zegonix/qua_ken/readme.md b/zegonix/qua_ken/readme.md new file mode 100644 index 0000000..f776ff7 --- /dev/null +++ b/zegonix/qua_ken/readme.md @@ -0,0 +1,34 @@ +# Description + +Configuration for my custom keyboard `qua-ken` base on the `Sofle 2.1`. + +* Keyboard Maintainer: [zegonix](https://github.com/zegonix) +* Hardware Supported: [qua-ken](https://github.com/zegonix/qua-ken) +* Hardware Availability: the pcb is open source, order it yourself + +# Building and flashing firmware +To build and flash the firmware, set up the qmk tool and use the compile and flash commands: + +``` +qmk config user.keyboard=zegonix/qua_ken +qmk config user.keymap=quaken +qmk compile +qmk flash +``` + +Alternatively you can use the QMK root level Makefile: + +``` +make zegonix/qua_ken:quaken // build firmware +make zegonix/qua_ken:quaken:dfu-utils // build and flash firmware +``` + +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 the [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, which is be Escape key, while connecting the keyboard. *This variant was not tested* +* **Physical reset button**: Short the two Pins of J2 (usually a pair of tweezers works well) and press the reset button (only button on the backside) +* **Keycode in layout**: Press the key mapped to `QK_BOOT`. diff --git a/zegonix/qua_ken/rules.mk b/zegonix/qua_ken/rules.mk new file mode 100644 index 0000000..297f055 --- /dev/null +++ b/zegonix/qua_ken/rules.mk @@ -0,0 +1,7 @@ +SERIAL_DRIVER = usart + +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +WS2812_DRIVER_REQUIRED = no +