From 0f7eae3a556831d1f639d89b7a281ebf5c5a136b Mon Sep 17 00:00:00 2001 From: AP Date: Tue, 5 Aug 2025 22:03:15 -0400 Subject: [PATCH] viktus-spmini vial support (#921) * viktus-spmini vial support * Fix ID for spmini * Size reduction Based on https://docs.qmk.fm/squeezing_avr. Local compile reports as " * The firmware size is fine - 25946/28672 (90%, 2726 bytes free)" Also changed unlock combo. * VIAL_UNLOCK_COMBO_ROWS update Fixed dupe key --- .../viktus/sp_mini/keymaps/vial/config.h | 31 ++ .../viktus/sp_mini/keymaps/vial/keymap.c | 135 +++++++++ .../viktus/sp_mini/keymaps/vial/rules.mk | 20 ++ .../viktus/sp_mini/keymaps/vial/vial.json | 285 ++++++++++++++++++ 4 files changed, 471 insertions(+) create mode 100644 keyboards/viktus/sp_mini/keymaps/vial/config.h create mode 100644 keyboards/viktus/sp_mini/keymaps/vial/keymap.c create mode 100644 keyboards/viktus/sp_mini/keymaps/vial/rules.mk create mode 100644 keyboards/viktus/sp_mini/keymaps/vial/vial.json diff --git a/keyboards/viktus/sp_mini/keymaps/vial/config.h b/keyboards/viktus/sp_mini/keymaps/vial/config.h new file mode 100644 index 0000000000..91b53c61d0 --- /dev/null +++ b/keyboards/viktus/sp_mini/keymaps/vial/config.h @@ -0,0 +1,31 @@ +#define VIAL_KEYBOARD_UID {0xE5, 0x2B, 0x48, 0x0A, 0x60, 0xE2, 0x5D, 0x31} + +#define VIAL_UNLOCK_COMBO_ROWS { 1, 7 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 6 } + +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 +#define LAYER_STATE_8BIT +// #define VIAL_COMBO_ENTRIES 8 +// #define VIAL_TAP_DANCE_ENTRIES 8 + +/* +#undef RGBLIGHT_ANIMATIONS +// #define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +// #define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #define RGBLIGHT_EFFECT_TWINKLE +*/ + +/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ +#define RGBLIGHT_BREATHE_TABLE_SIZE 128 // 256(default) or 128 or 64 + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE +#define NO_ACTION_ONESHOT +#define NO_MUSIC_MODE \ No newline at end of file diff --git a/keyboards/viktus/sp_mini/keymaps/vial/keymap.c b/keyboards/viktus/sp_mini/keymaps/vial/keymap.c new file mode 100644 index 0000000000..774cac7cda --- /dev/null +++ b/keyboards/viktus/sp_mini/keymaps/vial/keymap.c @@ -0,0 +1,135 @@ + /* Copyright 2021 jrfhoutx + * + * 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 . + */ + +#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 custom_layers { + _BASE, + _FN1, + _FN2, + _FN3, +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, +}; + +#define KC_FN1 MO(_FN1) +#define KC_FN2 MO(_FN2) +#define SPFN1 LT(_FN1, KC_SPACE) +#define BSFN2 LT(_FN2, KC_BSPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + MO(1), KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, _______, + MO(2), KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, 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_RSFT, KC_UP, + _______, KC_LCTL, KC_LALT, KC_LGUI, KC_FN1, SPFN1, BSFN2, KC_RALT, KC_FN2, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT_all( + _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, 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, _______, + _______, UG_TOGG, UG_HUEU, UG_SATU, UG_VALU, KC_VOLU, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_SCLN, _______, _______, + _______, UG_NEXT, UG_HUED, UG_SATD, UG_VALD, KC_VOLD, KC_LCBR, KC_RCBR, KC_1, KC_2, KC_3, _______, KC_UP, + _______, _______, _______, _______, _______, _______, KC_DEL, KC_0, _______, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, _______, + _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______, _______, _______, _______, KC_COLN, _______, _______, + _______, _______, _______, _______, KC_DEL, KC_PGDN, KC_END, _______, _______, _______, _______, _______, KC_UP, + _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; + +void keyboard_pre_init_user(void) { + gpio_set_pin_output(F5); // initialize F5 for LED + gpio_set_pin_output(F6); // initialize F6 for LED + gpio_set_pin_output(F7); // initialize F7 for LED + +} + +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + case _FN1: + gpio_write_pin_high(F5); + gpio_write_pin_low(F6); + gpio_write_pin_low(F7); + break; + case _FN2: + gpio_write_pin_high(F6); + gpio_write_pin_low(F5); + gpio_write_pin_low(F7); + break; + case _FN3: // replace 'XXXX' with the layer or function name + gpio_write_pin_high(F7); + gpio_write_pin_low(F5); + gpio_write_pin_low(F6); + break; + case KC_F24: + gpio_write_pin_high(F7); + gpio_write_pin_high(F5); + gpio_write_pin_high(F6); + break; + default: + gpio_write_pin_low(F5); + gpio_write_pin_low(F6); + gpio_write_pin_low(F7); + break; + } + return state; +} + + +bool spongebob_mode = false; +bool spongebob_case = false; +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (spongebob_mode) { + switch(keycode) { + case KC_A...KC_Z: + if (record->event.pressed) { + (spongebob_case ^= 1) == 0 ? tap_code16(S(keycode)) : tap_code(keycode); + return false; break; + } + } + } + switch(keycode) { + case QK_KB_0: + if (record->event.pressed) { + spongebob_mode ^= 1; + } + return false; break; + } + return true; +} + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [1] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [2] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + // Encoder 1 Encoder 2 +}; +#endif \ No newline at end of file diff --git a/keyboards/viktus/sp_mini/keymaps/vial/rules.mk b/keyboards/viktus/sp_mini/keymaps/vial/rules.mk new file mode 100644 index 0000000000..18b6cd1adc --- /dev/null +++ b/keyboards/viktus/sp_mini/keymaps/vial/rules.mk @@ -0,0 +1,20 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +LTO_ENABLE = yes +QMK_SETTINGS = no +COMBO_ENABLE = no +KEY_OVERRIDE_ENABLE = no +TAP_DANCE_ENABLE = no + +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = no +EXTRAKEY_ENABLE = no +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no +MUSIC_ENABLE = no + +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/viktus/sp_mini/keymaps/vial/vial.json b/keyboards/viktus/sp_mini/keymaps/vial/vial.json new file mode 100644 index 0000000000..46ee7667eb --- /dev/null +++ b/keyboards/viktus/sp_mini/keymaps/vial/vial.json @@ -0,0 +1,285 @@ +{ + "name": "SP_Mini", + "vendorId": "0x5644", + "productId": "0x534D", + "lighting": "qmk_rgblight", + "matrix": { + "rows": 10, + "cols": 8 + }, + "layouts": { + "labels": [ + "Split Backspace", + [ + "Bottom Row Left", + "2.75u", + "3u", + "2.25u", + "2u" + ], + [ + "Bottom Row Right", + "2.25u", + "3u", + "2.75u" + ] + ], + "keymap": [ + [ + { + "x": 0.25 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 13 + }, + "1,0\n\n\n\n\n\n\n\n\ne", + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "x": 0.75 + }, + "0,0", + { + "x": 0.25 + }, + "0,1", + "0,2", + "0,3", + "0,4", + "0,5", + "0,6", + { + "x": 0.5 + }, + "5,0", + "5,1", + "5,2", + "5,3", + "5,4", + "5,5", + "5,6", + { + "x": 0.25 + }, + "5,7" + ], + [ + { + "y": 0.25, + "x": 0.75 + }, + "1,0", + { + "x": 0.25 + }, + "1,1", + "1,2", + "1,3", + "1,4", + "1,5", + "1,6", + { + "x": 0.5 + }, + "6,0", + "6,1", + "6,2", + "6,3", + "6,4", + "6,5\n\n\n0,0", + "6,6\n\n\n0,0", + { + "x": 0.25 + }, + "6,7", + { + "x": 0.25, + "w": 2 + }, + "6,6\n\n\n0,1" + ], + [ + { + "x": 0.75 + }, + "2,0", + { + "x": 0.25, + "w": 1.25 + }, + "2,1", + "2,2", + "2,3", + "2,4", + "2,5", + "2,6", + { + "x": 0.5 + }, + "7,0", + "7,1", + "7,2", + "7,3", + "7,4", + { + "w": 1.75 + }, + "7,6", + { + "x": 0.25 + }, + "7,7" + ], + [ + { + "x": 0.75 + }, + "3,0", + { + "x": 0.25, + "w": 1.75 + }, + "3,1", + "3,2", + "3,3", + "3,4", + "3,5", + "3,6", + { + "x": 0.5 + }, + "8,1", + "8,2", + "8,3", + "8,4", + { + "w": 1.25 + }, + "8,5" + ], + [ + { + "y": -0.75, + "x": 14.75 + }, + "8,6" + ], + [ + { + "y": -0.25, + "x": 0.75 + }, + "4,0", + { + "x": 0.25, + "w": 1.25 + }, + "4,1\n\n\n1,0", + { + "w": 1.25 + }, + "4,2\n\n\n1,0", + { + "w": 1.25 + }, + "4,3\n\n\n1,0", + { + "w": 2.75 + }, + "4,5\n\n\n1,0", + { + "x": 0.5, + "w": 2.25 + }, + "9,2\n\n\n2,0", + { + "w": 1.25 + }, + "9,3\n\n\n2,0", + "9,4\n\n\n2,0" + ], + [ + { + "y": -0.75, + "x": 13.75 + }, + "9,5", + "9,6", + "9,7" + ], + [ + { + "x": 2, + "w": 1.25 + }, + "4,1\n\n\n1,1", + "4,2\n\n\n1,1", + { + "w": 1.25 + }, + "4,3\n\n\n1,1", + { + "w": 3 + }, + "4,5\n\n\n1,1", + { + "x": 0.5, + "w": 3 + }, + "9,2\n\n\n2,1", + { + "w": 1.5 + }, + "9,4\n\n\n2,1" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "4,1\n\n\n1,2", + { + "w": 1.25 + }, + "4,2\n\n\n1,2", + { + "w": 1.5 + }, + "4,3\n\n\n1,2", + { + "w": 2.25 + }, + "4,5\n\n\n1,2", + { + "x": 0.5, + "w": 2.75 + }, + "9,2\n\n\n2,2", + { + "w": 1.75 + }, + "9,4\n\n\n2,2" + ], + [ + { + "x": 2, + "w": 1.25 + }, + "4,1\n\n\n1,3", + "4,2\n\n\n1,3", + "4,3\n\n\n1,3", + { + "w": 1.25 + }, + "4,4\n\n\n1,3", + { + "w": 2 + }, + "4,5\n\n\n1,3" + ] + ] + } +} \ No newline at end of file