From 973bdeadd61a91141fd1fa5771e06ddae8263194 Mon Sep 17 00:00:00 2001 From: Markus Kranz Date: Wed, 18 May 2022 18:39:18 +0200 Subject: [PATCH 1/4] proc service added --- config/definitions.py | 1 + config/hook_implementations.py | 2 ++ pus_tc/cmd_definitions.py | 16 ++++++++++++++++ pus_tc/system/proc.py | 24 ++++++++++++++++++++++++ pus_tc/tc_packer_hook.py | 3 +++ tmtc_conf.json | 6 ++++++ 6 files changed, 52 insertions(+) create mode 100644 pus_tc/system/proc.py create mode 100644 tmtc_conf.json diff --git a/config/definitions.py b/config/definitions.py index 80a7ddb..20aa498 100644 --- a/config/definitions.py +++ b/config/definitions.py @@ -46,3 +46,4 @@ class CustomServiceList(enum.Enum): SUS_ASS = "sus-ass" TCS_ASS = "tcs-ass" TIME = "time" + PROCEDURE = "proc" diff --git a/config/hook_implementations.py b/config/hook_implementations.py index 9f50c1f..400672e 100644 --- a/config/hook_implementations.py +++ b/config/hook_implementations.py @@ -71,6 +71,7 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT): add_ploc_supv_cmds, add_system_cmds, add_time_cmds, + add_proc_cmds, ) from pus_tc.devs.gps import GpsOpCodes @@ -85,6 +86,7 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT): add_ploc_supv_cmds(cmd_dict=service_op_code_dict) add_system_cmds(cmd_dict=service_op_code_dict) add_time_cmds(cmd_dict=service_op_code_dict) + add_proc_cmds(cmd_dict=service_op_code_dict) op_code_dict = { GpsOpCodes.RESET_GNSS.value: ("Reset GPS", {OpCodeDictKeys.TIMEOUT: 2.0}) diff --git a/pus_tc/cmd_definitions.py b/pus_tc/cmd_definitions.py index 37e4a8e..a9e4387 100644 --- a/pus_tc/cmd_definitions.py +++ b/pus_tc/cmd_definitions.py @@ -685,6 +685,22 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT): ] = service_ploc_memory_dumper_tuple +def add_proc_cmds(cmd_dict: ServiceOpCodeDictT): + from pus_tc.system.proc import OpCodes, Info + op_code_dict = dict() + add_op_code_entry( + op_code_dict=op_code_dict, + keys=OpCodes.HEATER, + info=Info.HEATER + ) + add_service_op_code_entry( + srv_op_code_dict=cmd_dict, + name=CustomServiceList.PROCEDURE.value, + info="Procedures", + op_code_entry=op_code_dict, + ) + + def add_system_cmds(cmd_dict: ServiceOpCodeDictT): from pus_tc.system.acs import AcsOpCodes, SusOpCodes import pus_tc.system.tcs as tcs diff --git a/pus_tc/system/proc.py b/pus_tc/system/proc.py new file mode 100644 index 0000000..0544df0 --- /dev/null +++ b/pus_tc/system/proc.py @@ -0,0 +1,24 @@ +from tmtccmd.config import QueueCommands +from tmtccmd.tc.definitions import TcQueueT + + +class OpCodes: + HEATER = ["0", "heater"] + + +class Info: + HEATER = "heater procedure" + + +def pack_proc_commands(tc_queue: TcQueueT, op_code: str): + testint = 10 + print(f"hello world{op_code} {testint}") + if op_code in OpCodes.HEATER: + tc_queue.appendleft((QueueCommands.PRINT, "TUrning heater 0 on")) + tc_queue.appendleft(heater1cmd_on.pack_command_tuple()) + tc_queue.appendleft((QueueCommands.PRINT, "TUrning heater 0 off")) + tc_queue.appendleft(heater1cmd_off.pack_command_tuple()) + tc_queue.appendleft(heater1cmd.pack_command_tuple()) + tc_queue.appendleft(heater1cmd.pack_command_tuple()) + + pass diff --git a/pus_tc/tc_packer_hook.py b/pus_tc/tc_packer_hook.py index 420a768..cb370cb 100644 --- a/pus_tc/tc_packer_hook.py +++ b/pus_tc/tc_packer_hook.py @@ -41,6 +41,7 @@ from pus_tc.system.acs import pack_acs_command, pack_sus_cmds from pus_tc.devs.plpcdu import pack_pl_pcdu_commands from pus_tc.devs.str_img_helper import pack_str_img_helper_command from pus_tc.system.tcs import pack_tcs_sys_commands +from pus_tc.system.proc import pack_proc_commands from config.definitions import CustomServiceList from config.object_ids import ( P60_DOCK_HANDLER, @@ -223,6 +224,8 @@ def pack_service_queue_user( return pack_solar_array_deployment_test_into( object_id=SOLAR_ARRAY_DEPLOYMENT_ID, tc_queue=service_queue ) + if service == CustomServiceList.PROCEDURE.value: + return pack_proc_commands(tc_queue=service_queue, op_code=op_code) if service == CustomServiceList.SUS_ASS.value: return pack_sus_cmds(tc_queue=service_queue, op_code=op_code) if service == CustomServiceList.PL_PCDU.value: diff --git a/tmtc_conf.json b/tmtc_conf.json new file mode 100644 index 0000000..e7b49d5 --- /dev/null +++ b/tmtc_conf.json @@ -0,0 +1,6 @@ +{ + "com_if": "dummy", + "tcpip_tcp_ip_addr": "127.0.0.1", + "tcpip_tcp_port": 1536, + "tcpip_tcp_recv_max_size": 1500 +} \ No newline at end of file From 817a89370a3189b79555104099642c08dab05cfe Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 18 May 2022 20:00:59 +0200 Subject: [PATCH 2/4] add battery tv test procedure --- config/definitions.py | 1 + pus_tc/cmd_definitions.py | 15 ++++++++++----- pus_tc/system/proc.py | 38 ++++++++++++++++++++++++++++---------- tmtc_conf.json | 6 ------ tmtccmd | 2 +- 5 files changed, 40 insertions(+), 22 deletions(-) delete mode 100644 tmtc_conf.json diff --git a/config/definitions.py b/config/definitions.py index 0445033..8f8507d 100644 --- a/config/definitions.py +++ b/config/definitions.py @@ -48,3 +48,4 @@ class CustomServiceList(enum.Enum): TCS_ASS = "tcs-ass" TIME = "time" PROCEDURE = "proc" + TVTTESTPROCEDURE = "tvtestproc" diff --git a/pus_tc/cmd_definitions.py b/pus_tc/cmd_definitions.py index ad4c3f3..8ca7c03 100644 --- a/pus_tc/cmd_definitions.py +++ b/pus_tc/cmd_definitions.py @@ -949,18 +949,23 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT): def add_proc_cmds(cmd_dict: ServiceOpCodeDictT): from pus_tc.system.proc import OpCodes, Info + op_code_dict = dict() - add_op_code_entry( - op_code_dict=op_code_dict, - keys=OpCodes.HEATER, - info=Info.HEATER - ) + add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.HEATER, info=Info.HEATER) add_service_op_code_entry( srv_op_code_dict=cmd_dict, name=CustomServiceList.PROCEDURE.value, info="Procedures", op_code_entry=op_code_dict, ) + op_code_dict = dict() + add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.BAT_FT, info=Info.BAT_FT) + add_service_op_code_entry( + srv_op_code_dict=cmd_dict, + name=CustomServiceList.PROCEDURE.value, + info="TV Test Procedures", + op_code_entry=op_code_dict, + ) def add_system_cmds(cmd_dict: ServiceOpCodeDictT): diff --git a/pus_tc/system/proc.py b/pus_tc/system/proc.py index 0544df0..0893469 100644 --- a/pus_tc/system/proc.py +++ b/pus_tc/system/proc.py @@ -1,24 +1,42 @@ from tmtccmd.config import QueueCommands from tmtccmd.tc.definitions import TcQueueT +from tmtccmd.tc.pus_3_fsfw_hk import * +from config.object_ids import BPX_HANDLER_ID +from pus_tc.devs.bpx_batt import BpxSetIds class OpCodes: HEATER = ["0", "heater"] + BAT_FT = ["bat-ft"] class Info: HEATER = "heater procedure" + BAT_FT = "battery functional test" def pack_proc_commands(tc_queue: TcQueueT, op_code: str): - testint = 10 - print(f"hello world{op_code} {testint}") - if op_code in OpCodes.HEATER: - tc_queue.appendleft((QueueCommands.PRINT, "TUrning heater 0 on")) - tc_queue.appendleft(heater1cmd_on.pack_command_tuple()) - tc_queue.appendleft((QueueCommands.PRINT, "TUrning heater 0 off")) - tc_queue.appendleft(heater1cmd_off.pack_command_tuple()) - tc_queue.appendleft(heater1cmd.pack_command_tuple()) - tc_queue.appendleft(heater1cmd.pack_command_tuple()) - + if op_code in OpCodes.BAT_FT: + tc_queue.appendleft( + ( + QueueCommands.PRINT, + f"Executing Battery functional test Procedure ({OpCodes.BAT_FT})", + ) + ) + tc_queue.appendleft((QueueCommands.PRINT, f"Enabling periodic HK for Battery")) + cmd_tuple = enable_periodic_hk_command_with_interval( + diag=False, + sid=make_sid(BPX_HANDLER_ID, BpxSetIds.GET_HK_SET), + interval_seconds=10.0, + ssc=0, + ) + for cmd in cmd_tuple: + tc_queue.appendleft(cmd.pack_command_tuple()) + tc_queue.appendleft((QueueCommands.WAIT, 120.0)) + tc_queue.appendleft((QueueCommands.PRINT, "Disabling periodic HK for Battery")) + tc_queue.appendleft( + disable_periodic_hk_command( + diag=False, sid=make_sid(BPX_HANDLER_ID, BpxSetIds.GET_HK_SET), ssc=0 + ).pack_command_tuple() + ) pass diff --git a/tmtc_conf.json b/tmtc_conf.json deleted file mode 100644 index e7b49d5..0000000 --- a/tmtc_conf.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "com_if": "dummy", - "tcpip_tcp_ip_addr": "127.0.0.1", - "tcpip_tcp_port": 1536, - "tcpip_tcp_recv_max_size": 1500 -} \ No newline at end of file diff --git a/tmtccmd b/tmtccmd index e81e6db..4433284 160000 --- a/tmtccmd +++ b/tmtccmd @@ -1 +1 @@ -Subproject commit e81e6dbd594c1cdf51cd355a724cbd267d9dee38 +Subproject commit 443328422a03395bd51d072d3360de3397e1d88b From 9bd0783c573b3a59dfdb1a2f838924b226e5ff4a Mon Sep 17 00:00:00 2001 From: Markus Kranz Date: Thu, 19 May 2022 11:01:11 +0200 Subject: [PATCH 3/4] deleted bakcup files --- config/definitions_BACKUP_10148.py | 55 ------------------------------ config/definitions_BASE_10148.py | 49 -------------------------- config/definitions_LOCAL_10148.py | 51 --------------------------- config/definitions_REMOTE_10148.py | 50 --------------------------- 4 files changed, 205 deletions(-) delete mode 100644 config/definitions_BACKUP_10148.py delete mode 100644 config/definitions_BASE_10148.py delete mode 100644 config/definitions_LOCAL_10148.py delete mode 100644 config/definitions_REMOTE_10148.py diff --git a/config/definitions_BACKUP_10148.py b/config/definitions_BACKUP_10148.py deleted file mode 100644 index 6109c67..0000000 --- a/config/definitions_BACKUP_10148.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -@brief This file transfers control of the custom definitions like modes to the user. -@details Template configuration file. Copy this folder to the TMTC commander root and adapt - it to your needs. -""" - -import enum - - -PUS_APID = 0x65 -SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,) - - -class CustomServiceList(enum.Enum): - TEST_DEVICE = "test" - P60DOCK = "p60dock" - PDU1 = "pdu1" - PDU2 = "pdu2" - ACU = "acu" - ACS = "acs" - BPX_BATTERY = "bpx" - TMP1075_1 = "tmp1075_1" - TMP1075_2 = "tmp1075_2" - HEATER = "heater" - IMTQ = "imtq" - PLOC_SUPV = "ploc_supv" - PLOC_MPSOC = "ploc_mpsoc" - PCDU = "pcdu" - PL_PCDU = "plpcdu" - SA_DEPLYOMENT = "sa_depl" - REACTION_WHEEL_1 = "rw-1" - REACTION_WHEEL_2 = "rw-2" - REACTION_WHEEL_3 = "rw-3" - REACTION_WHEEL_4 = "rw-4" - RW_ASSEMBLY = "rw-ass" - RAD_SENSOR = "rad_sensor" - GPS_0 = "gps0" - GPS_1 = "gps1" - PLOC_MEMORY_DUMPER = "ploc_memory_dumper" - CORE = "core" - STAR_TRACKER = "star_tracker" - CCSDS_HANDLER = "ccsds_handler" - PDEC_HANDLER = "pdec_handler" - STR_IMG_HELPER = "str_img_helper" - SYRLINKS = "syrlinks" - ACS_ASS = "acs-ass" - SUS_ASS = "sus-ass" - TCS_ASS = "tcs-ass" - TIME = "time" -<<<<<<< HEAD - PROCEDURE = "proc" - TVTTESTPROCEDURE = "tvtestproc" -======= - CONTROLLERS = "controllers" ->>>>>>> origin/develop diff --git a/config/definitions_BASE_10148.py b/config/definitions_BASE_10148.py deleted file mode 100644 index c98e7da..0000000 --- a/config/definitions_BASE_10148.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -@brief This file transfers control of the custom definitions like modes to the user. -@details Template configuration file. Copy this folder to the TMTC commander root and adapt - it to your needs. -""" - -import enum - - -PUS_APID = 0x65 -SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,) - - -class CustomServiceList(enum.Enum): - TEST_DEVICE = "test" - P60DOCK = "p60dock" - PDU1 = "pdu1" - PDU2 = "pdu2" - ACU = "acu" - ACS = "acs" - BPX_BATTERY = "bpx" - TMP1075_1 = "tmp1075_1" - TMP1075_2 = "tmp1075_2" - HEATER = "heater" - IMTQ = "imtq" - PLOC_SUPV = "ploc_supv" - PLOC_MPSOC = "ploc_mpsoc" - PCDU = "pcdu" - PL_PCDU = "plpcdu" - SA_DEPLYOMENT = "sa_depl" - REACTION_WHEEL_1 = "rw-1" - REACTION_WHEEL_2 = "rw-2" - REACTION_WHEEL_3 = "rw-3" - REACTION_WHEEL_4 = "rw-4" - RW_ASSEMBLY = "rw-ass" - RAD_SENSOR = "rad_sensor" - GPS_0 = "gps0" - GPS_1 = "gps1" - PLOC_MEMORY_DUMPER = "ploc_memory_dumper" - CORE = "core" - STAR_TRACKER = "star_tracker" - CCSDS_HANDLER = "ccsds_handler" - PDEC_HANDLER = "pdec_handler" - STR_IMG_HELPER = "str_img_helper" - SYRLINKS = "syrlinks" - ACS_ASS = "acs-ass" - SUS_ASS = "sus-ass" - TCS_ASS = "tcs-ass" - TIME = "time" diff --git a/config/definitions_LOCAL_10148.py b/config/definitions_LOCAL_10148.py deleted file mode 100644 index 8f8507d..0000000 --- a/config/definitions_LOCAL_10148.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -@brief This file transfers control of the custom definitions like modes to the user. -@details Template configuration file. Copy this folder to the TMTC commander root and adapt - it to your needs. -""" - -import enum - - -PUS_APID = 0x65 -SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,) - - -class CustomServiceList(enum.Enum): - TEST_DEVICE = "test" - P60DOCK = "p60dock" - PDU1 = "pdu1" - PDU2 = "pdu2" - ACU = "acu" - ACS = "acs" - BPX_BATTERY = "bpx" - TMP1075_1 = "tmp1075_1" - TMP1075_2 = "tmp1075_2" - HEATER = "heater" - IMTQ = "imtq" - PLOC_SUPV = "ploc_supv" - PLOC_MPSOC = "ploc_mpsoc" - PCDU = "pcdu" - PL_PCDU = "plpcdu" - SA_DEPLYOMENT = "sa_depl" - REACTION_WHEEL_1 = "rw-1" - REACTION_WHEEL_2 = "rw-2" - REACTION_WHEEL_3 = "rw-3" - REACTION_WHEEL_4 = "rw-4" - RW_ASSEMBLY = "rw-ass" - RAD_SENSOR = "rad_sensor" - GPS_0 = "gps0" - GPS_1 = "gps1" - PLOC_MEMORY_DUMPER = "ploc_memory_dumper" - CORE = "core" - STAR_TRACKER = "star_tracker" - CCSDS_HANDLER = "ccsds_handler" - PDEC_HANDLER = "pdec_handler" - STR_IMG_HELPER = "str_img_helper" - SYRLINKS = "syrlinks" - ACS_ASS = "acs-ass" - SUS_ASS = "sus-ass" - TCS_ASS = "tcs-ass" - TIME = "time" - PROCEDURE = "proc" - TVTTESTPROCEDURE = "tvtestproc" diff --git a/config/definitions_REMOTE_10148.py b/config/definitions_REMOTE_10148.py deleted file mode 100644 index 7d88116..0000000 --- a/config/definitions_REMOTE_10148.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -@brief This file transfers control of the custom definitions like modes to the user. -@details Template configuration file. Copy this folder to the TMTC commander root and adapt - it to your needs. -""" - -import enum - - -PUS_APID = 0x65 -SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,) - - -class CustomServiceList(enum.Enum): - TEST_DEVICE = "test" - P60DOCK = "p60dock" - PDU1 = "pdu1" - PDU2 = "pdu2" - ACU = "acu" - ACS = "acs" - BPX_BATTERY = "bpx" - TMP1075_1 = "tmp1075_1" - TMP1075_2 = "tmp1075_2" - HEATER = "heater" - IMTQ = "imtq" - PLOC_SUPV = "ploc_supv" - PLOC_MPSOC = "ploc_mpsoc" - PCDU = "pcdu" - PL_PCDU = "plpcdu" - SA_DEPLYOMENT = "sa_depl" - REACTION_WHEEL_1 = "rw-1" - REACTION_WHEEL_2 = "rw-2" - REACTION_WHEEL_3 = "rw-3" - REACTION_WHEEL_4 = "rw-4" - RW_ASSEMBLY = "rw-ass" - RAD_SENSOR = "rad_sensor" - GPS_0 = "gps0" - GPS_1 = "gps1" - PLOC_MEMORY_DUMPER = "ploc_memory_dumper" - CORE = "core" - STAR_TRACKER = "star_tracker" - CCSDS_HANDLER = "ccsds_handler" - PDEC_HANDLER = "pdec_handler" - STR_IMG_HELPER = "str_img_helper" - SYRLINKS = "syrlinks" - ACS_ASS = "acs-ass" - SUS_ASS = "sus-ass" - TCS_ASS = "tcs-ass" - TIME = "time" - CONTROLLERS = "controllers" From d53e26b589c663b83e60594105c68a681c37a108 Mon Sep 17 00:00:00 2001 From: Markus Kranz Date: Thu, 19 May 2022 18:14:38 +0200 Subject: [PATCH 4/4] switch to generic hk function --- pus_tc/devs/p60dock.py | 3 -- pus_tc/system/proc.py | 86 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/pus_tc/devs/p60dock.py b/pus_tc/devs/p60dock.py index 03bbd5b..be71cac 100644 --- a/pus_tc/devs/p60dock.py +++ b/pus_tc/devs/p60dock.py @@ -16,9 +16,6 @@ from gomspace.gomspace_common import * from config.object_ids import P60_DOCK_HANDLER -HK_SET_ID = 0x3 - - class P60OpCodes: STACK_3V3_ON = ["stack-3v3-on", "1"] STACK_3V3_OFF = ["stack-3v3-off", "2"] diff --git a/pus_tc/system/proc.py b/pus_tc/system/proc.py index 0893469..0d3c136 100644 --- a/pus_tc/system/proc.py +++ b/pus_tc/system/proc.py @@ -1,42 +1,96 @@ from tmtccmd.config import QueueCommands from tmtccmd.tc.definitions import TcQueueT from tmtccmd.tc.pus_3_fsfw_hk import * -from config.object_ids import BPX_HANDLER_ID +from config.object_ids import ( + BPX_HANDLER_ID, + P60_DOCK_HANDLER, + PDU_1_HANDLER_ID, + PDU_2_HANDLER_ID, + ACU_HANDLER_ID, +) from pus_tc.devs.bpx_batt import BpxSetIds +from gomspace.gomspace_common import SetIds as GsSetIds class OpCodes: HEATER = ["0", "heater"] BAT_FT = ["bat-ft"] + PCDU_FT = ["pcdu-ft"] class Info: HEATER = "heater procedure" BAT_FT = "battery functional test" + PCDU_FT = "pcdu functional test" def pack_proc_commands(tc_queue: TcQueueT, op_code: str): if op_code in OpCodes.BAT_FT: + device = Info.BAT_FT.split()[0] tc_queue.appendleft( - ( - QueueCommands.PRINT, - f"Executing Battery functional test Procedure ({OpCodes.BAT_FT})", - ) + (QueueCommands.PRINT, f"Executing {device} Procedure ({device})") ) - tc_queue.appendleft((QueueCommands.PRINT, f"Enabling periodic HK for Battery")) - cmd_tuple = enable_periodic_hk_command_with_interval( + sid = make_sid(BPX_HANDLER_ID, BpxSetIds.GET_HK_SET) + + listen_to_hk_for_x_seconds( diag=False, - sid=make_sid(BPX_HANDLER_ID, BpxSetIds.GET_HK_SET), + device=device, + sid=sid, interval_seconds=10.0, - ssc=0, + collection_time=120.0, ) - for cmd in cmd_tuple: - tc_queue.appendleft(cmd.pack_command_tuple()) - tc_queue.appendleft((QueueCommands.WAIT, 120.0)) - tc_queue.appendleft((QueueCommands.PRINT, "Disabling periodic HK for Battery")) + + if op_code in OpCodes.PCDU_FT: + device = Info.PCDU_FT.split()[0] tc_queue.appendleft( - disable_periodic_hk_command( - diag=False, sid=make_sid(BPX_HANDLER_ID, BpxSetIds.GET_HK_SET), ssc=0 - ).pack_command_tuple() + (QueueCommands.PRINT, f"Executing {device} Procedure ({device})") ) + sid = make_sid(P60_DOCK_HANDLER, GsSetIds.P60_CORE) + + listen_to_hk_for_x_seconds( + diag=False, + device=device, + sid=sid, + interval_seconds=10.0, + collection_time=120.0, + ) + pass + + +def listen_to_hk_for_x_seconds( + tc_queue: TcQueueT, + diag: bool, + device: str, + sid: bytes, + interval_seconds: float, + collection_time: float, +): + """ + enable_periodic_hk_command_with_interval( + diag: bool, sid: bytes, interval_seconds: float, ssc: int + """ + """ + function with periodic HK generation + interval_seconds = at which rate HK is saved + collection_time = how long the HK is saved for + device = for which device the HK is saved + functional_test = + diagnostic Hk = yes diagnostic or no diagnostic + sid = structural ID for specific device + device Hk set ID + """ + + tc_queue.appendleft((QueueCommands.PRINT, f"Enabling periodic HK for {device}")) + cmd_tuple = enable_periodic_hk_command_with_interval( + diag=diag, sid=sid, interval_seconds=interval_seconds, ssc=0 + ) + for cmd in cmd_tuple: + tc_queue.appendleft(cmd.pack_command_tuple()) + + tc_queue.appendleft((QueueCommands.WAIT, collection_time)) + + tc_queue.appendleft((QueueCommands.PRINT, f"Disabling periodic HK for {device}")) + tc_queue.appendleft( + disable_periodic_hk_command(diag=diag, sid=sid, ssc=0).pack_command_tuple() + )