mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-28 09:03:46 +08:00
22a8575199
Keep official openpilot ancestry and dependency licenses. Store resources directly in Git, remove LFS setup requirements, and leave the downloadable big model outside the source tree.
99 lines
2.3 KiB
Python
99 lines
2.3 KiB
Python
import os
|
|
import time
|
|
|
|
from panda.tests.hitl.base import PandaTestCase, panda_test
|
|
from panda import Panda, PandaDFU, McuType, BASEDIR
|
|
|
|
|
|
def check_signature(p):
|
|
assert not p.bootstub, "Flashed firmware not booting. Stuck in bootstub."
|
|
assert p.up_to_date()
|
|
|
|
|
|
class TestProgram(PandaTestCase):
|
|
def test_dfu(self):
|
|
p = self.p
|
|
dfu_serial = p.get_dfu_serial()
|
|
|
|
p.reset(enter_bootstub=True)
|
|
p.reset(enter_bootloader=True)
|
|
assert Panda.wait_for_dfu(dfu_serial, timeout=19), "failed to enter DFU"
|
|
|
|
dfu = PandaDFU(dfu_serial)
|
|
assert dfu.get_mcu_type() == McuType.H7
|
|
|
|
assert dfu_serial in PandaDFU.list()
|
|
|
|
dfu._handle.clear_status()
|
|
dfu.reset()
|
|
p.reconnect()
|
|
|
|
# TODO: make more comprehensive bootstub tests and run on a few production ones + current
|
|
# TODO: also test release-signed app
|
|
@panda_test(timeout=30)
|
|
def test_known_bootstub(self):
|
|
"""
|
|
Test that compiled app can work with known production bootstub
|
|
"""
|
|
p = self.p
|
|
known_bootstubs = {
|
|
McuType.H7: ["bootstub.panda_h7.bin"],
|
|
}
|
|
|
|
for kb in known_bootstubs[McuType.H7]:
|
|
app_serial = p.get_usb_serial()
|
|
assert app_serial is not None
|
|
|
|
p.reset(enter_bootstub=True)
|
|
p.reset(enter_bootloader=True)
|
|
|
|
dfu_serial = p.get_dfu_serial()
|
|
assert Panda.wait_for_dfu(dfu_serial, timeout=30)
|
|
|
|
dfu = PandaDFU(dfu_serial)
|
|
with open(os.path.join(BASEDIR, "tests/hitl/known_bootstub", kb), "rb") as f:
|
|
code = f.read()
|
|
|
|
dfu.program_bootstub(code)
|
|
dfu.reset()
|
|
|
|
p.connect(claim=False, wait=True)
|
|
|
|
# check for serial mismatch
|
|
with Panda(p._serial, claim=False) as np:
|
|
assert np.get_usb_serial() == app_serial
|
|
|
|
# ensure we can flash app and it jumps to app
|
|
p.flash()
|
|
check_signature(p)
|
|
assert not p.bootstub
|
|
|
|
@panda_test(timeout=25)
|
|
def test_recover(self):
|
|
p = self.p
|
|
assert p.recover(timeout=30)
|
|
check_signature(p)
|
|
|
|
@panda_test(timeout=25)
|
|
def test_flash(self):
|
|
p = self.p
|
|
# test flash from bootstub
|
|
serial = p._serial
|
|
assert serial is not None
|
|
p.reset(enter_bootstub=True)
|
|
p.close()
|
|
time.sleep(2)
|
|
|
|
with Panda(serial) as np:
|
|
assert np.bootstub
|
|
assert np._serial == serial
|
|
np.flash()
|
|
|
|
p.reconnect()
|
|
p.reset()
|
|
check_signature(p)
|
|
|
|
# test flash from app
|
|
p.flash()
|
|
check_signature(p)
|