diff options
Diffstat (limited to 'keyboards/gmmk/pro/ansi')
31 files changed, 2667 insertions, 0 deletions
diff --git a/keyboards/gmmk/pro/ansi/ansi.c b/keyboards/gmmk/pro/ansi/ansi.c new file mode 100644 index 0000000000..1df3319fd2 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/ansi.c @@ -0,0 +1,241 @@ +/* Copyright 2021 Gigahawk + * + * 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 "ansi.h" + +#ifdef RGB_MATRIX_ENABLE +// clang-format off +led_config_t g_led_config = {{ + { 4, NO_LED, NO_LED, 95, 65, 79, 5, 28 }, + { 8, 2, 9, 0, 10, 75, 1, 7 }, + { 14, 3, 15, NO_LED, 16, 86, 6, 13 }, + { 20, 18, 21, 23, 22, 94, 12, 19 }, + { 25, 30, 26, 31, 27, 32, 29, 24 }, + { 41, 36, 42, 37, 43, 38, 35, 40 }, + { 46, 89, 47, 34, 48, 72, 78, 45 }, + { 52, 39, 53, 97, 54, 82, 44, 51 }, + { 58, 63, 59, 64, NO_LED, 60, 62, 57 }, + { 11, 90, 55, 17, 33, 49, NO_LED, 69 }, + { NO_LED, 85, 93, 61, 96, 66, 50, 56 } +}, { + {0, 0}, // 0, ESC, k13 + {0, 15}, // 1, ~, k16 + {4, 26}, // 2, Tab, k11 + {5, 38}, // 3, Caps, k21 + {9, 49}, // 4, Sh_L, k00 + {2, 61}, // 5, Ct_L, k06 + {18, 0}, // 6, F1, k26 + {14, 15}, // 7, 1, k17 + {22, 26}, // 8, Q, k10 + {25, 38}, // 9, A, k12 + {33, 49}, // 10, Z, k14 + {20, 61}, // 11, Win_L, k90 + {33, 0}, // 12, F2, k36 + {29, 15}, // 13, 2, k27 + {36, 26}, // 14, W, k20 + {40, 38}, // 15, S, k22 + {47, 49}, // 16, X, k24 + {38, 61}, // 17, Alt_L, k93 + {47, 0}, // 18, F3, k31 + {43, 15}, // 19, 3, k37 + {51, 26}, // 20, E, k30 + {54, 38}, // 21, D, k32 + {61, 49}, // 22, C, k34 + {61, 0}, // 23, F4, k33 + {58, 15}, // 24, 4, k47 + {65, 26}, // 25, R, k40 + {69, 38}, // 26, F, k42 + {76, 49}, // 27, V, k44 + {79, 0}, // 28, F5, k07 + {72, 15}, // 29, 5, k46 + {79, 26}, // 30, T, k41 + {83, 38}, // 31, G, k43 + {90, 49}, // 32, B, k45 + {92, 61}, // 33, SPACE, k94 + {94, 0}, // 34, F6, k63 + {87, 15}, // 35, 6, k56 + {94, 26}, // 36, Y, k51 + {98, 38}, // 37, H, k53 + {105, 49}, // 38, N, k55 + {108, 0}, // 39, F7, k71 + {101, 15}, // 40, 7, k57 + {108, 26}, // 41, U, k50 + {112, 38}, // 42, J, k52 + {119, 49}, // 43, M, k54 + {123, 0}, // 44, F8, k76 + {116, 15}, // 45, 8, k67 + {123, 26}, // 46, I, k60 + {126, 38}, // 47, K, k62 + {134, 49}, // 48, ,, k64 + {145, 61}, // 49, Alt_R, k95 + {141, 0}, // 50, F9, ka6 + {130, 15}, // 51, 9, k77 + {137, 26}, // 52, O, k70 + {141, 38}, // 53, L, k72 + {148, 49}, // 54, ., k74 + {159, 61}, // 55, FN, k92 + {155, 0}, // 56, F10, ka7 + {145, 15}, // 57, 0, k87 + {152, 26}, // 58, P, k80 + {155, 38}, // 59, ;, k82 + {163, 49}, // 60, ?, k85 + {170, 0}, // 61, F11, ka3 + {159, 15}, // 62, -, k86 + {166, 26}, // 63, [, k81 + {170, 38}, // 64, ", k83 + {173, 61}, // 65, Ct_R, k04 + {184, 0}, // 66, F12, ka5 + {0, 8}, // 67, LED, l01 + {224, 8}, // 68, LED, l11 + {202, 0}, // 69, Prt, k97 + {0, 15}, // 70, LED, l02 + {224, 15}, // 71, LED, l12 + {224, 15}, // 72, Del, k65 + {0, 21}, // 73, LED, l03 + {224, 21}, // 74, LED, l13 + {224, 26}, // 75, PgUp, k15 + {0, 28}, // 76, LED, l04 + {224, 28}, // 77, LED, l14 + {173, 15}, // 78, =, k66 + {220, 64}, // 79, Right, k05 + {0, 35}, // 80, LED, l05 + {224, 35}, // 81, LED, l15 + {224, 49}, // 82, End, k75 + {0, 42}, // 83, LED, l06 + {224, 42}, // 84, LED, l16 + {195, 15}, // 85, BSpc, ka1 + {224, 38}, // 86, PgDn, k25 + {0, 48}, // 87, LED, l07 + {224, 48}, // 88, LED, l17 + {181, 26}, // 89, ], k61 + {182, 49}, // 90, Sh_R, k91 + {0, 55}, // 91, LED, l08 + {224, 55}, // 92, LED, l18 + {199, 26}, // 93, \, ka2 + {206, 52}, // 94, Up, k35 + {191, 64}, // 95, Left, k03 + {193, 38}, // 96, Enter, ka4 + {206, 64} // 97, Down, k73 +}, { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, 2, + 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 +}}; + +const aw_led g_aw_leds[DRIVER_LED_TOTAL] = { + {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 + {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 + {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 + {0, CS10_SW1, CS11_SW1, CS12_SW1}, // 3, Caps, k21 + {0, CS13_SW1, CS14_SW1, CS15_SW1}, // 4, Sh_L, k00 + {0, CS16_SW1, CS17_SW1, CS18_SW1}, // 5, Ct_L, k06 + {0, CS1_SW2, CS2_SW2, CS3_SW2}, // 6, F1, k26 + {0, CS4_SW2, CS5_SW2, CS6_SW2}, // 7, 1, k17 + {0, CS7_SW2, CS8_SW2, CS9_SW2}, // 8, Q, k10 + {0, CS10_SW2, CS11_SW2, CS12_SW2}, // 9, A, k12 + {0, CS13_SW2, CS14_SW2, CS15_SW2}, // 10, Z, k14 + {0, CS16_SW2, CS17_SW2, CS18_SW2}, // 11, Win_L, k90 + {0, CS1_SW3, CS2_SW3, CS3_SW3}, // 12, F2, k36 + {0, CS4_SW3, CS5_SW3, CS6_SW3}, // 13, 2, k27 + {0, CS7_SW3, CS8_SW3, CS9_SW3}, // 14, W, k20 + {0, CS10_SW3, CS11_SW3, CS12_SW3}, // 15, S, k22 + {0, CS13_SW3, CS14_SW3, CS15_SW3}, // 16, X, k24 + {0, CS16_SW3, CS17_SW3, CS18_SW3}, // 17, Alt_L, k93 + {0, CS1_SW4, CS2_SW4, CS3_SW4}, // 18, F3, k31 + {0, CS4_SW4, CS5_SW4, CS6_SW4}, // 19, 3, k37 + {0, CS7_SW4, CS8_SW4, CS9_SW4}, // 20, E, k30 + {0, CS10_SW4, CS11_SW4, CS12_SW4}, // 21, D, k32 + {0, CS13_SW4, CS14_SW4, CS15_SW4}, // 22, C, k34 + {0, CS1_SW5, CS2_SW5, CS3_SW5}, // 23, F4, k33 + {0, CS4_SW5, CS5_SW5, CS6_SW5}, // 24, 4, k47 + {0, CS7_SW5, CS8_SW5, CS9_SW5}, // 25, R, k40 + {0, CS10_SW5, CS11_SW5, CS12_SW5}, // 26, F, k42 + {0, CS13_SW5, CS14_SW5, CS15_SW5}, // 27, V, k44 + {0, CS1_SW6, CS2_SW6, CS3_SW6}, // 28, F5, k07 + {0, CS4_SW6, CS5_SW6, CS6_SW6}, // 29, 5, k46 + {0, CS7_SW6, CS8_SW6, CS9_SW6}, // 30, T, k41 + {0, CS10_SW6, CS11_SW6, CS12_SW6}, // 31, G, k43 + {0, CS13_SW6, CS14_SW6, CS15_SW6}, // 32, B, k45 + {0, CS16_SW6, CS17_SW6, CS18_SW6}, // 33, SPACE, k94 + {0, CS1_SW7, CS2_SW7, CS3_SW7}, // 34, F6, k63 + {0, CS4_SW7, CS5_SW7, CS6_SW7}, // 35, 6, k56 + {0, CS7_SW7, CS8_SW7, CS9_SW7}, // 36, Y, k51 + {0, CS10_SW7, CS11_SW7, CS12_SW7}, // 37, H, k53 + {0, CS13_SW7, CS14_SW7, CS15_SW7}, // 38, N, k55 + {0, CS1_SW8, CS2_SW8, CS3_SW8}, // 39, F7, k71 + {0, CS4_SW8, CS5_SW8, CS6_SW8}, // 40, 7, k57 + {0, CS7_SW8, CS8_SW8, CS9_SW8}, // 41, U, k50 + {0, CS10_SW8, CS11_SW8, CS12_SW8}, // 42, J, k52 + {0, CS13_SW8, CS14_SW8, CS15_SW8}, // 43, M, k54 + {0, CS1_SW9, CS2_SW9, CS3_SW9}, // 44, F8, k76 + {0, CS4_SW9, CS5_SW9, CS6_SW9}, // 45, 8, k67 + {0, CS7_SW9, CS8_SW9, CS9_SW9}, // 46, I, k60 + {0, CS10_SW9, CS11_SW9, CS12_SW9}, // 47, K, k62 + {0, CS13_SW9, CS14_SW9, CS15_SW9}, // 48, ,, k64 + {0, CS16_SW9, CS17_SW9, CS18_SW9}, // 49, Alt_R, k95 + {0, CS1_SW10, CS2_SW10, CS3_SW10}, // 50, F9, ka6 + {0, CS4_SW10, CS5_SW10, CS6_SW10}, // 51, 9, k77 + {0, CS7_SW10, CS8_SW10, CS9_SW10}, // 52, O, k70 + {0, CS10_SW10, CS11_SW10, CS12_SW10}, // 53, L, k72 + {0, CS13_SW10, CS14_SW10, CS15_SW10}, // 54, ., k74 + {0, CS16_SW10, CS17_SW10, CS18_SW10}, // 55, FN, k92 + {0, CS1_SW11, CS2_SW11, CS3_SW11}, // 56, F10, ka7 + {0, CS4_SW11, CS5_SW11, CS6_SW11}, // 57, 0, k87 + {0, CS7_SW11, CS8_SW11, CS9_SW11}, // 58, P, k80 + {0, CS10_SW11, CS11_SW11, CS12_SW11}, // 59, ;, k82 + {0, CS13_SW11, CS14_SW11, CS15_SW11}, // 60, ?, k85 + {0, CS1_SW12, CS2_SW12, CS3_SW12}, // 61, F11, ka3 + {0, CS4_SW12, CS5_SW12, CS6_SW12}, // 62, -, k86 + {0, CS7_SW12, CS8_SW12, CS9_SW12}, // 63, [, k81 + {0, CS10_SW12, CS11_SW12, CS12_SW12}, // 64, ", k83 + {0, CS16_SW12, CS17_SW12, CS18_SW12}, // 65, Ct_R, k04 + + {1, CS1_SW1, CS2_SW1, CS3_SW1}, // 66, F12, ka5 + {1, CS13_SW1, CS14_SW1, CS15_SW1}, // 67, LED, l01 + {1, CS16_SW1, CS17_SW1, CS18_SW1}, // 68, LED, l11 + {1, CS4_SW2, CS5_SW2, CS6_SW2}, // 69, Prt, k97 + {1, CS13_SW2, CS14_SW2, CS15_SW2}, // 70, LED, l02 + {1, CS16_SW2, CS17_SW2, CS18_SW2}, // 71, LED, l12 + {1, CS4_SW3, CS5_SW3, CS6_SW3}, // 72, Del, k65 + {1, CS13_SW3, CS14_SW3, CS15_SW3}, // 73, LED, l03 + {1, CS16_SW3, CS17_SW3, CS18_SW3}, // 74, LED, l13 + {1, CS4_SW4, CS5_SW4, CS6_SW4}, // 75, PgUp, k15 + {1, CS13_SW4, CS14_SW4, CS15_SW4}, // 76, LED, l04 + {1, CS16_SW4, CS17_SW4, CS18_SW4}, // 77, LED, l14 + {1, CS1_SW5, CS2_SW5, CS3_SW5}, // 78, =, k66 + {1, CS10_SW5, CS11_SW5, CS12_SW5}, // 79, Right, k05 + {1, CS13_SW5, CS14_SW5, CS15_SW5}, // 80, LED, l05 + {1, CS16_SW5, CS17_SW5, CS18_SW5}, // 81, LED, l15 + {1, CS4_SW6, CS5_SW6, CS6_SW6}, // 82, End, k75 + {1, CS13_SW6, CS14_SW6, CS15_SW6}, // 83, LED, l06 + {1, CS16_SW6, CS17_SW6, CS18_SW6}, // 84, LED, l16 + {1, CS1_SW7, CS2_SW7, CS3_SW7}, // 85, BSpc, ka1 + {1, CS4_SW7, CS5_SW7, CS6_SW7}, // 86, PgDn, k25 + {1, CS13_SW7, CS14_SW7, CS15_SW7}, // 87, LED, l07 + {1, CS16_SW7, CS17_SW7, CS18_SW7}, // 88, LED, l17 + {1, CS1_SW8, CS2_SW8, CS3_SW8}, // 89, ], k61 + {1, CS4_SW8, CS5_SW8, CS6_SW8}, // 90, Sh_R, k91 + {1, CS13_SW8, CS14_SW8, CS15_SW8}, // 91, LED, l08 + {1, CS16_SW8, CS17_SW8, CS18_SW8}, // 92, LED, l18 + {1, CS1_SW9, CS2_SW9, CS3_SW9}, // 93, \, ka2 + {1, CS4_SW9, CS5_SW9, CS6_SW9}, // 94, Up, k35 + {1, CS4_SW10, CS5_SW10, CS6_SW10}, // 95, Left, k03 + {1, CS1_SW11, CS2_SW11, CS3_SW11}, // 96, Enter, ka4 + {1, CS4_SW11, CS5_SW11, CS6_SW11}, // 97, Down, k73 +}; +// clang-format on +#endif diff --git a/keyboards/gmmk/pro/ansi/ansi.h b/keyboards/gmmk/pro/ansi/ansi.h new file mode 100644 index 0000000000..ab08d66592 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/ansi.h @@ -0,0 +1,52 @@ +/* Copyright 2021 Gigahawk + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "pro.h" + +#define ___ KC_NO + +// 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 - = BSpc 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 + +// clang-format off +#define LAYOUT( \ + k13, k26, k36, k31, k33, k07, k63, k71, k76, ka6, ka7, ka3, ka5, k97, k01, \ + k16, k17, k27, k37, k47, k46, k56, k57, k67, k77, k87, k86, k66, ka1, k65, \ + k11, k10, k20, k30, k40, k41, k51, k50, k60, k70, k80, k81, k61, ka2, k15, \ + k21, k12, k22, k32, k42, k43, k53, k52, k62, k72, k82, k83, ka4, k25, \ + k00, k14, k24, k34, k44, k45, k55, k54, k64, k74, k85, k91, k35, k75, \ + k06, k90, k93, k94, k95, k92, k04, k03, k73, k05 \ +) \ +{ \ + { k00, k01, ___, k03, k04, k05, k06, k07}, \ + { k10, k11, k12, k13, k14, k15, k16, k17}, \ + { k20, k21, k22, ___, k24, k25, k26, k27}, \ + { k30, k31, k32, k33, k34, k35, k36, k37}, \ + { k40, k41, k42, k43, k44, k45, k46, k47}, \ + { k50, k51, k52, k53, k54, k55, k56, k57}, \ + { k60, k61, k62, k63, k64, k65, k66, k67}, \ + { k70, k71, k72, k73, k74, k75, k76, k77}, \ + { k80, k81, k82, k83, ___, k85, k86, k87}, \ + { k90, k91, k92, k93, k94, k95, ___, k97}, \ + { ___, ka1, ka2, ka3, ka4, ka5, ka6, ka7} \ +} +// clang-format on diff --git a/keyboards/gmmk/pro/ansi/config.h b/keyboards/gmmk/pro/ansi/config.h new file mode 100644 index 0000000000..7c68375b2f --- /dev/null +++ b/keyboards/gmmk/pro/ansi/config.h @@ -0,0 +1,23 @@ +/* Copyright 2021 Gigahawk + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "config_common.h" + +#define DRIVER_1_LED_TOTAL 66 +#define DRIVER_2_LED_TOTAL 32 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/gmmk/pro/ansi/info.json b/keyboards/gmmk/pro/ansi/info.json new file mode 100644 index 0000000000..d3b326a7b6 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/info.json @@ -0,0 +1,111 @@ +{ + "keyboard_name": "GMMK Pro (ANSI)", + "url": "https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black-reservation", + "maintainer": "GloriousThrall", + "width": 16.5, + "height": 6.5, + "layouts": { + "LAYOUT": { + "layout": [ + {"x":0, "y":0}, + + {"x":1.25, "y":0}, + {"x":2.25, "y":0}, + {"x":3.25, "y":0}, + {"x":4.25, "y":0}, + + {"x":5.5, "y":0}, + {"x":6.5, "y":0}, + {"x":7.5, "y":0}, + {"x":8.5, "y":0}, + + {"x":9.75, "y":0}, + {"x":10.75, "y":0}, + {"x":11.75, "y":0}, + {"x":12.75, "y":0}, + + {"x":14, "y":0}, + {"x":15.5, "y":0}, + + {"x":0, "y":1.25}, + {"x":1, "y":1.25}, + {"x":2, "y":1.25}, + {"x":3, "y":1.25}, + {"x":4, "y":1.25}, + {"x":5, "y":1.25}, + {"x":6, "y":1.25}, + {"x":7, "y":1.25}, + {"x":8, "y":1.25}, + {"x":9, "y":1.25}, + {"x":10, "y":1.25}, + {"x":11, "y":1.25}, + {"x":12, "y":1.25}, + {"x":13, "y":1.25, "w":2}, + + {"x":15.5, "y":1.25}, + + {"x":0, "y":2.25, "w":1.5}, + {"x":1.5, "y":2.25}, + {"x":2.5, "y":2.25}, + {"x":3.5, "y":2.25}, + {"x":4.5, "y":2.25}, + {"x":5.5, "y":2.25}, + {"x":6.5, "y":2.25}, + {"x":7.5, "y":2.25}, + {"x":8.5, "y":2.25}, + {"x":9.5, "y":2.25}, + {"x":10.5, "y":2.25}, + {"x":11.5, "y":2.25}, + {"x":12.5, "y":2.25}, + {"x":13.5, "y":2.25, "w":1.5}, + + {"x":15.5, "y":2.25}, + + {"x":0, "y":3.25, "w":1.75}, + {"x":1.75, "y":3.25}, + {"x":2.75, "y":3.25}, + {"x":3.75, "y":3.25}, + {"x":4.75, "y":3.25}, + {"x":5.75, "y":3.25}, + {"x":6.75, "y":3.25}, + {"x":7.75, "y":3.25}, + {"x":8.75, "y":3.25}, + {"x":9.75, "y":3.25}, + {"x":10.75, "y":3.25}, + {"x":11.75, "y":3.25}, + {"x":12.75, "y":3.25, "w":2.25}, + + {"x":15.5, "y":3.25}, + + {"x":0, "y":4.25, "w":2.25}, + {"x":2.25, "y":4.25}, + {"x":3.25, "y":4.25}, + {"x":4.25, "y":4.25}, + {"x":5.25, "y":4.25}, + {"x":6.25, "y":4.25}, + {"x":7.25, "y":4.25}, + {"x":8.25, "y":4.25}, + {"x":9.25, "y":4.25}, + {"x":10.25, "y":4.25}, + {"x":11.25, "y":4.25}, + {"x":12.25, "y":4.25, "w":1.75}, + + {"x":14.25, "y":4.5}, + + {"x":15.5, "y":4.25}, + + {"x":0, "y":5.25, "w":1.25}, + {"x":1.25, "y":5.25, "w":1.25}, + {"x":2.5, "y":5.25, "w":1.25}, + {"x":3.75, "y":5.25, "w":6.25}, + {"x":10, "y":5.25}, + {"x":11, "y":5.25}, + {"x":12, "y":5.25}, + + {"x":13.25, "y":5.5}, + {"x":14.25, "y":5.5}, + {"x":15.25, "y":5.5} + ] + } + } +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/keymap.c new file mode 100644 index 0000000000..99504de956 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 alexmarmon + +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 + +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 Alt_L Win_L SPACE Ct_R Alt_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. + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MODE_FORWARD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MODE_REVERSE, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, KC_MEDIA_PREV_TRACK, _______, KC_MEDIA_NEXT_TRACK + ), + + +}; + + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/readme.md b/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/readme.md new file mode 100644 index 0000000000..36ad42b1af --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/alexmarmon/readme.md @@ -0,0 +1,7 @@ +![Layout Image](https://i.imgur.com/MizMvsI.jpg) + +# Simple MacOS like keymap with RGB + +* Working basic RGB thanks to https://github.com/qmk/qmk_firmware/pull/13430 +* Restore working rotary knob volume control +* Add media_previous and media_next to FN+left and FN+right
\ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/config.h b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/config.h new file mode 100644 index 0000000000..1438d317fb --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/config.h @@ -0,0 +1,22 @@ +/* Copyright 2021 Andre Brait + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms) + #define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/keymap.c new file mode 100644 index 0000000000..b801640436 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/keymap.c @@ -0,0 +1,287 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 Andre Brait <andrebrait@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +#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 + +#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 */ + 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/ansi/keymaps/andrebrait/readme.md b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/readme.md new file mode 100644 index 0000000000..e7f9978cee --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/readme.md @@ -0,0 +1,23 @@ +# andrebrait'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: + +- 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 + +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/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/rules.mk new file mode 100644 index 0000000000..650c79fbdc --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/andrebrait/rules.mk @@ -0,0 +1,3 @@ +# Enable additional features. + +DEBOUNCE_TYPE = sym_defer_pk diff --git a/keyboards/gmmk/pro/ansi/keymaps/default/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/default/keymap.c new file mode 100644 index 0000000000..65ccaf88f2 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/default/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+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_PSCR, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, RGB_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 true; +} +#endif // ENCODER_ENABLE diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/config.h b/keyboards/gmmk/pro/ansi/keymaps/jonavin/config.h new file mode 100644 index 0000000000..e4ae4c9446 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/jonavin/config.h @@ -0,0 +1,33 @@ +/* Copyright 2021 Jonavin Eng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define TAPPING_TOGGLE 2 +// TT set to two taps + +/* Handle GRAVESC combo keys */ +#define GRAVE_ESC_ALT_OVERRIDE + //Always send Escape if Alt is pressed +#define GRAVE_ESC_CTRL_OVERRIDE + //Always send Escape if Control is pressed + +#define TAPPING_TERM 180 + +#ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + #define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c new file mode 100644 index 0000000000..8b37449576 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c @@ -0,0 +1,308 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 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" + +#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0]) + +enum custom_layers { + _BASE, + _FN1, + _MO2, + _MO3, +}; + +enum custom_keycodes { + KC_00 = SAFE_RANGE, + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down +}; + +// Tap Dance Definitions +enum custom_tapdance { + TD_LSFT_CAPSLOCK, +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for shift, twice for Caps Lock + [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), +}; + +#define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) + +bool _isWinKeyDisabled = false; + + +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_BSLS, KC_PGUP, + TT(_MO2), 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_LSFTCAPS, 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, _______, _______, _______, RESET, KC_HOME, + KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, _______, RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + [_MO2] = 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) + ), + + [_MO3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + + +// TIMEOUTS +#define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes +#define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) +static uint16_t timeout_timer = 0; +static uint16_t timeout_counter = 0; //in minute intervals +static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; + +void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; +}; + +void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else { + // when keycode KC_00 is released + } + break; + case KC_WINLCK: + if (record->event.pressed) { + _isWinKeyDisabled = !_isWinKeyDisabled; //toggle status + if(_isWinKeyDisabled) { + process_magic(GUI_OFF, record); + } else { + process_magic(GUI_ON, record); + } + } else unregister_code16(keycode); + break; + case RGB_TOI: + if(record->event.pressed) { + timeout_update_threshold(true); + } else unregister_code16(keycode); + break; + case RGB_TOD: + if(record->event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); + break; + default: + if (record->event.pressed) { //reset activity timer + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_enable(); + #endif + timeout_reset_timer(); + } + break; + } + return true; +}; + +void matrix_scan_user(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout +}; + + +#ifdef ENCODER_ENABLE // Encoder Functionality + uint8_t selected_layer = 0; + + bool encoder_update_user(uint8_t index, bool clockwise) { + if ( clockwise ) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + if(selected_layer < 3) { + selected_layer ++; + layer_move(selected_layer); + } + } else if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up + unregister_mods(MOD_BIT(KC_LSFT)); + register_code(KC_PGDN); + register_mods(MOD_BIT(KC_LSFT)); + } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word + tap_code16(LCTL(KC_RGHT)); + } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track + tap_code(KC_MEDIA_NEXT_TRACK); + } else { + switch (selected_layer) { + case _FN1: + timeout_update_threshold(true); + break; + default: + tap_code(KC_VOLU); // Otherwise it just changes volume + break; + } + } + } else { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { + if (selected_layer > 0) { + selected_layer --; + layer_move(selected_layer); + } + } else if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { + unregister_mods(MOD_BIT(KC_LSFT)); + register_code(KC_PGUP); + register_mods(MOD_BIT(KC_LSFT)); + } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word + tap_code16(LCTL(KC_LEFT)); + } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track + tap_code(KC_MEDIA_PREV_TRACK); + } else { + switch (selected_layer) { + case _FN1: + timeout_update_threshold(false); + break; + default: + tap_code(KC_VOLD); + break; + } + } + } + + return true; + } +#endif + +#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 (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L1, RGB_GREEN); + rgb_matrix_set_color(LED_L2, RGB_GREEN); + } + 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); + } + 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 (_isWinKeyDisabled) { + 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 + 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 _MO2: + for (uint8_t i=0; i<ARRAYSIZE(LED_LIST_NUMPAD); i++) { + rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_MAGENTA); + } + rgb_matrix_set_color(LED_R4, RGB_MAGENTA); + rgb_matrix_set_color(LED_R5, RGB_MAGENTA); + rgb_matrix_set_color(LED_R6, RGB_MAGENTA); + break; + case _MO3: + rgb_matrix_set_color(LED_R6, RGB_GREEN); + rgb_matrix_set_color(LED_R7, RGB_GREEN); + rgb_matrix_set_color(LED_R8, RGB_GREEN); + break; + default: + break; + } + } + + void suspend_power_down_user(void) { + rgb_matrix_set_suspend_state(true); + } + + void suspend_wakeup_init_user(void) { + rgb_matrix_set_suspend_state(false); + } +#endif + + +void keyboard_post_init_user(void) { + + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // turn on Num lock by defautl so that the numpad layer always has predictable results + tap_code(KC_NUMLOCK); + } + timeout_timer = timer_read(); // set inital time for ide timeout + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_color_all(RGB_NAUTILUS); // Default startup colour + #endif +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md b/keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md new file mode 100644 index 0000000000..f4f3401abc --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md @@ -0,0 +1,40 @@ +# jonavin's GMMK Pro layout + +- Add Fn layer keys from Glorious Core mapping that's missing in the default qmk mapping +- Add PrtScr, Scroll Lock, Break, NumLock to Fn layer +- Implement Win key lock using Fn+Win like in Glorious Core firmware +- Layer 2 mod on Caps Lock with double-tap to switch to this layer, double tap to switch back +- Layer 2 provides arrows on WASD and additional nav keys + right hand numpad with 00; an be used for Alt Code entry +- Layer 2 left spacebar Backspace +- add double tap of Left Shift to toggle Caps Lock +- additional encoder functionality + - FN Layer - change rgb idle timeout + - holding Left shift, change layers + - holding right shift, Navigate page up/down + - holding Left Ctrl, navigate prev/next word + - holding Left Alt, change media prev/next track + - default is change volume + +- LED/RGB Functionality + - RGB idle timeout (default 5 minutes) + - Can be changed in FN layer with < and > or encoder + - setting to zero disables timeout + - indicators in FN layer using RGB in FN and number rows to show the timeout in minutes + - LED address location map as enum definition + - LED group lists for arrows, numpad, F row, num row, left and right side LEDs + - default startuo 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 + +## All layers diagram +Default layer +![image](https://user-images.githubusercontent.com/71780717/124177658-82324880-da7e-11eb-9421-b69100131062.png) + +Fn Layer +![image](https://user-images.githubusercontent.com/71780717/126086069-bc539ffc-3ab6-4ebb-9bef-5005f8add294.png) + +Layer 2 (Caps Lock Mod) +![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) diff --git a/keyboards/gmmk/pro/ansi/keymaps/jonavin/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/jonavin/rgb_matrix_map.h new file mode 100644 index 0000000000..1ee5388905 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/jonavin/rgb_matrix_map.h @@ -0,0 +1,144 @@ +/* Copyright 2021 Jonavin Eng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#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_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_DEL, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + + const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; + + const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; + + const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_INS}; + + const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_DEL}; + + const uint8_t LED_LIST_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/ansi/keymaps/jonavin/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/jonavin/rules.mk new file mode 100644 index 0000000000..d2ed00e02d --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/jonavin/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/config.h b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/config.h new file mode 100644 index 0000000000..a1fe427651 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/config.h @@ -0,0 +1,24 @@ +/* Copyright 2021 Tomas Guinan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + #define RGB_DISABLE_WHEN_USB_SUSPENDED true +#endif + +#define FORCE_NKRO diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/keymap.c new file mode 100644 index 0000000000..5c702b1686 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/keymap.c @@ -0,0 +1,471 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 Tomas Guinan + +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 "paddlegame.h" +#include <math.h> + +enum custom_layers { + _BASE, + _FN1, + _MO2, + _MO3, +}; + +enum custom_keycodes { + KC_00 = SAFE_RANGE, + KC_WINLK, //Toggles Win key on and off +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else { + // when keycode KC_00 is released + } + break; + + case KC_WINLK: + if (record->event.pressed) { + if(!keymap_config.no_gui) { + process_magic(GUI_OFF, record); + } else { + process_magic(GUI_ON, record); + } + } else unregister_code16(keycode); + break; + } + return true; +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Del Rotary(Mute) +// ~ 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 + + + [_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(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + KC_SLEP, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_INS, _______, + RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_HUI, _______, RGB_M_P, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_MO2), RGB_SAD, RGB_SAI, RESET, RGB_M_B, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_MOD, _______, RGB_M_R, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, RGB_M_SW, + _______, KC_WINLK, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI + ), + + [_MO2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, TG(_MO2), _______, _______, _______, _______ + ), + + [_MO3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + +#ifdef ENCODER_ENABLE // Encoder Functionality + + bool encoder_update_user(uint8_t index, bool clockwise) { + + switch(get_highest_layer(layer_state)) { + case _FN1: + if ( clockwise ) { + tap_code16(KC_PGDN); + } else { + tap_code16(KC_PGUP); + } + break; + + case _MO2: + // Game: Paddle movement + if (damage_count == 0) { + if ( clockwise ) { + if (paddle_pos_full < 15) ++paddle_pos_full; + } else { + if (paddle_pos_full > 0) --paddle_pos_full; + } + } + break; + + case _BASE: + default: + if ( clockwise ) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + } + return true; + } +#endif + +#ifdef RGB_MATRIX_ENABLE + void init_ball(uint8_t i) { + i &= 1; + ball[i].on = true; + ball[i].up = false; + ball[i].y = 0; + ball[i].x = rand() % 16; + + // Set initial ball state + if (ball[i].x < 8) { + ball[i].left = false; + } else { + ball[i].x -= 4; + ball[i].left = true; + } + + // 1/4 chance of being an enemy ball after level 6 + if (level_number > 3) { + ball[i].enemy = ((rand() % 4) == 0); + } else { + ball[i].enemy = false; + } + } + + void hurt_paddle(void) { + if (paddle_lives > 0) { + --paddle_lives; + } + damage_timer = timer_read(); + damage_count = 10; + + // Reset board + init_ball(0); + ball[1].on = false; + } + + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + switch(get_highest_layer(layer_state)) { + case _FN1: + // Light up FN layer keys + if (!fn_active) { + fn_active = true; + rgb_value.r = 0xff; + rgb_value.g = 0x00; + rgb_value.b = 0x00; + } + + if (rgb_value.r == 0xff && rgb_value.g < 0xff) { + if (rgb_value.b > 0) { --rgb_value.b; } + else { ++rgb_value.g; } + } else if (rgb_value.g == 0xff && rgb_value.b < 0xff) { + if (rgb_value.r > 0) { --rgb_value.r; } + else { ++rgb_value.b; } + } else if (rgb_value.b == 0xff && rgb_value.r < 0xff) { + if (rgb_value.g > 0) { --rgb_value.g; } + else { ++rgb_value.r; } + } + + for (uint8_t i=0; i<sizeof(LED_RGB)/sizeof(LED_RGB[0]); i++) { + rgb_matrix_set_color(LED_RGB[i], rgb_value.r, rgb_value.g, rgb_value.b); + } + + for (uint8_t i=0; i<sizeof(LED_WHITE)/sizeof(LED_WHITE[0]); i++) { + rgb_matrix_set_color(LED_WHITE[i], RGB_WHITE); + } + + for (uint8_t i=0; i<sizeof(LED_GREEN)/sizeof(LED_GREEN[0]); i++) { + rgb_matrix_set_color(LED_GREEN[i], RGB_GREEN); + } + + rgb_matrix_set_color(LED_ESC, RGB_RED); + + rgb_matrix_set_color(LED_LWIN, RGB_BLUE); + break; + + case _MO2: + // Paddle game + if (!game_start) { + srand((unsigned int)timer_read()); + + // Store user light settings + last_hsv = rgb_matrix_get_hsv(); + rgb_matrix_sethsv_noeeprom(0, 0, 0); + + rgb_value.r = 0xff; + rgb_value.g = 0x00; + rgb_value.b = 0x00; + + paddle_pos_full = 8; + paddle_lives = 4; + bounce_count = 0; + level_number = 0; + damage_count = 0; + + init_ball(0); + ball[1].on = false; + ball_timer = timer_read(); + + game_start = true; + } + + // Set level indicator + if (level_number < 12) { + rgb_matrix_set_color(GAME_R0[level_number], RGB_BLUE); + } + + // Set life bar + for (uint8_t i=0; i < paddle_lives ; i++) { + rgb_matrix_set_color(GAME_LIVES[i], RGB_GREEN); + } + + uint8_t paddle_pos = paddle_pos_full >> 1; + + if (damage_count > 0) { + // Flash paddle when receiving damage + if (timer_elapsed(damage_timer) > 500) { + --damage_count; + damage_timer = timer_read(); + } + if ((damage_count & 1) == 0) { + for (uint8_t i=0; i < 3 ; i++) { + rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_RED); + } + } + if (damage_count == 0) { + ball_timer = timer_read(); + } + + + } else if (paddle_lives == 0) { + // Game over + for (uint8_t i=0; i<sizeof(LED_GAME_OVER)/sizeof(LED_GAME_OVER[0]); i++) { + rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED); + } + + } else if (level_number >= 12) { + // You win + if (rgb_value.r == 0xff && rgb_value.g < 0xff) { + if (rgb_value.b > 0) { --rgb_value.b; } + else { ++rgb_value.g; } + } else if (rgb_value.g == 0xff && rgb_value.b < 0xff) { + if (rgb_value.r > 0) { --rgb_value.r; } + else { ++rgb_value.b; } + } else if (rgb_value.b == 0xff && rgb_value.r < 0xff) { + if (rgb_value.g > 0) { --rgb_value.g; } + else { ++rgb_value.r; } + } + + for (uint8_t i=0; i < 3 ; i++) { + rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], rgb_value.r, rgb_value.g, rgb_value.b); + } + rgb_matrix_set_color(GAME_SMILE1[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b); + rgb_matrix_set_color(GAME_SMILE1[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b); + rgb_matrix_set_color(GAME_SMILE2[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b); + rgb_matrix_set_color(GAME_SMILE2[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b); + + } else { + // normal game loop + + // Set paddle position + for (uint8_t i=0; i < 3 ; i++) { + rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_GREEN); + } + + // Ball movement logic happens at intervals + if (timer_elapsed(ball_timer) > GAME_TIMER[level_number]) { + for (int i=0; i<2; ++i) { + if (ball[i].on) { + // Ball movement + if (ball[i].up) { + if (ball[i].y > 0) { + --ball[i].y; + if (!ball[i].left) ++ball[i].x; + } else { + // Count reflections. If > 10, increase level + ++bounce_count; + if (bounce_count >= 10) { + bounce_count = 0; + ++level_number; + } + ball[i].on = false; + } + } else { + ++ball[i].y; + if (ball[i].left) --ball[i].x; + if (ball[i].y > 4) { + // Remove a life if ball isn't returned and isn't enemy + if (!ball[i].enemy) { + hurt_paddle(); + i = 2; + } else { + ball[i].on = false; + } + } + } + } + } + if (ball[0].y == 4 && !ball[1].on) { + init_ball(1); + } + if (ball[1].y == 4 && !ball[0].on) { + init_ball(0); + } + if (!ball[0].on && !ball[1].on) { + init_ball(0); + } + ball_timer = timer_read(); + } + + // Other ball stuff + for (int i=0; i<2; ++i) { + if (ball[i].on) { + // Ball deflection logic + if (!ball[i].up && ball[i].y == 4 && (ball[i].x == paddle_pos || ball[i].x == paddle_pos - 1 || ball[i].x == paddle_pos + 1)) { + if (!ball[i].enemy) { + --ball[i].y; + if (!ball[i].left) { ++ball[i].x; } + ball[i].up = true; + } else { + hurt_paddle(); + i = 2; + } + } + + // Ball display + switch (ball[i].y) { + case 0: + if (ball[i].enemy) { + rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_RED); + } else { + rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_WHITE); + } + break; + + case 1: + if (ball[i].enemy) { + rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_RED); + } else { + rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_WHITE); + } + break; + + case 2: + if (ball[i].enemy) { + rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_RED); + } else { + rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_WHITE); + } + break; + + case 3: + if (ball[i].enemy) { + rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_RED); + } else { + rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_WHITE); + } + break; + + case 4: + if (ball[i].enemy) { + rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_RED); + } else { + rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_WHITE); + } + break; + } + } + } + } + + + break; + + default: + fn_active = false; + if (game_start) { + // Reset lighting settings + game_start = false; + rgb_matrix_sethsv_noeeprom(last_hsv.h, last_hsv.s, last_hsv.v); + } + break; + } + + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + if (!caps_active) { + caps_active = true; + caps_flash_on = true; + caps_flasher = timer_read(); + } + if (timer_elapsed(caps_flasher) > 500) { + caps_flasher = timer_read(); + caps_flash_on = !caps_flash_on; + } + + rgb_matrix_set_color(LED_CAPS, RGB_WHITE); + if (caps_flash_on) { + for (uint8_t i=0; i<sizeof(LED_SIDE_LEFT)/sizeof(LED_SIDE_LEFT[0]); i++) { + rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_RED); + rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_RED); + } + } else { + for (uint8_t i=0; i<sizeof(LED_SIDE_LEFT)/sizeof(LED_SIDE_LEFT[0]); i++) { + rgb_matrix_set_color(LED_SIDE_LEFT[i], 0, 0, 0); + rgb_matrix_set_color(LED_SIDE_RIGHT[i], 0, 0, 0); + } + } + } else { + caps_active = false; + } + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_F10, RGB_WHITE); + } + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled + } + } + +#endif + +void keyboard_post_init_user(void) { + + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_color_all(RGB_RED); // Default startup colour + #endif + +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/paddlegame.h b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/paddlegame.h new file mode 100644 index 0000000000..27df2dd703 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/paddlegame.h @@ -0,0 +1,46 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + Copyright 2021 Tomas Guinan + +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/>. +*/ + + +const uint16_t GAME_TIMER[] = { + 400, 350, 300, 250, 400, 350, 300, 250, 225, 200, 175, 150 +}; + +bool game_start = false; +HSV last_hsv; +static uint8_t paddle_pos_full; +static uint8_t paddle_lives; +static uint8_t level_number; +static uint8_t bounce_count; +static uint8_t damage_count; +static uint16_t damage_timer; +static uint16_t ball_timer; + +struct BallStruct +{ + uint8_t x; + uint8_t y; + bool on; + bool up; + bool left; + bool enemy; +}; + +struct BallStruct ball[2]; + +void init_ball(uint8_t i); +void hurt_paddle(void);
\ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/readme.md b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/readme.md new file mode 100644 index 0000000000..c6da7f5f47 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/readme.md @@ -0,0 +1,18 @@ +![GMMK Pro Paddle Game zLayout Image](https://i.imgur.com/RYcKyOj.png) + +# Paddle Game GMMK Pro layout by Tomas Guinan + +- Add Print Screen, Scroll Lock, Pause/Break, Insert to Fn layer +- Toggle backlight using Fn+` + - If you don't like using a backlight but wnat to play the paddle game or + use other RGB features, turn RGB on and set brightness to 0 +- Usable Fn layer keys are backlit +- Implement Win key lock using Fn+Win like in Glorious Core firmware +- Caps Lock and Scroll Lock keys light up white when active +- Caps Lock has red flashing side lights like in Glorious Core firmware +- Layer 2 includes Paddle Game, playable by pressing Fn+P + - Use rotary encoder to control paddle + - Contains 12 levels, indicated by blue LED on F row + - Player has 4 lives, indicated by nav cluster + - Deflect white balls while avoiding red ones + - Press Fn to quit game diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rgb_matrix_map.h new file mode 100644 index 0000000000..06d34ba6cb --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rgb_matrix_map.h @@ -0,0 +1,181 @@ +/* Copyright 2021 Tomas Guinan + * + * 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 + + bool fn_active = false; + bool caps_active = false; + bool caps_flash_on = false; + + static uint16_t caps_flasher = 0; + RGB rgb_value; + + // 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_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_DEL, // 69, Del, k97 + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_HOME, // 72, Home, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + + const uint8_t LED_RGB[] = { + LED_MINS, LED_EQL, + LED_LBRC, LED_RBRC, + LED_SCLN, LED_QUOT, + LED_HOME, LED_PGUP, LED_PGDN, LED_END, + LED_UP, LED_DOWN, LED_LEFT, LED_RIGHT + }; + + const uint8_t LED_GREEN[] = { + LED_F1, LED_F2, LED_F3, LED_F4, + LED_F5, LED_F6, LED_F7, LED_F8 + }; + + const uint8_t LED_WHITE[] = { + LED_F9, LED_F10, LED_F11, LED_DEL + }; + + 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}; + + // Breakout LED rules + + const uint8_t GAME_LIVES[] = { LED_HOME, LED_PGUP, LED_PGDN, LED_END }; + const uint8_t GAME_PADDLE[] = { + LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT, LED_SLSH + }; + const uint8_t GAME_SMILE1[] = { + LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, LED_SCLN, LED_QUOT + }; + const uint8_t GAME_SMILE2[] = { + LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL + }; + const uint8_t GAME_R4[] = { + LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT + }; + const uint8_t GAME_R3[] = { + LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, LED_SCLN + }; + const uint8_t GAME_R2[] = { + LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, LED_LBRC + }; + const uint8_t GAME_R1[] = { + LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL + }; + const uint8_t GAME_R0[] = { + LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12 + }; + + const uint8_t LED_GAME_OVER[] = { LED_5, LED_8, LED_F, LED_G, LED_H, LED_J, LED_C, LED_M }; + + +#endif
\ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rules.mk new file mode 100644 index 0000000000..925d8a5a55 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/paddlegame/rules.mk @@ -0,0 +1,4 @@ +MOUSEKEY_ENABLE = no +BOOTMAGIC_ENABLE = lite +RGB_MATRIX_ENABLE = yes +ENCODER_ENABLE = yes diff --git a/keyboards/gmmk/pro/ansi/keymaps/via/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/via/keymap.c new file mode 100644 index 0000000000..9b13f75a85 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/via/keymap.c @@ -0,0 +1,89 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+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_PSCR, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; +// 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 diff --git a/keyboards/gmmk/pro/ansi/keymaps/via/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/via/rules.mk new file mode 100644 index 0000000000..1e5b99807c --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/gmmk/pro/ansi/keymaps/wholesomeducky/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/wholesomeducky/keymap.c new file mode 100644 index 0000000000..fded532562 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/wholesomeducky/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Ct_L A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up Win_R +// 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_MEDIA_PLAY_PAUSE, + 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_LCTL, 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_RGUI, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, RESET, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_END + ), + +}; + + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_MS_WH_RIGHT); + } else { + tap_code(KC_MS_WH_LEFT); + } + return true; +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.c new file mode 100644 index 0000000000..a32fef1041 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.c @@ -0,0 +1,73 @@ +/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + // ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Del Rotary(Mute) + // ~ 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 + [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, + MO(1), 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_INS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; +// 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; +} diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.json b/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.json new file mode 100644 index 0000000000..d2325d2c13 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/willwm/keymap.json @@ -0,0 +1,181 @@ +{ + "version": 1, + "notes": "", + "documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n", + "keyboard": "gmmk/pro", + "keymap": "willwm", + "layout": "LAYOUT", + "layers": [ + [ + "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", + "MO(1)", + "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" + ], + [ + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_INS", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_PSCR", + "KC_CAPS", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "RESET", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_PGUP", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_HOME", + "KC_PGDN", + "KC_END" + ] + ], + "author": "" +}
\ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/readme.md b/keyboards/gmmk/pro/ansi/keymaps/willwm/readme.md new file mode 100644 index 0000000000..1c169faac6 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/willwm/readme.md @@ -0,0 +1,22 @@ +<img width="567" alt="layer0" src="https://user-images.githubusercontent.com/303042/118893170-da3e3280-b8b6-11eb-9459-f6c339c59bde.png"> +<img width="566" alt="layer1" src="https://user-images.githubusercontent.com/303042/118893191-e0341380-b8b6-11eb-8641-a4fdeeb7cbb2.png"> + +# willwm GMMK Pro Layout + +Based on [gmmk/pro/keymaps/default](../default/keymap.c), with [VIA support](./rules.mk) + +Layer 0 + +* Delete between F12 and rotary encoder (replaces PrtSc) +* Home below rotary encoder (replaces Del) +* MO(1) in default location and Caps Lock location + +Layer 1 + +* Tab -> Caps Lock +* Del -> Insert +* Home -> PrtSc +* Left Arrow -> Home +* Right Arrow -> End +* Up Arrow -> PgUp +* Down Arrow -> PgDn diff --git a/keyboards/gmmk/pro/ansi/keymaps/willwm/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/willwm/rules.mk new file mode 100644 index 0000000000..511b50e19c --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/willwm/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +UNICODE_ENABLE = yes diff --git a/keyboards/gmmk/pro/ansi/readme.md b/keyboards/gmmk/pro/ansi/readme.md new file mode 100644 index 0000000000..9800aef88e --- /dev/null +++ b/keyboards/gmmk/pro/ansi/readme.md @@ -0,0 +1,37 @@ +# GMMK PRO (ANSI) + +A tenkeyless 75% keyboard made and sold by Glorious LLC. Equipped with the STM32 ARM Cortex-M4 microcontroller, with support for rotary encoders and three additional layouts. [More info at Glorious](https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black-reservation) + +* Keyboard Maintainer: [GloriousThrall](https://github.com/GloriousThrall) +* Hardware Supported: GMMK Pro +* Hardware Availability: [GloriousPCGaming.com](https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black-reservation) + +Make example for this keyboard (after setting up your build environment): + + make gmmk/pro/ansi:default + +Flashing example for this keyboard: + + make gmmk/pro/ansi:default:flash + +To reset the board into bootloader mode, do one of the following: + +* Hold the Reset switch mounted on the bottom side of the PCB while connecting the USB cable +* Hold the Escape key while connecting the USB cable (also erases persistent settings) +* Fn+Backslash will reset the board to bootloader mode if you have flashed the default QMK keymap + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Case Screw Replacements + +Many users report stripped case screws when disassembling the board. + +The stock case screws are: +* Thread: M2 +* Thread length: ~5 mm +* Head diameter: ~3.8 mm +* Head counterbore diameter: ~4.0 mm +* Head counterbore depth: ~1.9 mm + +Most M2x5mm screws should fit fine, although it's best to ensure that the screw head will fit inside the counterbore. +For reference, [this hex socket head screw](https://www.mcmaster.com/91292A005/) from McMaster-Carr should fit nearly flush (head will protrude above the counterbore by ~0.1 mm). diff --git a/keyboards/gmmk/pro/ansi/rules.mk b/keyboards/gmmk/pro/ansi/rules.mk new file mode 100644 index 0000000000..f42f925134 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/rules.mk @@ -0,0 +1,25 @@ +# MCU name +MCU = STM32F303 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = AW20216 |