diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f20da8..482aff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,22 @@ list yields a list of all related PRs for each release. # [unreleased] -# [v5.0.0] +# [v5.1.0] 2023-06-28 + +## Added + +- Internal error reporter dataset handling. + +## Fixed + +- `APP_LOGGER` is the root logger now. + +## Changed + +- HK is only displayed in brief format per default now. This will soon be adaptable by CLI + argument. + +# [v5.0.0] 2023-06-22 ## Changed diff --git a/eive_tmtc/__init__.py b/eive_tmtc/__init__.py index 257095c..4682dd5 100644 --- a/eive_tmtc/__init__.py +++ b/eive_tmtc/__init__.py @@ -1,14 +1,14 @@ -__version__ = "5.0.0" +__version__ = "5.1.0" import logging from pathlib import Path SW_NAME = "eive-tmtc" VERSION_MAJOR = 5 -VERSION_MINOR = 0 +VERSION_MINOR = 1 VERSION_REVISION = 0 EIVE_TMTC_ROOT = Path(__file__).parent PACKAGE_ROOT = EIVE_TMTC_ROOT.parent -APP_LOGGER = logging.getLogger(__name__) +APP_LOGGER = logging.getLogger() diff --git a/eive_tmtc/config/object_ids.py b/eive_tmtc/config/object_ids.py index 21e7822..4d09d9e 100644 --- a/eive_tmtc/config/object_ids.py +++ b/eive_tmtc/config/object_ids.py @@ -18,6 +18,7 @@ __OBJECT_ID_DICT = None # Core Object IDs SOLAR_ARRAY_DEPLOYMENT_ID = bytes([0x44, 0x41, 0x00, 0xA2]) +INTERNAL_ERROR_REPORTER_ID = bytes([0x53, 0x04, 0x00, 0x00]) # Power Object IDs PCDU_HANDLER_ID = bytes([0x44, 0x20, 0x00, 0xA1]) diff --git a/eive_tmtc/pus_tm/hk_handling.py b/eive_tmtc/pus_tm/hk_handling.py index e149371..68cf432 100644 --- a/eive_tmtc/pus_tm/hk_handling.py +++ b/eive_tmtc/pus_tm/hk_handling.py @@ -3,6 +3,7 @@ import logging # from pus_tm.tcp_server_objects import TCP_SEVER_SENSOR_TEMPERATURES from eive_tmtc.tmtc.acs.acs_ctrl import handle_acs_ctrl_hk_data +from eive_tmtc.tmtc.internal_err_reporter import handle_ier_hk_data from eive_tmtc.tmtc.payload.ploc_mpsoc import handle_ploc_mpsoc_hk_data from eive_tmtc.tmtc.tcs.rtd import RTD_NAMES, handle_rtd_hk from eive_tmtc.tmtc.acs.star_tracker import handle_str_hk_data @@ -72,7 +73,9 @@ def handle_hk_packet( hk_data=hk_data, ) try: - if HK_OUTPUT_LEVEL > 0: + if HK_OUTPUT_LEVEL == 1: + pass + elif HK_OUTPUT_LEVEL > 1: handle_regular_hk_print( printer=printer, object_id=named_obj_id, @@ -122,6 +125,8 @@ def handle_regular_hk_print( # noqa C901: Complexity okay here return handle_ploc_mpsoc_hk_data(pw=pw, hk_data=hk_data, set_id=set_id) elif objb == obj_ids.ACU_HANDLER_ID: return handle_acu_hk_data(pw=pw, hk_data=hk_data, set_id=set_id) + elif objb == obj_ids.INTERNAL_ERROR_REPORTER_ID: + return handle_ier_hk_data(pw=pw, hk_data=hk_data, set_id=set_id) elif objb == obj_ids.RAD_SENSOR_ID: return handle_rad_sensor_data(pw=pw, hk_data=hk_data, set_id=set_id) elif objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]: diff --git a/eive_tmtc/pus_tm/factory_hook.py b/eive_tmtc/pus_tm/pus_demux.py similarity index 98% rename from eive_tmtc/pus_tm/factory_hook.py rename to eive_tmtc/pus_tm/pus_demux.py index 6b74468..89ccb11 100644 --- a/eive_tmtc/pus_tm/factory_hook.py +++ b/eive_tmtc/pus_tm/pus_demux.py @@ -35,6 +35,7 @@ def pus_factory_hook( # noqa C901 : Complexity okay here return try: tm_packet = PusTelemetry.unpack(packet, CdsShortTimestamp.empty()) + # _LOGGER.info(f"Sequence count: {tm_packet.seq_count}") except ValueError as value_error: _LOGGER.warning(f"{value_error}") _LOGGER.warning("Could not generate PUS TM object from raw data") diff --git a/eive_tmtc/tmtc/internal_err_reporter.py b/eive_tmtc/tmtc/internal_err_reporter.py new file mode 100644 index 0000000..6c26c5f --- /dev/null +++ b/eive_tmtc/tmtc/internal_err_reporter.py @@ -0,0 +1,24 @@ +import enum +import struct + +from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter + +from eive_tmtc.pus_tm.defs import PrintWrapper + + +class SetId(enum.IntEnum): + ERROR_ID = 0 + + +def handle_ier_hk_data(pw: PrintWrapper, hk_data: bytes, set_id: int): + pw.dlog(f"Received internal error reporter HK data with set ID {set_id}") + if set_id == SetId.ERROR_ID: + fmt_str = "!III" + inc_len = struct.calcsize(fmt_str) + (tm_errors, queue_errors, store_hits) = struct.unpack( + fmt_str, hk_data[:inc_len] + ) + pw.dlog(f"TM Errors: {tm_errors}") + pw.dlog(f"Queue Errors: {queue_errors}") + pw.dlog(f"Store Errors: {store_hits}") + pw.dlog(FsfwTmTcPrinter.get_validity_buffer(hk_data[inc_len:], 3)) diff --git a/eive_tmtc/tmtc/obj_prompt.py b/eive_tmtc/tmtc/obj_prompt.py index 8a797dd..05aaa2b 100644 --- a/eive_tmtc/tmtc/obj_prompt.py +++ b/eive_tmtc/tmtc/obj_prompt.py @@ -14,6 +14,11 @@ from eive_tmtc.config.object_ids import ( RW1_ID, RW2_ID, RTD_0_PLOC_HSPD, + TMP1075_HANDLER_TCS_BRD_1_ID, + TMP1075_HANDLER_TCS_BRD_0_ID, + TMP1075_HANDLER_PLPCDU_0_ID, + TMP1075_HANDLER_PLPCDU_1_ID, + TMP1075_HANDLER_IF_BRD_ID, ) SUBSYSTEM_DICT = { @@ -41,6 +46,11 @@ ACS_OBJ_DICT = { TCS_OBJ_DICT = { 0: ("RTD 0", RTD_0_PLOC_HSPD), + 1: ("TMP1075 PL PCDU 0", TMP1075_HANDLER_PLPCDU_0_ID), + 2: ("TMP1075 PL PCDU 1", TMP1075_HANDLER_PLPCDU_1_ID), + 3: ("TMP1075 TCS 0", TMP1075_HANDLER_TCS_BRD_0_ID), + 4: ("TMP1075 TCS 1", TMP1075_HANDLER_TCS_BRD_1_ID), + 5: ("TMP1075 IF BOARD", TMP1075_HANDLER_IF_BRD_ID), } diff --git a/eive_tmtc/tmtc/tcs/defs.py b/eive_tmtc/tmtc/tcs/defs.py index 0f9a0b2..6ec5a0a 100644 --- a/eive_tmtc/tmtc/tcs/defs.py +++ b/eive_tmtc/tmtc/tcs/defs.py @@ -6,3 +6,8 @@ class CtrlSetId(enum.IntEnum): DEVICE_SENSORS = 1 SUS_TEMP_SENSORS = 2 HEATER_INFO = 4 + + +class TcsSubmode(enum.IntEnum): + DEFAULT = 0 + NO_HEATER_CTRL = 1 diff --git a/tmtcc.py b/tmtcc.py index 739ecf0..94a8d84 100755 --- a/tmtcc.py +++ b/tmtcc.py @@ -94,7 +94,7 @@ from eive_tmtc.config.definitions import ( CFDP_REMOTE_ENTITY_ID, ) from eive_tmtc.config.hook import EiveHookObject -from eive_tmtc.pus_tm.factory_hook import pus_factory_hook +from eive_tmtc.pus_tm.pus_demux import pus_factory_hook from eive_tmtc.pus_tc.procedure_packer import handle_default_procedure _LOGGER = APP_LOGGER