|
|
|
@ -33,12 +33,44 @@ enum plaid_keycodes { |
|
|
|
|
COLEMAK, |
|
|
|
|
DVORAK, |
|
|
|
|
PLOVER, |
|
|
|
|
EXT_PLV |
|
|
|
|
EXT_PLV, |
|
|
|
|
LED_1, |
|
|
|
|
LED_2, |
|
|
|
|
LED_3, |
|
|
|
|
LED_4, |
|
|
|
|
LED_5, |
|
|
|
|
LED_6, |
|
|
|
|
LED_7, |
|
|
|
|
LED_8, |
|
|
|
|
LED_9, |
|
|
|
|
LED_0 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#define LOWER MO(_LOWER) |
|
|
|
|
#define RAISE MO(_RAISE) |
|
|
|
|
|
|
|
|
|
// array of keys considered modifiers for led purposes
|
|
|
|
|
const uint16_t modifiers[] = { |
|
|
|
|
KC_LCTL, |
|
|
|
|
KC_RCTL, |
|
|
|
|
KC_LALT, |
|
|
|
|
KC_RALT, |
|
|
|
|
KC_LSFT, |
|
|
|
|
KC_RSFT, |
|
|
|
|
KC_LGUI, |
|
|
|
|
KC_RGUI, |
|
|
|
|
LOWER, |
|
|
|
|
RAISE |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
//Setup consts for LED modes
|
|
|
|
|
#define LEDMODE_ON 1 //always on
|
|
|
|
|
#define LEDMODE_OFF 0 //always off
|
|
|
|
|
#define LEDMODE_MODS 2 //On with modifiers
|
|
|
|
|
#define LEDMODE_BLINKIN 3 //blinkinlights - % chance toggle on keypress
|
|
|
|
|
#define LEDMODE_KEY 4 //On with any keypress, off with key release
|
|
|
|
|
#define LEDMODE_ENTER 5 // On with enter key
|
|
|
|
|
|
|
|
|
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
|
|
|
|
|
|
|
|
|
/* Qwerty
|
|
|
|
@ -152,7 +184,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
|
|
|
|
|
|
|
|
|
/* Adjust (Lower + Raise)
|
|
|
|
|
* ,-----------------------------------------------------------------------------------. |
|
|
|
|
* | | Reset| | | | | | | | | | Del | |
|
|
|
|
* |Reset | | | | | | | | | | | Del | |
|
|
|
|
* |------+------+------+------+------+-------------+------+------+------+------+------| |
|
|
|
|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | |
|
|
|
|
* |------+------+------+------+------+------|------+------+------+------+------+------| |
|
|
|
@ -162,7 +194,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
|
|
|
|
* `-----------------------------------------------------------------------------------' |
|
|
|
|
*/ |
|
|
|
|
[_ADJUST] = LAYOUT_plaid_grid( |
|
|
|
|
_______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , |
|
|
|
|
RESET,LED_1, LED_2, LED_3, LED_4, LED_5,LED_6, LED_7, LED_8, LED_9, LED_0,KC_DEL , |
|
|
|
|
_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, |
|
|
|
|
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, |
|
|
|
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
|
|
|
@ -171,11 +203,100 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
//Setup config struct for LED
|
|
|
|
|
typedef union { |
|
|
|
|
uint32_t raw; |
|
|
|
|
struct { |
|
|
|
|
uint8_t red_mode :8; |
|
|
|
|
uint8_t green_mode :8; |
|
|
|
|
}; |
|
|
|
|
} led_config_t; |
|
|
|
|
led_config_t led_config; |
|
|
|
|
|
|
|
|
|
//Set leds to saved state during powerup
|
|
|
|
|
void keyboard_post_init_user(void) { |
|
|
|
|
// Call the post init code.
|
|
|
|
|
led_config.raw = eeconfig_read_user(); |
|
|
|
|
|
|
|
|
|
if(led_config.red_mode == LEDMODE_ON) { |
|
|
|
|
writePinHigh(LED_RED); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(led_config.green_mode == LEDMODE_ON) { |
|
|
|
|
writePinHigh(LED_GREEN); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void eeconfig_init_user(void) { // EEPROM is getting reset!
|
|
|
|
|
led_config.raw = 0; |
|
|
|
|
led_config.red_mode = LEDMODE_ON; |
|
|
|
|
led_config.green_mode = LEDMODE_MODS; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
uint32_t layer_state_set_user(uint32_t state) { |
|
|
|
|
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) { |
|
|
|
|
switch (led_mode) { |
|
|
|
|
case LEDMODE_MODS: |
|
|
|
|
for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) { |
|
|
|
|
if(keycode==modifiers[i]) { |
|
|
|
|
if (record->event.pressed) { |
|
|
|
|
writePinHigh(led); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
writePinLow(led); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case LEDMODE_BLINKIN: |
|
|
|
|
if (record->event.pressed) { |
|
|
|
|
if(rand() % 2 == 1) { |
|
|
|
|
if(rand() % 2 == 0) { |
|
|
|
|
writePinLow(led); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
writePinHigh(led); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case LEDMODE_KEY: |
|
|
|
|
if (record->event.pressed) { |
|
|
|
|
writePinHigh(led); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
writePinLow(led); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case LEDMODE_ENTER: |
|
|
|
|
if (keycode==KC_ENT) { |
|
|
|
|
writePinHigh(led); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
writePinLow(led); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
|
|
|
|
/* If the either led mode is keypressed based, call the led updater
|
|
|
|
|
then let it fall through the keypress handlers. Just to keep
|
|
|
|
|
the logic out of this procedure */ |
|
|
|
|
if (led_config.red_mode >= LEDMODE_MODS && led_config.red_mode <= LEDMODE_ENTER) { |
|
|
|
|
led_keypress_update(LED_RED, led_config.red_mode, keycode, record); |
|
|
|
|
} |
|
|
|
|
if (led_config.green_mode >= LEDMODE_MODS && led_config.green_mode <= LEDMODE_ENTER) { |
|
|
|
|
led_keypress_update(LED_GREEN, led_config.green_mode, keycode, record); |
|
|
|
|
} |
|
|
|
|
switch (keycode) { |
|
|
|
|
case QWERTY: |
|
|
|
|
if (record->event.pressed) { |
|
|
|
@ -217,6 +338,74 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_1: |
|
|
|
|
if (record->event.pressed) { |
|
|
|
|
if (led_config.red_mode==LEDMODE_ON) { |
|
|
|
|
led_config.red_mode=LEDMODE_OFF; |
|
|
|
|
writePinLow(LED_RED); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
led_config.red_mode=LEDMODE_ON; |
|
|
|
|
writePinHigh(LED_RED); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_2: |
|
|
|
|
if (record->event.pressed) { |
|
|
|
|
if (led_config.green_mode==LEDMODE_ON) { |
|
|
|
|
led_config.green_mode=LEDMODE_OFF; |
|
|
|
|
writePinLow(LED_GREEN); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
led_config.green_mode=LEDMODE_ON; |
|
|
|
|
writePinHigh(LED_GREEN); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_3: |
|
|
|
|
led_config.red_mode=LEDMODE_MODS; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_4: |
|
|
|
|
led_config.green_mode=LEDMODE_MODS; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_5: |
|
|
|
|
led_config.red_mode=LEDMODE_BLINKIN; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_6: |
|
|
|
|
led_config.green_mode=LEDMODE_BLINKIN; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_7: |
|
|
|
|
led_config.red_mode=LEDMODE_KEY; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_8: |
|
|
|
|
led_config.green_mode=LEDMODE_KEY; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_9: |
|
|
|
|
led_config.red_mode=LEDMODE_ENTER; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
case LED_0: |
|
|
|
|
led_config.green_mode=LEDMODE_ENTER; |
|
|
|
|
eeconfig_update_user(led_config.raw); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|