diff --git a/CHANGELOG.md b/CHANGELOG.md index 42de761..f020c1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,19 @@ list yields a list of all related PRs for each release. # [unreleased] +# [v5.3.1] 2023-07-26 + +## Changed + +- Adaptions for ACS CTRL strategy enum to make it compatible to software. Also make it re-usable + by putting it in global scope. + +# [v5.3.0] 2023-07-26 + +## Added + +- Dataset handling for new ACS fused rot rate dataset. + # [v5.2.0] 2023-07-13 - `tmtccmd` v5.0.0 diff --git a/eive_tmtc/__init__.py b/eive_tmtc/__init__.py index c6c2029..7215fe2 100644 --- a/eive_tmtc/__init__.py +++ b/eive_tmtc/__init__.py @@ -1,12 +1,12 @@ -__version__ = "5.2.0" +__version__ = "5.3.1" import logging from pathlib import Path SW_NAME = "eive-tmtc" VERSION_MAJOR = 5 -VERSION_MINOR = 2 -VERSION_REVISION = 0 +VERSION_MINOR = 3 +VERSION_REVISION = 1 EIVE_TMTC_ROOT = Path(__file__).parent PACKAGE_ROOT = EIVE_TMTC_ROOT.parent diff --git a/eive_tmtc/config/events.csv b/eive_tmtc/config/events.csv index 61e3a82..0cb9ba7 100644 --- a/eive_tmtc/config/events.csv +++ b/eive_tmtc/config/events.csv @@ -273,7 +273,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h 14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h 14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h -14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. 0: OFF, 1: ON, 2: MOUNTED. P1: SD Card 0, P2: SD Card 1.;mission/sysDefs.h +14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED. P1: Active SD Card Index, 0 if none is active P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1;mission/sysDefs.h 14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h 14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h 14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h diff --git a/eive_tmtc/pus_tm/event_handler.py b/eive_tmtc/pus_tm/event_handler.py index d90d3c2..d499652 100644 --- a/eive_tmtc/pus_tm/event_handler.py +++ b/eive_tmtc/pus_tm/event_handler.py @@ -139,7 +139,8 @@ def handle_event_packet( # noqa C901: Complexity okay here _LOGGER.error(f"Received invalid event fields for event {event_def}") finally: pw.dlog( - f"Active SD card {active_sd!r} | SD 0 State {sd_0_state!r} | SD 1 State {sd_1_state!r}" + f"Active SD card {active_sd!r} | SD 0 State {sd_0_state!r} | SD 1 " + f"State {sd_1_state!r}" ) if info.name == "HEALTH_INFO": specific_handler = True diff --git a/eive_tmtc/tmtc/acs/acs_ctrl.py b/eive_tmtc/tmtc/acs/acs_ctrl.py index 02363fe..a16e5e6 100644 --- a/eive_tmtc/tmtc/acs/acs_ctrl.py +++ b/eive_tmtc/tmtc/acs/acs_ctrl.py @@ -68,6 +68,29 @@ class ActionId(enum.IntEnum): RESTORE_MEKF_NONFINITE_RECOVERY = 2 +CTRL_STRAT_DICT = { + 0: "OFF", + 1: "NO_MAG_FIELD_FOR_CONTROL", + 2: "NO_SENSORS_FOR_CONTROL", + # OBSW <= v6.1.0 + 10: "LEGACY_SAFE_MEKF", + 11: "LEGACY_WITHOUT_MEKF", + 12: "LEGACY_ECLIPSE_DAMPING", + 13: "LEGACY_ECLIPSE_IDELING", + # Added in OBSW v6.2.0 + 14: "SAFE_MEKF", + 15: "SAFE_GYR", + 16: "SAFE_SUSMGM", + 17: "SAFE_ECLIPSE_DAMPING_GYR", + 18: "SAFE_ECLIPSE_DAMPING_SUSMGM", + 19: "SAFE_ECLIPSE_IDELING", + 20: "DETUMBLE_FULL", + 21: "DETUMBLE_DETERIORATED", + 30: "PTG_MEKF", + 31: "PTG_RAW", +} + + class OpCodes: OFF = ["off"] SAFE = ["safe"] @@ -1058,21 +1081,6 @@ def handle_mekf_data(pw: PrintWrapper, hk_data: bytes): def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes): - ctrl_strat = { - 0: "OFF", - 1: "NO_MAG_FIELD_FOR_CONTROL", - 2: "NO_SENSORS_FOR_CONTROL", - 10: "SAFE_MEKF", - 11: "SAFE_GYR", - 12: "SAFE_SUSMGM", - 13: "SAFE_ECLIPSE_DAMPING_GYR", - 14: "SAFE_ECLIPSE_DAMPING_SUSMGM", - 15: "SAFE_ECLIPSE_IDELING", - 20: "DETUMBLE_FULL", - 21: "DETUMBLE_DETERIORATED", - 30: "PTG_MEKF", - 31: "PTG_RAW", - } pw.dlog("Received CTRL Values Set") fmt_strat = "!B" fmt_quat = "!dddd" @@ -1118,8 +1126,8 @@ def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes): ) ] current_idx += inc_len_vec - if ctrl_strat.get(strat) is not None: - pw.dlog(f"{'Safe Ctrl Strategy'.ljust(25)}: {ctrl_strat[strat]}") + if CTRL_STRAT_DICT.get(strat) is not None: + pw.dlog(f"{'Safe Ctrl Strategy'.ljust(25)}: {CTRL_STRAT_DICT[strat]}") else: pw.dlog(f"{'Safe Ctrl Strategy (key unknown)'.ljust(25)}: {strat}") pw.dlog(f"Control Values Target Quaternion: {tgt_quat}") @@ -1172,7 +1180,7 @@ def handle_fused_rot_rate_data(pw: PrintWrapper, hk_data: bytes): pw.dlog("Received Fused Rotation Rates Data Set") fmt_vec3_double = "!ddd" inc_len_vec3_double = struct.calcsize(fmt_vec3_double) - if len(hk_data) < 3*inc_len_vec3_double: + if len(hk_data) < 3 * inc_len_vec3_double: pw.dlog("Received HK set too small") return current_idx = 0