You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							3.5 KiB
						
					
					
				| from __future__ import print_function
 | |
| import time
 | |
| from panda import Panda
 | |
| from nose.tools import assert_equal, assert_less, assert_greater
 | |
| from helpers import time_many_sends, test_two_panda, panda_color_to_serial
 | |
| 
 | |
| @test_two_panda
 | |
| @panda_color_to_serial
 | |
| def test_send_recv(serial_sender=None, serial_reciever=None):
 | |
|   p_send = Panda(serial_sender)
 | |
|   p_recv = Panda(serial_reciever)
 | |
| 
 | |
|   p_send.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
 | |
|   p_send.set_can_loopback(False)
 | |
| 
 | |
|   p_recv.set_can_loopback(False)
 | |
| 
 | |
|   assert not p_send.legacy
 | |
|   assert not p_recv.legacy
 | |
| 
 | |
|   p_send.can_send_many([(0x1ba, 0, "message", 0)]*2)
 | |
|   time.sleep(0.05)
 | |
|   p_recv.can_recv()
 | |
|   p_send.can_recv()
 | |
| 
 | |
|   busses = [0,1,2]
 | |
| 
 | |
|   for bus in busses:
 | |
|     for speed in [100, 250, 500, 750, 1000]:
 | |
|       p_send.set_can_speed_kbps(bus, speed)
 | |
|       p_recv.set_can_speed_kbps(bus, speed)
 | |
|       time.sleep(0.05)
 | |
| 
 | |
|       comp_kbps = time_many_sends(p_send, bus, p_recv, two_pandas=True)
 | |
| 
 | |
|       saturation_pct = (comp_kbps/speed) * 100.0
 | |
|       assert_greater(saturation_pct, 80)
 | |
|       assert_less(saturation_pct, 100)
 | |
| 
 | |
|       print("two pandas bus {}, 100 messages at speed {:4d}, comp speed is {:7.2f}, percent {:6.2f}".format(bus, speed, comp_kbps, saturation_pct))
 | |
| 
 | |
| @test_two_panda
 | |
| @panda_color_to_serial
 | |
| def test_latency(serial_sender=None, serial_reciever=None):
 | |
|   p_send = Panda(serial_sender)
 | |
|   p_recv = Panda(serial_reciever)
 | |
| 
 | |
|   p_send.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
 | |
|   p_send.set_can_loopback(False)
 | |
| 
 | |
|   p_recv.set_can_loopback(False)
 | |
| 
 | |
|   assert not p_send.legacy
 | |
|   assert not p_recv.legacy
 | |
| 
 | |
|   p_send.set_can_speed_kbps(0, 100)
 | |
|   p_recv.set_can_speed_kbps(0, 100)
 | |
|   time.sleep(0.05)
 | |
| 
 | |
|   p_send.can_send_many([(0x1ba, 0, "testmsg", 0)]*10)
 | |
|   time.sleep(0.05)
 | |
|   p_recv.can_recv()
 | |
|   p_send.can_recv()
 | |
| 
 | |
|   busses = [0,1,2]
 | |
| 
 | |
|   for bus in busses:
 | |
|     for speed in [100, 250, 500, 750, 1000]:
 | |
|       p_send.set_can_speed_kbps(bus, speed)
 | |
|       p_recv.set_can_speed_kbps(bus, speed)
 | |
|       time.sleep(0.1)
 | |
|       #clear can buffers
 | |
|       r = [1]
 | |
|       while len(r) > 0:
 | |
|         r = p_send.can_recv()
 | |
|       r = [1]
 | |
|       while len(r) > 0:
 | |
|         r = p_recv.can_recv()
 | |
|       time.sleep(0.05)
 | |
| 
 | |
|       latencies = []
 | |
|       comp_kbps_list = []
 | |
|       saturation_pcts = []
 | |
| 
 | |
|       num_messages = 100
 | |
| 
 | |
|       for i in range(num_messages):
 | |
|         st = time.time()
 | |
|         p_send.can_send(0x1ab, "message", bus)
 | |
|         r = []
 | |
|         while len(r) < 1 and (time.time() - st) < 5:
 | |
|           r = p_recv.can_recv()
 | |
|         et = time.time()
 | |
|         r_echo = []
 | |
|         while len(r_echo) < 1 and (time.time() - st) < 10:
 | |
|           r_echo = p_send.can_recv()
 | |
| 
 | |
|         if len(r) == 0 or len(r_echo) == 0:
 | |
|           print("r: {}, r_echo: {}".format(r, r_echo))
 | |
| 
 | |
|         assert_equal(len(r),1)
 | |
|         assert_equal(len(r_echo),1)
 | |
| 
 | |
|         et = (et - st)*1000.0
 | |
|         comp_kbps = (1+11+1+1+1+4+8*8+15+1+1+1+7) / et
 | |
|         latency = et - ((1+11+1+1+1+4+8*8+15+1+1+1+7) / speed)
 | |
| 
 | |
|         assert_less(latency, 5.0)
 | |
| 
 | |
|         saturation_pct = (comp_kbps/speed) * 100.0
 | |
|         latencies.append(latency)
 | |
|         comp_kbps_list.append(comp_kbps)
 | |
|         saturation_pcts.append(saturation_pct)
 | |
| 
 | |
|       average_latency = sum(latencies)/num_messages
 | |
|       assert_less(average_latency, 1.0)
 | |
|       average_comp_kbps = sum(comp_kbps_list)/num_messages
 | |
|       average_saturation_pct = sum(saturation_pcts)/num_messages
 | |
| 
 | |
|       print("two pandas bus {}, {} message average at speed {:4d}, latency is {:5.3f}ms, comp speed is {:7.2f}, percent {:6.2f}"\
 | |
|             .format(bus, num_messages, speed, average_latency, average_comp_kbps, average_saturation_pct))
 | |
| 
 |