relative timeshift
All checks were successful
EIVE/-/pipeline/head This commit looks good

This commit is contained in:
Robin Müller 2024-04-08 11:35:05 +02:00
parent 33cf7b1613
commit 492d364246

View File

@ -1,6 +1,7 @@
import enum import enum
import struct
import logging import logging
from datetime import datetime import datetime
from spacepackets.ecss import PusTelecommand, PusService from spacepackets.ecss import PusTelecommand, PusService
@ -8,26 +9,31 @@ from tmtccmd.tmtc import DefaultPusQueueHelper
from tmtccmd.config import CmdTreeNode from tmtccmd.config import CmdTreeNode
_LOGGER = logging.getLogger(__name__)
class Subservice(enum.IntEnum): class Subservice(enum.IntEnum):
SET_TIME = 128 SET_TIME = 128
DUMP_TIME = 129 DUMP_TIME = 129
RELATIVE_TIMESHIFT = 130
class CmdStr: class CmdStr:
SET_CURRENT_TIME = "set_curr_time" SET_CURRENT_TIME = "set_curr_time"
RELATIVE_TIMESHIFT = "relative_timeshift"
DUMP_TIME = "dump_time" DUMP_TIME = "dump_time"
class Info: class Info:
SET_CURRENT_TIME = "Setting current time in ASCII format" SET_CURRENT_TIME = "Setting current time in ASCII format"
RELATIVE_TIMESHIFT = "Shift time with a relative offset"
DUMP_TIME = "Dump system time as event" DUMP_TIME = "Dump system time as event"
def pack_time_management_cmd(q: DefaultPusQueueHelper, cmd_str: str): def pack_time_management_cmd(q: DefaultPusQueueHelper, cmd_str: str):
if cmd_str == CmdStr.SET_CURRENT_TIME: if cmd_str == CmdStr.SET_CURRENT_TIME:
current_time = datetime.utcnow().isoformat() + "Z" + "\0" current_time = datetime.datetime.now(datetime.UTC).isoformat() + "Z" + "\0"
current_time_ascii = current_time.encode("ascii") current_time_ascii = current_time.encode("ascii")
logging.getLogger(__name__).info( _LOGGER.info(
f"Current time in ASCII format: {current_time_ascii}" f"Current time in ASCII format: {current_time_ascii}"
) )
q.add_log_cmd(Info.SET_CURRENT_TIME) q.add_log_cmd(Info.SET_CURRENT_TIME)
@ -38,6 +44,17 @@ def pack_time_management_cmd(q: DefaultPusQueueHelper, cmd_str: str):
app_data=current_time_ascii, app_data=current_time_ascii,
) )
) )
elif cmd_str == CmdStr.RELATIVE_TIMESHIFT:
nanos = input("Specify relative timeshift in nanoseconds")
nanos_packed = struct.pack("!Q", nanos)
q.add_log_cmd(Info.RELATIVE_TIMESHIFT)
q.add_pus_tc(
PusTelecommand(
service=PusService.S9_TIME_MGMT,
subservice=Subservice.RELATIVE_TIMESHIFT,
app_data=nanos_packed
)
)
elif cmd_str == CmdStr.DUMP_TIME: elif cmd_str == CmdStr.DUMP_TIME:
q.add_log_cmd(Info.DUMP_TIME) q.add_log_cmd(Info.DUMP_TIME)
q.add_pus_tc( q.add_pus_tc(
@ -51,4 +68,5 @@ def create_time_node() -> CmdTreeNode:
time_node = CmdTreeNode("time", "Time Management") time_node = CmdTreeNode("time", "Time Management")
time_node.add_child(CmdTreeNode(CmdStr.SET_CURRENT_TIME, "Set current time")) time_node.add_child(CmdTreeNode(CmdStr.SET_CURRENT_TIME, "Set current time"))
time_node.add_child(CmdTreeNode(CmdStr.DUMP_TIME, "Dumpy current time")) time_node.add_child(CmdTreeNode(CmdStr.DUMP_TIME, "Dumpy current time"))
time_node.add_child(CmdTreeNode(CmdStr.RELATIVE_TIMESHIFT,Info.RELATIVE_TIMESHIFT))
return time_node return time_node