| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -69,7 +69,7 @@ class SelfdriveD: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # TODO: de-couple selfdrived with card/conflate on carState without introducing controls mismatches | 
					 | 
					 | 
					 | 
					    # TODO: de-couple selfdrived with card/conflate on carState without introducing controls mismatches | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.car_state_sock = messaging.sub_sock('carState', timeout=20) | 
					 | 
					 | 
					 | 
					    self.car_state_sock = messaging.sub_sock('carState', timeout=20) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ignore = self.sensor_packets + self.gps_packets + ['alertDebug'] | 
					 | 
					 | 
					 | 
					    ignore = self.sensor_packets + self.gps_packets + ['alertDebug', 'userFlag'] | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if SIMULATION: | 
					 | 
					 | 
					 | 
					    if SIMULATION: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ignore += ['driverCameraState', 'managerState'] | 
					 | 
					 | 
					 | 
					      ignore += ['driverCameraState', 'managerState'] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if REPLAY: | 
					 | 
					 | 
					 | 
					    if REPLAY: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -78,7 +78,7 @@ class SelfdriveD: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', | 
					 | 
					 | 
					 | 
					    self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                   'carOutput', 'driverMonitoringState', 'longitudinalPlan', 'livePose', | 
					 | 
					 | 
					 | 
					                                   'carOutput', 'driverMonitoringState', 'longitudinalPlan', 'livePose', | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                   'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', | 
					 | 
					 | 
					 | 
					                                   'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                   'controlsState', 'carControl', 'driverAssistance', 'alertDebug'] + \ | 
					 | 
					 | 
					 | 
					                                   'controlsState', 'carControl', 'driverAssistance', 'alertDebug', 'userFlag'] + \ | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                   self.camera_packets + self.sensor_packets + self.gps_packets, | 
					 | 
					 | 
					 | 
					                                   self.camera_packets + self.sensor_packets + self.gps_packets, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                  ignore_alive=ignore, ignore_avg_freq=ignore, | 
					 | 
					 | 
					 | 
					                                  ignore_alive=ignore, ignore_avg_freq=ignore, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                  ignore_valid=ignore, frequency=int(1/DT_CTRL)) | 
					 | 
					 | 
					 | 
					                                  ignore_valid=ignore, frequency=int(1/DT_CTRL)) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -361,13 +361,17 @@ class SelfdriveD: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if self.sm['modelV2'].frameDropPerc > 20: | 
					 | 
					 | 
					 | 
					      if self.sm['modelV2'].frameDropPerc > 20: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.events.add(EventName.modeldLagging) | 
					 | 
					 | 
					 | 
					        self.events.add(EventName.modeldLagging) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # decrement personality on distance button press | 
					 | 
					 | 
					 | 
					    # Decrement personality on distance button press | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if self.CP.openpilotLongitudinalControl: | 
					 | 
					 | 
					 | 
					    if self.CP.openpilotLongitudinalControl: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if any(not be.pressed and be.type == ButtonType.gapAdjustCruise for be in CS.buttonEvents): | 
					 | 
					 | 
					 | 
					      if any(not be.pressed and be.type == ButtonType.gapAdjustCruise for be in CS.buttonEvents): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.personality = (self.personality - 1) % 3 | 
					 | 
					 | 
					 | 
					        self.personality = (self.personality - 1) % 3 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.params.put_nonblocking('LongitudinalPersonality', str(self.personality)) | 
					 | 
					 | 
					 | 
					        self.params.put_nonblocking('LongitudinalPersonality', str(self.personality)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.events.add(EventName.personalityChanged) | 
					 | 
					 | 
					 | 
					        self.events.add(EventName.personalityChanged) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # Check for user flag (bookmark) press | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if self.sm.updated['userFlag']: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      self.events.add(EventName.userFlag) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def data_sample(self): | 
					 | 
					 | 
					 | 
					  def data_sample(self): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    car_state = messaging.recv_one(self.car_state_sock) | 
					 | 
					 | 
					 | 
					    car_state = messaging.recv_one(self.car_state_sock) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CS = car_state.carState if car_state else self.CS_prev | 
					 | 
					 | 
					 | 
					    CS = car_state.carState if car_state else self.CS_prev | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |