diff options
author | InigoGutierrez <inigogf.95@gmail.com> | 2022-06-27 16:38:28 +0200 |
---|---|---|
committer | InigoGutierrez <inigogf.95@gmail.com> | 2022-06-27 16:38:28 +0200 |
commit | 98b9909429aea0869f7a6f2f44ab386a4a3ff094 (patch) | |
tree | e1080a61bb89a75edc70818489f8044adf597c48 /keyboards/gmmk | |
parent | b610965fd6d851484025166fb255078b1c809261 (diff) | |
parent | fa3dd373b4925734d9843ae6014349069ffec353 (diff) | |
download | qmk_firmware-98b9909429aea0869f7a6f2f44ab386a4a3ff094.tar.gz qmk_firmware-98b9909429aea0869f7a6f2f44ab386a4a3ff094.zip |
Merge branch 'master' into taamas
Diffstat (limited to 'keyboards/gmmk')
130 files changed, 4482 insertions, 130 deletions
diff --git a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/config.h b/keyboards/gmmk/pro/ansi/keymaps/stickandgum/config.h deleted file mode 100644 index 2566fc6f9c..0000000000 --- a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/config.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright 2021 stickandgum - * - * 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 - -// I like NKRO.. but let's not force it. @drashna pointed out some older hardware has issues - Toggle it via keycode if you like. -// #define FORCE_NKRO - -// At the time of this, there are 41 effects! That may be a bit too many to cycle through - keeping what I believe is the best. -#ifdef RGB_MATRIX_ENABLE - -// #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR - -// Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state - #define RGB_DISABLE_WHEN_USB_SUSPENDED - - #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain - #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes - -// Soon we need to ENABLE modes by DEFAULT soon as per: https://github.com/qmk/qmk_firmware/pull/13758 Thanks @noroadsleft - // #define DISABLE_RGB_MATRIX_SOLID_COLOR // BUILT IN (MAPPED!) Static single color. - // #define DISABLE_RGB_MATRIX_ALPHAS_MODS // Accenting various keys on the keyboard. - // #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Top down rainbow! - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Left Right Rainbow (the top-down is better imho). - // #define DISABLE_RGB_MATRIX_BREATHING // Built in (MAPPED!) - // #define DISABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white) - // #define DISABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black) - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (RGB_MATRIX_CYCLE_PINWHEEL) - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // See above - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT // See above - // #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black) - #define DISABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow - // #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // BUILT IN (MAPPED!) Full Rainbow Left to Right - #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center. - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points. - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradent Chevron shapped scrolling left to right - // #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL // BUILT IN (MAPPED!) - Consider disabling this - my poor eyes. - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard - #define DISABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboards - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON // Similar to above. - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enough of the spinning rainbows - we get it! :-) - #define DISABLE_RGB_MATRIX_RAINDROPS // Jellybeans are better. - // #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation - better than above. - #define DISABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back - #define DISABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left - #define DISABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right - // #define DISABLE_RGB_MATRIX_TYPING_HEATMAP // Hot keys! - // #define DISABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix! - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black: wide slightly better imo - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE // Key hits shown in current hue - all other keys shifted hue - // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (black otherwise) - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but a bit too intense imo. - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single color fade. - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-keys) - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades - #define DISABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black. - #define DISABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black. - #define DISABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (Using solid_reactive_wide instead). - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black. (Using solid_reactive_wide instead). -#endif diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 693b86539b..aba69c8872 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -53,7 +53,6 @@ #define LOCKING_RESYNC_ENABLE /* SPI Config for LED Driver */ -#define SPI_DRIVER SPID1 #define SPI_SCK_PIN A5 #define SPI_MOSI_PIN A6 #define SPI_MISO_PIN A7 @@ -65,8 +64,54 @@ #define DRIVER_COUNT 2 -/* 1000Hz USB polling - it's the default on stock firmware */ -#define USB_POLLING_INTERVAL_MS 1 +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +#define ENABLE_RGB_MATRIX_ALPHAS_MODS +#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_BAND_SAT +#define ENABLE_RGB_MATRIX_BAND_VAL +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_HUE_PENDULUM +#define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +#define ENABLE_RGB_MATRIX_PIXEL_FLOW +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH /* Send up to 4 key press events per scan */ #define QMK_KEYS_PER_SCAN 4 diff --git a/keyboards/gmmk/pro/halconf.h b/keyboards/gmmk/pro/halconf.h deleted file mode 100644 index 23ecb202a1..0000000000 --- a/keyboards/gmmk/pro/halconf.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#define HAL_USE_SPI TRUE -#define SPI_USE_WAIT TRUE -#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD - -#include_next <halconf.h> diff --git a/keyboards/gmmk/pro/mcuconf.h b/keyboards/gmmk/pro/mcuconf.h deleted file mode 100644 index bb1c0acde2..0000000000 --- a/keyboards/gmmk/pro/mcuconf.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include_next <mcuconf.h> - -#undef STM32_SPI_USE_SPI1 -#define STM32_SPI_USE_SPI1 TRUE diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index 816d089a58..6aed1d6e18 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -14,3 +14,17 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "pro.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + return false; +} +#endif diff --git a/keyboards/gmmk/pro/pro.h b/keyboards/gmmk/pro/pro.h index 38dd4d78b9..0e53ffe225 100644 --- a/keyboards/gmmk/pro/pro.h +++ b/keyboards/gmmk/pro/pro.h @@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "quantum.h" -#if defined(KEYBOARD_gmmk_pro_ansi) -# include "ansi.h" -#elif defined(KEYBOARD_gmmk_pro_iso) -# include "iso.h" +#if defined(KEYBOARD_gmmk_pro_rev1_ansi) +# include "rev1/ansi/ansi.h" +#elif defined(KEYBOARD_gmmk_pro_rev1_iso) +# include "rev1/iso/iso.h" #endif // GMMK Pro revisions diff --git a/keyboards/gmmk/pro/ansi/ansi.c b/keyboards/gmmk/pro/rev1/ansi/ansi.c index 1df3319fd2..1df3319fd2 100644 --- a/keyboards/gmmk/pro/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/ansi.c diff --git a/keyboards/gmmk/pro/ansi/ansi.h b/keyboards/gmmk/pro/rev1/ansi/ansi.h index ab08d66592..ab08d66592 100644 --- a/keyboards/gmmk/pro/ansi/ansi.h +++ b/keyboards/gmmk/pro/rev1/ansi/ansi.h diff --git a/keyboards/gmmk/pro/ansi/config.h b/keyboards/gmmk/pro/rev1/ansi/config.h index 7c68375b2f..7c68375b2f 100644 --- a/keyboards/gmmk/pro/ansi/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/config.h diff --git a/keyboards/gmmk/pro/ansi/info.json b/keyboards/gmmk/pro/rev1/ansi/info.json index c3e76391d1..c3e76391d1 100644 --- a/keyboards/gmmk/pro/ansi/info.json +++ b/keyboards/gmmk/pro/rev1/ansi/info.json diff --git a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/alexmarmon/keymap.c index 99504de956..99504de956 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/alexmarmon/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/alexmarmon/readme.md index 36ad42b1af..36ad42b1af 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/alexmarmon/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h index 1438d317fb..1438d317fb 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c new file mode 100644 index 0000000000..e521425f26 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c @@ -0,0 +1,348 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2022 Andre Brait <andrebrait@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +enum layers { + WIN_BASE = 0, + WIN_FN, + MAC_BASE, + MAC_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define TO_WINB TO(WIN_BASE) +#define TO_MACB TO(MAC_BASE) +#define MO_WINF MO(WIN_FN) +#define MO_MACF MO(MAC_FN) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Del Rotary(Play/Pause) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc 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 +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + // + // RGB and function keys are inspired by the Keychron Q1 layouts instead of using the default keys. + // + // KC_PAUS/KC_BRMU and KC_SCRL/KC_BRMD are aliases for the same keys, but their names reflect better the function in each layout. + [WIN_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + 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_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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO_WINF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [WIN_FN] = LAYOUT( + _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, KC_PAUS, + TO_MACB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCRL, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX + ), + + [MAC_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + 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_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_END, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO_MACF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [MAC_FN] = LAYOUT( + _______, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, KC_BRMU, + TO_WINB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRMD, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX + ) +}; +// clang-format on + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; +} +#endif // ENCODER_ENABLE + +#ifdef RGB_MATRIX_ENABLE + +#define RGB_CONFIRMATION_BLINKING_TIME 2000 // 2 seconds + +/* Renaming those to make the purpose on this keymap clearer */ +#define LED_FLAG_CAPS LED_FLAG_NONE +#define LED_FLAG_EFFECTS LED_FLAG_INDICATOR + +static void set_rgb_caps_leds(void); + +static uint16_t effect_started_time = 0; +static uint8_t r_effect = 0x0, g_effect = 0x0, b_effect = 0x0; +static void start_effects(void); + +/* The higher this is, the slower the blinking will be */ +#ifndef TIME_SELECTED_BIT + #define TIME_SELECTED_BIT 8 +#endif +#if TIME_SELECTED_BIT < 0 || TIME_SELECTED_BIT >= 16 + #error "TIME_SELECTED_BIT must be a positive integer smaller than 16" +#endif +#define effect_red() r_effect = 0xFF, g_effect = 0x0, b_effect = 0x0 +#define effect_green() r_effect = 0x0, g_effect = 0xFF, b_effect = 0x0 +#define effect_blue() r_effect = 0x0, g_effect = 0x0, b_effect = 0xFF +#define effect_white() r_effect = 0xFF, g_effect = 0xFF, b_effect = 0xFF + +static uint8_t previous_effect_layer = 255; + +layer_state_t layer_state_set_user(layer_state_t state) { + uint8_t current_layer = get_highest_layer(state); + switch (current_layer) { + case WIN_BASE: + if (previous_effect_layer != current_layer) { + previous_effect_layer = current_layer; + effect_blue(); + start_effects(); + } + break; + case MAC_BASE: + if (previous_effect_layer != current_layer) { + previous_effect_layer = current_layer; + effect_white(); + start_effects(); + } + break; + } + return state; +} + +bool led_update_user(led_t led_state) { + if (led_state.caps_lock) { + if (!rgb_matrix_is_enabled()) { + /* Turn ON the RGB Matrix for CAPS LOCK */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + rgb_matrix_enable(); + } + } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + /* RGB Matrix was only ON because of CAPS LOCK. Turn it OFF. */ + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_disable(); + } + return true; +} + +#endif // RGB_MATRIX_ENABLE + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + #ifdef RGB_MATRIX_ENABLE + #ifdef NKRO_ENABLE + case NK_TOGG: + if (record->event.pressed) { + if (keymap_config.nkro) { + /* Turning NKRO OFF */ + effect_red(); + } else { + /* Turning NKRO ON */ + effect_green(); + } + start_effects(); + } + break; + #endif // NKRO_ENABLE + case RGB_MOD: + case RGB_RMOD: + case RGB_HUI: + case RGB_HUD: + case RGB_SAI: + case RGB_SAD: + case RGB_VAI: + case RGB_VAD: + case RGB_SPI: + case RGB_SPD: + if (record->event.pressed) { + if (rgb_matrix_get_flags() != LED_FLAG_ALL) { + /* Ignore changes to RGB settings while only it's supposed to be OFF */ + return false; // Skip all further processing of this key + } + } + break; + case RGB_TOG: + if (record->event.pressed) { + if (rgb_matrix_is_enabled()) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_EFFECTS: + case LED_FLAG_CAPS: + /* Turned ON because of EFFECTS or CAPS, is actually OFF */ + /* Change to LED_FLAG_ALL to signal it's really ON */ + rgb_matrix_set_flags(LED_FLAG_ALL); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + break; + case LED_FLAG_ALL: + /* Is actually ON */ + if (effect_started_time > 0) { + /* Signal EFFECTS */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + } else + if (host_keyboard_led_state().caps_lock) { + /* Signal CAPS */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + } + break; + } + } + } + break; + #endif // RGB_MATRIX_ENABLE + } + return true; +} + +#ifdef RGB_MATRIX_ENABLE +void rgb_matrix_indicators_user() { + if (effect_started_time > 0) { + /* Render blinking EFFECTS */ + const uint16_t deltaTime = sync_timer_elapsed(effect_started_time); + if (deltaTime <= RGB_CONFIRMATION_BLINKING_TIME) { + const uint8_t led_state = ((~deltaTime) >> TIME_SELECTED_BIT) & 0x01; + const uint8_t val_r = led_state * r_effect; + const uint8_t val_g = led_state * g_effect; + const uint8_t val_b = led_state * b_effect; + rgb_matrix_set_color_all(val_r, val_g, val_b); + if (host_keyboard_led_state().caps_lock) { + set_rgb_caps_leds(); + } + return; + } else { + /* EFFECTS duration is finished */ + effect_started_time = 0; + if (rgb_matrix_get_flags() == LED_FLAG_EFFECTS) { + /* It was turned ON because of EFFECTS */ + if (host_keyboard_led_state().caps_lock) { + /* CAPS is still ON. Demote to CAPS */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + } else { + /* There is nothing else keeping RGB enabled. Reset flags and turn if off. */ + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_disable_noeeprom(); + } + } + } + } + if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + rgb_matrix_set_color_all(0x0, 0x0, 0x0); + } + if (host_keyboard_led_state().caps_lock) { + set_rgb_caps_leds(); + } +} + +static void start_effects() { + effect_started_time = sync_timer_read(); + if (!rgb_matrix_is_enabled()) { + /* Turn it ON, signal the cause (EFFECTS) */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + rgb_matrix_enable_noeeprom(); + } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + /* It's already ON, promote the cause from CAPS to EFFECTS */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + } +} + +// RGB led number layout, function of the key + +// 67, led 01 0, ESC 6, F1 12, F2 18, F3 23, F4 28, F5 34, F6 39, F7 44, F8 50, F9 56, F10 61, F11 66, F12 69, Prt Rotary(Mute) 68, led 12 +// 70, led 02 1, ~ 7, 1 13, 2 19, 3 24, 4 29, 5 35, 6 40, 7 45, 8 51, 9 57, 0 62, -_ 78, (=+) 85, BackSpc 72, Home 71, led 13 +// 73, led 03 2, Tab 8, Q 14, W 20. E 25, R 30, T 36, Y 41, U 46, I 52, O 58, P 63, [{ 89, ]} 93, \| 75, PgUp 74, led 14 +// 76, led 04 3, Caps 9, A 15, S 21, D 26, F 31, G 37, H 42, J 47, K 53, L 59, ;: 64, '" 96, Enter 86, PgDn 77, led 15 +// 80, led 05 4, Sh_L 10, Z 16, X 22, C 27, V 32, B 38, N 43, M 48, ,< 54, .< 60, /? 90, Sh_R 94, Up 82, End 81, led 16 +// 83, led 06 5, Ct_L 11,Win_L 17, Alt_L 33, SPACE 49, Alt_R 55, FN 65, Ct_R 95, Left 97, Down 79, Right 84, led 17 +// 87, led 07 88, led 18 +// 91, led 08 92, led 19 + +static void set_rgb_caps_leds() { + rgb_matrix_set_color(67, 0xFF, 0x0, 0x0); // Left side LED 1 + rgb_matrix_set_color(68, 0xFF, 0x0, 0x0); // Right side LED 1 + rgb_matrix_set_color(70, 0xFF, 0x0, 0x0); // Left side LED 2 + rgb_matrix_set_color(71, 0xFF, 0x0, 0x0); // Right side LED 2 + rgb_matrix_set_color(73, 0xFF, 0x0, 0x0); // Left side LED 3 + rgb_matrix_set_color(74, 0xFF, 0x0, 0x0); // Right side LED 3 + rgb_matrix_set_color(76, 0xFF, 0x0, 0x0); // Left side LED 4 + rgb_matrix_set_color(77, 0xFF, 0x0, 0x0); // Right side LED 4 + rgb_matrix_set_color(80, 0xFF, 0x0, 0x0); // Left side LED 5 + rgb_matrix_set_color(81, 0xFF, 0x0, 0x0); // Right side LED 5 + rgb_matrix_set_color(83, 0xFF, 0x0, 0x0); // Left side LED 6 + rgb_matrix_set_color(84, 0xFF, 0x0, 0x0); // Right side LED 6 + rgb_matrix_set_color(87, 0xFF, 0x0, 0x0); // Left side LED 7 + rgb_matrix_set_color(88, 0xFF, 0x0, 0x0); // Right side LED 7 + rgb_matrix_set_color(91, 0xFF, 0x0, 0x0); // Left side LED 8 + rgb_matrix_set_color(92, 0xFF, 0x0, 0x0); // Right side LED 8 + rgb_matrix_set_color(3, 0xFF, 0x0, 0x0); // CAPS LED +} + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md index e7f9978cee..99d0a36721 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md @@ -5,6 +5,9 @@ It basically reflects my needs for both Delete and Insert being readily availabl The differences are as follows: +- Dedicated MacOS and Windows/Linux layers + - Switching between them by pressing Fn + CAPS LOCK +- Disabled Mouse Keys (to fix issues with KVM switches and also because they're not used here anyway) - Short DEBOUNCE time (5 ms) - Per-key debounce algorithm (sym_defer_pk) - RGB turns off after 20 minutes of inactivity diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk new file mode 100644 index 0000000000..057e9a9541 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk @@ -0,0 +1,6 @@ +# Enable additional features. + +DEBOUNCE_TYPE = sym_defer_pk + +# Disabling MouseKey because it breaks my KVM switch +MOUSEKEY_ENABLE = no diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h new file mode 100644 index 0000000000..aee1ba39d5 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h @@ -0,0 +1,24 @@ +/* Copyright 2021 Andrew Charnley + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_LIGHT +#define RGBLIGHT_DEFAULT_SAT 0 +#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + + diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/keymap.c new file mode 100644 index 0000000000..d044008a23 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/keymap.c @@ -0,0 +1,87 @@ +/* Copyright 2021 Andrew Charnley + * + * 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 + +// Windows key changed to second FN key. Use KC_LGUI to revert. + +enum userspace_layers { + QWERTY, + FNLAYER +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + + [QWERTY] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + 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_END, + KC_LCTL, MO(FNLAYER), KC_LALT, KC_SPC, KC_RALT, MO(FNLAYER),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [FNLAYER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MEDIA_PLAY_PAUSE, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET , _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, + _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______ + ), +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if(IS_LAYER_ON(FNLAYER)) { + if (clockwise) { + tap_code(KC_MEDIA_NEXT_TRACK); + } else { + tap_code(KC_MEDIA_PREV_TRACK); + } + } else { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return false; +} + +static uint8_t val; + +void keyboard_post_init_user(void) { + + val = rgb_matrix_get_val(); +} + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + + if (host_keyboard_led_state().caps_lock) { + rgb_matrix_set_color_all(val,0,0); + } else { + rgb_matrix_set_color_all(val, val, val); + val = rgb_matrix_get_val(); + } +} diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/readme.md new file mode 100644 index 0000000000..e064edd83a --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/readme.md @@ -0,0 +1,18 @@ +# Description +A keymap designed to be functional for development purposes - no flashing lights or gimmicks. PRTSC and DEL key in the top right corner. +Solid backlight that changes red if CAPS is on and reverts back afterwards. Brightness retained in both cases. +Backlight is disabled on suspend and restored upon wake-up. +The 'Windows' key is a second FN key. This makes it more natural to use the encoder wheel (good luck trying to do it with one hand). + +Compile using `qmk compile -kb gmmk/pro/ansi -km andrewcharnley` + +# Encoder +FN + Encoder scroll = media next/prev +FN + Encoder press = media pause +default encoder behavior = volume up/down + +# Function Layer +FN + Up = increase brightness +FN + Down = decrease brightness +FN + Backslash = bootloader + diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/batin/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/batin/keymap.c new file mode 100644 index 0000000000..be88ea82f8 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/batin/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +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 + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_BRID, KC_BRIU, RGB_VAD, RGB_VAI, RGB_RMOD, RGB_MOD, KC_F9, KC_MPRV, KC_MPLY, KC_MNXT, KC_PSCR, KC_MUTE, + 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_END, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F10, KC_F12, _______, KC_MUTE, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, RGB_MOD, + _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), +}; +// clang-format on + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return false; +} +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/benschaeff/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/benschaeff/keymap.c index 834727827c..5f3e3f5fd8 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/benschaeff/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/benschaeff/keymap.c @@ -20,7 +20,7 @@ enum userspace_layers { }; //custom keycodes -#define MODS_ALT_MASK (MOD_BIT(KC_LALT)) // Make ALT layer for encoder use +#define MODS_ALT_MASK (MOD_BIT(KC_LALT)) // Make ALT layer for encoder use #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)) // Make CTRL layer for encoder use #define SWAP_L SGUI(KC_LEFT) // Swap application to left display #define SWAP_R SGUI(KC_RGHT) // Swap application to right display diff --git a/keyboards/gmmk/pro/ansi/keymaps/benschaeff/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/benschaeff/readme.md index 8162002892..8162002892 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/benschaeff/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/benschaeff/readme.md diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/config.h new file mode 100644 index 0000000000..16ac4f2407 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/config.h @@ -0,0 +1,72 @@ +/* Copyright 2021 Choi Byungyoon <byungyoonc@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define RGB_MATRIX_KEYPRESSES + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +// #define ENABLE_RGB_MATRIX_BREATHING +#undef ENABLE_RGB_MATRIX_BAND_SAT +#undef ENABLE_RGB_MATRIX_BAND_VAL +#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +// #define ENABLE_RGB_MATRIX_CYCLE_ALL +// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +// #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#undef ENABLE_RGB_MATRIX_DUAL_BEACON +#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON +#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +// #define ENABLE_RGB_MATRIX_RAINDROPS +// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#undef ENABLE_RGB_MATRIX_HUE_BREATHING +#undef ENABLE_RGB_MATRIX_HUE_PENDULUM +#undef ENABLE_RGB_MATRIX_HUE_WAVE +// #define ENABLE_RGB_MATRIX_PIXEL_RAIN +#undef ENABLE_RGB_MATRIX_PIXEL_FLOW +#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP +// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#undef ENABLE_RGB_MATRIX_SPLASH +// #define ENABLE_RGB_MATRIX_MULTISPLASH +#undef ENABLE_RGB_MATRIX_SOLID_SPLASH +// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +#undef DEBOUNCE +/* High debounce time is required to avoid key chattering because of the debouncing algorithm sym_eager_pk */ +#define DEBOUNCE 40 diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/keymap.c new file mode 100644 index 0000000000..1ad8417de2 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/keymap.c @@ -0,0 +1,129 @@ +/* Copyright 2021 Choi Byungyoon <byungyoonc@gmail.com> + +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 +#include "byungyoonc.h" + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mic Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc TaskMgr +// Tab Q W E R T Y U I O P [ ] \ Del +// Caps A S D F G H J K L ; " Enter Home +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + [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_MMUT, + 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_TASK, + 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_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_HOME, + 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_BRID, KC_BRIU, KC_CALC, KC_MSEL, RGB_VAD, RGB_VAI, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, + _______, KC_SEC1, KC_SEC2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEBUG, _______, + _______, _______, _______, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, _______, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_HUI, RGB_HUD, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, GUI_TOG, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + +}; +// clang-format on + +bool process_record_user_kb(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + rgblight_increase_hue(); + } + return true; +} + +#if defined(ENCODER_ENABLE) +bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mod_state = get_mods(); + if (mod_state & MOD_MASK_CTRL) { + unregister_mods(MOD_MASK_CTRL); + if (clockwise) { + tap_code16(LCTL(KC_RGHT)); + } else { + tap_code16(LCTL(KC_LEFT)); + } + set_mods(mod_state); + } else { + if (clockwise) { + tap_code16(KC_VOLU); + } else { + tap_code16(KC_VOLD); + } + } + return true; +} +#endif // ENCODER_ENABLE + +static void set_rgb_caps_leds(void); + +static void set_rgb_caps_leds() { + rgb_matrix_set_color(73, 0xFF, 0x77, 0x77); // Left side LED 3 + rgb_matrix_set_color(74, 0xFF, 0x77, 0x77); // Right side LED 3 + rgb_matrix_set_color(76, 0xFF, 0x77, 0x77); // Left side LED 4 + rgb_matrix_set_color(77, 0xFF, 0x77, 0x77); // Right side LED 4 + rgb_matrix_set_color(80, 0xFF, 0x77, 0x77); // Left side LED 5 + rgb_matrix_set_color(81, 0xFF, 0x77, 0x77); // Right side LED 5 + rgb_matrix_set_color(83, 0xFF, 0x77, 0x77); // Left side LED 6 + rgb_matrix_set_color(84, 0xFF, 0x77, 0x77); // Right side LED 6 + rgb_matrix_set_color(3, 0xFF, 0x77, 0x77); // CAPS LED +} + +static void set_rgb_nlck_notset_leds(void); + +static void set_rgb_wlck_leds(void); + +static void set_rgb_nlck_notset_leds() { + rgb_matrix_set_color(67, 0x77, 0x77, 0xFF); // Left side LED 1 + rgb_matrix_set_color(68, 0x77, 0x77, 0xFF); // Right side LED 1 + rgb_matrix_set_color(70, 0x77, 0x77, 0xFF); // Left side LED 2 + rgb_matrix_set_color(71, 0x77, 0x77, 0xFF); // Right side LED 2 +} + +static void set_rgb_wlck_leds() { + rgb_matrix_set_color(87, 0x77, 0xFF, 0x77); // Left side LED 7 + rgb_matrix_set_color(88, 0x77, 0xFF, 0x77); // Right side LED 7 + rgb_matrix_set_color(91, 0x77, 0xFF, 0x77); // Left side LED 8 + rgb_matrix_set_color(92, 0x77, 0xFF, 0x77); // Right side LED 8 +} + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + set_rgb_caps_leds(); + } + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { + set_rgb_nlck_notset_leds(); + } + if (keymap_config.no_gui) { + set_rgb_wlck_leds(); + } +} + +void matrix_output_unselect_delay(uint8_t line, bool key_pressed) { + for (int i = 0; i < 20; i++) { + wait_cpuclock(STM32_SYSCLK / 1000000L); + } +} diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/readme.md new file mode 100644 index 0000000000..d340bf86ed --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/readme.md @@ -0,0 +1,41 @@ +byungyoonc's GMMK Pro Layout +============================ + +## Keymap + +### Base Layer +![GMMK Pro Base Layer Layout Image](https://i.imgur.com/VvEL08Q.png) + +Made a bit of a change on the leftmost side of the keyboard to set Home and End closer to the arrow keys. Also uses a shortcut for Windows Task Manager, Windows PowerToys microphone mute. + +### Fn Layer +![GMMK Pro Fn Layer Layout Image](https://i.imgur.com/uQy2gSh.png) + +F-row media functions roughly matches the Keychron keyboard's layout. + +Added Debug key for faster debugging iteration. + +Supports Secrets input by Fn + Numbers. + +The rest are pretty self-explanatory RGB controls, a GUI toggle and an NKRO toggle. + +## Rotary Encoder Rotation +Volume control when no mods, Ctrl+Left/Right when Ctrl is pressed while rotating the encoder. + +## RGB Indicators +Uses side strap RGB as the RGB indicators. +- Top third lights on when the Num Lock is turned off. +- Middle third lights on when the Caps Lock is turned on. +- Bottom third lights on when the GUI is disabled (via `GUI_TOG`). + +## Debounce +Uses the `DEBOUNCE_TYPE` of `sym_eager_pk` for the shortest response time possible, and `DEBOUNCE` time of `40` in order to eliminate any key chattering. + +## NKRO +N-key rollover is turned on by default. + +## RGB Matrix +Keypresses effects are enabled. +Disabled default several RGB effects. +Added custom RGB matrix effect `saturated_solid_multisplash`. +Every keypress increases the RGB hue value. diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rgb_matrix_user.inc b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rgb_matrix_user.inc new file mode 100644 index 0000000000..0d61e19f4c --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rgb_matrix_user.inc @@ -0,0 +1 @@ +#include "saturated_solid_multisplash.h" diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rules.mk new file mode 100644 index 0000000000..08f832c51b --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/byungyoonc/rules.mk @@ -0,0 +1,2 @@ +DEBOUNCE_TYPE = sym_eager_pk +RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c new file mode 100644 index 0000000000..2361ab5660 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c @@ -0,0 +1,154 @@ +/* Copyright 2021 Cedrik Lussier @cedrikl +.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin + * + * 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 +#include "rgb_matrix_map.h" +#include "cedrikl.h" + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [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_DEL, KC_MUTE, + 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_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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + EEP_RST, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_MUTE, + KC_NLCK, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, KC_BSPC, 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_PSLS, KC_PAST, KC_BSLS, KC_PGUP, + KC_CAPS, RGB_VAD, RGB_TOG, RGB_VAI, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_PENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_PDOT, KC_SLSH, KC_RSFT, KC_UP, KC_INS, + KC_LCTL, KC_RGUI, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; +// clang-format on + +#ifdef ENCODER_ENABLE + bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; + } +#endif // ENCODER_ENABLE + + +#ifdef RGB_MATRIX_ENABLE +//void set_layer_rgb(uint8_t led_min, uint8_t led_max, int layer) { +// const ledmap *l = &(ledmaps[layer]); +// +// +// +// for (int i = 0; i < DRIVER_LED_TOTAL; i++) { +// HSV hsv = { +// .h = (*l)[i][0], +// .s = (*l)[i][1], +// .v = val, +// }; +// +// if (hsv.h || hsv.s) { +// RGB rgb = hsv_to_rgb(hsv); +// RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); +// } +// } +//} + + // These shorthands are used below to set led colors on each matrix cycle + void loop_colorset(const uint8_t *indices, int array_size, const HSV target_color) { + HSV work_color = target_color; + work_color.v = rgb_matrix_get_val(); + + RGB final_color = hsv_to_rgb(work_color); + + for (int i = 0; i < array_size; i++) { + rgb_matrix_set_color(indices[i], final_color.r, final_color.g, final_color.b); // Set color A here + } + } + + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + loop_colorset(LED_REGION_A, (sizeof(LED_REGION_A) / sizeof(LED_REGION_A[0])), hsv_cl_blue); + loop_colorset(LED_REGION_B, (sizeof(LED_REGION_B) / sizeof(LED_REGION_B[0])), hsv_cl_purple); + loop_colorset(LED_REGION_L_SIDE, (sizeof(LED_REGION_L_SIDE) / sizeof(LED_REGION_L_SIDE[0])), hsv_cl_purple); + loop_colorset(LED_REGION_R_SIDE, (sizeof(LED_REGION_R_SIDE) / sizeof(LED_REGION_R_SIDE[0])), hsv_cl_purple); + + switch(get_highest_layer(layer_state)){ // special handling per layer + case 1: //layer 1 + //rgb_matrix_set_color_all(RGB_AZURE); + loop_colorset(LED_REGION_NUMPAD, (sizeof(LED_REGION_NUMPAD) / sizeof(LED_REGION_NUMPAD[0])), hsv_cl_numpad); + loop_colorset(LED_REGION_OTHER, (sizeof(LED_REGION_OTHER) / sizeof(LED_REGION_OTHER[0])), hsv_cl_mods); + break; + default: //layer 0 + // + break; + break; + } + + HSV bad_hsv = hsv_cl_bad; + bad_hsv.v = rgb_matrix_get_val(); + RGB bad_rgb = hsv_to_rgb(bad_hsv); + led_t led_state = host_keyboard_led_state(); + + if (!led_state.num_lock) { // on if NUM lock is OFF + rgb_matrix_set_color(LED_R1, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R2, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R3, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R4, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R5, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R6, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R7, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_R8, bad_rgb.r, bad_rgb.g, bad_rgb.b); + } + if (led_state.caps_lock) { + rgb_matrix_set_color(LED_L1, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L2, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L3, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L4, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L5, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L6, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L7, bad_rgb.r, bad_rgb.g, bad_rgb.b); + rgb_matrix_set_color(LED_L8, bad_rgb.r, bad_rgb.g, bad_rgb.b); + loop_colorset(LED_REGION_CAPS, (sizeof(LED_REGION_CAPS) / sizeof(LED_REGION_CAPS[0])), hsv_cl_bad); + } + } +#endif diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rgb_matrix_map.h new file mode 100644 index 0000000000..484f64b74c --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rgb_matrix_map.h @@ -0,0 +1,185 @@ +/* Copyright 2021 Cedrik Lussier @cedrikl +.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin + * + * 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/>. + */ + +#ifdef RGB_MATRIX_ENABLE + + // Custom RGB Colours + const HSV hsv_cl_blue = {150, 255, 255}; + const HSV hsv_cl_purple = {188, 255, 255}; + const HSV hsv_cl_numpad = {85, 255, 255}; + const HSV hsv_cl_mods = {42, 255, 255}; + const HSV hsv_cl_bad = {0, 255, 255}; + + // RGB LED locations + enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LED_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_DEL, // 69, Prt, k97 -- remapped to DEL + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_HOME, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + +const uint8_t LED_REGION_L_SIDE[] = {LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7,LED_L8}; +const uint8_t LED_REGION_R_SIDE[] = {LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7,LED_R8}; + + //const uint8_t LED_MATRIX[] = { + // LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL, + // LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME, + // LED_TAB, LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP, + // LED_CAPS, LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN, + // LED_LSFT, LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT, LED_SLSH, LED_RSFT, LED_UP, LED_END, + // LED_LCTL, LED_LWIN, LED_LALT, LED_SPC, LED_RALT, LED_FN, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT + //}; + + const uint8_t LED_REGION_A[] = { + LED_ESC, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL, + LED_GRV, LED_1, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME, + LED_TAB, LED_Q, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP, + LED_CAPS, LED_A, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN, + LED_LSFT, LED_Z, LED_SLSH, LED_RSFT, LED_UP, LED_END, + LED_LCTL, LED_LWIN, LED_LALT, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT + }; + const uint8_t LED_REGION_B[] = { + LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, + LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, + LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, + LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, + LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT, + LED_SPC, LED_RALT, LED_FN + }; + + const uint8_t LED_REGION_NUMPAD[] = { + + LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, + LED_LBRC, LED_RBRC, + LED_ENT, + LED_DOT + + }; + + const uint8_t LED_REGION_OTHER[] = { + LED_ESC, LED_DEL, + LED_HOME, + + LED_A, LED_S, LED_D, + LED_END, + LED_LWIN + }; + + const uint8_t LED_REGION_CAPS[] = { + + LED_GRV, LED_1, + LED_TAB, LED_Q, + LED_CAPS, LED_A, + LED_LSFT, + LED_LCTL + }; + +#endif diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rules.mk new file mode 100644 index 0000000000..4b7ed8bf0b --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rules.mk @@ -0,0 +1,2 @@ +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes diff --git a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/config.h index 6b06448f71..6b06448f71 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/keymap.c index 41278868db..41278868db 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/readme.md index e448521572..e448521572 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/rules.mk index 1dd6809223..1dd6809223 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/coryginsberg/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/coryginsberg/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/default/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/default/keymap.c index 65ccaf88f2..91f29f8d62 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/default/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI // if that's your preference. @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI @@ -67,6 +67,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } else { tap_code(KC_VOLD); } - return true; + return false; } #endif // ENCODER_ENABLE diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/config.h new file mode 100644 index 0000000000..9ba8a7b1b7 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/config.h @@ -0,0 +1,6 @@ +// Copyright 2021 Jasper Chan (@Gigahawk) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR +#define RGB_MATRIX_STARTUP_SPD 0 diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/keymap.c new file mode 100644 index 0000000000..8eedeb6e00 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gigahawk/keymap.c @@ -0,0 +1,74 @@ +// Copyright 2021 Jasper Chan (@Gigahawk) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +enum layers { + _BASE, + _GAME, + _TRAN, +}; + +#define _BASE_COLOR_RGB 156, 123, 85 +#define _GAME_COLOR_RGB 147, 21, 21 +#define _TRAN_COLOR_RGB 45, 89, 24 +#define _CAPS_COLOR_RGB 146, 140, 16 + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + 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_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_ESC, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_TRAN] = LAYOUT( + KC_CAPS, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + TG(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_MPLY, _______, _______, _______, KC_MPRV, _______, KC_MNXT + ), + +}; +// clang-format on + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; +} + +void rgb_matrix_indicators_user(void) { + if (IS_LAYER_ON(_TRAN)) { + rgb_matrix_set_color_all(_TRAN_COLOR_RGB); + } else if (IS_LAYER_ON(_GAME)) { + rgb_matrix_set_color_all(_GAME_COLOR_RGB); + } else if (IS_LAYER_ON(_BASE)) { + rgb_matrix_set_color_all(_BASE_COLOR_RGB); + } + + if (host_keyboard_led_state().caps_lock) { + for (uint8_t i = 0; i < DRIVER_LED_TOTAL; ++i) { + if (HAS_ANY_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { + rgb_matrix_set_color(i, _CAPS_COLOR_RGB); + } + } + } +} diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.c new file mode 100644 index 0000000000..d2f7b6ee7f --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.c @@ -0,0 +1,150 @@ +// Copyright 2021-2022 Google LLC +// +// 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 +// +// https://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. +// +// +// For full documentation, see +// https://getreuer.info/posts/keyboards/caps-word + +#include "caps_word.h" + +static bool caps_word_active = false; + +#if CAPS_WORD_IDLE_TIMEOUT > 0 +#if CAPS_WORD_IDLE_TIMEOUT < 100 || CAPS_WORD_IDLE_TIMEOUT > 30000 +// Constrain timeout to a sensible range. With the 16-bit timer, the longest +// representable timeout is 32768 ms, rounded here to 30000 ms = half a minute. +#error "caps_word: CAPS_WORD_IDLE_TIMEOUT must be between 100 and 30000 ms" +#endif + +static uint16_t idle_timer = 0; + +void caps_word_task(void) { + if (caps_word_active && timer_expired(timer_read(), idle_timer)) { + caps_word_set(false); + } +} +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + +bool process_caps_word(uint16_t keycode, keyrecord_t* record) { +#ifndef NO_ACTION_ONESHOT + const uint8_t mods = get_mods() | get_oneshot_mods(); +#else + const uint8_t mods = get_mods(); +#endif // NO_ACTION_ONESHOT + + if (!caps_word_active) { + // Pressing both shift keys at the same time enables caps word. + if ((mods & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) { + caps_word_set(true); // Activate Caps Word. + return false; + } + return true; + } else { +#if CAPS_WORD_IDLE_TIMEOUT > 0 + idle_timer = record->event.time + CAPS_WORD_IDLE_TIMEOUT; +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + } + + if (!record->event.pressed) { return true; } + + if (!(mods & ~MOD_MASK_SHIFT)) { + switch (keycode) { + // Ignore MO, TO, TG, TT, and OSL layer switch keys. + case QK_MOMENTARY ... QK_MOMENTARY_MAX: + case QK_TO ... QK_TO_MAX: + case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX: + case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: + case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX: + return true; + +#ifndef NO_ACTION_TAPPING + case QK_MOD_TAP ... QK_MOD_TAP_MAX: + if (record->tap.count == 0) { + // Deactivate if a mod becomes active through holding a mod-tap key. + caps_word_set(false); + return true; + } + keycode &= 0xff; + break; + +#ifndef NO_ACTION_LAYER + case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: +#endif // NO_ACTION_LAYER + if (record->tap.count == 0) { return true; } + keycode &= 0xff; + break; +#endif // NO_ACTION_TAPPING + +#ifdef SWAP_HANDS_ENABLE + case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX: + if (keycode > 0x56F0 || record->tap.count == 0) { return true; } + keycode &= 0xff; + break; +#endif // SWAP_HANDS_ENABLE + } + + if (caps_word_press_user(keycode)) { + return true; + } + } + + caps_word_set(false); // Deactivate Caps Word. + return true; +} + +void caps_word_set(bool active) { + if (active != caps_word_active) { + if (active) { + clear_mods(); +#ifndef NO_ACTION_ONESHOT + clear_oneshot_mods(); +#endif // NO_ACTION_ONESHOT +#if CAPS_WORD_IDLE_TIMEOUT > 0 + idle_timer = timer_read() + CAPS_WORD_IDLE_TIMEOUT; +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + } else if ((get_weak_mods() & MOD_BIT(KC_LSFT)) != 0) { + // If the weak shift mod is still on, turn it off and send an update to + // the host computer. + del_weak_mods(MOD_BIT(KC_LSFT)); + send_keyboard_report(); + } + + caps_word_active = active; + caps_word_set_user(active); + } +} + +bool caps_word_get(void) { return caps_word_active; } + +__attribute__((weak)) void caps_word_set_user(bool active) {} + +__attribute__((weak)) bool caps_word_press_user(uint16_t keycode) { + switch (keycode) { + // Keycodes that continue Caps Word, with shift applied. + case KC_A ... KC_Z: + add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. + return true; + + // Keycodes that continue Caps Word, without shifting. + case KC_1 ... KC_0: + case KC_BSPC: + case KC_MINS: + case KC_UNDS: + return true; + + default: + return false; // Deactivate Caps Word. + } +} + diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.h new file mode 100644 index 0000000000..7f58dd3f17 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/caps_word.h @@ -0,0 +1,127 @@ +// Copyright 2021-2022 Google LLC +// +// 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 +// +// https://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. +// +// +// Caps Word, activated by pressing both shift keys at the same time. +// +// This library implements "Caps Word", which is like conventional Caps Lock, +// but automatically disables itself at the end of the word. This is useful for +// typing all-caps identifiers like `MOD_MASK_ALT`. +// +// Caps Word is activated by pressing the left and right shift keys at the same +// time. This way you don't need a dedicated key for using Caps Word. I've +// tested that this works as expected with one-shot mods and Space Cadet Shift. +// If your shift keys are mod-taps, activate Caps Word by holding both shift +// mod-tap keys until the tapping term, release them, then begin typing. +// +// Optionally, Caps Word may be configured to deactivate if the keyboard is idle +// for some time. This is useful to mitigate unintended shifting when you get +// interrupted or switch to the mouse while Caps Word is active. In your +// config.h, define `CAPS_WORD_IDLE_TIMEOUT` with a time in milliseconds: +// +// #define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds. +// +// and in your keymap.c, define (or add to) `matrix_scan_user()` as +// +// void matrix_scan_user(void) { +// caps_word_task(); +// // Other tasks... +// } +// +// For full documentation, see +// https://getreuer.info/posts/keyboards/caps-word + +#pragma once + +#include QMK_KEYBOARD_H + +// Call this function from `process_record_user()` to implement Caps Word. +bool process_caps_word(uint16_t keycode, keyrecord_t* record); + +// If CAPS_WORD_IDLE_TIMEOUT is set, call `caps_word_task()` from +// `matrix_scan_user()` as described above. +// +// If CAPS_WORD_IDLE_TIMEOUT isn't set, calling this function has no effect (but +// will still compile). +#if CAPS_WORD_IDLE_TIMEOUT > 0 +void caps_word_task(void); +#else +static inline void caps_word_task(void) {} +#endif + +// Activates or deactivates Caps Word. For instance activate Caps Word with a +// combo by defining a `COMBO_ACTION` that calls `caps_word_set(true)`: +// +// void process_combo_event(uint16_t combo_index, bool pressed) { +// switch(combo_index) { +// case CAPS_COMBO: +// if (pressed) { +// caps_word_set(true); // Activate Caps Word. +// } +// break; +// +// // Other combos... +// } +// } +void caps_word_set(bool active); + +// Returns whether Caps Word is currently active. +bool caps_word_get(void); + +// An optional callback that gets called when Caps Word turns on or off. This is +// useful to represent the current Caps Word state, e.g. by setting an LED or +// playing a sound. In your keymap, define +// +// void caps_word_set_user(bool active) { +// if (active) { +// // Do something when Caps Word activates. +// } else { +// // Do something when Caps Word deactivates. +// } +// } +void caps_word_set_user(bool active); + +// An optional callback which is called on every key press while Caps Word is +// active. When the key should be shifted (that is, a letter key), the callback +// should call `add_weak_mods(MOD_BIT(KC_LSFT))` to shift the key. The callback +// also determines whether the key should continue Caps Word. Returning true +// continues the current "word", while returning false is "word breaking" and +// deactivates Caps Word. The default callback is +// +// bool caps_word_press_user(uint16_t keycode) { +// switch (keycode) { +// // Keycodes that continue Caps Word, with shift applied. +// case KC_A ... KC_Z: +// add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. +// return true; +// +// // Keycodes that continue Caps Word, without shifting. +// case KC_1 ... KC_0: +// case KC_BSPC: +// case KC_MINS: +// case KC_UNDS: +// return true; +// +// default: +// return false; // Deactivate Caps Word. +// } +// } +// +// To customize, copy the above function into your keymap and add/remove +// keycodes to the above cases. +// +// NOTE: Outside of this callback, you can use `caps_word_set(false)` to +// deactivate Caps Word. +bool caps_word_press_user(uint16_t keycode); + diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/config.h new file mode 100644 index 0000000000..582e473cb2 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/config.h @@ -0,0 +1,75 @@ +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 <jcblake@outlook.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#define TAPPING_TOGGLE 2 +// TT set to two taps + +/* Handle GRAVESC combo keys */ +#define GRAVE_ESC_ALT_OVERRIDE +// Always send Escape if Alt is pressed +#define GRAVE_ESC_CTRL_OVERRIDE +// Always send Escape if Control is pressed + +// #define TAPPING_TERM 180 +#define TAPPING_TERM 300 +#define TAPPING_TERM_PER_KEY + +#ifdef RGB_MATRIX_ENABLE +#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR +#define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif + +// RGB step values +#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10) +#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17) +#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17) + +// add fifth layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable +#if defined COLEMAK_LAYER_ENABLE +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 +#define _COLEMAK 4 +#endif // COLEMAK_LAYER_ENABLE + +/* +// Mouse Keys Accelerated Mode Definitions +#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10) +#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement. +#define MOUSEKEY_MOVE_DELTA 8 // Step size (default: 8) +#define MOUSEKEY_MAX_SPEED 9 // Maximum cursor speed at which acceleration stops (default: 10) +#define MOUSEKEY_TIME_TO_MAX 150 // Time until maximum cursor speed is reached (default: 30) +#define MOUSEKEY_WHEEL_DELAY 0 // Delay between pressing a wheel key and wheel movement (default: 10) +#define MOUSEKEY_WHEEL_INTERVAL 80 // Time between wheel movements (default: 80) +#define MOUSEKEY_WHEEL_MAX_SPEED 8 // Maximum number of scroll steps per scroll action (default: 8) +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 // Time until maximum scroll speed is reached (default: 40) +*/ + +// Mouse Keys Kinetic Mode Definitions +#define MK_KINETIC_SPEED // Enable Kinetic mode: Uses a quadratic curve on cursor speed to allow precise movements at the beginning and increases speed thereafter. +#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10) +#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement. +#define MOUSEKEY_MOVE_DELTA 5 // Step size for accelerating from initial to base speed (default: 8) +#define MOUSEKEY_MOVE_MAX 50 // use instead of BASE SPEED to limit speed in Kinetic mode +#define MOUSEKEY_INITIAL_SPEED 100 // Initial speed of the cursor in pixels per second (default: 100) +//#define MOUSEKEY_BASE_SPEED 800 // (broken in QMK 0.16.0) Maximum cursor speed at which acceleration stops (default: 1000) +#define MOUSEKEY_DECELERATED_SPEED 400 // Decelerated cursor speed (default: 400) +#define MOUSEKEY_ACCELERATED_SPEED 2000 // Accelerated cursor speed (default: 3000) +#define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 16 // Initial number of movements of the mouse wheel (default: 16) +#define MOUSEKEY_WHEEL_BASE_MOVEMENTS 32 // Maximum number of movements at which acceleration stops (default: 32) +#define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 // Accelerated wheel movements (default: 48) +#define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 // Decelerated wheel movements (default: 8) diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c new file mode 100644 index 0000000000..97db98dd12 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c @@ -0,0 +1,336 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 <jcblake@outlook.com> + +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/>. +*/ + +// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c + +#include QMK_KEYBOARD_H + +#include "rgb_matrix_map.h" + +#include "gourdo1.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | + * |=============================================================================================================| + * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_BASE] = LAYOUT( + KC_ESCLYR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, + 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, + TT(_NUMPADMOUSE), 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_LSFTCAPSWIN, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* FN1 Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc ||MyCmp |WbHom | Calc |MdSel ||MdPrv |MdNxt |MdPly |MdStp ||VolDn |VolUp |PrScr |ScrLk ||Pause || ____ | + * |=============================================================================================================| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |RGBTOD|RGBTOI| ________ ||RGBTOG| + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ |RGBSAD|RGBVAI|RGBSAI| NKRO | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | Reset || Home | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | __________ || End | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| ____ | ______ ||RGBMOD|| ____ | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI| + * `------------------------------------------------------------------------------------------------------------' + */ + + [_FN1] = LAYOUT( + EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, + _______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, RESET, KC_HOME, + KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + /* _NUMPADMOUSE Layout + * Note: A symbol preceded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * ,-------------------------------------------------------------------------------------------------------------. + * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | + * |=============================================================================================================| + * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ | PGUP | Up | PGDN | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || WhUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || WhDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | MBt1 ||MS_UP || MBt2 | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | ____ | ____ | _____ | ____ | ____ | MBt3 ||MS_LT |MS_DN |MS_RT | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_NUMPADMOUSE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_PGUP, KC_UP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_WH_U, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, KC_WH_D, + _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2, + _______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R + ), + + [_MOUSEKEY] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_D, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, + _______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R + ), + + #ifdef COLEMAK_LAYER_ENABLE + [_COLEMAK] = LAYOUT( + _______, 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_MUTE, + 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_HOME, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, + _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + _______, _______, _______, KC_SPC, KC_RALT, _______,KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + #endif // COLEMAK_LAYER_ENABLE +}; + +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults +void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch (get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; + } + } + //return true; //set to return false to counteract enabled encoder in pro.c + return false; +} +#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE + +#ifdef RGB_MATRIX_ENABLE +// Capslock, Scroll lock and Numlock indicator on Left side lights. +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); + + // Scroll Lock RGB setup + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_TAB, RGB_RED); + } + + // System NumLock warning indicator RGB setup + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #endif // INVERT_NUMLOCK_INDICATOR + + // CapsLock RGB setup + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) { + rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE); + } + rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE); + } + + // Winkey disabled (gaming) mode RGB setup + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Winkey red when disabled + rgb_matrix_set_color(LED_W, RGB_CHARTREUSE); //light up gaming keys with WSAD higlighted + rgb_matrix_set_color(LED_S, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_A, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_D, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_Q, RGB_ORANGE2); + rgb_matrix_set_color(LED_E, RGB_ORANGE2); + rgb_matrix_set_color(LED_R, RGB_ORANGE2); + rgb_matrix_set_color(LED_TAB, RGB_ORANGE2); + rgb_matrix_set_color(LED_F, RGB_ORANGE2); + rgb_matrix_set_color(LED_Z, RGB_ORANGE2); + rgb_matrix_set_color(LED_X, RGB_ORANGE2); + rgb_matrix_set_color(LED_C, RGB_ORANGE2); + rgb_matrix_set_color(LED_V, RGB_ORANGE2); + rgb_matrix_set_color(LED_SPC, RGB_ORANGE2); + rgb_matrix_set_color(LED_LCTL, RGB_ORANGE2); + rgb_matrix_set_color(LED_LSFT, RGB_ORANGE2); + } + + // Fn selector mode RGB setup + switch (get_highest_layer(layer_state)) { // special handling per layer + case _FN1: // on Fn layer select what the encoder does when pressed + rgb_matrix_set_color(LED_FN, RGB_RED); //FN key + + //NEW RGB LIGHTING TO RING KEYBOARD ON FN LAYER ACTIVATION: + for (uint8_t j = 0; j < ARRAYSIZE(LED_LIST_FUNCROW); j++) { + rgb_matrix_set_color(LED_LIST_FUNCROW[j], RGB_RED); + } + rgb_matrix_set_color(LED_LCTL, RGB_RED); + rgb_matrix_set_color(LED_LALT, RGB_RED); + rgb_matrix_set_color(LED_SPC, RGB_RED); + rgb_matrix_set_color(LED_LWIN, RGB_RED); + rgb_matrix_set_color(LED_RALT, RGB_RED); + rgb_matrix_set_color(LED_FN, RGB_OFFBLUE); + rgb_matrix_set_color(LED_RCTL, RGB_RED); + rgb_matrix_set_color(LED_BSLS, RGB_RED); + rgb_matrix_set_color(LED_L1, RGB_RED); + rgb_matrix_set_color(LED_L2, RGB_RED); + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_L5, RGB_RED); + rgb_matrix_set_color(LED_L6, RGB_RED); + rgb_matrix_set_color(LED_L7, RGB_RED); + rgb_matrix_set_color(LED_L8, RGB_RED); + rgb_matrix_set_color(LED_DOWN, RGB_RED); + rgb_matrix_set_color(LED_LEFT, RGB_RED); + rgb_matrix_set_color(LED_RIGHT, RGB_RED); + rgb_matrix_set_color(LED_R1, RGB_RED); + rgb_matrix_set_color(LED_R2, RGB_RED); + rgb_matrix_set_color(LED_R3, RGB_RED); + rgb_matrix_set_color(LED_R4, RGB_RED); + rgb_matrix_set_color(LED_R5, RGB_RED); + rgb_matrix_set_color(LED_R6, RGB_RED); + rgb_matrix_set_color(LED_R7, RGB_RED); + rgb_matrix_set_color(LED_R8, RGB_RED); + rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE); + rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE); + + // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code + uint16_t timeout_threshold = get_timeout_threshold(); + if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN); + else if (timeout_threshold < 140) { + rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN); + } else { // >= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); + } + break; + + // Numpad & Mouse Keys overlay RGB + case _NUMPADMOUSE: + for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) { + rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE); + } + rgb_matrix_set_color(LED_L5, RGB_OFFBLUE); + rgb_matrix_set_color(LED_L6, RGB_OFFBLUE); + rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); + rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RCTL, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RSFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_PGUP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_PGDN, RGB_CHARTREUSE); + break; + + // MOUSEKEYS mode RGB + case _MOUSEKEY: + rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RCTL, RGB_CYAN); + rgb_matrix_set_color(LED_RSFT, RGB_CYAN); + rgb_matrix_set_color(LED_END, RGB_CYAN); + rgb_matrix_set_color(LED_PGUP, RGB_OFFBLUE); + rgb_matrix_set_color(LED_PGDN, RGB_OFFBLUE); + + break; + + // Colemak layer RGB + #ifdef COLEMAK_LAYER_ENABLE + case _COLEMAK: + for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) { + rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA); + rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA); + } + break; + #endif + default: + break; + } +} +#endif + +void keyboard_post_init_keymap(void) { + // keyboard_post_init_user() moved to userspace + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_sethsv_noeeprom(20, 255, 127); // Default startup color (Hue:amber Saturation:full Value(brightness):mid) + activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle + #endif +}
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/readme.md new file mode 100644 index 0000000000..3db6923d76 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/readme.md @@ -0,0 +1,97 @@ +# gourdo1's GMMK Pro ANSI layout + +This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin) GMMK Pro layout with several additions, modifications, a tweaked keymap, updated layers and expanded RGB controls. + +![image](https://raw.githubusercontent.com/gourdo1/media/main/susuwatari.jpg) + +## Features: + +### Core Functionality + +* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022) +* Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled +* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with FN+R +* Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys +* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022) +* Multi-monitor app moving shortcuts: FN + [,] (square brackets) to move current app window to next monitor (added Apr 11, 2022) +* Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com". (added Apr 7, 2022) +* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) +* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) +* Home key on F13, Del key right of Backspace +* Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) +* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+F13 +* [Colemak](https://colemak.com/) key layout support (Layer accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple) +* Double tap ESC any time to revert to base layer (added Feb 26, 2022) + +### Numpad + Mouse Keys (Capslock key) + +* Overlay numpad + [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting +* This layer disables much of the keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys, surrounding keys become mouse buttons and all number keys become numpad versions (so Alt char codes work regardless of which set you use) +* Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) +* Double zero on comma key. +* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. (added Mar 15, 2022) +* Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel +* Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green + +### Encoder Functionality + +* Default knob turn changes volume; button press toggles mute +* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease (added Feb 17, 2022) +* FN knob turn changes RGB idle timeout +* holding Left Shift changes layers +* holding Right Shift navigates page up/down +* holding Left Ctrl navigates prev/next word +* holding Right Ctrl changes RGB hue/color +* holding Left Alt changes media prev/next track + +### Global RGB Controls + +* RGB backlight lighting effect: FN + up/down +* RGB backlight effect speed: FN + left/right +* RGB backlight hue cycle: FN + A/D +* RGB backlight brightness: FN + W/S +* RGB backlight saturation: FN + Q/E (added Feb 4, 2022) +* RGB backlight night mode toggle: FN + Z (indicators still work) +* RGB backlight timeout: FN + Encoder or "-" and "=" (default 15 minutes) (updated Apr 7, 2022) + * indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes +* RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) +* FN + Z to turn off RGB backlighting; press again to toggle + +### Advanced Controls + +* FN + \ to get to bootloader mode +* FN + [ESC] to clear EEPROM (then unplug and re-plug) (added Apr 11, 2022) +* FN + R to toggle N-key Rollover (added Apr 11, 2022) + +Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin + +Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf + + +## rules.mk Options + +STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default + +ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions + +TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS + +IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically + +INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. + +COLEMAK_LAYER_ENABLE = yes - Enable optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer. + + +## Layer Diagrams +### Base layer +![image](https://raw.githubusercontent.com/gourdo1/media/main/base.png) + +### Fn Layer +![image](https://raw.githubusercontent.com/gourdo1/media/main/fn1.png) + +### Layer 2 (Numpad) +![image](https://raw.githubusercontent.com/gourdo1/media/main/numpad.png) + +### COLEMAK layer +![image](https://user-images.githubusercontent.com/71780717/131235050-980d2f54-2d23-4ae8-a83f-9fcdbe60d6cb.png) diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rgb_matrix_map.h new file mode 100644 index 0000000000..38da50754b --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rgb_matrix_map.h @@ -0,0 +1,287 @@ +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 <jcblake@outlook.com> + +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/>. +*/ + +#ifdef RGB_MATRIX_ENABLE +// Custom GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h) +#define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps +#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors +#define RGB_OFFBLUE 0x00, 0x80, 0xFF // new color: blue with a hint of green +#define RGB_DKRED 0x28, 0x00, 0x00 // new color: dark red +#define RGB_ORANGE2 0xFF, 0x28, 0x00 // fix: reduced green from 80 to 28 +#define RGB_PURPLE2 0x80, 0x00, 0xFF // fix: increased red from 7A to 80 +#define RGB_SPRINGGREEN2 0x00, 0xFF, 0x10 // fix: blue was 80, now 10 +#define RGB_YELLOW2 0xFF, 0xB0, 0x00 // fix: green was FF, now B0 +#define RGB_OFF RGB_BLACK + +// Added by gourdo1 for RGB testing +// Red Green Blue Expected GMMK Pro result +#define RGB_TEST1 0xFF, 0x00, 0x00 // Q - red good! +#define RGB_TEST2 0x0F, 0xFF, 0x00 // W - green good! +#define RGB_TEST3 0x00, 0x00, 0xFF // E - blue good! +#define RGB_TEST4 0xFF, 0xB0, 0x00 // R - yellow slightly green heavy - reduced green LED by quite a bit +#define RGB_TEST5 0x00, 0xFF, 0xFF // T - cyan good! +#define RGB_TEST6 0xFF, 0x00, 0xFF // Y - magenta very slightly blue heavy? +#define RGB_TEST7 0xFF, 0x28, 0x00 // U - orange very green heavy at default +#define RGB_TEST8 0xFF, 0x00, 0x80 // I - pink good! +#define RGB_TEST9 0x80, 0xFF, 0x00 // O - chartreus good! +#define RGB_TEST10 0x00, 0xFF, 0x10 // P - springgrn fixed: was too blue because green LED has blue in it already +#define RGB_TEST11 0x00, 0x80, 0xFF // A - grn blue good! +#define RGB_TEST12 0x80, 0x00, 0xFF // S - purple good! + +// RGB LED locations +enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LED_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_DEL, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 +}; + +const uint8_t LED_LIST_WASD[] = { + LED_W, + LED_A, + LED_S, + LED_D +}; + +const uint8_t LED_LIST_ARROWS[] = { + LED_LEFT, + LED_RIGHT, + LED_UP, + LED_DOWN +}; + +const uint8_t LED_LIST_FUNCROW[] = { + LED_ESC, + LED_F1, + LED_F2, + LED_F3, + LED_F4, + LED_F5, + LED_F6, + LED_F7, + LED_F8, + LED_F9, + LED_F10, + LED_F11, + LED_F12, + LED_INS +}; + +const uint8_t LED_LIST_NUMROW[] = { + LED_GRV, + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_MINS, + LED_EQL, + LED_BSPC, + LED_DEL +}; + +const uint8_t LED_LIST_LETTERS[] = { + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_Q, + LED_W, + LED_E, + LED_R, + LED_T, + LED_Y, + LED_U, + LED_I, + LED_O, + LED_P, + LED_A, + LED_S, + LED_D, + LED_F, + LED_G, + LED_H, + LED_J, + LED_K, + LED_L, + LED_Z, + LED_X, + LED_C, + LED_V, + LED_B, + LED_N, + LED_M +}; + +const uint8_t LED_LIST_NUMPAD[] = { + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_MINS, + LED_EQL, + LED_U, + LED_I, + LED_O, + LED_P, + LED_J, + LED_K, + LED_L, + LED_SCLN, + LED_ENT, + LED_M, + LED_COMM, + LED_DOT, + LED_SLSH, + LED_END, + LED_RIGHT +}; + +const uint8_t LED_SIDE_LEFT[] = { + LED_L1, + LED_L2, + LED_L3, + LED_L4, + LED_L5, + LED_L6, + LED_L7, + LED_L8 +}; + +const uint8_t LED_SIDE_RIGHT[] = { + LED_R1, + LED_R2, + LED_R3, + LED_R4, + LED_R5, + LED_R6, + LED_R7, + LED_R8 +}; + +#endif
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rules.mk new file mode 100644 index 0000000000..b236d9132c --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/rules.mk @@ -0,0 +1,18 @@ +SRC += caps_word.c + +LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = yes + +VIA_ENABLE = yes +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite + +TD_LSFT_CAPSLOCK_ENABLE = yes +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes +ENCODER_DEFAULTACTIONS_ENABLE = no + +COLEMAK_LAYER_ENABLE = yes # Enable Colemak layer / set to no to disable +INVERT_NUMLOCK_INDICATOR = yes diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h new file mode 100644 index 0000000000..1438d317fb --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h @@ -0,0 +1,22 @@ +/* Copyright 2021 Andre Brait + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms) + #define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/keymap.c index b801640436..19694d54c1 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/keymap.c @@ -67,6 +67,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; // clang-format on +const key_override_t up_key_override = ko_make_basic(MOD_MASK_CTRL, KC_UP, KC_PGUP); +const key_override_t dn_key_override = ko_make_basic(MOD_MASK_CTRL, KC_DOWN, KC_PGDN); + +// This globally defines all key overrides to be used +const key_override_t **key_overrides = (const key_override_t *[]){ + &up_key_override, + &dn_key_override, + NULL // Null terminate the array of overrides! +}; #ifdef ENCODER_ENABLE bool encoder_update_user(uint8_t index, bool clockwise) { if (clockwise) { @@ -214,12 +223,12 @@ void rgb_matrix_indicators_user() { #if RGB_CONFIRMATION_BLINKING_TIME > 0 if (effect_started_time > 0) { /* Render blinking EFFECTS */ - uint16_t deltaTime = sync_timer_elapsed(effect_started_time); + const uint16_t deltaTime = sync_timer_elapsed(effect_started_time); if (deltaTime <= RGB_CONFIRMATION_BLINKING_TIME) { - uint8_t led_state = ((~deltaTime) >> TIME_SELECTED_BIT) & 0x01; - uint8_t val_r = led_state * r_effect; - uint8_t val_g = led_state * g_effect; - uint8_t val_b = led_state * b_effect; + const uint8_t led_state = ((~deltaTime) >> TIME_SELECTED_BIT) & 0x01; + const uint8_t val_r = led_state * r_effect; + const uint8_t val_g = led_state * g_effect; + const uint8_t val_b = led_state * b_effect; rgb_matrix_set_color_all(val_r, val_g, val_b); if (host_keyboard_led_state().caps_lock) { set_rgb_caps_leds(); @@ -264,6 +273,17 @@ static void start_effects() { } #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 +// RGB led number layout, function of the key + +// 67, led 01 0, ESC 6, F1 12, F2 18, F3 23, F4 28, F5 34, F6 39, F7 44, F8 50, F9 56, F10 61, F11 66, F12 69, Prt Rotary(Mute) 68, led 12 +// 70, led 02 1, ~ 7, 1 13, 2 19, 3 24, 4 29, 5 35, 6 40, 7 45, 8 51, 9 57, 0 62, -_ 78, (=+) 85, BackSpc 72, Home 71, led 13 +// 73, led 03 2, Tab 8, Q 14, W 20. E 25, R 30, T 36, Y 41, U 46, I 52, O 58, P 63, [{ 89, ]} 93, \| 75, PgUp 74, led 14 +// 76, led 04 3, Caps 9, A 15, S 21, D 26, F 31, G 37, H 42, J 47, K 53, L 59, ;: 64, '" 96, Enter 86, PgDn 77, led 15 +// 80, led 05 4, Sh_L 10, Z 16, X 22, C 27, V 32, B 38, N 43, M 48, ,< 54, .< 60, /? 90, Sh_R 94, Up 82, End 81, led 16 +// 83, led 06 5, Ct_L 11,Win_L 17, Alt_L 33, SPACE 49, Alt_R 55, FN 65, Ct_R 95, Left 97, Down 79, Right 84, led 17 +// 87, led 07 88, led 18 +// 91, led 08 92, led 19 + static void set_rgb_caps_leds() { rgb_matrix_set_color(67, 0xFF, 0x0, 0x0); // Left side LED 1 rgb_matrix_set_color(68, 0xFF, 0x0, 0x0); // Right side LED 1 diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/readme.md new file mode 100644 index 0000000000..bc8c580dbb --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/readme.md @@ -0,0 +1,26 @@ +# hachetmans's GMMK Pro layout + +This is pretty much the stock layout with a few things moved around. +It basically reflects my needs for both Delete and Insert being readily available for coding, as well as a full Home/PgUp/PgDwn/End column. + +The differences are as follows: + +- Disabled Mouse Keys (to fix issues with KVM switches and also because they're not used here anyway) +- Short DEBOUNCE time (5 ms) +- Per-key debounce algorithm (sym_defer_pk) +- RGB turns off after 20 minutes of inactivity +- RGB turns off when USB is suspended +- Layer 0: + - Print Screen (default) -> Delete + - Delete (default) -> Home +- Layer 1 (accessed by pressing Fn): + - Fn + Delete -> Insert + - Fn + Home -> Print Screen +- override CTRL + UP -> PGUP +- override CTRL + DOWN -> PGDN + +This keymap also includes CAPS LOCK ON indicator.\ +All left and right side LEDs, and the Caps key LED will turn solid red while CAPS LOCK is ON. + +No other changes have been made. \ +The other keys on each layer have been kept intact. diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/rules.mk new file mode 100644 index 0000000000..9995f3f4d2 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/rules.mk @@ -0,0 +1,5 @@ +# Enable additional features. + +DEBOUNCE_TYPE = sym_defer_pk +MOUSEKEY_ENABLE = no +KEY_OVERRIDE_ENABLE = yes diff --git a/keyboards/gmmk/pro/ansi/keymaps/jackkenney/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/jackkenney/keymap.c index cfca7960ca..cfca7960ca 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jackkenney/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jackkenney/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/config.h index ed78f99eca..ed78f99eca 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jonavin/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/keymap.c index 0d318885f4..0d318885f4 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/readme.md index 6e8d6ba8a5..6e8d6ba8a5 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/rgb_matrix_map.h index 1ee5388905..1ee5388905 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jonavin/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/rgb_matrix_map.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/rules.mk index 90ea42dee5..1ffc2058a2 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/jonavin/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin/rules.mk @@ -1,7 +1,7 @@ VIA_ENABLE = yes MOUSEKEY_ENABLE = no TAP_DANCE_ENABLE = yes -BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite TD_LSFT_CAPSLOCK_ENABLE = yes IDLE_TIMEOUT_ENABLE = yes diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h new file mode 100644 index 0000000000..74c018f7f1 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h @@ -0,0 +1,19 @@ +/* Copyright 2021 Lalit Maganti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#define RGB_DISABLE_WHEN_USB_SUSPENDED
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/keymap.c new file mode 100644 index 0000000000..7bedf05987 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/keymap.c @@ -0,0 +1,91 @@ +/* Copyright 2021 Lalit Maganti + +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 + +#ifdef PROGRAMMABLE_BUTTON_ENABLE +#define L1_NUM1 PROGRAMMABLE_BUTTON_1 +#define L1_NUM2 PROGRAMMABLE_BUTTON_2 +#define L1_NUM3 PROGRAMMABLE_BUTTON_3 +#define L1_NUM4 PROGRAMMABLE_BUTTON_4 +#define L1_NUM5 PROGRAMMABLE_BUTTON_5 +#define L1_NUM6 PROGRAMMABLE_BUTTON_6 +#define L1_NUM7 PROGRAMMABLE_BUTTON_7 +#define L1_NUM8 PROGRAMMABLE_BUTTON_8 +#define L1_NUM9 PROGRAMMABLE_BUTTON_9 +#else +#define L1_NUM1 _______ +#define L1_NUM2 _______ +#define L1_NUM3 _______ +#define L1_NUM4 _______ +#define L1_NUM5 _______ +#define L1_NUM6 _______ +#define L1_NUM7 _______ +#define L1_NUM8 _______ +#define L1_NUM9 _______ +#endif + + +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_DEL, KC_MUTE, + 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_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_END, + 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, RGB_TOG, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + return false; +} + + +#ifdef RGB_MATRIX_ENABLE + +static void set_rgb_side_leds(void); + +static void set_rgb_side_leds() { + rgb_matrix_set_color(67, RGB_WHITE); // Left side LED 1 + rgb_matrix_set_color(68, RGB_WHITE); // Right side LED 1 + rgb_matrix_set_color(91, RGB_WHITE); // Left side LED 8 + rgb_matrix_set_color(92, RGB_WHITE); // Right side LED 8 +} + +void rgb_matrix_indicators_user() { + rgb_matrix_set_color_all(0x0, 0x0, 0x0); + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color(3, RGB_WHITE); // CAPS + } + set_rgb_side_leds(); +} + +#endif
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/rules.mk new file mode 100644 index 0000000000..0a5b666e85 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/rules.mk @@ -0,0 +1 @@ +MOUSEKEY_ENABLE = no diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h new file mode 100644 index 0000000000..799c5d9593 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h @@ -0,0 +1,80 @@ +/* Copyright 2021 zvuc <https://github.com/zvuc> + * + * 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 + +// At the time of this, there are 41 effects! That may be a bit too many to cycle through - keeping what I believe is the best. +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms) + +// #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + +// Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state + #define RGB_DISABLE_WHEN_USB_SUSPENDED + +// Effects + #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain + #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes + + // Disable effects you don't like. + // Soon, you'll have to explicitly enable effects you want: https://github.com/qmk/qmk_firmware/pull/13758 + // #define DISABLE_RGB_MATRIX_SOLID_COLOR, // Static single hue, no speed support + // #define DISABLE_RGB_MATRIX_ALPHAS_MODS, // Static dual hue, speed is hue for secondary hue + // #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN, // Static gradient top to bottom, speed controls how much gradient changes + // #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT, // Static gradient left to right, speed controls how much gradient changes + // #define DISABLE_RGB_MATRIX_BREATHING, // Single hue brightness cycling animation + // #define DISABLE_RGB_MATRIX_BAND_SAT, // Single hue band fading saturation scrolling left to right + // #define DISABLE_RGB_MATRIX_BAND_VAL, // Single hue band fading brightness scrolling left to right + // #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT, // Single hue 3 blade spinning pinwheel fades saturation + // #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL, // Single hue 3 blade spinning pinwheel fades brightness + // #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT, // Single hue spinning spiral fades saturation + // #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL, // Single hue spinning spiral fades brightness + // #define DISABLE_RGB_MATRIX_CYCLE_ALL, // Full keyboard solid hue cycling through full gradient + // #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT, // Full gradient scrolling left to right + // #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN, // Full gradient scrolling top to bottom + // #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN, // Full gradient scrolling out to in + // #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL, // Full dual gradients scrolling out to in + // #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON, // Full gradent Chevron shapped scrolling left to right + // #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL, // Full gradient spinning pinwheel around center of keyboard + // #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL, // Full gradient spinning spiral around center of keyboard + // #define DISABLE_RGB_MATRIX_DUAL_BEACON, // Full gradient spinning around center of keyboard + // #define DISABLE_RGB_MATRIX_RAINBOW_BEACON, // Full tighter gradient spinning around center of keyboard + // #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS, // Full dual gradients spinning two halfs of keyboard + // #define DISABLE_RGB_MATRIX_RAINDROPS, // Randomly changes a single key's hue + // #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS, // Randomly changes a single key's hue and saturation + // #define DISABLE_RGB_MATRIX_HUE_BREATHING, // Hue shifts up a slight ammount at the same time, then shifts back + // #define DISABLE_RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left + // #define DISABLE_RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right + + // Framebuffer effects + // #define DISABLE_RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM! + // #define DISABLE_RGB_MATRIX_DIGITAL_RAIN, // That famous computer simulation + + // Reactive effects + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE, // Pulses keys hit to hue & value then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE, // Static single hue, pulses keys hit to shifted hue then fades to current hue + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out + // #define DISABLE_RGB_MATRIX_SPLASH, // Full gradient & value pulse away from a single key hit then fades value out + // #define DISABLE_RGB_MATRIX_MULTISPLASH, // Full gradient & value pulse away from multiple key hits then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out + // #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out + +#endif diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/keymap.c new file mode 100644 index 0000000000..1f8c47306a --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/keymap.c @@ -0,0 +1,448 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + + GMMK Pro Standard keymap for macOS + by zvuc <https://github.com/zvuc> + + with code snippets from + Andre Brait <andrebrait@gmail.com>, stickandgum + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +enum my_keycodes { + KC_MSCTRL = SAFE_RANGE, + KC_LNPD, + LED_TLDE, + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_MINS, + LED_EQL +}; + +#ifdef RGB_MATRIX_ENABLE + #ifndef RGB_CONFIRMATION_BLINKING_TIME + #define RGB_CONFIRMATION_BLINKING_TIME 2000 // 2 seconds + #endif +#endif // RGB_MATRIX_ENABLE + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Eject Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up F13 +// Ct_L Opt_L Cmd_L SPACE Cmd_R Opt_R FN Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [0] = LAYOUT( + KC_ESC, KC_BRID, KC_BRIU, KC_MSCTRL, KC_LNPD, RGB_VAD, RGB_VAI, KC_F7, KC_F8, KC_MRWD, KC_MPLY, KC_MFFD, KC_F12, KC_EJCT, KC_MUTE, + 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_F13, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG, + LED_TLDE, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, _______, KC_PSCR, + _______, RGB_HUI, RGB_VAI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, RGB_HUD, RGB_VAD, RGB_SAD, TG(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + // This is an alternative togglable layer to change default function row to standard F keys + [2] = LAYOUT( + _______, 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_F24, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + +}; +// clang-format on + +#ifdef ENCODER_ENABLE + bool encoder_update_user(uint8_t index, bool clockwise) { + // https://beta.docs.qmk.fm/using-qmk/simple-keycodes/feature_advanced_keycodes#alt-escape-for-alt-tab-id-alt-escape-for-alt-tab + if (get_mods() & MOD_MASK_CTRL) { // If CTRL is held + uint8_t mod_state = get_mods(); // Store all modifiers that are held + unregister_mods(MOD_MASK_CTRL); // Immediately unregister the CRTL key (don't send CTRL-PgDn) - del_mods doesn't work here (not immediate) + if (clockwise) { + rgblight_increase_hue(); + } else { + rgblight_decrease_hue(); + } + set_mods(mod_state); // Add back in the CTRL key - so ctrl-key will work if ctrl was never released after paging. + } else if (get_mods() & MOD_MASK_ALT) { + uint8_t mod_state = get_mods(); + unregister_mods(MOD_MASK_ALT); + if (clockwise) { + rgblight_increase_sat(); + } else { + rgblight_decrease_sat(); + } + set_mods(mod_state); + } else if (get_mods() & MOD_MASK_GUI) { + uint8_t mod_state = get_mods(); + unregister_mods(MOD_MASK_GUI); + if (clockwise) { + rgblight_increase_val(); + } else { + rgblight_decrease_val(); + } + set_mods(mod_state); + } else if (get_mods() & MOD_MASK_SHIFT) { + uint8_t mod_state = get_mods(); + unregister_mods(MOD_MASK_SHIFT); + if (clockwise) { + rgblight_increase_speed(); + } else { + rgblight_decrease_speed(); + } + set_mods(mod_state); + } else if (clockwise) { // All else volume. + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; + } +#endif //ENCODER_ENABLE + +#ifdef RGB_MATRIX_ENABLE + + // Called on powerup and is the last _init that is run. + void keyboard_post_init_user(void) { + + int mods[35] = {0,2,3,4,5,11,17,33,49,55,65,95,97,79,94,85,93,96,90,69,92,67,76,80,91,75,86,68,77,81,92,28,34,39,44}; + int j; + + /* output each array element's value */ + for (j = 0; j < 35; j++ ) { + g_led_config.flags[mods[j]] = LED_FLAG_MODIFIER; + } + + if (!rgb_matrix_is_enabled()) { + rgb_matrix_enable(); + #ifdef CONSOLE_ENABLE + uprintf("ERROR! RGB Matrix Enabled and wrote to EEPROM! -How was the RGB Matrix Disabled?"); + #endif + } + } + + /* Renaming those to make the purpose on this keymap clearer */ + #define LED_FLAG_CAPS LED_FLAG_NONE + #define LED_FLAG_EFFECTS LED_FLAG_INDICATOR + + static void set_rgb_caps_leds(void); + + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + static uint16_t effect_started_time = 0; + static uint8_t r_effect = 0x0, g_effect = 0x0, b_effect = 0x0; + static void start_effects(void); + + /* The higher this is, the slower the blinking will be */ + #ifndef TIME_SELECTED_BIT + #define TIME_SELECTED_BIT 8 + #endif + #if TIME_SELECTED_BIT < 0 || TIME_SELECTED_BIT >= 16 + #error "TIME_SELECTED_BIT must be a positive integer smaller than 16" + #endif + #define effect_red() r_effect = 0xFF, g_effect = 0x0, b_effect = 0x0 + #define effect_green() r_effect = 0x0, g_effect = 0xFF, b_effect = 0x0 + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + + bool led_update_user(led_t led_state) { + if (led_state.caps_lock) { + if (!rgb_matrix_is_enabled()) { + /* Turn ON the RGB Matrix for CAPS LOCK */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + rgb_matrix_enable(); + } + } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + /* RGB Matrix was only ON because of CAPS LOCK. Turn it OFF. */ + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_disable(); + } + return true; + } + + bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // https://github.com/qmk/qmk_firmware/issues/10111 + case KC_MSCTRL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; /* Skip all further processing of this key */ + + case KC_LNPD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; /* Skip all further processing of this key */ + + #ifdef NKRO_ENABLE + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + case NK_TOGG: + if (record->event.pressed) { + if (keymap_config.nkro) { + /* Turning NKRO OFF */ + effect_red(); + } else { + /* Turning NKRO ON */ + effect_green(); + } + start_effects(); + } + break; + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + #endif // NKRO_ENABLE + + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + case TG(2): + if (record->event.pressed) { + if (IS_LAYER_OFF(2)) { + effect_red(); + } else { + effect_green(); + } + start_effects(); + } + break; + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + + /* LED quick preset keys assignments */ + case LED_TLDE: + rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); // Can use RGB_M_P built-in keycode instead. + break; + case LED_1: + rgb_matrix_mode(RGB_MATRIX_ALPHAS_MODS); + break; + case LED_2: + rgb_matrix_mode(RGB_MATRIX_GRADIENT_UP_DOWN); + break; + case LED_3: + rgb_matrix_mode(RGB_MATRIX_JELLYBEAN_RAINDROPS); + break; + case LED_4: + rgb_matrix_mode(RGB_MATRIX_BAND_SAT); + break; + case LED_5: + rgb_matrix_mode(RGB_MATRIX_BAND_VAL); + break; + case LED_6: + rgb_matrix_mode(RGB_MATRIX_BAND_SPIRAL_VAL); + break; + case LED_7: + rgb_matrix_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT); // Can use RGB_M_R built-in keycode instead. + break; + case LED_8: + rgb_matrix_mode(RGB_MATRIX_CYCLE_PINWHEEL); // Can use RGB_M_SW built-in keycode instead. + break; + case LED_9: + rgb_matrix_mode(RGB_MATRIX_BREATHING); // Can use RGB_M_B built-in keycode instead. + break; + + #ifdef RGB_MATRIX_KEYPRESSES // Reactive effects require RGB_MATRIX_KEYPRESSES in config.h + case LED_0: + rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE_WIDE); + break; + #endif //RGB_MATRIX_KEYPRESSES + + #ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap and Rain require #define RGB_MATRIX_FRAMEBUFFER_EFFECTS in config.h + case LED_MINS: + rgb_matrix_mode(RGB_MATRIX_DIGITAL_RAIN); + break; + case LED_EQL: + rgb_matrix_mode(RGB_MATRIX_TYPING_HEATMAP); + break; + #endif //RGB_MATRIX_FRAMEBUFFER_EFFECTS + + + // case RGB_MOD: + // case RGB_RMOD: + // case RGB_HUI: + // case RGB_HUD: + // case RGB_SAI: + // case RGB_SAD: + // case RGB_VAI: + // case RGB_VAD: + // case RGB_SPI: + case RGB_SPD: + if (record->event.pressed) { + if (rgb_matrix_get_flags() != LED_FLAG_ALL) { + /* Ignore changes to RGB settings while only it's supposed to be OFF */ + return false; + } + } + break; + + case RGB_TOG: + // if (record->event.pressed) { + // if (rgb_matrix_get_flags() == LED_FLAG_ALL) { + // rgb_matrix_set_flags(LED_FLAG_NONE); + // rgb_matrix_set_color_all(0, 0, 0); + // } else { + // rgb_matrix_set_flags(LED_FLAG_ALL); + // } + // } + // return false; + if (record->event.pressed) { + if (rgb_matrix_is_enabled()) { + switch (rgb_matrix_get_flags()) { + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + case LED_FLAG_EFFECTS: + #endif + case LED_FLAG_CAPS: + /* Turned ON because of EFFECTS or CAPS, is actually OFF */ + /* Change to LED_FLAG_ALL to signal it's really ON */ + rgb_matrix_set_flags(LED_FLAG_ALL); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + break; + case LED_FLAG_ALL: + /* Is actually ON */ + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + if (effect_started_time > 0) { + /* Signal EFFECTS */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + } else + #endif + if (host_keyboard_led_state().caps_lock) { + /* Signal CAPS */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + /* Will be re-enabled by the processing of the toggle */ + rgb_matrix_disable_noeeprom(); + } + break; + } + } + } + break; + + } + return true; + } + + + void rgb_matrix_indicators_user() { + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + if (effect_started_time > 0) { + /* Render blinking EFFECTS */ + uint16_t deltaTime = sync_timer_elapsed(effect_started_time); + if (deltaTime <= RGB_CONFIRMATION_BLINKING_TIME) { + uint8_t led_state = ((~deltaTime) >> TIME_SELECTED_BIT) & 0x01; + uint8_t val_r = led_state * r_effect; + uint8_t val_g = led_state * g_effect; + uint8_t val_b = led_state * b_effect; + rgb_matrix_set_color_all(val_r, val_g, val_b); + if (host_keyboard_led_state().caps_lock) { + set_rgb_caps_leds(); + } + return; + } else { + /* EFFECTS duration is finished */ + effect_started_time = 0; + if (rgb_matrix_get_flags() == LED_FLAG_EFFECTS) { + /* It was turned ON because of EFFECTS */ + if (host_keyboard_led_state().caps_lock) { + /* CAPS is still ON. Demote to CAPS */ + rgb_matrix_set_flags(LED_FLAG_CAPS); + } else { + /* There is nothing else keeping RGB enabled. Reset flags and turn if off. */ + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_disable_noeeprom(); + } + } + } + } + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + rgb_matrix_set_color_all(0x0, 0x0, 0x0); + } + if (host_keyboard_led_state().caps_lock) { + set_rgb_caps_leds(); + } + } + + #if RGB_CONFIRMATION_BLINKING_TIME > 0 + static void start_effects() { + effect_started_time = sync_timer_read(); + if (!rgb_matrix_is_enabled()) { + /* Turn it ON, signal the cause (EFFECTS) */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + rgb_matrix_enable_noeeprom(); + } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { + /* It's already ON, promote the cause from CAPS to EFFECTS */ + rgb_matrix_set_flags(LED_FLAG_EFFECTS); + } + } + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + + static void set_rgb_caps_leds() { + rgb_matrix_set_color(67, 0xFF, 0x0, 0x0); // Left side LED 1 + rgb_matrix_set_color(68, 0xFF, 0x0, 0x0); // Right side LED 1 + rgb_matrix_set_color(70, 0xFF, 0x0, 0x0); // Left side LED 2 + rgb_matrix_set_color(71, 0xFF, 0x0, 0x0); // Right side LED 2 + rgb_matrix_set_color(73, 0xFF, 0x0, 0x0); // Left side LED 3 + rgb_matrix_set_color(74, 0xFF, 0x0, 0x0); // Right side LED 3 + rgb_matrix_set_color(76, 0xFF, 0x0, 0x0); // Left side LED 4 + rgb_matrix_set_color(77, 0xFF, 0x0, 0x0); // Right side LED 4 + rgb_matrix_set_color(80, 0xFF, 0x0, 0x0); // Left side LED 5 + rgb_matrix_set_color(81, 0xFF, 0x0, 0x0); // Right side LED 5 + rgb_matrix_set_color(83, 0xFF, 0x0, 0x0); // Left side LED 6 + rgb_matrix_set_color(84, 0xFF, 0x0, 0x0); // Right side LED 6 + rgb_matrix_set_color(87, 0xFF, 0x0, 0x0); // Left side LED 7 + rgb_matrix_set_color(88, 0xFF, 0x0, 0x0); // Right side LED 7 + rgb_matrix_set_color(91, 0xFF, 0x0, 0x0); // Left side LED 8 + rgb_matrix_set_color(92, 0xFF, 0x0, 0x0); // Right side LED 8 + rgb_matrix_set_color(3, 0xFF, 0x0, 0x0); // CAPS LED + } + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/readme.md new file mode 100644 index 0000000000..8024e77cc1 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/readme.md @@ -0,0 +1,85 @@ +# GMMK Pro Standard Layout for macOS by zvuc + +As you may know, Glorious does not (yet) provide their Glorious Core software for macOS; so with stock firmware, there aren't any ways to customize layouts on the hardware level unless you turn to software-based override solutions such as [Karabiner Elements](https://karabiner-elements.pqrs.org/). This is my attempt to try to create the most macOS-like experience on the GMMK Pro, taking close notes from Apple's Magic Keyboard, also referencing code from other community keymaps. + +## Keymap +Layer 0 +<img width="1092" alt="Layer0" src="https://user-images.githubusercontent.com/2870726/132235505-64ac1c89-ecf9-49b5-a030-1d94389fc66d.png"> + +Layer 1 (Hold <kbd>Fn</kbd>) +<img width="1088" alt="Layer1" src="https://user-images.githubusercontent.com/2870726/133090831-5e84fb69-a8bf-463e-a8f6-f1f38a5901d6.png"> + +Layer 2 (Togglable alternative function row layout by pressing <kbd>Fn</kbd>+<kbd>F</kbd>) +<img width="1094" alt="Layer2" src="https://user-images.githubusercontent.com/2870726/133090841-0c6a8b16-bf46-4e6c-b8fa-79f213f95765.png"> + + +## Notable differences from stock key layout for Windows: +- <kbd>Delete</kbd> key placed right next to backspace (under rotary encoder) +- <kbd>F13</kbd> key for the bottommost row (Assign it to a shortcut you like in macOS preferences! [For example: "Emoji & Symbols" to bring up the emoji input popup instantly](https://user-images.githubusercontent.com/2870726/132237211-7e13c156-96a8-4a91-b215-28d310228feb.png)) +- <kbd>Eject</kbd> key for the last key in function row: Needed for macOS native global "Sleep" hotkey (<kbd>⌘</kbd><kbd>⌥</kbd><kbd>Eject</kbd>) + +## Notable Features +- VIA support +- Rotary Encoder support (Defaults to stock behavior Volume Up/Down) +- Standard order for macOS modifier keys: + * Left: <kbd>⌃ Control</kbd><kbd>⌥ Option</kbd><kbd>⌘ Command</kbd> + * Right: <kbd>⌘ Command</kbd><kbd>⌥ Option</kbd><kbd>Fn</kbd> +- Apple Magic Keyboard-like Function Row Mode (Toggle with <kbd>Fn</kbd>+<kbd>F</kbd>) + * <kbd>F1</kbd>: Decrease display brightness + * <kbd>F2</kbd>: Increase display brightness + * <kbd>F3</kbd>: Mission Control + * <kbd>F4</kbd>: Launchpad + * <kbd>F5</kbd>: Decrease keyboard backlight brightness + * <kbd>F6</kbd>: Increase keyboard backlight brightness + * <kbd>F7</kbd>: (none) + * <kbd>F8</kbd>: (none) + * <kbd>F9</kbd>: Media Rewind + * <kbd>F10</kbd>: Media Play/Pause + * <kbd>F11</kbd>: Media Fast Forward + * <kbd>F12</kbd>: (none) + +> #### NOTE +> - Media key mappings follow Apple Magic Keyboard except <kbd>F8</kbd> thru <kbd>F12</kbd>, where keys have been shifted by one to the right. It's because I wanted to get over the awkward gap between <kbd>F8</kbd> and <kbd>F9</kbd> that the GMMK Pro has—and also because we don't need dedicated keys for volume control when we have the more convenient rotary knob. +> - To access standard <kbd>F1</kbd> - <kbd>F12</kbd> keys, press the Function keys while holding <kbd>Fn</kbd>. +> - If you're planning to use Karabiner Elements, use the standard Function row mode (<kbd>F1</kbd> - <kbd>F12</kbd>) because Karabiner Elements always overrides function keys even if you want to just use simple or complex modifications, and it doesn't catch custom keys like Mission Control, Launchpad or <kbd>Eject</kbd>. (<kbd>Eject</kbd> is mapped as <kbd>F24</kbd> so you can replace it with 'Eject' within Karabiner.) + +## RGB Lighting +- Retains Glorious stock firmware key mappings for control + * <kbd>Fn</kbd><kbd>Up</kbd> / <kbd>Fn</kbd><kbd>Down</kbd>: Cycle presets + * <kbd>Fn</kbd><kbd>Left</kbd> / <kbd>Fn</kbd><kbd>Right</kbd>: Adjust speed + * <kbd>Fn</kbd><kbd>W</kbd> / <kbd>Fn</kbd><kbd>S</kbd>: Adjust brightness +- Quickly switch to popular presets: + * <kbd>Fn</kbd><kbd>`</kbd> : Solid color (no animation) + * <kbd>Fn</kbd><kbd>1</kbd> : Solid duotone (no animation) - <kbd>Shift</kbd><kbd>Knob</kbd> to change secondary color. + * <kbd>Fn</kbd><kbd>2</kbd> : Vertical gradient - <kbd>Shift</kbd><kbd>Knob</kbd> to change secondary color. + * <kbd>Fn</kbd><kbd>3</kbd> : "Jellybean Raindrops" + * <kbd>Fn</kbd><kbd>4</kbd> : Horizontal wipe with white backlight + * <kbd>Fn</kbd><kbd>5</kbd> : Horizontal wipe + * <kbd>Fn</kbd><kbd>6</kbd> : Single color pinwheel + * <kbd>Fn</kbd><kbd>7</kbd> : Horizontal rainbow + * <kbd>Fn</kbd><kbd>8</kbd> : Rainbow pinwheel + * <kbd>Fn</kbd><kbd>9</kbd> : Breathing + * <kbd>Fn</kbd><kbd>0</kbd> : Reactive (light up on keypress) + * <kbd>Fn</kbd><kbd>-</kbd> : "Digital Rain" + * <kbd>Fn</kbd><kbd>=</kbd> : "Heatmap" +- RGB turns off after 20 minutes of inactivity +- RGB turns off when USB is suspended / enters sleep +- <kbd>Caps Lock</kbd> toggle indicator (<kbd>Caps Lock</kbd> key and side lights will turn red) +- Easy RGB control using Rotary Encoder + - <kbd>Control</kbd>+<kbd>Rotate Knob</kbd>: Adjust hue + - <kbd>Option</kbd>+<kbd>Rotate Knob</kbd>: Adjust saturation + - <kbd>Command</kbd>+<kbd>Rotate Knob</kbd>: Adjust brightness + +> All latest QMK effects [(41 as of now)](https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#rgb-matrix-effects-id-rgb-matrix-effects) are enabled by default and will apply in order when cycling through using <kbd>Fn</kbd><kbd>Up</kbd> / <kbd>Fn</kbd><kbd>Down</kbd>. You can disable specific effects by uncommenting (remove the `//` at the beginning of line) respective lines (ex: `#define DISABLE_RGB_MATRIX_BREATHING`) in `qmk_firmware/keyboards/gmmk/pro/ansi/keymaps/zvuc/config.h` then recompiling the firmware. + +## Other Features +- 1000hz polling rate +- Short DEBOUNCE time (5 ms) +- Per-key debounce algorithm (`sym_defer_pk`) +- NKRO toggle (<kbd>Fn</kbd>+<kbd>N</kbd>) + +## Warning regarding VIA support +When observing this keyboard firmware in VIA, some custom-implemented keys such as Mission Control/Launchpad and RGB preset shortcuts appear as keycodes such as `0x5d62`. **These must not be modified!** There is no way to get their default functionality back unless you re-flash the firmware through QMK Toolbox. + +## Download pre-compiled firmware binary file +[Download BIN file from here](https://github.com/zvuc/qmk_firmware/releases/tag/zvuc-1.0.1) diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/rules.mk index 650c79fbdc..e9073d44a0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/rules.mk @@ -1,3 +1,4 @@ # Enable additional features. DEBOUNCE_TYPE = sym_defer_pk +VIA_ENABLE = yes diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/ansi.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c index b09af297b8..52c9dfdf99 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c @@ -18,7 +18,7 @@ #include "ansi.h" #ifdef RGB_MATRIX_ENABLE -led_config_t __flash g_led_config = {{ +led_config_t PROGMEM g_led_config = {{ { 4, NO_LED, NO_LED, 95, 65, 79, 5, 28 }, { 8, 2, 9, 0, 10, 75, 1, 7 }, { 14, 3, 15, NO_LED, 16, 86, 6, 13 }, diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/config.h index 26417b8234..26417b8234 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/helpers.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/helpers.c index f3f443cedb..f3f443cedb 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/helpers.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/helpers.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/keymap.c index f96be6ffe9..f96be6ffe9 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/keymap_helpers.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/keymap_helpers.h index 2a6e8dae7b..2a6e8dae7b 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/keymap_helpers.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/keymap_helpers.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/readme.md index f388a3fbf1..f388a3fbf1 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/rules.mk index 76e1674d58..76e1674d58 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mattgauf/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/.gitignore b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/.gitignore index 03b2b46668..03b2b46668 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/.gitignore +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/.gitignore diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/README.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/README.md index cb17239882..cb17239882 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/README.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/README.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h index 46719e3a78..46719e3a78 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/encoder.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/encoder.c index 049f4df7e4..049f4df7e4 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/encoder.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/encoder.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/encoder.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/encoder.h index 204922730e..204922730e 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/encoder.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/encoder.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/fun.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/fun.c index f553874eb0..f553874eb0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/fun.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/fun.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/keymap.c index 30c59e941d..30c59e941d 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/mike1808.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/mike1808.c index dda68fda2f..dda68fda2f 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/mike1808.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/mike1808.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/mike1808.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/mike1808.h index bc010108fb..bc010108fb 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/mike1808.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/mike1808.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/process_record.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/process_record.c index ac0164e73f..ac0164e73f 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/process_record.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/process_record.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/process_record.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/process_record.h index 1021751655..1021751655 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/process_record.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/process_record.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rgb_matrix_ledmaps.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rgb_matrix_ledmaps.c index 6f4d333ede..6f4d333ede 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rgb_matrix_ledmaps.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rgb_matrix_ledmaps.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rgb_matrix_ledmaps.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rgb_matrix_ledmaps.h index eace217d18..eace217d18 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rgb_matrix_ledmaps.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rgb_matrix_ledmaps.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rules.mk index a6d4e6259c..a6d4e6259c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/utils.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/utils.c index 35ae20b126..35ae20b126 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/utils.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/utils.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/mike1808/utils.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/utils.h index 49d0745cf8..49d0745cf8 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/mike1808/utils.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/utils.h diff --git a/keyboards/gmmk/pro/keymaps/moults31/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/moults31/keymap.c index 90ac428c74..90ac428c74 100644 --- a/keyboards/gmmk/pro/keymaps/moults31/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/moults31/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h index 4f83c6af1f..4f83c6af1f 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c index 5c702b1686..5c702b1686 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/paddlegame.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/paddlegame.h index 27df2dd703..27df2dd703 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/paddlegame.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/paddlegame.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/readme.md index c6da7f5f47..c6da7f5f47 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/rgb_matrix_map.h index 06d34ba6cb..06d34ba6cb 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/rgb_matrix_map.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/rules.mk index 925d8a5a55..a3f5bfd35c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/rules.mk @@ -1,4 +1,4 @@ MOUSEKEY_ENABLE = no -BOOTMAGIC_ENABLE = lite +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite RGB_MATRIX_ENABLE = yes ENCODER_ENABLE = yes diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h new file mode 100644 index 0000000000..78ff96f8b7 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h @@ -0,0 +1,75 @@ +/* Copyright 2021 stickandgum + * + * 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 + +// I like NKRO.. but let's not force it. @drashna pointed out some older hardware has issues - Toggle it via keycode if you like. +// #define FORCE_NKRO + +// At the time of this, there are 41 effects! That may be a bit too many to cycle through - keeping what I believe is the best. +#ifdef RGB_MATRIX_ENABLE + +// #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + +// Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state + #define RGB_DISABLE_WHEN_USB_SUSPENDED + + #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain + #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes + +// Soon we need to ENABLE modes by DEFAULT soon as per: https://github.com/qmk/qmk_firmware/pull/13758 Thanks @noroadsleft +// #undef ENABLE_RGB_MATRIX_SOLID_COLOR // BUILT IN (MAPPED!) Static single color. +// #undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Accenting various keys on the keyboard. +// #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Top down rainbow! +# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Left Right Rainbow (the top-down is better imho). + // #undef ENABLE_RGB_MATRIX_BREATHING // Built in (MAPPED!) + // #undef ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white) + // #undef ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black) +# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (RGB_MATRIX_CYCLE_PINWHEEL) +# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // See above +# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // See above + // #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black) +# undef ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow + // #undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // BUILT IN (MAPPED!) Full Rainbow Left to Right +# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom +# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center. +# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points. +# undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradent Chevron shapped scrolling left to right + // #undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // BUILT IN (MAPPED!) - Consider disabling this - my poor eyes. +# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard +# undef ENABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboards +# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON // Similar to above. +# undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enough of the spinning rainbows - we get it! :-) +# undef ENABLE_RGB_MATRIX_RAINDROPS // Jellybeans are better. + // #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation - better than above. +# undef ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back +# undef ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left +# undef ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right + // #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP // Hot keys! + // #undef ENABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix! +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black: wide slightly better imo +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Key hits shown in current hue - all other keys shifted hue + // #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (black otherwise) +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but a bit too intense imo. +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single color fade. +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-keys) +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades +# undef ENABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black. +# undef ENABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black. +# undef ENABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (Using solid_reactive_wide instead). +# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black. (Using solid_reactive_wide instead). +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/keymap.c index 762fe00df2..762fe00df2 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/readme.md index c4e2225433..c4e2225433 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/rules.mk index 6440dc6d41..6440dc6d41 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/stickandgum/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/rules.mk diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h new file mode 100644 index 0000000000..1cc3cdf228 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h @@ -0,0 +1,55 @@ +// Copyright 2021 a (@trwnh on Github) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_WHEN_USB_SUSPENDED + + #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain + #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes + + // #undef ENABLE_RGB_MATRIX_SOLID_COLOR // BUILT IN (MAPPED!) Static single color. + #undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Accenting various keys on the keyboard. + // #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Top down rainbow! + // #undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Left Right Rainbow (the top-down is better imho). + // #undef ENABLE_RGB_MATRIX_BREATHING // Built in (MAPPED!) + #undef ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white) + #undef ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black) + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (RGB_MATRIX_CYCLE_PINWHEEL) + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // See above + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // See above + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black) + #undef ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow + // #undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // BUILT IN (MAPPED!) Full Rainbow Left to Right + // #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom + // #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center. + // #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points. + #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradent Chevron shapped scrolling left to right + // #undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // BUILT IN (MAPPED!) - Consider disabling this - my poor eyes. + // #undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard + // #undef ENABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboards + // #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON // Similar to above. + // #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enough of the spinning rainbows - we get it! :-) + #undef ENABLE_RGB_MATRIX_RAINDROPS // Jellybeans are better. + #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation - better than above. + #undef ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back + #undef ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left + #undef ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right + #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Single hue fractal filled keys pulsing horizontally out to edges + #undef ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues + #undef ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues + #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP // Hot keys! + #undef ENABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix! + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black: wide slightly better imo + // #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Key hits shown in current hue - all other keys shifted hue + // #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (black otherwise) + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but a bit too intense imo. + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single color fade. + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-keys) + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades + // #undef ENABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black. + // #undef ENABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black. + // #undef ENABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (Using solid_reactive_wide instead). + // #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black. (Using solid_reactive_wide instead). +#endif
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/keymap.c new file mode 100644 index 0000000000..22288f2d2c --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/keymap.c @@ -0,0 +1,180 @@ +// Copyright 2021 a (@trwnh on Github) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// clang-format off +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_MUTE, + 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_KB_POWER, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, + _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, + _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCRL, + KC_MSTP, RGB_MOD, RGB_RMOD,_______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_APP, + KC_MPRV, KC_MPLY, KC_MNXT, QK_BOOT, MO(2), _______, _______, KC_HOME, KC_PGDN, KC_END + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN3, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_MS_U, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R + ), + + +}; + +#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRIGHTNESS_DOWN, KC_BRIGHTNESS_UP) }, + [2] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) }, +}; +#endif +// clang-format on + +// RGB led number layout, function of the key + +// 67, led 01 0, ESC 6, F1 12, F2 18, F3 23, F4 28, F5 34, F6 39, F7 44, F8 50, F9 56, F10 61, F11 66, F12 69, Prt Rotary(Mute) 68, led 12 +// 70, led 02 1, ~ 7, 1 13, 2 19, 3 24, 4 29, 5 35, 6 40, 7 45, 8 51, 9 57, 0 62, -_ 78, (=+) 85, BackSpc 72, Home 71, led 13 +// 73, led 03 2, Tab 8, Q 14, W 20. E 25, R 30, T 36, Y 41, U 46, I 52, O 58, P 63, [{ 89, ]} 93, \| 75, PgUp 74, led 14 +// 76, led 04 3, Caps 9, A 15, S 21, D 26, F 31, G 37, H 42, J 47, K 53, L 59, ;: 64, '" 96, Enter 86, PgDn 77, led 15 +// 80, led 05 4, Sh_L 10, Z 16, X 22, C 27, V 32, B 38, N 43, M 48, ,< 54, .< 60, /? 90, Sh_R 94, Up 82, End 81, led 16 +// 83, led 06 5, Ct_L 11,Win_L 17, Alt_L 33, SPACE 49, Alt_R 55, FN 65, Ct_R 95, Left 97, Down 79, Right 84, led 17 +// 87, led 07 88, led 18 +// 91, led 08 + +#ifdef RGB_MATRIX_ENABLE + static void set_rgb_caps_leds_on(void); + static void set_rgb_scroll_leds_on(void); + static void set_rgb_caps_leds_off(void); + static void set_rgb_scroll_leds_off(void); + + static void set_rgb_caps_leds_on() { + // Set alpha and capslock to red + + rgb_matrix_set_color( 3, 255, 0, 0); // Caps + + rgb_matrix_set_color( 8, 255, 0, 0); // Q + rgb_matrix_set_color(14, 255, 0, 0); // W + rgb_matrix_set_color(20, 255, 0, 0); // E + rgb_matrix_set_color(25, 255, 0, 0); // R + rgb_matrix_set_color(30, 255, 0, 0); // T + rgb_matrix_set_color(36, 255, 0, 0); // Y + rgb_matrix_set_color(41, 255, 0, 0); // U + rgb_matrix_set_color(46, 255, 0, 0); // I + rgb_matrix_set_color(52, 255, 0, 0); // O + rgb_matrix_set_color(58, 255, 0, 0); // P + + rgb_matrix_set_color( 9, 255, 0, 0); // A + rgb_matrix_set_color(15, 255, 0, 0); // S + rgb_matrix_set_color(21, 255, 0, 0); // D + rgb_matrix_set_color(26, 255, 0, 0); // F + rgb_matrix_set_color(31, 255, 0, 0); // G + rgb_matrix_set_color(37, 255, 0, 0); // H + rgb_matrix_set_color(42, 255, 0, 0); // J + rgb_matrix_set_color(47, 255, 0, 0); // K + rgb_matrix_set_color(53, 255, 0, 0); // L + + rgb_matrix_set_color(10, 255, 0, 0); // Z + rgb_matrix_set_color(16, 255, 0, 0); // X + rgb_matrix_set_color(22, 255, 0, 0); // C + rgb_matrix_set_color(27, 255, 0, 0); // V + rgb_matrix_set_color(32, 255, 0, 0); // B + rgb_matrix_set_color(38, 255, 0, 0); // N + rgb_matrix_set_color(43, 255, 0, 0); // M + } + + static void set_rgb_caps_leds_off() { + // Set alpha and capslock to black + + rgb_matrix_set_color( 3, 0, 0, 0); // Caps + + rgb_matrix_set_color( 8, 0, 0, 0); // Q + rgb_matrix_set_color(14, 0, 0, 0); // W + rgb_matrix_set_color(20, 0, 0, 0); // E + rgb_matrix_set_color(25, 0, 0, 0); // R + rgb_matrix_set_color(30, 0, 0, 0); // T + rgb_matrix_set_color(36, 0, 0, 0); // Y + rgb_matrix_set_color(41, 0, 0, 0); // U + rgb_matrix_set_color(46, 0, 0, 0); // I + rgb_matrix_set_color(52, 0, 0, 0); // O + rgb_matrix_set_color(58, 0, 0, 0); // P + + rgb_matrix_set_color( 9, 0, 0, 0); // A + rgb_matrix_set_color(15, 0, 0, 0); // S + rgb_matrix_set_color(21, 0, 0, 0); // D + rgb_matrix_set_color(26, 0, 0, 0); // F + rgb_matrix_set_color(31, 0, 0, 0); // G + rgb_matrix_set_color(37, 0, 0, 0); // H + rgb_matrix_set_color(42, 0, 0, 0); // J + rgb_matrix_set_color(47, 0, 0, 0); // K + rgb_matrix_set_color(53, 0, 0, 0); // L + + rgb_matrix_set_color(10, 0, 0, 0); // Z + rgb_matrix_set_color(16, 0, 0, 0); // X + rgb_matrix_set_color(22, 0, 0, 0); // C + rgb_matrix_set_color(27, 0, 0, 0); // V + rgb_matrix_set_color(32, 0, 0, 0); // B + rgb_matrix_set_color(38, 0, 0, 0); // N + rgb_matrix_set_color(43, 0, 0, 0); // M + } + + static void set_rgb_scroll_leds_on() { + rgb_matrix_set_color(72, 255, 255, 255); // Under Rotary (HOME) + } + + static void set_rgb_scroll_leds_off() { + rgb_matrix_set_color(72, 0, 0, 0); // Under Rotary (HOME) + } + + void rgb_matrix_indicators_user(void) { + // Left side rainbow + rgb_matrix_set_color(67, 255, 0, 0); // Left LED 01 + rgb_matrix_set_color(70, 255, 127, 0); // Left LED 02 + rgb_matrix_set_color(73, 255, 255, 0); // Left LED 03 + rgb_matrix_set_color(76, 0, 255, 0); // Left LED 04 + rgb_matrix_set_color(80, 0, 0, 255); // Left LED 05 + rgb_matrix_set_color(83, 46, 43, 95); // Left LED 06 + rgb_matrix_set_color(87, 139, 0, 255); // Left LED 07 + rgb_matrix_set_color(91, 255, 255, 255); // Left LED 08 + + // Right side rainbow + rgb_matrix_set_color(68, 255, 0, 0); // Right LED 12 + rgb_matrix_set_color(71, 255, 127, 0); // Right LED 13 + rgb_matrix_set_color(74, 255, 255, 0); // Right LED 14 + rgb_matrix_set_color(77, 0, 255, 0); // Right LED 15 + rgb_matrix_set_color(81, 0, 0, 255); // Right LED 16 + rgb_matrix_set_color(84, 46, 43, 95); // Right LED 17 + rgb_matrix_set_color(88, 139, 0, 255); // Right LED 18 + rgb_matrix_set_color(92, 255, 255, 255); // Right LED 19 + + if (host_keyboard_led_state().caps_lock) { + set_rgb_caps_leds_on(); + } else { + if (rgb_matrix_get_flags() == LED_FLAG_NONE){ + set_rgb_caps_leds_off(); + } + } + if (host_keyboard_led_state().scroll_lock) { + set_rgb_scroll_leds_on(); + } else { + if (rgb_matrix_get_flags() == LED_FLAG_NONE){ + set_rgb_scroll_leds_off(); + } + } + } + +#endif // RGB_MATRIX_ENABLE
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/readme.md new file mode 100644 index 0000000000..12be0cdcc3 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/readme.md @@ -0,0 +1,91 @@ +### features + +- via enable +- rgb matrix reactive and animation modes enabled +- disable rgb when usb is suspended +- mouse control + - fn+ralt+arrow keys to move + - fn+ralt+enter = left click + - fn+ralt+rshift = right click + - fn+ralt+rotary = scroll up/down (click for middle click) +- fn+n = toggle n key rollover + +### changes + +- fn+space to reset (instead of fn+backslash) +- fn+del = ins +- fn+pgup = pause/break (brightness up on macos) +- fn+pgdn = scroll lock (brightness down on macos) +- fn+end = app menu +- lower left mod key cluster = media controls + - fn+lctrl = prev + - fn+lsuper = play/pause + - fn+lalt = next + - fn+lshift = stop +- function keys = 2nd row function keys + - fn+f1 = f13 + - fn+f2 = f14 + - ... + - fn+f12 = f24 +- fn + arrow keys used for nav + - fn + left = home + - fn + right = end + - fn + up = page up + - fn + down = page down +- rgb control moved to qwer/asdf + z/x + t + - fn+q/a = hue increase/decrease + - fn+w/s = saturation increase/decrease + - fn+e/d = value increase/decrease + - fn+r/f = speed increase/decrease + - fn+z = rgb mode forward + - fn+x = rgb mode reverse + - fn+t = rgb toggle + +### rgb effects enabled + +sidebars are constant rainbow. alpha and capslock turn red when caps is on + +- solid color +- rainbow gradient + - gradient up down + - gradient left right +- breathing +- rainbow cycles + - cycle all + - cycle left right + - cycle up down + - cycle out in + - cycle out in dual + - cycle pinwheel + - cycle spiral + - rainbow beacon + - rainbow pinwheels +- reactive + - splash + - multisplash + - solid splash + - solid multisplash + +### layers + +source code for keyboard layout editor images here: https://gist.github.com/trwnh/94e48f132c49043373918df29409ab48 + +#### layer 0 + +![](https://i.imgur.com/P1hSkZT.png) + +#### layer 1 + +![](https://i.imgur.com/qqiObxP.png) + +#### layer 2 + +![](https://i.imgur.com/W0i1D0C.png) + +### misc + +i am taking suggestions for possible improvements to this keymap; you may contact me via the following + +- email: mailto:a@trwnh.com +- chat: xmpp:a@trwnh.com +- fediverse: https://mastodon.social/@trwnh
\ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/rules.mk new file mode 100644 index 0000000000..4253f570f0 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes
\ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/via/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/via/keymap.c index 9b13f75a85..1f59b52999 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/via/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/via/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI // if that's your preference. @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI @@ -84,6 +84,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } else { tap_code(KC_VOLD); } - return true; + return false; } #endif // ENCODER_ENABLE diff --git a/keyboards/gmmk/pro/ansi/keymaps/via/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/via/rules.mk index 1e5b99807c..1e5b99807c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/via/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/via/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/wholesomeducky/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/wholesomeducky/keymap.c index fded532562..fded532562 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/wholesomeducky/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/wholesomeducky/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/keymap.c index a32fef1041..a32fef1041 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.json b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/keymap.json index d2325d2c13..d2325d2c13 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.json +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/keymap.json diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/readme.md index 1c169faac6..1c169faac6 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/willwm/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/rules.mk index 511b50e19c..511b50e19c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/willwm/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/willwm/rules.mk diff --git a/keyboards/gmmk/pro/ansi/readme.md b/keyboards/gmmk/pro/rev1/ansi/readme.md index 9800aef88e..c6721b026a 100644 --- a/keyboards/gmmk/pro/ansi/readme.md +++ b/keyboards/gmmk/pro/rev1/ansi/readme.md @@ -8,11 +8,11 @@ A tenkeyless 75% keyboard made and sold by Glorious LLC. Equipped with the STM32 Make example for this keyboard (after setting up your build environment): - make gmmk/pro/ansi:default + make gmmk/pro/rev1/ansi:default Flashing example for this keyboard: - make gmmk/pro/ansi:default:flash + make gmmk/pro/rev1/ansi:default:flash To reset the board into bootloader mode, do one of the following: diff --git a/keyboards/gmmk/pro/ansi/rules.mk b/keyboards/gmmk/pro/rev1/ansi/rules.mk index ee84c48723..d3afa4d432 100644 --- a/keyboards/gmmk/pro/ansi/rules.mk +++ b/keyboards/gmmk/pro/rev1/ansi/rules.mk @@ -7,15 +7,12 @@ BOOTLOADER = stm32-dfu # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output diff --git a/keyboards/gmmk/pro/rev1/config.h b/keyboards/gmmk/pro/rev1/config.h new file mode 100644 index 0000000000..9ece2e2c6c --- /dev/null +++ b/keyboards/gmmk/pro/rev1/config.h @@ -0,0 +1,22 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + * + * 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 + +#include "config_common.h" + +/* SPI Config for LED Driver */ +#define SPI_DRIVER SPID1 diff --git a/keyboards/gmmk/pro/rev1/halconf.h b/keyboards/gmmk/pro/rev1/halconf.h new file mode 100644 index 0000000000..8d9b60c234 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/halconf.h @@ -0,0 +1,23 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next <halconf.h> diff --git a/keyboards/gmmk/pro/iso/config.h b/keyboards/gmmk/pro/rev1/iso/config.h index 26626ccfc1..26626ccfc1 100644 --- a/keyboards/gmmk/pro/iso/config.h +++ b/keyboards/gmmk/pro/rev1/iso/config.h diff --git a/keyboards/gmmk/pro/iso/info.json b/keyboards/gmmk/pro/rev1/iso/info.json index 32fac89336..32fac89336 100644 --- a/keyboards/gmmk/pro/iso/info.json +++ b/keyboards/gmmk/pro/rev1/iso/info.json diff --git a/keyboards/gmmk/pro/iso/iso.c b/keyboards/gmmk/pro/rev1/iso/iso.c index fa57f1ca92..fa57f1ca92 100644 --- a/keyboards/gmmk/pro/iso/iso.c +++ b/keyboards/gmmk/pro/rev1/iso/iso.c diff --git a/keyboards/gmmk/pro/iso/iso.h b/keyboards/gmmk/pro/rev1/iso/iso.h index 353bcbe875..353bcbe875 100644 --- a/keyboards/gmmk/pro/iso/iso.h +++ b/keyboards/gmmk/pro/rev1/iso/iso.h diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c new file mode 100644 index 0000000000..84fbcf37ff --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c @@ -0,0 +1,106 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +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 + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] PgUp +// Caps A S D F G H J K L ; " # Enter PgDn +// Sh_L / Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [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_HOME, KC_MUTE, + 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_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_NUHS, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_PSCR, _______, + _______, RGB_TOG, RGB_M_P, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, + _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + +}; +// clang-format on + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return false; +} +#endif + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + static uint32_t cycle_led_timer = 0; + static uint8_t current_value = 0; + static uint8_t left_side_leds[8] = {68, 71, 74, 77, 81, 84, 88, 92}; + static uint8_t right_side_leds[8] = {69, 72, 75, 78, 82, 85, 89, 93}; + + if (host_keyboard_led_state().caps_lock) { + if (timer_elapsed32(cycle_led_timer) > 500) { + current_value = current_value == 0 ? 255 : 0; + cycle_led_timer = timer_read32(); + } + HSV tempHSV = {.h = 0, .s = 255, .v = current_value}; + RGB tempRGB = hsv_to_rgb(tempHSV); + for (uint8_t i = 0; i < sizeof(left_side_leds) / sizeof(left_side_leds[0]); i++) { + rgb_matrix_set_color(left_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); + rgb_matrix_set_color(right_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); + } + } + + static uint8_t l2_functions[26] = {6, 7, 8, 12, 13, 14, 15, 16, 18, 23, 28, 34, 38, 39, 44, 50, 56, 61, 66, 70, 80, 86, 94, 95, 96, 98}; + switch(get_highest_layer(layer_state)){ // special handling per layer + case 2: //layer one + break; + case 1: + for (uint8_t i = 0; i < sizeof(l2_functions) / sizeof(l2_functions[0]); i++) { + RGB_MATRIX_INDICATOR_SET_COLOR(l2_functions[i], 255, 0, 0); + } + break; + default: + break; + break; + } +} diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md new file mode 100644 index 0000000000..da66c447ad --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md @@ -0,0 +1,8 @@ +# chofstede GMMK Pro layout + +- Added Print-Screen to FN+POS1 +- Added Insert to FN+# +- The LED bars on the left and right side of the keyboard blink red when CAPS Lock is enabled +- All mapped keys light up red when FN is being pressed + + diff --git a/keyboards/gmmk/pro/iso/keymaps/default/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/default/keymap.c index 67b95c755f..0aedb78285 100644 --- a/keyboards/gmmk/pro/iso/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/default/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI // if that's your preference. @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, - _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, @@ -67,6 +67,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } else { tap_code(KC_VOLD); } - return true; + return false; } #endif diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/config.h b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/config.h new file mode 100644 index 0000000000..fa7ebec7e5 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/config.h @@ -0,0 +1,39 @@ +/* Copyright 2021 Jonavin Eng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define TAPPING_TOGGLE 2 +// TT set to two taps + +/* Handle GRAVESC combo keys */ +#define GRAVE_ESC_ALT_OVERRIDE + //Always send Escape if Alt is pressed +#define GRAVE_ESC_CTRL_OVERRIDE + //Always send Escape if Control is pressed + +#define TAPPING_TERM 180 + +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR +# define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif + +// add fifth layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable +#if defined COLEMAK_LAYER_ENABLE +# define DYNAMIC_KEYMAP_LAYER_COUNT 5 +# define _COLEMAK 4 +#endif // COLEMAK_LAYER_ENABLE diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/keymap.c new file mode 100644 index 0000000000..3164ecbf68 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/keymap.c @@ -0,0 +1,191 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 Jonavin + Copyright 2022 RustyBrakes (ISO conversion) + +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 +#include "rgb_matrix_map.h" +#include "jonavin.h" + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Ins Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] PgUp +// Caps A S D F G H J K L ; " # Enter PgDn +// Sh_L \ Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_MUTE, + 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_PGUP, + TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, KC_HOME, + KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, RESET, RGB_NITE,RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + [_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PDOT, _______, _______, KC_HOME, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_P1, KC_P2, KC_P3, KC_NO, KC_PAST, _______, KC_PENT, KC_END, + _______, _______, KC_NO, KC_DEL, KC_INS, KC_NO, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, RCTL(KC_PGUP), _______, + _______, _______, _______, KC_BSPC, _______, _______, _______, RCTL(KC_LEFT), RCTL(KC_PGDN), RCTL(KC_RIGHT) + ), + +#ifdef COLEMAK_LAYER_ENABLE + [_COLEMAK] = 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_INS, KC_MUTE, + 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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_PGUP, + TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), +#endif // COLEMAK_LAYER_ENABLE +}; + +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults + void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); + } + + bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch(get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; + } + } + return true; + } +#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE + +#ifdef RGB_MATRIX_ENABLE + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L1, RGB_GREEN); + rgb_matrix_set_color(LED_L2, RGB_GREEN); + } + + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF + rgb_matrix_set_color(LED_L3, RGB_MAGENTA); + rgb_matrix_set_color(LED_L4, RGB_MAGENTA); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_L3, RGB_MAGENTA); + rgb_matrix_set_color(LED_L4, RGB_MAGENTA); + } + #endif // INVERT_NUMLOCK_INDICATOR + + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color(LED_L5, RGB_RED); + rgb_matrix_set_color(LED_L6, RGB_RED); + rgb_matrix_set_color(LED_L7, RGB_RED); + } + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled + } + switch(get_highest_layer(layer_state)){ // special handling per layer + case _FN1: // on Fn layer select what the encoder does when pressed + rgb_matrix_set_color(LED_R2, RGB_RED); + rgb_matrix_set_color(LED_R3, RGB_RED); + rgb_matrix_set_color(LED_R4, RGB_RED); + rgb_matrix_set_color(LED_FN, RGB_RED); //FN key + + // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code + uint16_t timeout_threshold = get_timeout_threshold(); + if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_RED); + else if (timeout_threshold < 140) { + rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_RED); + } else { // >= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_RED); + } + break; + case _LOWER: + for (uint8_t i=0; i<ARRAYSIZE(LED_LIST_NUMPAD); i++) { + rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_MAGENTA); + } + rgb_matrix_set_color(LED_R4, RGB_MAGENTA); + rgb_matrix_set_color(LED_R5, RGB_MAGENTA); + rgb_matrix_set_color(LED_R6, RGB_MAGENTA); + break; + case _RAISE: + rgb_matrix_set_color(LED_R6, RGB_GREEN); + rgb_matrix_set_color(LED_R7, RGB_GREEN); + rgb_matrix_set_color(LED_R8, RGB_GREEN); + break; +#ifdef COLEMAK_LAYER_ENABLE + case _COLEMAK: + for (uint8_t i=0; i<ARRAYSIZE(LED_SIDE_RIGHT); i++) { + rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_BLUE); + } + break; +#endif + default: + break; + } + } +#endif + + +void keyboard_post_init_keymap(void) { + // keyboard_post_init_user() moved to userspace + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_set_color_all(RGB_NAUTILUS); // Default startup colour + activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle + #endif +} diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/readme.md new file mode 100644 index 0000000000..f94a5eabbd --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/readme.md @@ -0,0 +1,53 @@ +# jonavin's GMMK Pro ISO layout +# Thanks to RustyBrakes for the keymap adjustments and ISO Layout testing + +- Add Fn layer keys from Glorious Core mapping that's missing in the default qmk mapping +- Add PrtScr, Scroll Lock, Break, NumLock to Fn layer +- Implement Win key lock using Fn+Win like in Glorious Core firmware +- Layer 2 mod on Caps Lock with double-tap to switch to this layer, double tap to switch back +- Layer 2 provides arrows on WASD and additional nav keys + right hand numpad with 00; an be used for Alt Code entry +- Layer 2 left spacebar Backspace +- add double tap of Left Shift to toggle Caps Lock +- additional encoder functionality + - FN Layer - change rgb idle timeout + - holding Left shift, change layers + - holding right shift, Navigate page up/down + - holding Left Ctrl, navigate prev/next word + - holding Right Ctrl, changes RGB hue/colour + - holding Left Alt, change media prev/next track + - default is change volume + +- LED/RGB Functionality + - RGB idle timeout (default 5 minutes) + - Can be changed in FN layer with < and > or encoder + - setting to zero disables timeout + - indicators in FN layer using RGB in FN and number rows to show the timeout in minutes + - LED address location map as enum definition in rgb_matrix_map.h + - LED group lists for arrows, numpad, F row, num row, left and right side LEDs + - default startup in single mode with default colour + - Capslock, Scroll Lock, and Num Lock (not set) indicator on left side LED + - Layer indicator on right side LED + - Fn key light up red when Fn layer activate + - Win Key light up red when Win Lock mode enabled + - Layer 2 activation lights up Numpad area + - Fn + Z to turn off all RGB lights except rgb indicators; press again to toggle + +rules.mk OPTIONS - Active features from userspace +STARTUP_NUMLOCK_ON = yes + - turns on NUMLOCK by default + +ENCODER_DEFAULTACTIONS_ENABLE = yes + - Enabled default encoder funtions + +TD_LSFT_CAPSLOCK_ENABLE = yes + - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS + +IDLE_TIMEOUT_ENABLE = yes + - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically + +INVERT_NUMLOCK_INDICATOR + - inverts the Num lock indicator, LED is on when num lokc is off + +COLEMAK_LAYER_ENABLE = yes + - Enabled optional 5th layer for COLEMAK layout + - Use Shift and encoder to enter 5th layer, right led indicator lights up BLUE diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rgb_matrix_map.h new file mode 100644 index 0000000000..1aa31f2a0f --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rgb_matrix_map.h @@ -0,0 +1,146 @@ +/* Copyright 2021 Jonavin Eng + * Copyright 2022 RustyBrakes (ISO conversion) + * + * 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/>. + */ + +#ifdef RGB_MATRIX_ENABLE + + // Custom RGB Colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Naurilus Font colours + + // RGB LED locations + enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, `, k16 + LEB_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, /, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_BSLS, // 67, \, k23 + LED_L1, // 68, LED, l01 + LED_R1, // 69, LED, l11 + LED_PRT, // 70, Prt, k97 + LED_L2, // 71, LED, l02 + LED_R2, // 72, LED, l12 + LED_DEL, // 73, Del, k65 + LED_L3, // 74, LED, l03 + LED_R3, // 75, LED, l13 + LED_PGUP, // 76, PgUp, k15 + LED_L4, // 77, LED, l04 + LED_R4, // 78, LED, l14 + LED_EQL, // 79, =, k66 + LED_RIGHT, // 80, Right, k05 + LED_L5, // 81, LED, l05 + LED_R5, // 82, LED, l15 + LED_END, // 83, End, k75 + LED_L6, // 84, LED, l06 + LED_R6, // 85, LED, l16 + LED_BSPC, // 86, BSpc, ka1 + LED_PGDN, // 87, PgDn, k25 + LED_L7, // 88, LED, l07 + LED_R7, // 89, LED, l17 + LED_RBRC, // 90, ], k61 + LED_RSFT, // 91, Sh_R, k91 + LED_L8, // 92, LED, l08 + LED_R8, // 93, LED, l18 + LED_UP, // 94, Up, k35 + LED_HASH, // 95, #, k84 + LED_LEFT, // 96, Left, k03 + LED_ENT, // 97, Enter, ka4 + LED_DOWN // 98, Down, k73 + }; + + const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; + + const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; + + const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_PRT}; + + const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_DEL}; + + const uint8_t LED_LIST_NUMPAD[] = { + LED_7, LED_8, LED_9, + LED_U, LED_I, LED_O, + LED_J, LED_K, LED_L, + LED_M, LED_COMM, LED_DOT + }; + + const uint8_t LED_SIDE_LEFT[] = { LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8}; + + const uint8_t LED_SIDE_RIGHT[] = { LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7, LED_R8}; + +#endif diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rules.mk b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rules.mk new file mode 100644 index 0000000000..1ffc2058a2 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin/rules.mk @@ -0,0 +1,12 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite + +TD_LSFT_CAPSLOCK_ENABLE = yes +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes +ENCODER_DEFAULTACTIONS_ENABLE = no + +COLEMAK_LAYER_ENABLE = yes #Enable Colemak layer / set to no to disable +INVERT_NUMLOCK_INDICATOR = yes diff --git a/keyboards/gmmk/pro/iso/keymaps/via/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/via/keymap.c index c83af17fe1..7d0693c18c 100644 --- a/keyboards/gmmk/pro/iso/keymaps/via/keymap.c +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/via/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI // if that's your preference. @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, - _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, @@ -86,6 +86,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } else { tap_code(KC_VOLD); } - return true; + return false; } #endif // ENCODER_ENABLE diff --git a/keyboards/gmmk/pro/iso/keymaps/via/rules.mk b/keyboards/gmmk/pro/rev1/iso/keymaps/via/rules.mk index 1e5b99807c..1e5b99807c 100644 --- a/keyboards/gmmk/pro/iso/keymaps/via/rules.mk +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/via/rules.mk diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/config.h b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/config.h new file mode 100644 index 0000000000..fd8f1d6859 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/config.h @@ -0,0 +1,20 @@ +// Copyright 2021 Victor Toni (@vitoni) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#if defined(RGB_MATRIX_ENABLE) + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + // number of milliseconds to wait until turning off RGB automatically + #define RGB_DISABLE_TIMEOUT 300000 // 300 seconds / 5 min + // start fading out before getting disabled + // fading out is timed (depending on the rgb_matrix_config.speed) to have finished before reaching RGB_DISABLE_TIMEOUT + #define RGB_DISABLE_WITH_FADE_OUT + #define RGB_DISABLE_WHEN_USB_SUSPENDED + // number of milliseconds to wait until activating RGB idle effects + #define RGB_IDLE_TIMEOUT 4500 // 4.5 seconds + // activate breathe effect when idle + #define RGB_IDLE_BREATHE + // fade in when we have been suspended + #define RGB_FADE_IN +#endif diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/keymap.c new file mode 100644 index 0000000000..d5b64c153a --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/keymap.c @@ -0,0 +1,148 @@ +// Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>, +// Copyright 2021 Victor Toni (@vitoni) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +#include "vitoni.h" + +enum layer_names { + _BASE, + _MOV, + _RGB +}; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] PgUp +// Caps A S D F G H J K L ; " # Enter PgDn +// Sh_L / Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press CAPS+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + 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_PGUP, + MO(_MOV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TG(_RGB),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_MOV] = LAYOUT( + RESET, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), + + [_RGB] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_SPD, + _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI + ), + +}; +// clang-format on + +#if defined(ENCODER_ENABLE) +bool encoder_update_user(uint8_t index, bool clockwise) { + switch (get_highest_layer(layer_state)) { + case _MOV: + if (clockwise) { + tap_code16(C(KC_TAB)); + } else { + tap_code16(S(C(KC_TAB))); + } + break; +#if defined(RGB_MATRIX_ENABLE) + case _RGB: + if (clockwise) { + rgb_matrix_increase_val_noeeprom(); + } else { + rgb_matrix_decrease_val_noeeprom(); + } + break; +#endif // RGB_MATRIX_ENABLE + default: + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + } + return true; +} +#endif // ENCODER_ENABLE + +#if defined(RGB_MATRIX_ENABLE) +/* +* Set up default RGB color. +*/ +void rgb_matrix_set_default_color(void) { + rgb_matrix_sethsv_noeeprom_user(HSV_CHARTREUSE); +} + +/* +* Set up RGB defaults. +*/ +void rgb_matrix_configure_default_settings(void) { + rgb_matrix_set_default_color(); +} + +void keyboard_post_init_user(void) { + rgb_matrix_enable_noeeprom(); + rgb_matrix_configure_default_settings(); +} + +/* +* Use RGB underglow to indicate specific layers. +*/ +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + case _MOV: + rgb_matrix_sethsv_noeeprom_user(HSV_SPRINGGREEN); + break; + case _RGB: + rgb_matrix_sethsv_noeeprom_user(HSV_GREEN); + break; + default: // for any other layer + rgb_matrix_set_default_color(); + break; + } + return state; +} + +void matrix_scan_user(void) { + matrix_scan_user_rgb(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user_rgb(keycode, record)) { + return false; + } + + switch (keycode) { + case RESET: // when activating RESET mode for flashing + if (record->event.pressed) { + rgb_matrix_set_color_all(63, 0, 0); + rgb_matrix_driver.flush(); + } + return true; + } + return true; // Process all other keycodes normally +} +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/readme.adoc b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/readme.adoc new file mode 100644 index 0000000000..38a74a568b --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/readme.adoc @@ -0,0 +1,104 @@ += ViToni's keymap for GMMK Pro ISO + +== Layout +Based on the stock layout but making use of CAPS as FN similar to laptop keyboards. +This frees up the left row for other uses (although not remapped yet). +Since both Delete and Insert are used for coding they are part of the CAPS layer as well. + +The differences are as follows: + +=== Layer 0 (`_BASE`) +Mostly stock + CAPS goes to layer `_MOV`. +FN toggles the layer `_RGB`. + +=== Layer 1 (`_MOV`), accessed by pressing `CAPS` on layer `_BASE` +[%header] +|=== +| Key / Action | Mapped to +| ESC | _RESET_ +| F1 | KC_MYCM +| F2 | KC_WHOM +| F3 | KC_CALC +| F4 | KC_MSEL +| F5 | KC_MPRV +| F6 | KC_MPLY +| F7 | KC_MSTP +| F8 | KC_MNXT +| F9 | KC_MUTE +| F10 | KC_VOLD +| F11 | KC_VOLU +| N | NK_TOGG +| Delete | Insert +| Left | Home +| Right | End +| Up | PgUp +| Down | PgDn +|=== + +=== Layer 2 (`_RGB`), accessed by pressing `FN` on layer `_BASE` +Revamped the stock FN layer to focus on RGB only. + +[%header] +|=== +| Key / Action | Mapped to +| Knob clockwise | Value/Brightness up +| Knob anti-clockwise | Value/Brightness down +| Backspace | _RESET_ +| Enter | RGB_TOG +| Del | RGB_MOD +| PgUp | RGB_RMOD +| PgDn | RGB_SPI +| End | RGB_SPD +| Left | RGB_HUD +| Right | RGB_HUI +| Up | RGB_SAI +| Down | RGB_SAD +|=== + +No other changes have been made. + +== RGB light + +The code customizing RGB light usage is decribed here: + +* link:../../../../../../users/vitoni/readme.adoc[/users/vitoni/readme.adoc] + +When using `RGB_DISABLE_TIMEOUT` addtional options are available: + +* `RGB_FADE_IN` makes the RGB lights fade in instead of setting the value/brightness to 100% (implicitly due to HSV including the brightness) when resuming after RGB lights have been turned off. +Fade in occurs when the keyboard is initialized and when the RGB brightness has been changed (e.g. suspending, fade out, etc.). +* `RGB_DISABLE_WITH_FADE_OUT` activates fade out before the keyboard is disabled by `RGB_DISABLE_TIMEOUT`. + +Parameters used to define the behavior are: +[%header] +|=== +|Key | Default | Description + +| RGB_MATRIX_MAXIMUM_BRIGHTNESS +| 200 (<= UNIT8_MAX) +| Maximum assumed value for brightness. +Used to calculate lead time for fade out before suspend timeout. + +|=== + +`RGB_IDLE_TIMEOUT` enables fading out after being idle for the defined time and allows +* `RGB_IDLE_BREATHE` also activates a brethe effect while idling. + +[%header] +|=== +|Key | Default | Description + +|RGB_IDLE_TIMEOUT +|4500 +|Time in milliseconds without activity before considered to be idle. + +|RGB_IDLE_MINIMUM_BRIGHTNESS +|`RGB_MATRIX_MAXIMUM_BRIGHTNESS` / 5 +|Brightness value RGB is dimmed to when starting to idle. + +When breathing used as the lower bound of the brightness value. + +|RGB_IDLE_MAXIMUM_BRIGHTNESS +|`RGB_MATRIX_MAXIMUM_BRIGHTNESS` * 2/5 +|Upper bound of brightness value of the RGB light while breathing. + +|=== diff --git a/keyboards/gmmk/pro/iso/readme.md b/keyboards/gmmk/pro/rev1/iso/readme.md index 62dbee5d0f..50601a79ce 100644 --- a/keyboards/gmmk/pro/iso/readme.md +++ b/keyboards/gmmk/pro/rev1/iso/readme.md @@ -8,11 +8,11 @@ A tenkeyless 75% keyboard made and sold by Glorious LLC. Equipped with the STM32 Make example for this keyboard (after setting up your build environment): - make gmmk/pro/iso:default + make gmmk/pro/rev1/iso:default Flashing example for this keyboard: - make gmmk/pro/iso:default:flash + make gmmk/pro/rev1/iso:default:flash To reset the board into bootloader mode, do one of the following: diff --git a/keyboards/gmmk/pro/iso/rules.mk b/keyboards/gmmk/pro/rev1/iso/rules.mk index ee84c48723..d3afa4d432 100644 --- a/keyboards/gmmk/pro/iso/rules.mk +++ b/keyboards/gmmk/pro/rev1/iso/rules.mk @@ -7,15 +7,12 @@ BOOTLOADER = stm32-dfu # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output diff --git a/keyboards/gmmk/pro/rev1/mcuconf.h b/keyboards/gmmk/pro/rev1/mcuconf.h new file mode 100644 index 0000000000..48eb8be9d8 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + * + * 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 + +#include_next <mcuconf.h> + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE |