|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|