From 5571a6852ed30b490c0df0f1a8deee5d4f9214fc Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 7 Aug 2023 14:21:58 +0200 Subject: [PATCH 1/7] init --- eive_tmtc/tmtc/acs/acs_ctrl.py | 44 ++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index a16e5e6..96f35e8 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -1,3 +1,4 @@ +import array import datetime import enum import logging @@ -66,6 +67,7 @@ class ActionId(enum.IntEnum): SOLAR_ARRAY_DEPLOYMENT_SUCCESSFUL = 0 RESET_MEKF = 1 RESTORE_MEKF_NONFINITE_RECOVERY = 2 + UPDATE_TLE = 3 CTRL_STRAT_DICT = { @@ -90,6 +92,13 @@ CTRL_STRAT_DICT = { 31: "PTG_RAW", } +GPS_COURCE_DICT = { + 0: "NONE", + 1: "GPS", + 2: "PROPAGATION", + 3: "SPG4", +} + class OpCodes: OFF = ["off"] @@ -103,6 +112,7 @@ class OpCodes: SAFE_PTG = ["confirm_deployment"] RESET_MEKF = ["reset_mekf"] RESTORE_MEKF_NONFINITE_RECOVERY = ["restore_mekf_nonfinite_recovery"] + UPDATE_TLE = ["update_tle"] SET_PARAMETER_SCALAR = ["set_scalar_param"] SET_PARAMETER_VECTOR = ["set_vector_param"] SET_PARAMETER_MATRIX = ["set_matrix_param"] @@ -153,6 +163,7 @@ class Info: SAFE_PTG = "Confirm deployment of both solar arrays" RESET_MEKF = "Reset the MEKF" RESTORE_MEKF_NONFINITE_RECOVERY = "Restore MEKF non-finite recovery" + UPDATE_TLE = "Update TLE" SET_PARAMETER_SCALAR = "Set Scalar Parameter" SET_PARAMETER_VECTOR = "Set Vector Parameter" SET_PARAMETER_MATRIX = "Set Matrix Parameter" @@ -220,6 +231,7 @@ def acs_cmd_defs(defs: TmtcDefinitionWrapper): keys=OpCodes.RESTORE_MEKF_NONFINITE_RECOVERY, info=Info.RESTORE_MEKF_NONFINITE_RECOVERY, ) + oce.add(keys=OpCodes.UPDATE_TLE, info=Info.UPDATE_TLE) oce.add(keys=OpCodes.SET_PARAMETER_SCALAR, info=Info.SET_PARAMETER_SCALAR) oce.add(keys=OpCodes.SET_PARAMETER_VECTOR, info=Info.SET_PARAMETER_VECTOR) oce.add(keys=OpCodes.SET_PARAMETER_MATRIX, info=Info.SET_PARAMETER_MATRIX) @@ -308,6 +320,24 @@ def pack_acs_ctrl_command(p: ServiceProviderParams): # noqa C901 q.add_pus_tc( create_action_cmd(ACS_CONTROLLER, ActionId.RESTORE_MEKF_NONFINITE_RECOVERY) ) + elif op_code in OpCodes.UPDATE_TLE: + q.add_log_cmd(f"{Info.UPDATE_TLE}") + while True: + line1 = input("Please input the first line of the TLE: ") + if len(line1) == 69: + break + else: + print("The line does not have the required length of 69 characters") + while True: + line2 = input("Please input the second line of the TLE: ") + if len(line2) == 69: + break + else: + print("The line does not have the required length of 69 characters") + tle = line1.encode()+line2.encode() + q.add_pus_tc( + create_action_cmd(ACS_CONTROLLER, ActionId.UPDATE_TLE,tle) + ) elif op_code in OpCodes.SET_PARAMETER_SCALAR: q.add_log_cmd(f"{Info.SET_PARAMETER_SCALAR}") set_acs_ctrl_param_scalar(q) @@ -985,11 +1015,13 @@ def handle_gyr_data_processed(pw: PrintWrapper, hk_data: bytes): def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): pw.dlog("Received GPS Processed Set") + fmt_source = "!B" fmt_scalar = "!d" fmt_vec = "!ddd" + inc_len_source = struct.calcsize(fmt_source) inc_len_scalar = struct.calcsize(fmt_scalar) inc_len_vec = struct.calcsize(fmt_vec) - if len(hk_data) < 2 * inc_len_scalar + 2 * inc_len_vec: + if len(hk_data) < 2 * inc_len_scalar + 2 * inc_len_vec + inc_len_source: pw.dlog("Received HK set too small") return current_idx = 0 @@ -1028,12 +1060,20 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): ) ] current_idx += inc_len_vec + source = [ + f"{val:8.3f}" + for val in struct.unpack( + fmt_vec, hk_data[current_idx: current_idx + inc_len_source] + ) + ] + current_idx += inc_len_source + pw.dlog(f"GPS Source: {GPS_COURCE_DICT[source]}") pw.dlog(f"GPS Latitude: {lat} [deg]") pw.dlog(f"GPS Longitude: {long} [deg]") pw.dlog(f"GPS Altitude: {alt} [m]") pw.dlog(f"GPS Position: {pos} [m]") pw.dlog(f"GPS Velocity: {velo} [m/s]") - FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=5) + FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=6) def handle_mekf_data(pw: PrintWrapper, hk_data: bytes): -- 2.34.1 From 6d88746ec3f73a4606eecd9e16ec1c9a43d2e394 Mon Sep 17 00:00:00 2001 From: meggert Date: Tue, 8 Aug 2023 09:40:37 +0200 Subject: [PATCH 2/7] fix --- eive_tmtc/tmtc/acs/acs_ctrl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index 96f35e8..c7008f2 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -1063,7 +1063,7 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): source = [ f"{val:8.3f}" for val in struct.unpack( - fmt_vec, hk_data[current_idx: current_idx + inc_len_source] + fmt_source, hk_data[current_idx: current_idx + inc_len_source] ) ] current_idx += inc_len_source -- 2.34.1 From 051e9e6ffbdc17b7713a3a72d758eb053e22164f Mon Sep 17 00:00:00 2001 From: meggert Date: Tue, 8 Aug 2023 10:01:50 +0200 Subject: [PATCH 3/7] lets be clean about this --- eive_tmtc/tmtc/acs/acs_ctrl.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index c7008f2..be3c1d4 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -1067,7 +1067,10 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): ) ] current_idx += inc_len_source - pw.dlog(f"GPS Source: {GPS_COURCE_DICT[source]}") + if GPS_COURCE_DICT.get(source) is not None: + pw.dlog(f"GPS Source: {GPS_COURCE_DICT[source]}") + else: + pw.dlog(f"'GPS Source (key unknown)': {source}") pw.dlog(f"GPS Latitude: {lat} [deg]") pw.dlog(f"GPS Longitude: {long} [deg]") pw.dlog(f"GPS Altitude: {alt} [m]") -- 2.34.1 From 1acbb8bb430fdd0fbd665a3d81e9142db657939c Mon Sep 17 00:00:00 2001 From: meggert Date: Tue, 8 Aug 2023 13:39:36 +0200 Subject: [PATCH 4/7] less copy-pasta helps sometimes --- eive_tmtc/tmtc/acs/acs_ctrl.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index be3c1d4..7c2f1c2 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -1060,12 +1060,7 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): ) ] current_idx += inc_len_vec - source = [ - f"{val:8.3f}" - for val in struct.unpack( - fmt_source, hk_data[current_idx: current_idx + inc_len_source] - ) - ] + source = struct.unpack(fmt_source, hk_data[current_idx: current_idx + inc_len_source])[0] current_idx += inc_len_source if GPS_COURCE_DICT.get(source) is not None: pw.dlog(f"GPS Source: {GPS_COURCE_DICT[source]}") -- 2.34.1 From 12c60ac31085674b05e7bc0d42aed535e388ff1d Mon Sep 17 00:00:00 2001 From: meggert Date: Wed, 9 Aug 2023 14:58:28 +0200 Subject: [PATCH 5/7] goddamnit --- eive_tmtc/tmtc/acs/acs_ctrl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index 7c2f1c2..06a194c 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -96,7 +96,7 @@ GPS_COURCE_DICT = { 0: "NONE", 1: "GPS", 2: "PROPAGATION", - 3: "SPG4", + 3: "SGP4", } -- 2.34.1 From b58977fd6509ad28dc591c54209a544c37716c75 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 14 Aug 2023 12:50:50 +0200 Subject: [PATCH 6/7] naming --- eive_tmtc/tmtc/acs/acs_ctrl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index 06a194c..ca5042c 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -95,7 +95,7 @@ CTRL_STRAT_DICT = { GPS_COURCE_DICT = { 0: "NONE", 1: "GPS", - 2: "PROPAGATION", + 2: "GPS_EXTRAPOLATED", 3: "SGP4", } -- 2.34.1 From f42318bc579f4b818ba22f8d9cdbd204626ab338 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 14 Aug 2023 15:58:44 +0200 Subject: [PATCH 7/7] deprecated import --- eive_tmtc/tmtc/acs/acs_ctrl.py | 1 - 1 file changed, 1 deletion(-) diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index ca5042c..2b6fec2 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -1,4 +1,3 @@ -import array import datetime import enum import logging -- 2.34.1