Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add another GMMK Pro ANSI Keymap with custom RGB. #14243

Merged
merged 3 commits into from
Jan 11, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
153 changes: 153 additions & 0 deletions keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
/* Copyright 2021 Cedrik Lussier @cedrikl
.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H
#include "rgb_matrix_map.h"
#include "cedrikl.h"

// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
// Tab Q W E R T Y U I O P [ ] \ PgUp
// Caps A S D F G H J K L ; " Enter PgDn
// Sh_L Z X C V B N M , . ? Sh_R Up End
// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right


// The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without
// this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB
// cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI
// if that's your preference.
//
// To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and
// it'll be back to normal when you plug it back in.
//
// This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
// Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
[0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),

[1] = LAYOUT(
EEP_RST, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_MUTE,
KC_NLCK, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, KC_BSPC, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PSLS, KC_PAST, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, 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, RGB_VAD, RGB_TOG, RGB_VAI
)
};
// 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);
fauxpark marked this conversation as resolved.
Show resolved Hide resolved

if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF
drashna marked this conversation as resolved.
Show resolved Hide resolved
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 (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
drashna marked this conversation as resolved.
Show resolved Hide resolved
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
185 changes: 185 additions & 0 deletions keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
/* Copyright 2021 Cedrik Lussier @cedrikl
.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifdef RGB_MATRIX_ENABLE

// Custom RGB Colours
const HSV hsv_cl_blue = {150, 255, 255};
const HSV hsv_cl_purple = {188, 255, 255};
const HSV hsv_cl_numpad = {85, 255, 255};
const HSV hsv_cl_mods = {42, 255, 255};
const HSV hsv_cl_bad = {0, 255, 255};

// RGB LED locations
enum led_location_map {
LED_ESC, // 0, ESC, k13
LED_GRV, // 1, ~, k16
LED_TAB, // 2, Tab, k11
LED_CAPS, // 3, Caps, k21
LED_LSFT, // 4, Sh_L, k00
LED_LCTL, // 5, Ct_L, k06
LED_F1, // 6, F1, k26
LED_1, // 7, 1, k17
LED_Q, // 8, Q, k10
LED_A, // 9, A, k12
LED_Z, // 10, Z, k14
LED_LWIN, // 11, Win_L, k90
LED_F2, // 12, F2, k36
LED_2, // 13, 2, k27
LED_W, // 14, W, k20
LED_S, // 15, S, k22
LED_X, // 16, X, k24
LED_LALT, // 17, Alt_L, k93
LED_F3, // 18, F3, k31
LED_3, // 19, 3, k37
LED_E, // 20, E, k30
LED_D, // 21, D, k32
LED_C, // 22, C, k34
LED_F4, // 23, F4, k33
LED_4, // 24, 4, k47
LED_R, // 25, R, k40
LED_F, // 26, F, k42
LED_V, // 27, V, k44
LED_F5, // 28, F5, k07
LED_5, // 29, 5, k46
LED_T, // 30, T, k41
LED_G, // 31, G, k43
LED_B, // 32, B, k45
LED_SPC, // 33, SPACE, k94
LED_F6, // 34, F6, k63
LED_6, // 35, 6, k56
LED_Y, // 36, Y, k51
LED_H, // 37, H, k53
LED_N, // 38, N, k55
LED_F7, // 39, F7, k71
LED_7, // 40, 7, k57
LED_U, // 41, U, k50
LED_J, // 42, J, k52
LED_M, // 43, M, k54
LED_F8, // 44, F8, k76
LED_8, // 45, 8, k67
LED_I, // 46, I, k60
LED_K, // 47, K, k62
LED_COMM, // 48, ,, k64
LED_RALT, // 49, Alt_R, k95
LED_F9, // 50, F9, ka6
LED_9, // 51, 9, k77
LED_O, // 52, O, k70
LED_L, // 53, L, k72
LED_DOT, // 54, ., k74
LED_FN, // 55, FN, k92
LED_F10, // 56, F10, ka7
LED_0, // 57, 0, k87
LED_P, // 58, P, k80
LED_SCLN, // 59, ;, k82
LED_SLSH, // 60, ?, k85
LED_F11, // 61, F11, ka3
LED_MINS, // 62, -, k86
LED_LBRC, // 63, [, k81
LED_QUOT, // 64, ", k83
LED_RCTL, // 65, Ct_R, k04
LED_F12, // 66, F12, ka5
LED_L1, // 67, LED, l01
LED_R1, // 68, LED, l11
LED_DEL, // 69, Prt, k97 -- remapped to DEL
LED_L2, // 70, LED, l02
LED_R2, // 71, LED, l12
LED_HOME, // 72, Del, k65
LED_L3, // 73, LED, l03
LED_R3, // 74, LED, l13
LED_PGUP, // 75, PgUp, k15
LED_L4, // 76, LED, l04
LED_R4, // 77, LED, l14
LED_EQL, // 78, =, k66
LED_RGHT, // 79, Right, k05
LED_L5, // 80, LED, l05
LED_R5, // 81, LED, l15
LED_END, // 82, End, k75
LED_L6, // 83, LED, l06
LED_R6, // 84, LED, l16
LED_BSPC, // 85, BSpc, ka1
LED_PGDN, // 86, PgDn, k25
LED_L7, // 87, LED, l07
LED_R7, // 88, LED, l17
LED_RBRC, // 89, ], k61
LED_RSFT, // 90, Sh_R, k91
LED_L8, // 91, LED, l08
LED_R8, // 92, LED, l18
LED_BSLS, // 93, \, ka2
LED_UP, // 94, Up, k35
LED_LEFT, // 95, Left, k03
LED_ENT, // 96, Enter, ka4
LED_DOWN // 97, Down, k73
};

const uint8_t LED_REGION_L_SIDE[] = {LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7,LED_L8};
const uint8_t LED_REGION_R_SIDE[] = {LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7,LED_R8};

//const uint8_t LED_MATRIX[] = {
// LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL,
// LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME,
// LED_TAB, LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP,
// LED_CAPS, LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN,
// LED_LSFT, LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT, LED_SLSH, LED_RSFT, LED_UP, LED_END,
// LED_LCTL, LED_LWIN, LED_LALT, LED_SPC, LED_RALT, LED_FN, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT
//};

const uint8_t LED_REGION_A[] = {
LED_ESC, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL,
LED_GRV, LED_1, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME,
LED_TAB, LED_Q, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP,
LED_CAPS, LED_A, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN,
LED_LSFT, LED_Z, LED_SLSH, LED_RSFT, LED_UP, LED_END,
LED_LCTL, LED_LWIN, LED_LALT, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT
};
const uint8_t LED_REGION_B[] = {
LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8,
LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9,
LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O,
LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L,
LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT,
LED_SPC, LED_RALT, LED_FN
};

const uint8_t LED_REGION_NUMPAD[] = {

LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL,
LED_LBRC, LED_RBRC,
LED_ENT,
LED_DOT

};

const uint8_t LED_REGION_OTHER[] = {
LED_ESC, LED_DEL,
LED_HOME,


LED_END,
LED_LEFT, LED_DOWN, LED_RGHT
};

const uint8_t LED_REGION_CAPS[] = {

LED_GRV, LED_1,
LED_TAB, LED_Q,
LED_CAPS, LED_A,
LED_LSFT,
LED_LCTL
};

#endif
2 changes: 2 additions & 0 deletions keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
IDLE_TIMEOUT_ENABLE = yes
STARTUP_NUMLOCK_ON = yes
36 changes: 36 additions & 0 deletions users/cedrikl/cedrikl.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/* Copyright 2021 Cedrik Lussier @cedrikl
.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/


#include QMK_KEYBOARD_H
#include "cedrikl.h"

// Turn on/off NUM LOCK if current state is different
void activate_numlock(bool turn_on) {
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK) != turn_on) {
drashna marked this conversation as resolved.
Show resolved Hide resolved
tap_code(KC_NUMLOCK);
}
}


// INITIAL STARTUP

void keyboard_post_init_user(void) {
#ifdef STARTUP_NUMLOCK_ON
activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results
#endif // STARTUP_NUMLOC_ON
}