|
|
@ -75,9 +75,12 @@ def panda_sort_cmp(a: Panda, b: Panda): |
|
|
|
|
|
|
|
|
|
|
|
def main() -> NoReturn: |
|
|
|
def main() -> NoReturn: |
|
|
|
first_run = True |
|
|
|
first_run = True |
|
|
|
|
|
|
|
params = Params() |
|
|
|
|
|
|
|
|
|
|
|
while True: |
|
|
|
while True: |
|
|
|
try: |
|
|
|
try: |
|
|
|
|
|
|
|
params.delete("PandaSignatures") |
|
|
|
|
|
|
|
|
|
|
|
# Flash all Pandas in DFU mode |
|
|
|
# Flash all Pandas in DFU mode |
|
|
|
for p in PandaDFU.list(): |
|
|
|
for p in PandaDFU.list(): |
|
|
|
cloudlog.info(f"Panda in DFU mode found, flashing recovery {p}") |
|
|
|
cloudlog.info(f"Panda in DFU mode found, flashing recovery {p}") |
|
|
@ -99,7 +102,7 @@ def main() -> NoReturn: |
|
|
|
for panda in pandas: |
|
|
|
for panda in pandas: |
|
|
|
health = panda.health() |
|
|
|
health = panda.health() |
|
|
|
if health["heartbeat_lost"]: |
|
|
|
if health["heartbeat_lost"]: |
|
|
|
Params().put_bool("PandaHeartbeatLost", True) |
|
|
|
params.put_bool("PandaHeartbeatLost", True) |
|
|
|
cloudlog.event("heartbeat lost", deviceState=health, serial=panda.get_usb_serial()) |
|
|
|
cloudlog.event("heartbeat lost", deviceState=health, serial=panda.get_usb_serial()) |
|
|
|
|
|
|
|
|
|
|
|
if first_run: |
|
|
|
if first_run: |
|
|
@ -110,6 +113,9 @@ def main() -> NoReturn: |
|
|
|
pandas.sort(key=cmp_to_key(panda_sort_cmp)) |
|
|
|
pandas.sort(key=cmp_to_key(panda_sort_cmp)) |
|
|
|
panda_serials = list(map(lambda p: p.get_usb_serial(), pandas)) |
|
|
|
panda_serials = list(map(lambda p: p.get_usb_serial(), pandas)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# log panda fw versions |
|
|
|
|
|
|
|
params.put("PandaSignatures", b','.join(p.get_signature() for p in pandas)) |
|
|
|
|
|
|
|
|
|
|
|
# close all pandas |
|
|
|
# close all pandas |
|
|
|
for p in pandas: |
|
|
|
for p in pandas: |
|
|
|
p.close() |
|
|
|
p.close() |
|
|
|