36 lines
1.4 KiB
Python
Executable File
36 lines
1.4 KiB
Python
Executable File
#!/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", "pandad"])
|
|
print("pandad 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 (pandad 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)
|