@ -44,13 +44,12 @@ static int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  return  max_idx ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  update_leads ( UIState  * s ,  const  cereal : : ModelDataV2 : : Reader  & model )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  auto  leads  =  model . getLeadsV3 ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  auto  model_position  =  model . getPosition ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  update_leads ( UIState  * s ,  const  cereal : : RadarState : : Reader  & radar_state ,  std : : optional < cereal : : ModelDataV2 : : XYZTData : : Reader >  line )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  for  ( int  i  =  0 ;  i  <  2 ;  + + i )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  ( leads [ i ] . getProb ( )  >  0.5 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      float  z  =  model_position . getZ ( ) [ get_path_length_idx ( model_position ,  leads [ i ] . getX ( ) [ 0 ] ) ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      calib_frame_to_full_frame ( s ,  leads [ i ] . getX ( ) [ 0 ] ,  leads [ i ] . getY ( ) [ 0 ] ,  z  +  1.22 ,  & s - > scene . lead_vertices [ i ] ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    auto  lead_data  =  ( i  = =  0 )  ?  radar_state . getLeadOne ( )  :  radar_state . getLeadTwo ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  ( lead_data . getStatus ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      float  z  =  line  ?  ( * line ) . getZ ( ) [ get_path_length_idx ( * line ,  lead_data . getDRel ( ) ) ]  :  0.0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      calib_frame_to_full_frame ( s ,  lead_data . getDRel ( ) ,  - lead_data . getYRel ( ) ,  z  +  1.22 ,  & s - > scene . lead_vertices [ i ] ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -93,9 +92,9 @@ static void update_model(UIState *s, const cereal::ModelDataV2::Reader &model) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // update path
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  auto  lead_one  =  model . getLeadsV3 ( ) [ 0 ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( lead_one . getProb ( )  >  0.5  )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  float  lead_d  =  lead_one . getX ( ) [ 0 ]   *  2. ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  auto  lead_one  =  ( * s - > sm ) [ " radarState " ] . getRadarState ( ) . getLeadOne ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( lead_one . getStatus ( )  )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  float  lead_d  =  lead_one . getDRel ( )   *  2. ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    max_distance  =  std : : clamp ( ( float ) ( lead_d  -  fmin ( lead_d  *  0.35 ,  10. ) ) ,  0.0f ,  max_distance ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  max_idx  =  get_path_length_idx ( model_position ,  max_distance ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -118,9 +117,14 @@ static void update_state(UIState *s) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    scene . dm_active  =  sm [ " driverMonitoringState " ] . getDriverMonitoringState ( ) . getIsActiveMode ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( sm . updated ( " modelV2 " )  & &  s - > vg )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    auto  model  =  sm [ " modelV2 " ] . getModelV2 ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    update_model ( s ,  model ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    update_leads ( s ,  model ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    update_model ( s ,  sm [ " modelV2 " ] . getModelV2 ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( sm . updated ( " radarState " )  & &  s - > vg )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    std : : optional < cereal : : ModelDataV2 : : XYZTData : : Reader >  line ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  ( sm . rcv_frame ( " modelV2 " )  >  0 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      line  =  sm [ " modelV2 " ] . getModelV2 ( ) . getPosition ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    update_leads ( s ,  sm [ " radarState " ] . getRadarState ( ) ,  line ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( sm . updated ( " liveCalibration " ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    scene . world_objects_visible  =  true ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -225,7 +229,7 @@ static void update_status(UIState *s) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					QUIState : : QUIState ( QObject  * parent )  :  QObject ( parent )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  ui_state . sm  =  std : : make_unique < SubMaster ,  const  std : : initializer_list < const  char  * > > ( {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    " modelV2 " ,  " controlsState " ,  " liveCalibration " ,  " deviceState " ,  " roadCameraState " ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    " modelV2 " ,  " controlsState " ,  " liveCalibration " ,  " radarState " ,  " deviceState " ,  " roadCameraState " ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    " pandaStates " ,  " carParams " ,  " driverMonitoringState " ,  " sensorEvents " ,  " carState " ,  " liveLocationKalman " ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  } ) ;