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 send_thread(sender_serial): while True: try: if jungle: sender = PandaJungle(sender_serial) else: sender = Panda(sender_serial) sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT) sender.set_can_loopback(False) can_sock = messaging.sub_sock('can') while True: tsc = messaging.recv_one(can_sock) snd = can_capnp_to_can_list(tsc.can) snd = list(filter(lambda x: x[-1] <= 2, snd)) try: sender.can_send_many(snd) except usb1.USBErrorTimeout: pass # Drain panda message buffer sender.can_recv() except Exception: traceback.print_exc() time.sleep(1)
snd = list(filter(lambda x: x[-1] <= 2, snd)) try: sender.can_send_many(snd) except usb1.USBErrorTimeout: pass # Drain panda message buffer sender.can_recv() except Exception: traceback.print_exc() time.sleep(1) if __name__ == "__main__": if jungle: serials = PandaJungle.list() else: serials = Panda.list() num_senders = len(serials) if num_senders == 0: print("No senders found. Exiting") sys.exit(1) else: print("%d senders found. Starting broadcast" % num_senders) if "FLASH" in os.environ: for s in PandaDFU.list(): PandaDFU(s).recover() time.sleep(1)
print(f"Sending block {transferred}-{len(tx_messages)}: ", end="") panda.can_send_many(tx_messages[transferred:], timeout=10) print("OK") break except usb1.USBErrorTimeout as e: transferred += (e.transferred // 16) print("timeout, transferred: ", transferred) print(f"Done sending {3*NUM_MESSAGES_PER_BUS} messages!") if __name__ == "__main__": serials = Panda.list() if JUNGLE: sender = Panda() receiver = PandaJungle() else: if len(serials) != 2: raise Exception("Connect two pandas to perform this test!") sender = Panda(serials[0]) receiver = Panda(serials[1]) receiver.set_safety_mode(Panda.SAFETY_ALLOUTPUT) sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT) sender.set_heartbeat_disabled() # Start transmisson threading.Thread(target=flood_tx, args=(sender, )).start() # Receive as much as we can, and stop when there hasn't been anything for a second rx: List[Any] = []
continue for s in p.list(): if s not in serials: print("starting send thread for", s) serials[s] = Process(target=send_thread, args=(p(s), 3)) serials[s].start() # try to join all send procs cur_serials = serials.copy() for s, p in cur_serials.items(): p.join(0.01) if p.exitcode is not None: del serials[s] time.sleep(1) if __name__ == "__main__": time.sleep(1) if "FLASH" in os.environ and PandaJungle is not None: for s in PandaJungle.list(): PandaJungle(s).flash() while True: try: connect() except Exception: pass
from parameterized import parameterized, param from .timeout import run_with_timeout from .wifi_helpers import _connect_wifi SPEED_NORMAL = 500 SPEED_GMLAN = 33.3 BUS_SPEEDS = [(0, SPEED_NORMAL), (1, SPEED_NORMAL), (2, SPEED_NORMAL), (3, SPEED_GMLAN)] TIMEOUT = 30 GEN2_HW_TYPES = [Panda.HW_TYPE_BLACK_PANDA, Panda.HW_TYPE_UNO] # Enable fault debug faulthandler.enable(all_threads=False) # Connect to Panda Jungle panda_jungle = PandaJungle() # Find all panda's connected _panda_serials = None def init_panda_serials(): global panda_jungle, _panda_serials _panda_serials = [] panda_jungle.set_panda_power(True) time.sleep(5) for serial in Panda.list(): p = Panda(serial=serial) _panda_serials.append((serial, p.get_type())) p.close() print('Found', str(len(_panda_serials)), 'pandas')
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()
BUS_SPEEDS = [(0, SPEED_NORMAL), (1, SPEED_NORMAL), (2, SPEED_NORMAL), (3, SPEED_GMLAN)] TIMEOUT = 45 H7_HW_TYPES = [Panda.HW_TYPE_RED_PANDA] GEN2_HW_TYPES = [Panda.HW_TYPE_BLACK_PANDA, Panda.HW_TYPE_UNO] + H7_HW_TYPES GPS_HW_TYPES = [ Panda.HW_TYPE_GREY_PANDA, Panda.HW_TYPE_BLACK_PANDA, Panda.HW_TYPE_UNO ] PEDAL_SERIAL = 'none' JUNGLE_SERIAL = os.getenv("PANDAS_JUNGLE") # Enable fault debug faulthandler.enable(all_threads=False) # Connect to Panda Jungle panda_jungle = PandaJungle(JUNGLE_SERIAL) # Find all panda's connected _panda_serials = None def init_panda_serials(): global panda_jungle, _panda_serials _panda_serials = [] panda_jungle.set_panda_power(True) time.sleep(5) for serial in Panda.list(): p = Panda(serial=serial) _panda_serials.append((serial, p.get_type())) p.close() print('Found', str(len(_panda_serials)), 'pandas')
def setUp(self): self.jungle = PandaJungle(JUNGLE_SERIAL) self.jungle.set_panda_power(True) self.jungle.set_ignition(False)
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 send_thread(sender_serial): global jungle try: if jungle: sender = PandaJungle(sender_serial) else: sender = Panda(sender_serial) sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT) sender.set_can_loopback(False) can_sock = messaging.sub_sock('can') while True: # Send messages one bus 0 and 1 tsc = messaging.recv_one(can_sock) snd = can_capnp_to_can_list(tsc.can) snd = list(filter(lambda x: x[-1] <= 2, snd)) sender.can_send_many(snd) # Drain panda message buffer sender.can_recv() except Exception: traceback.print_exc()