diff --git a/eive_tmtc/tmtc/payload/ploc_supervisor.py b/eive_tmtc/tmtc/payload/ploc_supervisor.py index cffd273..62973a1 100644 --- a/eive_tmtc/tmtc/payload/ploc_supervisor.py +++ b/eive_tmtc/tmtc/payload/ploc_supervisor.py @@ -6,6 +6,7 @@ @author J. Meier @date 10.07.2021 """ +from datetime import datetime import enum import logging import struct @@ -42,14 +43,14 @@ MANUAL_INPUT = "1" HARDCODED_FILE = "/home/rmueller/EIVE/mpsoc_boot.bin" UPDATE_FILE_DICT = { - HARDCODED: ["hardcoded", ""], - MANUAL_INPUT: ["manual input", ""], - "2": ["/mnt/sd0/ploc/mpsoc/image.bin", "/mnt/sd0/ploc/mpsoc/image.bin"], + HARDCODED: ("hardcoded", ""), + MANUAL_INPUT: ("manual input", ""), + "2": ("/mnt/sd0/ploc/mpsoc/image.bin", "/mnt/sd0/ploc/mpsoc/image.bin"), } EVENT_BUFFER_PATH_DICT = { - MANUAL_INPUT: ["manual input", ""], - "2": ["/mnt/sd0/ploc/supervisor", "/mnt/sd0/ploc/supervisor"], + MANUAL_INPUT: ("manual input", ""), + "2": ("/mnt/sd0/ploc/supervisor", "/mnt/sd0/ploc/supervisor"), } @@ -149,7 +150,6 @@ class OpCode: class Info(str, enum.Enum): - value: str OFF = "Switch Off" ON = "Switch On" NML = "Switch Normal" @@ -766,6 +766,8 @@ def handle_supv_hk_data(set_id: int, hk_data: bytes, pw: PrintWrapper): handle_adc_report(hk_data) elif set_id == SetId.COUNTERS_REPORT: handle_counters_report(hk_data) + elif set_id == SetId.LATCHUP_REPORT: + handle_latchup_status_report(hk_data) else: pw.dlog(f"PLOC SUPV: HK handling not implemented for set ID {set_id}") pw.dlog(f"Raw Data: 0x[{hk_data.hex(sep=',')}]") @@ -907,3 +909,43 @@ def handle_counters_report(hk_data: bytes): print(f"MM task lost: {mm_task_lost}") print(f"HK task lost: {hk_task_lost}") print(f"DL task lost: {dl_task_lost}") + + +def handle_latchup_status_report(hk_data: bytes): + # 1 byte ID, 7 times 2 bytes of counts, and 8 bytes of time. + if len(hk_data) < 23: + raise ValueError("Latchup status report smaller than expected") + current_idx = 0 + id = hk_data[current_idx] + current_idx += 1 + counts_of_alerts = [] + for _ in range(7): + counts_of_alerts.append( + struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0] + ) + current_idx += 2 + print(f"ID: {id}") + print(f"Counts of alerts: {counts_of_alerts}") + time_ms = struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0] + current_idx += 2 + time_seconds = hk_data[current_idx] + current_idx += 1 + time_minutes = hk_data[current_idx] + current_idx += 1 + time_hour = hk_data[current_idx] + current_idx += 1 + time_day = hk_data[current_idx] + current_idx += 1 + time_month = hk_data[current_idx] + current_idx += 1 + time_year = hk_data[current_idx] + dt = datetime( + year=time_year, + month=time_month, + day=time_day, + hour=time_hour, + minute=time_minutes, + second=time_seconds, + microsecond=time_ms * 1000, + ) + print(f"Time Now: {dt}")