You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					36 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					36 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								#!/usr/bin/env python3
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								import argparse
							 | 
						||
| 
								 | 
							
								from subprocess import check_output, CalledProcessError
							 | 
						||
| 
								 | 
							
								from panda import Panda
							 | 
						||
| 
								 | 
							
								from panda.python.uds import UdsClient, SESSION_TYPE, DTC_REPORT_TYPE, DTC_STATUS_MASK_TYPE
							 | 
						||
| 
								 | 
							
								from panda.python.uds import get_dtc_num_as_str, get_dtc_status_names
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								parser = argparse.ArgumentParser(description="read DTC status")
							 | 
						||
| 
								 | 
							
								parser.add_argument("addr", type=lambda x: int(x,0))
							 | 
						||
| 
								 | 
							
								parser.add_argument("--bus", type=int, default=0)
							 | 
						||
| 
								 | 
							
								parser.add_argument('--debug', action='store_true')
							 | 
						||
| 
								 | 
							
								args = parser.parse_args()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								try:
							 | 
						||
| 
								 | 
							
								  check_output(["pidof", "boardd"])
							 | 
						||
| 
								 | 
							
								  print("boardd is running, please kill openpilot before running this script! (aborted)")
							 | 
						||
| 
								 | 
							
								  sys.exit(1)
							 | 
						||
| 
								 | 
							
								except CalledProcessError as e:
							 | 
						||
| 
								 | 
							
								  if e.returncode != 1: # 1 == no process found (boardd not running)
							 | 
						||
| 
								 | 
							
								    raise e
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								panda = Panda()
							 | 
						||
| 
								 | 
							
								panda.set_safety_mode(Panda.SAFETY_ELM327)
							 | 
						||
| 
								 | 
							
								uds_client = UdsClient(panda, args.addr, bus=args.bus, debug=args.debug)
							 | 
						||
| 
								 | 
							
								print("extended diagnostic session ...")
							 | 
						||
| 
								 | 
							
								uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC)
							 | 
						||
| 
								 | 
							
								print("read diagnostic codes ...")
							 | 
						||
| 
								 | 
							
								data = uds_client.read_dtc_information(DTC_REPORT_TYPE.DTC_BY_STATUS_MASK, DTC_STATUS_MASK_TYPE.ALL)
							 | 
						||
| 
								 | 
							
								print("status availability:", " ".join(get_dtc_status_names(data[0])))
							 | 
						||
| 
								 | 
							
								print("DTC status:")
							 | 
						||
| 
								 | 
							
								for i in range(1, len(data), 4):
							 | 
						||
| 
								 | 
							
								  dtc_num = get_dtc_num_as_str(data[i:i+3])
							 | 
						||
| 
								 | 
							
								  dtc_status = " ".join(get_dtc_status_names(data[i+3]))
							 | 
						||
| 
								 | 
							
								  print(dtc_num, dtc_status)
							 |