|  |  |  | @ -8,6 +8,7 @@ import random | 
			
		
	
		
			
				
					|  |  |  |  | from cereal import log | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | NetworkType = log.ThermalData.NetworkType | 
			
		
	
		
			
				
					|  |  |  |  | NetworkStrength = log.ThermalData.NetworkStrength | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | ANDROID = os.path.isfile('/EON') | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -128,3 +129,154 @@ def get_network_type(): | 
			
		
	
		
			
				
					|  |  |  |  |       19: NetworkType.cell4G | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     return cell_networks.get(cell_check, NetworkType.none) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def get_network_strength(network_type): | 
			
		
	
		
			
				
					|  |  |  |  |   network_strength = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |   # from SignalStrength.java | 
			
		
	
		
			
				
					|  |  |  |  |   def get_lte_level(rsrp, rssnr): | 
			
		
	
		
			
				
					|  |  |  |  |     INT_MAX = 2147483647 | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_rsrp = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_rssnr = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     if rsrp == INT_MAX: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rsrp = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     elif rsrp >= -95: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rsrp = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif rsrp >= -105: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rsrp = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif rsrp >= -115: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rsrp = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     else: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rsrp = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     if rssnr == INT_MAX: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rssnr = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     elif rssnr >= 45: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rssnr = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif rssnr >= 10: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rssnr = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif rssnr >= -30: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rssnr = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     else: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_rssnr = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return max(lvl_rsrp, lvl_rssnr) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def get_tdscdma_level(tdscmadbm): | 
			
		
	
		
			
				
					|  |  |  |  |     lvl = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     if tdscmadbm > -25: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     elif tdscmadbm >= -49: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif tdscmadbm >= -73: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif tdscmadbm >= -97: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     elif tdscmadbm >= -110: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return lvl | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def get_gsm_level(asu): | 
			
		
	
		
			
				
					|  |  |  |  |     lvl = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     if asu <= 2 or asu == 99: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     elif asu >= 12: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif asu >= 8: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif asu >= 5: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     else: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return lvl | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def get_evdo_level(evdodbm, evdosnr): | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_evdodbm = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_evdosnr = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     if evdodbm >= -65: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdodbm = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdodbm >= -75: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdodbm = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdodbm >= -90: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdodbm = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdodbm >= -105: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdodbm = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     if evdosnr >= 7: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdosnr = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdosnr >= 5: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdosnr = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdosnr >= 3: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdosnr = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     elif evdosnr >= 1: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_evdosnr = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return max(lvl_evdodbm, lvl_evdosnr) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def get_cdma_level(cdmadbm, cdmaecio): | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_cdmadbm = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     lvl_cdmaecio = NetworkStrength.unknown | 
			
		
	
		
			
				
					|  |  |  |  |     if cdmadbm >= -75: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmadbm = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmadbm >= -85: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmadbm = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmadbm >= -95: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmadbm = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmadbm >= -100: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmadbm = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     if cdmaecio >= -90: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmaecio = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmaecio >= -110: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmaecio = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmaecio >= -130: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmaecio = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |     elif cdmaecio >= -150: | 
			
		
	
		
			
				
					|  |  |  |  |       lvl_cdmaecio = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return max(lvl_cdmadbm, lvl_cdmaecio) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if network_type == NetworkType.none: | 
			
		
	
		
			
				
					|  |  |  |  |     return network_strength | 
			
		
	
		
			
				
					|  |  |  |  |   if network_type == NetworkType.wifi: | 
			
		
	
		
			
				
					|  |  |  |  |     out = subprocess.check_output('dumpsys connectivity', shell=True).decode('ascii') | 
			
		
	
		
			
				
					|  |  |  |  |     network_strength = NetworkStrength.none | 
			
		
	
		
			
				
					|  |  |  |  |     for line in out.split('\n'): | 
			
		
	
		
			
				
					|  |  |  |  |       if "SignalStrength" in line: | 
			
		
	
		
			
				
					|  |  |  |  |         arr = line.split(' ') | 
			
		
	
		
			
				
					|  |  |  |  |         lvl = int(arr[53][:-2]) | 
			
		
	
		
			
				
					|  |  |  |  |         if lvl >= -50: | 
			
		
	
		
			
				
					|  |  |  |  |           network_strength = NetworkStrength.great | 
			
		
	
		
			
				
					|  |  |  |  |         elif lvl >= -60: | 
			
		
	
		
			
				
					|  |  |  |  |           network_strength = NetworkStrength.good | 
			
		
	
		
			
				
					|  |  |  |  |         elif lvl >= -70: | 
			
		
	
		
			
				
					|  |  |  |  |           network_strength = NetworkStrength.moderate | 
			
		
	
		
			
				
					|  |  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |  |           network_strength = NetworkStrength.poor | 
			
		
	
		
			
				
					|  |  |  |  |     return network_strength | 
			
		
	
		
			
				
					|  |  |  |  |   else: | 
			
		
	
		
			
				
					|  |  |  |  |     # check cell strength | 
			
		
	
		
			
				
					|  |  |  |  |     out = subprocess.check_output('dumpsys telephony.registry', shell=True).decode('ascii') | 
			
		
	
		
			
				
					|  |  |  |  |     for line in out.split('\n'): | 
			
		
	
		
			
				
					|  |  |  |  |       if "mSignalStrength" in line: | 
			
		
	
		
			
				
					|  |  |  |  |         arr = line.split(' ') | 
			
		
	
		
			
				
					|  |  |  |  |         ns = 0 | 
			
		
	
		
			
				
					|  |  |  |  |         if ("gsm" in arr[14]): | 
			
		
	
		
			
				
					|  |  |  |  |           rsrp = int(arr[9]) | 
			
		
	
		
			
				
					|  |  |  |  |           rssnr = int(arr[11]) | 
			
		
	
		
			
				
					|  |  |  |  |           ns = get_lte_level(rsrp, rssnr) | 
			
		
	
		
			
				
					|  |  |  |  |           if ns == NetworkStrength.unknown: | 
			
		
	
		
			
				
					|  |  |  |  |             tdscmadbm = int(arr[13]) | 
			
		
	
		
			
				
					|  |  |  |  |             ns = get_tdscdma_level(tdscmadbm) | 
			
		
	
		
			
				
					|  |  |  |  |             if ns == NetworkStrength.unknown: | 
			
		
	
		
			
				
					|  |  |  |  |               asu = int(arr[1]) | 
			
		
	
		
			
				
					|  |  |  |  |               ns = get_gsm_level(asu) | 
			
		
	
		
			
				
					|  |  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |  |           cdmadbm = int(arr[3]) | 
			
		
	
		
			
				
					|  |  |  |  |           cdmaecio = int(arr[4]) | 
			
		
	
		
			
				
					|  |  |  |  |           evdodbm = int(arr[5]) | 
			
		
	
		
			
				
					|  |  |  |  |           evdosnr = int(arr[7]) | 
			
		
	
		
			
				
					|  |  |  |  |           lvl_cdma = get_cdma_level(cdmadbm, cdmaecio) | 
			
		
	
		
			
				
					|  |  |  |  |           lvl_edmo = get_evdo_level(evdodbm, evdosnr) | 
			
		
	
		
			
				
					|  |  |  |  |           if lvl_edmo == NetworkStrength.unknown: | 
			
		
	
		
			
				
					|  |  |  |  |             ns = lvl_cdma | 
			
		
	
		
			
				
					|  |  |  |  |           elif lvl_cdma == NetworkStrength.unknown: | 
			
		
	
		
			
				
					|  |  |  |  |             ns = lvl_edmo | 
			
		
	
		
			
				
					|  |  |  |  |           else: | 
			
		
	
		
			
				
					|  |  |  |  |             ns = min(lvl_cdma, lvl_edmo) | 
			
		
	
		
			
				
					|  |  |  |  |         network_strength = max(network_strength, ns) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     return network_strength | 
			
		
	
	
		
			
				
					|  |  |  | 
 |