From 7bb54c0dbd59775356a76ca6ce1286cd138b75e7 Mon Sep 17 00:00:00 2001 From: Joy Date: Thu, 14 Apr 2022 13:51:54 +0800 Subject: [PATCH 1/2] Update form develop branch --- builddefs/bootloader.mk | 4 + builddefs/mcu_selection.mk | 1 - .../{ => rev1}/ansi/keymaps/cedrikl/keymap.c | 0 .../ansi/keymaps/cedrikl/rgb_matrix_map.h | 0 .../{ => rev1}/ansi/keymaps/cedrikl/rules.mk | 0 .../rev1/ansi/keymaps/lalitmaganti/config.h | 19 + .../rev1/ansi/keymaps/lalitmaganti/keymap.c | 91 ++++ .../rev1/ansi/keymaps/lalitmaganti/rules.mk | 1 + .../{ => rev1}/ansi/keymaps/macos/config.h | 0 .../{ => rev1}/ansi/keymaps/macos/keymap.c | 0 .../{ => rev1}/ansi/keymaps/macos/readme.md | 0 .../{ => rev1}/ansi/keymaps/macos/rules.mk | 0 .../{ => rev1}/iso/keymaps/chofstede/keymap.c | 0 .../iso/keymaps/chofstede/readme.md | 0 .../{ => rev1}/iso/keymaps/vitoni/config.h | 0 .../{ => rev1}/iso/keymaps/vitoni/keymap.c | 0 .../{ => rev1}/iso/keymaps/vitoni/readme.adoc | 0 .../pro/rev2/ansi/keymaps/andrebrait/keymap.c | 175 ++++--- .../rev2/ansi/keymaps/andrebrait/readme.md | 3 + .../pro/rev2/ansi/keymaps/andrebrait/rules.mk | 3 + .../gmmk/pro/rev2/ansi/keymaps/batin/keymap.c | 50 ++ .../pro/rev2/ansi/keymaps/byungyoonc/config.h | 72 +++ .../pro/rev2/ansi/keymaps/byungyoonc/keymap.c | 129 +++++ .../rev2/ansi/keymaps/byungyoonc/readme.md | 41 ++ .../keymaps/byungyoonc/rgb_matrix_user.inc | 1 + .../pro/rev2/ansi/keymaps/byungyoonc/rules.mk | 2 + .../pro/rev2/ansi/keymaps/cedrikl/keymap.c | 154 ++++++ .../ansi/keymaps/cedrikl/rgb_matrix_map.h | 185 ++++++++ .../pro/rev2/ansi/keymaps/cedrikl/rules.mk | 2 + .../pro/rev2/ansi/keymaps/default/keymap.c | 2 +- .../pro/rev2/ansi/keymaps/gigahawk/config.h | 6 + .../pro/rev2/ansi/keymaps/gigahawk/keymap.c | 74 +++ .../pro/rev2/ansi/keymaps/hachetman/config.h | 22 + .../pro/rev2/ansi/keymaps/hachetman/keymap.c | 307 ++++++++++++ .../pro/rev2/ansi/keymaps/hachetman/readme.md | 26 + .../pro/rev2/ansi/keymaps/hachetman/rules.mk | 5 + .../rev2/ansi/keymaps/lalitmaganti/config.h | 19 + .../rev2/ansi/keymaps/lalitmaganti/keymap.c | 91 ++++ .../rev2/ansi/keymaps/lalitmaganti/rules.mk | 1 + .../gmmk/pro/rev2/ansi/keymaps/macos/config.h | 80 ++++ .../gmmk/pro/rev2/ansi/keymaps/macos/keymap.c | 448 ++++++++++++++++++ .../pro/rev2/ansi/keymaps/macos/readme.md | 85 ++++ .../gmmk/pro/rev2/ansi/keymaps/macos/rules.mk | 4 + .../gmmk/pro/rev2/ansi/keymaps/via/keymap.c | 2 +- .../pro/rev2/iso/keymaps/chofstede/keymap.c | 106 +++++ .../pro/rev2/iso/keymaps/chofstede/readme.md | 8 + .../pro/rev2/iso/keymaps/default/keymap.c | 2 +- .../pro/rev2/iso/keymaps/jonavin/config.h | 39 ++ .../pro/rev2/iso/keymaps/jonavin/keymap.c | 191 ++++++++ .../pro/rev2/iso/keymaps/jonavin/readme.md | 53 +++ .../rev2/iso/keymaps/jonavin/rgb_matrix_map.h | 146 ++++++ .../pro/rev2/iso/keymaps/jonavin/rules.mk | 12 + .../gmmk/pro/rev2/iso/keymaps/via/keymap.c | 2 +- .../gmmk/pro/rev2/iso/keymaps/vitoni/config.h | 20 + .../gmmk/pro/rev2/iso/keymaps/vitoni/keymap.c | 148 ++++++ .../pro/rev2/iso/keymaps/vitoni/readme.adoc | 104 ++++ 56 files changed, 2874 insertions(+), 62 deletions(-) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/cedrikl/keymap.c (100%) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/cedrikl/rgb_matrix_map.h (100%) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/cedrikl/rules.mk (100%) create mode 100644 keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h create mode 100644 keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/keymap.c create mode 100644 keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/rules.mk rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/macos/config.h (100%) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/macos/keymap.c (100%) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/macos/readme.md (100%) rename keyboards/gmmk/pro/{ => rev1}/ansi/keymaps/macos/rules.mk (100%) rename keyboards/gmmk/pro/{ => rev1}/iso/keymaps/chofstede/keymap.c (100%) rename keyboards/gmmk/pro/{ => rev1}/iso/keymaps/chofstede/readme.md (100%) rename keyboards/gmmk/pro/{ => rev1}/iso/keymaps/vitoni/config.h (100%) rename keyboards/gmmk/pro/{ => rev1}/iso/keymaps/vitoni/keymap.c (100%) rename keyboards/gmmk/pro/{ => rev1}/iso/keymaps/vitoni/readme.adoc (100%) create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/batin/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/config.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/readme.md create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rgb_matrix_user.inc create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/rgb_matrix_map.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/gigahawk/config.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/gigahawk/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/config.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/readme.md create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/config.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/macos/config.h create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/macos/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/macos/readme.md create mode 100644 keyboards/gmmk/pro/rev2/ansi/keymaps/macos/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/chofstede/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/chofstede/readme.md create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/config.h create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/readme.md create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/rgb_matrix_map.h create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/rules.mk create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/config.h create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/keymap.c create mode 100644 keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/readme.adoc diff --git a/builddefs/bootloader.mk b/builddefs/bootloader.mk index 226213297e7c..f0a6c084a21f 100644 --- a/builddefs/bootloader.mk +++ b/builddefs/bootloader.mk @@ -202,6 +202,10 @@ ifeq ($(strip $(BOOTLOADER)), md-boot) OPT_DEFS += -DBOOTLOADER_MD_BOOT BOOTLOADER_TYPE = md_boot endif +ifeq ($(strip $(BOOTLOADER)), wb32-dfu) + OPT_DEFS += -DBOOTLOADER_WB32_DFU + BOOTLOADER_TYPE = wb32_dfu +endif ifeq ($(strip $(BOOTLOADER_TYPE)),) $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.) diff --git a/builddefs/mcu_selection.mk b/builddefs/mcu_selection.mk index ec33ee4446f9..dba5c404be3d 100644 --- a/builddefs/mcu_selection.mk +++ b/builddefs/mcu_selection.mk @@ -680,7 +680,6 @@ ifneq ($(findstring WB32F3G71, $(MCU)),) USE_FPU ?= no # Bootloader address for WB32 DFU - STM32_BOOTLOADER_ADDRESS ?= 0x1FFFE000 WB32_BOOTLOADER_ADDRESS ?= 0x1FFFE000 endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c rename to keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rgb_matrix_map.h similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h rename to keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rgb_matrix_map.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rules.mk similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk rename to keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/rules.mk 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 000000000000..74c018f7f146 --- /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 . +*/ + +#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 000000000000..7bedf059877c --- /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 . +*/ + +#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 000000000000..0a5b666e8557 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/rules.mk @@ -0,0 +1 @@ +MOUSEKEY_ENABLE = no diff --git a/keyboards/gmmk/pro/ansi/keymaps/macos/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/macos/config.h rename to keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/macos/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/keymap.c similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/macos/keymap.c rename to keyboards/gmmk/pro/rev1/ansi/keymaps/macos/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/macos/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/readme.md similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/macos/readme.md rename to keyboards/gmmk/pro/rev1/ansi/keymaps/macos/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/macos/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/rules.mk similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/macos/rules.mk rename to keyboards/gmmk/pro/rev1/ansi/keymaps/macos/rules.mk diff --git a/keyboards/gmmk/pro/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c similarity index 100% rename from keyboards/gmmk/pro/iso/keymaps/chofstede/keymap.c rename to keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c diff --git a/keyboards/gmmk/pro/iso/keymaps/chofstede/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md similarity index 100% rename from keyboards/gmmk/pro/iso/keymaps/chofstede/readme.md rename to keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/config.h b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/config.h similarity index 100% rename from keyboards/gmmk/pro/iso/keymaps/vitoni/config.h rename to keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/config.h diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/keymap.c similarity index 100% rename from keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c rename to keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/keymap.c diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc b/keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/readme.adoc similarity index 100% rename from keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc rename to keyboards/gmmk/pro/rev1/iso/keymaps/vitoni/readme.adoc diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/keymap.c index b80164043680..e521425f267a 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/keymap.c +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/keymap.c @@ -1,5 +1,5 @@ /* Copyright 2021 Glorious, LLC - Copyright 2021 Andre Brait + Copyright 2022 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 @@ -17,11 +17,26 @@ along with this program. If not, see . #include QMK_KEYBOARD_H -#ifdef RGB_MATRIX_ENABLE - #ifndef RGB_CONFIRMATION_BLINKING_TIME - #define RGB_CONFIRMATION_BLINKING_TIME 2000 // 2 seconds - #endif -#endif // RGB_MATRIX_ENABLE +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] = { @@ -45,25 +60,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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 + // + // 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 ), - [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_INS, _______, - _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, - _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, - _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, - _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + [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 @@ -80,13 +115,14 @@ bool encoder_update_user(uint8_t index, bool clockwise) { #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); -#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); @@ -100,7 +136,31 @@ static void start_effects(void); #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 +#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) { @@ -117,10 +177,26 @@ bool led_update_user(led_t led_state) { 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 - #if RGB_CONFIRMATION_BLINKING_TIME > 0 case NK_TOGG: if (record->event.pressed) { if (keymap_config.nkro) { @@ -133,25 +209,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { start_effects(); } break; - case NK_ON: - if (record->event.pressed) { - if (!keymap_config.nkro) { - /* Turning NKRO ON */ - effect_green(); - start_effects(); - } - } - break; - case NK_OFF: - if (record->event.pressed) { - if (keymap_config.nkro) { - /* Turning NKRO OFF */ - effect_red(); - start_effects(); - } - } - break; - #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 #endif // NKRO_ENABLE case RGB_MOD: case RGB_RMOD: @@ -166,7 +223,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { 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; + return false; // Skip all further processing of this key } } break; @@ -174,9 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { 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 */ @@ -186,14 +241,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { 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); @@ -205,21 +258,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } break; + #endif // RGB_MATRIX_ENABLE } return true; } - +#ifdef RGB_MATRIX_ENABLE 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(); @@ -241,7 +294,6 @@ void rgb_matrix_indicators_user() { } } } - #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 if (rgb_matrix_get_flags() == LED_FLAG_CAPS) { rgb_matrix_set_color_all(0x0, 0x0, 0x0); } @@ -250,7 +302,6 @@ void rgb_matrix_indicators_user() { } } -#if RGB_CONFIRMATION_BLINKING_TIME > 0 static void start_effects() { effect_started_time = sync_timer_read(); if (!rgb_matrix_is_enabled()) { @@ -262,7 +313,17 @@ static void start_effects() { rgb_matrix_set_flags(LED_FLAG_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 diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/readme.md b/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/readme.md index e7f9978cee70..99d0a36721d2 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/readme.md +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/rules.mk index 650c79fbdcc5..057e9a954110 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/rules.mk +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/andrebrait/rules.mk @@ -1,3 +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/rev2/ansi/keymaps/batin/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/batin/keymap.c new file mode 100644 index 000000000000..be88ea82f8bb --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/batin/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2021 Glorious, LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#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/rev2/ansi/keymaps/byungyoonc/config.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/config.h new file mode 100644 index 000000000000..16ac4f240789 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/config.h @@ -0,0 +1,72 @@ +/* Copyright 2021 Choi Byungyoon + * + * 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 . + */ + +#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/rev2/ansi/keymaps/byungyoonc/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/keymap.c new file mode 100644 index 000000000000..1ad8417de283 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/keymap.c @@ -0,0 +1,129 @@ +/* Copyright 2021 Choi Byungyoon + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H +#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/rev2/ansi/keymaps/byungyoonc/readme.md b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/readme.md new file mode 100644 index 000000000000..d340bf86ed78 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/byungyoonc/rgb_matrix_user.inc b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rgb_matrix_user.inc new file mode 100644 index 000000000000..0d61e19f4c10 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rgb_matrix_user.inc @@ -0,0 +1 @@ +#include "saturated_solid_multisplash.h" diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/byungyoonc/rules.mk new file mode 100644 index 000000000000..08f832c51bc0 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/keymap.c new file mode 100644 index 000000000000..2361ab56608b --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . + */ + +#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/rev2/ansi/keymaps/cedrikl/rgb_matrix_map.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/rgb_matrix_map.h new file mode 100644 index 000000000000..484f64b74c7d --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . + */ + +#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/rev2/ansi/keymaps/cedrikl/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/rules.mk new file mode 100644 index 000000000000..4b7ed8bf0b9b --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/cedrikl/rules.mk @@ -0,0 +1,2 @@ +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/default/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/default/keymap.c index 65ccaf88f293..0d161e5bdd02 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/default/keymap.c @@ -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/rev2/ansi/keymaps/gigahawk/config.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/gigahawk/config.h new file mode 100644 index 000000000000..9ba8a7b1b791 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/gigahawk/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/gigahawk/keymap.c new file mode 100644 index 000000000000..8eedeb6e0053 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/hachetman/config.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/config.h new file mode 100644 index 000000000000..1438d317fbd2 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . + */ + +#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/rev2/ansi/keymaps/hachetman/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/keymap.c new file mode 100644 index 000000000000..19694d54c13f --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/keymap.c @@ -0,0 +1,307 @@ +/* Copyright 2021 Glorious, LLC + 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 . +*/ + +#include QMK_KEYBOARD_H + +#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 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. + [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( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_INS, _______, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + +}; +// 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) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; +} +#endif // ENCODER_ENABLE + +#ifdef RGB_MATRIX_ENABLE + +/* 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) { + #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; + case NK_ON: + if (record->event.pressed) { + if (!keymap_config.nkro) { + /* Turning NKRO ON */ + effect_green(); + start_effects(); + } + } + break; + case NK_OFF: + if (record->event.pressed) { + if (keymap_config.nkro) { + /* Turning NKRO OFF */ + effect_red(); + start_effects(); + } + } + break; + #endif // RGB_CONFIRMATION_BLINKING_TIME > 0 + #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; + } + } + break; + case RGB_TOG: + 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 */ + 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(); + } + } + } + } + #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 + +// 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/rev2/ansi/keymaps/hachetman/readme.md b/keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/readme.md new file mode 100644 index 000000000000..bc8c580dbb87 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/hachetman/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/hachetman/rules.mk new file mode 100644 index 000000000000..9995f3f4d230 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/ansi/keymaps/lalitmaganti/config.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/config.h new file mode 100644 index 000000000000..74c018f7f146 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . +*/ + +#pragma once + +#define RGB_DISABLE_WHEN_USB_SUSPENDED \ No newline at end of file diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/keymap.c new file mode 100644 index 000000000000..7bedf059877c --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . +*/ + +#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/rev2/ansi/keymaps/lalitmaganti/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/rules.mk new file mode 100644 index 000000000000..0a5b666e8557 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/lalitmaganti/rules.mk @@ -0,0 +1 @@ +MOUSEKEY_ENABLE = no diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/config.h b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/config.h new file mode 100644 index 000000000000..799c5d95932c --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/config.h @@ -0,0 +1,80 @@ +/* Copyright 2021 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 . + */ + +#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/rev2/ansi/keymaps/macos/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/keymap.c new file mode 100644 index 000000000000..1f8c47306ad2 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/keymap.c @@ -0,0 +1,448 @@ +/* Copyright 2021 Glorious, LLC + + GMMK Pro Standard keymap for macOS + by zvuc + + with code snippets from + Andre Brait , 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 . +*/ + +#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/rev2/ansi/keymaps/macos/readme.md b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/readme.md new file mode 100644 index 000000000000..8024e77cc104 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 +Layer0 + +Layer 1 (Hold Fn) +Layer1 + +Layer 2 (Togglable alternative function row layout by pressing Fn+F) +Layer2 + + +## Notable differences from stock key layout for Windows: +- Delete key placed right next to backspace (under rotary encoder) +- F13 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)) +- Eject key for the last key in function row: Needed for macOS native global "Sleep" hotkey (Eject) + +## Notable Features +- VIA support +- Rotary Encoder support (Defaults to stock behavior Volume Up/Down) +- Standard order for macOS modifier keys: + * Left: ⌃ Control⌥ Option⌘ Command + * Right: ⌘ Command⌥ OptionFn +- Apple Magic Keyboard-like Function Row Mode (Toggle with Fn+F) + * F1: Decrease display brightness + * F2: Increase display brightness + * F3: Mission Control + * F4: Launchpad + * F5: Decrease keyboard backlight brightness + * F6: Increase keyboard backlight brightness + * F7: (none) + * F8: (none) + * F9: Media Rewind + * F10: Media Play/Pause + * F11: Media Fast Forward + * F12: (none) + +> #### NOTE +> - Media key mappings follow Apple Magic Keyboard except F8 thru F12, where keys have been shifted by one to the right. It's because I wanted to get over the awkward gap between F8 and F9 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 F1 - F12 keys, press the Function keys while holding Fn. +> - If you're planning to use Karabiner Elements, use the standard Function row mode (F1 - F12) 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 Eject. (Eject is mapped as F24 so you can replace it with 'Eject' within Karabiner.) + +## RGB Lighting +- Retains Glorious stock firmware key mappings for control + * FnUp / FnDown: Cycle presets + * FnLeft / FnRight: Adjust speed + * FnW / FnS: Adjust brightness +- Quickly switch to popular presets: + * Fn` : Solid color (no animation) + * Fn1 : Solid duotone (no animation) - ShiftKnob to change secondary color. + * Fn2 : Vertical gradient - ShiftKnob to change secondary color. + * Fn3 : "Jellybean Raindrops" + * Fn4 : Horizontal wipe with white backlight + * Fn5 : Horizontal wipe + * Fn6 : Single color pinwheel + * Fn7 : Horizontal rainbow + * Fn8 : Rainbow pinwheel + * Fn9 : Breathing + * Fn0 : Reactive (light up on keypress) + * Fn- : "Digital Rain" + * Fn= : "Heatmap" +- RGB turns off after 20 minutes of inactivity +- RGB turns off when USB is suspended / enters sleep +- Caps Lock toggle indicator (Caps Lock key and side lights will turn red) +- Easy RGB control using Rotary Encoder + - Control+Rotate Knob: Adjust hue + - Option+Rotate Knob: Adjust saturation + - Command+Rotate Knob: 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 FnUp / FnDown. 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 (Fn+N) + +## 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/rev2/ansi/keymaps/macos/rules.mk b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/rules.mk new file mode 100644 index 000000000000..e9073d44a02b --- /dev/null +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/macos/rules.mk @@ -0,0 +1,4 @@ +# Enable additional features. + +DEBOUNCE_TYPE = sym_defer_pk +VIA_ENABLE = yes diff --git a/keyboards/gmmk/pro/rev2/ansi/keymaps/via/keymap.c b/keyboards/gmmk/pro/rev2/ansi/keymaps/via/keymap.c index 9b13f75a85f9..d50bbfbf566e 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keymaps/via/keymap.c +++ b/keyboards/gmmk/pro/rev2/ansi/keymaps/via/keymap.c @@ -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/rev2/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev2/iso/keymaps/chofstede/keymap.c new file mode 100644 index 000000000000..84fbcf37ff62 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/iso/keymaps/chofstede/keymap.c @@ -0,0 +1,106 @@ +/* Copyright 2021 Glorious, LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#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/rev2/iso/keymaps/chofstede/readme.md b/keyboards/gmmk/pro/rev2/iso/keymaps/chofstede/readme.md new file mode 100644 index 000000000000..da66c447adad --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/iso/keymaps/default/keymap.c b/keyboards/gmmk/pro/rev2/iso/keymaps/default/keymap.c index 67b95c755f75..3bdacda6c82d 100644 --- a/keyboards/gmmk/pro/rev2/iso/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/rev2/iso/keymaps/default/keymap.c @@ -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/rev2/iso/keymaps/jonavin/config.h b/keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/config.h new file mode 100644 index 000000000000..fa7ebec7e59d --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . + */ + +#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/rev2/iso/keymaps/jonavin/keymap.c b/keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/keymap.c new file mode 100644 index 000000000000..3164ecbf68d4 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/keymap.c @@ -0,0 +1,191 @@ +/* Copyright 2021 Glorious, LLC + 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 . +*/ + +#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 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/rev2/iso/keymaps/jonavin/rgb_matrix_map.h b/keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/rgb_matrix_map.h new file mode 100644 index 000000000000..1aa31f2a0fd7 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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 . + */ + +#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/rev2/iso/keymaps/jonavin/rules.mk b/keyboards/gmmk/pro/rev2/iso/keymaps/jonavin/rules.mk new file mode 100644 index 000000000000..1ffc2058a262 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/iso/keymaps/via/keymap.c b/keyboards/gmmk/pro/rev2/iso/keymaps/via/keymap.c index c83af17fe103..880785ebbec9 100644 --- a/keyboards/gmmk/pro/rev2/iso/keymaps/via/keymap.c +++ b/keyboards/gmmk/pro/rev2/iso/keymaps/via/keymap.c @@ -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/rev2/iso/keymaps/vitoni/config.h b/keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/config.h new file mode 100644 index 000000000000..fd8f1d6859e7 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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/rev2/iso/keymaps/vitoni/keymap.c b/keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/keymap.c new file mode 100644 index 000000000000..d5b64c153ab7 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/keymap.c @@ -0,0 +1,148 @@ +// Copyright 2021 Glorious, LLC , +// 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/rev2/iso/keymaps/vitoni/readme.adoc b/keyboards/gmmk/pro/rev2/iso/keymaps/vitoni/readme.adoc new file mode 100644 index 000000000000..38a74a568bf0 --- /dev/null +++ b/keyboards/gmmk/pro/rev2/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. + +|=== From f8237f2e9ae9be0ca44e48c3d0182680e7db6bb7 Mon Sep 17 00:00:00 2001 From: Joy Date: Thu, 14 Apr 2022 13:56:58 +0800 Subject: [PATCH 2/2] Update --- builddefs/bootloader.mk | 4 ---- builddefs/mcu_selection.mk | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/builddefs/bootloader.mk b/builddefs/bootloader.mk index f0a6c084a21f..226213297e7c 100644 --- a/builddefs/bootloader.mk +++ b/builddefs/bootloader.mk @@ -202,10 +202,6 @@ ifeq ($(strip $(BOOTLOADER)), md-boot) OPT_DEFS += -DBOOTLOADER_MD_BOOT BOOTLOADER_TYPE = md_boot endif -ifeq ($(strip $(BOOTLOADER)), wb32-dfu) - OPT_DEFS += -DBOOTLOADER_WB32_DFU - BOOTLOADER_TYPE = wb32_dfu -endif ifeq ($(strip $(BOOTLOADER_TYPE)),) $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.) diff --git a/builddefs/mcu_selection.mk b/builddefs/mcu_selection.mk index dba5c404be3d..ec33ee4446f9 100644 --- a/builddefs/mcu_selection.mk +++ b/builddefs/mcu_selection.mk @@ -680,6 +680,7 @@ ifneq ($(findstring WB32F3G71, $(MCU)),) USE_FPU ?= no # Bootloader address for WB32 DFU + STM32_BOOTLOADER_ADDRESS ?= 0x1FFFE000 WB32_BOOTLOADER_ADDRESS ?= 0x1FFFE000 endif