diff --git a/keyboards/massdrop/alt/keymap.c b/keyboards/massdrop/alt/keymap.c new file mode 100644 index 00000000..c2961f58 --- /dev/null +++ b/keyboards/massdrop/alt/keymap.c @@ -0,0 +1,277 @@ +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#include QMK_KEYBOARD_H + +#define TAPPING_TERM 200 + +#define CAPS_LED 30 +#define LALT_LED 60 + +#define RGB_KMN_NO_COLOR 0, 0, 0 +#define RGB_KMN_CYAN 128, 255, 255 +#define RGB_KMN_PRPL 215, 195, 42 +#define RGB_KMN_CYAN_HILIGHT 0, 191, 255 + +#define HS_KMN_ORANGE 10,255 +#define HS_KMN_CYAN 128, 255 + +keymap_config_t keymap_config; +rgb_config_t rgb_matrix_config; + +uint8_t cur_dance(qk_tap_dance_state_t *state); +void al_finished(qk_tap_dance_state_t *state, void *user_data); +void al_reset(qk_tap_dance_state_t *state, void *user_data); + +enum alt_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 +}; + +typedef struct { + bool is_press_action; + uint8_t state; +} tap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD, + DOUBLE_TAP +}; + +enum td_keycodes { + ALT_LAYER // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance. +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [ALT_LAYER] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, al_finished, al_reset) +}; + +const uint8_t PROGMEM layercolors[][2] = { + [0] = {HS_KMN_ORANGE}, + [1] = {HS_KMN_CYAN}, + [2] = {HS_KMN_CYAN} +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_65_ansi_blocker(KC_GESC, 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, + LM(1, MOD_LALT), 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, TD(ALT_LAYER), KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [1] = LAYOUT_65_ansi_blocker(KC_GRV, 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_DEL, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_INS, + 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_PSCR, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PLAY_PAUSE, KC_RSFT, KC_VOLU, KC_MUTE, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, RGB_VAD, KC_VOLD, RGB_VAI), + [2] = LAYOUT_65_ansi_blocker(KC_ESC, 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_MS_UP, KC_NO, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LSFT, KC_NO, KC_X, KC_C, KC_V, KC_NO, KC_NO, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LCTL, KC_NO, TG(2), KC_NO, TG(2), KC_NO, KC_NO, KC_NO, KC_NO), +}; + +const uint8_t PROGMEM ledcolors[][DRIVER_LED_TOTAL][3] = { + [1] = { + {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, + {RGB_KMN_CYAN}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, + {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_CYAN}, + {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_CYAN}, {RGB_KMN_NO_COLOR}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, + {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN}, {RGB_KMN_CYAN} + }, + [2] = { + {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, + {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, + {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_PRPL}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, + {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, + {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_PRPL}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR}, {RGB_KMN_NO_COLOR} + }, +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + rgb_matrix_config.raw = pgm_read_dword(EECONFIG_RGB_MATRIX); + + rgb_matrix_enable(); + rgb_matrix_sethsv(10, 255, 95); + rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { +}; + +uint8_t cur_dance(qk_tap_dance_state_t *state) { + if (state->count == 1) { + if (!state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } else if (state->count == 2) return DOUBLE_TAP; + else return 8; +} + +// Initialize tap structure associated with example tap dance key +static tap al_tap_state = { + .is_press_action = true, + .state = 0 +}; + +// Functions that control what our tap dance key does +void al_finished(qk_tap_dance_state_t *state, void *user_data) { + al_tap_state.state = cur_dance(state); + switch (al_tap_state.state) { + case SINGLE_TAP: + tap_code(KC_LALT); + break; + case SINGLE_HOLD: + register_mods(MOD_BIT(KC_LALT)); + break; + case DOUBLE_TAP: + // Check to see if the layer is already set + if (layer_state_is(2)) { + // If already set, then switch it off + layer_off(2); + } else { + // If not already set, then switch the layer on + layer_on(2); + } + break; + } +} + +void al_reset(qk_tap_dance_state_t *state, void *user_data) { + // If the key was held down and now is released then switch off the layer + if (al_tap_state.state == SINGLE_HOLD) { + unregister_mods(MOD_BIT(KC_LALT)); + } + al_tap_state.state = 0; +} + +// Set the colors for individual LEDs for a given layer +void set_leds_color( int layer) { + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + uint8_t val = pgm_read_byte(&ledcolors[layer][i][2]); + // if the brightness of the led is set to 0 in the map, + // the value is not overriden with global controls, allowing the led + // to appear turned off + HSV hsv = { .h = pgm_read_byte(&ledcolors[layer][i][0]), .s = pgm_read_byte(&ledcolors[layer][i][1]), .v = val == 0 ? 0 : rgb_matrix_config.hsv.v}; + RGB rgb = hsv_to_rgb( hsv ); + rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); + } +} + +// Set the colors for ALL LEDs for a given layer +void set_layer_color( uint8_t layer ) { + HSV hsv = { .h = pgm_read_byte(&layercolors[layer][0]), .s = pgm_read_byte(&layercolors[layer][1]), .v = rgb_matrix_config.hsv.v}; + RGB rgb = hsv_to_rgb( hsv ); + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); + } +} + +// Override standard rgb colorization stuff +void rgb_matrix_indicators_user(void) { + uint32_t mode = rgblight_get_mode(); + // assign colors if the matrix is on and the current mode + // is SOLID COLORS => No animations running + if(rgb_matrix_config.enable == 1 && mode == RGB_MATRIX_SOLID_COLOR) { + uint8_t layer = biton32(layer_state); + switch (layer) { + case 0: + set_layer_color(0); + break; + case 1: + set_leds_color(1); + break; + case 2: + set_leds_color(2); + break; + } + } + if (host_keyboard_leds() & (1<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); + rgb_matrix_set_color_all(0, 0, 0); + } + break; + case LED_FLAG_KEYLIGHT: { + 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 + } +} diff --git a/keyboards/massdrop/alt/layer-1.json b/keyboards/massdrop/alt/layer-1.json new file mode 100644 index 00000000..9cb327ed --- /dev/null +++ b/keyboards/massdrop/alt/layer-1.json @@ -0,0 +1,149 @@ +[ + { + "backcolor": "#ffa100", + "name": "Layer 1", + "author": "KemoNine" + }, + [ + "~\nEsc", + "!\n1", + "@\n2", + "#\n3", + "$\n4", + "%\n5", + "^\n6", + "&\n7", + "*\n8", + "(\n9", + ")\n0", + "_\n-", + "+\n=", + { + "a": 6, + "w": 2 + }, + "Backspace", + "Home" + ], + [ + { + "a": 4, + "w": 1.5 + }, + "Tab", + "Q", + "W", + "E", + "R", + "T", + "Y", + "U", + "I", + "O", + "P", + "{\n[", + "}\n]", + { + "w": 1.5 + }, + "|\n\\", + { + "a": 6 + }, + "Page Up" + ], + [ + { + "w": 1.75 + }, + "Alt + Fn", + { + "a": 4 + }, + "A", + "S", + "D", + "F", + "G", + "H", + "J", + "K", + "L", + ":\n;", + "\"\n'", + { + "a": 6, + "w": 2.25 + }, + "Enter", + "Page Down" + ], + [ + { + "w": 2.25 + }, + "Shift", + { + "a": 4 + }, + "Z", + "X", + "C", + "V", + "B", + "N", + "M", + "<\n,", + ">\n.", + "?\n/", + { + "a": 6, + "w": 1.75 + }, + "Shift", + { + "a": 7 + }, + "↑", + { + "a": 6 + }, + "End" + ], + [ + { + "w": 1.25 + }, + "Ctrl", + { + "w": 1.25 + }, + "Win", + { + "a": 4, + "w": 1.25 + }, + "Mouse\nAlt", + { + "a": 7, + "w": 6.25 + }, + "", + { + "a": 6, + "w": 1.25 + }, + "Fn", + { + "w": 1.25 + }, + "Ctrl", + { + "x": 0.5, + "a": 7 + }, + "←", + "↓", + "→" + ] +] \ No newline at end of file diff --git a/keyboards/massdrop/alt/layer-1.png b/keyboards/massdrop/alt/layer-1.png new file mode 100644 index 00000000..e893827b Binary files /dev/null and b/keyboards/massdrop/alt/layer-1.png differ diff --git a/keyboards/massdrop/alt/layer-2.json b/keyboards/massdrop/alt/layer-2.json new file mode 100644 index 00000000..e3867000 --- /dev/null +++ b/keyboards/massdrop/alt/layer-2.json @@ -0,0 +1,147 @@ +[ + { + "backcolor": "#00f3ff", + "name": "Layer 2", + "author": "KemoNine" + }, + [ + "~\n`", + { + "a": 6 + }, + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + { + "w": 2 + }, + "Del", + "Del" + ], + [ + { + "w": 1.5 + }, + "Caps", + { + "a": 7 + }, + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + { + "a": 6, + "w": 1.5 + }, + "DL Mode", + "Ins" + ], + [ + { + "a": 7, + "w": 1.75 + }, + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + { + "w": 2.25 + }, + "", + { + "a": 6 + }, + "Prnt Scn" + ], + [ + { + "a": 7, + "w": 2.25 + }, + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + { + "a": 6 + }, + "Play Pause", + { + "a": 7, + "w": 1.75 + }, + "", + { + "a": 6 + }, + "Vol Up", + "Mute" + ], + [ + { + "a": 7, + "w": 1.25 + }, + "", + { + "w": 1.25 + }, + "", + { + "w": 1.25 + }, + "", + { + "w": 6.25 + }, + "", + { + "w": 1.25 + }, + "", + { + "a": 6, + "w": 1.25 + }, + "Alt", + { + "x": 0.5 + }, + "BL+", + "Vol Dn", + "BL-" + ] +] \ No newline at end of file diff --git a/keyboards/massdrop/alt/layer-2.png b/keyboards/massdrop/alt/layer-2.png new file mode 100644 index 00000000..43df9cfc Binary files /dev/null and b/keyboards/massdrop/alt/layer-2.png differ diff --git a/keyboards/massdrop/alt/layer-3.json b/keyboards/massdrop/alt/layer-3.json new file mode 100644 index 00000000..8e297bdf --- /dev/null +++ b/keyboards/massdrop/alt/layer-3.json @@ -0,0 +1,167 @@ +[ + { + "backcolor": "#ba00ff", + "name": "Layer 3", + "author": "KemoNine" + }, + [ + { + "a": 7 + }, + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + { + "w": 2 + }, + "", + "" + ], + [ + { + "w": 1.5 + }, + "", + "", + "", + { + "a": 6 + }, + "Up", + { + "a": 7 + }, + "", + "", + "", + { + "a": 6 + }, + "Wheel Up", + { + "a": 7 + }, + "", + "", + "", + "", + "", + { + "w": 1.5 + }, + "", + "" + ], + [ + { + "w": 1.75 + }, + "", + "", + { + "a": 6 + }, + "Left", + "Down", + "Right", + { + "a": 7 + }, + "", + "", + { + "a": 6 + }, + "Left Click", + "Right Click", + { + "a": 7 + }, + "", + "", + "", + { + "w": 2.25 + }, + "", + "" + ], + [ + { + "a": 6, + "w": 2.25 + }, + "Shift", + { + "a": 7 + }, + "", + "", + "", + "", + "", + "", + { + "a": 6 + }, + "Wheel Down", + { + "a": 7 + }, + "", + "", + "", + { + "w": 1.75 + }, + "", + "", + "" + ], + [ + { + "a": 6, + "w": 1.25 + }, + "Ctrl", + { + "a": 7, + "w": 1.25 + }, + "", + { + "a": 6, + "w": 1.25 + }, + "Alt", + { + "a": 7, + "w": 6.25 + }, + "", + { + "w": 1.25 + }, + "", + { + "w": 1.25 + }, + "", + { + "x": 0.5 + }, + "", + "", + "" + ] +] \ No newline at end of file diff --git a/keyboards/massdrop/alt/layer-3.png b/keyboards/massdrop/alt/layer-3.png new file mode 100644 index 00000000..f17d9118 Binary files /dev/null and b/keyboards/massdrop/alt/layer-3.png differ diff --git a/keyboards/massdrop/alt/massdrop_alt_kemonine.bin b/keyboards/massdrop/alt/massdrop_alt_kemonine.bin new file mode 100644 index 00000000..e7c2fc78 Binary files /dev/null and b/keyboards/massdrop/alt/massdrop_alt_kemonine.bin differ diff --git a/keyboards/massdrop/alt/rules.mk b/keyboards/massdrop/alt/rules.mk new file mode 100644 index 00000000..d6c1de32 --- /dev/null +++ b/keyboards/massdrop/alt/rules.mk @@ -0,0 +1,2 @@ +MOUSEKEY_ENABLE = yes +TAP_DANCE_ENABLE = yes \ No newline at end of file