60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
|
import os
|
||
|
import struct
|
||
|
from datetime import datetime
|
||
|
|
||
|
from pus_tm.defs import PrintWrapper
|
||
|
from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
|
||
|
|
||
|
|
||
|
def handle_gps_data(printer: FsfwTmTcPrinter, hk_data: bytes):
|
||
|
pw = PrintWrapper(printer)
|
||
|
pw.dlog(f"Received GPS data, HK data length {len(hk_data)}")
|
||
|
var_index = 0
|
||
|
header_list = [
|
||
|
"Latitude",
|
||
|
"Longitude",
|
||
|
"Altitude",
|
||
|
"Fix Mode",
|
||
|
"Sats in Use",
|
||
|
"Date",
|
||
|
"Unix Seconds",
|
||
|
]
|
||
|
latitude = struct.unpack("!d", hk_data[0:8])[0]
|
||
|
longitude = struct.unpack("!d", hk_data[8:16])[0]
|
||
|
altitude = struct.unpack("!d", hk_data[16:24])[0]
|
||
|
fix_mode = hk_data[24]
|
||
|
sat_in_use = hk_data[25]
|
||
|
year = struct.unpack("!H", hk_data[26:28])[0]
|
||
|
month = hk_data[28]
|
||
|
day = hk_data[29]
|
||
|
hours = hk_data[30]
|
||
|
minutes = hk_data[31]
|
||
|
seconds = hk_data[32]
|
||
|
date_string = f"{day}.{month}.{year} {hours}:{minutes}:{seconds}"
|
||
|
unix_seconds = struct.unpack("!I", hk_data[33:37])[0]
|
||
|
content_list = [
|
||
|
latitude,
|
||
|
longitude,
|
||
|
altitude,
|
||
|
fix_mode,
|
||
|
sat_in_use,
|
||
|
date_string,
|
||
|
unix_seconds,
|
||
|
]
|
||
|
var_index += 13
|
||
|
if not os.path.isfile("gps_log.txt"):
|
||
|
with open("gps_log.txt", "w") as gps_file:
|
||
|
gps_file.write(
|
||
|
"Time, Latitude [deg], Longitude [deg], Altitude [m], Fix Mode, Sats in Use, "
|
||
|
"Date, Unix Seconds\n"
|
||
|
)
|
||
|
with open("gps_log.txt", "a") as gps_file:
|
||
|
gps_file.write(
|
||
|
f"{datetime.now()}, {latitude}, {longitude}, {altitude}, "
|
||
|
f"{fix_mode}, {sat_in_use}, {date_string}, {unix_seconds}\n"
|
||
|
)
|
||
|
validity_buffer = hk_data[37:39]
|
||
|
pw.dlog(str(header_list))
|
||
|
pw.dlog(str(content_list))
|
||
|
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
|