diff --git a/__init__.py b/__init__.py index 37143b3..1f72be4 100644 --- a/__init__.py +++ b/__init__.py @@ -1 +1 @@ -from .panda import Panda +from .panda import Panda, PandaWifiStreaming diff --git a/panda/__init__.py b/panda/__init__.py index 8cae873..678a0d7 100644 --- a/panda/__init__.py +++ b/panda/__init__.py @@ -28,10 +28,14 @@ def parse_can_buffer(dat): class PandaWifiStreaming(object): def __init__(self, ip="192.168.0.10", port=1338): self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.sock.sendto("hello", (ip, port)) self.sock.setblocking(0) self.ip = ip self.port = port + self.kick() + + def kick(self): + # must be called at least every 5 seconds + self.sock.sendto("hello", (self.ip, self.port)) def can_recv(self): ret = [] diff --git a/tests/automated/5_wifi_throughput.py b/tests/automated/5_wifi_throughput.py new file mode 100644 index 0000000..c65b779 --- /dev/null +++ b/tests/automated/5_wifi_throughput.py @@ -0,0 +1,41 @@ +from __future__ import print_function +import sys +import time +from helpers import time_many_sends +from panda import Panda, PandaWifiStreaming + +def test_high_throughput(): + p = Panda() + p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) + p.set_can_loopback(True) + pwifi = Panda("WIFI") + + # TODO: msg_count=1000 drops packets, is this fixable? + for msg_count in [10,100,200]: + speed = 500 + p.set_can_speed_kbps(0, speed) + comp_kbps = time_many_sends(p, 0, pwifi, msg_count) + saturation_pct = (comp_kbps/speed) * 100.0 + + print("HT WIFI loopback %d messages at speed %d, comp speed is %.2f, percent %.2f" % (msg_count, speed, comp_kbps, saturation_pct)) + +def test_udp_doesnt_drop(): + p = Panda() + p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) + p.set_can_loopback(True) + + pwifi = PandaWifiStreaming() + + for i in range(30): + pwifi.kick() + + speed = 500 + p.set_can_speed_kbps(0, speed) + comp_kbps = time_many_sends(p, 0, pwifi, msg_count=10) + saturation_pct = (comp_kbps/speed) * 100.0 + + sys.stdout.write(".") + sys.stdout.flush() + + + diff --git a/tests/automated/helpers.py b/tests/automated/helpers.py index b4bb3af..4109e40 100644 --- a/tests/automated/helpers.py +++ b/tests/automated/helpers.py @@ -27,24 +27,25 @@ def connect_wifi(): # TODO: Ubuntu os.system("networksetup -setairportnetwork en0 %s %s" % (ssid, pw)) -def time_many_sends(p, bus): - MSG_COUNT = 100 +def time_many_sends(p, bus, precv=None, msg_count=100): + if precv == None: + precv = p st = time.time() - p.can_send_many([(0x1aa, 0, "\xaa"*8, bus)]*MSG_COUNT) + p.can_send_many([(0x1aa, 0, "\xaa"*8, bus)]*msg_count) r = [] - while len(r) < 200 and (time.time() - st) < 3: - r.extend(p.can_recv()) + while len(r) < (msg_count*2) and (time.time() - st) < 3: + r.extend(precv.can_recv()) sent_echo = filter(lambda x: x[3] == 0x80 | bus, r) loopback_resp = filter(lambda x: x[3] == bus, r) - assert_equal(len(sent_echo), 100) - assert_equal(len(loopback_resp), 100) + assert_equal(len(sent_echo), msg_count) + assert_equal(len(loopback_resp), msg_count) et = (time.time()-st)*1000.0 - comp_kbps = (1+11+1+1+1+4+8*8+15+1+1+1+7)*MSG_COUNT / et + comp_kbps = (1+11+1+1+1+4+8*8+15+1+1+1+7)*msg_count / et return comp_kbps