66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
"""Utility functions for the driver."""
|
|
import socket
|
|
import struct
|
|
import urllib
|
|
import contextlib
|
|
|
|
def get_private_ip_address():
|
|
"""Find the private IP Address of the host device."""
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
try:
|
|
sock.connect(("8.8.8.8", 80))
|
|
except Exception as e:
|
|
return e
|
|
ip_address = sock.getsockname()[0]
|
|
sock.close()
|
|
return ip_address
|
|
|
|
def get_public_ip_address():
|
|
ip_address = "0.0.0.0"
|
|
try:
|
|
with contextlib.closing(urllib.urlopen("http://checkip.amazonaws.com")) as url:
|
|
ip_address = url.read()
|
|
except Exception as e:
|
|
print("could not resolve check IP: {}".format(e))
|
|
return ip_address
|
|
return ip_address[:-1]
|
|
|
|
|
|
def int_to_float16(int_to_convert):
|
|
"""Convert integer into float16 representation."""
|
|
bin_rep = ('0' * 16 + '{0:b}'.format(int_to_convert))[-16:]
|
|
sign = 1.0
|
|
if int(bin_rep[0]) == 1:
|
|
sign = -1.0
|
|
exponent = float(int(bin_rep[1:6], 2))
|
|
fraction = float(int(bin_rep[6:17], 2))
|
|
|
|
if exponent == float(0b00000):
|
|
return sign * 2 ** -14 * fraction / (2.0 ** 10.0)
|
|
elif exponent == float(0b11111):
|
|
if fraction == 0:
|
|
return sign * float("inf")
|
|
else:
|
|
return float("NaN")
|
|
else:
|
|
frac_part = 1.0 + fraction / (2.0 ** 10.0)
|
|
return sign * (2 ** (exponent - 15)) * frac_part
|
|
|
|
|
|
def ints_to_float(int1, int2):
|
|
"""Convert 2 registers into a floating point number."""
|
|
mypack = struct.pack('>HH', int1, int2)
|
|
f = struct.unpack('>f', mypack)
|
|
print("[{}, {}] >> {}".format(int1, int2, f[0]))
|
|
return f[0]
|
|
|
|
|
|
def degf_to_degc(temp_f):
|
|
"""Convert deg F to deg C."""
|
|
return (temp_f - 32.0) * (5.0/9.0)
|
|
|
|
|
|
def degc_to_degf(temp_c):
|
|
"""Convert deg C to deg F."""
|
|
return temp_c * 1.8 + 32.0
|