| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -72,6 +72,7 @@ class Controls: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if TICI: | 
					 | 
					 | 
					 | 
					    if TICI: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.log_sock = messaging.sub_sock('androidLog') | 
					 | 
					 | 
					 | 
					      self.log_sock = messaging.sub_sock('androidLog') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      self.crc_seen = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # wait for one pandaState and one CAN packet | 
					 | 
					 | 
					 | 
					    # wait for one pandaState and one CAN packet | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Waiting for CAN messages...") | 
					 | 
					 | 
					 | 
					    print("Waiting for CAN messages...") | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -257,19 +258,24 @@ class Controls: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.events.add(EventName.fcw) | 
					 | 
					 | 
					 | 
					      self.events.add(EventName.fcw) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if TICI and self.enable_lte_onroad: | 
					 | 
					 | 
					 | 
					    if TICI and self.enable_lte_onroad: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      logs = messaging.drain_sock(self.log_sock, wait_for_one=False) | 
					 | 
					 | 
					 | 
					      if not self.crc_seen: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages = [] | 
					 | 
					 | 
					 | 
					        logs = messaging.drain_sock(self.log_sock, wait_for_one=False) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      for m in logs: | 
					 | 
					 | 
					 | 
					        messages = [] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try: | 
					 | 
					 | 
					 | 
					        for m in logs: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          messages.append(m.androidLog.message) | 
					 | 
					 | 
					 | 
					          try: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        except UnicodeDecodeError: | 
					 | 
					 | 
					 | 
					            messages.append(m.androidLog.message) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          pass | 
					 | 
					 | 
					 | 
					          except UnicodeDecodeError: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					            pass | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      for err in ["ERROR_CRC", "ERROR_ECC", "ERROR_STREAM_UNDERFLOW", "APPLY FAILED"]: | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        err_cnt = sum(err in m for m in messages) | 
					 | 
					 | 
					 | 
					        for err in ["ERROR_CRC", "ERROR_ECC", "ERROR_STREAM_UNDERFLOW", "APPLY FAILED"]: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if err_cnt: | 
					 | 
					 | 
					 | 
					          err_cnt = sum(err in m for m in messages) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          self.events.add(EventName.cameraError) | 
					 | 
					 | 
					 | 
					          if err_cnt: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          break | 
					 | 
					 | 
					 | 
					            self.crc_seen = True | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            self.events.add(EventName.cameraError) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            break | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if self.crc_seen: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        self.events.add(EventName.cameraError) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # TODO: fix simulator | 
					 | 
					 | 
					 | 
					    # TODO: fix simulator | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not SIMULATION: | 
					 | 
					 | 
					 | 
					    if not SIMULATION: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |