Esempio n. 1
0
  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())
Esempio n. 2
0
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)
Esempio n. 3
0
        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)
Esempio n. 4
0
            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] = []
Esempio n. 5
0
                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
Esempio n. 6
0
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')
Esempio n. 7
0

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()
Esempio n. 8
0
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')
Esempio n. 9
0
 def setUp(self):
   self.jungle = PandaJungle(JUNGLE_SERIAL)
   self.jungle.set_panda_power(True)
   self.jungle.set_ignition(False)
Esempio n. 10
0
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)
Esempio n. 11
0
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()