Last active
September 23, 2023 22:13
-
-
Save iakobou/1eef4b0cd61e9863965119d289fb2a36 to your computer and use it in GitHub Desktop.
2021 Massdrop CTRL QMK RGB Matrix Keymap for use on gaming PC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Massdrop CTRL with QMK RGB Matrix for use on gaming PC | |
#include QMK_KEYBOARD_H | |
enum ctrl_keycodes { | |
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active | |
U_T_AGCR, //USB Toggle Automatic GCR control | |
DBG_TOG, //DEBUG Toggle On / Off | |
DBG_MTRX, //DEBUG Toggle Matrix Prints | |
DBG_KBD, //DEBUG Toggle Keyboard Prints | |
DBG_MOU, //DEBUG Toggle Mouse Prints | |
MD_BOOT, //Restart into bootloader after hold timeout | |
QMK, | |
COMPILE, | |
LOAD, | |
}; | |
keymap_config_t keymap_config; | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
[0] = LAYOUT( | |
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ | |
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_INS, KC_HOME, 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_DEL, KC_END, 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ | |
), | |
[1] = LAYOUT( | |
_______, TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \ | |
_______, QMK, COMPILE, LOAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, MD_BOOT, KC_MPLY, KC_MSTP, KC_VOLU, \ | |
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI,_______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \ | |
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______ \ | |
), | |
[2] = LAYOUT( | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SPC, KC_SPC, KC_SPC, KC_SPC, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, KC_SPC, _______, MO(3), _______, _______, _______, _______, _______ \ | |
), | |
[3] = LAYOUT( | |
_______, TO(0), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ | |
), | |
/* | |
[x] = LAYOUT( | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ | |
), | |
*/ | |
}; | |
// Runs just one time when the keyboard initializes. | |
void matrix_init_user(void) { | |
}; | |
// Runs constantly in the background, in a loop. | |
void matrix_scan_user(void) { | |
}; | |
#define MODS_SHIFT (get_mods() & MOD_MASK_SHIFT) | |
#define MODS_CTRL (get_mods() & MOD_MASK_CTRL) | |
#define MODS_ALT (get_mods() & MOD_MASK_ALT) | |
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
static uint32_t key_timer; | |
switch (keycode) { | |
case QMK: | |
if (record->event.pressed) { | |
// when keycode QMK is pressed | |
SEND_STRING("cd /c/Users/jgreg/qmk_firmware/"SS_TAP(X_ENTER)); | |
} else { | |
// when keycode QMK is released | |
} | |
return false; | |
case COMPILE: | |
if (record->event.pressed) { | |
// when keycode COMPILE is pressed | |
SEND_STRING("qmk compile"SS_TAP(X_ENTER)); | |
} else { | |
// when keycode COMPILE is released | |
} | |
return false; | |
case LOAD: | |
if (record->event.pressed) { | |
// when keycode LOAD is pressed | |
SEND_STRING("./mdloader_windows.exe --first --download massdrop_ctrl_default.bin --restart"SS_TAP(X_ENTER)); | |
} else { | |
// when keycode LOAD is released | |
} | |
return false; | |
case U_T_AUTO: | |
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { | |
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); | |
} | |
return false; | |
case U_T_AGCR: | |
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { | |
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); | |
} | |
return false; | |
case DBG_TOG: | |
if (record->event.pressed) { | |
TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); | |
} | |
return false; | |
case DBG_MTRX: | |
if (record->event.pressed) { | |
TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); | |
} | |
return false; | |
case DBG_KBD: | |
if (record->event.pressed) { | |
TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); | |
} | |
return false; | |
case DBG_MOU: | |
if (record->event.pressed) { | |
TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); | |
} | |
return false; | |
case MD_BOOT: | |
if (record->event.pressed) { | |
key_timer = timer_read32(); | |
} else { | |
if (timer_elapsed32(key_timer) >= 500) { | |
reset_keyboard(); | |
} | |
} | |
return false; | |
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 | LED_FLAG_INDICATOR); | |
rgb_matrix_set_color_all(0, 0, 0); | |
} | |
break; | |
case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { | |
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); | |
rgb_matrix_set_color_all(0, 0, 0); | |
} | |
break; | |
case LED_FLAG_UNDERGLOW: { | |
rgb_matrix_set_flags(LED_FLAG_NONE); | |
rgb_matrix_disable_noeeprom(); | |
} | |
break; | |
default: { | |
rgb_matrix_set_flags(LED_FLAG_ALL); | |
rgb_matrix_enable_noeeprom(); | |
} | |
break; | |
} | |
} | |
return false; | |
default: | |
return true; //Process all other keycodes normally | |
} | |
} | |
void rgb_matrix_indicators_user(void) { | |
uint8_t layer = biton32(layer_state); | |
switch (layer) { | |
case 0: | |
rgb_matrix_set_color_all(0, 0, 255); //Light up all the keys in blue | |
break; | |
case 1: | |
rgb_matrix_set_color_all(0, 0, 0); // rest of keys blank/black | |
rgb_matrix_set_color(29, 255, 0, 0); // key = BACKSPACE for RESET | |
rgb_matrix_set_color(81, 0, 250, 0); // key = Fn | |
rgb_matrix_set_color(1, 255, 0, 100); // key = F1 to enter into PINK layer 2 for extra SPACEBAR keys | |
rgb_matrix_set_color(17, 255, 100, 0); // key = 1 for cd to QMK | |
rgb_matrix_set_color(18, 255, 150, 0); // key = 2 for QMK COMPILE | |
rgb_matrix_set_color(19, 255, 250, 0); // key = 3 for MDLOADER | |
break; | |
case 2: | |
//rgb_matrix_set_color(index, red, green, blue); >> this is the template | |
rgb_matrix_set_color_all(0,0,255); // rest of keys maintains BLUE base color | |
rgb_matrix_set_color(81, 0, 250, 0); // key = Fn | |
rgb_matrix_set_color(62, 255, 0, 100); // key = ENTER in PINK for extra SPACEBAR | |
rgb_matrix_set_color(61, 255, 0, 100); // key = ' in PINK for extra SPACEBAR | |
rgb_matrix_set_color(60, 255, 0, 100); // key = ; in PINK for extra SPACEBAR | |
rgb_matrix_set_color(59, 255, 0, 100); // key = l in PINK for extra SPACEBAR | |
rgb_matrix_set_color(79, 255, 0, 100); // key = SPACE in PINK | |
break; | |
case 3: | |
rgb_matrix_set_color_all(0, 0, 0); // rest of keys blank/black | |
rgb_matrix_set_color(1, 0, 0, 255); // key = F1 to return to BLUE default layer | |
rgb_matrix_set_color(81, 0, 250, 0); // key = Fn | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment