diff --git a/.idea/runConfigurations/tmtcclient_CLI.xml b/.idea/runConfigurations/tmtcclient_CLI.xml
index d24efcc..08531e2 100644
--- a/.idea/runConfigurations/tmtcclient_CLI.xml
+++ b/.idea/runConfigurations/tmtcclient_CLI.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/config/cmd_definitions.py b/config/cmd_definitions.py
index 589e581..d70a000 100644
--- a/config/cmd_definitions.py
+++ b/config/cmd_definitions.py
@@ -38,12 +38,50 @@ def add_bpx_cmd_definitions(cmd_dict: ServiceOpCodeDictT):
def add_core_controller_definitions(cmd_dict: ServiceOpCodeDictT):
+ from pus_tc.core import OpCodes
+
od = dict()
- add_op_code_entry(op_code_dict=od, keys=["0", "reboot"], info="Reboot with Prompt")
- add_op_code_entry(op_code_dict=od, keys=["1", "reboot_0_0"], info="Reboot 0 0")
- add_op_code_entry(op_code_dict=od, keys=["2", "reboot_0_1"], info="Reboot 0 1")
- add_op_code_entry(op_code_dict=od, keys=["3", "reboot_1_0"], info="Reboot 1 0")
- add_op_code_entry(op_code_dict=od, keys=["4", "reboot_1_1"], info="Reboot 1 1")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT, info="Reboot with Prompt")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_SELF, info="Reboot Self")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_0_0, info="Reboot 0 0")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_0_1, info="Reboot 0 1")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_1_0, info="Reboot 1 0")
+ add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_1_1, info="Reboot 1 1")
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.ENABLE_REBOOT_FILE_HANDLING,
+ info="Enable reboot file handling",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.DISABLE_REBOOT_FILE_HANDLING,
+ info="Disable reboot file handling",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.RESET_ALL_REBOOT_COUNTERS,
+ info="Reset all reboot counters",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.RESET_REBOOT_COUNTER_00,
+ info="Reset reboot counter 0 0",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.RESET_REBOOT_COUNTER_01,
+ info="Reset reboot counter 0 1",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.RESET_REBOOT_COUNTER_10,
+ info="Reset reboot counter 1 0",
+ )
+ add_op_code_entry(
+ op_code_dict=od,
+ keys=OpCodes.RESET_REBOOT_COUNTER_11,
+ info="Reset reboot counter 1 1",
+ )
add_service_op_code_entry(
srv_op_code_dict=cmd_dict,
name=CustomServiceList.CORE.value,
@@ -52,6 +90,63 @@ def add_core_controller_definitions(cmd_dict: ServiceOpCodeDictT):
)
+def add_pl_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
+ from pus_tc.plpcdu import OpCodes
+
+ op_code_dict = dict()
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.SWITCH_ADC_ON,
+ info="Switch PL PCDU ADC on",
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.SWITCH_ALL_ON,
+ info="Switch all PL PCDU modules on",
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.UPDATE_DRO_TO_X8_WAIT,
+ info="Update DRO to X8 wait time",
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_SSR_TO_DRO_FAILURE,
+ info="Inject failure SSR to DRO transition"
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_DRO_TO_X8_FAILURE,
+ info="Inject failure in DRO to X8 transition"
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_X8_TO_TX_FAILURE,
+ info="Inject failure in X8 to TX transition"
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_TX_TO_MPA_FAILURE,
+ info="Inject failure in TX to MPA transition"
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_MPA_TO_HPA_FAILURE,
+ info="Inject failure in MPA to HPA transition"
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.INJECT_ALL_ON_FAILURE,
+ info="Inject failure in all on mode"
+ )
+ add_service_op_code_entry(
+ srv_op_code_dict=cmd_dict,
+ name=CustomServiceList.PL_PCDU.value,
+ info="PL PCDU",
+ op_code_entry=op_code_dict,
+ )
+
+
def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
from pus_tc.p60dock import P60OpCodes, GomspaceOpCodes
from pus_tc.pdu1 import Pdu1OpCodes
@@ -237,3 +332,172 @@ def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
info="PDU2 Device",
op_code_entry=op_code_dict,
)
+
+
+def add_imtq_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_imtq = {
+ "0": ("IMTQ Tests All", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("IMTQ perform pos X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("IMTQ perform neg X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("IMTQ perform pos Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("IMTQ perform neg Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": ("IMTQ perform pos Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "6": ("IMTQ perform neg Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "7": ("IMTQ command dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "8": ("IMTQ get commanded dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_imtq_tuple = ("IMTQ Device", op_code_dict_srv_imtq)
+ cmd_dict[CustomServiceList.IMTQ.value] = service_imtq_tuple
+
+
+def add_rw_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_rw = {
+ "0": ("Reaction Wheel: Run all commands", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("Reaction Wheel: Set speed", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("Reaction Wheel: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("Reaction Wheel: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("Reaction Wheel: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": (
+ "Reaction Wheel: Send get-telemetry-command",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ }
+ service_rw_tuple = ("Reaction Wheel", op_code_dict_srv_rw)
+ cmd_dict[CustomServiceList.REACTION_WHEEL_1.value] = service_rw_tuple
+ cmd_dict[CustomServiceList.REACTION_WHEEL_2.value] = service_rw_tuple
+ cmd_dict[CustomServiceList.REACTION_WHEEL_3.value] = service_rw_tuple
+ cmd_dict[CustomServiceList.REACTION_WHEEL_4.value] = service_rw_tuple
+
+
+def add_rad_sens_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_rad_sensor = {
+ "0": ("Radiation Sensor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("Radiation Sensor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("Radiation Sensor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_rad_sensor_tuple = ("Radiation Sensor", op_code_dict_srv_rad_sensor)
+ cmd_dict[CustomServiceList.RAD_SENSOR.value] = service_rad_sensor_tuple
+
+
+def add_ploc_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_ploc_mem_dumper = {
+ "0": ("PLOC Memory Dumper: MRAM dump", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_ploc_memory_dumper_tuple = (
+ "PLOC Memory Dumper",
+ op_code_dict_ploc_mem_dumper,
+ )
+
+ op_code_dict_srv_ploc_supv = {
+ "0": ("PLOC Supervisor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("PLOC Supervisor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("PLOC Supervisor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("PLOC Supervisor: Get HK Report", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("PLOC Supervisor: Restart MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": ("PLOC Supervisor: Start MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "6": ("PLOC Supervisor: Shutdown MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "7": (
+ "PLOC Supervisor: Select MPSoC boot image",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "8": ("PLOC Supervisor: Set max restart tries", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "9": ("PLOC Supervisor: Reset MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "10": ("PLOC Supervisor: Set time reference", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "11": ("PLOC Supervisor: Set boot timeout", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "12": ("PLOC Supervisor: Disable Hk", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "13": (
+ "PLOC Supervisor: Request boot status report",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "14": ("PLOC Supervisor: Update available", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "15": ("PLOC Supervisor: Watchdogs enable", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "16": (
+ "PLOC Supervisor: Watchdog Configure Timeout",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "17": ("PLOC Supervisor: Enable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "18": ("PLOC Supervisor: Disable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "19": ("PLOC Supervisor: Auto calibrate alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "20": ("PLOC Supervisor: Set alert limit", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "21": ("PLOC Supervisor: Set alert irq filter", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "22": ("PLOC Supervisor: Set ADC sweep period", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "23": (
+ "PLOC Supervisor: Set ADC enabled channels",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "24": (
+ "PLOC Supervisor: Set ADC window and stride",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "25": ("PLOC Supervisor: Set ADC threshold", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "26": (
+ "PLOC Supervisor: Request latchup status report",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "27": ("PLOC Supervisor: Copy ADC data to MRAM", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "28": (
+ "PLOC Supervisor: Enable/Disable NVM0/1/3",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "29": ("PLOC Supervisor: Select NVM", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "30": ("PLOC Supervisor: Run auto EM tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "31": ("PLOC Supervisor: MRAM Wipe", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "33": ("PLOC Supervisor: Print CPU stats", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "34": ("PLOC Supervisor: Set debug verbosity", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "35": ("PLOC Supervisor: Set GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "36": ("PLOC Supervisor: Read GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "37": ("PLOC Supervisor: Restart supervisor", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "38": (
+ "PLOC Supervisor: Factory reset clear all",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "39": (
+ "PLOC Supervisor: Factory reset clear mirror entries",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "40": (
+ "PLOC Supervisor: Factory reset clear circular entries",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "41": ("PLOC Supervisor: CAN loopback test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_ploc_supv_tuple = ("PLOC Supervisor", op_code_dict_srv_ploc_supv)
+
+ op_code_dict_srv_ploc_updater = {
+ "0": (
+ "Ploc Updater: Update uboot on partition A",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "1": (
+ "Ploc Updater: Update bitstream on partition A",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "2": (
+ "Ploc Updater: Update linux on partition A",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "3": (
+ "Ploc Updater: Update application on partition A",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "4": (
+ "Ploc Updater: Update uboot on partition B",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "5": (
+ "Ploc Updater: Update bitstream on partition B",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "6": (
+ "Ploc Updater: Update linux on partition B",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "7": (
+ "Ploc Updater: Update application on partition B",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ }
+ service_ploc_updater_tuple = ("Ploc Updater", op_code_dict_srv_ploc_updater)
+ cmd_dict[CustomServiceList.PLOC_SUPV.value] = service_ploc_supv_tuple
+ cmd_dict[CustomServiceList.PLOC_UPDATER.value] = service_ploc_updater_tuple
+ cmd_dict[CustomServiceList.PLOC_MEMORY_DUMPER.value] = service_ploc_memory_dumper_tuple
diff --git a/config/definitions.py b/config/definitions.py
index 3a104aa..d1a2cdf 100644
--- a/config/definitions.py
+++ b/config/definitions.py
@@ -24,6 +24,7 @@ class CustomServiceList(enum.Enum):
IMTQ = "imtq"
PLOC = "ploc"
PCDU = "pcdu"
+ PL_PCDU = "plpcdu"
SA_DEPLYOMENT = "sa_depl"
REACTION_WHEEL_1 = "reaction_wheel_1"
REACTION_WHEEL_2 = "reaction_wheel_2"
diff --git a/config/hook_implementations.py b/config/hook_implementations.py
index cd730d3..775d937 100644
--- a/config/hook_implementations.py
+++ b/config/hook_implementations.py
@@ -114,11 +114,22 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
add_bpx_cmd_definitions,
add_core_controller_definitions,
add_pcdu_cmds,
+ add_pl_pcdu_cmds,
+ add_imtq_cmds,
+ add_rw_cmds,
+ add_rad_sens_cmds,
+ add_ploc_cmds,
)
from pus_tc.gps import GpsOpCodes
add_bpx_cmd_definitions(cmd_dict=service_op_code_dict)
add_core_controller_definitions(cmd_dict=service_op_code_dict)
+ add_pl_pcdu_cmds(cmd_dict=service_op_code_dict)
+ add_pcdu_cmds(cmd_dict=service_op_code_dict)
+ add_imtq_cmds(cmd_dict=service_op_code_dict)
+ add_rad_sens_cmds(cmd_dict=service_op_code_dict)
+ add_rw_cmds(cmd_dict=service_op_code_dict)
+ add_ploc_cmds(cmd_dict=service_op_code_dict)
op_code_dict = {
GpsOpCodes.RESET_GNSS.value: ("Reset GPS", {OpCodeDictKeys.TIMEOUT: 2.0})
@@ -142,165 +153,11 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
service_tuple = ("TMP1075 2", op_code_dict)
service_op_code_dict[CustomServiceList.TMP1075_2.value] = service_tuple
- add_pcdu_cmds(cmd_dict=service_op_code_dict)
-
op_code_dict_srv_heater = {
"0": ("Heater Tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
}
service_heater_tuple = ("Heater Device", op_code_dict_srv_heater)
- op_code_dict_srv_imtq = {
- "0": ("IMTQ Tests All", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("IMTQ perform pos X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("IMTQ perform neg X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("IMTQ perform pos Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("IMTQ perform neg Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("IMTQ perform pos Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("IMTQ perform neg Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": ("IMTQ command dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "8": ("IMTQ get commanded dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_imtq_tuple = ("IMTQ Device", op_code_dict_srv_imtq)
-
- op_code_dict_srv_rw = {
- "0": ("Reaction Wheel: Run all commands", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("Reaction Wheel: Set speed", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Reaction Wheel: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("Reaction Wheel: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("Reaction Wheel: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": (
- "Reaction Wheel: Send get-telemetry-command",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- }
- service_rw_tuple = ("Reaction Wheel", op_code_dict_srv_rw)
-
- op_code_dict_srv_rad_sensor = {
- "0": ("Radiation Sensor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("Radiation Sensor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Radiation Sensor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_rad_sensor_tuple = ("Radiation Sensor", op_code_dict_srv_rad_sensor)
-
- op_code_dict_ploc_mem_dumper = {
- "0": ("PLOC Memory Dumper: MRAM dump", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_ploc_memory_dumper_tuple = (
- "Radiation Sensor",
- op_code_dict_ploc_mem_dumper,
- )
-
- op_code_dict_srv_ploc_supv = {
- "0": ("PLOC Supervisor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("PLOC Supervisor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("PLOC Supervisor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("PLOC Supervisor: Get HK Report", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("PLOC Supervisor: Restart MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("PLOC Supervisor: Start MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("PLOC Supervisor: Shutdown MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": (
- "PLOC Supervisor: Select MPSoC boot image",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "8": ("PLOC Supervisor: Set max restart tries", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "9": ("PLOC Supervisor: Reset MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "10": ("PLOC Supervisor: Set time reference", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "11": ("PLOC Supervisor: Set boot timeout", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "12": ("PLOC Supervisor: Disable Hk", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "13": (
- "PLOC Supervisor: Request boot status report",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "14": ("PLOC Supervisor: Update available", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "15": ("PLOC Supervisor: Watchdogs enable", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "16": (
- "PLOC Supervisor: Watchdog Configure Timeout",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "17": ("PLOC Supervisor: Enable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "18": ("PLOC Supervisor: Disable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "19": ("PLOC Supervisor: Auto calibrate alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "20": ("PLOC Supervisor: Set alert limit", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "21": ("PLOC Supervisor: Set alert irq filter", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "22": ("PLOC Supervisor: Set ADC sweep period", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "23": (
- "PLOC Supervisor: Set ADC enabled channels",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "24": (
- "PLOC Supervisor: Set ADC window and stride",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "25": ("PLOC Supervisor: Set ADC threshold", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "26": (
- "PLOC Supervisor: Request latchup status report",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "27": ("PLOC Supervisor: Copy ADC data to MRAM", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "28": (
- "PLOC Supervisor: Enable/Disable NVM0/1/3",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "29": ("PLOC Supervisor: Select NVM", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "30": ("PLOC Supervisor: Run auto EM tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "31": ("PLOC Supervisor: MRAM Wipe", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "33": ("PLOC Supervisor: Print CPU stats", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "34": ("PLOC Supervisor: Set debug verbosity", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "35": ("PLOC Supervisor: Set GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "36": ("PLOC Supervisor: Read GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "37": ("PLOC Supervisor: Restart supervisor", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "38": (
- "PLOC Supervisor: Factory reset clear all",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "39": (
- "PLOC Supervisor: Factory reset clear mirror entries",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "40": (
- "PLOC Supervisor: Factory reset clear circular entries",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "41": ("PLOC Supervisor: CAN loopback test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_ploc_supv_tuple = ("PLOC Supervisor", op_code_dict_srv_ploc_supv)
-
- op_code_dict_srv_ploc_updater = {
- "0": (
- "Ploc Updater: Update uboot on partition A",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "1": (
- "Ploc Updater: Update bitstream on partition A",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "2": (
- "Ploc Updater: Update linux on partition A",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "3": (
- "Ploc Updater: Update application on partition A",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "4": (
- "Ploc Updater: Update uboot on partition B",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "5": (
- "Ploc Updater: Update bitstream on partition B",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "6": (
- "Ploc Updater: Update linux on partition B",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "7": (
- "Ploc Updater: Update application on partition B",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- }
- service_ploc_updater_tuple = ("Ploc Updater", op_code_dict_srv_ploc_updater)
-
op_code_dict_srv_star_tracker = {
"0": (
"Star Tracker: Mode On, Submode Bootloader",
@@ -424,8 +281,14 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
{OpCodeDictKeys.TIMEOUT: 2.0},
),
"69": ("Star Tracker: Firmware update", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "70": ("Star Tracker: Disable timestamp generation", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "71": ("Star Tracker: Enable timestamp generation", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "70": (
+ "Star Tracker: Disable timestamp generation",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "71": (
+ "Star Tracker: Enable timestamp generation",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
}
service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker)
@@ -480,22 +343,9 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
op_code_dict_srv_syrlinks_handler,
)
service_op_code_dict[CustomServiceList.HEATER.value] = service_heater_tuple
- service_op_code_dict[CustomServiceList.IMTQ.value] = service_imtq_tuple
- service_op_code_dict[CustomServiceList.REACTION_WHEEL_1.value] = service_rw_tuple
- service_op_code_dict[CustomServiceList.REACTION_WHEEL_2.value] = service_rw_tuple
- service_op_code_dict[CustomServiceList.REACTION_WHEEL_3.value] = service_rw_tuple
- service_op_code_dict[CustomServiceList.REACTION_WHEEL_4.value] = service_rw_tuple
- service_op_code_dict[CustomServiceList.RAD_SENSOR.value] = service_rad_sensor_tuple
- service_op_code_dict[CustomServiceList.PLOC_SUPV.value] = service_ploc_supv_tuple
- service_op_code_dict[
- CustomServiceList.PLOC_UPDATER.value
- ] = service_ploc_updater_tuple
service_op_code_dict[
CustomServiceList.STAR_TRACKER.value
] = service_star_tracker_tuple
- service_op_code_dict[
- CustomServiceList.PLOC_MEMORY_DUMPER.value
- ] = service_ploc_memory_dumper_tuple
service_op_code_dict[
CustomServiceList.CCSDS_HANDLER.value
] = service_ccsds_handler_tuple
diff --git a/config/object_ids.py b/config/object_ids.py
index 2bbe62d..63e9732 100644
--- a/config/object_ids.py
+++ b/config/object_ids.py
@@ -56,6 +56,7 @@ PLOC_UPDATER_ID = bytes([0x44, 0x33, 0x00, 0x00])
PLOC_MEMORY_DUMPER_ID = bytes([0x44, 0x33, 0x00, 0x01])
STR_IMG_HELPER_ID = bytes([0x44, 0x33, 0x00, 0x02])
PLOC_MPSOC_ID = bytes([0x44, 0x33, 0x00, 0x15])
+PL_PCDU_ID = bytes([0x44, 0x30, 0x00, 0x00])
def get_object_ids() -> Dict[bytes, list]:
diff --git a/pus_tc/core.py b/pus_tc/core.py
index a30d528..338337b 100644
--- a/pus_tc/core.py
+++ b/pus_tc/core.py
@@ -10,16 +10,32 @@ LOGGER = get_console_logger()
class ActionIds(enum.IntEnum):
+ LIST_DIR_INTO_FILE = 0
+ SWITCH_REBOOT_FILE_HANDLING = 5
+ RESET_ALL_REBOOT_COUNTERS = 6
+ RESET_REBOOT_COUNTER_00 = 7
+ RESET_REBOOT_COUNTER_01 = 8
+ RESET_REBOOT_COUNTER_10 = 9
+ RESET_REBOOT_COUNTER_11 = 10
+ SET_MAX_REBOOT_CNT = 11
REBOOT = 32
-class OpCodes(enum.Enum):
- REBOOT = "reboot"
- REBOOT_SELF = "reboot_self"
- REBOOT_0_0 = "reboot_0_0"
- REBOOT_0_1 = "reboot_0_1"
- REBOOT_1_0 = "reboot_1_0"
- REBOOT_1_1 = "reboot_1_1"
+class OpCodes:
+ REBOOT = ["0", "reboot"]
+ REBOOT_SELF = ["1", "reboot_self"]
+ REBOOT_0_0 = ["2", "reboot_0_0"]
+ REBOOT_0_1 = ["3", "reboot_0_1"]
+ REBOOT_1_0 = ["4", "reboot_1_0"]
+ REBOOT_1_1 = ["5", "reboot_1_1"]
+ ENABLE_REBOOT_FILE_HANDLING = ["6", "rbh-off"]
+ DISABLE_REBOOT_FILE_HANDLING = ["7", "rbh-on"]
+ RESET_ALL_REBOOT_COUNTERS = ["8", "rbh-reset-a"]
+ RESET_REBOOT_COUNTER_00 = ["9", "rbh-reset-00"]
+ RESET_REBOOT_COUNTER_01 = ["10", "rbh-reset-01"]
+ RESET_REBOOT_COUNTER_10 = ["11", "rbh-reset-10"]
+ RESET_REBOOT_COUNTER_11 = ["12", "rbh-reset-11"]
+ SET_MAX_REBOOT_CNT = ["13", "rbh-max-cnt"]
class Chip(enum.IntEnum):
@@ -35,7 +51,7 @@ class Copy(enum.IntEnum):
def pack_core_commands(tc_queue: TcQueueT, op_code: str):
- if op_code == OpCodes.REBOOT.value:
+ if op_code in OpCodes.REBOOT:
reboot_self, chip_select, copy_select = determine_reboot_params()
perform_reboot_cmd(
tc_queue=tc_queue,
@@ -43,30 +59,71 @@ def pack_core_commands(tc_queue: TcQueueT, op_code: str):
chip=chip_select,
copy=copy_select,
)
- elif op_code == OpCodes.REBOOT_SELF.value:
+ elif op_code in OpCodes.REBOOT_SELF:
perform_reboot_cmd(tc_queue=tc_queue, reboot_self=True)
- elif op_code == OpCodes.REBOOT_0_0.value:
+ elif op_code in OpCodes.REBOOT_0_0:
perform_reboot_cmd(
tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
)
- elif op_code == OpCodes.REBOOT_0_1.value:
+ elif op_code in OpCodes.REBOOT_0_1:
perform_reboot_cmd(
tc_queue=tc_queue,
reboot_self=False,
chip=Chip.CHIP_0,
copy=Copy.COPY_1_GOLD,
)
- elif op_code == OpCodes.REBOOT_1_0.value:
+ elif op_code in OpCodes.REBOOT_1_0:
perform_reboot_cmd(
tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
)
- elif op_code == OpCodes.REBOOT_1_1.value:
+ elif op_code in OpCodes.REBOOT_1_1:
perform_reboot_cmd(
tc_queue=tc_queue,
reboot_self=False,
chip=Chip.CHIP_1,
copy=Copy.COPY_1_GOLD,
)
+ elif op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING:
+ tc_queue.appendleft((QueueCommands.PRINT, "Disabling reboot file handling"))
+ app_data = bytearray([0])
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID,
+ action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
+ app_data=app_data,
+ )
+ elif op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING:
+ tc_queue.appendleft((QueueCommands.PRINT, "Enabling reboot file handling"))
+ app_data = bytearray([1])
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID,
+ action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
+ app_data=app_data,
+ )
+ elif op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS:
+ tc_queue.appendleft((QueueCommands.PRINT, "Resetting all reboot counters"))
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_ALL_REBOOT_COUNTERS
+ )
+ elif op_code in OpCodes.RESET_REBOOT_COUNTER_00:
+ tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 0 0"))
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_00
+ )
+ elif op_code in OpCodes.RESET_REBOOT_COUNTER_01:
+ tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 0 1"))
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_01
+ )
+ elif op_code in OpCodes.RESET_REBOOT_COUNTER_10:
+ tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 1 0"))
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_10
+ )
+ elif op_code in OpCodes.RESET_REBOOT_COUNTER_11:
+ tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 1 1"))
+ generate_action_command(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_11
+ )
def determine_reboot_params() -> (bool, Chip, Copy):
diff --git a/pus_tc/plpcdu.py b/pus_tc/plpcdu.py
new file mode 100644
index 0000000..950eb2f
--- /dev/null
+++ b/pus_tc/plpcdu.py
@@ -0,0 +1,171 @@
+import enum
+from typing import Optional
+
+from tmtccmd.config import QueueCommands
+from tmtccmd.tc.definitions import TcQueueT
+from tmtccmd.tc.service_200_mode import pack_mode_data, Modes, Subservices
+from tmtccmd.tc.service_20_parameter import (
+ pack_scalar_double_param_app_data,
+ pack_fsfw_load_param_cmd,
+ pack_boolean_parameter_app_data
+)
+from tmtccmd.utility.logger import get_console_logger
+from spacepackets.ecss.tc import PusTelecommand
+from config.object_ids import PL_PCDU_ID
+
+LOGGER = get_console_logger()
+
+
+class OpCodes:
+ SWITCH_ADC_ON = ["0", "switch-adc-on"]
+ SWITCH_ALL_ON = ["1", "switch-all-on"]
+ UPDATE_DRO_TO_X8_WAIT = ["2", "dro-to-x8-wait"]
+ UPDATE_X8_TO_TX_WAIT_TIME = ["3", "x8-to-tx-wait"]
+ UPDATE_TX_TO_MPA_WAIT_TIME = ["4", "tx-to-mpa-wait"]
+ UPDATE_MPA_TO_HPA_WAIT_TIME = ["5", "mpa-to-hpa-wait"]
+
+ INJECT_SSR_TO_DRO_FAILURE = ["6", "inject-ssr-dro-fault"]
+ INJECT_DRO_TO_X8_FAILURE = ["7", "inject-dro-x8-fault"]
+ INJECT_X8_TO_TX_FAILURE = ["8", "inject-x8-tx-fault"]
+ INJECT_TX_TO_MPA_FAILURE = ["9", "inject-tx-mpa-fault"]
+ INJECT_MPA_TO_HPA_FAILURE = ["10", "inject-mpa-hpa-fault"]
+ INJECT_ALL_ON_FAILURE = ["11", "inject-all-on-fault"]
+
+
+class Submodes(enum.IntEnum):
+ ADC_ON = 0
+ ALL_ON = 1
+
+
+class ParamIds(enum.IntEnum):
+ NEG_V_LOWER_BOUND = 0
+ NEG_V_UPPER_BOUND = 1
+
+ DRO_U_LOWER_BOUND = 2
+ DRO_U_UPPER_BOUND = 3
+ DRO_I_UPPER_BOUND = 4
+
+ X8_U_LOWER_BOUND = 5
+ X8_U_UPPER_BOUND = 6
+ X8_I_UPPER_BOUND = 7
+
+ TX_U_LOWER_BOUND = 8
+ TX_U_UPPER_BOUND = 9
+ TX_I_UPPER_BOUND = 10
+
+ MPA_U_LOWER_BOUND = 11
+ MPA_U_UPPER_BOUND = 12
+ MPA_I_UPPER_BOUND = 13
+
+ HPA_U_LOWER_BOUND = 14
+ HPA_U_UPPER_BOUND = 15
+ HPA_I_UPPER_BOUND = 16
+
+ SSR_TO_DRO_WAIT_TIME = 17
+ DRO_TO_X8_WAIT_TIME = 18
+ X8_TO_TX_WAIT_TIME = 19
+ TX_TO_MPA_WAIT_TIME = 20
+ MPA_TO_HPA_WAIT_TIME = 21
+
+ INJECT_SSR_TO_DRO_FAILURE = 30
+ INJECT_DRO_TO_X8_FAILURE = 31
+ INJECT_X8_TO_TX_FAILURE = 32
+ INJECT_TX_TO_MPA_FAILURE = 33
+ INJECT_MPA_TO_HPA_FAILURE = 34
+ INJECT_ALL_ON_FAILURE = 35
+
+
+def pack_pl_pcdu_commands(tc_queue: TcQueueT, op_code: str):
+ if op_code in OpCodes.SWITCH_ADC_ON:
+ tc_queue.appendleft((QueueCommands.PRINT, "Switching PL PCDU ADC module on"))
+ mode_data = pack_mode_data(
+ object_id=PL_PCDU_ID, mode=Modes.NORMAL, submode=Submodes.ADC_ON
+ )
+ mode_cmd = PusTelecommand(
+ service=200, subservice=Subservices.SWITCH_MODE, app_data=mode_data
+ )
+ tc_queue.appendleft(mode_cmd.pack_command_tuple())
+ if op_code in OpCodes.SWITCH_ALL_ON:
+ tc_queue.appendleft((QueueCommands.PRINT, "Switching all PL PCDU modules on"))
+ mode_data = pack_mode_data(
+ object_id=PL_PCDU_ID, mode=Modes.NORMAL, submode=Submodes.ALL_ON
+ )
+ mode_cmd = PusTelecommand(
+ service=200, subservice=Subservices.SWITCH_MODE, app_data=mode_data
+ )
+ tc_queue.appendleft(mode_cmd.pack_command_tuple())
+ if op_code in OpCodes.UPDATE_DRO_TO_X8_WAIT:
+ pack_wait_time_cmd(
+ tc_queue=tc_queue,
+ param_id=ParamIds.DRO_TO_X8_WAIT_TIME,
+ print_str="DRO to X8",
+ )
+ if op_code in OpCodes.UPDATE_X8_TO_TX_WAIT_TIME:
+ pack_wait_time_cmd(
+ tc_queue=tc_queue,
+ param_id=ParamIds.X8_TO_TX_WAIT_TIME,
+ print_str="X8 to TX",
+ )
+ if op_code in OpCodes.UPDATE_TX_TO_MPA_WAIT_TIME:
+ pack_wait_time_cmd(
+ tc_queue=tc_queue,
+ param_id=ParamIds.TX_TO_MPA_WAIT_TIME,
+ print_str="TX to MPA",
+ )
+ if op_code in OpCodes.UPDATE_MPA_TO_HPA_WAIT_TIME:
+ pack_wait_time_cmd(
+ tc_queue=tc_queue,
+ param_id=ParamIds.MPA_TO_HPA_WAIT_TIME,
+ print_str="MPA to HPA",
+ )
+ if op_code in OpCodes.INJECT_ALL_ON_FAILURE:
+ pack_failure_injection_cmd(
+ tc_queue=tc_queue,
+ param_id=ParamIds.INJECT_ALL_ON_FAILURE,
+ print_str="All On"
+ )
+
+
+def request_wait_time() -> Optional[float]:
+ while True:
+ wait_time = input("Please enter DRO to X8 wait time in seconds, x to cancel: ")
+ if wait_time.lower() == "x":
+ return None
+ try:
+ wait_time = float(wait_time)
+ except ValueError:
+ LOGGER.warning("Invalid input")
+ continue
+ if wait_time <= 0:
+ LOGGER.warning("Invalid input")
+ else:
+ return wait_time
+
+
+def pack_wait_time_cmd(tc_queue: TcQueueT, param_id: int, print_str: str):
+ wait_time = request_wait_time()
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, f"Updating {print_str} wait time to {wait_time}")
+ )
+ if wait_time is None:
+ return
+ param_data = pack_scalar_double_param_app_data(
+ object_id=PL_PCDU_ID,
+ domain_id=0,
+ unique_id=param_id,
+ parameter=wait_time,
+ )
+ cmd = pack_fsfw_load_param_cmd(ssc=0, app_data=param_data)
+ tc_queue.appendleft(cmd.pack_command_tuple())
+
+
+def pack_failure_injection_cmd(tc_queue: TcQueueT, param_id: int, print_str: str):
+ tc_queue.appendleft((QueueCommands.PRINT, f"Inserting {print_str} error"))
+ param_data = pack_boolean_parameter_app_data(
+ object_id=PL_PCDU_ID,
+ domain_id=0,
+ unique_id=param_id,
+ parameter=True
+ )
+ cmd = pack_fsfw_load_param_cmd(ssc=0, app_data=param_data)
+ tc_queue.appendleft(cmd.pack_command_tuple())
diff --git a/pus_tc/tc_packer_hook.py b/pus_tc/tc_packer_hook.py
index 0989deb..40a2fb7 100644
--- a/pus_tc/tc_packer_hook.py
+++ b/pus_tc/tc_packer_hook.py
@@ -31,6 +31,7 @@ from pus_tc.star_tracker import pack_star_tracker_commands
from pus_tc.syrlinks_hk_handler import pack_syrlinks_command
from pus_tc.gps import pack_gps_command
from pus_tc.acs import pack_acs_command
+from pus_tc.plpcdu import pack_pl_pcdu_commands
from pus_tc.str_img_helper import pack_str_img_helper_command
from config.definitions import CustomServiceList
from config.object_ids import (
@@ -192,6 +193,8 @@ def pack_service_queue_user(
return pack_syrlinks_command(
object_id=SYRLINKS_HANDLER_ID, tc_queue=service_queue, op_code=op_code
)
+ if service == CustomServiceList.PL_PCDU.value:
+ return pack_pl_pcdu_commands(tc_queue=service_queue, op_code=op_code)
LOGGER.warning("Invalid Service !")
diff --git a/pus_tm/factory_hook.py b/pus_tm/factory_hook.py
index 7826b66..5a2de0f 100644
--- a/pus_tm/factory_hook.py
+++ b/pus_tm/factory_hook.py
@@ -3,15 +3,16 @@
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
it to your needs.
"""
-from tmtccmd.tm.service_8_functional_cmd import Service8TM
+from tmtccmd.tm.service_8_fsfw_functional_cmd import Service8FsfwTm
from spacepackets.ecss.tm import PusTelemetry
from tmtccmd.utility.logger import get_console_logger
from tmtccmd.pus.service_1_verification import Service1TMExtended
from tmtccmd.pus.service_17_test import Service17TMExtended
-from tmtccmd.tm.service_3_housekeeping import Service3TM
-from tmtccmd.tm.service_5_event import Service5TM
-from tmtccmd.tm.service_200_mode import Service200TM
+from tmtccmd.tm.service_3_fsfw_housekeeping import Service3FsfwTm
+from tmtccmd.tm.service_20_fsfw_parameters import Service20FsfwTm
+from tmtccmd.tm.service_5_event import Service5Tm
+from tmtccmd.tm.service_200_mode import Service200Tm
from tmtccmd.utility.tmtc_printer import TmTcPrinter, PrintFormats
from config.definitions import PUS_APID
@@ -36,17 +37,19 @@ def pus_factory_hook(raw_tm_packet: bytearray, tmtc_printer: TmTcPrinter):
if service_type == 1:
tm_packet = Service1TMExtended.unpack(raw_telemetry=raw_tm_packet)
if service_type == 3:
- tm_packet = Service3TM.unpack(
+ tm_packet = Service3FsfwTm.unpack(
raw_telemetry=raw_tm_packet, custom_hk_handling=False
)
if service_type == 5:
- tm_packet = Service5TM.unpack(raw_telemetry=raw_tm_packet)
+ tm_packet = Service5Tm.unpack(raw_telemetry=raw_tm_packet)
if service_type == 8:
- tm_packet = Service8TM.unpack(raw_telemetry=raw_tm_packet)
+ tm_packet = Service8FsfwTm.unpack(raw_telemetry=raw_tm_packet)
if service_type == 17:
tm_packet = Service17TMExtended.unpack(raw_telemetry=raw_tm_packet)
+ if service_type == 20:
+ tm_packet = Service20FsfwTm.unpack(raw_telemetry=raw_tm_packet)
if service_type == 200:
- tm_packet = Service200TM.unpack(raw_telemetry=raw_tm_packet)
+ tm_packet = Service200Tm.unpack(raw_telemetry=raw_tm_packet)
if tm_packet is None:
LOGGER.info(
f"The service {service_type} is not implemented in Telemetry Factory"
diff --git a/pus_tm/hk_handling.py b/pus_tm/hk_handling.py
index 311a7eb..6cac660 100644
--- a/pus_tm/hk_handling.py
+++ b/pus_tm/hk_handling.py
@@ -4,7 +4,7 @@ import os
import datetime
from tmtccmd.config.definitions import HkReplyUnpacked
-from tmtccmd.tm.service_3_housekeeping import Service3Base
+from tmtccmd.tm.service_3_fsfw_housekeeping import Service3Base
from tmtccmd.utility.logger import get_console_logger
from pus_tc.bpx_batt import BpxSetIds
from pus_tc.syrlinks_hk_handler import SetIds
@@ -282,6 +282,8 @@ def handle_gps_data(hk_data: bytearray) -> HkReplyUnpacked:
f"{datetime.datetime.now()}, {latitude}, {longitude}, {altitude}, "
f"{fix_mode}, {sat_in_use}, {date_string}, {unix_seconds}\n"
)
+ reply.header_list = header_array
+ reply.content_list = content_array
reply.validity_buffer = hk_data[37:39]
return reply
diff --git a/requirements.txt b/requirements.txt
index 4545207..c634e6a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1 +1 @@
-tmtccmd>=1.11.0
+tmtccmd>=1.12.0
diff --git a/spacepackets b/spacepackets
index 0039a0e..19e8a58 160000
--- a/spacepackets
+++ b/spacepackets
@@ -1 +1 @@
-Subproject commit 0039a0ec67217765b9dabfbc35dcb34b6ff81c08
+Subproject commit 19e8a588fa0723a5991f80bb2fd52dfc64f0ac64
diff --git a/tmtccmd b/tmtccmd
index 49cf288..81a8843 160000
--- a/tmtccmd
+++ b/tmtccmd
@@ -1 +1 @@
-Subproject commit 49cf288831216c0680aedab88e31d684ba5b8da8
+Subproject commit 81a88435a52c8115a9f4349e307b252ebb2ebb85