| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -4,6 +4,7 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <unistd.h> | 
					 | 
					 | 
					 | 
					#include <unistd.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <assert.h> | 
					 | 
					 | 
					 | 
					#include <assert.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <sys/mman.h> | 
					 | 
					 | 
					 | 
					#include <sys/mman.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include <sstream> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <sys/resource.h> | 
					 | 
					 | 
					 | 
					#include <sys/resource.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <czmq.h> | 
					 | 
					 | 
					 | 
					#include <czmq.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "common/util.h" | 
					 | 
					 | 
					 | 
					#include "common/util.h" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -135,61 +136,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, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					template <class T> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static int read_param(T* param, const char *param_name, bool persistent_param = false){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					  char *s; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
					 | 
					 | 
					 | 
					  int result = read_db_value(param_name, &s, NULL, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0){ | 
					 | 
					 | 
					 | 
					  if (result == 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *param = s[0] == '1'; | 
					 | 
					 | 
					 | 
					    std::istringstream iss(s); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					    iss >> *param; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int read_param_float(float* param, const char* param_name, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *param = strtod(s, NULL); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return result; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int read_param_uint64(uint64_t* dest, const char* param_name, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  char *s; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int result = read_db_value(param_name, &s, NULL, persistent_param); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (result == 0) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *dest = strtoull(s, NULL, 0); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    free(s); | 
					 | 
					 | 
					 | 
					    free(s); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return result; | 
					 | 
					 | 
					 | 
					  return result; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_bool_timeout(bool* param, const char* param_name, int* timeout, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					template <class T> | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
					 | 
					 | 
					 | 
					static int read_param_timeout(T* param, const char* param_name, int* timeout, bool persistent_param = false) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					  int result = -1; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_bool(param, param_name, persistent_param); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void read_param_float_timeout(float* param, const char* param_name, int* timeout, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (*timeout > 0){ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (*timeout)--; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_float(param, param_name, persistent_param); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					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 -1; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					  } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
					 | 
					 | 
					 | 
					    *timeout = 2 * UI_FREQ; // 0.5Hz
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return read_param_uint64(dest, param_name, persistent_param); | 
					 | 
					 | 
					 | 
					    result = read_param(param, param_name, persistent_param); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  return result; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int write_param_float(float param, const char* param_name, bool persistent_param = false) { | 
					 | 
					 | 
					 | 
					static int write_param_float(float param, const char* param_name, bool persistent_param = false) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -277,10 +245,10 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    0.0f, 0.0f, 0.0f, 1.0f, | 
					 | 
					 | 
					 | 
					    0.0f, 0.0f, 0.0f, 1.0f, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }}; | 
					 | 
					 | 
					 | 
					  }}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  read_param_float(&s->speed_lim_off, "SpeedLimitOffset"); | 
					 | 
					 | 
					 | 
					  read_param(&s->speed_lim_off, "SpeedLimitOffset"); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  read_param_bool(&s->is_metric, "IsMetric"); | 
					 | 
					 | 
					 | 
					  read_param(&s->is_metric, "IsMetric"); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  read_param_bool(&s->longitudinal_control, "LongitudinalControl"); | 
					 | 
					 | 
					 | 
					  read_param(&s->longitudinal_control, "LongitudinalControl"); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  read_param_bool(&s->limit_set_speed, "LimitSetSpeed"); | 
					 | 
					 | 
					 | 
					  read_param(&s->limit_set_speed, "LimitSetSpeed"); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // Set offsets so params don't get read at the same time
 | 
					 | 
					 | 
					 | 
					  // Set offsets so params don't get read at the same time
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  s->longitudinal_control_timeout = UI_FREQ / 3; | 
					 | 
					 | 
					 | 
					  s->longitudinal_control_timeout = UI_FREQ / 3; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -829,8 +797,8 @@ int main(int argc, char* argv[]) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int LEON = is_leon(); | 
					 | 
					 | 
					 | 
					  const int LEON = is_leon(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  float brightness_b, brightness_m; | 
					 | 
					 | 
					 | 
					  float brightness_b, brightness_m; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int result = read_param_float(&brightness_b, "BRIGHTNESS_B", true); | 
					 | 
					 | 
					 | 
					  int result = read_param(&brightness_b, "BRIGHTNESS_B", true); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  result += read_param_float(&brightness_m, "BRIGHTNESS_M", true); | 
					 | 
					 | 
					 | 
					  result += read_param(&brightness_m, "BRIGHTNESS_M", true); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if(result != 0){ | 
					 | 
					 | 
					 | 
					  if(result != 0){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    brightness_b = LEON ? 10.0 : 5.0; | 
					 | 
					 | 
					 | 
					    brightness_b = LEON ? 10.0 : 5.0; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -965,11 +933,11 @@ int main(int argc, char* argv[]) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      s->alert_sound = cereal::CarControl::HUDControl::AudibleAlert::NONE; | 
					 | 
					 | 
					 | 
					      s->alert_sound = cereal::CarControl::HUDControl::AudibleAlert::NONE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_bool_timeout(&s->is_metric, "IsMetric", &s->is_metric_timeout); | 
					 | 
					 | 
					 | 
					    read_param_timeout(&s->is_metric, "IsMetric", &s->is_metric_timeout); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_bool_timeout(&s->longitudinal_control, "LongitudinalControl", &s->longitudinal_control_timeout); | 
					 | 
					 | 
					 | 
					    read_param_timeout(&s->longitudinal_control, "LongitudinalControl", &s->longitudinal_control_timeout); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_bool_timeout(&s->limit_set_speed, "LimitSetSpeed", &s->limit_set_speed_timeout); | 
					 | 
					 | 
					 | 
					    read_param_timeout(&s->limit_set_speed, "LimitSetSpeed", &s->limit_set_speed_timeout); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    read_param_float_timeout(&s->speed_lim_off, "SpeedLimitOffset", &s->limit_set_speed_timeout); | 
					 | 
					 | 
					 | 
					    read_param_timeout(&s->speed_lim_off, "SpeedLimitOffset", &s->limit_set_speed_timeout); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int param_read = read_param_uint64_timeout(&s->last_athena_ping, "LastAthenaPingTime", &s->last_athena_ping_timeout); | 
					 | 
					 | 
					 | 
					    int param_read = read_param_timeout(&s->last_athena_ping, "LastAthenaPingTime", &s->last_athena_ping_timeout); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (param_read != -1) { // Param was updated this loop
 | 
					 | 
					 | 
					 | 
					    if (param_read != -1) { // Param was updated this loop
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (param_read != 0) { // Failed to read param
 | 
					 | 
					 | 
					 | 
					      if (param_read != 0) { // Failed to read param
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        s->scene.athenaStatus = NET_DISCONNECTED; | 
					 | 
					 | 
					 | 
					        s->scene.athenaStatus = NET_DISCONNECTED; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |