begin to address UDP reliability issues
parent
f832f34413
commit
c536a8333c
|
@ -1 +1 @@
|
|||
from .panda import Panda
|
||||
from .panda import Panda, PandaWifiStreaming
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue