Add support to persist MD LED framework settings (#14980)
* Add support to persist MD LED framework settings * avoid out-of-bounds errors when SmartEEPROM is not enabled * Update brightness defaults * clang
This commit is contained in:
		
							parent
							
								
									f4ea262c17
								
							
						
					
					
						commit
						7ae0f371cf
					
				
					 6 changed files with 106 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -15,6 +15,10 @@ You should have received a copy of the GNU General Public License
 | 
			
		|||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define FLUSH_TIMEOUT 5000
 | 
			
		||||
#define EECONFIG_MD_LED ((uint8_t*)(EECONFIG_SIZE + 64))
 | 
			
		||||
#define MD_LED_CONFIG_VERSION 1
 | 
			
		||||
 | 
			
		||||
#ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
#    include "arm_atsam_protocol.h"
 | 
			
		||||
#    include "led.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -23,8 +27,41 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
#    include <math.h>
 | 
			
		||||
 | 
			
		||||
#    ifdef USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
// TODO?: wire these up to keymap.c
 | 
			
		||||
md_led_config_t md_led_config = {0};
 | 
			
		||||
 | 
			
		||||
EECONFIG_DEBOUNCE_HELPER(md_led, EECONFIG_MD_LED, md_led_config);
 | 
			
		||||
 | 
			
		||||
void eeconfig_update_md_led_default(void) {
 | 
			
		||||
    md_led_config.ver = MD_LED_CONFIG_VERSION;
 | 
			
		||||
 | 
			
		||||
    gcr_desired               = LED_GCR_MAX;
 | 
			
		||||
    led_animation_orientation = 0;
 | 
			
		||||
    led_animation_direction   = 0;
 | 
			
		||||
    led_animation_breathing   = 0;
 | 
			
		||||
    led_animation_id          = 0;
 | 
			
		||||
    led_animation_speed       = 4.0f;
 | 
			
		||||
    led_lighting_mode         = LED_MODE_NORMAL;
 | 
			
		||||
    led_enabled               = 1;
 | 
			
		||||
    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
			
		||||
    breathe_dir               = 1;
 | 
			
		||||
    led_animation_circular    = 0;
 | 
			
		||||
    led_edge_brightness       = 1.0f;
 | 
			
		||||
    led_ratio_brightness      = 1.0f;
 | 
			
		||||
    led_edge_mode             = LED_EDGE_MODE_ALL;
 | 
			
		||||
 | 
			
		||||
    eeconfig_flush_md_led(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void md_led_changed(void) { eeconfig_flag_md_led(true); }
 | 
			
		||||
 | 
			
		||||
// todo: use real task rather than this bodge
 | 
			
		||||
void housekeeping_task_kb(void) { eeconfig_flush_md_led_task(FLUSH_TIMEOUT); }
 | 
			
		||||
 | 
			
		||||
__attribute__((weak)) led_instruction_t led_instructions[] = {{.end = 1}};
 | 
			
		||||
static void                             md_rgb_matrix_config_override(int i);
 | 
			
		||||
#    else
 | 
			
		||||
uint8_t gcr_desired;
 | 
			
		||||
#    endif  // USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
 | 
			
		||||
void SERCOM1_0_Handler(void) {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +93,6 @@ issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
			
		|||
issi3733_led_t led_map[ISSI3733_LED_COUNT] = ISSI3733_LED_MAP;
 | 
			
		||||
RGB            led_buffer[ISSI3733_LED_COUNT];
 | 
			
		||||
 | 
			
		||||
uint8_t gcr_desired;
 | 
			
		||||
uint8_t gcr_actual;
 | 
			
		||||
uint8_t gcr_actual_last;
 | 
			
		||||
#    ifdef USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +254,13 @@ static void led_set_all(uint8_t r, uint8_t g, uint8_t b) {
 | 
			
		|||
static void init(void) {
 | 
			
		||||
    DBGC(DC_LED_MATRIX_INIT_BEGIN);
 | 
			
		||||
 | 
			
		||||
#    ifdef USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
    eeconfig_init_md_led();
 | 
			
		||||
    if (md_led_config.ver != MD_LED_CONFIG_VERSION) {
 | 
			
		||||
        eeconfig_update_md_led_default();
 | 
			
		||||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
    issi3733_prepare_arrays();
 | 
			
		||||
 | 
			
		||||
    md_rgb_matrix_prepare();
 | 
			
		||||
| 
						 | 
				
			
			@ -331,21 +374,6 @@ const rgb_matrix_driver_t rgb_matrix_driver = {.init = init, .flush = flush, .se
 | 
			
		|||
#    ifdef USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
// Ported from Massdrop QMK GitHub Repo
 | 
			
		||||
 | 
			
		||||
// TODO?: wire these up to keymap.c
 | 
			
		||||
uint8_t led_animation_orientation = 0;
 | 
			
		||||
uint8_t led_animation_direction   = 0;
 | 
			
		||||
uint8_t led_animation_breathing   = 0;
 | 
			
		||||
uint8_t led_animation_id          = 0;
 | 
			
		||||
float   led_animation_speed       = 4.0f;
 | 
			
		||||
uint8_t led_lighting_mode         = LED_MODE_NORMAL;
 | 
			
		||||
uint8_t led_enabled               = 1;
 | 
			
		||||
uint8_t led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
			
		||||
uint8_t breathe_dir               = 1;
 | 
			
		||||
uint8_t led_animation_circular    = 0;
 | 
			
		||||
float   led_edge_brightness       = 1.0f;
 | 
			
		||||
float   led_ratio_brightness      = 1.0f;
 | 
			
		||||
uint8_t led_edge_mode             = LED_EDGE_MODE_ALL;
 | 
			
		||||
 | 
			
		||||
static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, float pos) {
 | 
			
		||||
    float po;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
#define _LED_MATRIX_H_
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
#include "eeprom.h"
 | 
			
		||||
 | 
			
		||||
// From keyboard
 | 
			
		||||
#include "config_led.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +80,6 @@ typedef struct issi3733_led_s {
 | 
			
		|||
 | 
			
		||||
extern issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
			
		||||
 | 
			
		||||
extern uint8_t gcr_desired;
 | 
			
		||||
extern uint8_t gcr_breathe;
 | 
			
		||||
extern uint8_t gcr_actual;
 | 
			
		||||
extern uint8_t gcr_actual_last;
 | 
			
		||||
| 
						 | 
				
			
			@ -140,19 +140,43 @@ typedef struct led_instruction_s {
 | 
			
		|||
 | 
			
		||||
extern led_instruction_t led_instructions[];
 | 
			
		||||
 | 
			
		||||
extern uint8_t led_animation_breathing;
 | 
			
		||||
extern uint8_t led_animation_id;
 | 
			
		||||
extern float   led_animation_speed;
 | 
			
		||||
extern uint8_t led_lighting_mode;
 | 
			
		||||
extern uint8_t led_enabled;
 | 
			
		||||
extern uint8_t led_animation_breathe_cur;
 | 
			
		||||
extern uint8_t led_animation_direction;
 | 
			
		||||
extern uint8_t breathe_dir;
 | 
			
		||||
extern uint8_t led_animation_orientation;
 | 
			
		||||
extern uint8_t led_animation_circular;
 | 
			
		||||
extern float   led_edge_brightness;
 | 
			
		||||
extern float   led_ratio_brightness;
 | 
			
		||||
extern uint8_t led_edge_mode;
 | 
			
		||||
typedef struct led_config_s {
 | 
			
		||||
    uint8_t ver;  // assumed to be zero on eeprom reset
 | 
			
		||||
 | 
			
		||||
    uint8_t desired_gcr;
 | 
			
		||||
    uint8_t animation_breathing;
 | 
			
		||||
    uint8_t animation_id;
 | 
			
		||||
    float   animation_speed;
 | 
			
		||||
    uint8_t lighting_mode;
 | 
			
		||||
    uint8_t enabled;
 | 
			
		||||
    uint8_t animation_breathe_cur;
 | 
			
		||||
    uint8_t animation_direction;
 | 
			
		||||
    uint8_t animation_breathe_dir;
 | 
			
		||||
    uint8_t animation_orientation;
 | 
			
		||||
    uint8_t animation_circular;
 | 
			
		||||
    float   edge_brightness;
 | 
			
		||||
    float   ratio_brightness;
 | 
			
		||||
    uint8_t edge_mode;
 | 
			
		||||
} md_led_config_t;
 | 
			
		||||
 | 
			
		||||
extern md_led_config_t md_led_config;
 | 
			
		||||
 | 
			
		||||
void md_led_changed(void);
 | 
			
		||||
 | 
			
		||||
#    define gcr_desired md_led_config.desired_gcr
 | 
			
		||||
#    define led_animation_breathing md_led_config.animation_breathing
 | 
			
		||||
#    define led_animation_id md_led_config.animation_id
 | 
			
		||||
#    define led_animation_speed md_led_config.animation_speed
 | 
			
		||||
#    define led_lighting_mode md_led_config.lighting_mode
 | 
			
		||||
#    define led_enabled md_led_config.enabled
 | 
			
		||||
#    define led_animation_breathe_cur md_led_config.animation_breathe_cur
 | 
			
		||||
#    define led_animation_direction md_led_config.animation_direction
 | 
			
		||||
#    define breathe_dir md_led_config.animation_breathe_dir
 | 
			
		||||
#    define led_animation_orientation md_led_config.animation_orientation
 | 
			
		||||
#    define led_animation_circular md_led_config.animation_circular
 | 
			
		||||
#    define led_edge_brightness md_led_config.edge_brightness
 | 
			
		||||
#    define led_ratio_brightness md_led_config.ratio_brightness
 | 
			
		||||
#    define led_edge_mode md_led_config.edge_mode
 | 
			
		||||
 | 
			
		||||
#    define LED_MODE_NORMAL 0  // Must be 0
 | 
			
		||||
#    define LED_MODE_KEYS_ONLY 1
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +197,8 @@ extern uint8_t led_edge_mode;
 | 
			
		|||
#    define LED_IS_EDGE(scan) (scan >= LED_EDGE_MIN_SCAN)        // Return true if an LED's scan value indicates an edge LED
 | 
			
		||||
#    define LED_IS_EDGE_ALT(scan) (scan == LED_EDGE_ALT_MODE)    // Return true if an LED's scan value indicates an alternate edge mode LED
 | 
			
		||||
#    define LED_IS_INDICATOR(scan) (scan == LED_INDICATOR_SCAN)  // Return true if an LED's scan value indicates it is a dedicated Indicator
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
extern uint8_t gcr_desired;
 | 
			
		||||
#endif  // USE_MASSDROP_CONFIGURATOR
 | 
			
		||||
 | 
			
		||||
#endif  //_LED_MATRIX_H_
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue