]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/xulkal/custom_encoder.c
Tidy up dztech default keymaps and info.json (#7608)
[qmk_firmware.git] / users / xulkal / custom_encoder.c
1 #include "custom_encoder.h"
2 #include "custom_keycodes.h"
3
4 #ifdef RGB_OLED_MENU
5 #include "custom_rgb.h"
6
7 // I'm lazy and like constants over calculations, also using it as a compile time check
8 #if defined(RGB_MATRIX_ENABLE)
9     #define RGB_FUNCTION_COUNT 6
10 #elif defined(RGBLIGHT_ENABLE)
11     #define RGB_FUNCTION_COUNT 5
12 #endif
13
14 typedef void (*rgb_f)(void);
15
16 const rgb_f rgb_functions[RGB_FUNCTION_COUNT][2] = {
17 #if defined(RGB_MATRIX_ENABLE)
18     { rgb_matrix_increase_hue,      rgb_matrix_decrease_hue     },
19     { rgb_matrix_increase_sat,      rgb_matrix_decrease_sat     },
20     { rgb_matrix_increase_val,      rgb_matrix_decrease_val     },
21     { rgb_matrix_increase_speed,    rgb_matrix_decrease_speed   },
22     { rgb_matrix_step,              rgb_matrix_step_reverse     },
23     { rgb_matrix_increase_flags,    rgb_matrix_decrease_flags   }
24 #elif defined(RGBLIGHT_ENABLE)
25     { rgblight_increase_hue,        rgblight_decrease_hue       },
26     { rgblight_increase_sat,        rgblight_decrease_sat       },
27     { rgblight_increase_val,        rgblight_decrease_val       },
28     { rgblight_increase_speed,      rgblight_decrease_speed     },
29     { rgblight_step,                rgblight_step_reverse       }
30 #endif
31 };
32
33 // Start at the end for mode
34 uint8_t rgb_encoder_state = 4;
35
36 bool process_record_encoder(uint16_t keycode, keyrecord_t *record)
37 {
38     switch (keycode)
39     {
40         case RGB_ENC:
41             if (record->event.pressed) {
42                 if (get_mods() & MOD_MASK_SHIFT) {
43                     rgb_encoder_state = (rgb_encoder_state - 1);
44                     if (rgb_encoder_state >= RGB_FUNCTION_COUNT)
45                         rgb_encoder_state = RGB_FUNCTION_COUNT - 1;
46                 } else {
47                     rgb_encoder_state = (rgb_encoder_state + 1) % RGB_FUNCTION_COUNT;
48                 }
49             }
50             return false;
51     }
52     return true;
53 }
54 #endif // RGB_OLED_MENU
55
56 const uint16_t PROGMEM encoders[][2] = {
57     { KC_PGUP, KC_PGDN },
58     { KC_VOLU, KC_VOLD }
59 };
60
61 void encoder_update_user(uint8_t index, bool clockwise)
62 {
63     if (!is_keyboard_master())
64         return;
65
66 #ifdef RGB_OLED_MENU
67     if (index == RGB_OLED_MENU)
68         (*rgb_functions[rgb_encoder_state][clockwise])();
69     else
70 #endif // RGB_OLED_MENU
71         tap_code16(pgm_read_word(&encoders[index][clockwise]));
72 }