From 740b07abe7957fc53cfffc646654d754d7b327cc Mon Sep 17 00:00:00 2001 From: Bart Riemens Date: Wed, 3 Apr 2019 10:03:22 +0200 Subject: [PATCH] Add Massdrop CTRL mappings --- .../ctrl/keymaps/briemens-tap/keymap.c | 218 ++++++++++++++++++ .../massdrop/ctrl/keymaps/briemens/keymap.c | 30 +-- keyboards/massdrop/ctrl/rules.mk | 3 +- mdloader_mac.dms | Bin 0 -> 41956 bytes 4 files changed, 223 insertions(+), 28 deletions(-) create mode 100644 keyboards/massdrop/ctrl/keymaps/briemens-tap/keymap.c create mode 100755 mdloader_mac.dms diff --git a/keyboards/massdrop/ctrl/keymaps/briemens-tap/keymap.c b/keyboards/massdrop/ctrl/keymaps/briemens-tap/keymap.c new file mode 100644 index 000000000..a3805ea04 --- /dev/null +++ b/keyboards/massdrop/ctrl/keymaps/briemens-tap/keymap.c @@ -0,0 +1,218 @@ +#include QMK_KEYBOARD_H +// + +enum ctrl_keycodes { + L_BRI = SAFE_RANGE, //LED Brightness Increase + L_BRD, //LED Brightness Decrease + L_PTN, //LED Pattern Select Next + L_PTP, //LED Pattern Select Previous + L_PSI, //LED Pattern Speed Increase + L_PSD, //LED Pattern Speed Decrease + L_T_MD, //LED Toggle Mode + L_T_ONF, //LED Toggle On / Off + L_ON, //LED On + L_OFF, //LED Off + L_T_BR, //LED Toggle Breath Effect + L_T_PTD, //LED Toggle Scrolling Pattern Direction + U_T_AUTO, //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 + SFT_LCK +}; + +#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode +//alias for tapdance +#define SftLck TD(SFT_LCK) +//This is the ANSI version of the PCB + +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, \ + MT(KC_LCTL, 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, \ + LT(2, 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, \ + SftLck, 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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, 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_MUTE, 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_MPLY, KC_MSTP, KC_VOLU, \ + L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \ + L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + ), + [2] = 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_BRIGHTNESS_DOWN, KC_BRIGHTNESS_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, LCTL(KC_Q), LCTL(KC_W), LCTL(KC_E), LCTL(KC_R), LCTL(KC_T), LCTL(KC_Y), KC_PGUP, KC_HOME, KC_END, KC_PGDOWN, LSFT(LCTL(KC_TAB)), LCTL(KC_TAB), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LCTL(LALT(KC_SCOLON)), LCTL(LALT(KC_QUOTE)), LGUI(KC_TAB), \ + KC_LSFT, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_B), LALT(KC_BSPACE), KC_BSPACE, KC_DELETE, LALT(KC_DELETE), LGUI(KC_F), KC_RSFT, KC_TRNS, \ + KC_LCTL, KC_LALT, KC_LGUI, LCTL(LALT(KC_ENT)), KC_RALT, MO(1) , KC_APP, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS \ + ), +}; + +// 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_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT)) +#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL)) +#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT)) + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + static uint32_t key_timer; + + switch (keycode) { + case L_BRI: + if (record->event.pressed) { + if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX; + else gcr_desired += LED_GCR_STEP; + if (led_animation_breathing) gcr_breathe = gcr_desired; + } + return false; + case L_BRD: + if (record->event.pressed) { + if (LED_GCR_STEP > gcr_desired) gcr_desired = 0; + else gcr_desired -= LED_GCR_STEP; + if (led_animation_breathing) gcr_breathe = gcr_desired; + } + return false; + case L_PTN: + if (record->event.pressed) { + if (led_animation_id == led_setups_count - 1) led_animation_id = 0; + else led_animation_id++; + } + return false; + case L_PTP: + if (record->event.pressed) { + if (led_animation_id == 0) led_animation_id = led_setups_count - 1; + else led_animation_id--; + } + return false; + case L_PSI: + if (record->event.pressed) { + led_animation_speed += ANIMATION_SPEED_STEP; + } + return false; + case L_PSD: + if (record->event.pressed) { + led_animation_speed -= ANIMATION_SPEED_STEP; + if (led_animation_speed < 0) led_animation_speed = 0; + } + return false; + case L_T_MD: + if (record->event.pressed) { + led_lighting_mode++; + if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL; + } + return false; + case L_T_ONF: + if (record->event.pressed) { + led_enabled = !led_enabled; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_ON: + if (record->event.pressed) { + led_enabled = 1; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_OFF: + if (record->event.pressed) { + led_enabled = 0; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_T_BR: + if (record->event.pressed) { + led_animation_breathing = !led_animation_breathing; + if (led_animation_breathing) { + gcr_breathe = gcr_desired; + led_animation_breathe_cur = BREATHE_MIN_STEP; + breathe_dir = 1; + } + } + return false; + case L_T_PTD: + if (record->event.pressed) { + led_animation_direction = !led_animation_direction; + } + 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; + default: + return true; //Process all other keycodes normally + } +} + +// Shift vs capslock function. From bbaserdem's Planck keymap. +void caps_tap (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_LSFT); + } else if (state->count == 2) { + unregister_code (KC_LSFT); + register_code (KC_CAPS); + } +} +void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_LSFT); + } else { + unregister_code (KC_CAPS); + } +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Shift, twice for Caps Lock + [SFT_LCK] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end ) +}; diff --git a/keyboards/massdrop/ctrl/keymaps/briemens/keymap.c b/keyboards/massdrop/ctrl/keymaps/briemens/keymap.c index a3805ea04..d079edfd5 100644 --- a/keyboards/massdrop/ctrl/keymaps/briemens/keymap.c +++ b/keyboards/massdrop/ctrl/keymaps/briemens/keymap.c @@ -21,7 +21,6 @@ enum ctrl_keycodes { DBG_KBD, //DEBUG Toggle Keyboard Prints DBG_MOU, //DEBUG Toggle Mouse Prints MD_BOOT, //Restart into bootloader after hold timeout - SFT_LCK }; #define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode @@ -35,9 +34,9 @@ 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, \ - MT(KC_LCTL, 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_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, \ LT(2, 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, \ - SftLck, 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ ), [1] = LAYOUT( @@ -45,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_MPLY, KC_MSTP, KC_VOLU, \ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_CAPS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), [2] = LAYOUT( @@ -193,26 +192,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; //Process all other keycodes normally } } - -// Shift vs capslock function. From bbaserdem's Planck keymap. -void caps_tap (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_LSFT); - } else if (state->count == 2) { - unregister_code (KC_LSFT); - register_code (KC_CAPS); - } -} -void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_LSFT); - } else { - unregister_code (KC_CAPS); - } -} - -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Shift, twice for Caps Lock - [SFT_LCK] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end ) -}; diff --git a/keyboards/massdrop/ctrl/rules.mk b/keyboards/massdrop/ctrl/rules.mk index 966f43f37..25adce197 100644 --- a/keyboards/massdrop/ctrl/rules.mk +++ b/keyboards/massdrop/ctrl/rules.mk @@ -20,6 +20,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) 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 +<<<<<<< HEAD BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow @@ -32,7 +33,7 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) VIRTSER_ENABLE = no # USB Serial Driver RAW_ENABLE = no # Raw device AUTO_SHIFT_ENABLE = no # Auto Shift -TAP_DANCE_ENABLE = yes +TAP_DANCE_ENABLE = no # Custom RGB matrix handling RGB_MATRIX_ENABLE = custom diff --git a/mdloader_mac.dms b/mdloader_mac.dms new file mode 100755 index 0000000000000000000000000000000000000000..8157ed902158ee873404b1279f684accc5e8f37c GIT binary patch literal 41956 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

>B&wxDZCpCZ$Q2gh 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

~-y-oJmOF%mMDAJa6IDcA95=z*O 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