Created my keymap layout

This commit is contained in:
Rohit Pai 2021-08-30 03:04:42 +01:00
parent 0e2caba4df
commit 09bf07d074
68 changed files with 4918 additions and 0 deletions

0
gmmk/.noci Normal file
View File

241
gmmk/pro/ansi/ansi.c Normal file
View File

@ -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

52
gmmk/pro/ansi/ansi.h Normal file
View File

@ -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

23
gmmk/pro/ansi/config.h Normal file
View File

@ -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)

111
gmmk/pro/ansi/info.json Normal file
View File

@ -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}
]
}
}
}

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -0,0 +1,3 @@
# Enable additional features.
DEBOUNCE_TYPE = sym_defer_pk

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,143 @@
/* 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"
#include "jonavin.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Ins Rotary(Mute)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
// Tab Q W E R T Y U I O P [ ] \ PgUp
// Caps A S D F G H J K L ; " Enter PgDn
// Sh_L Z X C V B N M , . ? Sh_R Up End
// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
[_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT(
_______, 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
),
[_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______,
_______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PDOT, _______, _______, _______, KC_HOME,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_P1, KC_P2, KC_P3, KC_NO, KC_PAST, KC_PENT, KC_END,
_______, KC_NO, KC_DEL, KC_INS, KC_NO, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, RCTL(KC_PGUP), _______,
_______, _______, _______, KC_BSPC, _______, _______, _______, RCTL(KC_LEFT), RCTL(KC_PGDN), RCTL(KC_RIGHT)
),
[_RAISE] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
#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 (keymap_config.no_gui) {
rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled
}
switch(get_highest_layer(layer_state)){ // special handling per layer
case _FN1: // on Fn layer select what the encoder does when pressed
rgb_matrix_set_color(LED_R2, RGB_RED);
rgb_matrix_set_color(LED_R3, RGB_RED);
rgb_matrix_set_color(LED_R4, RGB_RED);
rgb_matrix_set_color(LED_FN, RGB_RED); //FN key
// Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code
uint16_t timeout_threshold = get_timeout_threshold();
if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_RED);
else if (timeout_threshold < 140) {
rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_RED);
rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_RED);
} else { // >= 140 minutes, just show these 3 lights
rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_RED);
rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_RED);
rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_RED);
}
break;
case _LOWER:
for (uint8_t i=0; i<ARRAYSIZE(LED_LIST_NUMPAD); i++) {
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_MAGENTA);
}
rgb_matrix_set_color(LED_R4, RGB_MAGENTA);
rgb_matrix_set_color(LED_R5, RGB_MAGENTA);
rgb_matrix_set_color(LED_R6, RGB_MAGENTA);
break;
case _RAISE:
rgb_matrix_set_color(LED_R6, RGB_GREEN);
rgb_matrix_set_color(LED_R7, RGB_GREEN);
rgb_matrix_set_color(LED_R8, RGB_GREEN);
break;
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_keymap(void) {
// keyboard_post_init_user() moved to userspace
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_set_color_all(RGB_NAUTILUS); // Default startup colour
#endif
}

View File

@ -0,0 +1,53 @@
# 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
rules.mk OPTIONS - Active features from userspace
STARTUP_NUMLOCK_ON = yes
- turns on NUMLOCK by default
ENCODER_DEFAULTACTIONS_ENABLE = yes
- Enabled default encoder funtions
TD_LSFT_CAPSLOCK_ENABLE = yes
- This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS
IDLE_TIMEOUT_ENABLE = yes
- Enables Timer functionality; for RGB idle timeouts that can be changed dynamically
## 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)

View File

@ -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

View File

@ -0,0 +1,9 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
TAP_DANCE_ENABLE = yes
BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite
TD_LSFT_CAPSLOCK_ENABLE = yes
IDLE_TIMEOUT_ENABLE = yes
STARTUP_NUMLOCK_ON = yes
ENCODER_DEFAULTACTIONS_ENABLE = yes

View File

@ -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
#endif
#define FORCE_NKRO

View File

@ -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
}

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,4 @@
MOUSEKEY_ENABLE = no
BOOTMAGIC_ENABLE = lite
RGB_MATRIX_ENABLE = yes
ENCODER_ENABLE = yes

View File

@ -0,0 +1,75 @@
/* Copyright 2021 stickandgum
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// I like NKRO.. but let's not force it. @drashna pointed out some older hardware has issues - Toggle it via keycode if you like.
// #define FORCE_NKRO
// At the time of this, there are 41 effects! That may be a bit too many to cycle through - keeping what I believe is the best.
#ifdef RGB_MATRIX_ENABLE
// #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
// Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain
#define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes
// Soon we need to ENABLE modes by DEFAULT soon as per: https://github.com/qmk/qmk_firmware/pull/13758 Thanks @noroadsleft
// #define DISABLE_RGB_MATRIX_SOLID_COLOR // BUILT IN (MAPPED!) Static single color.
// #define DISABLE_RGB_MATRIX_ALPHAS_MODS // Accenting various keys on the keyboard.
// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Top down rainbow!
#define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Left Right Rainbow (the top-down is better imho).
// #define DISABLE_RGB_MATRIX_BREATHING // Built in (MAPPED!)
// #define DISABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white)
// #define DISABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black)
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (RGB_MATRIX_CYCLE_PINWHEEL)
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // See above
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT // See above
// #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black)
#define DISABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow
// #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // BUILT IN (MAPPED!) Full Rainbow Left to Right
#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center.
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points.
#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradent Chevron shapped scrolling left to right
// #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL // BUILT IN (MAPPED!) - Consider disabling this - my poor eyes.
#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
#define DISABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboards
#define DISABLE_RGB_MATRIX_RAINBOW_BEACON // Similar to above.
#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enough of the spinning rainbows - we get it! :-)
#define DISABLE_RGB_MATRIX_RAINDROPS // Jellybeans are better.
// #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation - better than above.
#define DISABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back
#define DISABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left
#define DISABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right
// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP // Hot keys!
// #define DISABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix!
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black: wide slightly better imo
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE // Key hits shown in current hue - all other keys shifted hue
// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (black otherwise)
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but a bit too intense imo.
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single color fade.
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-keys)
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades
#define DISABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black.
#define DISABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black.
#define DISABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (Using solid_reactive_wide instead).
#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black. (Using solid_reactive_wide instead).
#endif

View File

@ -0,0 +1,300 @@
/* Copyright 2021 stickandgum GMMK Pro ANSI Enhanced Keymap File
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum my_keycodes {
LED_TILDE = SAFE_RANGE,
LED_1,
LED_2,
LED_3,
LED_4,
LED_5,
LED_6,
LED_7,
LED_8,
LED_9,
LED_0,
LED_MINS,
LED_EQL,
QMKBEST
};
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
[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_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_DEL, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_CALC, KC_MYCM, KC_MSEL, KC_MAIL, KC_WHOM, _______, _______, _______, _______, _______, KC_WAKE, KC_SLEP, KC_PAUS, _______,
LED_TILDE, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, KC_INS, KC_SLCK,
_______, RGB_SAI, RGB_VAI, RGB_HUI, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_BRIU,
_______, RGB_RMOD, RGB_VAD, RGB_MOD, RGB_SPI, _______, _______, _______, _______, QMKBEST, _______, _______, _______, KC_BRID,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_MPLY, KC_PWR,
_______, _______, _______, _______, KC_RALT, _______, KC_APP, KC_MPRV, KC_MSTP, KC_MNXT
),
};
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
// https://beta.docs.qmk.fm/using-qmk/simple-keycodes/feature_advanced_keycodes#alt-escape-for-alt-tab-id-alt-escape-for-alt-tab
if (get_mods() & MOD_MASK_CTRL) { // If CTRL is held
uint8_t mod_state = get_mods(); // Store all modifiers that are held
unregister_mods(MOD_MASK_CTRL); // Immediately unregister the CRTL key (don't send CTRL-PgDn) - del_mods doesn't work here (not immediate)
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
set_mods(mod_state); // Add back in the CTRL key - so ctrl-key will work if ctrl was never released after paging.
} else if (get_mods() & MOD_MASK_SHIFT) {
uint8_t mod_state = get_mods();
unregister_mods(MOD_MASK_SHIFT);
if (clockwise) {
#ifdef MOUSEKEY_ENABLE // If using the mouse scroll - make sure MOUSEKEY is enabled
tap_code(KC_MS_WH_DOWN);
#else
tap_code(KC_VOLU);
#endif
} else {
#ifdef MOUSEKEY_ENABLE
tap_code(KC_MS_WH_UP);
#else
tap_code(KC_VOLD);
#endif
}
set_mods(mod_state);
} else if (clockwise) { // All else volume.
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
return true;
}
#endif //ENCODER_ENABLE
#ifdef RGB_MATRIX_ENABLE
static void set_rgb_caps_leds_on(void);
static void set_rgb_scroll_leds_on(void);
static void set_rgb_caps_leds_off(void);
static void set_rgb_scroll_leds_off(void);
// Called on powerup and is the last _init that is run.
void keyboard_post_init_user(void) {
int mods[35] = {0,2,3,4,5,11,17,33,49,55,65,95,97,79,94,85,93,96,90,69,92,67,76,80,91,75,86,68,77,81,92,28,34,39,44};
int j;
/* output each array element's value */
for (j = 0; j < 35; j++ ) {
g_led_config.flags[mods[j]] = LED_FLAG_MODIFIER;
}
if (!rgb_matrix_is_enabled()) {
rgb_matrix_enable();
#ifdef CONSOLE_ENABLE
uprintf("ERROR! RGB Matrix Enabled and wrote to EEPROM! -How was the RGB Matrix Disabled?");
#endif
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef CONSOLE_ENABLE
switch(rgb_matrix_get_flags()) {
case 0x08:
uprintf("FLAG: LED_FLAG_INDICATOR ");
break;
case 0x04:
uprintf("FLAG: LED_FLAG_KEYLIGHT ");
break;
case 0x02:
uprintf("FLAG: LED_FLAG_UNDERGLOW ");
break;
case 0x01:
uprintf("FLAG: LED_FLAG_MODIFIER ");
break;
case 0xFF:
uprintf("FLAG: LED_FLAG_ALL ");
break;
case 0x00:
uprintf("FLAG: LED_FLAG_NONE ");
break;
default:
uprintf("FLAG Other: %u ", rgb_matrix_get_flags());
}
uprintf("Caps? %d Scroll? %d - MATRIX: %d\n", host_keyboard_led_state().caps_lock, host_keyboard_led_state().scroll_lock, rgb_matrix_is_enabled());
#endif //CONSOLE_ENABLE
switch (keycode) {
case RGB_TOG:
if (record->event.pressed) {
if (rgb_matrix_get_flags() == LED_FLAG_ALL) {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_set_color_all(0, 0, 0);
} else {
rgb_matrix_set_flags(LED_FLAG_ALL);
}
}
return false;
case LED_TILDE:
rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); // Can use RGB_M_P built-in keycode instead.
break;
case LED_1:
rgb_matrix_mode(RGB_MATRIX_ALPHAS_MODS);
break;
case LED_2:
rgb_matrix_mode(RGB_MATRIX_GRADIENT_UP_DOWN);
break;
case LED_3:
rgb_matrix_mode(RGB_MATRIX_JELLYBEAN_RAINDROPS);
break;
case LED_4:
rgb_matrix_mode(RGB_MATRIX_BAND_SAT);
break;
case LED_5:
rgb_matrix_mode(RGB_MATRIX_BAND_VAL);
break;
case LED_6:
rgb_matrix_mode(RGB_MATRIX_BAND_SPIRAL_VAL);
break;
case LED_7:
rgb_matrix_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT); // Can use RGB_M_R built-in keycode instead.
break;
case LED_8:
rgb_matrix_mode(RGB_MATRIX_CYCLE_PINWHEEL); // Can use RGB_M_SW built-in keycode instead.
break;
case LED_9:
rgb_matrix_mode(RGB_MATRIX_BREATHING); // Can use RGB_M_B built-in keycode instead.
break;
#ifdef RGB_MATRIX_KEYPRESSES // Reactive effects require RGB_MATRIX_KEYPRESSES in config.h
case LED_0:
rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE_WIDE);
break;
#endif //RGB_MATRIX_KEYPRESSES
#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap and Rain require #define RGB_MATRIX_FRAMEBUFFER_EFFECTS in config.h
case LED_MINS:
rgb_matrix_mode(RGB_MATRIX_DIGITAL_RAIN);
break;
case LED_EQL:
rgb_matrix_mode(RGB_MATRIX_TYPING_HEATMAP);
break;
#endif //RGB_MATRIX_FRAMEBUFFER_EFFECTS
case QMKBEST:
if (record->event.pressed) { // when keycode QMKBEST is pressed
SEND_STRING("QMK rocks");
} else { // when keycode QMKBEST key is released
SEND_STRING("!!");
}
break;
}
return true;
}
void rgb_matrix_indicators_user(void) {
if (host_keyboard_led_state().caps_lock) {
set_rgb_caps_leds_on();
} else {
if (rgb_matrix_get_flags() == LED_FLAG_NONE){
set_rgb_caps_leds_off();
}
}
if (host_keyboard_led_state().scroll_lock) {
set_rgb_scroll_leds_on();
} else {
if (rgb_matrix_get_flags() == LED_FLAG_NONE){
set_rgb_scroll_leds_off();
}
}
}
// RGB led number layout, function of the key
// 67, led 01 0, ESC 6, F1 12, F2 18, F3 23, F4 28, F5 34, F6 39, F7 44, F8 50, F9 56, F10 61, F11 66, F12 69, Prt Rotary(Mute) 68, led 12
// 70, led 02 1, ~ 7, 1 13, 2 19, 3 24, 4 29, 5 35, 6 40, 7 45, 8 51, 9 57, 0 62, -_ 78, (=+) 85, BackSpc 72, Home 71, led 13
// 73, led 03 2, Tab 8, Q 14, W 20. E 25, R 30, T 36, Y 41, U 46, I 52, O 58, P 63, [{ 89, ]} 93, \| 75, PgUp 74, led 14
// 76, led 04 3, Caps 9, A 15, S 21, D 26, F 31, G 37, H 42, J 47, K 53, L 59, ;: 64, '" 96, Enter 86, PgDn 77, led 15
// 80, led 05 4, Sh_L 10, Z 16, X 22, C 27, V 32, B 38, N 43, M 48, ,< 54, .< 60, /? 90, Sh_R 94, Up 82, End 81, led 16
// 83, led 06 5, Ct_L 11,Win_L 17, Alt_L 33, SPACE 49, Alt_R 55, FN 65, Ct_R 95, Left 97, Down 79, Right 84, led 17
// 87, led 07 88, led 18
// 91, led 08 92, led 19
static void set_rgb_caps_leds_on() {
rgb_matrix_set_color(0, 255, 0, 0); //Escape Key
rgb_matrix_set_color(3, 255, 0, 0); //capslock key
rgb_matrix_set_color(5, 255, 0, 0); //Left CTRL key
rgb_matrix_set_color(67, 255, 0, 0); //Left LED 01
rgb_matrix_set_color(68, 255, 0, 0); //Right LED 12
rgb_matrix_set_color(70, 255, 127, 0); //Left LED 02
rgb_matrix_set_color(71, 255, 127, 0); //Right LED 13
rgb_matrix_set_color(73, 255, 255, 0); //Left LED 03
rgb_matrix_set_color(74, 255, 255, 0); //Right LED 14
rgb_matrix_set_color(76, 0, 255, 0); //Left LED 04
rgb_matrix_set_color(77, 0, 255, 0); //Right LED 15
rgb_matrix_set_color(80, 0, 0, 255); //Left LED 05
rgb_matrix_set_color(81, 0, 0, 255); //Right LED 16
rgb_matrix_set_color(83, 46, 43, 95); //Left LED 06
rgb_matrix_set_color(84, 46, 43, 95); //Right LED 17
rgb_matrix_set_color(87, 139, 0, 255); //Left LED 07
rgb_matrix_set_color(88, 139, 0, 255); //Right LED 18
rgb_matrix_set_color(91, 255, 255, 255); //Left LED 08
rgb_matrix_set_color(92, 255, 255, 255); //Right LED 19
}
static void set_rgb_caps_leds_off() {
rgb_matrix_set_color(0, 0, 0, 0); //Escape Key
rgb_matrix_set_color(3, 0, 0, 0); //capslock key
rgb_matrix_set_color(5, 0, 0, 0); //Left CTRL key
rgb_matrix_set_color(67, 0, 0, 0); //Left LED 01
rgb_matrix_set_color(68, 0, 0, 0); //Right LED 12
rgb_matrix_set_color(70, 0, 0, 0); //Left LED 02
rgb_matrix_set_color(71, 0, 0, 0); //Right LED 13
rgb_matrix_set_color(73, 0, 0, 0); //Left LED 03
rgb_matrix_set_color(74, 0, 0, 0); //Right LED 14
rgb_matrix_set_color(76, 0, 0, 0); //Left LED 04
rgb_matrix_set_color(77, 0, 0, 0); //Right LED 15
rgb_matrix_set_color(80, 0, 0, 0); //Left LED 05
rgb_matrix_set_color(81, 0, 0, 0); //Right LED 16
rgb_matrix_set_color(83, 0, 0, 0); //Left LED 06
rgb_matrix_set_color(84, 0, 0, 0); //Right LED 17
rgb_matrix_set_color(87, 0, 0, 0); //Left LED 07
rgb_matrix_set_color(88, 0, 0, 0); //Right LED 18
rgb_matrix_set_color(91, 0, 0, 0); //Left LED 08
rgb_matrix_set_color(92, 0, 0, 0); //Right LED 19
}
static void set_rgb_scroll_leds_on() {
rgb_matrix_set_color(72, 255, 255, 255); // Under Rotary (HOME)
}
static void set_rgb_scroll_leds_off() {
rgb_matrix_set_color(72, 0, 0, 0); // Under Rotary (HOME)
}
#endif // RGB_MATRIX_ENABLE

View File

@ -0,0 +1,63 @@
# Glorious GMMK Pro / ANSI - Enhanced Keyboard
Tried to incorporate full featured GMMK Pro keyboard functionality without adding unnecessary features. Included Scroll Lock and Caps LEDs. NKRO can be toggled (Fn + N).
SHIFT and Ctrl keys for scrolling with the rotary, Fn-keys also used for screen brightness, media, PowerOff, Suspend, App Shortcuts, and RGB Toggle/Modifications. Trimmed down the amazing (currently 41) built-in RGB effects down to about 13 or so reasonable effects that feel are just enough for your entertainment without being too excessive.
BIG thank you to [AndreBrait](https://github.com/andrebrait), And of course, @drashna and @filterpaper, @noroadsleft and the entire discord community.
* Keymap Creator: [StickAndGum](https://github.com/StickAndGum)
* Keyboard: [More info on GMMK Pro](https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black)
* Controller [STM32F303CCT6](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
* Layout:
![keyboard-layout](https://user-images.githubusercontent.com/22257588/130371838-875ba65b-88ea-4f81-a44a-bb24194c4989.png)
Features are as follows:
Rotary:
- Default: Volume Up/Down
- Shift: Mouse Wheel Down/Up
- Ctrl: Page Down/Up
Top/Default Layer:
- Print Screen -> Print Screen (Left of rotary)
- Delete -> Home (Under Rotary)
- Right Alt -> Delete (Right of Spacebar)
- All other keys defaults.
Fn Layer:
- Fn + \ -> Bootloader Mode (Can also hold ESC while powering up) - If hit by mistake, just unplug and replug in.
- Fn + Backspace -> Insert
- Fn + Print -> Pause/Break
- Fn + Home -> Scroll Lock (Lights up white!)
- Fn + Del (right of space) -> Right-Alt key.
- Fn + RCtrl (right of Fn) -> Menu/App key.
- Fn + N -> Toggle NKRO
- Fn + End -> Power Off Computer
- Fn + F12 -> Suspend Computer
- Fn + F11 -> Wake Computer (Necessary on MAC OS?)
- Fn + Page Up / Down -> Laptop Screen Brightness Up/Down
- Fn + F1 - F5 -> Launch Calc, My Comp (Explorer), Media Player, Mail Client, Web Browser.
- Fn + Up, Down, Left, Right Arrows -> Media Play, Stop, Previous, Next respectively.
- RGB Information:
- Toggle for RGB via Fn-r (CAPS & ScrlLock still Light/Indicate)
- CAPS: Side Light Rainbow Indicators and Left-side RED Indicators
- Scroll-Lock: Fn-Home (Under Rotary) white indicator.
- Modifiers identified around most of the edge of keyboard / Side lights also accented (Fn-1 looks GREAT IMHO)
- RGB Modifing (all via Function key) all via wasdqerf (common gaming keys) - easy to remember.
- Fn + r -> Toggle RGB
- Fn + w,s -> Brightness Up, Down
- Fn + a,d -> Cycle Forward/Backward through rgb effects
- Fn + q -> Increase or Decrease Saturation (use SHIFT key to lower)
- Fn + e -> Increase or Decrease Hue/Color (use SHIFT key to lower)
- Fn + f -> Increase or Decrease Speed (Using "F" for Fast!) (Use SHIFT for slower)
- Fn + ~, 0-9, - = keys (2nd row keys) -> 13 RGB different effects arranged to my liking. Fn-1 is my favorite.
- Fn + L -> My easter egg... "QMK rocks!"
- Known issues:
- The Heatmap and Matrix FrameBuffer effects (Fn - and =) are a bit buggy - F-keys light up when they shouldn't and the Caps/Scroll lights don't turn off properly when using. Just change the effect to something else to fix this.
- If you find a fix for this, please let me know.
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).

View File

@ -0,0 +1,2 @@
CONSOLE_ENABLE = no
MOUSEKEY_ENABLE = yes

View File

@ -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

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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": ""
}

View File

@ -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

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
UNICODE_ENABLE = yes

37
gmmk/pro/ansi/readme.md Normal file
View File

@ -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).

25
gmmk/pro/ansi/rules.mk Normal file
View File

@ -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

78
gmmk/pro/config.h Normal file
View File

@ -0,0 +1,78 @@
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define DEVICE_VER 0x0001
#define VENDOR_ID 0x320F
#define PRODUCT_ID 0x5044
#define MANUFACTURER Glorious
#define PRODUCT GMMK Pro
/* key matrix size */
#define MATRIX_ROWS 11
#define MATRIX_COLS 8
#define MATRIX_ROW_PINS \
{ B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10 }
#define MATRIX_COL_PINS \
{ A0, A1, A2, A3, A4, A8, A9, A10 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Hold ESC on start up to clear EEPROM and boot into bootloader mode */
#define BOOTMAGIC_LITE_ROW 1
#define BOOTMAGIC_LITE_COLUMN 3
#define TAP_CODE_DELAY 10
#define ENCODERS_PAD_A \
{ C15 }
#define ENCODERS_PAD_B \
{ C14 }
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* SPI Config for LED Driver */
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN A5
#define SPI_MOSI_PIN A6
#define SPI_MISO_PIN A7
#define DRIVER_1_CS B13
#define DRIVER_2_CS B14
#define DRIVER_1_EN C13
#define DRIVER_2_EN C13
#define DRIVER_COUNT 2
/* 1000Hz USB polling - it's the default on stock firmware */
#define USB_POLLING_INTERVAL_MS 1
/* Send up to 4 key press events per scan */
#define QMK_KEYS_PER_SCAN 4
/* Set debounce time to 5ms */
#define DEBOUNCE 5
/* Force NKRO on boot up regardless of the setting saved in the EEPROM (uncomment to enable it) */
// #define FORCE_NKRO

7
gmmk/pro/halconf.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

23
gmmk/pro/iso/config.h Normal file
View File

@ -0,0 +1,23 @@
/* Copyright 2021 Jasper Chan
*
* 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 33
#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

112
gmmk/pro/iso/info.json Normal file
View File

@ -0,0 +1,112 @@
{
"keyboard_name": "GMMK Pro (ISO)",
"url": "https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black-reservation",
"maintainer": "GloriousThrall",
"width": 16.5,
"height": 6.5,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"Esc", "x":0, "y":0},
{"label":"F1", "x":1.25, "y":0},
{"label":"F2", "x":2.25, "y":0},
{"label":"F3", "x":3.25, "y":0},
{"label":"F4", "x":4.25, "y":0},
{"label":"F5", "x":5.5, "y":0},
{"label":"F6", "x":6.5, "y":0},
{"label":"F7", "x":7.5, "y":0},
{"label":"F8", "x":8.5, "y":0},
{"label":"F9", "x":9.75, "y":0},
{"label":"F10", "x":10.75, "y":0},
{"label":"F11", "x":11.75, "y":0},
{"label":"F12", "x":12.75, "y":0},
{"label":"Printscreen", "x":14, "y":0},
{"label":"Rotary", "x":15.5, "y":0},
{"label":"`", "x":0, "y":1.25},
{"label":"1", "x":1, "y":1.25},
{"label":"2", "x":2, "y":1.25},
{"label":"3", "x":3, "y":1.25},
{"label":"4", "x":4, "y":1.25},
{"label":"5", "x":5, "y":1.25},
{"label":"6", "x":6, "y":1.25},
{"label":"7", "x":7, "y":1.25},
{"label":"8", "x":8, "y":1.25},
{"label":"9", "x":9, "y":1.25},
{"label":"0", "x":10, "y":1.25},
{"label":"-", "x":11, "y":1.25},
{"label":"=", "x":12, "y":1.25},
{"label":"Backspace", "x":13, "y":1.25, "w":2},
{"label":"Delete", "x":15.5, "y":1.25},
{"label":"Tab", "x":0, "y":2.25, "w":1.5},
{"label":"Q", "x":1.5, "y":2.25},
{"label":"W", "x":2.5, "y":2.25},
{"label":"E", "x":3.5, "y":2.25},
{"label":"R", "x":4.5, "y":2.25},
{"label":"T", "x":5.5, "y":2.25},
{"label":"Y", "x":6.5, "y":2.25},
{"label":"U", "x":7.5, "y":2.25},
{"label":"I", "x":8.5, "y":2.25},
{"label":"O", "x":9.5, "y":2.25},
{"label":"P", "x":10.5, "y":2.25},
{"label":"[", "x":11.5, "y":2.25},
{"label":"]", "x":12.5, "y":2.25},
{"label":"Page Up", "x":15.5, "y":2.25},
{"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
{"label":"A", "x":1.75, "y":3.25},
{"label":"S", "x":2.75, "y":3.25},
{"label":"D", "x":3.75, "y":3.25},
{"label":"F", "x":4.75, "y":3.25},
{"label":"G", "x":5.75, "y":3.25},
{"label":"H", "x":6.75, "y":3.25},
{"label":"J", "x":7.75, "y":3.25},
{"label":"K", "x":8.75, "y":3.25},
{"label":"L", "x":9.75, "y":3.25},
{"label":";", "x":10.75, "y":3.25},
{"label":"'", "x":11.75, "y":3.25},
{"label":"Iso #", "x":12.75, "y":3.25},
{"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2},
{"label":"Page Down", "x":15.5, "y":3.25},
{"label":"Shift", "x":0, "y":4.25, "w":1.25},
{"label":"Iso \\", "x":1.25, "y":4.25},
{"label":"Z", "x":2.25, "y":4.25},
{"label":"X", "x":3.25, "y":4.25},
{"label":"C", "x":4.25, "y":4.25},
{"label":"V", "x":5.25, "y":4.25},
{"label":"B", "x":6.25, "y":4.25},
{"label":"N", "x":7.25, "y":4.25},
{"label":"M", "x":8.25, "y":4.25},
{"label":",", "x":9.25, "y":4.25},
{"label":".", "x":10.25, "y":4.25},
{"label":"/", "x":11.25, "y":4.25},
{"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
{"label":"Up", "x":14.25, "y":4.5},
{"label":"End", "x":15.5, "y":4.25},
{"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
{"label":"GUI", "x":1.25, "y":5.25, "w":1.25},
{"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
{"label":"Space", "x":3.75, "y":5.25, "w":6.25},
{"label":"Alt", "x":10, "y":5.25},
{"label":"Fn", "x":11, "y":5.25},
{"label":"Ctrl", "x":12, "y":5.25},
{"label":"Left", "x":13.25, "y":5.5},
{"label":"Down", "x":14.25, "y":5.5},
{"label":"Right", "x":15.25, "y":5.5}
]
}
}
}

243
gmmk/pro/iso/iso.c Normal file
View File

@ -0,0 +1,243 @@
/* 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 "iso.h"
#ifdef RGB_MATRIX_ENABLE
// clang-format off
led_config_t g_led_config = {{
{ 4, NO_LED, NO_LED, 96, 65, 80, 5, 28 },
{ 8, 2, 9, 0, 10, 76, 1, 7 },
{ 14, 3, 15, 67, 16, 87, 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, 90, 47, 34, 48, 73, 79, 45 },
{ 52, 39, 53, 98, 54, 83, 44, 51 },
{ 58, 63, 59, 64, 95, 60, 62, 57 },
{ 11, 91, 55, 17, 33, 49, NO_LED, 70 },
{ NO_LED, 86, NO_LED, 61, 97, 66, 50, 56 }
}, {
{0, 0}, // 0, ESC, k13
{0, 15}, // 1, `, k16
{4, 26}, // 2, Tab, k11
{5, 38}, // 3, Caps, k21
{2, 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
{18, 49}, // 67, \, k23
{0, 8}, // 68, LED, l01
{224, 8}, // 69, LED, l11
{202, 0}, // 70, Prt, k97
{0, 15}, // 71, LED, l02
{224, 15}, // 72, LED, l12
{224, 15}, // 73, Del, k65
{0, 21}, // 74, LED, l03
{224, 21}, // 75, LED, l13
{224, 26}, // 76, PgUp, k15
{0, 28}, // 77, LED, l04
{224, 28}, // 78, LED, l14
{173, 15}, // 79, =, k66
{220, 64}, // 80, Right, k05
{0, 35}, // 81, LED, l05
{224, 35}, // 82, LED, l15
{224, 49}, // 83, End, k75
{0, 42}, // 84, LED, l06
{224, 42}, // 85, LED, l16
{195, 15}, // 86, BSpc, ka1
{224, 38}, // 87, PgDn, k25
{0, 48}, // 88, LED, l07
{224, 48}, // 89, LED, l17
{181, 26}, // 90, ], k61
{182, 49}, // 91, Sh_R, k91
{0, 55}, // 92, LED, l08
{224, 55}, // 93, LED, l18
{206, 52}, // 94, Up, k35
{184, 38}, // 95, #, k84
{191, 64}, // 96, Left, k03
{201, 26}, // 97, Enter, ka4
{206, 64}, // 98, 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, 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, CS4_SW1, CS5_SW1, CS6_SW1}, // 67, \, k23
{1, CS13_SW1, CS14_SW1, CS15_SW1}, // 68, LED, l01
{1, CS16_SW1, CS17_SW1, CS18_SW1}, // 69, LED, l11
{1, CS4_SW2, CS5_SW2, CS6_SW2}, // 70, Prt, k97
{1, CS13_SW2, CS14_SW2, CS15_SW2}, // 71, LED, l02
{1, CS16_SW2, CS17_SW2, CS18_SW2}, // 72, LED, l12
{1, CS4_SW3, CS5_SW3, CS6_SW3}, // 73, Del, k65
{1, CS13_SW3, CS14_SW3, CS15_SW3}, // 74, LED, l03
{1, CS16_SW3, CS17_SW3, CS18_SW3}, // 75, LED, l13
{1, CS4_SW4, CS5_SW4, CS6_SW4}, // 76, PgUp, k15
{1, CS13_SW4, CS14_SW4, CS15_SW4}, // 77, LED, l04
{1, CS16_SW4, CS17_SW4, CS18_SW4}, // 78, LED, l14
{1, CS1_SW5, CS2_SW5, CS3_SW5}, // 79, =, k66
{1, CS10_SW5, CS11_SW5, CS12_SW5}, // 80, Right, k05
{1, CS13_SW5, CS14_SW5, CS15_SW5}, // 81, LED, l05
{1, CS16_SW5, CS17_SW5, CS18_SW5}, // 82, LED, l15
{1, CS4_SW6, CS5_SW6, CS6_SW6}, // 83, End, k75
{1, CS13_SW6, CS14_SW6, CS15_SW6}, // 84, LED, l06
{1, CS16_SW6, CS17_SW6, CS18_SW6}, // 85, LED, l16
{1, CS1_SW7, CS2_SW7, CS3_SW7}, // 86, BSpc, ka1
{1, CS4_SW7, CS5_SW7, CS6_SW7}, // 87, PgDn, k25
{1, CS13_SW7, CS14_SW7, CS15_SW7}, // 88, LED, l07
{1, CS16_SW7, CS17_SW7, CS18_SW7}, // 89, LED, l17
{1, CS1_SW8, CS2_SW8, CS3_SW8}, // 90, ], k61
{1, CS4_SW8, CS5_SW8, CS6_SW8}, // 91, Sh_R, k91
{1, CS13_SW8, CS14_SW8, CS15_SW8}, // 92, LED, l08
{1, CS16_SW8, CS17_SW8, CS18_SW8}, // 93, LED, l18
{1, CS4_SW9, CS5_SW9, CS6_SW9}, // 94, Up, k35
{1, CS1_SW10, CS2_SW10, CS3_SW10}, // 95, #, k84
{1, CS4_SW10, CS5_SW10, CS6_SW10}, // 96, Left, k03
{1, CS1_SW11, CS2_SW11, CS3_SW11}, // 97, Enter, ka4
{1, CS4_SW11, CS5_SW11, CS6_SW11}, // 98, Down, k73
};
// clang-format on
#endif

52
gmmk/pro/iso/iso.h Normal file
View File

@ -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, k15, \
k21, k12, k22, k32, k42, k43, k53, k52, k62, k72, k82, k83, k84, ka4, k25, \
k00, k23, 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, k23, 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, k84, k85, k86, k87}, \
{ k90, k91, k92, k93, k94, k95, ___, k97}, \
{ ___, ka1, ___, ka3, ka4, ka5, ka6, ka7} \
}
// clang-format on

View File

@ -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+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and
// it'll be back to normal when you plug it back in.
//
// This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
// Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
[0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
_______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, 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

View File

@ -0,0 +1,115 @@
#include QMK_KEYBOARD_H
enum custom_keycodes
{
KC_DBL0 = SAFE_RANGE,
KC_YELLOW,
KC_GREEN,
};
bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
switch (keycode)
{
case KC_DBL0:
if (record->event.pressed)
{
// when keycode KC_DBL0 is pressed
SEND_STRING("00");
}
else
{
// when keycode KC_DBL0 is released
}
break;
case KC_YELLOW:
if (record->event.pressed)
{
//when yellow key is pressed
rgb_matrix_enable_noeeprom();
rgb_matrix_sethsv_noeeprom(HSV_YELLOW);
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
}
else
{
//when yellow key is not pressed
}
break;
case KC_GREEN:
if (record->event.pressed)
{
//when green key is pressed
rgb_matrix_enable_noeeprom();
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
}
else
{
//when green key is not poressed
}
break;
}
return true;
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
// Tab Q W E R T Y U I O P [ ] PgUp
// Caps A S D F G H J K L ; " # Enter PgDn
// Sh_L / Z X C V B N M , . ? Sh_R Up End
// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
// The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without
// this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB
// cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI
// if that's your preference.
//
// To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and
// it'll be back to normal when you plug it back in.
//
// This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
// Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
[0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(1), KC_MPLY,
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_MINS, KC_BSPC, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(
KC_ESC, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_MPLY,
KC_GRV, TG(0), KC_TRNS, TG(2), KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_MINS, KC_MINS, KC_BSPC, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_P4, KC_P5, KC_P6, KC_PAST, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_GRV, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_P0, KC_DBL0, KC_PDOT, KC_PPLS, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), KC_NLCK, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[2] = 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_TRNS, KC_MPLY,
KC_GRV, TG(0), TG(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_PSCR,
KC_TAB, BL_TOGG, BL_ON, KC_TRNS, KC_TRNS, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_DEL,
KC_CAPS, RGB_TOG, KC_YELLOW, KC_GREEN, KC_TRNS, KC_MYCM, KC_MAIL, KC_CALC, KC_TRNS, RGB_HUD, RGB_SAD, RGB_VAD, RESET, KC_ENT, KC_HOME,
KC_LSFT, KC_TRNS, KC_MPRV, KC_MNXT, KC_MSEL, KC_TRNS, KC_BRIU, KC_BRID, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT)
};
// clang-format on
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
return true;
}
#endif

View File

@ -0,0 +1,91 @@
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
// Tab Q W E R T Y U I O P [ ] PgUp
// Caps A S D F G H J K L ; " # Enter PgDn
// Sh_L / Z X C V B N M , . ? Sh_R Up End
// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
// The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without
// this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB
// cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI
// if that's your preference.
//
// To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and
// it'll be back to normal when you plug it back in.
//
// This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
// Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
[0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
_______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, 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

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

37
gmmk/pro/iso/readme.md Normal file
View File

@ -0,0 +1,37 @@
# GMMK PRO (ISO)
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/iso:default
Flashing example for this keyboard:
make gmmk/pro/iso: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+Backspace 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).

25
gmmk/pro/iso/rules.mk Normal file
View File

@ -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

View File

@ -0,0 +1,66 @@
/* 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(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.
[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_PGUP,
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_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_PSCR,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
KC_INS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, RESET, KC_RGUI, _______, _______, _______, _______, _______
),
};
bool encoder_update_user(uint8_t index, bool clockwise) {
if (clockwise) {
tap_code(KC_VOLU);
}
else {
tap_code(KC_VOLD);
}
return true;
}

1
gmmk/pro/keymaps/mike1808/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
secrets.h

View File

@ -0,0 +1,19 @@
QMK layout for gmmk/pro
=======================
## Secrets
The format is the same as [drashna's](../../../../users/drashna/readme_secrets.md) secrets implementation. Create a `secret.h` and define your secrets like this:
```c
static const char* secrets[] = {"secret1", "secret2", "secret3", "secret4", "secret5"};
```
## Rotary encoder knob
You can hookup your encoder functions by defining new encoder states in [encoder.h](./encoder.h), then in [encoder.c](./encoder.c) assign static variable `state` your new state depending on your desired condition and add callbacks to `encoder_mapping` array.
## RGB Matrix Ledmaps
RGB Matrix ledmaps is the future allowing you assign colors to individual keys on every keymap layer.
You can see some examples of my usage in the bottom of [keymap.c](./keymap.c).
Color defines are just HSV colors wrapped in curly braces, like `#define RED { HSV_RED }`.

View File

@ -0,0 +1,31 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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/>.
*/
#define COMBO_COUNT 1
#define COMBO_TERM 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_DISABLE_TIMEOUT 90000
#define MACRO_TIMER 5
#define TAPPING_TOGGLE 3
#define WPM_SMOOTHING 0.1
// this is for macOS so keyboard can work after sleep
#define NO_USB_STARTUP_CHECK

View File

@ -0,0 +1,111 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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 "encoder.h"
#include "mike1808.h"
#include "print.h"
#include "utils.h"
#include "process_record.h"
#include "rgb_matrix_ledmaps.h"
static uint8_t state = ENCODER_DEFAULT;
// clang-format off
const encoder_callback encoder_mapping[][2] = {
[ENCODER_VOLUME] = {&volume_up, &volume_down},
#ifdef RGB_MATRIX_ENABLE
[ENCODER_RGB_HUE] = {&rgb_matrix_increase_hue_noeeprom, &rgb_matrix_decrease_hue_noeeprom},
[ENCODER_RGB_SAT] = {&rgb_matrix_increase_sat_noeeprom, &rgb_matrix_decrease_sat_noeeprom},
[ENCODER_RGB_VAL] = {&rgb_matrix_increase_val_noeeprom, &rgb_matrix_decrease_val_noeeprom},
[ENCODER_RGB_EFFECT] = {&rgb_matrix_step_noeeprom, &rgb_matrix_step_reverse_noeeprom},
[ENCODER_RGB_EFFECT_SPEED] = {&rgb_matrix_increase_speed_noeeprom, &rgb_matrix_decrease_speed_noeeprom},
#endif // RGB_MATRIX_ENABLE
};
// clang-format on
void volume_up() { tap_code(KC_VOLU); }
void volume_down() { tap_code(KC_VOLD); }
bool encoder_update_user(uint8_t index, bool clockwise) {
dprintf("current encoder state is: %d\n", state);
if (clockwise) {
(*encoder_mapping[state][0])();
} else {
(*encoder_mapping[state][1])();
}
return true;
}
void handle_rgb_key(bool pressed) {
dprintf("handle_rgb_key %d\f", pressed);
if (pressed) {
rgb_matrix_layers_disable();
} else {
rgb_matrix_layers_enable();
}
}
static KeyPressState *rgb_state;
void keyboard_post_init_encoder() {
rgb_state = NewKeyPressState(handle_rgb_key);
}
bool process_record_encoder(uint16_t keycode, keyrecord_t *record) {
#ifdef RGB_MATRIX_ENABLE
switch (keycode) {
case KC_RGB_ENC_HUE ... KC_RGB_ENC_EFFECT:
if (record->event.pressed) {
# ifdef RGB_MATRIX_LEDMAPS_ENABLED
// disable layers so we can adjust RGB effects
rgb_state->press(rgb_state);
# endif // RGB_MATRIX_LEDMAPS_ENABLED
switch (keycode) {
case KC_RGB_ENC_HUE:
state = ENCODER_RGB_HUE;
break;
case KC_RGB_ENC_SAT:
state = ENCODER_RGB_SAT;
break;
case KC_RGB_ENC_VAL:
state = ENCODER_RGB_VAL;
break;
case KC_RGB_ENC_EFFECT_SPEED:
state = ENCODER_RGB_EFFECT_SPEED;
break;
case KC_RGB_ENC_EFFECT:
state = ENCODER_RGB_EFFECT;
break;
}
} else {
# ifdef RGB_MATRIX_LEDMAPS_ENABLED
rgb_state->release(rgb_state);
# endif // RGB_MATRIX_LEDMAPS_ENABLED
state = ENCODER_DEFAULT;
store_rgb_state_to_eeprom();
}
return false;
}
#endif // RGB_MATRIX_ENABLE
return true;
}

View File

@ -0,0 +1,35 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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/>.
*/
// To add a new functionality define a new state here and then assign
// the handler to the `encoder_callback`
#include "quantum.h"
enum encoder_state {
ENCODER_VOLUME = 0,
ENCODER_RGB_HUE,
ENCODER_RGB_SAT,
ENCODER_RGB_VAL,
ENCODER_RGB_EFFECT_SPEED,
ENCODER_RGB_EFFECT,
};
typedef void (*encoder_callback)(void);
#define ENCODER_DEFAULT ENCODER_VOLUME
void volume_up(void);
void volume_down(void);

View File

@ -0,0 +1,49 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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 "mike1808.h"
#include "print.h"
static bool wpm_rgb_enabled = false;
static uint8_t rgb_mode;
void rgb_matrix_indicators_keymap(void) {
if (wpm_rgb_enabled && rgb_matrix_is_enabled()) {
uint8_t wpm = get_current_wpm();
dprintf("WPM = %d\n", wpm);
HSV hsv = rgb_matrix_get_hsv();
hsv.h = wpm;
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b);
}
}
bool process_record_fun(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed && keycode == KC_WPM_RGB) {
if (wpm_rgb_enabled) {
wpm_rgb_enabled = false;
rgb_matrix_mode(rgb_mode);
} else {
wpm_rgb_enabled = true;
rgb_mode = rgb_matrix_get_mode();
rgb_matrix_enable();
rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR);
}
return false;
}
return true;
}

View File

@ -0,0 +1,127 @@
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>, Mikael Manukyan <arm.localhost@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 "mike1808.h"
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
[JK_ESC] = COMBO(jk_combo, KC_ESC),
};
// 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
[LINUX] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TT_FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[WINDOWS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[MACOS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______, _______
),
[FUNCTIONS] = LAYOUT(
_______, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_PSCR, _______,
_______, KC_LINX, KC_MAC, KC_WIN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RST, _______,
KC_CAPS, _______, _______, _______, _______, OS_GIT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_RGBH, KC_RGBS, KC_RGBV, KC_RGBE, KC_RGBP, KC_WRGB, _______, _______, _______, _______, _______, KC_PGUP, _______,
_______, _______, _______, RGB_TOG, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
[GIT] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, G_DIFF, _______, _______, _______, _______, _______, _______, G_PULL, G_PUSH, _______, _______, _______,
_______, G_ADD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, G_CHECK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
#ifdef RGB_MATRIX_LEDMAPS_ENABLED
#define ______ {0, 0, 0}
const ledmap PROGMEM ledmaps[] = {
// LU = Left Underglow, RU = Right Underglow
// LU_1 ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) RU_1
// LU_2 ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del RU_2
// LU_3 Tab Q W E R T Y U I O P [ ] \ PgUp RU_3
// LU_4 Caps A S D F G H J K L ; " Enter PgDn RU_4
// LU_5 Sh_L Z X C V B N M , . ? Sh_R Up End RU_5
// LU_6 Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right RU_6
[LINUX] = RGB_MATRIX_LAYOUT_LEDMAP(
PURPLE, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
PURPLE, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
PURPLE, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
PURPLE, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
PURPLE, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
PURPLE, ______, RED, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE
),
[WINDOWS] = RGB_MATRIX_LAYOUT_LEDMAP(
GREEN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
GREEN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
GREEN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
GREEN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
GREEN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
GREEN, ______, RED, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE
),
[MACOS] = RGB_MATRIX_LAYOUT_LEDMAP(
YELLOW, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
YELLOW, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
YELLOW, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
YELLOW, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
YELLOW, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
YELLOW, ______, ______, RED, ______, ______, ______, ______, ______, ______, ______, PURPLE
),
[FUNCTIONS] = RGB_MATRIX_LAYOUT_LEDMAP(
CYAN, GREEN, GREEN, GREEN, GREEN, GREEN, GREEN, ______, ______, ______, ______, GREEN, GREEN, GREEN, GREEN, ______, PURPLE,
CYAN, ______, GOLD, GOLD, GOLD, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, GOLD, PURPLE,
CYAN, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, TEAL, ______, PURPLE,
CYAN, TURQ, ______, ______, ______, ______, TURQ, ______, ______, ______, ______, ______, ______, ______, ______, PURPLE,
CYAN, ______, RED, RED, RED, RED, RED, RED, ______, ______, ______, ______, ______, RED, ______, PURPLE,
CYAN, ______, ______, BLUE, ______, ______, ______, ______, ______, ______, ______, PURPLE
),
};
#endif // RGB_MATRIX_LEDMAPS_ENABLED
// clang-format on

View File

@ -0,0 +1,68 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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 "mike1808.h"
#if (__has_include("secrets.h") && !defined(NO_SECRETS))
# include "secrets.h"
#else
// `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
// And I'm not familiar enough to know which is better or why...
static const char *const secret[] = {"test1", "test2", "test3", "test4", "test5"};
#endif
// userspace_config_t userspace_config;
bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo
if (!record->event.pressed) {
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
send_string_with_delay(secrets[keycode - KC_SECRET_1], MACRO_TIMER);
}
return false;
break;
}
return true;
}
void suspend_power_down_user(void) {
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_set_suspend_state(true);
#endif // RGB_MATRIX_ENABLE
}
void suspend_wakeup_init_user(void) {
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_set_suspend_state(false);
#endif // RGB_MATRIX_ENABLE
}
#ifdef RGB_MATRIX_ENABLE
void rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
// Turn on sideglow when CAPS LOCK is activated
if (host_keyboard_led_state().caps_lock) {
HSV hsv = {CAPS_LOCK_COLOR};
hsv.v = rgb_matrix_get_val();
RGB rgb = hsv_to_rgb(hsv);
for (uint8_t i = led_min; i < led_max; i++) {
if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) {
RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b);
}
}
}
}
#endif // RGB_MATRIX_ENABLE

View File

@ -0,0 +1,111 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include QMK_KEYBOARD_H
#include "rgb_matrix_ledmaps.h"
enum layout_names {
LINUX = 0, // Base Layout: The main keyboard layout that has all the characters
WINDOWS, // Base ayout for Windows
MACOS, // Base Layout for MacOS
FUNCTIONS, // Function Layout: The function key activated layout with default functions and
// some added ones
GIT, // GIT Layout: GIT shortcuts and macros
SECRETS, // Layer with secrets
};
enum custom_keycodes {
KC_CCCV = SAFE_RANGE, // Hold to copy, tap to paste
KC_LINUX,
KC_MAC,
KC_WIN,
KC_SECRET_1,
KC_SECRET_2,
KC_SECRET_3,
KC_SECRET_4,
KC_SECRET_5,
KC_RGB_ENC_HUE,
KC_RGB_ENC_SAT,
KC_RGB_ENC_VAL,
KC_RGB_ENC_EFFECT_SPEED,
KC_RGB_ENC_EFFECT,
KC_WPM_RGB,
};
enum git_macros {
// The start of this enum should always be equal to end of ctrl_keycodes + 1
G_INIT = KC_WPM_RGB + 1, // git init
G_CLONE, // git clone
G_CONF, // git config --global
G_ADD, // git add
G_DIFF, // git diff
G_RESET, // git reset
G_REBAS, // git rebase
G_BRANH, // git branch
G_CHECK, // git checkout
G_MERGE, // git merge
G_REMTE, // git remote add
G_FETCH, // git fetch
G_PULL, // git pull
G_PUSH, // git push
G_COMM, // git commit
G_STAT, // git status
G_LOG, // git log
NEW_SAFE_RANGE,
};
enum combos {
JK_ESC, // jk to ESC for Vim
};
#define KC_SEC1 KC_SECRET_1
#define KC_SEC2 KC_SECRET_2
#define KC_SEC3 KC_SECRET_3
#define KC_SEC4 KC_SECRET_4
#define KC_SEC5 KC_SECRET_5
#define KC_RGBH KC_RGB_ENC_HUE
#define KC_RGBS KC_RGB_ENC_SAT
#define KC_RGBV KC_RGB_ENC_VAL
#define KC_RGBE KC_RGB_ENC_EFFECT
#define KC_RGBP KC_RGB_ENC_EFFECT_SPEED
#define KC_WRGB KC_WPM_RGB
#define KC_LINX KC_LINUX
#define KC_RESET RESET
#define KC_RST KC_RESET
#define OS_GIT OSL(GIT)
#define TT_FN TT(FUNCTIONS)
#define OS_LGUI OSM(MOD_LGUI)
#define OS_RGUI OSM(MOD_RGUI)
#define OS_LSFT OSM(MOD_LSFT)
#define OS_RSFT OSM(MOD_RSFT)
#define OS_LCTL OSM(MOD_LCTL)
#define OS_RCTL OSM(MOD_RCTL)
#define OS_LALT OSM(MOD_LALT)
#define OS_RALT OSM(MOD_RALT)
#define OS_MEH OSM(MOD_MEH)
#define OS_HYPR OSM(MOD_HYPR)
#define CAPS_LOCK_COLOR HSV_RED

View File

@ -0,0 +1,119 @@
/* Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>,
Mikael Manukyan <arm.localhost@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 "mike1808.h"
#include "print.h"
#include "process_record.h"
uint16_t copy_paste_timer;
__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
return true;
}
__attribute__((weak)) bool process_record_encoder(uint16_t keycode, keyrecord_t *record) {
return true;
}
__attribute__((weak)) bool process_record_fun(uint16_t keycode, keyrecord_t *record) {
return true;
}
__attribute__((weak)) void keyboard_post_init_encoder(void) { return; }
static const char *git_commands[] = {
"git init ", "git clone ", "git config --global ", "git add ",
"git diff ", "git reset ", "git rebase ", "git branch -b \"",
"git checkout ", "git merge ", "git remote add ", "git fetch ",
"git pull ", "git push ", "git commit ", "git status ",
"git log ",
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef KEYLOGGER_ENABLE
uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %b, time: %5u, int: %b, count: %u\n",
keycode, record->event.key.col, record->event.key.row, record->event.pressed,
record->event.time, record->tap.interrupted, record->tap.count);
#endif // KEYLOGGER_ENABLE
switch (keycode) {
case KC_LINUX ... KC_WIN:
if (record->event.pressed) {
dprintf("set_single_persistent_default_layer %d\n", keycode - KC_LINUX + LINUX);
set_single_persistent_default_layer(keycode - KC_LINUX + LINUX);
return false;
}
break;
case KC_CCCV: // One key copy/paste
if (record->event.pressed) {
copy_paste_timer = timer_read();
} else {
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
if (layer_state_is(MACOS)) {
tap_code16(LGUI(KC_C));
} else {
tap_code16(LCTL(KC_C));
}
} else { // Tap, paste
if (layer_state_is(MACOS)) {
tap_code16(LGUI(KC_V));
} else {
tap_code16(LCTL(KC_V));
}
}
}
break;
case G_INIT ... G_LOG:
if (record->event.pressed) {
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
send_string_with_delay(git_commands[keycode - G_INIT], MACRO_TIMER);
return false;
}
break;
#ifdef RGB_MATRIX_ENABLE
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
rgb_matrix_set_color_all(0, 0, 0);
} break;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
rgb_matrix_set_color_all(0, 0, 0);
} break;
case LED_FLAG_UNDERGLOW: {
// This line is for LED idle timer. It disables the toggle so you can turn
// off LED completely if you like
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_disable();
} break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_enable();
} break;
}
}
return false;
#endif // RGB_MATRIX_ENABLE
}
return process_record_encoder(keycode, record) && process_record_secrets(keycode, record) &&
process_record_fun(keycode, record);
}
void keyboard_post_init_user() { keyboard_post_init_encoder(); }

View File

@ -0,0 +1,26 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "mike1808.h"
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
bool process_record_encoder(uint16_t keycode, keyrecord_t *record);
bool process_record_fun(uint16_t keycode, keyrecord_t *record);
void keyboard_post_init_encoder(void);

View File

@ -0,0 +1,71 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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 "rgb_matrix_ledmaps.h"
__attribute__((weak)) void rgb_matrix_indicators_keymap(void) { return; }
__attribute__((weak)) void rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
return;
}
#ifdef RGB_MATRIX_LEDMAPS_ENABLED
static bool enabled = true;
#endif // RGB_MATRIX_LEDMAPS_ENABLED
void rgb_matrix_indicators_user(void) { rgb_matrix_indicators_keymap(); }
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
#ifdef RGB_MATRIX_LEDMAPS_ENABLED
if (rgb_matrix_is_enabled() && enabled) {
set_layer_rgb(led_min, led_max, get_highest_layer(layer_state | default_layer_state));
}
#endif // RGB_MATRIX_LEDMAPS_ENABLED
rgb_matrix_indicators_advanced_keymap(led_min, led_max);
}
#ifdef RGB_MATRIX_LEDMAPS_ENABLED
void set_layer_rgb(uint8_t led_min, uint8_t led_max, int layer) {
const ledmap *l = &(ledmaps[layer]);
uint8_t val = rgb_matrix_get_val();
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
HSV hsv = {
.h = (*l)[i][0],
.s = (*l)[i][1],
.v = val,
};
if (hsv.h || hsv.s) {
RGB rgb = hsv_to_rgb(hsv);
RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b);
}
}
}
void rgb_matrix_layers_enable() {
dprintf("ledmaps are enabled\n");
enabled = true;
}
void rgb_matrix_layers_disable() {
dprintf("ledmaps are disabled\n");
enabled = false;
}
#endif // RGB_MATRIX_LEDMAPS_ENABLED

View File

@ -0,0 +1,100 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#ifdef RGB_MATRIX_LEDMAPS_ENABLED
// no association keycode
# define XXX \
{ 0, 0, 0 }
// clang-format off
# define RGB_MATRIX_LAYOUT_LEDMAP( \
ul1, k13, k26, k36, k31, k33, k07, k63, k71, k76, ka6, ka7, ka3, ka5, k97, k01, ur1, \
ul2, k16, k17, k27, k37, k47, k46, k56, k57, k67, k77, k87, k86, k66, ka1, k65, ur2, \
ul3, k11, k10, k20, k30, k40, k41, k51, k50, k60, k70, k80, k81, k61, ka2, k15, ur3, \
ul4, k21, k12, k22, k32, k42, k43, k53, k52, k62, k72, k82, k83, ka4, k25, ur4, \
ul5, k00, k14, k24, k34, k44, k45, k55, k54, k64, k74, k85, k91, k35, k75, ur5, \
ul6, k06, k90, k93, k94, k95, k92, k04, k03, k73, k05, ur6 \
) \
{ \
k13, k16, k11, k21, k00, k06, k26, k17, \
k10, k12, k14, k90, k36, k27, k20, k22, \
k24, k93, k31, k37, k30, k32, k34, k33, \
k47, k40, k42, k44, k07, k46, k41, k43, \
k45, k94, k63, k56, k51, k53, k55, k71, \
k57, k50, k52, k54, k76, k67, k60, k62, \
k64, k95, ka6, k77, k70, k72, k74, k92, \
ka7, k87, k80, k82, k85, ka3, k86, k81, \
k83, k04, ka5, ul1, ur1, k97, ul2, ur2, \
k65, ul2, ur2, k15, ul3, ur3, k66, k05, \
ul3, ur3, k75, ul4, ur4, ka1, k25, ul5, \
ur5, k61, k91, ul6, ur6, ka2, k35, k03, \
ka4, k73 \
}
// clang-format on
typedef uint8_t ledmap[DRIVER_LED_TOTAL][3];
extern const ledmap ledmaps[];
void set_layer_rgb(uint8_t led_min, uint8_t led_max, int layer);
void rgb_matrix_layers_enable(void);
void rgb_matrix_layers_disable(void);
// Just a handy defines to make our ledmaps look better
# define RED \
{ HSV_RED }
# define CORAL \
{ HSV_CORAL }
# define ORANGE \
{ HSV_ORANGE }
# define GOLDEN \
{ HSV_GOLDENROD }
# define GOLD \
{ HSV_GOLD }
# define YELLOW \
{ HSV_YELLOW }
# define CHART \
{ HSV_CHARTREUSE }
# define GREEN \
{ HSV_GREEN }
# define SPRING \
{ HSV_SPRINGGREEN }
# define TURQ \
{ HSV_TURQUOISE }
# define TEAL \
{ HSV_TEAL }
# define CYAN \
{ HSV_CYAN }
# define AZURE \
{ HSV_AZURE }
# define BLUE \
{ HSV_BLUE }
# define PURPLE \
{ HSV_PURPLE }
# define MAGENT \
{ HSV_MAGENTA }
# define PINK \
{ HSV_PINK }
# define BLACK \
{ HSV_BLACK }
#endif // RGB_MATRIX_LEDMAPS_ENABLED
void rgb_matrix_indicators_keymap(void);
void rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max);

View File

@ -0,0 +1,25 @@
VIA_ENABLE = no
COMBO_ENABLE = yes
COMMAND_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RAW_ENABLE = no
CONSOLE_ENABLE = yes
WPM_ENABLE = no
RGB_MATRIX_LEDMAPS = yes
SRC += utils.c
SRC += mike1808.c
SRC += process_record.c
SRC += encoder.c
ifeq ($(strip $(WPM_ENABLE)), yes)
SRC += fun.c
endif
ifeq ($(strip $(RGB_MATRIX_LEDMAPS)), yes)
SRC += rgb_matrix_ledmaps.c
OPT_DEFS += -DRGB_MATRIX_LEDMAPS_ENABLED
endif

View File

@ -0,0 +1,64 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@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 "utils.h"
void store_rgb_state_to_eeprom() {
uint8_t mode = rgb_matrix_get_mode();
uint8_t speed = rgb_matrix_get_speed();
HSV color = rgb_matrix_get_hsv();
rgb_matrix_mode(mode);
rgb_matrix_set_speed(speed);
rgb_matrix_sethsv(color.h, color.s, color.v);
}
void press(KeyPressState *self) {
self->_count++;
dprintf("KPS: press: %d\n", self->_count);
// pressed the first time
if (self->_count == 1) {
self->hander(true);
}
}
void release(KeyPressState *self) {
self->_count--;
dprintf("KPS: release: %d\n", self->_count);
// all keys are relased
if (self->_count == 0) {
self->hander(false);
}
}
void reset(KeyPressState *self) {
self->_count = 0;
}
KeyPressState *NewKeyPressState(key_press_handler handler) {
KeyPressState *kps = (KeyPressState *)(malloc(sizeof(KeyPressState)));
kps->_count = 0;
kps->press = press;
kps->release = release;
kps->reset = reset;
kps->hander = handler;
return kps;
}

View File

@ -0,0 +1,32 @@
/* Copyright 2021 Mikael Manukyan <arm.localhost@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
void store_rgb_state_to_eeprom(void);
typedef void (*key_press_handler)(bool);
typedef struct KeyPressState KeyPressState;
struct KeyPressState {
int _count;
void (*press)(KeyPressState *self);
void (*release)(KeyPressState *self);
void (*reset)(KeyPressState *self);
key_press_handler hander;
};
KeyPressState *NewKeyPressState(key_press_handler);

6
gmmk/pro/mcuconf.h Normal file
View File

@ -0,0 +1,6 @@
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI1
#define STM32_SPI_USE_SPI1 TRUE

16
gmmk/pro/pro.c Normal file
View File

@ -0,0 +1,16 @@
/* 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 "pro.h"

25
gmmk/pro/pro.h Normal file
View File

@ -0,0 +1,25 @@
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#if defined(KEYBOARD_gmmk_pro_ansi)
# include "ansi.h"
#elif defined(KEYBOARD_gmmk_pro_iso)
# include "iso.h"
#endif // GMMK Pro revisions