From 2ef56ae8c4cbca4c5838d39597ee12849ea7d565 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 17 Feb 2023 18:35:21 +0100 Subject: [PATCH] cotinue tm store front end --- eive_tmtc/config/events.csv | 15 +++--- eive_tmtc/config/events.py | 2 +- eive_tmtc/config/objects.csv | 5 ++ eive_tmtc/pus_tc/procedure_packer.py | 5 -- eive_tmtc/tmtc/tm_store.py | 71 +++++++++++++++++++++++----- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/eive_tmtc/config/events.csv b/eive_tmtc/config/events.csv index 4d1488e..52ba502 100644 --- a/eive_tmtc/config/events.csv +++ b/eive_tmtc/config/events.csv @@ -249,10 +249,11 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h 14005;0x36b5;VERSION_INFO;INFO;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.;bsp_q7s/core/CoreController.h 14006;0x36b6;CURRENT_IMAGE_INFO;INFO;P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h -14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;;mission/controller/ThermalController.h -14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;;mission/controller/ThermalController.h -14102;0x3716;SYRLINKS_OVERHEATING;HIGH;;mission/controller/ThermalController.h -14103;0x3717;PLOC_OVERHEATING;HIGH;;mission/controller/ThermalController.h -14104;0x3718;OBC_OVERHEATING;HIGH;;mission/controller/ThermalController.h -14105;0x3719;HPA_OVERHEATING;HIGH;;mission/controller/ThermalController.h -14106;0x371a;PLPCDU_OVERHEATING;HIGH;;mission/controller/ThermalController.h +14100;0x3714;POSSIBLE_FILE_CORRUPTION;LOW;P1: Result code of TM packet parser. P2: Timestamp of possibly corrupt file as a unix timestamp.;mission/tmtc/PersistentTmStore.h +14200;0x3778;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;;mission/controller/ThermalController.h +14201;0x3779;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;;mission/controller/ThermalController.h +14202;0x377a;SYRLINKS_OVERHEATING;HIGH;;mission/controller/ThermalController.h +14203;0x377b;PLOC_OVERHEATING;HIGH;;mission/controller/ThermalController.h +14204;0x377c;OBC_OVERHEATING;HIGH;;mission/controller/ThermalController.h +14205;0x377d;HPA_OVERHEATING;HIGH;;mission/controller/ThermalController.h +14206;0x377e;PLPCDU_OVERHEATING;HIGH;;mission/controller/ThermalController.h diff --git a/eive_tmtc/config/events.py b/eive_tmtc/config/events.py index aeb4d30..213beb6 100644 --- a/eive_tmtc/config/events.py +++ b/eive_tmtc/config/events.py @@ -3,7 +3,7 @@ import os from eive_tmtc import EIVE_TMTC_ROOT from tmtccmd.fsfw import parse_fsfw_events_csv -from tmtccmd.pus.s5_event import EventDictT +from tmtccmd.pus.s5_fsfw_event import EventDictT DEFAULT_EVENTS_CSV_PATH = EIVE_TMTC_ROOT / "config/events.csv" __EVENT_DICT = None diff --git a/eive_tmtc/config/objects.csv b/eive_tmtc/config/objects.csv index 56dbace..445a65c 100644 --- a/eive_tmtc/config/objects.csv +++ b/eive_tmtc/config/objects.csv @@ -147,6 +147,11 @@ 0x73010002;PL_SUBSYSTEM 0x73010003;TCS_SUBSYSTEM 0x73010004;COM_SUBSYSTEM +0x73020001;MISC_TM_STORE +0x73020002;OK_TM_STORE +0x73020003;NOT_OK_TM_STORE +0x73020004;HK_TM_STORE +0x73030000;CFDP_TM_STORE 0x73500000;CCSDS_IP_CORE_BRIDGE 0x90000003;THERMAL_TEMP_INSERTER 0xFFFFFFFF;NO_OBJECT diff --git a/eive_tmtc/pus_tc/procedure_packer.py b/eive_tmtc/pus_tc/procedure_packer.py index 4cc54f2..9729c2e 100644 --- a/eive_tmtc/pus_tc/procedure_packer.py +++ b/eive_tmtc/pus_tc/procedure_packer.py @@ -14,9 +14,6 @@ from tmtccmd.tc.decorator import ( route_to_registered_service_handlers, ServiceProviderParams, ) -from tmtccmd.tc.pus_5_event import ( - pack_generic_service_5_test_into, -) from eive_tmtc.tmtc.misc.s200_test import pack_service_200_test_into from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds @@ -83,8 +80,6 @@ def handle_default_procedure( service = info.service op_code = info.op_code obj_id_man = get_object_ids() - if service == CoreServiceList.SERVICE_5.value: - return pack_generic_service_5_test_into(q=queue_helper) if service == CoreServiceList.SERVICE_200.value: return pack_service_200_test_into(q=queue_helper) if service == CustomServiceList.P60DOCK.value: diff --git a/eive_tmtc/tmtc/tm_store.py b/eive_tmtc/tmtc/tm_store.py index e8aa53e..62a714b 100644 --- a/eive_tmtc/tmtc/tm_store.py +++ b/eive_tmtc/tmtc/tm_store.py @@ -1,5 +1,14 @@ +import logging import struct +from eive_tmtc.config.object_ids import ( + HK_TM_STORE, + MISC_TM_STORE, + OK_TM_STORE, + NOT_OK_TM_STORE, + CFDP_TM_STORE, + get_object_ids, +) from eive_tmtc.config.definitions import CustomServiceList from tmtccmd.config import TmtcDefinitionWrapper from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry @@ -7,6 +16,11 @@ from tmtccmd.tc import service_provider from tmtccmd.tc.decorator import ServiceProviderParams from dateutil.parser import parse +from spacepackets.ecss import PusService +from spacepackets.ecss.tc import PusTelecommand +from spacepackets.ecss.pus_15_tm_storage import Subservice +from tmtccmd.util import ObjectIdU32 + class OpCode: DUMP = "dump" @@ -18,28 +32,33 @@ class Info: DELETE = "Delete Telemetry Packets" +_LOGGER = logging.getLogger(__name__) + + @service_provider(CustomServiceList.TM_STORE) def pack_tm_store_commands(p: ServiceProviderParams): q = p.queue_helper o = p.op_code if o == OpCode.DELETE: q.add_log_cmd(Info.DELETE) - delete_start_time = parse( + delete_up_to_time = parse( input( - "Please enter delete start time in UTC ISO format (YYYY-MM-DDThh:mm:ssZ" + "Please enter delete end time in any format supported by dateutil.parser.parse\n" + "Recommended format: UTC ISO format YYYY-MM-DDThh:mm:ssZ: " ) ) - delete_end_time = parse( - input( - "Please enter delete end time in UTC ISO format (YYYY-MM-DDThh:mm:ssZ" - ) - ) - start_stamp = delete_start_time.timestamp() - end_stamp = delete_end_time.timestamp() - app_data = bytearray(struct.pack("!I", start_stamp)) + print(f"Parsed timestamp: {delete_up_to_time}") + end_stamp = delete_up_to_time.timestamp() + obj_id = store_select_prompt() + app_data = bytearray(obj_id.as_bytes) app_data.extend(struct.pack("!I", end_stamp)) - - pass + # q.add_pus_tc( + print( + PusTelecommand( + service=15, subservice=Subservice.DELETE_UP_TO, app_data=app_data + ) + ) + # ) elif o == OpCode.DUMP: q.add_log_cmd(Info.DUMP) pass @@ -53,3 +72,31 @@ def add_persistent_tm_store_cmd_defs(defs: TmtcDefinitionWrapper): defs.add_service( CustomServiceList.TM_STORE, "Persistent TM Store", op_code_entry=oce ) + + +STORE_DICT = { + OK_TM_STORE: "OK Store (Verification)", + NOT_OK_TM_STORE: "NOT OK Store (Events, Verification Failures..)", + MISC_TM_STORE: "Miscellaneous Store", + HK_TM_STORE: "HK TM Store", + CFDP_TM_STORE: "CFDP TM Store", +} + + +def store_select_prompt() -> ObjectIdU32: + obj_id_dict = get_object_ids() + print("Available TM stores:") + idx_to_obj_id = dict() + for idx, (k, v) in enumerate(STORE_DICT.items()): + idx_to_obj_id.update({idx: k}) + print(f"{idx}: {v}") + while True: + target_index = int( + input("Please enter the target store for the TM store transaction: ") + ) + obj_id_raw = idx_to_obj_id.get(target_index) + if obj_id_raw is None: + _LOGGER.warning("Invalid index. Try again") + continue + break + return obj_id_dict.get(obj_id_raw)