class TestPedal(unittest.TestCase): def setUp(self): self.jungle = PandaJungle(JUNGLE_SERIAL) self.jungle.set_panda_power(True) self.jungle.set_ignition(False) def tearDown(self): self.jungle.close() def _flash_over_can(self, bus, fw_file): print(f"Flashing {fw_file}") while len(self.jungle.can_recv()) != 0: continue self.jungle.can_send(0x200, b"\xce\xfa\xad\xde\x1e\x0b\xb0\x0a", bus) time.sleep(0.1) with open(fw_file, "rb") as code: PandaJungle.flash_static(CanHandle(self.jungle, bus), code.read()) def _listen_can_frames(self): self.jungle.can_clear(0xFFFF) msgs = 0 for _ in range(10): incoming = self.jungle.can_recv() for message in incoming: address, _, _, bus = message if address == 0x201 and bus == PEDAL_BUS: msgs += 1 time.sleep(0.1) return msgs def test_usb_fw(self): subprocess.check_output(f"cd {BASEDIR} && PEDAL=1 PEDAL_USB=1 scons", shell=True) self._flash_over_can(PEDAL_BUS, f"{BASEDIR}board/obj/pedal_usb.bin.signed") time.sleep(2) p = Panda(PEDAL_SERIAL) self.assertTrue(p.is_pedal()) p.close() self.assertTrue(self._listen_can_frames() > 40) def test_nonusb_fw(self): subprocess.check_output(f"cd {BASEDIR} && PEDAL=1 scons", shell=True) self._flash_over_can(PEDAL_BUS, f"{BASEDIR}board/obj/pedal.bin.signed") time.sleep(2) self.assertTrue(PEDAL_SERIAL not in Panda.list()) self.assertTrue(self._listen_can_frames() > 40)
def panda_init(serial): p = Panda(serial=serial) assert p.recover(timeout=30) start_heartbeat_thread(p) for bus in range(3): p.set_can_speed_kbps(bus, 500) p.set_can_data_speed_kbps(bus, 2000) p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) p.set_power_save(False) return p if JUNGLE_SERIAL: panda_jungle = PandaJungle(JUNGLE_SERIAL) panda_jungle.set_panda_power(False) time.sleep(2) panda_jungle.set_panda_power(True) time.sleep(4) #panda_jungle.set_can_enable(0, False) #panda_jungle.set_can_enable(1, False) #panda_jungle.set_can_enable(2, False) for serial in Panda.list(): if serial not in H7_PANDAS_EXCLUDE: p = Panda(serial=serial) if p.get_type() in H7_HW_TYPES: _panda_serials.append(serial) p.close() if len(_panda_serials) < 2: