openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.

60 lines
1.5 KiB

#!/usr/bin/env python3
import os
import time
import argparse
import _thread
from panda import Panda, MCU_TYPE_F4 # pylint: disable=import-error
from panda.tests.pedal.canhandle import CanHandle # pylint: disable=import-error
def heartbeat_thread(p):
while True:
try:
p.send_heartbeat()
time.sleep(0.5)
except Exception:
continue
def flush_panda():
while(1):
if len(p.can_recv()) == 0:
break
def flasher(p, addr, file):
p.can_send(addr, b"\xce\xfa\xad\xde\x1e\x0b\xb0\x0a", 0)
time.sleep(0.1)
print("flashing", file)
flush_panda()
code = open(file, "rb").read()
retries = 3 # How many times to retry on timeout error
while(retries+1>0):
try:
Panda.flash_static(CanHandle(p, 0), code, MCU_TYPE_F4)
except TimeoutError:
print("Timeout, trying again...")
retries -= 1
else:
print("Successfully flashed")
break
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Flash body over can')
parser.add_argument("board", type=str, nargs='?', help="choose base or knee")
parser.add_argument("fn", type=str, nargs='?', help="flash file")
args = parser.parse_args()
assert args.board in ["base", "knee"]
assert os.path.isfile(args.fn)
addr = 0x250 if args.board == "base" else 0x350
p = Panda()
_thread.start_new_thread(heartbeat_thread, (p,))
p.set_safety_mode(Panda.SAFETY_BODY)
print("Flashing motherboard")
flasher(p, addr, args.fn)
print("CAN flashing done")