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.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							2.6 KiB
						
					
					
				| import os
 | |
| import sys
 | |
| import time
 | |
| import random
 | |
| import subprocess
 | |
| import requests
 | |
| from panda import Panda
 | |
| from nose.tools import timed, assert_equal, assert_less, assert_greater
 | |
| 
 | |
| def connect_wo_esp():
 | |
|   # connect to the panda
 | |
|   p = Panda()
 | |
| 
 | |
|   # power down the ESP
 | |
|   p.set_esp_power(False)
 | |
| 
 | |
|   # clear old junk
 | |
|   while len(p.can_recv()) > 0:
 | |
|     pass
 | |
| 
 | |
|   return p
 | |
| 
 | |
| def connect_wifi():
 | |
|   p = Panda()
 | |
|   dongle_id, pw = p.get_serial()
 | |
|   assert(dongle_id.isalnum())
 | |
|   _connect_wifi(dongle_id, pw)
 | |
| 
 | |
| def _connect_wifi(dongle_id, pw, insecure_okay=False):
 | |
|   ssid = str("panda-" + dongle_id)
 | |
| 
 | |
|   print("WIFI: connecting to %s" % ssid)
 | |
| 
 | |
|   while 1:
 | |
|     if sys.platform == "darwin":
 | |
|       os.system("networksetup -setairportnetwork en0 %s %s" % (ssid, pw))
 | |
|     else:
 | |
|       wlan_interface = subprocess.check_output(["sh", "-c", "iw dev | awk '/Interface/ {print $2}'"]).strip()
 | |
|       cnt = 0
 | |
|       MAX_TRIES = 10
 | |
|       while cnt < MAX_TRIES:
 | |
|         print "WIFI: scanning %d" % cnt
 | |
|         os.system("sudo iwlist %s scanning > /dev/null" % wlan_interface)
 | |
|         os.system("nmcli device wifi rescan")
 | |
|         wifi_scan = filter(lambda x: ssid in x, subprocess.check_output(["nmcli","dev", "wifi", "list"]).split("\n"))
 | |
|         if len(wifi_scan) != 0:
 | |
|           break
 | |
|         time.sleep(0.1)
 | |
|         # MAX_TRIES tries, ~10 seconds max
 | |
|         cnt += 1
 | |
|       assert cnt < MAX_TRIES
 | |
|       if "-pair" in wifi_scan[0]:
 | |
|         os.system("nmcli d wifi connect %s-pair" % (ssid))
 | |
|         if insecure_okay:
 | |
|           break
 | |
|         # fetch webpage
 | |
|         print "connecting to insecure network to secure"
 | |
|         r = requests.get("http://192.168.0.10/")
 | |
|         assert r.status_code==200
 | |
| 
 | |
|         print "securing"
 | |
|         try:
 | |
|           r = requests.get("http://192.168.0.10/secure", timeout=0.01)
 | |
|         except requests.exceptions.Timeout:
 | |
|           pass
 | |
|       else:
 | |
|         os.system("nmcli d wifi connect %s password %s" % (ssid, pw))
 | |
|         break
 | |
|   
 | |
|   # TODO: confirm that it's connected to the right panda
 | |
| 
 | |
| def time_many_sends(p, bus, precv=None, msg_count=100, msg_id=None):
 | |
|   if precv == None:
 | |
|     precv = p
 | |
|   if msg_id == None:
 | |
|     msg_id = random.randint(0x100, 0x200)
 | |
| 
 | |
|   st = time.time()
 | |
|   p.can_send_many([(msg_id, 0, "\xaa"*8, bus)]*msg_count)
 | |
|   r = []
 | |
| 
 | |
|   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 and x[0] == msg_id, r)
 | |
|   loopback_resp = filter(lambda x: x[3] == bus and x[0] == msg_id, r)
 | |
| 
 | |
|   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
 | |
| 
 | |
|   return comp_kbps
 | |
| 
 | |
| 
 |