keymap.c (2916B)
1 // Copyright 2022 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 4 #include QMK_KEYBOARD_H 5 6 enum custom_keycodes { 7 LED_LEVEL = SAFE_RANGE, 8 }; 9 10 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 11 LAYOUT( 12 KC_MPLY, KC_9, KC_0, KC_NO, 13 KC_5, KC_6, KC_7, KC_8, 14 KC_1, KC_2, KC_3, KC_4, 15 TO(1), KC_DOT, KC_COMM, LED_LEVEL 16 ), 17 LAYOUT( 18 KC_1, KC_2, KC_3, KC_4, 19 KC_5, KC_6, KC_7, KC_8, 20 KC_9, KC_0, KC_A, KC_B, 21 TO(2), KC_C, KC_D, KC_E 22 ), 23 LAYOUT( 24 KC_1, KC_2, KC_3, KC_4, 25 KC_5, KC_6, KC_7, KC_8, 26 KC_9, KC_0, KC_A, KC_B, 27 TO(3), KC_C, KC_D, KC_E 28 ), 29 LAYOUT( 30 KC_1, KC_2, KC_3, KC_4, 31 KC_5, KC_6, KC_7, KC_8, 32 KC_9, KC_0, KC_A, KC_B, 33 TO(0), KC_C, LED_LEVEL,KC_E 34 ), 35 36 }; 37 38 typedef union { 39 uint32_t raw; 40 struct { 41 uint8_t led_level : 3; 42 }; 43 } work_louder_config_t; 44 45 work_louder_config_t work_louder_config; 46 47 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 48 switch (keycode) { 49 case LED_LEVEL: 50 if (record->event.pressed) { 51 work_louder_config.led_level++; 52 if (work_louder_config.led_level > 4) { 53 work_louder_config.led_level = 0; 54 } 55 work_louder_micro_led_all_set((uint8_t)(work_louder_config.led_level * 255 / 4)); 56 eeconfig_update_user(work_louder_config.raw); 57 layer_state_set_kb(layer_state); 58 } 59 break; 60 } 61 return true; 62 } 63 64 #if defined(ENCODER_MAP_ENABLE) 65 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { 66 { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(C(KC_Z), C(KC_Y)) }, 67 { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, 68 { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, 69 { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, 70 }; 71 #endif 72 73 74 layer_state_t layer_state_set_user(layer_state_t state) { 75 layer_state_cmp(state, 1) ? work_louder_micro_led_1_on(): work_louder_micro_led_1_off(); 76 layer_state_cmp(state, 2) ? work_louder_micro_led_2_on(): work_louder_micro_led_2_off(); 77 layer_state_cmp(state, 3) ? work_louder_micro_led_3_on(): work_louder_micro_led_3_off(); 78 79 return state; 80 } 81 82 void eeconfig_init_user(void) { 83 work_louder_config.raw = 0; 84 work_louder_config.led_level = 1; 85 eeconfig_update_user(work_louder_config.raw); 86 } 87 88 void matrix_init_user(void) { 89 work_louder_config.raw = eeconfig_read_user(); 90 work_louder_micro_led_all_set((uint8_t)(work_louder_config.led_level * 255 / 4)); 91 }