From 10362f7d30ca2b3b5f748c5bf12d337cfe833e69 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Mar 2023 10:51:55 +0100 Subject: [PATCH 1/2] added STR temperature set --- CHANGELOG.md | 1 + eive_tmtc/tmtc/acs/star_tracker.py | 37 +++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1385fcc..393b4cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ list yields a list of all related PRs for each release. ## Added - Added RTD ID enum and Set ID enumeration in the RTD module. +- STR Temperature Set ## Fixed diff --git a/eive_tmtc/tmtc/acs/star_tracker.py b/eive_tmtc/tmtc/acs/star_tracker.py index a8997a3..09c0dd9 100644 --- a/eive_tmtc/tmtc/acs/star_tracker.py +++ b/eive_tmtc/tmtc/acs/star_tracker.py @@ -687,15 +687,8 @@ def handle_str_hk_data(set_id: int, hk_data: bytes, printer: FsfwTmTcPrinter): _LOGGER.warning(f"HK parsing for Star Tracker set ID {set_id} unimplemented") -def handle_solution_set(hk_data: bytes, pw: PrintWrapper): - pw.dlog("Received solution set") - if len(hk_data) < 78: - _LOGGER.warning( - f"Solution dataset HK data with length {len(hk_data)} too short" - ) - return +def unpack_time_hk(hk_data: bytes, current_idx: int, pw: PrintWrapper) -> int: ticks_time_fmt = "!IQ" - current_idx = 0 fmt_len = struct.calcsize(ticks_time_fmt) (ticks, unix_time) = struct.unpack( ticks_time_fmt, hk_data[current_idx : current_idx + fmt_len] @@ -704,6 +697,34 @@ def handle_solution_set(hk_data: bytes, pw: PrintWrapper): pw.dlog(f"Ticks: {ticks} | UNIX time: {unix_time}") pw.dlog(f"UNIX as datetime: {unix_as_dt}") current_idx += fmt_len + return current_idx + + +def handle_temperature_set(hk_data: bytes, pw: PrintWrapper): + pw.dlog("Received temperature set") + if len(hk_data) < 24: + _LOGGER.warning(f"Temperature dataset HK with length {len(hk_data)} too short") + current_idx = unpack_time_hk(hk_data, 0, pw) + temps_fmt = "!fff" + fmt_len = struct.calcsize(temps_fmt) + (mcu_temp, cmos_temp, fpga_temp) = struct.unpack( + temps_fmt, hk_data[current_idx : current_idx + fmt_len] + ) + pw.dlog(f"MCU Temperature: {mcu_temp}") + pw.dlog(f"CMOS Temperature: {cmos_temp}") + pw.dlog(f"FPGA Temperature: {fpga_temp}") + current_idx += fmt_len + pw.printer.print_validity_buffer(hk_data[current_idx:], 5) + + +def handle_solution_set(hk_data: bytes, pw: PrintWrapper): + pw.dlog("Received solution set") + if len(hk_data) < 78: + _LOGGER.warning( + f"Solution dataset HK data with length {len(hk_data)} too short" + ) + return + current_idx = unpack_time_hk(hk_data, 0, pw) calib_quaternions_fmt = "!ffff" fmt_len = struct.calcsize(calib_quaternions_fmt) (calib_q_w, calib_q_x, calib_q_y, calib_q_z) = struct.unpack( From c274615aac3bf0a9e0defbbcc3b57656c2ff9341 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Mar 2023 10:53:41 +0100 Subject: [PATCH 2/2] missing set ID router --- eive_tmtc/tmtc/acs/star_tracker.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eive_tmtc/tmtc/acs/star_tracker.py b/eive_tmtc/tmtc/acs/star_tracker.py index 09c0dd9..b5f0b3c 100644 --- a/eive_tmtc/tmtc/acs/star_tracker.py +++ b/eive_tmtc/tmtc/acs/star_tracker.py @@ -683,6 +683,8 @@ def handle_str_hk_data(set_id: int, hk_data: bytes, printer: FsfwTmTcPrinter): pw.dlog(f"Received STR HK set with set ID {set_id}") if set_id == SetId.SOLUTION: handle_solution_set(hk_data, pw) + elif set_id == SetId.TEMPERATURE: + handle_temperature_set(hk_data, pw) else: _LOGGER.warning(f"HK parsing for Star Tracker set ID {set_id} unimplemented")