| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -174,7 +174,7 @@ bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t*
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef LCD_BACKLIGHT_ENABLE
 | 
					 | 
					 | 
					 | 
					#ifdef LCD_BACKLIGHT_ENABLE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
					 | 
					 | 
					 | 
					bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int frame_length = animation->frame_lengths[1];
 | 
					 | 
					 | 
					 | 
					    int frame_length = animation->frame_lengths[animation->current_frame];
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int current_pos = frame_length - animation->time_left_in_frame;
 | 
					 | 
					 | 
					 | 
					    int current_pos = frame_length - animation->time_left_in_frame;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    uint8_t t_h = LCD_HUE(state->target_lcd_color);
 | 
					 | 
					 | 
					 | 
					    uint8_t t_h = LCD_HUE(state->target_lcd_color);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    uint8_t t_s = LCD_SAT(state->target_lcd_color);
 | 
					 | 
					 | 
					 | 
					    uint8_t t_s = LCD_SAT(state->target_lcd_color);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -270,12 +270,21 @@ bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_s
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
					 | 
					 | 
					 | 
					bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (void)animation;
 | 
					 | 
					 | 
					 | 
					    (void)animation;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (void)state;
 | 
					 | 
					 | 
					 | 
					    (void)state;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#ifdef LCD_ENABLE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    gdispSetPowerMode(powerOff);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#ifdef LCD_BACKLIGHT_ENABLE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    lcd_backlight_hal_color(0, 0, 0);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return false;
 | 
					 | 
					 | 
					 | 
					    return false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
					 | 
					 | 
					 | 
					bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (void)animation;
 | 
					 | 
					 | 
					 | 
					    (void)animation;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (void)state;
 | 
					 | 
					 | 
					 | 
					    (void)state;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#ifdef LCD_ENABLE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    gdispSetPowerMode(powerOn);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return false;
 | 
					 | 
					 | 
					 | 
					    return false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -339,8 +348,8 @@ static THD_FUNCTION(visualizerThread, arg) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                else {
 | 
					 | 
					 | 
					 | 
					                else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    state.status = current_status;
 | 
					 | 
					 | 
					 | 
					                    state.status = current_status;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    update_user_visualizer_state(&state);
 | 
					 | 
					 | 
					 | 
					                    update_user_visualizer_state(&state);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    state.prev_lcd_color = state.current_lcd_color;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                }
 | 
					 | 
					 | 
					 | 
					                }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                state.prev_lcd_color = state.current_lcd_color;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            }
 | 
					 | 
					 | 
					 | 
					            }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (!enabled && state.status.suspended && current_status.suspended == false) {
 | 
					 | 
					 | 
					 | 
					        if (!enabled && state.status.suspended && current_status.suspended == false) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -350,6 +359,7 @@ static THD_FUNCTION(visualizerThread, arg) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            state.status.suspended = false;
 | 
					 | 
					 | 
					 | 
					            state.status.suspended = false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            stop_all_keyframe_animations();
 | 
					 | 
					 | 
					 | 
					            stop_all_keyframe_animations();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            user_visualizer_resume(&state);
 | 
					 | 
					 | 
					 | 
					            user_visualizer_resume(&state);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            state.prev_lcd_color = state.current_lcd_color;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        sleep_time = TIME_INFINITE;
 | 
					 | 
					 | 
					 | 
					        sleep_time = TIME_INFINITE;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
 | 
					 | 
					 | 
					 | 
					        for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |