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)