This commit is contained in:
Robin Müller 2023-01-18 11:32:21 +01:00
commit 15fbfd0f95
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
62 changed files with 1323 additions and 1151 deletions

View File

@ -8,11 +8,29 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones) The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones)
list yields a list of all related PRs for each release. list yields a list of all related PRs for each release.
# [unreleased] # [v2.3.0] 18.01.2023
- Handle ACS CTRL HK sets - Bumped `tmtccmd` version to new alpha release, use some new features
- Add reboot commands for PCDU modules and fix the breaking changes
- Extend MPSoC commands
# [v2.2.0] 16.01.2023
- A lot of consistency renaming: Single name for enums which are not flag enums,
e.g `ActionId` instead of `ActionIds`
- Updated required Python version to 3.10
# [v2.1.1] 12.01.2023
- Typo in `setup.cfg`, missing version prefix `v` for `tmtccmd`
# [v2.1.0] 12.01.2023
- Various refactoring and tweaks to allow easier integration into `eive-mib`.
- Handle ACS CTRL HK sets.
- Add reboot commands for PCDU modules.
- Extend MPSoC commands.
- Starting from now, more regular releases, especially on breaking changes. This is because
this is now also a library with dependents.
# [v2.0.2] 01.12.2022 # [v2.0.2] 01.12.2022

View File

@ -2,10 +2,10 @@ from pathlib import Path
SW_NAME = "eive-tmtc" SW_NAME = "eive-tmtc"
VERSION_MAJOR = 2 VERSION_MAJOR = 2
VERSION_MINOR = 0 VERSION_MINOR = 2
VERSION_REVISION = 2 VERSION_REVISION = 0
__version__ = "2.0.2" __version__ = "2.2.0"
EIVE_TMTC_ROOT = Path(__file__).parent EIVE_TMTC_ROOT = Path(__file__).parent
PACKAGE_ROOT = EIVE_TMTC_ROOT.parent PACKAGE_ROOT = EIVE_TMTC_ROOT.parent

View File

@ -1,33 +0,0 @@
"""
@brief This file transfers definitions of global variables to the user.
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
it to your needs.
"""
import enum
import argparse
# All globals can be added here and will be part of a globals dictionary.
from config.definitions import CustomServiceList, PUS_APID
from config.custom_mode_op import CustomModeList
from tmtccmd.config.definitions import CoreComInterfaces
from tmtccmd.config.globals import set_default_globals_pre_args_parsing
from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger()
class CustomGlobalIds(enum.Enum):
from enum import auto
pass
def set_globals_pre_args_parsing(gui: bool = False):
set_default_globals_pre_args_parsing(
gui=gui,
tc_apid=PUS_APID,
tm_apid=PUS_APID,
com_if_id=CoreComInterfaces.TCPIP_UDP.value,
)

View File

@ -12,11 +12,11 @@ from typing import Union
from spacepackets.ecss import PusTelecommand from spacepackets.ecss import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
class GomspaceDeviceActionIds(enum.IntEnum): class GomspaceDeviceActionId(enum.IntEnum):
PING = 1 PING = 1
REBOOT = 4 REBOOT = 4
PARAM_GET = 0 PARAM_GET = 0
@ -63,8 +63,8 @@ class Channel:
def pack_request_config_command(object_id: bytes) -> PusTelecommand: def pack_request_config_command(object_id: bytes) -> PusTelecommand:
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=GomspaceDeviceActionIds.REQUEST_CONFIG_TABLE object_id=object_id, action_id=GomspaceDeviceActionId.REQUEST_CONFIG_TABLE
) )
@ -88,9 +88,9 @@ def pack_get_param_command(
else: else:
app_data += memory_address app_data += memory_address
app_data += struct.pack("!B", parameter_size) app_data += struct.pack("!B", parameter_size)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, object_id=object_id,
action_id=GomspaceDeviceActionIds.PARAM_GET, action_id=GomspaceDeviceActionId.PARAM_GET,
user_data=app_data, user_data=app_data,
) )
@ -98,12 +98,12 @@ def pack_get_param_command(
def pack_set_float_param_command( def pack_set_float_param_command(
object_id: bytes, memory_address: bytes, parameter: float object_id: bytes, memory_address: bytes, parameter: float
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!f", parameter) app_data += struct.pack("!f", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -111,12 +111,12 @@ def pack_set_float_param_command(
def pack_set_u8_param_command( def pack_set_u8_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(1) app_data.append(1)
app_data.append(parameter) app_data.append(parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -124,12 +124,12 @@ def pack_set_u8_param_command(
def pack_set_i8_param_command( def pack_set_i8_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(1) app_data.append(1)
app_data += struct.pack("!b", parameter) app_data += struct.pack("!b", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -137,12 +137,12 @@ def pack_set_i8_param_command(
def pack_set_u16_param_command( def pack_set_u16_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(2) app_data.append(2)
app_data += struct.pack("!H", parameter) app_data += struct.pack("!H", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -150,34 +150,34 @@ def pack_set_u16_param_command(
def pack_set_i16_param_command( def pack_set_i16_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(2) app_data.append(2)
app_data += struct.pack("!h", parameter) app_data += struct.pack("!h", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
def pack_set_u32_param_command(object_id: bytes, memory_address: bytes, parameter: int): def pack_set_u32_param_command(object_id: bytes, memory_address: bytes, parameter: int):
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!I", parameter) app_data += struct.pack("!I", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
def pack_set_i32_param_command(object_id: bytes, memory_address: bytes, parameter: int): def pack_set_i32_param_command(object_id: bytes, memory_address: bytes, parameter: int):
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!i", parameter) app_data += struct.pack("!i", parameter)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -224,9 +224,9 @@ def pack_ping_command(object_id: ObjectIdU32, data: bytearray) -> PusTelecommand
@note The ping request sends the specified data to a gompsace device. These @note The ping request sends the specified data to a gompsace device. These
data are simply copied by the device and then sent back. data are simply copied by the device and then sent back.
""" """
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.PING, action_id=GomspaceDeviceActionId.PING,
user_data=data, user_data=data,
) )
@ -235,8 +235,8 @@ def pack_gnd_wdt_reset_command(object_id: ObjectIdBase) -> PusTelecommand:
""" " Function to generate the command to reset the watchdog of a gomspace device. """ " Function to generate the command to reset the watchdog of a gomspace device.
@param object_id Object Id of the gomspace device handler. @param object_id Object Id of the gomspace device handler.
""" """
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.WDT_RESET object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.WDT_RESET
) )
@ -244,8 +244,8 @@ def pack_reboot_command(object_id: ObjectIdU32) -> PusTelecommand:
"""Function to generate the command which triggers a reboot of a gomspace device """Function to generate the command which triggers a reboot of a gomspace device
@param object_id The object id of the gomspace device handler. @param object_id The object id of the gomspace device handler.
""" """
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REBOOT object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.REBOOT
) )
@ -254,6 +254,6 @@ def pack_request_full_hk_table_command(object_id: ObjectIdU32) -> PusTelecommand
device. device.
@param object_id The object id of the gomspace device handler. @param object_id The object id of the gomspace device handler.
""" """
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REQUEST_HK_TABLE object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.REQUEST_HK_TABLE
) )

View File

@ -121,11 +121,11 @@ def add_str_cmds(defs: TmtcDefinitionWrapper):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_time_cmds(defs: TmtcDefinitionWrapper): def add_time_cmds(defs: TmtcDefinitionWrapper):
from eive_tmtc.pus_tc.system.time import OpCodes, Info from eive_tmtc.pus_tc.system.time import OpCode, Info
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=OpCodes.SET_CURRENT_TIME, keys=OpCode.SET_CURRENT_TIME,
info=Info.SET_CURRENT_TIME, info=Info.SET_CURRENT_TIME,
) )
defs.add_service( defs.add_service(
@ -141,11 +141,11 @@ def add_system_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=controllers.OpCodes.THERMAL_CONTROLLER, keys=controllers.OpCode.THERMAL_CONTROLLER,
info=controllers.Info.THERMAL_CONTROLLER, info=controllers.Info.THERMAL_CONTROLLER,
) )
oce.add( oce.add(
keys=controllers.OpCodes.CORE_CONTROLLER, keys=controllers.OpCode.CORE_CONTROLLER,
info=controllers.Info.CORE_CONTROLLER, info=controllers.Info.CORE_CONTROLLER,
) )
defs.add_service( defs.add_service(

View File

@ -9,25 +9,25 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
class BpxSetIds: class BpxSetId:
GET_HK_SET = 0 GET_HK_SET = 0
GET_CFG_SET = 5 GET_CFG_SET = 5
class BpxActionIds: class BpxActionId:
REBOOT = 2 REBOOT = 2
RESET_COUNTERS = 3 RESET_COUNTERS = 3
SET_CFG = 4 SET_CFG = 4
GET_CFG = 5 GET_CFG = 5
class BpxOpCodes: class BpxOpCode:
HK = ["0", "hk"] HK = ["0", "hk"]
OFF = ["off"] OFF = ["off"]
ON = ["on"] ON = ["on"]
@ -40,15 +40,15 @@ class BpxOpCodes:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper): def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=BpxOpCodes.ON, info="On command") oce.add(keys=BpxOpCode.ON, info="On command")
oce.add(keys=BpxOpCodes.OFF, info="Off command") oce.add(keys=BpxOpCode.OFF, info="Off command")
oce.add(keys=BpxOpCodes.HK, info="Request BPX HK") oce.add(keys=BpxOpCode.HK, info="Request BPX HK")
oce.add(keys=BpxOpCodes.RST_BOOT_CNT, info="Reset Boot Count") oce.add(keys=BpxOpCode.RST_BOOT_CNT, info="Reset Boot Count")
oce.add(keys=BpxOpCodes.REQUEST_CFG, info="Request Configuration Struct (Step 1)") oce.add(keys=BpxOpCode.REQUEST_CFG, info="Request Configuration Struct (Step 1)")
oce.add( oce.add(
keys=BpxOpCodes.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)" keys=BpxOpCode.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)"
) )
oce.add(keys=BpxOpCodes.REBOOT, info="Reboot Command") oce.add(keys=BpxOpCode.REBOOT, info="Reboot Command")
defs.add_service( defs.add_service(
name=CustomServiceList.BPX_BATTERY.value, name=CustomServiceList.BPX_BATTERY.value,
info="BPX Battery Handler", info="BPX Battery Handler",
@ -60,13 +60,13 @@ def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
def pack_bpx_commands(p: ServiceProviderParams): def pack_bpx_commands(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in BpxOpCodes.HK: if op_code in BpxOpCode.HK:
q.add_log_cmd("Requesting BPX battery HK set") q.add_log_cmd("Requesting BPX battery HK set")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetIds.GET_HK_SET) sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_HK_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid)) q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.OFF: if op_code in BpxOpCode.OFF:
q.add_log_cmd("Off mode") q.add_log_cmd("Off mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Modes.OFF, 0) mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.OFF, 0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
@ -74,9 +74,9 @@ def pack_bpx_commands(p: ServiceProviderParams):
app_data=mode_cmd, app_data=mode_cmd,
) )
) )
if op_code in BpxOpCodes.ON: if op_code in BpxOpCode.ON:
q.add_log_cmd("On mode") q.add_log_cmd("On mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Modes.ON, 0) mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.ON, 0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
@ -84,28 +84,24 @@ def pack_bpx_commands(p: ServiceProviderParams):
app_data=mode_cmd, app_data=mode_cmd,
) )
) )
if op_code in BpxOpCodes.RST_BOOT_CNT: if op_code in BpxOpCode.RST_BOOT_CNT:
q.add_log_cmd("Resetting reboot counters") q.add_log_cmd("Resetting reboot counters")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.RESET_COUNTERS object_id=BPX_HANDLER_ID, action_id=BpxActionId.RESET_COUNTERS
) )
) )
if op_code in BpxOpCodes.REQUEST_CFG: if op_code in BpxOpCode.REQUEST_CFG:
q.add_log_cmd("Requesting configuration struct") q.add_log_cmd("Requesting configuration struct")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.GET_CFG)
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.GET_CFG
)
) )
if op_code in BpxOpCodes.REQUEST_CFG_HK: if op_code in BpxOpCode.REQUEST_CFG_HK:
q.add_log_cmd("Requesting configuration struct HK") q.add_log_cmd("Requesting configuration struct HK")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetIds.GET_CFG_SET) sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_CFG_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid)) q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.REBOOT: if op_code in BpxOpCode.REBOOT:
q.add_log_cmd("Rebooting BPX battery") q.add_log_cmd("Rebooting BPX battery")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.REBOOT)
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.REBOOT
)
) )

View File

@ -5,6 +5,7 @@
@author J. Meier @author J. Meier
@date 20.11.2021 @date 20.11.2021
""" """
import enum
import struct import struct
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
@ -12,7 +13,7 @@ from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class CommandIds: class CommandId(enum.IntEnum):
# Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps) # Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps)
SET_LOW_RATE = 0 SET_LOW_RATE = 0
# Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps) # Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps)
@ -39,42 +40,42 @@ def pack_ccsds_handler_test(
q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}") q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}")
if op_code == "0": if op_code == "0":
q.add_log_cmd("CCSDS Handler: Set low rate") q.add_log_cmd("CCSDS Handler: Set low rate")
command = obyt + struct.pack("!I", CommandIds.SET_LOW_RATE) command = obyt + struct.pack("!I", CommandId.SET_LOW_RATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1": if op_code == "1":
q.add_log_cmd("CCSDS Handler: Set high rate") q.add_log_cmd("CCSDS Handler: Set high rate")
command = obyt + struct.pack("!I", CommandIds.SET_HIGH_RATE) command = obyt + struct.pack("!I", CommandId.SET_HIGH_RATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "2": if op_code == "2":
q.add_log_cmd("CCSDS Handler: Enables the transmitter") q.add_log_cmd("CCSDS Handler: Enables the transmitter")
command = obyt + struct.pack("!I", CommandIds.EN_TRANSMITTER) command = obyt + struct.pack("!I", CommandId.EN_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "3": if op_code == "3":
q.add_log_cmd("CCSDS Handler: Disables the transmitter") q.add_log_cmd("CCSDS Handler: Disables the transmitter")
command = obyt + struct.pack("!I", CommandIds.DIS_TRANSMITTER) command = obyt + struct.pack("!I", CommandId.DIS_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "4": if op_code == "4":
q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate") q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): ")) bitrate = int(input("Specify bit rate (bps): "))
command = ( command = (
obyt obyt
+ struct.pack("!I", CommandIds.ARBITRARY_BITRATE) + struct.pack("!I", CommandId.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate) + struct.pack("!I", bitrate)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "5": if op_code == "5":
q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator") q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator")
command = obyt + struct.pack("!I", CommandIds.ENABLE_TX_CLK_MANIPULATOR) command = obyt + struct.pack("!I", CommandId.ENABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "6": if op_code == "6":
q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator") q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator")
command = obyt + struct.pack("!I", CommandIds.DISABLE_TX_CLK_MANIPULATOR) command = obyt + struct.pack("!I", CommandId.DISABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "7": if op_code == "7":
q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock") q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock")
command = obyt + struct.pack("!I", CommandIds.UPDATE_ON_RISING_EDGE) command = obyt + struct.pack("!I", CommandId.UPDATE_ON_RISING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "8": if op_code == "8":
q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock") q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock")
command = obyt + struct.pack("!I", CommandIds.UPDATE_ON_FALLING_EDGE) command = obyt + struct.pack("!I", CommandId.UPDATE_ON_FALLING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -11,7 +11,7 @@ from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
REQ_OS_HK = ["0", "hk-os"] REQ_OS_HK = ["0", "hk-os"]
RESET_GNSS = ["5", "reset"] RESET_GNSS = ["5", "reset"]
@ -21,15 +21,15 @@ class Info:
RESET_GNSS = "Reset GNSS using reset pin" RESET_GNSS = "Reset GNSS using reset pin"
class SetIds: class SetId:
HK = 0 HK = 0
@tmtc_definitions_provider @tmtc_definitions_provider
def add_gps_cmds(defs: TmtcDefinitionWrapper): def add_gps_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.RESET_GNSS, info=Info.RESET_GNSS) oce.add(keys=OpCode.RESET_GNSS, info=Info.RESET_GNSS)
oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK) oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
defs.add_service( defs.add_service(
name=CustomServiceList.GPS_CTRL.value, name=CustomServiceList.GPS_CTRL.value,
info="GPS/GNSS Controller", info="GPS/GNSS Controller",
@ -38,11 +38,11 @@ def add_gps_cmds(defs: TmtcDefinitionWrapper):
def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str): def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.RESET_GNSS: if op_code in OpCode.RESET_GNSS:
# TODO: This needs to be re-implemented # TODO: This needs to be re-implemented
LOGGER.warning("Reset pin handling needs to be re-implemented") LOGGER.warning("Reset pin handling needs to be re-implemented")
if op_code in OpCodes.REQ_OS_HK: if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}") q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetIds.HK)) generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetId.HK))
) )

View File

@ -1,10 +1,10 @@
import enum import enum
class AdisGyroSetIds(enum.IntEnum): class AdisGyroSetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0
CFG_HK = 1 CFG_HK = 1
class L3gGyroSetIds(enum.IntEnum): class L3gGyroSetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0

View File

@ -11,16 +11,16 @@ from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util.obj_id import ObjectIdU32 from tmtccmd.util.obj_id import ObjectIdU32
from tmtccmd.tc.pus_201_fsfw_health import ( from tmtccmd.pus.s201_fsfw_health import (
pack_set_health_cmd_data, pack_set_health_cmd_data,
FsfwHealth, FsfwHealth,
Subservices, Subservice,
) )
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
class SwitchNumbers: class SwitchNumber(enum.IntEnum):
HEATER_0_OBC_BRD = 0 HEATER_0_OBC_BRD = 0
HEATER_1_PLOC_PROC_BRD = 1 HEATER_1_PLOC_PROC_BRD = 1
HEATER_2_ACS_BRD = 2 HEATER_2_ACS_BRD = 2
@ -32,7 +32,7 @@ class SwitchNumbers:
NUMBER_OF_SWITCHES = 8 NUMBER_OF_SWITCHES = 8
class OpCodes: class OpCode:
HEATER_CMD = ["0", "switch-cmd"] HEATER_CMD = ["0", "switch-cmd"]
HEATER_EXT_CTRL = ["1", "set-ext-ctrl"] HEATER_EXT_CTRL = ["1", "set-ext-ctrl"]
HEATER_FAULTY_CMD = ["2", "set-faulty"] HEATER_FAULTY_CMD = ["2", "set-faulty"]
@ -57,10 +57,10 @@ class ActionIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_heater_cmds(defs: TmtcDefinitionWrapper): def add_heater_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.HEATER_CMD, info=Info.HEATER_CMD) oce.add(keys=OpCode.HEATER_CMD, info=Info.HEATER_CMD)
oce.add(keys=OpCodes.HEATER_HEALTHY_CMD, info=Info.HEATER_HEALTHY_CMD) oce.add(keys=OpCode.HEATER_HEALTHY_CMD, info=Info.HEATER_HEALTHY_CMD)
oce.add(keys=OpCodes.HEATER_EXT_CTRL, info=Info.HEATER_EXT_CTRL) oce.add(keys=OpCode.HEATER_EXT_CTRL, info=Info.HEATER_EXT_CTRL)
oce.add(keys=OpCodes.HEATER_FAULTY_CMD, info=Info.HEATER_FAULTY_CMD) oce.add(keys=OpCode.HEATER_FAULTY_CMD, info=Info.HEATER_FAULTY_CMD)
defs.add_service( defs.add_service(
name=CustomServiceList.HEATER.value, name=CustomServiceList.HEATER.value,
info="Heater Device", info="Heater Device",
@ -69,7 +69,7 @@ def add_heater_cmds(defs: TmtcDefinitionWrapper):
def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelper): def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelper):
if op_code in OpCodes.HEATER_CMD: if op_code in OpCode.HEATER_CMD:
q.add_log_cmd("Heater Switching") q.add_log_cmd("Heater Switching")
heater_number = prompt_heater() heater_number = prompt_heater()
while True: while True:
@ -89,7 +89,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
debug_string = f"Switching heater {heater_number} {act_str}" debug_string = f"Switching heater {heater_number} {act_str}"
q.add_log_cmd(debug_string) q.add_log_cmd(debug_string)
q.add_pus_tc(pack_switch_heater_command(object_id, heater_number, action)) q.add_pus_tc(pack_switch_heater_command(object_id, heater_number, action))
if op_code in OpCodes.HEATER_EXT_CTRL: if op_code in OpCode.HEATER_EXT_CTRL:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -99,7 +99,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
health_str="External Control", health_str="External Control",
heater_idx=heater_number, heater_idx=heater_number,
) )
if op_code in OpCodes.HEATER_FAULTY_CMD: if op_code in OpCode.HEATER_FAULTY_CMD:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -109,7 +109,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
health_str="Faulty", health_str="Faulty",
heater_idx=heater_number, heater_idx=heater_number,
) )
if op_code in OpCodes.HEATER_HEALTHY_CMD: if op_code in OpCode.HEATER_HEALTHY_CMD:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -165,7 +165,7 @@ def prompt_heater() -> int:
print("Heater number not a digit") print("Heater number not a digit")
continue continue
heater_number = int(heater_number) heater_number = int(heater_number)
if heater_number >= SwitchNumbers.NUMBER_OF_SWITCHES or heater_number < 0: if heater_number >= SwitchNumber.NUMBER_OF_SWITCHES or heater_number < 0:
print("Invalid heater switch number") print("Invalid heater switch number")
continue continue
break break
@ -183,7 +183,7 @@ def health_cmd(
app_data = pack_set_health_cmd_data(object_id=object_id.as_bytes, health=health) app_data = pack_set_health_cmd_data(object_id=object_id.as_bytes, health=health)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=201, subservice=Subservices.TC_SET_HEALTH, app_data=app_data service=201, subservice=Subservice.TC_SET_HEALTH, app_data=app_data
) )
) )
@ -200,6 +200,6 @@ def pack_switch_heater_command(
command.append(switch_nr) command.append(switch_nr)
command.append(switch_action) command.append(switch_action)
command.append(COMMAND_SOURCE_PARAM_EXTERNAL) command.append(COMMAND_SOURCE_PARAM_EXTERNAL)
return create_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=ActionIds.SWITCH_HEATER, user_data=command object_id=object_id, action_id=ActionIds.SWITCH_HEATER, user_data=command
) )

View File

@ -1,9 +1,9 @@
import enum import enum
class MgmLis3SetIds(enum.IntEnum): class MgmLis3SetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0
class MgmRm3100SetIds(enum.IntEnum): class MgmRm3100SetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0

View File

@ -9,7 +9,7 @@ from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
class CommandIds: class CommandId:
# prints the clcw to the console. Useful for debugging # prints the clcw to the console. Useful for debugging
PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0]) PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0])
# Print PDEC monitor register # Print PDEC monitor register
@ -22,9 +22,9 @@ def pack_pdec_handler_test(
q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}") q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}")
if op_code == "0": if op_code == "0":
q.add_log_cmd("PDEC Handler: Print CLCW") q.add_log_cmd("PDEC Handler: Print CLCW")
command = object_id + CommandIds.PRINT_CLCW command = object_id + CommandId.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1": if op_code == "1":
q.add_log_cmd("PDEC Handler: Print PDEC monitor register") q.add_log_cmd("PDEC Handler: Print PDEC monitor register")
command = object_id + CommandIds.PRINT_PDEC_MON command = object_id + CommandId.PRINT_PDEC_MON
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -18,7 +18,7 @@ from tmtccmd.tc.pus_11_tc_sched import (
create_enable_tc_sched_cmd, create_enable_tc_sched_cmd,
create_time_tagged_cmd, create_time_tagged_cmd,
) )
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.tc.pus_20_params import ( from tmtccmd.tc.pus_20_params import (
pack_scalar_double_param_app_data, pack_scalar_double_param_app_data,
pack_fsfw_load_param_cmd, pack_fsfw_load_param_cmd,
@ -31,7 +31,7 @@ from eive_tmtc.config.object_ids import PL_PCDU_ID
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
SWITCH_HPA_ON_PROC = ["0", "proc_hpa"] SWITCH_HPA_ON_PROC = ["0", "proc_hpa"]
SWITCH_ON = ["2", "on"] SWITCH_ON = ["2", "on"]
SWITCH_OFF = ["3", "off"] SWITCH_OFF = ["3", "off"]
@ -70,7 +70,7 @@ class Info:
DISABLE_HK = "Disable HK" DISABLE_HK = "Disable HK"
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
ADC = 0 ADC = 0
@ -124,116 +124,116 @@ class ParamIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper): def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC) oce.add(keys=OpCode.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC)
oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON) oce.add(keys=OpCode.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF) oce.add(keys=OpCode.SWITCH_OFF, info=Info.SWITCH_OFF)
oce.add(keys=OpCodes.NORMAL_SSR, info=Info.NORMAL_SSR) oce.add(keys=OpCode.NORMAL_SSR, info=Info.NORMAL_SSR)
oce.add(keys=OpCodes.NORMAL_DRO, info=Info.NORMAL_DRO) oce.add(keys=OpCode.NORMAL_DRO, info=Info.NORMAL_DRO)
oce.add(keys=OpCodes.NORMAL_X8, info=Info.NORMAL_X8) oce.add(keys=OpCode.NORMAL_X8, info=Info.NORMAL_X8)
oce.add(keys=OpCodes.NORMAL_TX, info=Info.NORMAL_TX) oce.add(keys=OpCode.NORMAL_TX, info=Info.NORMAL_TX)
oce.add(keys=OpCodes.NORMAL_MPA, info=Info.NORMAL_MPA) oce.add(keys=OpCode.NORMAL_MPA, info=Info.NORMAL_MPA)
oce.add(keys=OpCodes.NORMAL_HPA, info=Info.NORMAL_HPA) oce.add(keys=OpCode.NORMAL_HPA, info=Info.NORMAL_HPA)
oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK) oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
oce.add(keys=OpCodes.ENABLE_HK, info=Info.ENABLE_HK) oce.add(keys=OpCode.ENABLE_HK, info=Info.ENABLE_HK)
oce.add( oce.add(
keys=OpCodes.INJECT_SSR_TO_DRO_FAILURE, keys=OpCode.INJECT_SSR_TO_DRO_FAILURE,
info="Inject failure SSR to DRO transition", info="Inject failure SSR to DRO transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_DRO_TO_X8_FAILURE, keys=OpCode.INJECT_DRO_TO_X8_FAILURE,
info="Inject failure in DRO to X8 transition", info="Inject failure in DRO to X8 transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_X8_TO_TX_FAILURE, keys=OpCode.INJECT_X8_TO_TX_FAILURE,
info="Inject failure in X8 to TX transition", info="Inject failure in X8 to TX transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_TX_TO_MPA_FAILURE, keys=OpCode.INJECT_TX_TO_MPA_FAILURE,
info="Inject failure in TX to MPA transition", info="Inject failure in TX to MPA transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_MPA_TO_HPA_FAILURE, keys=OpCode.INJECT_MPA_TO_HPA_FAILURE,
info="Inject failure in MPA to HPA transition", info="Inject failure in MPA to HPA transition",
) )
oce.add(keys=OpCodes.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode") oce.add(keys=OpCode.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode")
defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce) defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce)
def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str): def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.SWITCH_ON: if op_code in OpCode.SWITCH_ON:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Modes.ON, submode=0) pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Mode.ON, submode=0)
if op_code in OpCodes.SWITCH_OFF: if op_code in OpCode.SWITCH_OFF:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Modes.OFF, submode=0) pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Mode.OFF, submode=0)
if op_code in OpCodes.ENABLE_HK: if op_code in OpCode.ENABLE_HK:
interval = float( interval = float(
input("Please enter HK collection interval in floating point seconds: ") input("Please enter HK collection interval in floating point seconds: ")
) )
cmds = enable_periodic_hk_command_with_interval( cmds = enable_periodic_hk_command_with_interval(
diag=True, sid=make_sid(PL_PCDU_ID, SetIds.ADC), interval_seconds=interval diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC), interval_seconds=interval
) )
q.add_log_cmd(f"Enable PL PCDU HK with interval of {interval} seconds") q.add_log_cmd(f"Enable PL PCDU HK with interval of {interval} seconds")
for cmd in cmds: for cmd in cmds:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodes.DISABLE_HK: if op_code in OpCode.DISABLE_HK:
cmd = disable_periodic_hk_command( cmd = disable_periodic_hk_command(
diag=True, sid=make_sid(PL_PCDU_ID, SetIds.ADC) diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC)
) )
q.add_log_cmd("Disabling PL PCDU HK") q.add_log_cmd("Disabling PL PCDU HK")
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodes.NORMAL_SSR: if op_code in OpCode.NORMAL_SSR:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_SSR, info=Info.NORMAL_SSR,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode( submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
), ),
) )
if op_code in OpCodes.NORMAL_DRO: if op_code in OpCode.NORMAL_DRO:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_DRO, info=Info.NORMAL_DRO,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON), submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
) )
if op_code in OpCodes.NORMAL_X8: if op_code in OpCode.NORMAL_X8:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_X8, info=Info.NORMAL_X8,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON), submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
) )
if op_code in OpCodes.NORMAL_TX: if op_code in OpCode.NORMAL_TX:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_TX, info=Info.NORMAL_TX,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON), submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
) )
if op_code in OpCodes.NORMAL_MPA: if op_code in OpCode.NORMAL_MPA:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_MPA, info=Info.NORMAL_MPA,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
) )
if op_code in OpCodes.NORMAL_HPA: if op_code in OpCode.NORMAL_HPA:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_HPA, info=Info.NORMAL_HPA,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
) )
if op_code in OpCodes.REQ_OS_HK: if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}") q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=PL_PCDU_ID, set_id=SetIds.ADC) sid=make_sid(object_id=PL_PCDU_ID, set_id=SetId.ADC)
) )
) )
if op_code in OpCodes.SWITCH_HPA_ON_PROC: if op_code in OpCode.SWITCH_HPA_ON_PROC:
hpa_on_procedure(q) hpa_on_procedure(q)
if op_code in OpCodes.INJECT_ALL_ON_FAILURE: if op_code in OpCode.INJECT_ALL_ON_FAILURE:
pack_failure_injection_cmd( pack_failure_injection_cmd(
q=q, q=q,
param_id=ParamIds.INJECT_ALL_ON_FAILURE, param_id=ParamIds.INJECT_ALL_ON_FAILURE,
@ -251,15 +251,15 @@ def hpa_on_procedure(q: DefaultPusQueueHelper):
) )
pl_pcdu_on = PusTelecommand( pl_pcdu_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(object_id=PL_PCDU_ID, mode=Modes.ON, submode=0), app_data=pack_mode_data(object_id=PL_PCDU_ID, mode=Mode.ON, submode=0),
) )
ssr_on = PusTelecommand( ssr_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode( submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
), ),
@ -267,46 +267,46 @@ def hpa_on_procedure(q: DefaultPusQueueHelper):
) )
dro_on = PusTelecommand( dro_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON), submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
), ),
) )
x8_on = PusTelecommand( x8_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON), submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
), ),
) )
tx_on = PusTelecommand( tx_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON), submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
), ),
) )
mpa_on = PusTelecommand( mpa_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
), ),
) )
hpa_on = PusTelecommand( hpa_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
), ),
) )
@ -439,12 +439,12 @@ def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_st
def pack_pl_pcdu_mode_cmd( def pack_pl_pcdu_mode_cmd(
q: DefaultPusQueueHelper, info: str, mode: Modes, submode: int q: DefaultPusQueueHelper, info: str, mode: Mode, submode: int
): ):
q.add_log_cmd(info) q.add_log_cmd(info)
mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode) mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=mode_data
) )
) )

View File

@ -10,7 +10,7 @@ import struct
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.pus_tc.service_200_mode import pack_mode_data, Modes from eive_tmtc.pus_tc.service_200_mode import pack_mode_data, Mode
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -18,11 +18,11 @@ from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class SetIds: class SetId:
HK = 3 HK = 3
class OpCodes: class OpCode:
ON = ["0", "on"] ON = ["0", "on"]
NORMAL = ["1", "normal"] NORMAL = ["1", "normal"]
OFF = ["2", "off"] OFF = ["2", "off"]
@ -40,7 +40,7 @@ class Info:
DEBUG_OFF = "Switch debug output off" DEBUG_OFF = "Switch debug output off"
class CommandIds: class CommandId:
START_CONVERSIONS = 2 START_CONVERSIONS = 2
READ_CONVERSIONS = 3 READ_CONVERSIONS = 3
ENABLE_DEBUG_OUTPUT = 4 ENABLE_DEBUG_OUTPUT = 4
@ -50,12 +50,12 @@ class CommandIds:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_rad_sens_cmds(defs: TmtcDefinitionWrapper): def add_rad_sens_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(info=Info.ON, keys=OpCodes.ON) oce.add(info=Info.ON, keys=OpCode.ON)
oce.add(info=Info.OFF, keys=OpCodes.OFF) oce.add(info=Info.OFF, keys=OpCode.OFF)
oce.add(info=Info.NORMAL, keys=OpCodes.NORMAL) oce.add(info=Info.NORMAL, keys=OpCode.NORMAL)
oce.add(info=Info.REQ_OS_HK, keys=OpCodes.REQ_HK_ONCE) oce.add(info=Info.REQ_OS_HK, keys=OpCode.REQ_HK_ONCE)
oce.add(info=Info.DEBUG_ON, keys=OpCodes.DEBUG_ON) oce.add(info=Info.DEBUG_ON, keys=OpCode.DEBUG_ON)
oce.add(info=Info.DEBUG_OFF, keys=OpCodes.DEBUG_OFF) oce.add(info=Info.DEBUG_OFF, keys=OpCode.DEBUG_OFF)
defs.add_service( defs.add_service(
name=CustomServiceList.RAD_SENSOR.value, name=CustomServiceList.RAD_SENSOR.value,
info="Radiation Sensor", info="Radiation Sensor",
@ -68,31 +68,29 @@ def pack_rad_sensor_test_into(
): ):
q.add_log_cmd(f"Commanding Radiation sensor handler {object_id}") q.add_log_cmd(f"Commanding Radiation sensor handler {object_id}")
if op_code in OpCodes.ON: if op_code in OpCode.ON:
rad_sensor_mode_cmd(object_id, Modes.ON, Info.ON, q) rad_sensor_mode_cmd(object_id, Mode.ON, Info.ON, q)
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
rad_sensor_mode_cmd(object_id, Modes.NORMAL, Info.NORMAL, q) rad_sensor_mode_cmd(object_id, Mode.NORMAL, Info.NORMAL, q)
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
rad_sensor_mode_cmd(object_id, Modes.OFF, Info.OFF, q) rad_sensor_mode_cmd(object_id, Mode.OFF, Info.OFF, q)
if op_code in OpCodes.REQ_HK_ONCE: if op_code in OpCode.REQ_HK_ONCE:
q.add_log_cmd(f"Rad sensor: {Info.REQ_OS_HK}") q.add_log_cmd(f"Rad sensor: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(sid=make_sid(object_id.as_bytes, set_id=SetIds.HK)) generate_one_hk_command(sid=make_sid(object_id.as_bytes, set_id=SetId.HK))
) )
if op_code in OpCodes.DEBUG_ON: if op_code in OpCode.DEBUG_ON:
q.add_log_cmd(f"Rad sensor: {Info.DEBUG_ON}") q.add_log_cmd(f"Rad sensor: {Info.DEBUG_ON}")
command = object_id.as_bytes + struct.pack("!I", CommandIds.ENABLE_DEBUG_OUTPUT) command = object_id.as_bytes + struct.pack("!I", CommandId.ENABLE_DEBUG_OUTPUT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.DEBUG_OFF: if op_code in OpCode.DEBUG_OFF:
q.add_log_cmd(f"Rad sensor: {Info.DEBUG_OFF}") q.add_log_cmd(f"Rad sensor: {Info.DEBUG_OFF}")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack("!I", CommandId.DISABLE_DEBUG_OUTPUT)
"!I", CommandIds.DISABLE_DEBUG_OUTPUT
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def rad_sensor_mode_cmd( def rad_sensor_mode_cmd(
object_id: ObjectIdU32, mode: Modes, info: str, q: DefaultPusQueueHelper object_id: ObjectIdU32, mode: Mode, info: str, q: DefaultPusQueueHelper
): ):
q.add_log_cmd(f"Rad sensor: {info}") q.add_log_cmd(f"Rad sensor: {info}")
mode_data = pack_mode_data(object_id.as_bytes, mode, 0) mode_data = pack_mode_data(object_id.as_bytes, mode, 0)

View File

@ -1,14 +1,14 @@
from typing import Optional from typing import Optional
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.pus_tc.devs.pdec_handler import CommandIds from eive_tmtc.pus_tc.devs.pdec_handler import CommandId
from spacepackets.ecss import PusTelecommand from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_data, Subservice
import eive_tmtc.config.object_ids as oids import eive_tmtc.config.object_ids as oids
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
@ -32,7 +32,7 @@ RTD_IDS = [
] ]
class OpCodes: class OpCode:
ON = ["0", "on"] ON = ["0", "on"]
OFF = ["1", "off"] OFF = ["1", "off"]
NORMAL = ["2", "normal"] NORMAL = ["2", "normal"]
@ -49,9 +49,9 @@ class Info:
@tmtc_definitions_provider @tmtc_definitions_provider
def specify_rtd_cmds(defs: TmtcDefinitionWrapper): def specify_rtd_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.ON, info=Info.ON) oce.add(keys=OpCode.ON, info=Info.ON)
oce.add(keys=OpCodes.NORMAL, info=Info.NORMAL) oce.add(keys=OpCode.NORMAL, info=Info.NORMAL)
oce.add(keys=OpCodes.OFF, info=Info.OFF) oce.add(keys=OpCode.OFF, info=Info.OFF)
defs.add_service( defs.add_service(
name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce
) )
@ -67,35 +67,33 @@ def pack_rtd_commands(
tgt_rtd_idx = prompt_rtd_idx() tgt_rtd_idx = prompt_rtd_idx()
object_id_dict = get_object_ids() object_id_dict = get_object_ids()
object_id = object_id_dict.get(RTD_IDS[tgt_rtd_idx]) object_id = object_id_dict.get(RTD_IDS[tgt_rtd_idx])
if op_code in OpCodes.ON: if op_code in OpCode.ON:
app_data = pack_mode_data(object_id=object_id.as_bytes, mode=Mode.ON, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCode.NORMAL:
app_data = pack_mode_data( app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.ON, submode=0 object_id=object_id.as_bytes, mode=Mode.NORMAL, submode=0
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
) )
) )
if op_code in OpCodes.NORMAL: if op_code in OpCode.OFF:
app_data = pack_mode_data( app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.NORMAL, submode=0 object_id=object_id.as_bytes, mode=Mode.OFF, submode=0
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
) )
) )
if op_code in OpCodes.OFF: if op_code in OpCode.CONFIG_CMD:
app_data = pack_mode_data( command = object_id.as_bytes + CommandId.PRINT_CLCW
object_id=object_id.as_bytes, mode=Modes.OFF, submode=0
)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCodes.CONFIG_CMD:
command = object_id.as_bytes + CommandIds.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -5,10 +5,10 @@ from spacepackets.ecss import PusTelecommand
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_data, Subservice
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
from eive_tmtc.config.object_ids import SCEX_HANDLER_ID from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
@ -16,7 +16,7 @@ from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
USE_SCEX_CONF_FILE = True USE_SCEX_CONF_FILE = True
class OpCodes: class OpCode:
PING = ["0", "ping"] PING = ["0", "ping"]
ION_CMD = ["1", "ion"] ION_CMD = ["1", "ion"]
TEMP_CMD = ["2", "temp"] TEMP_CMD = ["2", "temp"]
@ -30,7 +30,7 @@ class OpCodes:
SWITCH_OFF = ["8", "off"] SWITCH_OFF = ["8", "off"]
class ActionIds(enum.IntEnum): class ActionId(enum.IntEnum):
PING = 7 PING = 7
ION_CMD = 4 ION_CMD = 4
TEMP_CMD = 3 TEMP_CMD = 3
@ -58,16 +58,16 @@ class Info:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_scex_cmds(defs: TmtcDefinitionWrapper): def add_scex_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.PING, info=Info.PING) oce.add(keys=OpCode.PING, info=Info.PING)
oce.add(keys=OpCodes.ION_CMD, info=Info.ION_CMD) oce.add(keys=OpCode.ION_CMD, info=Info.ION_CMD)
oce.add(keys=OpCodes.TEMP_CMD, info=Info.TEMP_CMD) oce.add(keys=OpCode.TEMP_CMD, info=Info.TEMP_CMD)
oce.add(keys=OpCodes.EXP_STATUS_CMD, info=Info.EXP_STATUS_CMD) oce.add(keys=OpCode.EXP_STATUS_CMD, info=Info.EXP_STATUS_CMD)
oce.add(keys=OpCodes.ONE_CELLS_CMD, info=Info.ONE_CELLS_CMD) oce.add(keys=OpCode.ONE_CELLS_CMD, info=Info.ONE_CELLS_CMD)
oce.add(keys=OpCodes.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD) oce.add(keys=OpCode.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD)
oce.add(keys=OpCodes.FRAM, info=Info.FRAM) oce.add(keys=OpCode.FRAM, info=Info.FRAM)
oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON) oce.add(keys=OpCode.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF) oce.add(keys=OpCode.SWITCH_OFF, info=Info.SWITCH_OFF)
defs.add_service( defs.add_service(
name=CustomServiceList.SCEX.value, info="SCEX Device", op_code_entry=oce name=CustomServiceList.SCEX.value, info="SCEX Device", op_code_entry=oce
@ -78,48 +78,46 @@ def add_scex_cmds(defs: TmtcDefinitionWrapper):
def pack_scex_cmds(p: ServiceProviderParams): def pack_scex_cmds(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in OpCodes.SWITCH_ON: if op_code in OpCode.SWITCH_ON:
q.add_log_cmd(Info.SWITCH_ON) q.add_log_cmd(Info.SWITCH_ON)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.ON, 0), app_data=pack_mode_data(SCEX_HANDLER_ID, Mode.ON, 0),
) )
) )
if op_code in OpCodes.SWITCH_OFF: if op_code in OpCode.SWITCH_OFF:
q.add_log_cmd(Info.SWITCH_OFF) q.add_log_cmd(Info.SWITCH_OFF)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.OFF, 0), app_data=pack_mode_data(SCEX_HANDLER_ID, Mode.OFF, 0),
) )
) )
if op_code in OpCodes.PING: if op_code in OpCode.PING:
q.add_log_cmd(Info.PING) q.add_log_cmd(Info.PING)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.PING, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.PING, app_data))
if op_code in OpCodes.ION_CMD: if op_code in OpCode.ION_CMD:
q.add_log_cmd(Info.ION_CMD) q.add_log_cmd(Info.ION_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ION_CMD, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.ION_CMD, app_data))
if op_code in OpCodes.TEMP_CMD: if op_code in OpCode.TEMP_CMD:
q.add_log_cmd(Info.TEMP_CMD) q.add_log_cmd(Info.TEMP_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc( q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.TEMP_CMD, app_data))
create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.TEMP_CMD, app_data)
)
if op_code in OpCodes.EXP_STATUS_CMD: if op_code in OpCode.EXP_STATUS_CMD:
q.add_log_cmd(Info.EXP_STATUS_CMD) q.add_log_cmd(Info.EXP_STATUS_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.EXP_STATUS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.EXP_STATUS_CMD, app_data)
) )
# one cell # one cell
if op_code in OpCodes.ONE_CELLS_CMD: if op_code in OpCode.ONE_CELLS_CMD:
q.add_log_cmd(Info.ONE_CELLS_CMD) q.add_log_cmd(Info.ONE_CELLS_CMD)
app_data = bytearray([0]) app_data = bytearray([0])
@ -164,10 +162,10 @@ def pack_scex_cmds(p: ServiceProviderParams):
app_data.append(dac_weight3[cn]) app_data.append(dac_weight3[cn])
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ONE_CELLS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.ONE_CELLS_CMD, app_data)
) )
if op_code in OpCodes.ALL_CELLS_CMD: if op_code in OpCode.ALL_CELLS_CMD:
q.add_log_cmd(Info.ALL_CELLS_CMD) q.add_log_cmd(Info.ALL_CELLS_CMD)
app_data = bytearray([0]) app_data = bytearray([0])
@ -196,13 +194,13 @@ def pack_scex_cmds(p: ServiceProviderParams):
app_data.append(dac_weight3[cn]) app_data.append(dac_weight3[cn])
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ALL_CELLS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.ALL_CELLS_CMD, app_data)
) )
if op_code in OpCodes.FRAM: if op_code in OpCode.FRAM:
q.add_log_cmd(Info.FRAM) q.add_log_cmd(Info.FRAM)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(create_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.FRAM, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.FRAM, app_data))
def append_16_bit_val(packet: bytearray, val: int): def append_16_bit_val(packet: bytearray, val: int):

View File

@ -5,10 +5,11 @@
@author J. Meier @author J. Meier
@date 14.08.2021 @date 14.08.2021
""" """
import enum
import struct import struct
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -19,7 +20,7 @@ from eive_tmtc.utility.input_helper import InputHelper
LOGGER = get_console_logger() LOGGER = get_console_logger()
class StarTrackerActionIds: class StarTrackerActionId(enum.IntEnum):
PING = 0 PING = 0
BOOT = 1 BOOT = 1
REQ_VERSION = 2 REQ_VERSION = 2
@ -163,77 +164,77 @@ def pack_star_tracker_commands(
obyt = object_id.as_bytes obyt = object_id.as_bytes
if op_code == "0": if op_code == "0":
q.add_log_cmd("Star tracker: Mode On, Submode Bootloader") q.add_log_cmd("Star tracker: Mode On, Submode Bootloader")
data = pack_mode_data(obyt, Modes.ON, Submode.BOOTLOADER) data = pack_mode_data(obyt, Mode.ON, Submode.BOOTLOADER)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "1": if op_code == "1":
q.add_log_cmd("Star tracker: Mode On, Submode Firmware") q.add_log_cmd("Star tracker: Mode On, Submode Firmware")
data = pack_mode_data(obyt, Modes.ON, Submode.FIRMWARE) data = pack_mode_data(obyt, Mode.ON, Submode.FIRMWARE)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "2": if op_code == "2":
q.add_log_cmd("Star tracker: Mode Normal") q.add_log_cmd("Star tracker: Mode Normal")
data = pack_mode_data(obyt, Modes.NORMAL, 0) data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3": if op_code == "3":
q.add_log_cmd("Star tracker: Mode Off") q.add_log_cmd("Star tracker: Mode Off")
data = pack_mode_data(obyt, Modes.OFF, 0) data = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "4": if op_code == "4":
q.add_log_cmd("Star tracker: Mode Raw") q.add_log_cmd("Star tracker: Mode Raw")
data = pack_mode_data(obyt, Modes.RAW, 0) data = pack_mode_data(obyt, Mode.RAW, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "5": if op_code == "5":
q.add_log_cmd("Star tracker: Ping") q.add_log_cmd("Star tracker: Ping")
data = obyt + struct.pack("!I", StarTrackerActionIds.PING) data = obyt + struct.pack("!I", StarTrackerActionId.PING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6": if op_code == "6":
q.add_log_cmd("Star tracker: Switch to bootloader program") q.add_log_cmd("Star tracker: Switch to bootloader program")
data = obyt + struct.pack( data = obyt + struct.pack(
"!I", StarTrackerActionIds.SWITCH_TO_BOOTLOADER_PROGRAM "!I", StarTrackerActionId.SWITCH_TO_BOOTLOADER_PROGRAM
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "7": if op_code == "7":
q.add_log_cmd("Star tracker: Temperature request") q.add_log_cmd("Star tracker: Temperature request")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TEMPERATURE) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TEMPERATURE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8": if op_code == "8":
q.add_log_cmd("Star tracker: Request version") q.add_log_cmd("Star tracker: Request version")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VERSION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VERSION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "9": if op_code == "9":
q.add_log_cmd("Star tracker: Request interface") q.add_log_cmd("Star tracker: Request interface")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_INTERFACE) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_INTERFACE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10": if op_code == "10":
q.add_log_cmd("Star tracker: Request power") q.add_log_cmd("Star tracker: Request power")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_POWER) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_POWER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "11": if op_code == "11":
q.add_log_cmd("Star tracker: Set subscription parameters") q.add_log_cmd("Star tracker: Set subscription parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SUBSCRIPTION) + struct.pack("!I", StarTrackerActionId.SUBSCRIPTION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12": if op_code == "12":
q.add_log_cmd("Star tracker: Boot") q.add_log_cmd("Star tracker: Boot")
data = obyt + struct.pack("!I", StarTrackerActionIds.BOOT) data = obyt + struct.pack("!I", StarTrackerActionId.BOOT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "13": if op_code == "13":
q.add_log_cmd("Star tracker: Request time") q.add_log_cmd("Star tracker: Request time")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TIME) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TIME)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "14": if op_code == "14":
q.add_log_cmd("Star tracker: Request solution") q.add_log_cmd("Star tracker: Request solution")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SOLUTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SOLUTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "15": if op_code == "15":
q.add_log_cmd("Star tracker: Upload image") q.add_log_cmd("Star tracker: Upload image")
image = get_upload_image() image = get_upload_image()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.UPLOAD_IMAGE)
+ bytearray(image, "utf-8") + bytearray(image, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -244,7 +245,7 @@ def pack_star_tracker_commands(
path = FileDefs.download_path path = FileDefs.download_path
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_IMAGE)
+ bytearray(path, "utf-8") + bytearray(path, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -253,7 +254,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LIMITS) + struct.pack("!I", StarTrackerActionId.LIMITS)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -262,7 +263,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.TRACKING) + struct.pack("!I", StarTrackerActionId.TRACKING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -271,7 +272,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.MOUNTING) + struct.pack("!I", StarTrackerActionId.MOUNTING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -280,7 +281,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -289,7 +290,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CENTROIDING) + struct.pack("!I", StarTrackerActionId.CENTROIDING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -298,7 +299,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LISA) + struct.pack("!I", StarTrackerActionId.LISA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -307,7 +308,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.MATCHING) + struct.pack("!I", StarTrackerActionId.MATCHING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -316,7 +317,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.VALIDATION) + struct.pack("!I", StarTrackerActionId.VALIDATION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -325,7 +326,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.ALGO) + struct.pack("!I", StarTrackerActionId.ALGO)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -334,37 +335,37 @@ def pack_star_tracker_commands(
actionid = int(input("Specify parameter ID (take image - 4): ")) actionid = int(input("Specify parameter ID (take image - 4): "))
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.TAKE_IMAGE) + struct.pack("!I", StarTrackerActionId.TAKE_IMAGE)
+ struct.pack("!B", actionid) + struct.pack("!B", actionid)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "28": if op_code == "28":
q.add_log_cmd("Star tracker: Stop str helper") q.add_log_cmd("Star tracker: Stop str helper")
data = obyt + struct.pack("!I", StarTrackerActionIds.STOP_STR_HELPER) data = obyt + struct.pack("!I", StarTrackerActionId.STOP_STR_HELPER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "30": if op_code == "30":
q.add_log_cmd("Star tracker: Set name of download image") q.add_log_cmd("Star tracker: Set name of download image")
filename = input("Specify download image name: ") filename = input("Specify download image name: ")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_DOWNLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.CHANGE_DOWNLOAD_IMAGE)
+ bytearray(filename, "utf-8") + bytearray(filename, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "31": if op_code == "31":
q.add_log_cmd("Star tracker: Request histogram") q.add_log_cmd("Star tracker: Request histogram")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_HISTOGRAM) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_HISTOGRAM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "32": if op_code == "32":
q.add_log_cmd("Star tracker: Request contrast") q.add_log_cmd("Star tracker: Request contrast")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CONTRAST) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CONTRAST)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "33": if op_code == "33":
q.add_log_cmd("Star tracker: Set json filename") q.add_log_cmd("Star tracker: Set json filename")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME) + struct.pack("!I", StarTrackerActionId.SET_JSON_FILE_NAME)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -377,7 +378,7 @@ def pack_star_tracker_commands(
filename = input("Specify filename: ") filename = input("Specify filename: ")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_FLASH_READ_FILENAME) + struct.pack("!I", StarTrackerActionId.SET_FLASH_READ_FILENAME)
+ bytearray(filename, "utf-8") + bytearray(filename, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -390,7 +391,7 @@ def pack_star_tracker_commands(
unix_time = 1640783543 unix_time = 1640783543
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_TIME) + struct.pack("!I", StarTrackerActionId.SET_TIME)
+ struct.pack("!Q", unix_time) + struct.pack("!Q", unix_time)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -399,7 +400,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_CENTROID) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_CENTROID)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -408,7 +409,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_MATCHED_STAR) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_MATCHED_STAR)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -417,7 +418,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_DBIMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_DBIMAGE)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -427,7 +428,7 @@ def pack_star_tracker_commands(
type = 1 # 0 - normal, 1 - fast type = 1 # 0 - normal, 1 - fast
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_BLOBPIXEL) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_BLOBPIXEL)
+ struct.pack("!B", id) + struct.pack("!B", id)
+ struct.pack("!B", type) + struct.pack("!B", type)
) )
@ -438,7 +439,7 @@ def pack_star_tracker_commands(
length = int(input("Size to download: ")) length = int(input("Size to download: "))
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_FPGA_IMAGE)
+ struct.pack("!I", position) + struct.pack("!I", position)
+ struct.pack("!I", length) + struct.pack("!I", length)
+ bytearray(FileDefs.downloadFpgaImagePath, "utf-8") + bytearray(FileDefs.downloadFpgaImagePath, "utf-8")
@ -448,7 +449,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: Change donwload FPGA image file name") q.add_log_cmd("Star tracker: Change donwload FPGA image file name")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE) + struct.pack("!I", StarTrackerActionId.CHANGE_FPGA_DOWNLOAD_FILE)
+ bytearray(FileDefs.downloadFpgaImageName, "utf-8") + bytearray(FileDefs.downloadFpgaImageName, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -456,7 +457,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: Upload FPGA image") q.add_log_cmd("Star tracker: Upload FPGA image")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionId.UPLOAD_FPGA_IMAGE)
+ bytearray(FileDefs.uploadFpgaImageName, "utf-8") + bytearray(FileDefs.uploadFpgaImageName, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -465,28 +466,28 @@ def pack_star_tracker_commands(
id = 3 id = 3
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.FPGA_ACTION) + struct.pack("!I", StarTrackerActionId.FPGA_ACTION)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "48": if op_code == "48":
q.add_log_cmd("Star tracker: Unlock") q.add_log_cmd("Star tracker: Unlock")
data = obyt + struct.pack("!I", StarTrackerActionIds.UNLOCK) data = obyt + struct.pack("!I", StarTrackerActionId.UNLOCK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "49": if op_code == "49":
q.add_log_cmd("Star tracker: Request camera parameters") q.add_log_cmd("Star tracker: Request camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CAMERA_PARAMS) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CAMERA_PARAMS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "50": if op_code == "50":
q.add_log_cmd("Star tracker: Request limits") q.add_log_cmd("Star tracker: Request limits")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LIMITS) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LIMITS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "51": if op_code == "51":
q.add_log_cmd("Star tracker: Set image processor parameters") q.add_log_cmd("Star tracker: Set image processor parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.IMAGE_PROCESSOR) + struct.pack("!I", StarTrackerActionId.IMAGE_PROCESSOR)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -494,7 +495,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: EGSE load ground config camera parameters") q.add_log_cmd("Star tracker: EGSE load ground config camera parameters")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_ground_config, "utf-8") + bytearray(FileDefs.egse_ground_config, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -502,64 +503,64 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: EGSE load flight config camera parameters") q.add_log_cmd("Star tracker: EGSE load flight config camera parameters")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_flight_config, "utf-8") + bytearray(FileDefs.egse_flight_config, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "54": if op_code == "54":
q.add_log_cmd("Star tracker: Request log level parameters") q.add_log_cmd("Star tracker: Request log level parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_LEVEL) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_LEVEL)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "55": if op_code == "55":
q.add_log_cmd("Star tracker: Request mounting parameters") q.add_log_cmd("Star tracker: Request mounting parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MOUNTING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MOUNTING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "56": if op_code == "56":
q.add_log_cmd("Star tracker: Request image processor parameters") q.add_log_cmd("Star tracker: Request image processor parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_IMAGE_PROCESSOR) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_IMAGE_PROCESSOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "57": if op_code == "57":
q.add_log_cmd("Star tracker: Request centroiding parameters") q.add_log_cmd("Star tracker: Request centroiding parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CENTROIDING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CENTROIDING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "58": if op_code == "58":
q.add_log_cmd("Star tracker: Request lisa parameters") q.add_log_cmd("Star tracker: Request lisa parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LISA) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LISA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "59": if op_code == "59":
q.add_log_cmd("Star tracker: Request matching parameters") q.add_log_cmd("Star tracker: Request matching parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MATCHING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MATCHING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "60": if op_code == "60":
q.add_log_cmd("Star tracker: Request tracking parameters") q.add_log_cmd("Star tracker: Request tracking parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TRACKING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TRACKING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "61": if op_code == "61":
q.add_log_cmd("Star tracker: Request validation parameters") q.add_log_cmd("Star tracker: Request validation parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VALIDATION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VALIDATION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "62": if op_code == "62":
q.add_log_cmd("Star tracker: Request algo parameters") q.add_log_cmd("Star tracker: Request algo parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_ALGO) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_ALGO)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "63": if op_code == "63":
q.add_log_cmd("Star tracker: Request subscription parameters") q.add_log_cmd("Star tracker: Request subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SUBSCRIPTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "64": if op_code == "64":
q.add_log_cmd("Star tracker: Request log subscription parameters") q.add_log_cmd("Star tracker: Request log subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_SUBSCRIPTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "65": if op_code == "65":
q.add_log_cmd("Star tracker: Request debug camera parameters") q.add_log_cmd("Star tracker: Request debug camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_DEBUG_CAMERA) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_DEBUG_CAMERA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "66": if op_code == "66":
q.add_log_cmd("Star tracker: Set log level parameters") q.add_log_cmd("Star tracker: Set log level parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LOGLEVEL) + struct.pack("!I", StarTrackerActionId.LOGLEVEL)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -569,7 +570,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LOG_SUBSCRIPTION) + struct.pack("!I", StarTrackerActionId.LOG_SUBSCRIPTION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -578,7 +579,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DEBUG_CAMERA) + struct.pack("!I", StarTrackerActionId.DEBUG_CAMERA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -587,20 +588,20 @@ def pack_star_tracker_commands(
firmware = get_firmware() firmware = get_firmware()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.FIRMWARE_UPDATE) + struct.pack("!I", StarTrackerActionId.FIRMWARE_UPDATE)
+ bytearray(firmware, "utf-8") + bytearray(firmware, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "70": if op_code == "70":
q.add_log_cmd("Star tracker: Disable timestamp generation") q.add_log_cmd("Star tracker: Disable timestamp generation")
command = obyt + struct.pack( command = obyt + struct.pack(
"!I", StarTrackerActionIds.DISBALE_TIMESTAMP_GENERATION "!I", StarTrackerActionId.DISBALE_TIMESTAMP_GENERATION
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "71": if op_code == "71":
q.add_log_cmd("Star tracker: Enable timestamp generation") q.add_log_cmd("Star tracker: Enable timestamp generation")
command = obyt + struct.pack( command = obyt + struct.pack(
"!I", StarTrackerActionIds.ENABLE_TIMESTAMP_GENERATION "!I", StarTrackerActionId.ENABLE_TIMESTAMP_GENERATION
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@ -613,7 +614,7 @@ def pack_read_command(object_id: bytes) -> bytearray:
path = FileDefs.download_path path = FileDefs.download_path
data = ( data = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.FLASH_READ) + struct.pack("!I", StarTrackerActionId.FLASH_READ)
+ struct.pack("!B", start_region) + struct.pack("!B", start_region)
+ struct.pack("!I", size) + struct.pack("!I", size)
+ bytearray(path, "utf-8") + bytearray(path, "utf-8")
@ -627,7 +628,7 @@ def pack_checksum_command(object_id: bytes) -> bytearray:
size = PartitionSize.STAR_TRACKER_FIRMWARE size = PartitionSize.STAR_TRACKER_FIRMWARE
data = ( data = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.CHECKSUM) + struct.pack("!I", StarTrackerActionId.CHECKSUM)
+ struct.pack("!B", start_region) + struct.pack("!B", start_region)
+ struct.pack("!I", address) + struct.pack("!I", address)
+ struct.pack("!I", size) + struct.pack("!I", size)

View File

@ -1,2 +1,2 @@
class SetIds: class SetId:
HK = 3 HK = 3

View File

@ -5,6 +5,8 @@
@author J. Meier @author J. Meier
@date 13.12.2020 @date 13.12.2020
""" """
import enum
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
@ -14,18 +16,18 @@ from tmtccmd.config.tmtc import (
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
import struct import struct
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class SetIds: class SetId:
RX_REGISTERS_DATASET = 1 RX_REGISTERS_DATASET = 1
TX_REGISTERS_DATASET = 2 TX_REGISTERS_DATASET = 2
class OpCodes: class OpCode:
OFF = "off" OFF = "off"
ON = "on" ON = "on"
NORMAL = "nml" NORMAL = "nml"
@ -46,7 +48,7 @@ class Info:
SET_CW = "Set TX carrier wave" SET_CW = "Set TX carrier wave"
class CommandIds: class CommandId(enum.IntEnum):
READ_RX_STATUS_REGISTERS = 2 READ_RX_STATUS_REGISTERS = 2
SET_TX_MODE_STANDBY = 3 SET_TX_MODE_STANDBY = 3
SET_TX_MODE_MODULATION = 4 SET_TX_MODE_MODULATION = 4
@ -67,16 +69,16 @@ class CommandIds:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_syrlinks_cmds(defs: TmtcDefinitionWrapper): def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, "Syrlinks Handler: Set mode off") oce.add(OpCode.OFF, "Syrlinks Handler: Set mode off")
oce.add(OpCodes.ON, "Syrlinks Handler: Set mode on") oce.add(OpCode.ON, "Syrlinks Handler: Set mode on")
oce.add(OpCodes.NORMAL, "Syrlinks Handler: Set mode normal") oce.add(OpCode.NORMAL, "Syrlinks Handler: Set mode normal")
oce.add(OpCodes.STANDBY, "Syrlinks Handler: Set TX standby") oce.add(OpCode.STANDBY, "Syrlinks Handler: Set TX standby")
oce.add(OpCodes.MODULATION, "Syrlinks Handler: Set TX modulation") oce.add(OpCode.MODULATION, "Syrlinks Handler: Set TX modulation")
oce.add(OpCodes.HK_RX_REGS, Info.HK_RX_REGS) oce.add(OpCode.HK_RX_REGS, Info.HK_RX_REGS)
oce.add(OpCodes.HK_TX_REGS, Info.HK_TX_REGS) oce.add(OpCode.HK_TX_REGS, Info.HK_TX_REGS)
oce.add(OpCodes.SET_CW, Info.SET_CW) oce.add(OpCode.SET_CW, Info.SET_CW)
oce.add(OpCodes.TX_STATUS, Info.TX_STATUS) oce.add(OpCode.TX_STATUS, Info.TX_STATUS)
oce.add(OpCodes.RX_STATUS, Info.RX_STATUS) oce.add(OpCode.RX_STATUS, Info.RX_STATUS)
oce.add("7", "Syrlinks Handler: Read TX waveform") oce.add("7", "Syrlinks Handler: Read TX waveform")
oce.add("8", "Syrlinks Handler: Read TX AGC value high byte") oce.add("8", "Syrlinks Handler: Read TX AGC value high byte")
oce.add("9", "Syrlinks Handler: Read TX AGC value low byte") oce.add("9", "Syrlinks Handler: Read TX AGC value low byte")
@ -96,83 +98,83 @@ def pack_syrlinks_command(
obyt = object_id.as_bytes obyt = object_id.as_bytes
prefix = "Syrlinks" prefix = "Syrlinks"
q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}") q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if op_code == OpCodes.OFF: if op_code == OpCode.OFF:
q.add_log_cmd(f"{prefix}: Set mode off") q.add_log_cmd(f"{prefix}: Set mode off")
data = pack_mode_data(obyt, Modes.OFF, 0) data = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCodes.ON: if op_code == OpCode.ON:
q.add_log_cmd(f"{prefix}: Set mode on") q.add_log_cmd(f"{prefix}: Set mode on")
data = pack_mode_data(obyt, Modes.ON, 0) data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCodes.NORMAL: if op_code == OpCode.NORMAL:
q.add_log_cmd(f"{prefix}: Mode Normal") q.add_log_cmd(f"{prefix}: Mode Normal")
data = pack_mode_data(obyt, Modes.NORMAL, 0) data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == OpCodes.STANDBY: if op_code == OpCode.STANDBY:
q.add_log_cmd(f"{prefix}: Set TX mode standby") q.add_log_cmd(f"{prefix}: Set TX mode standby")
data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_STANDBY) data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_STANDBY)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == OpCodes.MODULATION: if op_code == OpCode.MODULATION:
q.add_log_cmd(f"{prefix}: Set TX mode modulation") q.add_log_cmd(f"{prefix}: Set TX mode modulation")
data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_MODULATION) data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_MODULATION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.SET_CW: if op_code in OpCode.SET_CW:
q.add_log_cmd(f"{prefix}: {Info.SET_CW}") q.add_log_cmd(f"{prefix}: {Info.SET_CW}")
data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_CW) data = obyt + struct.pack("!I", CommandId.SET_TX_MODE_CW)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.HK_RX_REGS: if op_code in OpCode.HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}") q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}")
sid = make_sid(obyt, SetIds.RX_REGISTERS_DATASET) sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.HK_TX_REGS: if op_code in OpCode.HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}") q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}")
sid = make_sid(obyt, SetIds.TX_REGISTERS_DATASET) sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.TX_STATUS: if op_code in OpCode.TX_STATUS:
q.add_log_cmd(f"{prefix}: {Info.TX_STATUS}") q.add_log_cmd(f"{prefix}: {Info.TX_STATUS}")
command = obyt + struct.pack("!I", CommandIds.READ_TX_STATUS) command = obyt + struct.pack("!I", CommandId.READ_TX_STATUS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9": if op_code == "9":
q.add_log_cmd("Syrlinks: Read TX waveform") q.add_log_cmd("Syrlinks: Read TX waveform")
command = obyt + struct.pack("!I", CommandIds.READ_TX_WAVEFORM) command = obyt + struct.pack("!I", CommandId.READ_TX_WAVEFORM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "10": if op_code == "10":
q.add_log_cmd("Syrlinks: Read TX AGC value high byte") q.add_log_cmd("Syrlinks: Read TX AGC value high byte")
command = obyt + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_HIGH_BYTE) command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_HIGH_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11": if op_code == "11":
q.add_log_cmd("Syrlinks: Read TX AGC value low byte") q.add_log_cmd("Syrlinks: Read TX AGC value low byte")
command = obyt + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_LOW_BYTE) command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_LOW_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12": if op_code == "12":
q.add_log_cmd("Syrlinks: Write LCL config") q.add_log_cmd("Syrlinks: Write LCL config")
command = obyt + struct.pack("!I", CommandIds.WRITE_LCL_CONFIG) command = obyt + struct.pack("!I", CommandId.WRITE_LCL_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "13": if op_code == "13":
q.add_log_cmd("Syrlinks: Read RX status registers") q.add_log_cmd("Syrlinks: Read RX status registers")
command = obyt + struct.pack("!I", CommandIds.READ_RX_STATUS_REGISTERS) command = obyt + struct.pack("!I", CommandId.READ_RX_STATUS_REGISTERS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "14": if op_code == "14":
q.add_log_cmd("Syrlinks: Read LCL config register") q.add_log_cmd("Syrlinks: Read LCL config register")
command = obyt + struct.pack("!I", CommandIds.READ_LCL_CONFIG_REGISTER) command = obyt + struct.pack("!I", CommandId.READ_LCL_CONFIG_REGISTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "15": if op_code == "15":
q.add_log_cmd("Syrlinks: Set waveform OQPSK") q.add_log_cmd("Syrlinks: Set waveform OQPSK")
command = obyt + struct.pack("!I", CommandIds.SET_WAVEFORM_OQPSK) command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_OQPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "16": if op_code == "16":
q.add_log_cmd("Syrlinks: Set waveform BPSK") q.add_log_cmd("Syrlinks: Set waveform BPSK")
command = obyt + struct.pack("!I", CommandIds.SET_WAVEFORM_BPSK) command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_BPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "17": if op_code == "17":
q.add_log_cmd("Syrlinks: Set second config") q.add_log_cmd("Syrlinks: Set second config")
command = obyt + struct.pack("!I", CommandIds.SET_SECOND_CONFIG) command = obyt + struct.pack("!I", CommandId.SET_SECOND_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "18": if op_code == "18":
q.add_log_cmd("Syrlinks: Enable debug printout") q.add_log_cmd("Syrlinks: Enable debug printout")
command = obyt + struct.pack("!I", CommandIds.ENABLE_DEBUG) command = obyt + struct.pack("!I", CommandId.ENABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "19": if op_code == "19":
q.add_log_cmd("Syrlinks: Disable debug printout") q.add_log_cmd("Syrlinks: Disable debug printout")
command = obyt + struct.pack("!I", CommandIds.DISABLE_DEBUG) command = obyt + struct.pack("!I", CommandId.DISABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -5,10 +5,13 @@
@author J. Meier @author J. Meier
@date 06.01.2021 @date 06.01.2021
""" """
import enum
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.pus_tc.service_200_mode import pack_mode_data from eive_tmtc.pus_tc.service_200_mode import pack_mode_data
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.pus.s8_fsfw_funccmd import make_action_id
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
@ -28,9 +31,9 @@ class Tmp1075TestProcedure:
set_mode_on = False # If mode is MODE_ON, temperature will only be read on command set_mode_on = False # If mode is MODE_ON, temperature will only be read on command
class Tmp1075ActionIds: class Tmp1075ActionId(enum.IntEnum):
get_temp = bytearray([0x0, 0x0, 0x0, 0x01]) GET_TEMP = 1
start_adc_conversion = bytearray([0x0, 0x0, 0x0, 0x02]) START_ADC_CONV = 2
def pack_tmp1075_test_into( def pack_tmp1075_test_into(
@ -42,21 +45,21 @@ def pack_tmp1075_test_into(
obyt = object_id.as_bytes obyt = object_id.as_bytes
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion: if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion:
q.add_log_cmd("TMP1075: Starting new temperature conversion") q.add_log_cmd("TMP1075: Starting new temperature conversion")
command = obyt + Tmp1075ActionIds.start_adc_conversion command = obyt + make_action_id(Tmp1075ActionId.GET_TEMP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp: if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp:
q.add_log_cmd("TMP1075: Read temperature") q.add_log_cmd("TMP1075: Read temperature")
command = obyt + Tmp1075ActionIds.get_temp command = obyt + make_action_id(Tmp1075ActionId.START_ADC_CONV)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.set_mode_normal: if Tmp1075TestProcedure.set_mode_normal:
q.add_log_cmd("TMP1075: Set Mode Normal") q.add_log_cmd("TMP1075: Set Mode Normal")
mode_data = pack_mode_data(obyt, Modes.NORMAL, 0) mode_data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if Tmp1075TestProcedure.set_mode_on: if Tmp1075TestProcedure.set_mode_on:
q.add_log_cmd("TMP1075: Set Mode On") q.add_log_cmd("TMP1075: Set Mode On")
mode_data = pack_mode_data(obyt, Modes.ON, 0) mode_data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
return q return q

View File

@ -9,6 +9,7 @@ from eive_tmtc.pus_tc.system.controllers import (
pack_cmd_ctrl_to_prompted_mode, pack_cmd_ctrl_to_prompted_mode,
get_object_from_op_code, get_object_from_op_code,
) )
from eive_tmtc.tmtc.tcs import pack_tcs_sys_commands
from tmtccmd import DefaultProcedureInfo, TcHandlerBase from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.config import CoreServiceList from tmtccmd.config import CoreServiceList
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
@ -20,7 +21,6 @@ from tmtccmd.tc.decorator import (
from tmtccmd.tc.pus_5_event import ( from tmtccmd.tc.pus_5_event import (
pack_generic_service_5_test_into, pack_generic_service_5_test_into,
) )
from tmtccmd.pus.s17_test import pack_service_17_ping_command
from eive_tmtc.pus_tc.service_200_mode import pack_service_200_test_into from eive_tmtc.pus_tc.service_200_mode import pack_service_200_test_into
from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds
@ -37,15 +37,13 @@ from eive_tmtc.tmtc.acs.reaction_wheels import (
from eive_tmtc.pus_tc.devs.rad_sensor import pack_rad_sensor_test_into from eive_tmtc.pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
from eive_tmtc.tmtc.payload.ploc_memory_dumper import pack_ploc_memory_dumper_cmd from eive_tmtc.tmtc.payload.ploc_memory_dumper import pack_ploc_memory_dumper_cmd
from eive_tmtc.pus_tc.devs.ccsds_handler import pack_ccsds_handler_test from eive_tmtc.pus_tc.devs.ccsds_handler import pack_ccsds_handler_test
from eive_tmtc.pus_tc.system.core import pack_core_commands from eive_tmtc.tmtc.core import pack_core_commands
from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import pack_syrlinks_command from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import pack_syrlinks_command
from eive_tmtc.pus_tc.devs.gps import pack_gps_command from eive_tmtc.pus_tc.devs.gps import pack_gps_command
from eive_tmtc.tmtc.acs.acs_board import pack_acs_command from eive_tmtc.tmtc.acs.acs_board import pack_acs_command
from eive_tmtc.tmtc.acs.sus_board import pack_sus_cmds
from eive_tmtc.pus_tc.devs.plpcdu import pack_pl_pcdu_commands from eive_tmtc.pus_tc.devs.plpcdu import pack_pl_pcdu_commands
from eive_tmtc.pus_tc.devs.str_img_helper import pack_str_img_helper_command from eive_tmtc.pus_tc.devs.str_img_helper import pack_str_img_helper_command
from eive_tmtc.pus_tc.system.tcs import pack_tcs_sys_commands
from eive_tmtc.pus_tc.system.proc import pack_proc_commands from eive_tmtc.pus_tc.system.proc import pack_proc_commands
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import ( from eive_tmtc.config.object_ids import (

View File

@ -7,7 +7,7 @@
""" """
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from eive_tmtc.config.object_ids import TEST_DEVICE_ID from eive_tmtc.config.object_ids import TEST_DEVICE_ID
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
@ -19,17 +19,17 @@ def pack_service_200_test_into(q: DefaultPusQueueHelper):
obj_id = TEST_DEVICE_OBJ_ID obj_id = TEST_DEVICE_OBJ_ID
# Set On Mode # Set On Mode
q.add_log_cmd("Testing Service 200: Set Mode On") q.add_log_cmd("Testing Service 200: Set Mode On")
mode_data = pack_mode_data(obj_id, Modes.ON, 0) mode_data = pack_mode_data(obj_id, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Normal mode # Set Normal mode
q.add_log_cmd("Testing Service 200: Set Mode Normal") q.add_log_cmd("Testing Service 200: Set Mode Normal")
mode_data = pack_mode_data(obj_id, Modes.NORMAL, 0) mode_data = pack_mode_data(obj_id, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Raw Mode # Set Raw Mode
q.add_log_cmd("Testing Service 200: Set Mode Raw") q.add_log_cmd("Testing Service 200: Set Mode Raw")
mode_data = pack_mode_data(obj_id, Modes.RAW, 0) mode_data = pack_mode_data(obj_id, Mode.RAW, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Off Mode # Set Off Mode
q.add_log_cmd("Testing Service 200: Set Mode Off") q.add_log_cmd("Testing Service 200: Set Mode Off")
mode_data = pack_mode_data(obj_id, Modes.OFF, 0) mode_data = pack_mode_data(obj_id, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))

View File

@ -1,14 +1,14 @@
from typing import Union from typing import Union
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
class OpCodes: class OpCode:
THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "ctrl-th"] THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "ctrl-th"]
CORE_CONTROLLER = [obj_ids.CORE_CONTROLLER_ID.hex(), "ctrl-core"] CORE_CONTROLLER = [obj_ids.CORE_CONTROLLER_ID.hex(), "ctrl-core"]
@ -54,7 +54,7 @@ def pack_cmd_ctrl_to_off(
): ):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} OFF", info=f"Commanding {object_id} OFF",
@ -64,7 +64,7 @@ def pack_cmd_ctrl_to_off(
def pack_cmd_ctrl_to_on(q: DefaultPusQueueHelper, object_id: ObjectIdU32): def pack_cmd_ctrl_to_on(q: DefaultPusQueueHelper, object_id: ObjectIdU32):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.ON, mode=Mode.ON,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} ON", info=f"Commanding {object_id} ON",
@ -76,7 +76,7 @@ def pack_cmd_ctrl_to_nml(
): ):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} NORMAL", info=f"Commanding {object_id} NORMAL",
@ -89,7 +89,7 @@ def get_object_from_op_code(op_code: str):
except: except:
pass pass
if op_code in OpCodes.THERMAL_CONTROLLER: if op_code in OpCode.THERMAL_CONTROLLER:
return obj_ids.THERMAL_CONTROLLER_ID return obj_ids.THERMAL_CONTROLLER_ID
if op_code in OpCodes.CORE_CONTROLLER: if op_code in OpCode.CORE_CONTROLLER:
return obj_ids.CORE_CONTROLLER_ID return obj_ids.CORE_CONTROLLER_ID

View File

@ -5,13 +5,11 @@ from datetime import timedelta
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
from eive_tmtc.pus_tc.system.tcs import pack_tcs_sys_commands
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.pus.s11_tc_sched import (
from tmtccmd.tc.pus_11_tc_sched import (
create_time_tagged_cmd, create_time_tagged_cmd,
create_enable_tc_sched_cmd, create_enable_tc_sched_cmd,
create_reset_tc_sched_cmd, create_reset_tc_sched_cmd,
@ -19,22 +17,22 @@ from tmtccmd.tc.pus_11_tc_sched import (
from tmtccmd.tc.pus_3_fsfw_hk import * from tmtccmd.tc.pus_3_fsfw_hk import *
import eive_tmtc.config.object_ids as oids import eive_tmtc.config.object_ids as oids
from eive_tmtc.pus_tc.system.tcs import OpCodes as TcsOpCodes from eive_tmtc.tmtc.tcs import OpCode as TcsOpCodes, pack_tcs_sys_commands
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetIds from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.pus_tc.system.core import SetIds as CoreSetIds from eive_tmtc.tmtc.core import SetId as CoreSetIds
from eive_tmtc.tmtc.power.common_power import SetIds as GsSetIds from eive_tmtc.tmtc.power.common_power import SetId as GsSetIds
from eive_tmtc.pus_tc.devs.rad_sensor import SetIds as RadSetIds from eive_tmtc.pus_tc.devs.rad_sensor import SetId as RadSetIds
from eive_tmtc.pus_tc.devs.mgms import MgmLis3SetIds as MgmLis3SetIds_0_2 from eive_tmtc.pus_tc.devs.mgms import MgmLis3SetId as MgmLis3SetIds_0_2
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetIds as MgmRm3100SetIds_1_3 from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId as MgmRm3100SetIds_1_3
from eive_tmtc.pus_tc.devs.gyros import AdisGyroSetIds as AdisGyroSetIds_0_2 from eive_tmtc.pus_tc.devs.gyros import AdisGyroSetId as AdisGyroSetIds_0_2
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetIds as L3gGyroSetIds_1_3 from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId as L3gGyroSetIds_1_3
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetIds as SyrlinksSetIds from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetId as SyrlinksSetIds
from eive_tmtc.pus_tc.devs.gps import SetIds as GpsSetIds from eive_tmtc.pus_tc.devs.gps import SetId as GpsSetIds
from eive_tmtc.tmtc.acs.imtq import ImtqSetIds from eive_tmtc.tmtc.acs.imtq import ImtqSetId
from eive_tmtc.pus_tc.devs.sus import SetIds from eive_tmtc.pus_tc.devs.sus import SetId
from eive_tmtc.pus_tc.devs.star_tracker import SetIds as StrSetIds from eive_tmtc.pus_tc.devs.star_tracker import SetIds as StrSetIds
from eive_tmtc.tmtc.acs.reaction_wheels import ( from eive_tmtc.tmtc.acs.reaction_wheels import (
RwSetIds, RwSetId,
rw_speed_up_cmd_consec, rw_speed_up_cmd_consec,
rw_speed_down_cmd_consec, rw_speed_down_cmd_consec,
) )
@ -49,7 +47,7 @@ from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands
from eive_tmtc.tmtc.acs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command from eive_tmtc.tmtc.acs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command
class OpCodes: class OpCode:
"""FT: Functional Test""" """FT: Functional Test"""
TV_SETUP_TCS_FT_ON = ["s", "tcs-ft-on"] TV_SETUP_TCS_FT_ON = ["s", "tcs-ft-on"]
@ -93,34 +91,34 @@ KAI = KeyAndInfo
PROC_INFO_DICT = { PROC_INFO_DICT = {
KAI.TV_SETUP_TCS_FT_ON[0]: [ KAI.TV_SETUP_TCS_FT_ON[0]: [
OpCodes.TV_SETUP_TCS_FT_ON, OpCode.TV_SETUP_TCS_FT_ON,
KAI.TV_SETUP_TCS_FT_ON[1], KAI.TV_SETUP_TCS_FT_ON[1],
120.0, 120.0,
10.0, 10.0,
], ],
KAI.TV_TEARDOWN_TCS_FT_OFF[0]: [ KAI.TV_TEARDOWN_TCS_FT_OFF[0]: [
OpCodes.TV_TEARDOWN_TCS_FT_OFF, OpCode.TV_TEARDOWN_TCS_FT_OFF,
KAI.TV_TEARDOWN_TCS_FT_OFF[1], KAI.TV_TEARDOWN_TCS_FT_OFF[1],
120.0, 120.0,
10.0, 10.0,
], ],
KAI.BAT_FT[0]: [OpCodes.BAT_FT, KAI.BAT_FT[1], 120.0, 10.0], KAI.BAT_FT[0]: [OpCode.BAT_FT, KAI.BAT_FT[1], 120.0, 10.0],
KAI.CORE_FT[0]: [OpCodes.CORE_FT, KAI.CORE_FT[1], 120.0, 10.0], KAI.CORE_FT[0]: [OpCode.CORE_FT, KAI.CORE_FT[1], 120.0, 10.0],
KAI.PCDU_FT[0]: [OpCodes.PCDU_FT, KAI.PCDU_FT[1], 120.0, 10.0], KAI.PCDU_FT[0]: [OpCode.PCDU_FT, KAI.PCDU_FT[1], 120.0, 10.0],
KAI.RAD_SEN_FT[0]: [OpCodes.RAD_SEN_FT, KAI.RAD_SEN_FT[1], 120.0, 10.0], KAI.RAD_SEN_FT[0]: [OpCode.RAD_SEN_FT, KAI.RAD_SEN_FT[1], 120.0, 10.0],
KAI.ACS_FT[0]: [OpCodes.ACS_FT, KAI.ACS_FT[1], 120.0, 10.0], KAI.ACS_FT[0]: [OpCode.ACS_FT, KAI.ACS_FT[1], 120.0, 10.0],
KAI.MGT_FT[0]: [OpCodes.MGT_FT, KAI.MGT_FT[1], 120.0, 10.0], KAI.MGT_FT[0]: [OpCode.MGT_FT, KAI.MGT_FT[1], 120.0, 10.0],
# collection_time for KAI.MGT_FT_DP maybe be reduced as a full 120 # collection_time for KAI.MGT_FT_DP maybe be reduced as a full 120
# seconds is not needed after MGTs are tested # seconds is not needed after MGTs are tested
KAI.MGT_FT_DP[0]: [OpCodes.MGT_FT_DP, KAI.MGT_FT_DP[1], 10.0, 10.0], KAI.MGT_FT_DP[0]: [OpCode.MGT_FT_DP, KAI.MGT_FT_DP[1], 10.0, 10.0],
KAI.SUS_FT[0]: [OpCodes.SUS_FT, KAI.SUS_FT[1], 120.0, 10.0], KAI.SUS_FT[0]: [OpCode.SUS_FT, KAI.SUS_FT[1], 120.0, 10.0],
KAI.STR_FT[0]: [OpCodes.STR_FT, KAI.STR_FT[1], 120.0, 10.0], KAI.STR_FT[0]: [OpCode.STR_FT, KAI.STR_FT[1], 120.0, 10.0],
# collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120 # collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120
# seconds is not needed after RWs are tested # seconds is not needed after RWs are tested
KAI.RW_FT_ONE_RW[0]: [OpCodes.RW_FT_ONE_RW, KAI.RW_FT_ONE_RW[1], 10.0, 1.0], KAI.RW_FT_ONE_RW[0]: [OpCode.RW_FT_ONE_RW, KAI.RW_FT_ONE_RW[1], 10.0, 1.0],
# collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120 # collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120
# seconds is not needed after RWs are tested # seconds is not needed after RWs are tested
KAI.RW_FT_TWO_RWS[0]: [OpCodes.RW_FT_TWO_RWS, KAI.RW_FT_TWO_RWS[1], 10.0, 1.0], KAI.RW_FT_TWO_RWS[0]: [OpCode.RW_FT_TWO_RWS, KAI.RW_FT_TWO_RWS[1], 10.0, 1.0],
} }
@ -223,12 +221,12 @@ def pack_generic_hk_listening_cmds(
def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str): def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
sid_list = [] sid_list = []
obj_id_dict = get_object_ids() obj_id_dict = get_object_ids()
if op_code in OpCodes.RESET_SCHED: if op_code in OpCode.RESET_SCHED:
q.add_log_cmd("Resetting/Clearing TC schedule") q.add_log_cmd("Resetting/Clearing TC schedule")
q.add_pus_tc(create_reset_tc_sched_cmd()) q.add_pus_tc(create_reset_tc_sched_cmd())
if op_code in OpCodes.BAT_FT: if op_code in OpCode.BAT_FT:
key = KAI.BAT_FT[0] key = KAI.BAT_FT[0]
sid_list.append(make_sid(oids.BPX_HANDLER_ID, BpxSetIds.GET_HK_SET)) sid_list.append(make_sid(oids.BPX_HANDLER_ID, BpxSetId.GET_HK_SET))
diag_list = [False] diag_list = [False]
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
@ -238,7 +236,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.CORE_FT: if op_code in OpCode.CORE_FT:
key = KAI.CORE_FT[0] key = KAI.CORE_FT[0]
sid_list.append(make_sid(oids.CORE_CONTROLLER_ID, CoreSetIds.HK)) sid_list.append(make_sid(oids.CORE_CONTROLLER_ID, CoreSetIds.HK))
diag_list = [False] diag_list = [False]
@ -250,7 +248,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.PCDU_FT: if op_code in OpCode.PCDU_FT:
key = KAI.PCDU_FT[0] key = KAI.PCDU_FT[0]
pcdu_pairs = [ pcdu_pairs = [
(oids.P60_DOCK_HANDLER, GsSetIds.CORE), (oids.P60_DOCK_HANDLER, GsSetIds.CORE),
@ -286,7 +284,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.RAD_SEN_FT: if op_code in OpCode.RAD_SEN_FT:
key = KAI.RAD_SEN_FT[0] key = KAI.RAD_SEN_FT[0]
sid_list.append(make_sid(oids.RAD_SENSOR_ID, RadSetIds.HK)) sid_list.append(make_sid(oids.RAD_SENSOR_ID, RadSetIds.HK))
diag_list = [False] diag_list = [False]
@ -298,18 +296,18 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.TV_SETUP_TCS_FT_ON: if op_code in OpCode.TV_SETUP_TCS_FT_ON:
# Enable scheduling # Enable scheduling
q.add_pus_tc(create_enable_tc_sched_cmd()) q.add_pus_tc(create_enable_tc_sched_cmd())
# check whether tcs_assembly also has to be commanded to NORMAL Mode # check whether tcs_assembly also has to be commanded to NORMAL Mode
pack_tcs_sys_commands(q=q, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0]) pack_tcs_sys_commands(q=q, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0])
pack_cmd_ctrl_to_nml(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID)) pack_cmd_ctrl_to_nml(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCodes.TV_TEARDOWN_TCS_FT_OFF: if op_code in OpCode.TV_TEARDOWN_TCS_FT_OFF:
# TCS board should always be on anyway, do not command it off here # TCS board should always be on anyway, do not command it off here
pack_cmd_ctrl_to_off(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID)) pack_cmd_ctrl_to_off(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCodes.ACS_FT: if op_code in OpCode.ACS_FT:
key = KAI.ACS_FT[0] key = KAI.ACS_FT[0]
a_side_pairs = [ a_side_pairs = [
(oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK), (oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
@ -392,12 +390,12 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_acs_command(q=q, op_code="acs-off") pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.MGT_FT: if op_code in OpCode.MGT_FT:
key = KAI.MGT_FT[0] key = KAI.MGT_FT[0]
imtq_pairs = [ imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
] ]
diag_list = [ diag_list = [
True, True,
@ -425,7 +423,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0") pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
if op_code in OpCodes.MGT_FT_DP: if op_code in OpCode.MGT_FT_DP:
key = KAI.MGT_FT_DP[0] key = KAI.MGT_FT_DP[0]
a_side_pairs = [ a_side_pairs = [
(oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK), (oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
@ -442,9 +440,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
(oids.GPS_CONTROLLER, GpsSetIds.HK), (oids.GPS_CONTROLLER, GpsSetIds.HK),
] ]
imtq_pairs = [ imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
] ]
d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs
diag_list = [ diag_list = [
@ -487,7 +485,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0") pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
pack_acs_command(q=q, op_code="acs-off") pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.SUS_FT: if op_code in OpCode.SUS_FT:
key = KAI.SUS_FT[0] key = KAI.SUS_FT[0]
pack_sus_cmds(q=q, op_code="sus-nom") pack_sus_cmds(q=q, op_code="sus-nom")
@ -519,7 +517,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for nom_sus in sus_n_ids: for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK)) sid_list.append(make_sid(nom_sus, SetId.HK))
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
proc_key=key, proc_key=key,
@ -543,7 +541,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for red_sus in sus_r_ids: for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK)) sid_list.append(make_sid(red_sus, SetId.HK))
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
proc_key=key, proc_key=key,
@ -558,9 +556,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for nom_sus in sus_n_ids: for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK)) sid_list.append(make_sid(nom_sus, SetId.HK))
for red_sus in sus_r_ids: for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK)) sid_list.append(make_sid(red_sus, SetId.HK))
diag_list = [ diag_list = [
True, True,
True, True,
@ -585,7 +583,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_acs_command(q=q, op_code="sus-off") pack_acs_command(q=q, op_code="sus-off")
if op_code in OpCodes.SYRLINKS_FT: if op_code in OpCode.SYRLINKS_FT:
key = KAI.SYRLINKS_FT[0] key = KAI.SYRLINKS_FT[0]
sid_list = [ sid_list = [
make_sid(oids.SYRLINKS_HANDLER_ID, SyrlinksSetIds.RX_REGISTERS_DATASET), make_sid(oids.SYRLINKS_HANDLER_ID, SyrlinksSetIds.RX_REGISTERS_DATASET),
@ -599,7 +597,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
diag_list=[False], diag_list=[False],
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.STR_FT: if op_code in OpCode.STR_FT:
key = KAI.STR_FT[0] key = KAI.STR_FT[0]
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2") pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2")
@ -617,21 +615,21 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="3") pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="3")
if op_code in OpCodes.RW_FT_ONE_RW: if op_code in OpCode.RW_FT_ONE_RW:
key = KAI.RW_FT_ONE_RW[0] key = KAI.RW_FT_ONE_RW[0]
rw_pairs = [ rw_pairs = [
(oids.RW1_ID, RwSetIds.STATUS_SET_ID), (oids.RW1_ID, RwSetId.STATUS_SET_ID),
(oids.RW1_ID, RwSetIds.LAST_RESET), (oids.RW1_ID, RwSetId.LAST_RESET),
(oids.RW1_ID, RwSetIds.TM_SET), (oids.RW1_ID, RwSetId.TM_SET),
(oids.RW2_ID, RwSetIds.STATUS_SET_ID), (oids.RW2_ID, RwSetId.STATUS_SET_ID),
(oids.RW2_ID, RwSetIds.LAST_RESET), (oids.RW2_ID, RwSetId.LAST_RESET),
(oids.RW2_ID, RwSetIds.TM_SET), (oids.RW2_ID, RwSetId.TM_SET),
(oids.RW3_ID, RwSetIds.STATUS_SET_ID), (oids.RW3_ID, RwSetId.STATUS_SET_ID),
(oids.RW3_ID, RwSetIds.LAST_RESET), (oids.RW3_ID, RwSetId.LAST_RESET),
(oids.RW3_ID, RwSetIds.TM_SET), (oids.RW3_ID, RwSetId.TM_SET),
(oids.RW4_ID, RwSetIds.STATUS_SET_ID), (oids.RW4_ID, RwSetId.STATUS_SET_ID),
(oids.RW4_ID, RwSetIds.LAST_RESET), (oids.RW4_ID, RwSetId.LAST_RESET),
(oids.RW4_ID, RwSetIds.TM_SET), (oids.RW4_ID, RwSetId.TM_SET),
] ]
diag_list = [ diag_list = [
True, True,
@ -666,25 +664,25 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off") pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
# ass command with 2 rws to speed # ass command with 2 rws to speed
if op_code in OpCodes.RW_FT_TWO_RWS: if op_code in OpCode.RW_FT_TWO_RWS:
key = KAI.RW_FT_TWO_RWS[0] key = KAI.RW_FT_TWO_RWS[0]
rw_pairs = [ rw_pairs = [
(oids.RW1_ID, RwSetIds.STATUS_SET_ID), (oids.RW1_ID, RwSetId.STATUS_SET_ID),
(oids.RW1_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW1_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW1_ID, RwSetIds.LAST_RESET), (oids.RW1_ID, RwSetId.LAST_RESET),
(oids.RW1_ID, RwSetIds.TM_SET), (oids.RW1_ID, RwSetId.TM_SET),
(oids.RW2_ID, RwSetIds.STATUS_SET_ID), (oids.RW2_ID, RwSetId.STATUS_SET_ID),
(oids.RW2_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW2_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW2_ID, RwSetIds.LAST_RESET), (oids.RW2_ID, RwSetId.LAST_RESET),
(oids.RW2_ID, RwSetIds.TM_SET), (oids.RW2_ID, RwSetId.TM_SET),
(oids.RW3_ID, RwSetIds.STATUS_SET_ID), (oids.RW3_ID, RwSetId.STATUS_SET_ID),
(oids.RW3_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW3_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW3_ID, RwSetIds.LAST_RESET), (oids.RW3_ID, RwSetId.LAST_RESET),
(oids.RW3_ID, RwSetIds.TM_SET), (oids.RW3_ID, RwSetId.TM_SET),
(oids.RW4_ID, RwSetIds.STATUS_SET_ID), (oids.RW4_ID, RwSetId.STATUS_SET_ID),
(oids.RW4_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW4_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW4_ID, RwSetIds.LAST_RESET), (oids.RW4_ID, RwSetId.LAST_RESET),
(oids.RW4_ID, RwSetIds.TM_SET), (oids.RW4_ID, RwSetId.TM_SET),
] ]
diag_list = [ diag_list = [
False, False,

View File

@ -1,78 +0,0 @@
import enum
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_hk_command,
)
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from eive_tmtc.config.object_ids import TCS_BOARD_ASS_ID, TCS_CONTROLLER
class OpCodes:
TCS_BOARD_ASS_NORMAL = ["0", "normal"]
TCS_BOARD_ASS_OFF = ["1", "off"]
REQUEST_SENSOR_TEMP_SET = ["2", "temps"]
class Info:
REQUEST_SENSOR_TEMP_SET = "Request HK set of primary sensor temperatures"
TCS_BOARD_ASS_NORMAL = "Switching TCS board assembly on"
TCS_BOARD_ASS_OFF = "Switching TCS board assembly off"
class SetIds(enum.IntEnum):
PRIMARY_SENSORS = 0
DEVICE_SENSORS = 1
SUS_TEMP_SENSORS = 2
@tmtc_definitions_provider
def add_tcs_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(
keys=OpCodes.TCS_BOARD_ASS_NORMAL,
info=Info.TCS_BOARD_ASS_NORMAL,
)
oce.add(
keys=OpCodes.TCS_BOARD_ASS_OFF,
info=Info.TCS_BOARD_ASS_OFF,
)
oce.add(keys=OpCodes.REQUEST_SENSOR_TEMP_SET, info=Info.REQUEST_SENSOR_TEMP_SET)
defs.add_service(
name=CustomServiceList.TCS.value,
info="TCS Board Assembly",
op_code_entry=oce,
)
def pack_tcs_sys_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.REQUEST_SENSOR_TEMP_SET:
sensor_set_sid = make_sid(TCS_CONTROLLER, SetIds.PRIMARY_SENSORS)
q.add_log_cmd(Info.REQUEST_SENSOR_TEMP_SET)
q.add_pus_tc(generate_one_hk_command(sensor_set_sid))
pack_tcs_ass_cmds(q, op_code)
def pack_tcs_ass_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.TCS_BOARD_ASS_NORMAL:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_NORMAL,
)
if op_code in OpCodes.TCS_BOARD_ASS_OFF:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Modes.OFF,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_OFF,
)

View File

@ -11,7 +11,7 @@ from tmtccmd.tc.decorator import ServiceProviderParams
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
SET_CURRENT_TIME = ["0", "set-curr-time"] SET_CURRENT_TIME = ["0", "set-curr-time"]

View File

@ -1,14 +1,15 @@
import struct import struct
from eive_tmtc.config.object_ids import * from eive_tmtc.config.object_ids import *
from eive_tmtc.tmtc.acs.imtq import ImtqActionIds from eive_tmtc.tmtc.acs.imtq import ImtqActionId
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.tmtc.payload.ploc_mpsoc import PlocReplyIds from eive_tmtc.tmtc.payload.ploc_mpsoc import PlocReplyIds
from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionIds from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionId
from eive_tmtc.pus_tc.devs.star_tracker import StarTrackerActionIds from eive_tmtc.pus_tc.devs.star_tracker import StarTrackerActionId
from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tm import Service8FsfwTm from tmtccmd.tm import Service8FsfwTm
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from spacepackets.ccsds.time import CdsShortTimestamp
LOGGER = get_console_logger() LOGGER = get_console_logger()
@ -19,7 +20,9 @@ def handle_action_reply(
"""Core Action reply handler """Core Action reply handler
:return: :return:
""" """
tm_packet = Service8FsfwTm.unpack(raw_telemetry=raw_tm) tm_packet = Service8FsfwTm.unpack(
raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty()
)
printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet) printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
object_id = obj_id_dict.get(tm_packet.source_object_id_as_bytes) object_id = obj_id_dict.get(tm_packet.source_object_id_as_bytes)
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
@ -52,7 +55,7 @@ def handle_action_reply(
def handle_imtq_replies( def handle_imtq_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == struct.unpack("!I", ImtqActionIds.get_commanded_dipole)[0]: if action_id == struct.unpack("!I", ImtqActionId.get_commanded_dipole)[0]:
header_list = [ header_list = [
"Commanded X-Dipole", "Commanded X-Dipole",
"Commanded Y-Dipole", "Commanded Y-Dipole",
@ -99,14 +102,14 @@ def handle_ploc_replies(
def handle_supervisor_replies( def handle_supervisor_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == SupvActionIds.DUMP_MRAM: if action_id == SupvActionId.DUMP_MRAM:
header_list = ["MRAM Dump"] header_list = ["MRAM Dump"]
content_list = [custom_data[: len(custom_data)]] content_list = [custom_data[: len(custom_data)]]
print(header_list) print(header_list)
print(content_list) print(content_list)
printer.file_logger.info(header_list) printer.file_logger.info(header_list)
printer.file_logger.info(content_list) printer.file_logger.info(content_list)
elif action_id == SupvActionIds.READ_GPIO: elif action_id == SupvActionId.READ_GPIO:
header_list = ["GPIO state"] header_list = ["GPIO state"]
content_list = [struct.unpack("!H", custom_data[:2])[0]] content_list = [struct.unpack("!H", custom_data[:2])[0]]
print(header_list) print(header_list)
@ -118,7 +121,7 @@ def handle_supervisor_replies(
def handle_startracker_replies( def handle_startracker_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == StarTrackerActionIds.CHECKSUM: if action_id == StarTrackerActionId.CHECKSUM:
if len(custom_data) != 5: if len(custom_data) != 5:
LOGGER.warning( LOGGER.warning(
"Star tracker reply has invalid length {0}".format(len(custom_data)) "Star tracker reply has invalid length {0}".format(len(custom_data))

View File

@ -1,6 +1,6 @@
import struct import struct
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetIds from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
@ -21,7 +21,7 @@ HEADER_LIST = [
def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
if set_id == BpxSetIds.GET_HK_SET: if set_id == BpxSetId.GET_HK_SET:
fmt_str = "!HHHHhhhhIB" fmt_str = "!HHHHhhhhIB"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
( (
@ -52,7 +52,7 @@ def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw.dlog(str(HEADER_LIST)) pw.dlog(str(HEADER_LIST))
pw.dlog(str(content_list)) pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10) printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
elif set_id == BpxSetIds.GET_CFG_SET: elif set_id == BpxSetId.GET_CFG_SET:
battheat_mode = hk_data[0] battheat_mode = hk_data[0]
battheat_low = struct.unpack("!b", hk_data[1:2])[0] battheat_low = struct.unpack("!b", hk_data[1:2])[0]
battheat_high = struct.unpack("!b", hk_data[2:3])[0] battheat_high = struct.unpack("!b", hk_data[2:3])[0]

View File

@ -4,7 +4,7 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetIds, AdisGyroSetIds from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId, AdisGyroSetId
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
@ -30,7 +30,7 @@ def handle_gyros_hk_data(
def handle_adis_gyro_hk( def handle_adis_gyro_hk(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
): ):
if set_id == AdisGyroSetIds.CORE_HK: if set_id == AdisGyroSetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ddddddf" fmt_str = "!ddddddf"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -44,7 +44,7 @@ def handle_adis_gyro_hk(
) )
pw.dlog(f"Acceleration (m/s^2): X {accelX} | Y {accelY} | Z {accelZ}") pw.dlog(f"Acceleration (m/s^2): X {accelX} | Y {accelY} | Z {accelZ}")
pw.dlog(f"Temperature {temp} C") pw.dlog(f"Temperature {temp} C")
if set_id == AdisGyroSetIds.CFG_HK: if set_id == AdisGyroSetId.CFG_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!HBHH" fmt_str = "!HBHH"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -60,7 +60,7 @@ def handle_adis_gyro_hk(
def handle_l3g_gyro_hk( def handle_l3g_gyro_hk(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
): ):
if set_id == L3gGyroSetIds.CORE_HK: if set_id == L3gGyroSetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ffff" fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -1,7 +1,7 @@
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetIds, MgmLis3SetIds from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId, MgmLis3SetId
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
@ -26,7 +26,7 @@ def handle_mgm_hk_data(
def handle_mgm_lis3_hk_data( def handle_mgm_lis3_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
): ):
if set_id == MgmLis3SetIds.CORE_HK: if set_id == MgmLis3SetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ffff" fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -43,7 +43,7 @@ def handle_mgm_lis3_hk_data(
def handle_mgm_rm3100_hk_data( def handle_mgm_rm3100_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
): ):
if set_id == MgmRm3100SetIds.CORE_HK: if set_id == MgmRm3100SetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = f"!fff" fmt_str = f"!fff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -2,7 +2,7 @@ import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.plpcdu import SetIds from eive_tmtc.pus_tc.devs.plpcdu import SetId
ADC_CHANNELS_NAMED = [ ADC_CHANNELS_NAMED = [
@ -22,7 +22,7 @@ ADC_CHANNELS_NAMED = [
def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.ADC: if set_id == SetId.ADC:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
pw.dlog("Received PL PCDU ADC HK data") pw.dlog("Received PL PCDU ADC HK data")

View File

@ -2,11 +2,11 @@ import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.rad_sensor import SetIds from eive_tmtc.pus_tc.devs.rad_sensor import SetId
def handle_rad_sensor_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_rad_sensor_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.HK: if set_id == SetId.HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
pw.dlog("Received Radiation Sensor HK data") pw.dlog("Received Radiation Sensor HK data")

View File

@ -1,7 +1,7 @@
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.sus import SetIds from eive_tmtc.pus_tc.devs.sus import SetId
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
@ -11,7 +11,7 @@ def handle_sus_hk(
): ):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog(f"Received SUS HK data from {object_id}") pw.dlog(f"Received SUS HK data from {object_id}")
if set_id == SetIds.HK: if set_id == SetId.HK:
current_idx = 0 current_idx = 0
temperature = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0] temperature = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
current_idx += 4 current_idx += 4

View File

@ -1,14 +1,14 @@
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetIds from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetId
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.RX_REGISTERS_DATASET: if set_id == SetId.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(printer, hk_data) return handle_syrlinks_rx_registers_dataset(printer, hk_data)
elif set_id == SetIds.TX_REGISTERS_DATASET: elif set_id == SetId.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(printer, hk_data) return handle_syrlinks_tx_registers_dataset(printer, hk_data)
else: else:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)

View File

@ -4,20 +4,21 @@ from eive_tmtc.config.events import get_event_dict
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tm.verification_handler import generic_retval_printout from eive_tmtc.pus_tm.verification_handler import generic_retval_printout
from eive_tmtc.tmtc.acs.acs_subsystem import AcsModes from eive_tmtc.tmtc.acs.acs_subsystem import AcsMode
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.tm import Service5Tm from tmtccmd.tm import Service5Tm
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw import EventInfo from tmtccmd.fsfw import EventInfo
from spacepackets.ccsds.time import CdsShortTimestamp
LOGGER = get_console_logger() LOGGER = get_console_logger()
def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter): def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
tm = Service5Tm.unpack(raw_telemetry=raw_tm) tm = Service5Tm.unpack(raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty())
event_dict = get_event_dict() event_dict = get_event_dict()
info = event_dict.get(tm.event_id) info = event_dict.get(tm.event_id)
if info is None: if info is None:
@ -55,24 +56,24 @@ def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
if info.name == "MODE_INFO": if info.name == "MODE_INFO":
mode_name = "Unknown" mode_name = "Unknown"
if obj_name == "ACS_SUBSYSTEM": if obj_name == "ACS_SUBSYSTEM":
if tm.param_1 == Modes.OFF: if tm.param_1 == Mode.OFF:
mode_name = "Off" mode_name = "Off"
elif tm.param_1 == AcsModes.IDLE: elif tm.param_1 == AcsMode.IDLE:
mode_name = "Idle" mode_name = "Idle"
elif tm.param_1 == AcsModes.DETUMBLE: elif tm.param_1 == AcsMode.DETUMBLE:
mode_name = "Detumble" mode_name = "Detumble"
elif tm.param_1 == AcsModes.SAFE: elif tm.param_1 == AcsMode.SAFE:
mode_name = "Safe" mode_name = "Safe"
elif tm.param_1 == AcsModes.TARGET_PT: elif tm.param_1 == AcsMode.TARGET_PT:
mode_name = "Target Pointing" mode_name = "Target Pointing"
else: else:
if tm.param_1 == Modes.OFF: if tm.param_1 == Mode.OFF:
mode_name = "Off" mode_name = "Off"
elif tm.param_1 == Modes.ON: elif tm.param_1 == Mode.ON:
mode_name = "On" mode_name = "On"
elif tm.param_1 == Modes.NORMAL: elif tm.param_1 == Mode.NORMAL:
mode_name = "Normal" mode_name = "Normal"
elif tm.param_1 == Modes.RAW: elif tm.param_1 == Mode.RAW:
mode_name = "Raw" mode_name = "Raw"
pw.dlog(f"Mode Number {tm.param_1}, Mode Name {mode_name}") pw.dlog(f"Mode Number {tm.param_1}, Mode Name {mode_name}")
pw.dlog(f"Submode: {tm.param_2}") pw.dlog(f"Submode: {tm.param_2}")

View File

@ -4,11 +4,12 @@ from eive_tmtc.config.object_ids import get_object_ids
from spacepackets.ecss import PusTelemetry from spacepackets.ecss import PusTelemetry
from spacepackets.ecss.pus_17_test import Service17Tm from spacepackets.ecss.pus_17_test import Service17Tm
from spacepackets.util import PrintFormats from spacepackets.util import PrintFormats
from spacepackets.ccsds.time import CdsShortTimestamp
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.pus import VerificationWrapper from tmtccmd.pus import VerificationWrapper
from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm
from tmtccmd.tm.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tm.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from .defs import PrintWrapper from .defs import PrintWrapper
@ -30,7 +31,7 @@ def pus_factory_hook(
LOGGER.warning("Detected packet shorter than 8 bytes!") LOGGER.warning("Detected packet shorter than 8 bytes!")
return return
try: try:
tm_packet = PusTelemetry.unpack(packet) tm_packet = PusTelemetry.unpack(packet, CdsShortTimestamp.empty())
except ValueError: except ValueError:
LOGGER.warning("Could not generate PUS TM object from raw data") LOGGER.warning("Could not generate PUS TM object from raw data")
LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}") LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}")
@ -48,15 +49,21 @@ def pus_factory_hook(
elif service == 8: elif service == 8:
handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict) handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict)
elif service == 17: elif service == 17:
tm_packet = Service17Tm.unpack(raw_telemetry=packet) tm_packet = Service17Tm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == 2: if tm_packet.subservice == 2:
verif_wrapper.dlog("Received Ping Reply TM[17,2]") verif_wrapper.dlog("Received Ping Reply TM[17,2]")
dedicated_handler = True dedicated_handler = True
elif service == 20: elif service == 20:
tm_packet = Service20FsfwTm.unpack(raw_telemetry=packet) tm_packet = Service20FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
dedicated_handler = False dedicated_handler = False
elif service == 200: elif service == 200:
tm_packet = Service200FsfwTm.unpack(raw_telemetry=packet) tm_packet = Service200FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == ModeSubservices.TM_CANT_REACH_MODE: if tm_packet.subservice == ModeSubservices.TM_CANT_REACH_MODE:
obj_id = tm_packet.object_id obj_id = tm_packet.object_id
obj_id_obj = obj_id_dict.get(obj_id) obj_id_obj = obj_id_dict.get(obj_id)

View File

@ -4,9 +4,9 @@ from eive_tmtc.tmtc.acs.acs_ctrl import handle_raw_mgm_data, handle_acs_ctrl_hk_
from eive_tmtc.pus_tm.devs.plpcdu import handle_plpcdu_hk from eive_tmtc.pus_tm.devs.plpcdu import handle_plpcdu_hk
from eive_tmtc.pus_tm.devs.rad_sensor import handle_rad_sensor_data from eive_tmtc.pus_tm.devs.rad_sensor import handle_rad_sensor_data
from eive_tmtc.pus_tm.devs.sus import handle_sus_hk from eive_tmtc.pus_tm.devs.sus import handle_sus_hk
from eive_tmtc.pus_tm.system.tcs import handle_thermal_controller_hk_data
from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data
from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data
from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
from tmtccmd.tm.pus_3_fsfw_hk import ( from tmtccmd.tm.pus_3_fsfw_hk import (
Service3Base, Service3Base,
HkContentType, HkContentType,
@ -25,14 +25,14 @@ from eive_tmtc.tmtc.power.tm import (
) )
from eive_tmtc.pus_tm.devs.syrlinks import handle_syrlinks_hk_data from eive_tmtc.pus_tm.devs.syrlinks import handle_syrlinks_hk_data
from eive_tmtc.tmtc.acs.imtq import ( from eive_tmtc.tmtc.acs.imtq import (
ImtqSetIds, ImtqSetId,
handle_self_test_data, handle_self_test_data,
handle_eng_set, handle_eng_set,
handle_calibrated_mtm_measurement, handle_calibrated_mtm_measurement,
handle_raw_mtm_measurement, handle_raw_mtm_measurement,
) )
from eive_tmtc.pus_tm.defs import FsfwTmTcPrinter from eive_tmtc.pus_tm.defs import FsfwTmTcPrinter
from eive_tmtc.pus_tm.system.core import handle_core_hk_data from eive_tmtc.tmtc.core import handle_core_hk_data
from eive_tmtc.pus_tm.devs.mgms import handle_mgm_hk_data from eive_tmtc.pus_tm.devs.mgms import handle_mgm_hk_data
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
@ -95,15 +95,15 @@ def handle_regular_hk_print(
elif objb == obj_ids.SYRLINKS_HANDLER_ID: elif objb == obj_ids.SYRLINKS_HANDLER_ID:
handle_syrlinks_hk_data(printer=printer, hk_data=hk_data, set_id=set_id) handle_syrlinks_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.IMTQ_HANDLER_ID: elif objb == obj_ids.IMTQ_HANDLER_ID:
if (set_id >= ImtqSetIds.POSITIVE_X_TEST) and ( if (set_id >= ImtqSetId.POSITIVE_X_TEST) and (
set_id <= ImtqSetIds.NEGATIVE_Z_TEST set_id <= ImtqSetId.NEGATIVE_Z_TEST
): ):
return handle_self_test_data(printer, hk_data) return handle_self_test_data(printer, hk_data)
elif set_id == ImtqSetIds.ENG_HK_SET: elif set_id == ImtqSetId.ENG_HK_SET:
return handle_eng_set(printer, hk_data) return handle_eng_set(printer, hk_data)
elif set_id == ImtqSetIds.CAL_MTM_SET: elif set_id == ImtqSetId.CAL_MTM_SET:
return handle_calibrated_mtm_measurement(printer, hk_data) return handle_calibrated_mtm_measurement(printer, hk_data)
elif set_id == ImtqSetIds.RAW_MTM_SET: elif set_id == ImtqSetId.RAW_MTM_SET:
return handle_raw_mtm_measurement(printer, hk_data) return handle_raw_mtm_measurement(printer, hk_data)
else: else:
LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id") LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id")

View File

@ -1,21 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.system.core import SetIds
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.HK:
pw = PrintWrapper(printer)
fmt_str = "!fff"
inc_len = struct.calcsize(fmt_str)
(temperature, ps_voltage, pl_voltage) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
printout = (
f"Chip Temperature [°C] {temperature} | PS Voltage [mV] {ps_voltage} | "
f"PL Voltage [mV] {pl_voltage}"
)
pw.dlog(printout)
printer.print_validity_buffer(validity_buffer=hk_data[inc_len:], num_vars=3)

View File

@ -1,5 +1,6 @@
from typing import List, Optional from typing import List, Optional
from spacepackets.ccsds import CdsShortTimestamp
from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.pus import VerificationWrapper from tmtccmd.pus import VerificationWrapper
@ -15,7 +16,9 @@ def handle_service_1_fsfw_packet(wrapper: VerificationWrapper, raw_tm: bytes):
"Console logger or file logger not valid. Please set a valid one" "Console logger or file logger not valid. Please set a valid one"
) )
# Error code with length 2 is FSFW specific # Error code with length 2 is FSFW specific
tm_packet = Service1Tm.unpack(data=raw_tm, params=UnpackParams(1, 2)) tm_packet = Service1Tm.unpack(
data=raw_tm, params=UnpackParams(CdsShortTimestamp.empty(), 1, 2)
)
fsfw_wrapper = Service1FsfwWrapper(tm_packet) fsfw_wrapper = Service1FsfwWrapper(tm_packet)
res = wrapper.verificator.add_tm(tm_packet) res = wrapper.verificator.add_tm(tm_packet)
if res is None: if res is None:

View File

@ -8,7 +8,7 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider, DefaultPusQueueHelper from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
@ -24,7 +24,7 @@ class AcsOpCodes:
ACS_ASS_DUAL_ON = ["6", "do"] ACS_ASS_DUAL_ON = ["6", "do"]
class DualSideSubmodes(enum.IntEnum): class DualSideSubmode(enum.IntEnum):
A_SIDE = 0 A_SIDE = 0
B_SIDE = 1 B_SIDE = 1
DUAL_SIDE = 2 DUAL_SIDE = 2
@ -34,55 +34,55 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
if op_code in AcsOpCodes.ACS_ASS_A_SIDE: if op_code in AcsOpCodes.ACS_ASS_A_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching to ACS board assembly A side", info="Switching to ACS board assembly A side",
) )
if op_code in AcsOpCodes.ACS_ASS_B_SIDE: if op_code in AcsOpCodes.ACS_ASS_B_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching to ACS board assembly B side", info="Switching to ACS board assembly B side",
) )
if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE: if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE, submode=DualSideSubmode.DUAL_SIDE,
q=q, q=q,
info="Switching to ACS board assembly dual mode", info="Switching to ACS board assembly dual mode",
) )
if op_code in AcsOpCodes.ACS_ASS_A_ON: if op_code in AcsOpCodes.ACS_ASS_A_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching ACS board assembly A side on", info="Switching ACS board assembly A side on",
) )
if op_code in AcsOpCodes.ACS_ASS_B_ON: if op_code in AcsOpCodes.ACS_ASS_B_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching ACS board assembly B side on", info="Switching ACS board assembly B side on",
) )
if op_code in AcsOpCodes.ACS_ASS_DUAL_ON: if op_code in AcsOpCodes.ACS_ASS_DUAL_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching ACS board assembly dual side on", info="Switching ACS board assembly dual side on",
) )
if op_code in AcsOpCodes.ACS_ASS_OFF: if op_code in AcsOpCodes.ACS_ASS_OFF:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info="Switching to ACS board assembly off", info="Switching to ACS board assembly off",

View File

@ -15,6 +15,7 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc.pus_20_params import pack_scalar_boolean_parameter_app_data from tmtccmd.tc.pus_20_params import pack_scalar_boolean_parameter_app_data
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_command
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_3_fsfw_hk import ( from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_hk_command, generate_one_hk_command,
@ -28,7 +29,7 @@ from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger() LOGGER = get_console_logger()
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
MGM_RAW_SET = 0 MGM_RAW_SET = 0
MGM_PROC_SET = 1 MGM_PROC_SET = 1
SUS_RAW_SET = 2 SUS_RAW_SET = 2
@ -42,6 +43,8 @@ class SetIds(enum.IntEnum):
class OpCodes: class OpCodes:
OFF = ["off"]
NML = ["normal"]
REQUEST_RAW_MGM_HK = ["0", "mgm_raw_hk"] REQUEST_RAW_MGM_HK = ["0", "mgm_raw_hk"]
ENABLE_RAW_MGM_HK = ["1", "enable_mgm_raw_hk"] ENABLE_RAW_MGM_HK = ["1", "enable_mgm_raw_hk"]
DISABLE_RAW_MGM_HK = ["2", "disable_mgm_raw_hk"] DISABLE_RAW_MGM_HK = ["2", "disable_mgm_raw_hk"]
@ -75,6 +78,8 @@ class OpCodes:
class Info: class Info:
OFF = "Switch ACS CTRL off"
NML = "Switch ACS CTRL normal"
REQUEST_RAW_MGM_HK = "Request Raw MGM HK once" REQUEST_RAW_MGM_HK = "Request Raw MGM HK once"
ENABLE_RAW_MGM_HK = "Enable Raw MGM HK data generation" ENABLE_RAW_MGM_HK = "Enable Raw MGM HK data generation"
DISABLE_RAW_MGM_HK = "Disable Raw MGM HK data generation" DISABLE_RAW_MGM_HK = "Disable Raw MGM HK data generation"
@ -122,6 +127,8 @@ if PERFORM_MGM_CALIBRATION:
@tmtc_definitions_provider @tmtc_definitions_provider
def acs_cmd_defs(defs: TmtcDefinitionWrapper): def acs_cmd_defs(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.OFF, info=Info.OFF)
oce.add(keys=OpCodes.NML, info=Info.NML)
oce.add(keys=OpCodes.REQUEST_RAW_MGM_HK, info=Info.REQUEST_RAW_MGM_HK) oce.add(keys=OpCodes.REQUEST_RAW_MGM_HK, info=Info.REQUEST_RAW_MGM_HK)
oce.add(keys=OpCodes.ENABLE_RAW_MGM_HK, info=Info.ENABLE_RAW_MGM_HK) oce.add(keys=OpCodes.ENABLE_RAW_MGM_HK, info=Info.ENABLE_RAW_MGM_HK)
oce.add(keys=OpCodes.DISABLE_RAW_MGM_HK, info=Info.DISABLE_RAW_MGM_HK) oce.add(keys=OpCodes.DISABLE_RAW_MGM_HK, info=Info.DISABLE_RAW_MGM_HK)
@ -161,15 +168,21 @@ def acs_cmd_defs(defs: TmtcDefinitionWrapper):
def pack_acs_ctrl_command(p: ServiceProviderParams): def pack_acs_ctrl_command(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in OpCodes.OFF:
q.add_log_cmd(f"{Info.OFF}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.OFF, 0))
if op_code in OpCodes.NML:
q.add_log_cmd(f"{Info.NML}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.NORMAL, 0))
if op_code in OpCodes.REQUEST_RAW_MGM_HK: if op_code in OpCodes.REQUEST_RAW_MGM_HK:
q.add_log_cmd(Info.REQUEST_RAW_MGM_HK) q.add_log_cmd(Info.REQUEST_RAW_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_MGM_HK: elif op_code in OpCodes.ENABLE_RAW_MGM_HK:
q.add_log_cmd(Info.ENABLE_RAW_MGM_HK) q.add_log_cmd(Info.ENABLE_RAW_MGM_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -177,18 +190,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_MGM_HK) q.add_log_cmd(Info.DISABLE_RAW_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET) False, make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_MGM_HK: elif op_code in OpCodes.REQUEST_PROC_MGM_HK:
q.add_log_cmd(Info.REQUEST_PROC_MGM_HK) q.add_log_cmd(Info.REQUEST_PROC_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_MGM_HK: elif op_code in OpCodes.ENABLE_PROC_MGM_HK:
q.add_log_cmd(Info.ENABLE_PROC_MGM_HK) q.add_log_cmd(Info.ENABLE_PROC_MGM_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -196,18 +209,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_MGM_HK) q.add_log_cmd(Info.DISABLE_PROC_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_RAW_SUS_HK: elif op_code in OpCodes.REQUEST_RAW_SUS_HK:
q.add_log_cmd(Info.REQUEST_RAW_SUS_HK) q.add_log_cmd(Info.REQUEST_RAW_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_SUS_HK: elif op_code in OpCodes.ENABLE_RAW_SUS_HK:
q.add_log_cmd(Info.ENABLE_RAW_SUS_HK) q.add_log_cmd(Info.ENABLE_RAW_SUS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -215,18 +228,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_SUS_HK) q.add_log_cmd(Info.DISABLE_RAW_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET) False, make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_SUS_HK: elif op_code in OpCodes.REQUEST_PROC_SUS_HK:
q.add_log_cmd(Info.REQUEST_PROC_SUS_HK) q.add_log_cmd(Info.REQUEST_PROC_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_SUS_HK: elif op_code in OpCodes.ENABLE_PROC_SUS_HK:
q.add_log_cmd(Info.ENABLE_PROC_SUS_HK) q.add_log_cmd(Info.ENABLE_PROC_SUS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -234,18 +247,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_SUS_HK) q.add_log_cmd(Info.DISABLE_PROC_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_RAW_GYR_HK: elif op_code in OpCodes.REQUEST_RAW_GYR_HK:
q.add_log_cmd(Info.REQUEST_RAW_GYR_HK) q.add_log_cmd(Info.REQUEST_RAW_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_GYR_HK: elif op_code in OpCodes.ENABLE_RAW_GYR_HK:
q.add_log_cmd(Info.ENABLE_RAW_GYR_HK) q.add_log_cmd(Info.ENABLE_RAW_GYR_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -253,18 +266,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_GYR_HK) q.add_log_cmd(Info.DISABLE_RAW_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET) False, make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_GYR_HK: elif op_code in OpCodes.REQUEST_PROC_GYR_HK:
q.add_log_cmd(Info.REQUEST_PROC_GYR_HK) q.add_log_cmd(Info.REQUEST_PROC_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_GYR_HK: elif op_code in OpCodes.ENABLE_PROC_GYR_HK:
q.add_log_cmd(Info.ENABLE_PROC_GYR_HK) q.add_log_cmd(Info.ENABLE_PROC_GYR_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -272,18 +285,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_GYR_HK) q.add_log_cmd(Info.DISABLE_PROC_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_GPS_HK: elif op_code in OpCodes.REQUEST_PROC_GPS_HK:
q.add_log_cmd(Info.REQUEST_PROC_GPS_HK) q.add_log_cmd(Info.REQUEST_PROC_GPS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_GPS_HK: elif op_code in OpCodes.ENABLE_PROC_GPS_HK:
q.add_log_cmd(Info.ENABLE_PROC_GPS_HK) q.add_log_cmd(Info.ENABLE_PROC_GPS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -291,18 +304,16 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_GPS_HK) q.add_log_cmd(Info.DISABLE_PROC_GPS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_MEKF_HK: elif op_code in OpCodes.REQUEST_MEKF_HK:
q.add_log_cmd(Info.REQUEST_MEKF_HK) q.add_log_cmd(Info.REQUEST_MEKF_HK)
q.add_pus_tc( q.add_pus_tc(generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MEKF_DATA)))
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA))
)
elif op_code in OpCodes.ENABLE_MEKF_HK: elif op_code in OpCodes.ENABLE_MEKF_HK:
q.add_log_cmd(Info.ENABLE_MEKF_HK) q.add_log_cmd(Info.ENABLE_MEKF_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA), 2.0 False, make_sid(ACS_CONTROLLER, SetId.MEKF_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -310,18 +321,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_MEKF_HK) q.add_log_cmd(Info.DISABLE_MEKF_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA) False, make_sid(ACS_CONTROLLER, SetId.MEKF_DATA)
) )
) )
elif op_code in OpCodes.REQUEST_CTRL_VAL_HK: elif op_code in OpCodes.REQUEST_CTRL_VAL_HK:
q.add_log_cmd(Info.REQUEST_CTRL_VAL_HK) q.add_log_cmd(Info.REQUEST_CTRL_VAL_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA))
) )
elif op_code in OpCodes.ENABLE_CTRL_VAL_HK: elif op_code in OpCodes.ENABLE_CTRL_VAL_HK:
q.add_log_cmd(Info.ENABLE_CTRL_VAL_HK) q.add_log_cmd(Info.ENABLE_CTRL_VAL_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA), 2.0 False, make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -329,18 +340,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_CTRL_VAL_HK) q.add_log_cmd(Info.DISABLE_CTRL_VAL_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA) False, make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA)
) )
) )
elif op_code in OpCodes.REQUEST_ACT_CMD_HK: elif op_code in OpCodes.REQUEST_ACT_CMD_HK:
q.add_log_cmd(Info.REQUEST_ACT_CMD_HK) q.add_log_cmd(Info.REQUEST_ACT_CMD_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA))
) )
elif op_code in OpCodes.ENABLE_ACT_CMD_HK: elif op_code in OpCodes.ENABLE_ACT_CMD_HK:
q.add_log_cmd(Info.ENABLE_ACT_CMD_HK) q.add_log_cmd(Info.ENABLE_ACT_CMD_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA), 2.0 False, make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -348,7 +359,7 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_ACT_CMD_HK) q.add_log_cmd(Info.DISABLE_ACT_CMD_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA) False, make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA)
) )
) )
else: else:
@ -358,25 +369,25 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
def handle_acs_ctrl_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_acs_ctrl_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
match set_id: match set_id:
case SetIds.MGM_RAW_SET: case SetId.MGM_RAW_SET:
handle_raw_mgm_data(pw, hk_data) handle_raw_mgm_data(pw, hk_data)
case SetIds.MGM_PROC_SET: case SetId.MGM_PROC_SET:
handle_mgm_data_processed(pw, hk_data) handle_mgm_data_processed(pw, hk_data)
case SetIds.SUS_RAW_SET: case SetId.SUS_RAW_SET:
handle_acs_ctrl_sus_raw_data(pw, hk_data) handle_acs_ctrl_sus_raw_data(pw, hk_data)
case SetIds.SUS_PROC_SET: case SetId.SUS_PROC_SET:
handle_acs_ctrl_sus_processed_data(pw, hk_data) handle_acs_ctrl_sus_processed_data(pw, hk_data)
case SetIds.GYR_RAW_SET: case SetId.GYR_RAW_SET:
handle_gyr_data_raw(pw, hk_data) handle_gyr_data_raw(pw, hk_data)
case SetIds.GYR_PROC_SET: case SetId.GYR_PROC_SET:
handle_gyr_data_processed(pw, hk_data) handle_gyr_data_processed(pw, hk_data)
case SetIds.GPS_PROC_SET: case SetId.GPS_PROC_SET:
handle_gps_data_processed(pw, hk_data) handle_gps_data_processed(pw, hk_data)
case SetIds.MEKF_DATA: case SetId.MEKF_DATA:
handle_mekf_data(pw, hk_data) handle_mekf_data(pw, hk_data)
case SetIds.CTRL_VAL_DATA: case SetId.CTRL_VAL_DATA:
handle_ctrl_val_data(pw, hk_data) handle_ctrl_val_data(pw, hk_data)
case SetIds.ACTUATOR_CMD_DATA: case SetId.ACTUATOR_CMD_DATA:
handle_act_cmd_data(pw, hk_data) handle_act_cmd_data(pw, hk_data)
@ -403,10 +414,10 @@ def handle_acs_ctrl_sus_raw_data(pw: PrintWrapper, hk_data: bytes):
def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes): def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes):
if len(hk_data) < 3 * 4 * 12: if len(hk_data) < 3 * 4 * 12 + 3 * 8 * 3:
pw.dlog( pw.dlog(
f"SUS Raw dataset with size {len(hk_data)} does not have expected size" f"SUS Processed dataset with size {len(hk_data)} does not have expected size"
f" of {3 * 4 * 12} bytes" f" of {3 * 4 * 12 + 3 * 8 * 3} bytes"
) )
return return
current_idx = 0 current_idx = 0
@ -437,7 +448,7 @@ def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes):
sun_ijk_model = [f"{val:8.3f}" for val in {sun_ijk_model}] sun_ijk_model = [f"{val:8.3f}" for val in {sun_ijk_model}]
current_idx += inc_len current_idx += inc_len
pw.dlog(f"SUS ijk Model: {sun_ijk_model}") pw.dlog(f"SUS ijk Model: {sun_ijk_model}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=12) pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=15)
def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes): def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
@ -478,8 +489,8 @@ def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
float_str_fmt = "[{:8.3f}, {:8.3f}, {:8.3f}]" float_str_fmt = "[{:8.3f}, {:8.3f}, {:8.3f}]"
for mgm_entry in mgm_lists[0:4]: for mgm_entry in mgm_lists[0:4]:
formatted_list.append(float_str_fmt.format(*mgm_entry)) formatted_list.append(float_str_fmt.format(*mgm_entry))
formatted_list.append(hk_data[current_idx])
formatted_list.append(float_str_fmt.format(*mgm_lists[4])) formatted_list.append(float_str_fmt.format(*mgm_lists[4]))
formatted_list.append(hk_data[current_idx])
print_str_list = [ print_str_list = [
"ACS Board MGM 0 LIS3MDL", "ACS Board MGM 0 LIS3MDL",
"ACS Board MGM 1 RM3100", "ACS Board MGM 1 RM3100",
@ -494,6 +505,7 @@ def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
if PERFORM_MGM_CALIBRATION: if PERFORM_MGM_CALIBRATION:
perform_mgm_calibration(pw, mgm_0_lis3_floats_ut) perform_mgm_calibration(pw, mgm_0_lis3_floats_ut)
assert current_idx == 61 assert current_idx == 61
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=6)
def handle_mgm_data_processed(pw: PrintWrapper, hk_data: bytes): def handle_mgm_data_processed(pw: PrintWrapper, hk_data: bytes):
@ -588,6 +600,7 @@ def handle_gyr_data_processed(pw: PrintWrapper, hk_data: bytes):
] ]
pw.dlog(f"GYR Vec Total: {gyr_vec_tot}") pw.dlog(f"GYR Vec Total: {gyr_vec_tot}")
current_idx += inc_len current_idx += inc_len
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=5)
def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes):
@ -623,6 +636,7 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"GPS Latitude: {lat} [rad]") pw.dlog(f"GPS Latitude: {lat} [rad]")
pw.dlog(f"GPS Longitude: {long} [rad]") pw.dlog(f"GPS Longitude: {long} [rad]")
pw.dlog(f"GPS Velocity: {velo} [m/s]") pw.dlog(f"GPS Velocity: {velo} [m/s]")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def handle_mekf_data(pw: PrintWrapper, hk_data: bytes): def handle_mekf_data(pw: PrintWrapper, hk_data: bytes):
@ -650,6 +664,7 @@ def handle_mekf_data(pw: PrintWrapper, hk_data: bytes):
] ]
pw.dlog(f"MEKF Quaternion: {quat}") pw.dlog(f"MEKF Quaternion: {quat}")
pw.dlog(f"MEKF Rotational Rate: {rate}") pw.dlog(f"MEKF Rotational Rate: {rate}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=2)
def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes): def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes):
@ -685,6 +700,7 @@ def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"Control Values Target Quaternion: {tgt_quat}") pw.dlog(f"Control Values Target Quaternion: {tgt_quat}")
pw.dlog(f"Control Values Error Quaternion: {err_quat}") pw.dlog(f"Control Values Error Quaternion: {err_quat}")
pw.dlog(f"Control Values Error Angle: {err_ang} [rad]") pw.dlog(f"Control Values Error Angle: {err_ang} [rad]")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes): def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes):
@ -722,6 +738,7 @@ def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"Actuator Commands RW Target Torque: {rw_tgt_torque}") pw.dlog(f"Actuator Commands RW Target Torque: {rw_tgt_torque}")
pw.dlog(f"Actuator Commands RW Target Speed: {rw_tgt_speed}") pw.dlog(f"Actuator Commands RW Target Speed: {rw_tgt_speed}")
pw.dlog(f"Actuator Commands MTQ Target Dipole: {mtq_tgt_dipole}") pw.dlog(f"Actuator Commands MTQ Target Dipole: {mtq_tgt_dipole}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def perform_mgm_calibration(pw: PrintWrapper, mgm_tuple: Tuple): def perform_mgm_calibration(pw: PrintWrapper, mgm_tuple: Tuple):

View File

@ -10,12 +10,12 @@ from tmtccmd.config.tmtc import (
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
class OpCodes(str, enum.Enum): class OpCode(str, enum.Enum):
OFF = "off" OFF = "off"
SAFE = "safe" SAFE = "safe"
DETUMBLE = "detumble" DETUMBLE = "detumble"
@ -24,7 +24,7 @@ class OpCodes(str, enum.Enum):
REPORT_ALL_MODES = "all_modes" REPORT_ALL_MODES = "all_modes"
class AcsModes(enum.IntEnum): class AcsMode(enum.IntEnum):
OFF = 0 OFF = 0
SAFE = 1 << 24 SAFE = 1 << 24
DETUMBLE = 2 << 24 DETUMBLE = 2 << 24
@ -42,10 +42,10 @@ class Info(str, enum.Enum):
HANDLER_LIST: Dict[str, Tuple[int, str]] = { HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCodes.OFF: (AcsModes.OFF, Info.OFF), OpCode.OFF: (AcsMode.OFF, Info.OFF),
OpCodes.IDLE: (AcsModes.IDLE, Info.IDLE), OpCode.IDLE: (AcsMode.IDLE, Info.IDLE),
OpCodes.SAFE: (AcsModes.SAFE, Info.SAFE), OpCode.SAFE: (AcsMode.SAFE, Info.SAFE),
OpCodes.DETUMBLE: (AcsModes.DETUMBLE, Info.DETUMBLE), OpCode.DETUMBLE: (AcsMode.DETUMBLE, Info.DETUMBLE),
} }
@ -54,7 +54,7 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
info_prefix = "ACS Subsystem" info_prefix = "ACS Subsystem"
if op_code in OpCodes.REPORT_ALL_MODES: if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}") q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
@ -78,8 +78,8 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_acs_subsystem_cmds(defs: TmtcDefinitionWrapper): def add_acs_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.SAFE, Info.SAFE) oce.add(OpCode.SAFE, Info.SAFE)
oce.add(OpCodes.IDLE, Info.IDLE) oce.add(OpCode.IDLE, Info.IDLE)
oce.add(OpCodes.REPORT_ALL_MODES, Info.REPORT_ALL_MODES) oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.ACS_SS, "ACS Subsystem", oce) defs.add_service(CustomServiceList.ACS_SS, "ACS Subsystem", oce)

View File

@ -22,19 +22,19 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_diag_command, generate_one_diag_command,
generate_one_hk_command, generate_one_hk_command,
) )
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class OpCodes: class OpCode:
ON = ["on"] ON = ["on"]
NORMAL = ["normal"] NORMAL = ["normal"]
OFF = ["off"] OFF = ["off"]
SET_DIPOLE = ["set_dipole"] SET_DIPOLE = ["set_dipole"]
class ImtqSetIds: class ImtqSetId:
ENG_HK_SET = 1 ENG_HK_SET = 1
CAL_MTM_SET = 2 CAL_MTM_SET = 2
RAW_MTM_SET = 3 RAW_MTM_SET = 3
@ -46,7 +46,7 @@ class ImtqSetIds:
NEGATIVE_Z_TEST = 9 NEGATIVE_Z_TEST = 9
class ImtqActionIds: class ImtqActionId:
start_actuation_dipole = bytearray([0x0, 0x0, 0x0, 0x02]) start_actuation_dipole = bytearray([0x0, 0x0, 0x0, 0x02])
get_commanded_dipole = bytearray([0x0, 0x0, 0x0, 0x03]) get_commanded_dipole = bytearray([0x0, 0x0, 0x0, 0x03])
perform_positive_x_test = bytearray([0x0, 0x0, 0x0, 0x07]) perform_positive_x_test = bytearray([0x0, 0x0, 0x0, 0x07])
@ -63,16 +63,16 @@ class ImtqActionIds:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_imtq_cmds(defs: TmtcDefinitionWrapper): def add_imtq_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, "Mode Off") oce.add(OpCode.OFF, "Mode Off")
oce.add(OpCodes.ON, "Mode On") oce.add(OpCode.ON, "Mode On")
oce.add(OpCodes.NORMAL, "Mode Normal") oce.add(OpCode.NORMAL, "Mode Normal")
oce.add("3", "IMTQ perform pos X self test") oce.add("3", "IMTQ perform pos X self test")
oce.add("4", "IMTQ perform neg X self test") oce.add("4", "IMTQ perform neg X self test")
oce.add("5", "IMTQ perform pos Y self test") oce.add("5", "IMTQ perform pos Y self test")
oce.add("6", "IMTQ perform neg Y self test") oce.add("6", "IMTQ perform neg Y self test")
oce.add("7", "IMTQ perform pos Z self test") oce.add("7", "IMTQ perform pos Z self test")
oce.add("8", "IMTQ perform neg Z self test") oce.add("8", "IMTQ perform neg Z self test")
oce.add(OpCodes.SET_DIPOLE, "IMTQ command dipole") oce.add(OpCode.SET_DIPOLE, "IMTQ command dipole")
oce.add("10", "IMTQ get commanded dipole") oce.add("10", "IMTQ get commanded dipole")
oce.add("11", "IMTQ get engineering hk set") oce.add("11", "IMTQ get engineering hk set")
oce.add("12", "IMTQ get calibrated MTM measurement one shot") oce.add("12", "IMTQ get calibrated MTM measurement one shot")
@ -85,92 +85,92 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}" f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}"
) )
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
q.add_log_cmd("IMTQ: Set mode off") q.add_log_cmd("IMTQ: Set mode off")
command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0) command = pack_mode_data(object_id.as_bytes, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCode.ON:
q.add_log_cmd("IMTQ: Set mode on") q.add_log_cmd("IMTQ: Set mode on")
command = pack_mode_data(object_id.as_bytes, Modes.ON, 0) command = pack_mode_data(object_id.as_bytes, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
q.add_log_cmd("IMTQ: Mode Normal") q.add_log_cmd("IMTQ: Mode Normal")
command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) command = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "3": if op_code == "3":
q.add_log_cmd("IMTQ: Perform positive x self test") q.add_log_cmd("IMTQ: Perform positive x self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_x_test command = object_id.as_bytes + ImtqActionId.perform_positive_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of positive x self test results") q.add_log_cmd("IMTQ: Initiate reading of positive x self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive x self test results") q.add_log_cmd("IMTQ: Request dataset with positive x self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_X_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "4": if op_code == "4":
q.add_log_cmd("IMTQ: Perform negative x self test") q.add_log_cmd("IMTQ: Perform negative x self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_x_test command = object_id.as_bytes + ImtqActionId.perform_negative_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of negative x self test results") q.add_log_cmd("IMTQ: Initiate reading of negative x self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with negative x self test results") q.add_log_cmd("IMTQ: Request dataset with negative x self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_X_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "5": if op_code == "5":
q.add_log_cmd("IMTQ: Perform positive y self test") q.add_log_cmd("IMTQ: Perform positive y self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_y_test command = object_id.as_bytes + ImtqActionId.perform_positive_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of positive y self test results") q.add_log_cmd("IMTQ: Initiate reading of positive y self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive y self test results") q.add_log_cmd("IMTQ: Request dataset with positive y self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "6": if op_code == "6":
q.add_log_cmd("IMTQ: Perform negative y self test") q.add_log_cmd("IMTQ: Perform negative y self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_y_test command = object_id.as_bytes + ImtqActionId.perform_negative_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of negative y self test results") q.add_log_cmd("IMTQ: Initiate reading of negative y self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with negative y self test results") q.add_log_cmd("IMTQ: Request dataset with negative y self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "7": if op_code == "7":
q.add_log_cmd("IMTQ: Perform positive z self test") q.add_log_cmd("IMTQ: Perform positive z self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_z_test command = object_id.as_bytes + ImtqActionId.perform_positive_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of positive z self test results") q.add_log_cmd("IMTQ: Initiate reading of positive z self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive z self test results") q.add_log_cmd("IMTQ: Request dataset with positive z self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "8": if op_code == "8":
q.add_log_cmd("IMTQ: Perform negative z self test") q.add_log_cmd("IMTQ: Perform negative z self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_z_test command = object_id.as_bytes + ImtqActionId.perform_negative_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of negative z self test results") q.add_log_cmd("IMTQ: Initiate reading of negative z self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with negative z self test results") q.add_log_cmd("IMTQ: Request dataset with negative z self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Z_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Z_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.SET_DIPOLE: if op_code in OpCode.SET_DIPOLE:
x_dipole = int(input("Specify X dipole [range [0, 2000] * 10^-4 * Am^2]: ")) x_dipole = int(input("Specify X dipole [range [0, 2000] * 10^-4 * Am^2]: "))
y_dipole = int(input("Specify Y dipole [range [0, 2000] * 10^-4 * Am^2]: ")) y_dipole = int(input("Specify Y dipole [range [0, 2000] * 10^-4 * Am^2]: "))
z_dipole = int(input("Specify Z dipole [range [0, 2000] * 10^-4 * Am^2]: ")) z_dipole = int(input("Specify Z dipole [range [0, 2000] * 10^-4 * Am^2]: "))
@ -192,14 +192,14 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
if op_code == "10": if op_code == "10":
q.add_log_cmd("IMTQ: Get commanded dipole") q.add_log_cmd("IMTQ: Get commanded dipole")
command = object_id.as_bytes + ImtqActionIds.get_commanded_dipole command = object_id.as_bytes + ImtqActionId.get_commanded_dipole
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11": if op_code == "11":
q.add_log_cmd("IMTQ: Get engineering hk set") q.add_log_cmd("IMTQ: Get engineering hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetIds.ENG_HK_SET) sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.ENG_HK_SET)
) )
) )
@ -207,9 +207,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
q.add_log_cmd("IMTQ: Get calibrated MTM hk set") q.add_log_cmd("IMTQ: Get calibrated MTM hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid( sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.CAL_MTM_SET)
object_id=object_id.as_bytes, set_id=ImtqSetIds.CAL_MTM_SET
)
) )
) )
@ -217,9 +215,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
q.add_log_cmd("IMTQ: Get raw MTM hk set") q.add_log_cmd("IMTQ: Get raw MTM hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid( sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.RAW_MTM_SET)
object_id=object_id.as_bytes, set_id=ImtqSetIds.RAW_MTM_SET
)
) )
) )
@ -236,7 +232,7 @@ def pack_dipole_command(
When set to 0, the dipole will be generated until a new dipole actuation When set to 0, the dipole will be generated until a new dipole actuation
command is sent. command is sent.
""" """
action_id = ImtqActionIds.start_actuation_dipole action_id = ImtqActionId.start_actuation_dipole
command = object_id + action_id command = object_id + action_id
x_dipole = int(round(x_dipole)) x_dipole = int(round(x_dipole))
y_dipole = int(round(y_dipole)) y_dipole = int(round(y_dipole))

View File

@ -20,13 +20,13 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
disable_periodic_hk_command, disable_periodic_hk_command,
) )
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class OpCodesDevs: class OpCodesDev:
SPEED = ["0", "speed"] SPEED = ["0", "speed"]
ON = ["1", "on"] ON = ["1", "on"]
NML = ["2", "nml"] NML = ["2", "nml"]
@ -37,7 +37,7 @@ class OpCodesDevs:
DISABLE_STATUS_HK = ["7", "disable_status_hk"] DISABLE_STATUS_HK = ["7", "disable_status_hk"]
class InfoDevs: class InfoDev:
SPEED = "Set speed" SPEED = "Set speed"
ON = "Set On" ON = "Set On"
NML = "Set Normal" NML = "Set Normal"
@ -64,14 +64,14 @@ class InfoAss:
ALL_SPEED_OFF = "Speed down to 0" ALL_SPEED_OFF = "Speed down to 0"
class RwSetIds: class RwSetId:
STATUS_SET_ID = 4 STATUS_SET_ID = 4
TEMPERATURE_SET_ID = 8 TEMPERATURE_SET_ID = 8
LAST_RESET = 2 LAST_RESET = 2
TM_SET = 9 TM_SET = 9
class RwCommandIds: class RwCommandId:
RESET_MCU = bytearray([0x0, 0x0, 0x0, 0x01]) RESET_MCU = bytearray([0x0, 0x0, 0x0, 0x01])
# Reads status information from reaction wheel into dataset with id 4 # Reads status information from reaction wheel into dataset with id 4
GET_RW_STATUS = bytearray([0x0, 0x0, 0x0, 0x04]) GET_RW_STATUS = bytearray([0x0, 0x0, 0x0, 0x04])
@ -94,14 +94,14 @@ class RampTime:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_rw_cmds(defs: TmtcDefinitionWrapper): def add_rw_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(info=InfoDevs.SPEED, keys=OpCodesDevs.SPEED) oce.add(info=InfoDev.SPEED, keys=OpCodesDev.SPEED)
oce.add(info=InfoDevs.ON, keys=OpCodesDevs.ON) oce.add(info=InfoDev.ON, keys=OpCodesDev.ON)
oce.add(info=InfoDevs.OFF, keys=OpCodesDevs.OFF) oce.add(info=InfoDev.OFF, keys=OpCodesDev.OFF)
oce.add(info=InfoDevs.NML, keys=OpCodesDevs.NML) oce.add(info=InfoDev.NML, keys=OpCodesDev.NML)
oce.add(info=InfoDevs.GET_STATUS, keys=OpCodesDevs.GET_STATUS) oce.add(info=InfoDev.GET_STATUS, keys=OpCodesDev.GET_STATUS)
oce.add(info=InfoDevs.GET_TM, keys=OpCodesDevs.GET_TM) oce.add(info=InfoDev.GET_TM, keys=OpCodesDev.GET_TM)
oce.add(info=InfoDevs.ENABLE_STATUS_HK, keys=OpCodesDevs.ENABLE_STATUS_HK) oce.add(info=InfoDev.ENABLE_STATUS_HK, keys=OpCodesDev.ENABLE_STATUS_HK)
oce.add(info=InfoDevs.DISABLE_STATUS_HK, keys=OpCodesDevs.DISABLE_STATUS_HK) oce.add(info=InfoDev.DISABLE_STATUS_HK, keys=OpCodesDev.DISABLE_STATUS_HK)
defs.add_service( defs.add_service(
name=CustomServiceList.REACTION_WHEEL_1.value, name=CustomServiceList.REACTION_WHEEL_1.value,
info="Reaction Wheel 1", info="Reaction Wheel 1",
@ -138,80 +138,80 @@ def add_rw_cmds(defs: TmtcDefinitionWrapper):
def pack_single_rw_test_into( def pack_single_rw_test_into(
object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str
): ):
if op_code in OpCodesDevs.SPEED: if op_code in OpCodesDev.SPEED:
speed, ramp_time = prompt_speed_ramp_time() speed, ramp_time = prompt_speed_ramp_time()
q.add_log_cmd( q.add_log_cmd(
f"RW {rw_idx}: {InfoDevs.SPEED} with target " f"RW {rw_idx}: {InfoDev.SPEED} with target "
f"speed {speed / 10.0} RPM and {ramp_time} ms ramp time" f"speed {speed / 10.0} RPM and {ramp_time} ms ramp time"
) )
q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time)) q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time))
if op_code in OpCodesDevs.ON: if op_code in OpCodesDev.ON:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.ON}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ON}")
mode_data = pack_mode_data(object_id, Modes.ON, 0) mode_data = pack_mode_data(object_id, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.NML: if op_code in OpCodesDev.NML:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.NML}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.NML}")
mode_data = pack_mode_data(object_id, Modes.NORMAL, 0) mode_data = pack_mode_data(object_id, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.OFF: if op_code in OpCodesDev.OFF:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.OFF}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.OFF}")
mode_data = pack_mode_data(object_id, Modes.OFF, 0) mode_data = pack_mode_data(object_id, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.GET_TM: if op_code in OpCodesDev.GET_TM:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_TM}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_TM}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command( generate_one_hk_command(
sid=make_sid(object_id=object_id, set_id=RwSetIds.TM_SET) sid=make_sid(object_id=object_id, set_id=RwSetId.TM_SET)
) )
) )
if op_code in OpCodesDevs.GET_STATUS: if op_code in OpCodesDev.GET_STATUS:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_STATUS}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_STATUS}")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=object_id, set_id=RwSetIds.STATUS_SET_ID) sid=make_sid(object_id=object_id, set_id=RwSetId.STATUS_SET_ID)
) )
) )
if op_code in OpCodesDevs.ENABLE_STATUS_HK: if op_code in OpCodesDev.ENABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.ENABLE_STATUS_HK}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ENABLE_STATUS_HK}")
interval = float(input("Please enter HK interval in floating point seconds: ")) interval = float(input("Please enter HK interval in floating point seconds: "))
cmds = enable_periodic_hk_command_with_interval( cmds = enable_periodic_hk_command_with_interval(
True, make_sid(object_id, RwSetIds.STATUS_SET_ID), interval True, make_sid(object_id, RwSetId.STATUS_SET_ID), interval
) )
for cmd in cmds: for cmd in cmds:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodesDevs.DISABLE_STATUS_HK: if op_code in OpCodesDev.DISABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.DISABLE_STATUS_HK}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.DISABLE_STATUS_HK}")
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
True, make_sid(object_id, RwSetIds.STATUS_SET_ID) True, make_sid(object_id, RwSetId.STATUS_SET_ID)
) )
) )
def pack_rw_ass_cmds(q: DefaultPusQueueHelper, object_id: bytes, op_code: str): def pack_rw_ass_cmds(q: DefaultPusQueueHelper, object_id: bytes, op_code: str):
if op_code in OpCodesAss.OFF: if op_code in OpCodesAss.OFF:
data = pack_mode_data(object_id=object_id, mode=Modes.OFF, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.OFF, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.ON: if op_code in OpCodesAss.ON:
data = pack_mode_data(object_id=object_id, mode=Modes.ON, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.ON, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.NML: if op_code in OpCodesAss.NML:
data = pack_mode_data(object_id=object_id, mode=Modes.NORMAL, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.NORMAL, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.ALL_SPEED_UP: if op_code in OpCodesAss.ALL_SPEED_UP:
@ -264,7 +264,7 @@ def pack_set_speed_command(
ramp_time_ms > 0 and (ramp_time_ms > 20000 or ramp_time_ms < 10) ramp_time_ms > 0 and (ramp_time_ms > 20000 or ramp_time_ms < 10)
): ):
raise ValueError("Invalid Ramp Speed time. Allowed range is [10-20000] ms") raise ValueError("Invalid Ramp Speed time. Allowed range is [10-20000] ms")
command_id = RwCommandIds.SET_SPEED command_id = RwCommandId.SET_SPEED
command = bytearray() command = bytearray()
command += object_id + command_id command += object_id + command_id
command = command + struct.pack("!i", speed) command = command + struct.pack("!i", speed)
@ -279,7 +279,7 @@ def handle_rw_hk_data(
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
if set_id == RwSetIds.STATUS_SET_ID: if set_id == RwSetId.STATUS_SET_ID:
pw.dlog( pw.dlog(
f"Received Status HK (ID {set_id}) from Reaction Wheel {object_id.name}" f"Received Status HK (ID {set_id}) from Reaction Wheel {object_id.name}"
) )
@ -303,7 +303,7 @@ def handle_rw_hk_data(
f"1: High Current Mode (0.6 A)" f"1: High Current Mode (0.6 A)"
) )
printer.print_validity_buffer(hk_data[current_idx:], 5) printer.print_validity_buffer(hk_data[current_idx:], 5)
if set_id == RwSetIds.LAST_RESET: if set_id == RwSetId.LAST_RESET:
pw.dlog( pw.dlog(
f"Received Last Reset HK (ID {set_id}) from Reaction Wheel {object_id.name}" f"Received Last Reset HK (ID {set_id}) from Reaction Wheel {object_id.name}"
) )
@ -317,7 +317,7 @@ def handle_rw_hk_data(
f"Last Non-Cleared (Cached) Reset Status {last_not_cleared_reset_status} | " f"Last Non-Cleared (Cached) Reset Status {last_not_cleared_reset_status} | "
f"Current Reset Status {current_reset_status}" f"Current Reset Status {current_reset_status}"
) )
if set_id == RwSetIds.TM_SET: if set_id == RwSetId.TM_SET:
pw.dlog(f"Received TM HK (ID {set_id}) from Reaction Wheel {object_id.name}") pw.dlog(f"Received TM HK (ID {set_id}) from Reaction Wheel {object_id.name}")
fmt_str = "!BiffBBiiIIIIIIIIIIIIIIII" fmt_str = "!BiffBBiiIIIIIIIIIIIIIIII"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -1,6 +1,6 @@
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import SUS_BOARD_ASS_ID from eive_tmtc.config.object_ids import SUS_BOARD_ASS_ID
from eive_tmtc.tmtc.acs.acs_board import DualSideSubmodes from eive_tmtc.tmtc.acs.acs_board import DualSideSubmode
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
@ -9,10 +9,10 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider, DefaultPusQueueHelper from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
class SusOpCodes: class SusOpCode:
SUS_ASS_NOM_SIDE = ["0", "nom"] SUS_ASS_NOM_SIDE = ["0", "nom"]
SUS_ASS_RED_SIDE = ["1", "red"] SUS_ASS_RED_SIDE = ["1", "red"]
SUS_ASS_DUAL_MODE = ["2", "dual"] SUS_ASS_DUAL_MODE = ["2", "dual"]
@ -20,35 +20,35 @@ class SusOpCodes:
def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str): def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in SusOpCodes.SUS_ASS_NOM_SIDE: if op_code in SusOpCode.SUS_ASS_NOM_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching to SUS board to nominal side", info="Switching to SUS board to nominal side",
) )
if op_code in SusOpCodes.SUS_ASS_RED_SIDE: if op_code in SusOpCode.SUS_ASS_RED_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching to SUS board to redundant side", info="Switching to SUS board to redundant side",
) )
if op_code in SusOpCodes.SUS_ASS_OFF: if op_code in SusOpCode.SUS_ASS_OFF:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info="Switching SUS board off", info="Switching SUS board off",
) )
if op_code in SusOpCodes.SUS_ASS_DUAL_MODE: if op_code in SusOpCode.SUS_ASS_DUAL_MODE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE, submode=DualSideSubmode.DUAL_SIDE,
q=q, q=q,
info="Switching to SUS board to dual side", info="Switching to SUS board to dual side",
) )
@ -65,19 +65,19 @@ def pack_sus_cmds_prvoider(p: ServiceProviderParams):
def add_sus_board_cmds(defs: TmtcDefinitionWrapper): def add_sus_board_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_NOM_SIDE, keys=SusOpCode.SUS_ASS_NOM_SIDE,
info="Switch SUS board to nominal side", info="Switch SUS board to nominal side",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_RED_SIDE, keys=SusOpCode.SUS_ASS_RED_SIDE,
info="Switch SUS board to redundant side", info="Switch SUS board to redundant side",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_OFF, keys=SusOpCode.SUS_ASS_OFF,
info="Switch off SUS board", info="Switch off SUS board",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_DUAL_MODE, keys=SusOpCode.SUS_ASS_DUAL_MODE,
info="Switch SUS board to dual mode", info="Switch SUS board to dual mode",
) )
defs.add_service( defs.add_service(

View File

@ -2,13 +2,13 @@ from typing import Union
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
def pack_mode_cmd_with_info( def pack_mode_cmd_with_info(
object_id: Union[ObjectIdU32, bytes], object_id: Union[ObjectIdU32, bytes],
mode: Union[int, Modes], mode: Union[int, Mode],
submode: int, submode: int,
q: DefaultPusQueueHelper, q: DefaultPusQueueHelper,
info: str, info: str,
@ -27,6 +27,6 @@ def pack_mode_cmd_with_info(
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=mode_data
) )
) )

View File

@ -1,21 +1,24 @@
import enum import enum
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss import PusTelecommand from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper from tmtccmd.config import TmtcDefinitionWrapper
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
from eive_tmtc.config.object_ids import CORE_CONTROLLER_ID from eive_tmtc.config.object_ids import CORE_CONTROLLER_ID
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger() LOGGER = get_console_logger()
class ActionIds(enum.IntEnum): class ActionId(enum.IntEnum):
LIST_DIR_INTO_FILE = 0 LIST_DIR_INTO_FILE = 0
SWITCH_REBOOT_FILE_HANDLING = 5 SWITCH_REBOOT_FILE_HANDLING = 5
RESET_REBOOT_COUNTER = 6 RESET_REBOOT_COUNTER = 6
@ -31,11 +34,11 @@ class ActionIds(enum.IntEnum):
FULL_REBOOT = 34 FULL_REBOOT = 34
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
HK = 5 HK = 5
class OpCodes: class OpCode:
REBOOT_XSC = ["0", "reboot_xsc"] REBOOT_XSC = ["0", "reboot_xsc"]
XSC_REBOOT_SELF = ["1", "reboot_self"] XSC_REBOOT_SELF = ["1", "reboot_self"]
XSC_REBOOT_0_0 = ["2", "reboot_00"] XSC_REBOOT_0_0 = ["2", "reboot_00"]
@ -86,158 +89,158 @@ class Copy(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_core_controller_definitions(defs: TmtcDefinitionWrapper): def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC) oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC) oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCodes.REBOOT_FULL, info=Info.REBOOT_FULL) oce.add(keys=OpCode.REBOOT_FULL, info=Info.REBOOT_FULL)
oce.add(keys=OpCodes.XSC_REBOOT_SELF, info="Reboot Self") oce.add(keys=OpCode.XSC_REBOOT_SELF, info="Reboot Self")
oce.add(keys=OpCodes.XSC_REBOOT_0_0, info="Reboot 0 0") oce.add(keys=OpCode.XSC_REBOOT_0_0, info="Reboot 0 0")
oce.add(keys=OpCodes.XSC_REBOOT_0_1, info="Reboot 0 1") oce.add(keys=OpCode.XSC_REBOOT_0_1, info="Reboot 0 1")
oce.add(keys=OpCodes.XSC_REBOOT_1_0, info="Reboot 1 0") oce.add(keys=OpCode.XSC_REBOOT_1_0, info="Reboot 1 0")
oce.add(keys=OpCodes.XSC_REBOOT_1_1, info="Reboot 1 1") oce.add(keys=OpCode.XSC_REBOOT_1_1, info="Reboot 1 1")
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP) oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add( oce.add(
keys=OpCodes.GET_HK, keys=OpCode.GET_HK,
info="Request housekeeping set", info="Request housekeeping set",
) )
oce.add( oce.add(
keys=OpCodes.ENABLE_REBOOT_FILE_HANDLING, keys=OpCode.ENABLE_REBOOT_FILE_HANDLING,
info="Enable reboot file handling", info="Enable reboot file handling",
) )
oce.add( oce.add(
keys=OpCodes.DISABLE_REBOOT_FILE_HANDLING, keys=OpCode.DISABLE_REBOOT_FILE_HANDLING,
info="Disable reboot file handling", info="Disable reboot file handling",
) )
oce.add( oce.add(
keys=OpCodes.RESET_ALL_REBOOT_COUNTERS, keys=OpCode.RESET_ALL_REBOOT_COUNTERS,
info="Reset all reboot counters", info="Reset all reboot counters",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_00, keys=OpCode.RESET_REBOOT_COUNTER_00,
info="Reset reboot counter 0 0", info="Reset reboot counter 0 0",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_01, keys=OpCode.RESET_REBOOT_COUNTER_01,
info="Reset reboot counter 0 1", info="Reset reboot counter 0 1",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_10, keys=OpCode.RESET_REBOOT_COUNTER_10,
info="Reset reboot counter 1 0", info="Reset reboot counter 1 0",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_11, keys=OpCode.RESET_REBOOT_COUNTER_11,
info="Reset reboot counter 1 1", info="Reset reboot counter 1 1",
) )
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP) oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCodes.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0) oce.add(keys=OpCode.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0)
oce.add(keys=OpCodes.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1) oce.add(keys=OpCode.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1)
oce.add(keys=OpCodes.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS) oce.add(keys=OpCode.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS)
defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce) defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce)
def pack_core_commands(q: DefaultPusQueueHelper, op_code: str): def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.REBOOT_XSC: if op_code in OpCode.REBOOT_XSC:
reboot_self, chip_select, copy_select = determine_reboot_params() reboot_self, chip_select, copy_select = determine_reboot_params()
perform_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
reboot_self=reboot_self, reboot_self=reboot_self,
chip=chip_select, chip=chip_select,
copy=copy_select, copy=copy_select,
) )
if op_code in OpCodes.REBOOT_FULL: if op_code in OpCode.REBOOT_FULL:
q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}") q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.FULL_REBOOT object_id=CORE_CONTROLLER_ID, action_id=ActionId.FULL_REBOOT
) )
) )
if op_code in OpCodes.XSC_REBOOT_SELF: if op_code in OpCode.XSC_REBOOT_SELF:
perform_reboot_cmd(q=q, reboot_self=True) add_xsc_reboot_cmd(q=q, reboot_self=True)
if op_code in OpCodes.XSC_REBOOT_0_0: if op_code in OpCode.XSC_REBOOT_0_0:
perform_reboot_cmd( add_xsc_reboot_cmd(
q=q, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM q=q, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
) )
if op_code in OpCodes.XSC_REBOOT_0_1: if op_code in OpCode.XSC_REBOOT_0_1:
perform_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
reboot_self=False, reboot_self=False,
chip=Chip.CHIP_0, chip=Chip.CHIP_0,
copy=Copy.COPY_1_GOLD, copy=Copy.COPY_1_GOLD,
) )
if op_code in OpCodes.XSC_REBOOT_1_0: if op_code in OpCode.XSC_REBOOT_1_0:
perform_reboot_cmd( add_xsc_reboot_cmd(
q=q, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM q=q, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
) )
if op_code in OpCodes.XSC_REBOOT_1_1: if op_code in OpCode.XSC_REBOOT_1_1:
perform_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
reboot_self=False, reboot_self=False,
chip=Chip.CHIP_1, chip=Chip.CHIP_1,
copy=Copy.COPY_1_GOLD, copy=Copy.COPY_1_GOLD,
) )
if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING: if op_code in OpCode.DISABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Disabling reboot file handling") q.add_log_cmd("Disabling reboot file handling")
user_data = bytearray([0]) user_data = bytearray([0])
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionId.SWITCH_REBOOT_FILE_HANDLING,
user_data=user_data, user_data=user_data,
) )
) )
if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING: if op_code in OpCode.ENABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Enabling reboot file handling") q.add_log_cmd("Enabling reboot file handling")
user_data = bytearray([1]) user_data = bytearray([1])
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionId.SWITCH_REBOOT_FILE_HANDLING,
user_data=user_data, user_data=user_data,
) )
) )
if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS: if op_code in OpCode.RESET_ALL_REBOOT_COUNTERS:
q.add_log_cmd("Resetting all reboot counters") q.add_log_cmd("Resetting all reboot counters")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER, action_id=ActionId.RESET_REBOOT_COUNTER,
) )
) )
if op_code in OpCodes.RESET_REBOOT_COUNTER_00: if op_code in OpCode.RESET_REBOOT_COUNTER_00:
reset_specific_boot_counter(q, 0, 0) reset_specific_boot_counter(q, 0, 0)
if op_code in OpCodes.RESET_REBOOT_COUNTER_01: if op_code in OpCode.RESET_REBOOT_COUNTER_01:
reset_specific_boot_counter(q, 0, 1) reset_specific_boot_counter(q, 0, 1)
if op_code in OpCodes.RESET_REBOOT_COUNTER_10: if op_code in OpCode.RESET_REBOOT_COUNTER_10:
reset_specific_boot_counter(q, 1, 0) reset_specific_boot_counter(q, 1, 0)
if op_code in OpCodes.RESET_REBOOT_COUNTER_11: if op_code in OpCode.RESET_REBOOT_COUNTER_11:
reset_specific_boot_counter(q, 1, 1) reset_specific_boot_counter(q, 1, 1)
if op_code in OpCodes.OBSW_UPDATE_FROM_SD_0: if op_code in OpCode.OBSW_UPDATE_FROM_SD_0:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0) q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_0)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_0))
if op_code in OpCodes.OBSW_UPDATE_FROM_SD_1: if op_code in OpCode.OBSW_UPDATE_FROM_SD_1:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1) q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_1)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_1))
if op_code in OpCodes.OBSW_UPDATE_FROM_TMP: if op_code in OpCode.OBSW_UPDATE_FROM_TMP:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP) q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_TMP)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_TMP))
if op_code in OpCodes.SWITCH_TO_SD_0: if op_code in OpCode.SWITCH_TO_SD_0:
q.add_log_cmd(Info.SWITCH_TO_SD_0) q.add_log_cmd(Info.SWITCH_TO_SD_0)
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_0 object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_0
) )
) )
if op_code in OpCodes.SWITCH_TO_SD_1: if op_code in OpCode.SWITCH_TO_SD_1:
q.add_log_cmd(Info.SWITCH_TO_SD_1) q.add_log_cmd(Info.SWITCH_TO_SD_1)
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_1 object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_1
) )
) )
if op_code in OpCodes.SWITCH_TO_BOTH_SD_CARDS: if op_code in OpCode.SWITCH_TO_BOTH_SD_CARDS:
while True: while True:
active_sd_card = int(input("Please specify active SD cqrd [0/1]: ")) active_sd_card = int(input("Please specify active SD cqrd [0/1]: "))
if active_sd_card not in [0, 1]: if active_sd_card not in [0, 1]:
@ -245,29 +248,35 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
break break
q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS) q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS)
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_TO_BOTH_SD_CARDS, action_id=ActionId.SWITCH_TO_BOTH_SD_CARDS,
user_data=bytes([active_sd_card]), user_data=bytes([active_sd_card]),
) )
) )
if op_code in OpCodes.GET_HK: if op_code in OpCode.GET_HK:
q.add_log_cmd("Requesting housekeeping set") q.add_log_cmd("Requesting housekeeping set")
sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetIds.HK) sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetId.HK)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int): def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int):
q.add_log_cmd(f"Resetting boot counter {chip} {copy}") q.add_log_cmd(f"Resetting boot counter {chip} {copy}")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER, action_id=ActionId.RESET_REBOOT_COUNTER,
user_data=bytes([chip, copy]), user_data=bytes([chip, copy]),
) )
) )
def create_full_reboot_cmds() -> PusTelecommand:
return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionId.FULL_REBOOT
)
def determine_reboot_params() -> (bool, Chip, Copy): def determine_reboot_params() -> (bool, Chip, Copy):
chip_select = -1 chip_select = -1
copy_select = -1 copy_select = -1
@ -306,30 +315,52 @@ def determine_chip_and_copy() -> (int, int):
def pack_obsw_update_cmd(action_id: int) -> PusTelecommand: def pack_obsw_update_cmd(action_id: int) -> PusTelecommand:
chip, copy = determine_chip_and_copy() chip, copy = determine_chip_and_copy()
user_data = bytes([chip, copy]) user_data = bytes([chip, copy])
return create_fsfw_action_cmd( return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data
) )
def perform_reboot_cmd( def add_xsc_reboot_cmd(
q: DefaultPusQueueHelper, q: DefaultPusQueueHelper,
reboot_self: bool, reboot_self: bool,
chip: Chip = Chip.NONE, chip: Chip = Chip.NONE,
copy: Copy = Copy.NONE, copy: Copy = Copy.NONE,
): ):
tc_data = bytearray()
if reboot_self: if reboot_self:
q.add_log_cmd("Packing reboot command for current image") q.add_log_cmd("Packing reboot command for current image")
else:
q.add_log_cmd(f"Packing reboot command for chip {chip} and copy {copy}")
q.add_pus_tc(create_xsc_reboot_cmds(reboot_self, chip, copy))
def create_xsc_reboot_cmds(
reboot_self: bool,
chip: Chip = Chip.NONE,
copy: Copy = Copy.NONE,
) -> PusTelecommand:
tc_data = bytearray()
if reboot_self:
tc_data.append(True) tc_data.append(True)
else: else:
tc_data.append(False) tc_data.append(False)
tc_data.append(chip) tc_data.append(chip)
tc_data.append(copy) tc_data.append(copy)
q.add_log_cmd(f"Packing reboot command for chip {chip} and copy {copy}") return create_action_cmd(
q.add_pus_tc( object_id=CORE_CONTROLLER_ID, action_id=ActionId.XSC_REBOOT, user_data=tc_data
create_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.XSC_REBOOT,
user_data=tc_data,
)
) )
def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetId.HK:
pw = PrintWrapper(printer)
fmt_str = "!fff"
inc_len = struct.calcsize(fmt_str)
(temperature, ps_voltage, pl_voltage) = struct.unpack(
fmt_str, hk_data[0 : 0 + inc_len]
)
printout = (
f"Chip Temperature [°C] {temperature} | PS Voltage [mV] {ps_voltage} | "
f"PL Voltage [mV] {pl_voltage}"
)
pw.dlog(printout)
printer.print_validity_buffer(validity_buffer=hk_data[inc_len:], num_vars=3)

View File

@ -9,15 +9,15 @@ from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservice
class OpCodes(str, enum.Enum): class OpCode(str, enum.Enum):
OFF = "off" OFF = "off"
REPORT_ALL_MODES = "report_modes" REPORT_ALL_MODES = "report_modes"
class PayloadModes(enum.IntEnum): class PayloadMode(enum.IntEnum):
OFF = 0 OFF = 0
@ -27,7 +27,7 @@ class Info(str, enum.Enum):
HANDLER_LIST: Dict[str, Tuple[int, str]] = { HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCodes.OFF: (PayloadModes.OFF, Info.OFF), OpCode.OFF: (PayloadMode.OFF, Info.OFF),
} }
@ -36,12 +36,12 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
info_prefix = "ACS Subsystem" info_prefix = "ACS Subsystem"
if op_code in OpCodes.REPORT_ALL_MODES: if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}") q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=ModeSubservices.TC_MODE_ANNOUNCE_RECURSIVE, subservice=ModeSubservice.TC_MODE_ANNOUNCE_RECURSIVE,
app_data=PL_SUBSYSTEM_ID, app_data=PL_SUBSYSTEM_ID,
) )
) )
@ -60,6 +60,6 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_payload_subsystem_cmds(defs: TmtcDefinitionWrapper): def add_payload_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.REPORT_ALL_MODES, Info.REPORT_ALL_MODES) oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.PL_SS, "Payload Subsystem", oce) defs.add_service(CustomServiceList.PL_SS, "Payload Subsystem", oce)

View File

@ -16,7 +16,7 @@ from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class ActionIds: class ActionId:
DUMP_MRAM = 1 DUMP_MRAM = 1
@ -43,7 +43,7 @@ def pack_ploc_memory_dumper_cmd(
def pack_mram_dump_cmd(object_id: bytes) -> bytearray: def pack_mram_dump_cmd(object_id: bytes) -> bytearray:
start = int(input("Start address: 0x"), 16) start = int(input("Start address: 0x"), 16)
end = int(input("End address: 0x"), 16) end = int(input("End address: 0x"), 16)
command = object_id + struct.pack("!I", ActionIds.DUMP_MRAM) command = object_id + struct.pack("!I", ActionId.DUMP_MRAM)
command = command + struct.pack("!I", start) command = command + struct.pack("!I", start)
command = command + struct.pack("!I", end) command = command + struct.pack("!I", end)
return bytearray(command) return bytearray(command)

View File

@ -21,7 +21,7 @@ from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from eive_tmtc.utility.input_helper import InputHelper from eive_tmtc.utility.input_helper import InputHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
LOGGER = get_console_logger() LOGGER = get_console_logger()
@ -43,14 +43,14 @@ SEQ_FILE_DICT = {
MANUAL_INPUT: ["manual input", ""], MANUAL_INPUT: ["manual input", ""],
"2": [f"16QRM On Carrier 200 MBd ({SEQ_FILE_NAMES[0]})", f"{SEQ_FILE_NAMES[0]}"], "2": [f"16QRM On Carrier 200 MBd ({SEQ_FILE_NAMES[0]})", f"{SEQ_FILE_NAMES[0]}"],
"3": [f"QPSK On Carrier 780 MBd ({SEQ_FILE_NAMES[1]})", f"{SEQ_FILE_NAMES[1]}"], "3": [f"QPSK On Carrier 780 MBd ({SEQ_FILE_NAMES[1]})", f"{SEQ_FILE_NAMES[1]}"],
"4": [f"Maximum Bandwidth QPSK ({SEQ_FILE_NAMES[2]})", f"{SEQ_FILE_NAMES[2]}"] "4": [f"Maximum Bandwidth QPSK ({SEQ_FILE_NAMES[2]})", f"{SEQ_FILE_NAMES[2]}"],
} }
CARRIAGE_RETURN = 0xD CARRIAGE_RETURN = 0xD
class CommandIds(enum.IntEnum): class CommandId(enum.IntEnum):
TC_MEM_WRITE = 1 TC_MEM_WRITE = 1
TC_MEM_READ = 2 TC_MEM_READ = 2
FLASH_WRITE = 9 FLASH_WRITE = 9
@ -68,7 +68,7 @@ class CommandIds(enum.IntEnum):
RELEASE_UART_TX = 21 RELEASE_UART_TX = 21
class OpCodes: class OpCode:
ON = ["on"] ON = ["on"]
OFF = ["off"] OFF = ["off"]
NORMAL = ["normal"] NORMAL = ["normal"]
@ -104,22 +104,22 @@ class PlocReplyIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper): def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.ON, Info.ON) oce.add(OpCode.ON, Info.ON)
oce.add(OpCodes.NORMAL, Info.NORMAL) oce.add(OpCode.NORMAL, Info.NORMAL)
oce.add("3", "Ploc MPSoC: Memory write") oce.add("3", "Ploc MPSoC: Memory write")
oce.add("4", "Ploc MPSoC: Memory read") oce.add("4", "Ploc MPSoC: Memory read")
oce.add("5", "Ploc MPSoC: Flash write") oce.add("5", "Ploc MPSoC: Flash write")
oce.add("6", "Ploc MPSoC: Flash delete") oce.add("6", "Ploc MPSoC: Flash delete")
oce.add(OpCodes.REPLAY_START, Info.REPLAY_START) oce.add(OpCode.REPLAY_START, Info.REPLAY_START)
oce.add("8", "Ploc MPSoC: Replay stop") oce.add("8", "Ploc MPSoC: Replay stop")
oce.add(OpCodes.DOWNLINK_PWR_ON, Info.DOWNLINK_PWR_ON) oce.add(OpCode.DOWNLINK_PWR_ON, Info.DOWNLINK_PWR_ON)
oce.add("10", "Ploc MPSoC: Downlink pwr off") oce.add("10", "Ploc MPSoC: Downlink pwr off")
oce.add(OpCodes.REPLAY_WRITE_SEQ, Info.REPLAY_WRITE_SEQ) oce.add(OpCode.REPLAY_WRITE_SEQ, Info.REPLAY_WRITE_SEQ)
oce.add("12", "Ploc MPSoC: OBSW reset sequence count") oce.add("12", "Ploc MPSoC: OBSW reset sequence count")
oce.add(OpCodes.VERIFY_BOOT, "Ploc MPSoC: Read DEADBEEF address") oce.add(OpCode.VERIFY_BOOT, "Ploc MPSoC: Read DEADBEEF address")
oce.add(OpCodes.MODE_REPLAY, Info.MODE_REPLAY) oce.add(OpCode.MODE_REPLAY, Info.MODE_REPLAY)
oce.add(OpCodes.MODE_IDLE, Info.MODE_IDLE) oce.add(OpCode.MODE_IDLE, Info.MODE_IDLE)
oce.add("16", "Ploc MPSoC: Tc cam command send") oce.add("16", "Ploc MPSoC: Tc cam command send")
oce.add("17", "Ploc MPSoC: Set UART TX tristate") oce.add("17", "Ploc MPSoC: Set UART TX tristate")
oce.add("18", "Ploc MPSoC: Relesase UART TX") oce.add("18", "Ploc MPSoC: Relesase UART TX")
@ -136,17 +136,17 @@ def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}" f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}"
) )
obyt = object_id.as_bytes obyt = object_id.as_bytes
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}") q.add_log_cmd(f"{prefix}: {Info.OFF}")
command = pack_mode_data(obyt, Modes.OFF, 0) command = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCode.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}") q.add_log_cmd(f"{prefix}: {Info.ON}")
data = pack_mode_data(obyt, Modes.ON, 0) data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
q.add_log_cmd(f"{prefix}: {Info.NORMAL}") q.add_log_cmd(f"{prefix}: {Info.NORMAL}")
data = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) data = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3": if op_code == "3":
q.add_log_cmd("PLOC MPSoC: TC mem write test") q.add_log_cmd("PLOC MPSoC: TC mem write test")
@ -172,64 +172,64 @@ def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
q.add_log_cmd("PLOC MPSoC: Flash delete") q.add_log_cmd("PLOC MPSoC: Flash delete")
data = prepare_flash_delete_cmd(object_id.as_bytes) data = prepare_flash_delete_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.REPLAY_START: if op_code in OpCode.REPLAY_START:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_START}") q.add_log_cmd(f"{prefix}: {Info.REPLAY_START}")
data = prepare_replay_start_cmd(object_id.as_bytes) data = prepare_replay_start_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8": if op_code == "8":
q.add_log_cmd("PLOC MPSoC: Replay stop") q.add_log_cmd("PLOC MPSoC: Replay stop")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_REPLAY_STOP) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_REPLAY_STOP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.DOWNLINK_PWR_ON: if op_code in OpCode.DOWNLINK_PWR_ON:
q.add_log_cmd(f"{prefix}: {OpCodes.DOWNLINK_PWR_ON}") q.add_log_cmd(f"{prefix}: {OpCode.DOWNLINK_PWR_ON}")
data = prepare_downlink_pwr_on_cmd(object_id.as_bytes) data = prepare_downlink_pwr_on_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10": if op_code == "10":
q.add_log_cmd("PLOC MPSoC: Downlink pwr off") q.add_log_cmd("PLOC MPSoC: Downlink pwr off")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_OFF) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_DOWNLINK_PWR_OFF)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.REPLAY_WRITE_SEQ: if op_code in OpCode.REPLAY_WRITE_SEQ:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_WRITE_SEQ}") q.add_log_cmd(f"{prefix}: {Info.REPLAY_WRITE_SEQ}")
data = prepare_replay_write_sequence_cmd(object_id.as_bytes) data = prepare_replay_write_sequence_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12": if op_code == "12":
q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count") q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count")
data = object_id.as_bytes + struct.pack("!I", CommandIds.OBSW_RESET_SEQ_COUNT) data = object_id.as_bytes + struct.pack("!I", CommandId.OBSW_RESET_SEQ_COUNT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.VERIFY_BOOT: if op_code in OpCode.VERIFY_BOOT:
num_words = 1 num_words = 1
q.add_log_cmd(f"{prefix} {Info.VERIFY_BOOT}") q.add_log_cmd(f"{prefix} {Info.VERIFY_BOOT}")
data = ( data = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", CommandIds.TC_MEM_READ) + struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", MemAddresses.DEADBEEF) + struct.pack("!I", MemAddresses.DEADBEEF)
+ struct.pack("!H", num_words) + struct.pack("!H", num_words)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.MODE_REPLAY: if op_code in OpCode.MODE_REPLAY:
q.add_log_cmd("PLOC MPSoC: Tc mode replay") q.add_log_cmd("PLOC MPSoC: Tc mode replay")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_REPLAY) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_REPLAY)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.MODE_IDLE: if op_code in OpCode.MODE_IDLE:
q.add_log_cmd("PLOC MPSoC: Tc mode idle") q.add_log_cmd("PLOC MPSoC: Tc mode idle")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_IDLE) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_IDLE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "16": if op_code == "16":
q.add_log_cmd("PLOC MPSoC: Tc cam command send") q.add_log_cmd("PLOC MPSoC: Tc cam command send")
cam_cmd = input("Specify cam command string: ") cam_cmd = input("Specify cam command string: ")
data = ( data = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", CommandIds.TC_CAM_CMD_SEND) + struct.pack("!I", CommandId.TC_CAM_CMD_SEND)
+ bytearray(cam_cmd, "utf-8") + bytearray(cam_cmd, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "17": if op_code == "17":
q.add_log_cmd("PLOC MPSoC: Set UART TX tristate") q.add_log_cmd("PLOC MPSoC: Set UART TX tristate")
data = object_id.as_bytes + struct.pack("!I", CommandIds.SET_UART_TX_TRISTATE) data = object_id.as_bytes + struct.pack("!I", CommandId.SET_UART_TX_TRISTATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "18": if op_code == "18":
q.add_log_cmd("PLOC MPSoC: Release UART TX") q.add_log_cmd("PLOC MPSoC: Release UART TX")
data = object_id.as_bytes + struct.pack("!I", CommandIds.RELEASE_UART_TX) data = object_id.as_bytes + struct.pack("!I", CommandId.RELEASE_UART_TX)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -246,7 +246,7 @@ def generate_write_mem_command(
""" """
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_MEM_WRITE) + struct.pack("!I", CommandId.TC_MEM_WRITE)
+ struct.pack("!I", memory_address) + struct.pack("!I", memory_address)
+ struct.pack("!H", mem_len) + struct.pack("!H", mem_len)
+ struct.pack("!I", memory_data) + struct.pack("!I", memory_data)
@ -259,7 +259,7 @@ def prepare_mem_read_command(object_id: bytes) -> bytearray:
num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: ")) num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_MEM_READ) + struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", memory_address) + struct.pack("!I", memory_address)
+ struct.pack("!H", num_words) + struct.pack("!H", num_words)
) )
@ -271,7 +271,7 @@ def prepare_flash_write_cmd(object_id: bytes) -> bytearray:
mpsocFile = get_mpsoc_file() mpsocFile = get_mpsoc_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.FLASH_WRITE) + struct.pack("!I", CommandId.FLASH_WRITE)
+ bytearray(obcFile, "utf-8") + bytearray(obcFile, "utf-8")
+ bytearray(mpsocFile, "utf-8") + bytearray(mpsocFile, "utf-8")
) )
@ -282,7 +282,7 @@ def prepare_flash_delete_cmd(object_id: bytes) -> bytearray:
file = get_mpsoc_file() file = get_mpsoc_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_FLASH_DELETE) + struct.pack("!I", CommandId.TC_FLASH_DELETE)
+ bytearray(file, "utf-8") + bytearray(file, "utf-8")
) )
return bytearray(command) return bytearray(command)
@ -292,7 +292,7 @@ def prepare_replay_start_cmd(object_id: bytes) -> bytearray:
replay = int(input("Specify replay mode (0 - once, 1 - repeated): ")) replay = int(input("Specify replay mode (0 - once, 1 - repeated): "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_REPLAY_START) + struct.pack("!I", CommandId.TC_REPLAY_START)
+ struct.pack("!B", replay) + struct.pack("!B", replay)
) )
return bytearray(command) return bytearray(command)
@ -303,7 +303,7 @@ def prepare_downlink_pwr_on_cmd(object_id: bytes) -> bytearray:
lane_rate = int(input("Specify lane rate (0 - 9): ")) lane_rate = int(input("Specify lane rate (0 - 9): "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_ON) + struct.pack("!I", CommandId.TC_DOWNLINK_PWR_ON)
+ struct.pack("!B", mode) + struct.pack("!B", mode)
+ struct.pack("!B", lane_rate) + struct.pack("!B", lane_rate)
) )
@ -315,7 +315,7 @@ def prepare_replay_write_sequence_cmd(object_id: bytes) -> bytearray:
file = get_sequence_file() file = get_sequence_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_REPLAY_WRITE_SEQUENCE) + struct.pack("!I", CommandId.TC_REPLAY_WRITE_SEQUENCE)
+ struct.pack("!B", use_decoding) + struct.pack("!B", use_decoding)
+ bytearray(file, "utf-8") + bytearray(file, "utf-8")
# + bytes([0]) # + bytes([0])

View File

@ -19,8 +19,8 @@ from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.utility.input_helper import InputHelper from eive_tmtc.utility.input_helper import InputHelper
@ -83,7 +83,7 @@ FACTORY_RESET_OPS = {
} }
class SupvActionIds: class SupvActionId:
HK_REPORT = 1 HK_REPORT = 1
START_MPSOC = 3 START_MPSOC = 3
SHUTWOWN_MPSOC = 4 SHUTWOWN_MPSOC = 4
@ -232,19 +232,19 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
prefix = "PLOC Supervisor" prefix = "PLOC Supervisor"
if op_code in OpCodes.OFF: if op_code in OpCodes.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}") q.add_log_cmd(f"{prefix}: {Info.OFF}")
command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0) command = pack_mode_data(object_id.as_bytes, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCodes.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}") q.add_log_cmd(f"{prefix}: {Info.ON}")
command = pack_mode_data(object_id.as_bytes, Modes.ON, 0) command = pack_mode_data(object_id.as_bytes, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.NORMAL: if op_code in OpCodes.NORMAL:
q.add_log_cmd(f"{prefix}: {Info.NML}") q.add_log_cmd(f"{prefix}: {Info.NML}")
command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) command = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.HK_TO_OBC: if op_code in OpCodes.HK_TO_OBC:
q.add_log_cmd(f"{prefix}: {Info.HK_TO_OBC}") q.add_log_cmd(f"{prefix}: {Info.HK_TO_OBC}")
command = obyt + struct.pack("!I", SupvActionIds.HK_REPORT) command = obyt + struct.pack("!I", SupvActionId.HK_REPORT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.REQUEST_HK: if op_code in OpCodes.REQUEST_HK:
q.add_log_cmd(f"{prefix}: {Info.REQUEST_HK}") q.add_log_cmd(f"{prefix}: {Info.REQUEST_HK}")
@ -253,11 +253,11 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
elif op_code in OpCodes.START_MPSOC: elif op_code in OpCodes.START_MPSOC:
q.add_log_cmd("PLOC Supervisor: Start MPSoC") q.add_log_cmd("PLOC Supervisor: Start MPSoC")
command = obyt + struct.pack("!I", SupvActionIds.START_MPSOC) command = obyt + struct.pack("!I", SupvActionId.START_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SHUTDOWN_MPSOC: if op_code in OpCodes.SHUTDOWN_MPSOC:
q.add_log_cmd("PLOC Supervisor: Shutdown MPSoC") q.add_log_cmd("PLOC Supervisor: Shutdown MPSoC")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SHUTWOWN_MPSOC) command = object_id.as_bytes + struct.pack("!I", SupvActionId.SHUTWOWN_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SEL_NVM: if op_code in OpCodes.SEL_NVM:
q.add_log_cmd("PLOC Supervisor: Select MPSoC boot image") q.add_log_cmd("PLOC Supervisor: Select MPSoC boot image")
@ -279,9 +279,9 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
print("Key invalid!") print("Key invalid!")
break break
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=PLOC_SUPV_ID, object_id=PLOC_SUPV_ID,
action_id=SupvActionIds.FACTORY_RESET, action_id=SupvActionId.FACTORY_RESET,
user_data=bytes([key]), user_data=bytes([key]),
) )
) )
@ -290,35 +290,35 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
restart_tries = int(input("Specify maximum restart tries: ")) restart_tries = int(input("Specify maximum restart tries: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.SET_MAX_RESTART_TRIES) + struct.pack("!I", SupvActionId.SET_MAX_RESTART_TRIES)
+ struct.pack("!B", restart_tries) + struct.pack("!B", restart_tries)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9": if op_code == "9":
q.add_log_cmd("PLOC Supervisor: Reset MPSoC") q.add_log_cmd("PLOC Supervisor: Reset MPSoC")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_MPSOC) command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SET_TIME_REF: if op_code in OpCodes.SET_TIME_REF:
q.add_log_cmd("PLOC Supervisor: Set time reference") q.add_log_cmd("PLOC Supervisor: Set time reference")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SET_TIME_REF) command = object_id.as_bytes + struct.pack("!I", SupvActionId.SET_TIME_REF)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11": if op_code == "11":
q.add_log_cmd("PLOC Supervisor: Set boot timeout") q.add_log_cmd("PLOC Supervisor: Set boot timeout")
boot_timeout = int(input("Specify boot timeout [ms]: ")) boot_timeout = int(input("Specify boot timeout [ms]: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.SET_BOOT_TIMEOUT) + struct.pack("!I", SupvActionId.SET_BOOT_TIMEOUT)
+ struct.pack("!I", boot_timeout) + struct.pack("!I", boot_timeout)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12": if op_code == "12":
q.add_log_cmd("PLOC Supervisor: Disable HK") q.add_log_cmd("PLOC Supervisor: Disable HK")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_HK) command = object_id.as_bytes + struct.pack("!I", SupvActionId.DISABLE_HK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.REQ_BOOT_STATUS_REPORT: if op_code in OpCodes.REQ_BOOT_STATUS_REPORT:
q.add_log_cmd(f"{prefix}: {Info.REQ_BOOT_STATUS_REPORT}") q.add_log_cmd(f"{prefix}: {Info.REQ_BOOT_STATUS_REPORT}")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.GET_BOOT_STATUS_REPORT "!I", SupvActionId.GET_BOOT_STATUS_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_wait_seconds(2.0) q.add_wait_seconds(2.0)
@ -352,13 +352,13 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "26": if op_code == "26":
q.add_log_cmd("PLOC Supervisor: Request latchup status report") q.add_log_cmd("PLOC Supervisor: Request latchup status report")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.GET_LATCHUP_STATUS_REPORT "!I", SupvActionId.GET_LATCHUP_STATUS_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "27": if op_code == "27":
q.add_log_cmd("PLOC Supervisor: Copy ADC data to MRAM") q.add_log_cmd("PLOC Supervisor: Copy ADC data to MRAM")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.COPY_ADC_DATA_TO_MRAM "!I", SupvActionId.COPY_ADC_DATA_TO_MRAM
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "30": if op_code == "30":
@ -380,7 +380,7 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "37": if op_code == "37":
q.add_log_cmd("PLOC Supervisor: Restart supervisor") q.add_log_cmd("PLOC Supervisor: Restart supervisor")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.RESTART_SUPERVISOR "!I", SupvActionId.RESTART_SUPERVISOR
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.START_UPDATE: if op_code in OpCodes.START_UPDATE:
@ -394,14 +394,12 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "43": if op_code == "43":
q.add_log_cmd("PLOC Supervisor: Terminate supervisor process") q.add_log_cmd("PLOC Supervisor: Terminate supervisor process")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.TERMINATE_SUPV_HELPER "!I", SupvActionId.TERMINATE_SUPV_HELPER
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "44": if op_code == "44":
q.add_log_cmd("PLOC Supervisor: Start MPSoC quiet") q.add_log_cmd("PLOC Supervisor: Start MPSoC quiet")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack("!I", SupvActionId.START_MPSOC_QUIET)
"!I", SupvActionIds.START_MPSOC_QUIET
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "45": if op_code == "45":
q.add_log_cmd("PLOC Supervisor: Set shutdown timeout") q.add_log_cmd("PLOC Supervisor: Set shutdown timeout")
@ -409,15 +407,15 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.FACTORY_FLASH: if op_code in OpCodes.FACTORY_FLASH:
q.add_log_cmd(f"{prefix}: {Info.FACTORY_FLASH}") q.add_log_cmd(f"{prefix}: {Info.FACTORY_FLASH}")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.FACTORY_FLASH) command = object_id.as_bytes + struct.pack("!I", SupvActionId.FACTORY_FLASH)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "47": if op_code == "47":
q.add_log_cmd("PLOC Supervisor: Enable auto TM") q.add_log_cmd("PLOC Supervisor: Enable auto TM")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.ENABLE_AUTO_TM) command = object_id.as_bytes + struct.pack("!I", SupvActionId.ENABLE_AUTO_TM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "48": if op_code == "48":
q.add_log_cmd("PLOC Supervisor: Disable auto TM") q.add_log_cmd("PLOC Supervisor: Disable auto TM")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_AUTO_TM) command = object_id.as_bytes + struct.pack("!I", SupvActionId.DISABLE_AUTO_TM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "51": if op_code == "51":
q.add_log_cmd("PLOC Supervisor: Logging request event buffers") q.add_log_cmd("PLOC Supervisor: Logging request event buffers")
@ -426,7 +424,7 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "52": if op_code == "52":
q.add_log_cmd("PLOC Supervisor: Logging clear counters") q.add_log_cmd("PLOC Supervisor: Logging clear counters")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.LOGGING_CLEAR_COUNTERS "!I", SupvActionId.LOGGING_CLEAR_COUNTERS
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "53": if op_code == "53":
@ -436,18 +434,18 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "54": if op_code == "54":
q.add_log_cmd("PLOC Supervisor: Logging request counters") q.add_log_cmd("PLOC Supervisor: Logging request counters")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.LOGGING_REQUEST_COUNTERS "!I", SupvActionId.LOGGING_REQUEST_COUNTERS
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "55": if op_code == "55":
q.add_log_cmd("PLOC Supervisor: Request ADC report") q.add_log_cmd("PLOC Supervisor: Request ADC report")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.REQUEST_ADC_REPORT "!I", SupvActionId.REQUEST_ADC_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "56": if op_code == "56":
q.add_log_cmd("PLOC Supervisor: Reset PL") q.add_log_cmd("PLOC Supervisor: Reset PL")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_PL) command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_PL)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "57": if op_code == "57":
q.add_log_cmd("PLOC Supervisor: Enable NVMs") q.add_log_cmd("PLOC Supervisor: Enable NVMs")
@ -455,14 +453,14 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
nvm3 = int(input("Enable (1) or disable(0) NVM 3: ")) nvm3 = int(input("Enable (1) or disable(0) NVM 3: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.ENABLE_NVMS) + struct.pack("!I", SupvActionId.ENABLE_NVMS)
+ struct.pack("B", nvm01) + struct.pack("B", nvm01)
+ struct.pack("B", nvm3) + struct.pack("B", nvm3)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "58": if op_code == "58":
q.add_log_cmd("PLOC Supervisor: Continue update") q.add_log_cmd("PLOC Supervisor: Continue update")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.CONTINUE_UPDATE) command = object_id.as_bytes + struct.pack("!I", SupvActionId.CONTINUE_UPDATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.MEM_CHECK: if op_code in OpCodes.MEM_CHECK:
custom_data = bytearray() custom_data = bytearray()
@ -477,8 +475,8 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
f"{prefix}: {Info.MEM_CHECK} for file {update_file} at memory ID {memory_id} at start " f"{prefix}: {Info.MEM_CHECK} for file {update_file} at memory ID {memory_id} at start "
f"address {start_address}" f"address {start_address}"
) )
command = create_fsfw_action_cmd( command = create_action_cmd(
object_id.as_bytes, SupvActionIds.MEM_CHECK, custom_data object_id.as_bytes, SupvActionId.MEM_CHECK, custom_data
) )
q.add_pus_tc(command) q.add_pus_tc(command)
@ -493,7 +491,7 @@ def pack_sel_boot_image_cmd(
@param bp1 Partition pin 1 @param bp1 Partition pin 1
@param bp2 Partition pin 2 @param bp2 Partition pin 2
""" """
command = object_id + struct.pack("!I", SupvActionIds.SEL_MPSOC_BOOT_IMAGE) command = object_id + struct.pack("!I", SupvActionId.SEL_MPSOC_BOOT_IMAGE)
command = command + struct.pack("!B", mem) command = command + struct.pack("!B", mem)
command = command + struct.pack("!B", bp0) command = command + struct.pack("!B", bp0)
command = command + struct.pack("!B", bp1) command = command + struct.pack("!B", bp1)
@ -511,7 +509,7 @@ def pack_update_available_cmd(object_id: bytes) -> bytearray:
image_size = 222 image_size = 222
image_crc = 0x0 image_crc = 0x0
number_of_packets = 150 number_of_packets = 150
command = object_id + struct.pack("!I", SupvActionIds.UPDATE_AVAILABLE) command = object_id + struct.pack("!I", SupvActionId.UPDATE_AVAILABLE)
command = command + struct.pack("!B", image_select) command = command + struct.pack("!B", image_select)
command = command + struct.pack("!B", image_partition) command = command + struct.pack("!B", image_partition)
command = command + struct.pack("!I", image_size) command = command + struct.pack("!I", image_size)
@ -529,9 +527,9 @@ def pack_lachtup_alert_cmd(object_id: bytes, state: bool) -> bytearray:
latchup_id = get_latchup_id() latchup_id = get_latchup_id()
command = bytearray() command = bytearray()
if state: if state:
command = object_id + struct.pack("!I", SupvActionIds.ENABLE_LATCHUP_ALERT) command = object_id + struct.pack("!I", SupvActionId.ENABLE_LATCHUP_ALERT)
else: else:
command = object_id + struct.pack("!I", SupvActionIds.DISABLE_LATCHUP_ALERT) command = object_id + struct.pack("!I", SupvActionId.DISABLE_LATCHUP_ALERT)
command = command + struct.pack("!B", latchup_id) command = command + struct.pack("!B", latchup_id)
return bytearray(command) return bytearray(command)
@ -560,7 +558,7 @@ def pack_set_alert_limit_cmd(object_id: bytes) -> bytearray:
latchup_id = get_latchup_id() latchup_id = get_latchup_id()
dutycycle = int(input("Specify dutycycle: ")) dutycycle = int(input("Specify dutycycle: "))
command = bytearray() command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_LIMIT) command = object_id + struct.pack("!I", SupvActionId.SET_ALERT_LIMIT)
command = command + struct.pack("!B", latchup_id) command = command + struct.pack("!B", latchup_id)
command = command + struct.pack("!I", dutycycle) command = command + struct.pack("!I", dutycycle)
return bytearray(command) return bytearray(command)
@ -572,7 +570,7 @@ def pack_set_adc_enabled_channels_cmd(object_id: bytes) -> bytearray:
@param object_id The object id of the PLOC supervisor handler. @param object_id The object id of the PLOC supervisor handler.
""" """
ch = int(input("Specify ch: 0x"), 16) ch = int(input("Specify ch: 0x"), 16)
cmd = object_id + struct.pack("!I", SupvActionIds.SET_ADC_ENABLED_CHANNELS) cmd = object_id + struct.pack("!I", SupvActionId.SET_ADC_ENABLED_CHANNELS)
cmd = cmd + struct.pack("!H", ch) cmd = cmd + struct.pack("!H", ch)
return bytearray(cmd) return bytearray(cmd)
@ -580,7 +578,7 @@ def pack_set_adc_enabled_channels_cmd(object_id: bytes) -> bytearray:
def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray: def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray:
window_size = int(input("Specify window size: ")) window_size = int(input("Specify window size: "))
striding_step_size = int(input("Specify striding step size: ")) striding_step_size = int(input("Specify striding step size: "))
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_WINDOW_AND_STRIDE) command = object_id + struct.pack("!I", SupvActionId.SET_ADC_WINDOW_AND_STRIDE)
command = command + struct.pack("!H", window_size) command = command + struct.pack("!H", window_size)
command = command + struct.pack("!H", striding_step_size) command = command + struct.pack("!H", striding_step_size)
return bytearray(command) return bytearray(command)
@ -588,21 +586,21 @@ def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray:
def pack_set_adc_threshold_cmd(object_id: bytes) -> bytearray: def pack_set_adc_threshold_cmd(object_id: bytes) -> bytearray:
threshold = int(input("Specify threshold: ")) threshold = int(input("Specify threshold: "))
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_THRESHOLD) command = object_id + struct.pack("!I", SupvActionId.SET_ADC_THRESHOLD)
command = command + struct.pack("!I", threshold) command = command + struct.pack("!I", threshold)
return bytearray(command) return bytearray(command)
def pack_select_nvm_cmd(object_id: bytes) -> bytearray: def pack_select_nvm_cmd(object_id: bytes) -> bytearray:
mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): ")) mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): "))
command = object_id + struct.pack("!I", SupvActionIds.SELECT_NVM) command = object_id + struct.pack("!I", SupvActionId.SELECT_NVM)
command = command + struct.pack("!B", mem) command = command + struct.pack("!B", mem)
return bytearray(command) return bytearray(command)
def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray: def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray:
test = int(input("Specify test (1 - complete, 2 - short): ")) test = int(input("Specify test (1 - complete, 2 - short): "))
command = object_id + struct.pack("!I", SupvActionIds.RUN_AUTO_EM_TESTS) command = object_id + struct.pack("!I", SupvActionId.RUN_AUTO_EM_TESTS)
command = command + struct.pack("!B", test) command = command + struct.pack("!B", test)
return bytearray(command) return bytearray(command)
@ -610,7 +608,7 @@ def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray:
def pack_mram_wipe_cmd(object_id: bytes) -> bytearray: def pack_mram_wipe_cmd(object_id: bytes) -> bytearray:
start = int(input("Start address: 0x"), 16) start = int(input("Start address: 0x"), 16)
stop = int(input("Stop address: 0x"), 16) stop = int(input("Stop address: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.WIPE_MRAM) command = object_id + struct.pack("!I", SupvActionId.WIPE_MRAM)
command = command + struct.pack("!I", start) command = command + struct.pack("!I", start)
command = command + struct.pack("!I", stop) command = command + struct.pack("!I", stop)
return bytearray(command) return bytearray(command)
@ -642,7 +640,7 @@ def pack_update_command(object_id: bytes, new_update: bool) -> bytearray:
else: else:
raise ValueError("Invalid input, use y or n") raise ValueError("Invalid input, use y or n")
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.PERFORM_UPDATE) command += struct.pack("!I", SupvActionId.PERFORM_UPDATE)
command += bytearray(update_file, "utf-8") command += bytearray(update_file, "utf-8")
# Adding null terminator # Adding null terminator
command += struct.pack("!B", 0) command += struct.pack("!B", 0)
@ -657,7 +655,7 @@ def pack_update_command(object_id: bytes, new_update: bool) -> bytearray:
def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray: def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray:
command = bytearray() command = bytearray()
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.SET_SHUTDOWN_TIMEOUT) command += struct.pack("!I", SupvActionId.SET_SHUTDOWN_TIMEOUT)
timeout = int(input("Specify shutdown timeout (ms): ")) timeout = int(input("Specify shutdown timeout (ms): "))
command += struct.pack("!I", timeout) command += struct.pack("!I", timeout)
return command return command
@ -666,7 +664,7 @@ def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray:
def pack_logging_buffer_request(object_id: bytes) -> bytearray: def pack_logging_buffer_request(object_id: bytes) -> bytearray:
command = bytearray() command = bytearray()
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.LOGGING_REQUEST_EVENT_BUFFERS) command += struct.pack("!I", SupvActionId.LOGGING_REQUEST_EVENT_BUFFERS)
path = get_event_buffer_path() path = get_event_buffer_path()
command += bytearray(path, "utf-8") command += bytearray(path, "utf-8")
return command return command
@ -676,7 +674,7 @@ def pack_set_gpio_cmd(object_id: bytes) -> bytearray:
port = int(input("Specify port: 0x"), 16) port = int(input("Specify port: 0x"), 16)
pin = int(input("Specify pin: 0x"), 16) pin = int(input("Specify pin: 0x"), 16)
val = int(input("Specify val: 0x"), 16) val = int(input("Specify val: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.SET_GPIO) command = object_id + struct.pack("!I", SupvActionId.SET_GPIO)
command = command + struct.pack("!B", port) command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin) command = command + struct.pack("!B", pin)
command = command + struct.pack("!B", val) command = command + struct.pack("!B", val)
@ -686,14 +684,14 @@ def pack_set_gpio_cmd(object_id: bytes) -> bytearray:
def pack_read_gpio_cmd(object_id: bytes) -> bytearray: def pack_read_gpio_cmd(object_id: bytes) -> bytearray:
port = int(input("Specify port: 0x"), 16) port = int(input("Specify port: 0x"), 16)
pin = int(input("Specify pin: 0x"), 16) pin = int(input("Specify pin: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.READ_GPIO) command = object_id + struct.pack("!I", SupvActionId.READ_GPIO)
command = command + struct.pack("!B", port) command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin) command = command + struct.pack("!B", pin)
return bytearray(command) return bytearray(command)
def pack_logging_set_topic(object_id: bytes) -> bytearray: def pack_logging_set_topic(object_id: bytes) -> bytearray:
command = object_id + struct.pack("!I", SupvActionIds.LOGGING_SET_TOPIC) command = object_id + struct.pack("!I", SupvActionId.LOGGING_SET_TOPIC)
tpc = int(input("Specify logging topic: ")) tpc = int(input("Specify logging topic: "))
command += struct.pack("!B", tpc) command += struct.pack("!B", tpc)
return bytearray(command) return bytearray(command)

View File

@ -12,7 +12,7 @@ from eive_tmtc.tmtc.power.common_power import (
add_gomspace_cmd_defs, add_gomspace_cmd_defs,
req_hk_cmds, req_hk_cmds,
pack_common_power_cmds, pack_common_power_cmds,
SetIds, SetId,
OBC_ENDIANNESS, OBC_ENDIANNESS,
unpack_array_in_data, unpack_array_in_data,
) )
@ -42,7 +42,7 @@ class ACUHkTable:
wdt_gnd_left = gs.TableEntry(bytearray([0x00, 0x74]), gs.TableEntry.uint32_size) wdt_gnd_left = gs.TableEntry(bytearray([0x00, 0x74]), gs.TableEntry.uint32_size)
class OpCodes: class OpCode:
TEST = ["0", "test"] TEST = ["0", "test"]
@ -55,7 +55,7 @@ def add_acu_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
add_gomspace_cmd_defs(oce) add_gomspace_cmd_defs(oce)
oce.add(keys=OpCodes.TEST, info=Info.TEST) oce.add(keys=OpCode.TEST, info=Info.TEST)
defs.add_service( defs.add_service(
name=CustomServiceList.ACU.value, name=CustomServiceList.ACU.value,
info="ACU Device", info="ACU Device",
@ -72,7 +72,7 @@ def pack_acu_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
def acu_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str): def acu_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
req_hk_cmds("ACU", q, op_code, ACU_HANDLER_ID, [SetIds.CORE, SetIds.AUX]) req_hk_cmds("ACU", q, op_code, ACU_HANDLER_ID, [SetId.CORE, SetId.AUX])
class ACUTestProcedure: class ACUTestProcedure:

View File

@ -4,7 +4,7 @@ from typing import List
from eive_tmtc.gomspace.gomspace_common import ( from eive_tmtc.gomspace.gomspace_common import (
pack_set_u8_param_command, pack_set_u8_param_command,
Channel, Channel,
GomspaceDeviceActionIds, GomspaceDeviceActionId,
prompt_and_pack_set_integer_param_command, prompt_and_pack_set_integer_param_command,
prompt_and_pack_get_param_command, prompt_and_pack_get_param_command,
pack_request_config_command, pack_request_config_command,
@ -23,11 +23,11 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
enable_periodic_hk_command_with_interval, enable_periodic_hk_command_with_interval,
disable_periodic_hk_command, disable_periodic_hk_command,
) )
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
class GomspaceOpCodes: class GomspaceOpCode:
GET_PARAM = ["get_param"] GET_PARAM = ["get_param"]
SET_INTEGER_PARAM = ["set_int_param"] SET_INTEGER_PARAM = ["set_int_param"]
SAVE_TABLE = ["save_table"] SAVE_TABLE = ["save_table"]
@ -113,7 +113,7 @@ class PowerOpCodes:
PRINT_LATCHUPS = ["print_latchups"] PRINT_LATCHUPS = ["print_latchups"]
class SetIds: class SetId:
CORE = 1 CORE = 1
AUX = 2 AUX = 2
CONFIG = 3 CONFIG = 3
@ -127,13 +127,13 @@ def pack_common_power_cmds(
interval = float(input("Specify HK interval in floating point seconds: ")) interval = float(input("Specify HK interval in floating point seconds: "))
q.add_log_cmd(f"{prefix}: {PowerInfo.ENABLE_INFO_HK} with interval {interval}") q.add_log_cmd(f"{prefix}: {PowerInfo.ENABLE_INFO_HK} with interval {interval}")
cmds = enable_periodic_hk_command_with_interval( cmds = enable_periodic_hk_command_with_interval(
True, make_sid(objb, SetIds.CORE), interval True, make_sid(objb, SetId.CORE), interval
) )
for cmd in cmds: for cmd in cmds:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in PowerOpCodes.DISABLE_INFO_HK: if op_code in PowerOpCodes.DISABLE_INFO_HK:
q.add_log_cmd(f"{prefix}: {PowerInfo.DISABLE_INFO_HK}") q.add_log_cmd(f"{prefix}: {PowerInfo.DISABLE_INFO_HK}")
q.add_pus_tc(disable_periodic_hk_command(True, make_sid(objb, SetIds.CORE))) q.add_pus_tc(disable_periodic_hk_command(True, make_sid(objb, SetId.CORE)))
def pack_common_gomspace_cmds( def pack_common_gomspace_cmds(
@ -143,8 +143,8 @@ def pack_common_gomspace_cmds(
if op_code in PowerOpCodes.PRINT_SWITCH_V_I: if op_code in PowerOpCodes.PRINT_SWITCH_V_I:
q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_SWITCH_V_I}") q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_SWITCH_V_I}")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I object_id=objb, action_id=GomspaceDeviceActionId.PRINT_SWITCH_V_I
) )
) )
if op_code in PowerOpCodes.REBOOT: if op_code in PowerOpCodes.REBOOT:
@ -153,24 +153,24 @@ def pack_common_gomspace_cmds(
if op_code in PowerOpCodes.PRINT_LATCHUPS: if op_code in PowerOpCodes.PRINT_LATCHUPS:
q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_LATCHUPS}") q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_LATCHUPS}")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS object_id=objb, action_id=GomspaceDeviceActionId.PRINT_LATCHUPS
) )
) )
if op_code in GomspaceOpCodes.SET_INTEGER_PARAM: if op_code in GomspaceOpCode.SET_INTEGER_PARAM:
q.add_log_cmd(f"{prefix}: {GsInfo.SET_PARAMETER}") q.add_log_cmd(f"{prefix}: {GsInfo.SET_PARAMETER}")
print("Please specify the parameter type from index") print("Please specify the parameter type from index")
for idx, v in enumerate(ParamTypes): for idx, v in enumerate(ParamTypes):
print(f"{idx}: {v.name}") print(f"{idx}: {v.name}")
ptype = int(input("Index: ")) ptype = int(input("Index: "))
prompt_and_pack_set_integer_param_command(q, object_id, ParamTypes(ptype)) prompt_and_pack_set_integer_param_command(q, object_id, ParamTypes(ptype))
if op_code in GomspaceOpCodes.GET_PARAM: if op_code in GomspaceOpCode.GET_PARAM:
q.add_log_cmd(f"{prefix}: {GsInfo.GET_PARAMETER}") q.add_log_cmd(f"{prefix}: {GsInfo.GET_PARAMETER}")
prompt_and_pack_get_param_command(q, object_id) prompt_and_pack_get_param_command(q, object_id)
if op_code in GomspaceOpCodes.REQUEST_CONFIG_TABLE: if op_code in GomspaceOpCode.REQUEST_CONFIG_TABLE:
q.add_log_cmd(f"{prefix}: {GsInfo.REQUEST_CONFIG_TABLE}") q.add_log_cmd(f"{prefix}: {GsInfo.REQUEST_CONFIG_TABLE}")
q.add_pus_tc(pack_request_config_command(object_id.as_bytes)) q.add_pus_tc(pack_request_config_command(object_id.as_bytes))
if op_code in GomspaceOpCodes.SAVE_TABLE: if op_code in GomspaceOpCode.SAVE_TABLE:
q.add_log_cmd(f"{prefix}: {GsInfo.SAVE_TABLE}") q.add_log_cmd(f"{prefix}: {GsInfo.SAVE_TABLE}")
source_table = int( source_table = int(
input( input(
@ -187,13 +187,13 @@ def pack_common_gomspace_cmds(
)) ))
""" """
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.SAVE_TABLE, action_id=GomspaceDeviceActionId.SAVE_TABLE,
user_data=bytes([source_table]), user_data=bytes([source_table]),
) )
) )
if op_code in GomspaceOpCodes.SAVE_TABLE_DEFAULT: if op_code in GomspaceOpCode.SAVE_TABLE_DEFAULT:
source_table = int( source_table = int(
input( input(
"Source table [0: Board Config, 1: Module Config, 2: Calibration Parameter]: " "Source table [0: Board Config, 1: Module Config, 2: Calibration Parameter]: "
@ -202,13 +202,13 @@ def pack_common_gomspace_cmds(
if source_table not in [0, 1, 2]: if source_table not in [0, 1, 2]:
raise ValueError("Invalid source table index") raise ValueError("Invalid source table index")
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.SAVE_TABLE_DEFAULT, action_id=GomspaceDeviceActionId.SAVE_TABLE_DEFAULT,
user_data=bytes([source_table]), user_data=bytes([source_table]),
) )
) )
if op_code in GomspaceOpCodes.LOAD_TABLE: if op_code in GomspaceOpCode.LOAD_TABLE:
target_table = int( target_table = int(
input( input(
"Target table ID [0: Board Config, 1: Module Config, 2: Calibration Parameter, " "Target table ID [0: Board Config, 1: Module Config, 2: Calibration Parameter, "
@ -230,13 +230,13 @@ def pack_common_gomspace_cmds(
# Will be ignored # Will be ignored
source_table = 4 source_table = 4
q.add_pus_tc( q.add_pus_tc(
create_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.LOAD_TABLE, action_id=GomspaceDeviceActionId.LOAD_TABLE,
user_data=bytes([source_table, target_table]), user_data=bytes([source_table, target_table]),
) )
) )
if op_code in GomspaceOpCodes.RESET_GND_WATCHDOG: if op_code in GomspaceOpCode.RESET_GND_WATCHDOG:
q.add_log_cmd(f"{prefix}: {GsInfo.RESET_GND_WATCHDOG}") q.add_log_cmd(f"{prefix}: {GsInfo.RESET_GND_WATCHDOG}")
q.add_pus_tc(pack_gnd_wdt_reset_command(object_id)) q.add_pus_tc(pack_gnd_wdt_reset_command(object_id))
@ -273,12 +273,14 @@ def generic_on_cmd(
object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int
): ):
q.add_log_cmd(info_str + " on") q.add_log_cmd(info_str + " on")
q.add_pus_tc( q.add_pus_tc(create_generic_on_cmd(object_id, out_idx))
pack_set_u8_param_command(
object_id,
OUT_ENABLE_LIST[out_idx].parameter_address, def create_generic_on_cmd(object_id: bytes, out_idx: int):
Channel.on, return pack_set_u8_param_command(
) object_id,
OUT_ENABLE_LIST[out_idx].parameter_address,
Channel.on,
) )
@ -286,12 +288,14 @@ def generic_off_cmd(
object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int
): ):
q.add_log_cmd(info_str + " off") q.add_log_cmd(info_str + " off")
q.add_pus_tc( q.add_pus_tc(create_generic_off_cmd(object_id, out_idx))
pack_set_u8_param_command(
object_id,
OUT_ENABLE_LIST[out_idx].parameter_address, def create_generic_off_cmd(object_id: bytes, out_idx: int):
Channel.off, return pack_set_u8_param_command(
) object_id,
OUT_ENABLE_LIST[out_idx].parameter_address,
Channel.off,
) )
@ -312,14 +316,14 @@ def add_gomspace_cmd_defs(oce: OpCodeEntry):
info=PowerInfo.REQUEST_AUX_HK_ONCE, info=PowerInfo.REQUEST_AUX_HK_ONCE,
) )
oce.add(keys=PowerOpCodes.PRINT_LATCHUPS, info=PowerInfo.PRINT_LATCHUPS) oce.add(keys=PowerOpCodes.PRINT_LATCHUPS, info=PowerInfo.PRINT_LATCHUPS)
oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER) oce.add(keys=GomspaceOpCode.GET_PARAM, info=GsInfo.GET_PARAMETER)
oce.add(keys=GomspaceOpCodes.REBOOT, info=GsInfo.REBOOT) oce.add(keys=GomspaceOpCode.REBOOT, info=GsInfo.REBOOT)
oce.add(keys=GomspaceOpCodes.SET_INTEGER_PARAM, info=GsInfo.SET_PARAMETER) oce.add(keys=GomspaceOpCode.SET_INTEGER_PARAM, info=GsInfo.SET_PARAMETER)
oce.add(keys=GomspaceOpCodes.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE) oce.add(keys=GomspaceOpCode.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE, info=GsInfo.SAVE_TABLE) oce.add(keys=GomspaceOpCode.SAVE_TABLE, info=GsInfo.SAVE_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT) oce.add(keys=GomspaceOpCode.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT)
oce.add(keys=GomspaceOpCodes.LOAD_TABLE, info=GsInfo.LOAD_TABLE) oce.add(keys=GomspaceOpCode.LOAD_TABLE, info=GsInfo.LOAD_TABLE)
oce.add(keys=GomspaceOpCodes.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG) oce.add(keys=GomspaceOpCode.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG)
OBC_ENDIANNESS = "<" OBC_ENDIANNESS = "<"

View File

@ -9,7 +9,7 @@ from eive_tmtc.tmtc.power.common_power import (
pack_common_gomspace_cmds, pack_common_gomspace_cmds,
req_hk_cmds, req_hk_cmds,
pack_common_power_cmds, pack_common_power_cmds,
SetIds, SetId,
) )
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from eive_tmtc.gomspace.gomspace_common import ( from eive_tmtc.gomspace.gomspace_common import (
@ -27,7 +27,7 @@ from eive_tmtc.config.object_ids import P60_DOCK_HANDLER
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class P60OpCodes: class P60OpCode:
STACK_3V3_ON = ["stack_3v3_on", "1"] STACK_3V3_ON = ["stack_3v3_on", "1"]
STACK_3V3_OFF = ["stack_3v3_off", "2"] STACK_3V3_OFF = ["stack_3v3_off", "2"]
STACK_5V_ON = ["stack_5v_on", "3"] STACK_5V_ON = ["stack_5v_on", "3"]
@ -103,7 +103,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
pack_common_power_cmds("P60 Dock", object_id, q, op_code) pack_common_power_cmds("P60 Dock", object_id, q, op_code)
pack_common_gomspace_cmds("P60 Dock", object_id, q, op_code) pack_common_gomspace_cmds("P60 Dock", object_id, q, op_code)
p60_dock_req_hk_cmds(q, op_code) p60_dock_req_hk_cmds(q, op_code)
if op_code in P60OpCodes.STACK_3V3_ON: if op_code in P60OpCode.STACK_3V3_ON:
q.add_log_cmd(P60Info.STACK_3V3_ON) q.add_log_cmd(P60Info.STACK_3V3_ON)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -112,7 +112,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.on, Channel.on,
) )
) )
if op_code in P60OpCodes.STACK_3V3_OFF: if op_code in P60OpCode.STACK_3V3_OFF:
q.add_log_cmd(P60Info.STACK_3V3_OFF) q.add_log_cmd(P60Info.STACK_3V3_OFF)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -121,7 +121,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.off, Channel.off,
) )
) )
if op_code in P60OpCodes.STACK_5V_ON: if op_code in P60OpCode.STACK_5V_ON:
q.add_log_cmd(P60Info.STACK_5V_ON) q.add_log_cmd(P60Info.STACK_5V_ON)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -130,7 +130,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.on, Channel.on,
) )
) )
if op_code in P60OpCodes.STACK_5V_OFF: if op_code in P60OpCode.STACK_5V_OFF:
q.add_log_cmd(P60Info.STACK_5V_OFF) q.add_log_cmd(P60Info.STACK_5V_OFF)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -238,4 +238,4 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
def p60_dock_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str): def p60_dock_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
req_hk_cmds("P60 Dock", q, op_code, P60_DOCK_HANDLER, [SetIds.CORE, SetIds.AUX]) req_hk_cmds("P60 Dock", q, op_code, P60_DOCK_HANDLER, [SetId.CORE, SetId.AUX])

View File

@ -12,12 +12,14 @@ from eive_tmtc.tmtc.power.common_power import (
generic_on_cmd, generic_on_cmd,
generic_off_cmd, generic_off_cmd,
add_gomspace_cmd_defs, add_gomspace_cmd_defs,
create_generic_on_cmd,
create_generic_off_cmd,
pack_common_power_cmds, pack_common_power_cmds,
GomspaceOpCodes, GomspaceOpCode,
GsInfo, GsInfo,
PowerInfo, PowerInfo,
add_common_power_defs, add_common_power_defs,
SetIds, SetId,
) )
from eive_tmtc.gomspace.gomspace_common import * from eive_tmtc.gomspace.gomspace_common import *
@ -89,7 +91,7 @@ def pack_pdu1_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code
def pdu1_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str): def pdu1_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
req_hk_cmds("PDU1", q, op_code, PDU_1_HANDLER_ID, [SetIds.CORE, SetIds.AUX]) req_hk_cmds("PDU1", q, op_code, PDU_1_HANDLER_ID, [SetId.CORE, SetId.AUX])
def info_on_pdu1(base: str) -> str: def info_on_pdu1(base: str) -> str:
@ -164,7 +166,7 @@ def add_pdu1_cmds(defs: TmtcDefinitionWrapper):
keys=PowerOpCodes.PRINT_SWITCH_V_I, keys=PowerOpCodes.PRINT_SWITCH_V_I,
info="PDU1: Print Switches, Voltages, Currents", info="PDU1: Print Switches, Voltages, Currents",
) )
oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER) oce.add(keys=GomspaceOpCode.GET_PARAM, info=GsInfo.GET_PARAMETER)
defs.add_service( defs.add_service(
name=CustomServiceList.PDU1.value, name=CustomServiceList.PDU1.value,
@ -173,65 +175,148 @@ def add_pdu1_cmds(defs: TmtcDefinitionWrapper):
) )
PDU1_DICT = {
Pdu1ChIndex.TCS: Pdu1InfoBase.TCS,
Pdu1ChIndex.STR: Pdu1InfoBase.STR,
Pdu1ChIndex.SYRLINKS: Pdu1InfoBase.SYRLINKS,
Pdu1ChIndex.MGT: Pdu1InfoBase.MGT,
Pdu1ChIndex.SCEX: Pdu1InfoBase.SCEX,
Pdu1ChIndex.ACS_A: Pdu1InfoBase.ACS_A,
Pdu1ChIndex.SUS_N: Pdu1InfoBase.SUS_N,
}
def pdu1_on_cmd(idx: Pdu1ChIndex, q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, PDU1_DICT[idx], idx)
def pdu1_off_cmd(idx: Pdu1ChIndex, q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, PDU1_DICT[idx], idx)
def tcs_on_cmd(q: DefaultPusQueueHelper): def tcs_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.TCS, Pdu1ChIndex.TCS) pdu1_on_cmd(Pdu1ChIndex.TCS, q)
def create_tcs_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.TCS)
def tcs_off_cmd(q: DefaultPusQueueHelper): def tcs_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.TCS, Pdu1ChIndex.TCS) pdu1_off_cmd(Pdu1ChIndex.TCS, q)
def create_tcs_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.TCS)
def syrlinks_on_cmd(q: DefaultPusQueueHelper): def syrlinks_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SYRLINKS, Pdu1ChIndex.SYRLINKS) pdu1_on_cmd(Pdu1ChIndex.SYRLINKS, q)
def create_syrlinks_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SYRLINKS)
def syrlinks_off_cmd(q: DefaultPusQueueHelper): def syrlinks_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SYRLINKS, Pdu1ChIndex.SYRLINKS) pdu1_off_cmd(Pdu1ChIndex.SYRLINKS, q)
def create_syrlinks_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SYRLINKS)
def startracker_on_cmd(q: DefaultPusQueueHelper): def startracker_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.STR, Pdu1ChIndex.STR) pdu1_on_cmd(Pdu1ChIndex.STR, q)
def create_startracker_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.STR)
def startracker_off_cmd(q: DefaultPusQueueHelper): def startracker_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.STR, Pdu1ChIndex.STR) pdu1_on_cmd(Pdu1ChIndex.STR, q)
def create_startracker_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.STR)
def mgt_on_cmd(q: DefaultPusQueueHelper): def mgt_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.MGT, Pdu1ChIndex.MGT) pdu1_on_cmd(Pdu1ChIndex.MGT, q)
def create_mgt_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.MGT)
def mgt_off_cmd(q: DefaultPusQueueHelper): def mgt_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.MGT, Pdu1ChIndex.MGT) pdu1_off_cmd(Pdu1ChIndex.MGT, q)
def create_mgt_off_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.MGT)
def sun_sensor_nominal_on_cmd(q: DefaultPusQueueHelper): def sun_sensor_nominal_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SUS_N, Pdu1ChIndex.SUS_N) pdu1_on_cmd(Pdu1ChIndex.SUS_N, q)
def create_sun_sensor_nominal_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SUS_N)
def sun_sensor_nominal_off_cmd(q: DefaultPusQueueHelper): def sun_sensor_nominal_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SUS_N, Pdu1ChIndex.SUS_N) pdu1_off_cmd(Pdu1ChIndex.SUS_N, q)
def create_sun_sensor_nominal_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SUS_N)
def solar_cell_experiment_on_cmd(q: DefaultPusQueueHelper): def solar_cell_experiment_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SCEX, Pdu1ChIndex.SCEX) pdu1_on_cmd(Pdu1ChIndex.SCEX, q)
def create_solar_cell_experiment_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SCEX)
def solar_cell_experiment_off_cmd(q: DefaultPusQueueHelper): def solar_cell_experiment_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SCEX, Pdu1ChIndex.SCEX) pdu1_off_cmd(Pdu1ChIndex.SCEX, q)
def create_solar_cell_experiment_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.SCEX)
def ploc_on_cmd(q: DefaultPusQueueHelper): def ploc_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.PLOC, Pdu1ChIndex.PLOC) pdu1_on_cmd(Pdu1ChIndex.PLOC, q)
def create_ploc_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.PLOC)
def ploc_off_cmd(q: DefaultPusQueueHelper): def ploc_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.PLOC, Pdu1ChIndex.PLOC) pdu1_off_cmd(Pdu1ChIndex.PLOC, q)
def create_ploc_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.PLOC)
def acs_board_a_on_cmd(q: DefaultPusQueueHelper): def acs_board_a_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.ACS_A, Pdu1ChIndex.ACS_A) pdu1_on_cmd(Pdu1ChIndex.ACS_A, q)
def create_acs_board_a_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.ACS_A)
def acs_board_a_off_cmd(q: DefaultPusQueueHelper): def acs_board_a_off_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.ACS_A, Pdu1ChIndex.ACS_A) pdu1_off_cmd(Pdu1ChIndex.ACS_A, q)
def create_acs_board_a_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_1_HANDLER_ID, Pdu1ChIndex.ACS_A)

View File

@ -15,7 +15,9 @@ from eive_tmtc.tmtc.power.common_power import (
generic_off_cmd, generic_off_cmd,
add_gomspace_cmd_defs, add_gomspace_cmd_defs,
pack_common_power_cmds, pack_common_power_cmds,
SetIds, create_generic_on_cmd,
create_generic_off_cmd,
SetId,
add_common_power_defs, add_common_power_defs,
) )
from eive_tmtc.gomspace.gomspace_common import * from eive_tmtc.gomspace.gomspace_common import *
@ -238,7 +240,7 @@ def add_pdu2_common_defs(oce: OpCodeEntry):
def pdu2_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str): def pdu2_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
req_hk_cmds("PDU2", q, op_code, PDU_2_HANDLER_ID, [SetIds.CORE, SetIds.AUX]) req_hk_cmds("PDU2", q, op_code, PDU_2_HANDLER_ID, [SetId.CORE, SetId.AUX])
def pl_pcdu_bat_nom_on_cmd(q: DefaultPusQueueHelper): def pl_pcdu_bat_nom_on_cmd(q: DefaultPusQueueHelper):
@ -257,61 +259,117 @@ def reaction_wheel_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW) generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW)
def create_reaction_wheel_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.RW)
def reaction_wheel_off_cmd(q: DefaultPusQueueHelper): def reaction_wheel_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW) generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW)
def create_reaction_wheel_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.RW)
def heater_on_cmd(q: DefaultPusQueueHelper): def heater_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER) generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER)
def create_heater_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.HEATER)
def heater_off_cmd(q: DefaultPusQueueHelper): def heater_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER) generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER)
def create_heater_off_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.HEATER)
def sus_red_on_cmd(q: DefaultPusQueueHelper): def sus_red_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R) generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R)
def create_sus_red_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.SUS_R)
def sus_red_off_cmd(q: DefaultPusQueueHelper): def sus_red_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R) generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R)
def create_sus_red_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.SUS_R)
def solar_array_deployment_on_cmd(q: DefaultPusQueueHelper): def solar_array_deployment_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd( generic_on_cmd(
PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL
) )
def create_solar_array_deployment_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.SOLAR_ARRAY_DEPL)
def solar_array_deployment_off_cmd(q: DefaultPusQueueHelper): def solar_array_deployment_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd( generic_off_cmd(
PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL
) )
def create_solar_array_deployment_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.SOLAR_ARRAY_DEPL)
def pl_pcdu_bat_red_on_cmd(q: DefaultPusQueueHelper): def pl_pcdu_bat_red_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd( generic_on_cmd(
PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED
) )
def create_pl_pcdu_bat_red_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.PL_PCDU_BAT_RED)
def pl_pcdu_bat_red_off_cmd(q: DefaultPusQueueHelper): def pl_pcdu_bat_red_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd( generic_off_cmd(
PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED
) )
def create_pl_pcdu_bat_red_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.PL_PCDU_BAT_RED)
def acs_board_b_side_on_cmd(q: DefaultPusQueueHelper): def acs_board_b_side_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B) generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B)
def create_acs_board_b_side_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.ACS_B)
def acs_board_b_side_off_cmd(q: DefaultPusQueueHelper): def acs_board_b_side_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B) generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B)
def create_acs_board_b_side_off_cmd() -> PusTelecommand:
return create_generic_off_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.ACS_B)
def payload_camera_on_cmd(q: DefaultPusQueueHelper): def payload_camera_on_cmd(q: DefaultPusQueueHelper):
generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM) generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM)
def create_payload_camera_on_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.PL_CAM)
def payload_camera_off_cmd(q: DefaultPusQueueHelper): def payload_camera_off_cmd(q: DefaultPusQueueHelper):
generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM) generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM)
def create_payload_camera_off_cmd() -> PusTelecommand:
return create_generic_on_cmd(PDU_2_HANDLER_ID, Pdu2ChIndex.PL_CAM)

View File

@ -27,7 +27,7 @@ from eive_tmtc.tmtc.power.pdu2 import (
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from eive_tmtc.tmtc.power.p60dock import P60OpCodes, P60Info, p60_dock_req_hk_cmds from eive_tmtc.tmtc.power.p60dock import P60OpCode, P60Info, p60_dock_req_hk_cmds
from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -75,12 +75,12 @@ def pack_power_commands(q: DefaultPusQueueHelper, op_code: str):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_p60_cmds(defs: TmtcDefinitionWrapper): def add_p60_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=P60OpCodes.STACK_3V3_ON, info=P60Info.STACK_3V3_ON) oce.add(keys=P60OpCode.STACK_3V3_ON, info=P60Info.STACK_3V3_ON)
oce.add(keys=P60OpCodes.STACK_3V3_OFF, info=P60Info.STACK_3V3_OFF) oce.add(keys=P60OpCode.STACK_3V3_OFF, info=P60Info.STACK_3V3_OFF)
oce.add(keys=P60OpCodes.STACK_5V_ON, info=P60Info.STACK_5V_ON) oce.add(keys=P60OpCode.STACK_5V_ON, info=P60Info.STACK_5V_ON)
oce.add(keys=P60OpCodes.STACK_5V_OFF, info=P60Info.STACK_5V_OFF) oce.add(keys=P60OpCode.STACK_5V_OFF, info=P60Info.STACK_5V_OFF)
add_gomspace_cmd_defs(oce) add_gomspace_cmd_defs(oce)
oce.add(keys=P60OpCodes.TEST, info="P60 Tests") oce.add(keys=P60OpCode.TEST, info="P60 Tests")
defs.add_service( defs.add_service(
name=CustomServiceList.P60DOCK.value, info="P60 Device", op_code_entry=oce name=CustomServiceList.P60DOCK.value, info="P60 Device", op_code_entry=oce
) )

View File

@ -3,14 +3,14 @@ from typing import List, Tuple
from eive_tmtc.tmtc.power.acu import acu_config_table_handler from eive_tmtc.tmtc.power.acu import acu_config_table_handler
from eive_tmtc.tmtc.power.common_power import ( from eive_tmtc.tmtc.power.common_power import (
SetIds, SetId,
unpack_array_in_data, unpack_array_in_data,
OBC_ENDIANNESS, OBC_ENDIANNESS,
) )
from tmtccmd.util import ObjectIdBase from tmtccmd.util import ObjectIdBase
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.gomspace.gomspace_common import GomspaceDeviceActionIds from eive_tmtc.gomspace.gomspace_common import GomspaceDeviceActionId
from eive_tmtc.config.object_ids import ( from eive_tmtc.config.object_ids import (
PDU_1_HANDLER_ID, PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID, PDU_2_HANDLER_ID,
@ -151,7 +151,7 @@ def handle_pdu_data(
pw = PrintWrapper(printer=printer) pw = PrintWrapper(printer=printer)
current_idx = 0 current_idx = 0
priv_idx = pdu_idx - 1 priv_idx = pdu_idx - 1
if set_id == SetIds.AUX or set_id == SetIds.AUX: if set_id == SetId.AUX or set_id == SetId.AUX:
fmt_str = "!hhBBBIIH" fmt_str = "!hhBBBIIH"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
( (
@ -188,7 +188,7 @@ def handle_pdu_data(
wdt.print() wdt.print()
pw.dlog(f"PDU Device Types: 0:FRAM|1:ADC|2:ADC|3:TempSens|4,5,6,7:Reserved") pw.dlog(f"PDU Device Types: 0:FRAM|1:ADC|2:ADC|3:TempSens|4,5,6,7:Reserved")
dev_parser.print(pw=pw) dev_parser.print(pw=pw)
if set_id == SetIds.CORE or set_id == SetIds.CORE: if set_id == SetId.CORE or set_id == SetId.CORE:
pw.dlog(f"Received PDU HK from PDU {pdu_idx}") pw.dlog(f"Received PDU HK from PDU {pdu_idx}")
current_list = [] current_list = []
for idx in range(len(PDU1_CHANNELS_NAMES)): for idx in range(len(PDU1_CHANNELS_NAMES)):
@ -229,7 +229,7 @@ def handle_pdu_data(
def handle_p60_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_p60_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer=printer) pw = PrintWrapper(printer=printer)
if set_id == SetIds.CORE: if set_id == SetId.CORE:
pw.dlog("Received P60 Core HK. Voltages in mV, currents in mA") pw.dlog("Received P60 Core HK. Voltages in mV, currents in mA")
current_idx = 0 current_idx = 0
current_list = [] current_list = []
@ -276,7 +276,7 @@ def handle_p60_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw.dlog(temps) pw.dlog(temps)
pw.dlog(batt_info) pw.dlog(batt_info)
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=9) printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=9)
if set_id == SetIds.AUX: if set_id == SetId.AUX:
pw.dlog("Received P60 AUX HK. Voltages in mV, currents in mA") pw.dlog("Received P60 AUX HK. Voltages in mV, currents in mA")
current_idx = 0 current_idx = 0
latchup_list = [] latchup_list = []
@ -355,7 +355,7 @@ def gen_six_entry_u16_list(hk_data: bytes, current_idx: int) -> Tuple[int, List[
def handle_acu_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_acu_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer=printer) pw = PrintWrapper(printer=printer)
if set_id == SetIds.CORE: if set_id == SetId.CORE:
mppt_mode = hk_data[0] mppt_mode = hk_data[0]
current_idx = 1 current_idx = 1
current_idx, currents = gen_six_entry_u16_list( current_idx, currents = gen_six_entry_u16_list(
@ -399,7 +399,7 @@ def handle_acu_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
printer.print_validity_buffer( printer.print_validity_buffer(
validity_buffer=hk_data[current_idx:], num_vars=12 validity_buffer=hk_data[current_idx:], num_vars=12
) )
if set_id == SetIds.AUX: if set_id == SetId.AUX:
current_idx = 0 current_idx = 0
fmt_str = "!BBB" fmt_str = "!BBB"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -439,7 +439,7 @@ def handle_acu_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
def handle_get_param_data_reply( def handle_get_param_data_reply(
obj_id: ObjectIdBase, action_id: int, pw: PrintWrapper, custom_data: bytearray obj_id: ObjectIdBase, action_id: int, pw: PrintWrapper, custom_data: bytearray
): ):
if action_id == GomspaceDeviceActionIds.PARAM_GET: if action_id == GomspaceDeviceActionId.PARAM_GET:
pw.dlog(f"Parameter Get Request received for object {obj_id}") pw.dlog(f"Parameter Get Request received for object {obj_id}")
header_list = [ header_list = [
"Gomspace Request Code", "Gomspace Request Code",
@ -461,7 +461,7 @@ def handle_get_param_data_reply(
] ]
pw.dlog(f"{header_list}") pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}") pw.dlog(f"{content_list}")
elif action_id == GomspaceDeviceActionIds.REQUEST_CONFIG_TABLE: elif action_id == GomspaceDeviceActionId.REQUEST_CONFIG_TABLE:
print(f"Received config table with size {len(custom_data)} for object {obj_id}") print(f"Received config table with size {len(custom_data)} for object {obj_id}")
if obj_id.as_bytes == PDU_1_HANDLER_ID or obj_id.as_bytes == PDU_2_HANDLER_ID: if obj_id.as_bytes == PDU_1_HANDLER_ID or obj_id.as_bytes == PDU_2_HANDLER_ID:
pdu_config_table_handler(pw, custom_data, obj_id) pdu_config_table_handler(pw, custom_data, obj_id)

View File

@ -7,22 +7,22 @@
""" """
import struct import struct
from config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from config.object_ids import SOLAR_ARRAY_DEPLOYMENT_ID from eive_tmtc.config.object_ids import SOLAR_ARRAY_DEPLOYMENT_ID
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.pus_8_fsfw_funccmd import create_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
MANUAL_DEPLOYMENT = "man_depl" MANUAL_DEPLOYMENT = "man_depl"
@ -30,14 +30,14 @@ class Info:
MANUAL_DEPLOYMENT = "Manual Solar Array Deployment" MANUAL_DEPLOYMENT = "Manual Solar Array Deployment"
class ActionIds: class ActionId:
MANUAL_DEPLOYMENT = 5 MANUAL_DEPLOYMENT = 5
@tmtc_definitions_provider @tmtc_definitions_provider
def pack_sa_depl_cmds(defs: TmtcDefinitionWrapper): def pack_sa_depl_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.MANUAL_DEPLOYMENT, info=Info.MANUAL_DEPLOYMENT) oce.add(keys=OpCode.MANUAL_DEPLOYMENT, info=Info.MANUAL_DEPLOYMENT)
defs.add_service( defs.add_service(
name=CustomServiceList.SA_DEPLYOMENT, name=CustomServiceList.SA_DEPLYOMENT,
info="Solar Array Deployment", info="Solar Array Deployment",
@ -72,7 +72,7 @@ def pack_solar_array_deployment_test_into(p: ServiceProviderParams):
else: else:
dry_run_str = "" dry_run_str = ""
q.add_log_cmd(f"Testing S/A Deployment with burn time {burn_time}{dry_run_str}") q.add_log_cmd(f"Testing S/A Deployment with burn time {burn_time}{dry_run_str}")
command = create_fsfw_action_cmd( command = create_action_cmd(
SOLAR_ARRAY_DEPLOYMENT_ID, ActionIds.MANUAL_DEPLOYMENT, user_data SOLAR_ARRAY_DEPLOYMENT_ID, ActionId.MANUAL_DEPLOYMENT, user_data
) )
q.add_pus_tc(command) q.add_pus_tc(command)

View File

@ -3,14 +3,103 @@ import pprint
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_hk_command,
)
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from eive_tmtc.config.object_ids import TCS_BOARD_ASS_ID, TCS_CONTROLLER
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class SetIds(enum.IntEnum): class OpCode:
SENSOR_TEMPERATURE_SET = 0 TCS_BOARD_ASS_NORMAL = ["0", "normal"]
DEVICE_TEMPERATURE_SET = 1 TCS_BOARD_ASS_OFF = ["1", "off"]
SUS_TEMPERATURE_SET = 2 REQUEST_PRIMARY_TEMP_SET = ["temp"]
REQUEST_DEVICE_TEMP_SET = ["temp_devs"]
REQUEST_DEVICE_SUS_SET = ["temp_sus"]
class Info:
REQUEST_PRIMARY_TEMP_SET = "Request HK set of primary sensor temperatures"
REQUEST_DEVICE_TEMP_SET = (
"Request HK set of device sensor (not dedicated sensors) temperatures"
)
REQUEST_DEVICE_SUS_SET = "Request HK set of the SUS temperatures"
TCS_BOARD_ASS_NORMAL = "Switching TCS board assembly on"
TCS_BOARD_ASS_OFF = "Switching TCS board assembly off"
class SetId(enum.IntEnum):
PRIMARY_SENSORS = 0
DEVICE_SENSORS = 1
SUS_TEMP_SENSORS = 2
@tmtc_definitions_provider
def add_tcs_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(
keys=OpCode.TCS_BOARD_ASS_NORMAL,
info=Info.TCS_BOARD_ASS_NORMAL,
)
oce.add(
keys=OpCode.TCS_BOARD_ASS_OFF,
info=Info.TCS_BOARD_ASS_OFF,
)
oce.add(keys=OpCode.REQUEST_PRIMARY_TEMP_SET, info=Info.REQUEST_PRIMARY_TEMP_SET)
oce.add(keys=OpCode.REQUEST_DEVICE_TEMP_SET, info=Info.REQUEST_DEVICE_TEMP_SET)
oce.add(keys=OpCode.REQUEST_DEVICE_SUS_SET, info=Info.REQUEST_DEVICE_SUS_SET)
defs.add_service(
name=CustomServiceList.TCS.value,
info="TCS Board Assembly",
op_code_entry=oce,
)
def pack_tcs_sys_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.REQUEST_PRIMARY_TEMP_SET:
sensor_set_sid = make_sid(TCS_CONTROLLER, SetId.PRIMARY_SENSORS)
q.add_log_cmd(Info.REQUEST_PRIMARY_TEMP_SET)
q.add_pus_tc(generate_one_hk_command(sensor_set_sid))
if op_code in OpCode.REQUEST_DEVICE_TEMP_SET:
q.add_log_cmd(Info.REQUEST_DEVICE_TEMP_SET)
q.add_pus_tc(
generate_one_hk_command(make_sid(TCS_CONTROLLER, SetId.DEVICE_SENSORS))
)
if op_code in OpCode.REQUEST_DEVICE_SUS_SET:
q.add_log_cmd(Info.REQUEST_DEVICE_SUS_SET)
q.add_pus_tc(
generate_one_hk_command(make_sid(TCS_CONTROLLER, SetId.SUS_TEMP_SENSORS))
)
pack_tcs_ass_cmds(q, op_code)
def pack_tcs_ass_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCode.TCS_BOARD_ASS_NORMAL:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Mode.NORMAL,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_NORMAL,
)
if op_code in OpCode.TCS_BOARD_ASS_OFF:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Mode.OFF,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_OFF,
)
def handle_thermal_controller_hk_data( def handle_thermal_controller_hk_data(
@ -23,7 +112,7 @@ def handle_thermal_controller_hk_data(
if TCP_TEMP_DEV_SERVER: if TCP_TEMP_DEV_SERVER:
TCP_TEMP_DEV_SERVER = TmTcpServer("localhost", 7306) TCP_TEMP_DEV_SERVER = TmTcpServer("localhost", 7306)
""" """
if set_id == SetIds.SENSOR_TEMPERATURE_SET: if set_id == SetId.PRIMARY_SENSORS:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog("Received sensor temperature data") pw.dlog("Received sensor temperature data")
@ -58,7 +147,7 @@ def handle_thermal_controller_hk_data(
# tcp_server_sensor_temperatures.report_parsed_hk_data( # tcp_server_sensor_temperatures.report_parsed_hk_data(
# object_id, set_id, parsed_data # object_id, set_id, parsed_data
# ) # )
elif set_id == SetIds.DEVICE_TEMPERATURE_SET: elif set_id == SetId.DEVICE_SENSORS:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog("Received device temperature data") pw.dlog("Received device temperature data")
fmt_str = "!fhhhhiiiifffhffffffffffffff" fmt_str = "!fhhhhiiiifffhffffffffffffff"
@ -99,7 +188,7 @@ def handle_thermal_controller_hk_data(
# tcp_server_device_temperatures.report_parsed_hk_data( # tcp_server_device_temperatures.report_parsed_hk_data(
# object_id, set_id, parsed_data # object_id, set_id, parsed_data
# ) # )
elif set_id == SetIds.SUS_TEMPERATURE_SET: elif set_id == SetId.SUS_TEMP_SENSORS:
pass pass
# pw = PrintWrapper(printer) # pw = PrintWrapper(printer)
# pw.dlog("Received SUS temperature data") # pw.dlog("Received SUS temperature data")

View File

@ -1,4 +1,4 @@
from spacepackets.ecss import PusTelecommand, PusServices from spacepackets.ecss import PusTelecommand, PusService
from tmtccmd.config import CoreServiceList from tmtccmd.config import CoreServiceList
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
@ -45,7 +45,7 @@ def pack_test_command(p: ServiceProviderParams):
q.add_pus_tc(pack_service_17_ping_command()) q.add_pus_tc(pack_service_17_ping_command())
if info.op_code == OpCodes.TRIGGER_EVENT: if info.op_code == OpCodes.TRIGGER_EVENT:
q.add_log_cmd("Sending PUS TC Event Trigger [17, 128]") q.add_log_cmd("Sending PUS TC Event Trigger [17, 128]")
q.add_pus_tc(PusTelecommand(service=PusServices.S17_TEST, subservice=128)) q.add_pus_tc(PusTelecommand(service=PusService.S17_TEST, subservice=128))
if info.op_code == OpCodes.PING_WITH_DATA: if info.op_code == OpCodes.PING_WITH_DATA:
q.add_log_cmd("Sending Ping With Data, Size Reported Back [17, 129]") q.add_log_cmd("Sending Ping With Data, Size Reported Back [17, 129]")
while True: while True:
@ -60,6 +60,6 @@ def pack_test_command(p: ServiceProviderParams):
next_byte = not next_byte next_byte = not next_byte
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=PusServices.S17_TEST, subservice=130, app_data=dummy_data service=PusService.S17_TEST, subservice=130, app_data=dummy_data
) )
) )

View File

@ -5,7 +5,7 @@ version = attr: eive_tmtc.__version__
long_description = file: README.md long_description = file: README.md
long_description_content_type = text/markdown long_description_content_type = text/markdown
license = Apache-2.0 license = Apache-2.0
author = Robin Mueller author = Robin Mueller, Jakob Meier
author_email = muellerr@irs.uni-stuttgart.de author_email = muellerr@irs.uni-stuttgart.de
platform = any platform = any
@ -27,9 +27,10 @@ classifiers =
[options] [options]
install_requires = install_requires =
tmtccmd @ git+https://github.com/robamu-org/tmtccmd@v3.0.0 # tmtccmd @ git+https://github.com/robamu-org/tmtccmd@v4.0.0a1
tmtccmd @ git+https://github.com/robamu-org/tmtccmd@6624ad740e3f#egg=tmtccmd
packages = find: packages = find:
python_requires = >=3.8 python_requires = >=3.10
include_package_data = True include_package_data = True
[options.extras_require] [options.extras_require]