| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -39,8 +39,8 @@ static const void* imgfont_get_path(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void b_cfg_cb(lv_event_t *e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_t *box = lv_msgbox_create(NULL);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_msgbox_add_title(box, "Hello");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_msgbox_add_text(box, "test message");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_msgbox_add_title(box, "Settings");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_msgbox_add_text(box, "Sorry, there aren't any right now.");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_msgbox_add_close_button(box);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -89,10 +89,10 @@ static void anim_y_cb(void *var, int32_t v) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void anim_opa_cb(void *var, int32_t v) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_style_opa(var, v, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void anim_val_time_text(lv_anim_t *anim) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_label_set_text_static(anim->var, M_VAL_TIME);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void val_ui_none() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  setup_next_state();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -268,12 +268,91 @@ void val_ui_idle() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_timeline_start(at_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void anim_text_color_mix_hero_sub(void *var, int32_t v) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_style_text_color(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    var, lv_color_mix(color_text_hero, color_text_subtitle, v), 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void val_ui_queue_start(bool ms_not_comp) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  setup_next_state();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  // Widgets
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_t *l_main = lv_label_create(o_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_add_style(l_main, &s_hero, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_center(l_main);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_label_set_text_static(l_main, "SEARCHING...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_t *l_subtitle = lv_label_create(o_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_add_style(l_subtitle, &s_subtitle, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_center(l_subtitle);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_label_set_text_static(l_subtitle, ms_not_comp ? "UHHH SHOULD THAT BE COMP?" : "I HOPE IT'S NOT SPLIT...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_t *spinner = lv_spinner_create(o_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_size(spinner, 100, 100);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_center(spinner);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_style_arc_color(spinner, color_text_hero, LV_PART_INDICATOR);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_spinner_set_anim_params(spinner, 1500, 200);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_update_layout(o_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  const int32_t offset = -60;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_y(l_main, offset);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_y(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    l_subtitle,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    offset + (lv_obj_get_height(l_main) + lv_obj_get_height(l_subtitle)) / 2 + 5);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_obj_set_y(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    spinner,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_obj_get_height(o_container) / 4);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // offset + (lv_obj_get_height(l_main)/2) + lv_obj_get_height(l_subtitle) + (lv_obj_get_height(spinner)/2) + 15);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  // Animations
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_t a_title;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_init(&a_title);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_var(&a_title, l_main);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_values(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    &a_title,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    -(lv_obj_get_width(o_container) - lv_obj_get_width(l_main)) / 2, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_exec_cb(&a_title, anim_x_cb);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_path_cb(&a_title, lv_anim_path_ease_out);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_duration(&a_title, 750);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_t a_sub;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_init(&a_sub);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_var(&a_sub, l_subtitle);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_values(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    &a_sub,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    (lv_obj_get_width(o_container) - lv_obj_get_width(l_subtitle)) / 2, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_exec_cb(&a_sub, anim_x_cb);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_path_cb(&a_sub, lv_anim_path_ease_out);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_completed_cb(&a_sub, anim_state_ready_cb);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_set_duration(&a_sub, 750);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_timeline_add(at_active, 0, &a_title);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_timeline_add(at_active, 0, &a_sub);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  if (ms_not_comp) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_t a_warn;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_init(&a_warn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_early_apply(&a_warn, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_var(&a_warn, l_subtitle);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_path_cb(&a_warn, lv_anim_path_linear);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_duration(&a_warn, 1000);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_exec_cb(&a_warn, anim_text_color_mix_hero_sub);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_values(&a_warn, 0, 255);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_timeline_add(at_active_rep, 0, &a_warn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_set_values(&a_warn, 255, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lv_anim_timeline_add(at_active_rep, 1000, &a_warn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_anim_timeline_start(at_active);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void val_lvgl_ui(lv_display_t *disp) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  color_primary = lv_color_hex(0xff4655);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  color_secondary = lv_color_hex(0xf7518f);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  color_text_hero = lv_palette_lighten(LV_PALETTE_GREY, 2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  color_text_subtitle = lv_palette_darken(LV_PALETTE_GREY, 2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  color_text_subtitle = lv_palette_darken(LV_PALETTE_GREY, 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  // init default theme
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lv_theme_default_init(
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				 
 |