| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -118,7 +118,7 @@ static void handle_sidebar_touch(UIState *s, int touch_x, int touch_y) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void handle_driver_view_touch(UIState *s, int touch_x, int touch_y) { | 
					 | 
					 | 
					 | 
					static void handle_driver_view_touch(UIState *s, int touch_x, int touch_y) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err = write_db_value(NULL, "IsDriverViewEnabled", "0", 1); | 
					 | 
					 | 
					 | 
					  int err = write_db_value("IsDriverViewEnabled", "0", 1); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void handle_vision_touch(UIState *s, int touch_x, int touch_y) { | 
					 | 
					 | 
					 | 
					static void handle_vision_touch(UIState *s, int touch_x, int touch_y) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -138,27 +138,28 @@ static void set_do_exit(int sig) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  do_exit = 1; | 
					 | 
					 | 
					 | 
					  do_exit = 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_bool(bool* param, const char* param_name) { | 
					 | 
					 | 
					 | 
					static void read_param_bool(bool* param, const char* param_name, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					  char *s; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(NULL, param_name, &s, NULL); | 
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0) { | 
					 | 
					 | 
					 | 
					  if (result == 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *param = s[0] == '1'; | 
					 | 
					 | 
					 | 
					    *param = s[0] == '1'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					    free(s); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_float(float* param, const char* param_name) { | 
					 | 
					 | 
					 | 
					static int read_param_float(float* param, const char* param_name, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					  char *s; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(NULL, param_name, &s, NULL); | 
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0) { | 
					 | 
					 | 
					 | 
					  if (result == 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *param = strtod(s, NULL); | 
					 | 
					 | 
					 | 
					    *param = strtod(s, NULL); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					    free(s); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  return result; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int read_param_uint64(uint64_t* dest, const char* param_name) { | 
					 | 
					 | 
					 | 
					static int read_param_uint64(uint64_t* dest, const char* param_name, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					  char *s; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(NULL, param_name, &s, NULL); | 
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0) { | 
					 | 
					 | 
					 | 
					  if (result == 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *dest = strtoull(s, NULL, 0); | 
					 | 
					 | 
					 | 
					    *dest = strtoull(s, NULL, 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					    free(s); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -166,34 +167,40 @@ static int read_param_uint64(uint64_t* dest, const char* param_name) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return result; | 
					 | 
					 | 
					 | 
					  return result; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_bool_timeout(bool* param, const char* param_name, int* timeout) { | 
					 | 
					 | 
					 | 
					static void read_param_bool_timeout(bool* param, const char* param_name, int* timeout, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					    (*timeout)--; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					  } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_bool(param, param_name); | 
					 | 
					 | 
					 | 
					    read_param_bool(param, param_name, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_float_timeout(float* param, const char* param_name, int* timeout) { | 
					 | 
					 | 
					 | 
					static void read_param_float_timeout(float* param, const char* param_name, int* timeout, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					    (*timeout)--; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					  } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_float(param, param_name); | 
					 | 
					 | 
					 | 
					    read_param_float(param, param_name, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int read_param_uint64_timeout(uint64_t* dest, const char* param_name, int* timeout) { | 
					 | 
					 | 
					 | 
					static int read_param_uint64_timeout(uint64_t* dest, const char* param_name, int* timeout, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					    (*timeout)--; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 0; | 
					 | 
					 | 
					 | 
					    return 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					  } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return read_param_uint64(dest, param_name); | 
					 | 
					 | 
					 | 
					    return read_param_uint64(dest, param_name, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static int write_param_float(float param, const char* param_name, bool persistent_param = false) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  char s[16]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  int size = snprintf(s, sizeof(s), "%f", param); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  return write_db_value(param_name, s, MIN(size, sizeof(s)), persistent_param); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void update_offroad_layout_timeout(UIState *s, int* timeout) { | 
					 | 
					 | 
					 | 
					static void update_offroad_layout_timeout(UIState *s, int* timeout) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0) { | 
					 | 
					 | 
					 | 
					  if (*timeout > 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					    (*timeout)--; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -885,10 +892,18 @@ int main(int argc, char* argv[]) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // light sensor scaling params
 | 
					 | 
					 | 
					 | 
					  // light sensor scaling params
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int LEON = is_leon(); | 
					 | 
					 | 
					 | 
					  const int LEON = is_leon(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const float BRIGHTNESS_B = LEON ? 10.0 : 5.0; | 
					 | 
					 | 
					 | 
					  float brightness_b, brightness_m;  
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const float BRIGHTNESS_M = LEON ? 2.6 : 1.3; | 
					 | 
					 | 
					 | 
					  int result = read_param_float(&brightness_b, "BRIGHTNESS_B", true); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  result += read_param_float(&brightness_m, "BRIGHTNESS_M", true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if(result != 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    brightness_b = LEON ? 10.0 : 5.0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    brightness_m = LEON ? 2.6 : 1.3; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    write_param_float(brightness_b, "BRIGHTNESS_B", true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    write_param_float(brightness_m, "BRIGHTNESS_M", true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  float smooth_brightness = BRIGHTNESS_B; | 
					 | 
					 | 
					 | 
					  float smooth_brightness = brightness_b; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int MIN_VOLUME = LEON ? 12 : 9; | 
					 | 
					 | 
					 | 
					  const int MIN_VOLUME = LEON ? 12 : 9; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int MAX_VOLUME = LEON ? 15 : 12; | 
					 | 
					 | 
					 | 
					  const int MAX_VOLUME = LEON ? 15 : 12; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -912,7 +927,7 @@ int main(int argc, char* argv[]) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    double u1 = millis_since_boot(); | 
					 | 
					 | 
					 | 
					    double u1 = millis_since_boot(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // light sensor is only exposed on EONs
 | 
					 | 
					 | 
					 | 
					    // light sensor is only exposed on EONs
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    float clipped_brightness = (s->light_sensor*BRIGHTNESS_M) + BRIGHTNESS_B; | 
					 | 
					 | 
					 | 
					    float clipped_brightness = (s->light_sensor*brightness_m) + brightness_b; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (clipped_brightness > 512) clipped_brightness = 512; | 
					 | 
					 | 
					 | 
					    if (clipped_brightness > 512) clipped_brightness = 512; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    smooth_brightness = clipped_brightness * 0.01 + smooth_brightness * 0.99; | 
					 | 
					 | 
					 | 
					    smooth_brightness = clipped_brightness * 0.01 + smooth_brightness * 0.99; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (smooth_brightness > 255) smooth_brightness = 255; | 
					 | 
					 | 
					 | 
					    if (smooth_brightness > 255) smooth_brightness = 255; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |