mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-27 11:38:58 +06:00
a0fed0ea17
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
74 lines
2.3 KiB
C
74 lines
2.3 KiB
C
#include "custom_encoder.h"
|
|
#include "custom_keycodes.h"
|
|
|
|
#ifdef RGB_OLED_MENU
|
|
#include "custom_rgb.h"
|
|
|
|
// I'm lazy and like constants over calculations, also using it as a compile time check
|
|
#if defined(RGB_MATRIX_ENABLE)
|
|
#define RGB_FUNCTION_COUNT 6
|
|
#elif defined(RGBLIGHT_ENABLE)
|
|
#define RGB_FUNCTION_COUNT 5
|
|
#endif
|
|
|
|
typedef void (*rgb_f)(void);
|
|
|
|
const rgb_f rgb_functions[RGB_FUNCTION_COUNT][2] = {
|
|
#if defined(RGB_MATRIX_ENABLE)
|
|
{ rgb_matrix_increase_hue, rgb_matrix_decrease_hue },
|
|
{ rgb_matrix_increase_sat, rgb_matrix_decrease_sat },
|
|
{ rgb_matrix_increase_val, rgb_matrix_decrease_val },
|
|
{ rgb_matrix_increase_speed, rgb_matrix_decrease_speed },
|
|
{ rgb_matrix_step, rgb_matrix_step_reverse },
|
|
{ rgb_matrix_increase_flags, rgb_matrix_decrease_flags }
|
|
#elif defined(RGBLIGHT_ENABLE)
|
|
{ rgblight_increase_hue, rgblight_decrease_hue },
|
|
{ rgblight_increase_sat, rgblight_decrease_sat },
|
|
{ rgblight_increase_val, rgblight_decrease_val },
|
|
{ rgblight_increase_speed, rgblight_decrease_speed },
|
|
{ rgblight_step, rgblight_step_reverse }
|
|
#endif
|
|
};
|
|
|
|
// Start at the end for mode
|
|
uint8_t rgb_encoder_state = 4;
|
|
|
|
bool process_record_encoder(uint16_t keycode, keyrecord_t *record)
|
|
{
|
|
switch (keycode)
|
|
{
|
|
case RGB_ENC:
|
|
if (record->event.pressed) {
|
|
if (get_mods() & MOD_MASK_SHIFT) {
|
|
rgb_encoder_state = (rgb_encoder_state - 1);
|
|
if (rgb_encoder_state >= RGB_FUNCTION_COUNT)
|
|
rgb_encoder_state = RGB_FUNCTION_COUNT - 1;
|
|
} else {
|
|
rgb_encoder_state = (rgb_encoder_state + 1) % RGB_FUNCTION_COUNT;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
#endif // RGB_OLED_MENU
|
|
|
|
const uint16_t PROGMEM encoders[][2] = {
|
|
{ KC_PGUP, KC_PGDN },
|
|
{ KC_VOLU, KC_VOLD }
|
|
};
|
|
|
|
bool encoder_update_user(uint8_t index, bool clockwise)
|
|
{
|
|
if (!is_keyboard_master())
|
|
return;
|
|
|
|
#ifdef RGB_OLED_MENU
|
|
if (index == RGB_OLED_MENU)
|
|
(*rgb_functions[rgb_encoder_state][clockwise])();
|
|
else
|
|
#endif // RGB_OLED_MENU
|
|
tap_code16(pgm_read_word(&encoders[index][clockwise]));
|
|
return true;
|
|
}
|