#!/usr/bin/env python3 import sys import argparse from subprocess import check_output, CalledProcessError from opendbc.car.carlog import carlog from opendbc.car.uds import UdsClient, MessageTimeoutError, SESSION_TYPE, DTC_GROUP_TYPE from opendbc.car.structs import CarParams from panda import Panda parser = argparse.ArgumentParser(description="clear DTC status") parser.add_argument("addr", type=lambda x: int(x,0), nargs="?", default=0x7DF) # default is functional (broadcast) address parser.add_argument("--bus", type=int, default=0) parser.add_argument('--debug', action='store_true') args = parser.parse_args() if args.debug: carlog.setLevel('DEBUG') 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(CarParams.SafetyModel.elm327) uds_client = UdsClient(panda, args.addr, bus=args.bus) print("extended diagnostic session ...") try: uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC) except MessageTimeoutError: # functional address isn't properly handled so a timeout occurs if args.addr != 0x7DF: raise print("clear diagnostic info ...") try: uds_client.clear_diagnostic_information(DTC_GROUP_TYPE.ALL) except MessageTimeoutError: # functional address isn't properly handled so a timeout occurs if args.addr != 0x7DF: pass print("") print("you may need to power cycle your vehicle now")