|  |  |  | @ -293,12 +293,20 @@ class Controls: | 
			
		
	
		
			
				
					|  |  |  |  |       self.events.add(EventName.radarFault) | 
			
		
	
		
			
				
					|  |  |  |  |     elif not self.sm.valid["pandaStates"]: | 
			
		
	
		
			
				
					|  |  |  |  |       self.events.add(EventName.usbError) | 
			
		
	
		
			
				
					|  |  |  |  |     elif not self.sm.all_alive_and_valid() or self.can_rcv_error: | 
			
		
	
		
			
				
					|  |  |  |  |       self.events.add(EventName.commIssue) | 
			
		
	
		
			
				
					|  |  |  |  |     elif not self.sm.all_checks() or self.can_rcv_error: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if not self.sm.all_alive(): | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.commIssue) | 
			
		
	
		
			
				
					|  |  |  |  |       elif not self.sm.all_freq_ok(): | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.commIssueAvgFreq) | 
			
		
	
		
			
				
					|  |  |  |  |       else: # invalid or can_rcv_error. | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.commIssue) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if not self.logged_comm_issue: | 
			
		
	
		
			
				
					|  |  |  |  |         invalid = [s for s, valid in self.sm.valid.items() if not valid] | 
			
		
	
		
			
				
					|  |  |  |  |         not_alive = [s for s, alive in self.sm.alive.items() if not alive] | 
			
		
	
		
			
				
					|  |  |  |  |         cloudlog.event("commIssue", invalid=invalid, not_alive=not_alive, can_error=self.can_rcv_error, error=True) | 
			
		
	
		
			
				
					|  |  |  |  |         not_freq_ok = [s for s, freq_ok in self.sm.freq_ok.items() if not freq_ok] | 
			
		
	
		
			
				
					|  |  |  |  |         cloudlog.event("commIssue", invalid=invalid, not_alive=not_alive, not_freq_ok=not_freq_ok, can_error=self.can_rcv_error, error=True) | 
			
		
	
		
			
				
					|  |  |  |  |         self.logged_comm_issue = True | 
			
		
	
		
			
				
					|  |  |  |  |     else: | 
			
		
	
		
			
				
					|  |  |  |  |       self.logged_comm_issue = False | 
			
		
	
	
		
			
				
					|  |  |  | @ -347,8 +355,13 @@ class Controls: | 
			
		
	
		
			
				
					|  |  |  |  |         if not self.sm['liveLocationKalman'].gpsOK and (self.distance_traveled > 1000): | 
			
		
	
		
			
				
					|  |  |  |  |           # Not show in first 1 km to allow for driving out of garage. This event shows after 5 minutes | 
			
		
	
		
			
				
					|  |  |  |  |           self.events.add(EventName.noGps) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       # TODO: split into separate alerts | 
			
		
	
		
			
				
					|  |  |  |  |       if not self.sm.all_alive(self.camera_packets): | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.cameraMalfunction) | 
			
		
	
		
			
				
					|  |  |  |  |       elif not self.sm.all_freq_ok(self.camera_packets): | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.cameraMalfunction) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if self.sm['modelV2'].frameDropPerc > 20: | 
			
		
	
		
			
				
					|  |  |  |  |         self.events.add(EventName.modeldLagging) | 
			
		
	
		
			
				
					|  |  |  |  |       if self.sm['liveLocationKalman'].excessiveResets: | 
			
		
	
	
		
			
				
					|  |  |  | @ -379,7 +392,7 @@ class Controls: | 
			
		
	
		
			
				
					|  |  |  |  |     self.sm.update(0) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if not self.initialized: | 
			
		
	
		
			
				
					|  |  |  |  |       all_valid = CS.canValid and self.sm.all_alive_and_valid() | 
			
		
	
		
			
				
					|  |  |  |  |       all_valid = CS.canValid and self.sm.all_checks() | 
			
		
	
		
			
				
					|  |  |  |  |       if all_valid or self.sm.frame * DT_CTRL > 3.5 or SIMULATION: | 
			
		
	
		
			
				
					|  |  |  |  |         if not self.read_only: | 
			
		
	
		
			
				
					|  |  |  |  |           self.CI.init(self.CP, self.can_sock, self.pm.sock['sendcan']) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |