mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			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;
 | 
						|
}
 |