#!/usr/bin/env python3 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  traceback 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  cereal . messaging  as  messaging 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  selfdrive . car . isotp_parallel_query  import  IsoTpParallelQuery 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  selfdrive . swaglog  import  cloudlog 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								EXT_DIAG_REQUEST  =  b ' \x10 \x03 ' 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								EXT_DIAG_RESPONSE  =  b ' \x50 \x03 ' 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								COM_CONT_REQUEST  =  b ' \x28 \x83 \x03 ' 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								COM_CONT_RESPONSE  =  b ' ' 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  disable_ecu ( ecu_addr ,  logcan ,  sendcan ,  bus ,  timeout = 0.5 ,  retry = 5 ,  debug = False ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  print ( f " ecu disable  { hex ( ecu_addr ) }  ... " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  i  in  range ( retry ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    try : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # enter extended diagnostic session 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      query  =  IsoTpParallelQuery ( sendcan ,  logcan ,  bus ,  [ ecu_addr ] ,  [ EXT_DIAG_REQUEST ] ,  [ EXT_DIAG_RESPONSE ] ,  debug = debug ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      for  addr ,  dat  in  query . get_data ( timeout ) . items ( ) :  # pylint: disable=unused-variable 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( " ecu communication control disable tx/rx ... " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # communication control disable tx and rx 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        query  =  IsoTpParallelQuery ( sendcan ,  logcan ,  bus ,  [ ecu_addr ] ,  [ COM_CONT_REQUEST ] ,  [ COM_CONT_RESPONSE ] ,  debug = debug ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        query . get_data ( 0 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  True 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      print ( f " ecu disable retry ( { i + 1 } ) ... " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    except  Exception : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      cloudlog . warning ( f " ecu disable exception:  { traceback . format_exc ( ) } " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  False 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  import  time 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sendcan  =  messaging . pub_sock ( ' sendcan ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  logcan  =  messaging . sub_sock ( ' can ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  time . sleep ( 1 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # honda bosch radar disable 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  disabled  =  disable_ecu ( 0x18DAB0F1 ,  logcan ,  sendcan ,  1 ,  debug = False ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  print ( f " disabled:  { disabled } " )