-
-
Notifications
You must be signed in to change notification settings - Fork 40.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Urbanvanilla's keymap for massdrop/alt keyboard adds in an idle timer to turn off RGB after set amount of time. poor unsuccessful attempt at replicating a velocikey like functionality. Grave escape is enabled on ESC.
- Loading branch information
1 parent
10096fc
commit 083c5fb
Showing
5 changed files
with
546 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#pragma once | ||
|
||
#include "quantum.h" | ||
#include "config_led.h" | ||
#include "matrix.h" | ||
|
||
#include "i2c_master.h" | ||
#include "md_rgb_matrix.h" //For led keycodes | ||
#include "usb/udi_cdc.h" | ||
#include "usb/usb2422.h" | ||
|
||
#define LAYOUT_65_ansi_blocker( \ | ||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \ | ||
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, \ | ||
K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, \ | ||
K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, \ | ||
K61, K62, K63, K64, K65, K66, K67 \ | ||
) { \ | ||
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, }, \ | ||
{ K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, }, \ | ||
{ K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, KC_NO, K43, K44, }, \ | ||
{ K45, KC_NO, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, }, \ | ||
{ K59, K60, K61, KC_NO, KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K63, K64, K65, K66, K67, }, \ | ||
} | ||
|
||
#define TOGGLE_FLAG_AND_PRINT(var, name) { \ | ||
if (var) { \ | ||
dprintf(name " disabled\r\n"); \ | ||
var = !var; \ | ||
} else { \ | ||
var = !var; \ | ||
dprintf(name " enabled\r\n"); \ | ||
} \ | ||
} | ||
|
||
#define LAYOUT LAYOUT_65_ansi_blocker // Ensure that user made existing keymaps do not break. |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
/* | ||
Copyright 2015 Jun Wako <wakojun@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 "config_common.h" | ||
|
||
/* USB Device descriptor parameter */ | ||
#define VENDOR_ID 0x04D8 | ||
#define PRODUCT_ID 0xEED3 | ||
#define DEVICE_VER 0x0101 | ||
|
||
#define MANUFACTURER "Massdrop Inc." | ||
#define PRODUCT "ALT Keyboard" | ||
#define SERIAL_NUM "Unavailable" | ||
|
||
/* key matrix size */ | ||
#define MATRIX_ROWS 5 | ||
#define MATRIX_COLS 15 | ||
|
||
/* MCU Port name definitions */ | ||
#define PA 0 | ||
#define PB 1 | ||
|
||
/* Port and Pin definition of key row hardware configuration */ | ||
#define MATRIX_ROW_PORTS PA, PA, PA, PA, PA | ||
#define MATRIX_ROW_PINS 0, 1, 2, 3, 4 | ||
|
||
/* Port and Pin definition of key column hardware configuration */ | ||
#define MATRIX_COL_PORTS PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PA, PA, PA, PA, PA | ||
#define MATRIX_COL_PINS 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 10, 11 | ||
|
||
/* This Shift Register expands available hardware output lines to control additional peripherals */ | ||
/* It uses four lines from the MCU to provide 16 output lines */ | ||
/* Shift Register Clock configuration (MCU to ShiftRegister.RCLK) */ | ||
#define SR_EXP_RCLK_PORT PB | ||
#define SR_EXP_RCLK_PIN 14 | ||
/* Shift Register Output Enable configuration (MCU to ShiftRegister.OE_N) */ | ||
#define SR_EXP_OE_N_PORT PB | ||
#define SR_EXP_OE_N_PIN 15 | ||
/* SERCOM port to use for Shift Register SPI */ | ||
/* DATAOUT and SCLK must be configured to use hardware pins of this port */ | ||
#define SR_EXP_SERCOM SERCOM2 | ||
/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */ | ||
#define SR_EXP_DATAOUT_PORT PA | ||
#define SR_EXP_DATAOUT_PIN 12 | ||
#define SR_EXP_DATAOUT_MUX 2 | ||
/* Shift Register SPI Serial Clock configuration (MCU.SERCOMx.PAD[1] to ShiftRegister.SRCLK) */ | ||
#define SR_EXP_SCLK_PORT PA | ||
#define SR_EXP_SCLK_PIN 13 | ||
#define SR_EXP_SCLK_MUX 2 | ||
|
||
/* Debug LED (Small LED Located near MCU) */ | ||
#define DEBUG_LED_ENABLE 1 | ||
#define DEBUG_LED_PORT PA | ||
#define DEBUG_LED_PIN 27 | ||
|
||
/* Additional debugging ports */ | ||
/* PCB M21 */ | ||
#define DEBUG_PORT1_ENABLE 1 | ||
#define DEBUG_PORT1_PORT PB | ||
#define DEBUG_PORT1_PIN 3 | ||
/* PCB M23 */ | ||
#define DEBUG_PORT2_ENABLE 1 | ||
#define DEBUG_PORT2_PORT PB | ||
#define DEBUG_PORT2_PIN 17 | ||
/* PCB M25 */ | ||
#define DEBUG_PORT3_ENABLE 1 | ||
#define DEBUG_PORT3_PORT PA | ||
#define DEBUG_PORT3_PIN 20 | ||
|
||
/* Debug Boot Tracing - During boot sequence, ground this pin to halt and display debug code using Debug LED */ | ||
/* This is useful in determining which hardware device may have malfunctioned or is improperly configured */ | ||
/* Feature is automatically disabled after successful boot */ | ||
/* PCB M27 */ | ||
#define DEBUG_BOOT_TRACING_ENABLE 1 | ||
#define DEBUG_BOOT_TRACING_PORT PB | ||
#define DEBUG_BOOT_TRACING_PIN 23 | ||
|
||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ | ||
#define DEBOUNCE 5 | ||
|
||
/* 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 | ||
|
||
/* Force boot in NKRO mode */ | ||
//#define FORCE_NKRO | ||
|
||
/* | ||
* Feature disable options | ||
* These options are also useful to firmware size reduction. | ||
*/ | ||
|
||
/* disable debug print */ | ||
//#define NO_DEBUG | ||
|
||
/* disable print */ | ||
//#define NO_PRINT | ||
|
||
/* disable action features */ | ||
//#define NO_ACTION_LAYER | ||
//#define NO_ACTION_TAPPING | ||
//#define NO_ACTION_ONESHOT | ||
//#define NO_ACTION_MACRO | ||
//#define NO_ACTION_FUNCTION | ||
|
||
#define RGB_MATRIX_KEYPRESSES | ||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS | ||
#define RGB_MATRIX_LED_PROCESS_LIMIT 15 | ||
#define RGB_MATRIX_LED_FLUSH_LIMIT 10 | ||
|
||
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended | ||
|
||
#include "config_led.h" |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
#include QMK_KEYBOARD_H | ||
|
||
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 | ||
}; | ||
|
||
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_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_HOME, \ | ||
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_PGUP, \ | ||
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_PGDN, \ | ||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), 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, VLK_TOG, KC_MUTE, \ | ||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \ | ||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \ | ||
_______, _______, RGB_TOG, _______, _______, MD_BOOT, NK_TOGG, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \ | ||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \ | ||
), | ||
/* | ||
[X] = LAYOUT( | ||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | ||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | ||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | ||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | ||
_______, _______, _______, _______, _______, _______, _______, _______, _______ \ | ||
), | ||
*/ | ||
}; | ||
|
||
#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)) | ||
#define IDLE_TIMER_DURATION 20000 //how many milliseconds before RGB turns off | ||
|
||
static uint32_t idle_timer; //custom timer to check if keyboard is idled. | ||
bool rgbkeyIdle = false; //flag for keyboard idling, nil keys for set | ||
bool Jelocikey_toggle = false; | ||
uint8_t currentWPM; | ||
|
||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
|
||
static uint32_t key_timer; | ||
idle_timer = timer_read(); | ||
|
||
|
||
switch (keycode) { | ||
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; | ||
case VLK_TOG: | ||
if (record->event.pressed) { | ||
Jelocikey_toggle =! Jelocikey_toggle; | ||
} | ||
else { | ||
rgb_matrix_set_speed_noeeprom(127); | ||
} | ||
return false; | ||
default: | ||
|
||
if (rgbkeyIdle) { //check if the keyboards already idle and if it is, turn it back on as key is pressed. | ||
rgbkeyIdle = false; | ||
rgb_matrix_set_suspend_state(false); | ||
rgb_matrix_enable_noeeprom(); | ||
} | ||
|
||
if (Jelocikey_toggle) { | ||
rgb_matrix_set_speed_noeeprom(3); | ||
currentWPM = get_current_wpm(); | ||
rgb_matrix_set_speed_noeeprom(currentWPM); | ||
rgb_matrix_set_color(13, 100, 255, 255); | ||
} | ||
return true; //Process all other keycodes normally | ||
} | ||
} | ||
|
||
void matrix_scan_user(void) { | ||
//custom idle rbg switch off function | ||
if (timer_elapsed(idle_timer) > IDLE_TIMER_DURATION) { | ||
idle_timer = 0; | ||
timer_clear(); | ||
rgbkeyIdle = true; | ||
rgb_matrix_set_suspend_state(true); | ||
rgb_matrix_disable_noeeprom(); | ||
} | ||
} | ||
|
||
void suspend_power_down_user(void) { | ||
rgb_matrix_set_suspend_state(true); | ||
} | ||
|
||
void suspend_wakeup_init_user(void) { | ||
rgb_matrix_set_suspend_state(false); | ||
} |
Oops, something went wrong.