PUS Package

Submodules

Module contents

This module contains PUS data structures and helpers common for both PUS telemetry and telecommands.

Content:

class tmtccmd.pus.CustomFsfwPusService(value)

Bases: IntEnum

An enumeration.

SERVICE_200_MODE = 200
class tmtccmd.pus.VerificationWrapper(pus_verificator: PusVerificator, console_logger: Logger | None, file_logger: Logger | None)

Bases: object

add_tc(pus_tc: PusTc) bool
add_tm(srv_1_tm: Service1Tm) TmCheckResult
dlog(log_str: str, level: int = 20)
log_progress_to_console_from_status(status: VerificationStatus, req_id: RequestId, subservice: Subservice | None = None)
log_to_console(srv_1_tm: Service1Tm, res: TmCheckResult)
log_to_console_from_req_id(req_id: RequestId, res: TmCheckResult, subservice: Subservice | None = None)
log_to_file(srv_1_tm: Service1Tm, res: TmCheckResult)
log_to_file_from_req_id(req_id: RequestId, res: TmCheckResult, subservice: Subservice | None = None)
log_to_file_from_status(status: VerificationStatus, req_id: RequestId, subservice: Subservice | None = None)
static step_num(status: VerificationStatus)
property verificator: PusVerificator
tmtccmd.pus.cross_mark_unicode(with_color: bool) str
tmtccmd.pus.dash_unicode(with_color: bool) str
tmtccmd.pus.gen_console_char_from_status(status: StatusField, with_color: bool)
tmtccmd.pus.gen_file_char_from_status(status: StatusField)
tmtccmd.pus.tick_mark_unicode(with_color: bool) str

Service 1 Telecommand Verification Module

class tmtccmd.pus.tm.s1_verification.Service1FsfwWrapper(tm: Service1Tm)

Bases: object

Service 2 Raw Commanding Telemetry Module

Service 3 Housekeeping Modules

PUS Service 3 components. FSFW specific support.

class tmtccmd.pus.tm.s3_fsfw_hk.Service3FsfwHkPacket(pus_tm: PusTm)

Bases: object

Housekeeping service HK telemetry parser.

This class can be used to parse the FSFW HK packets for HK packets with the spacepackets.ecss.pus_3_hk.Subservice TM_HK_REPORT (25) and TM_DIAGNOSTICS_REPORT (26) subservice. It parses the object ID, set ID fields and the HK data.

Raises:

ValueError – Subservice is not correct or the TM source data length is smaller than 8, which is the minimum required size to unpack object ID and set ID.

hk_data: bytes

Housekeeping Data.

object_id: ComponentIdU32

Object ID.

pus_tm: PusTm

Corresponding PUS TM packet.

set_id: int

Housekeeping Set ID.

class tmtccmd.pus.tm.s3_hk_base.HkContentType(value)

Bases: Enum

An enumeration.

DEFINITIONS = <class 'enum.auto'>
HK = <class 'enum.auto'>
class tmtccmd.pus.tm.s3_hk_base.Service3Base(object_id: int, custom_hk_handling: bool = False)

Bases: object

Base class. The TMTC core provides a Service 3 implementation which is intended to be used with the FSFW. However, users can define an own Service 3 implementation.

The TMTC printer utility uses the fields defined in this base class to perform prinouts so if a custom class is defined, the user should implement this class and fill the fields in the TM handling hook if printout of the HK field and validity checking is desired.

property has_custom_hk_handling: bool
property hk_definitions_list: tuple[list, list]

Can be implemented by a child class to print definitions lists. The first list should contain a header with parameter names, and the second list shall contain the corresponding set IDs

property object_id: ComponentIdU32
property set_id: int

Contains definitions and functions related to PUS Service 3 Telecommands.

tmtccmd.pus.tc.s3_fsfw_hk.create_disable_periodic_hk_command(sid: bytes) PusTc
tmtccmd.pus.tc.s3_fsfw_hk.create_disable_periodic_hk_command_with_diag(diag: bool, sid: bytes) PusTc

Deprecated since version v6.0.0rc0: use diagnostic agnostic API if possible

tmtccmd.pus.tc.s3_fsfw_hk.create_enable_periodic_hk_command(sid: bytes) PusTc
tmtccmd.pus.tc.s3_fsfw_hk.create_enable_periodic_hk_command_with_diag(diag: bool, sid: bytes) PusTc

Deprecated since version v6.0.0rc0: use diagnostic agnostic API if possible

tmtccmd.pus.tc.s3_fsfw_hk.create_enable_periodic_hk_command_with_interval(sid: bytes, interval_seconds: float) tuple[PusTc, PusTc]
tmtccmd.pus.tc.s3_fsfw_hk.create_enable_periodic_hk_command_with_interval_with_diag(diag: bool, sid: bytes, interval_seconds: float) tuple[PusTc, PusTc]

Deprecated since version v6.0.0rc0: use diagnostic agnostic API if possible

tmtccmd.pus.tc.s3_fsfw_hk.create_modify_collection_interval_cmd(sid: bytes, interval_seconds: float) PusTc
tmtccmd.pus.tc.s3_fsfw_hk.create_modify_collection_interval_cmd_with_diag(diag: bool, sid: bytes, interval_seconds: float) PusTc

Deprecated since version v6.0.0rc0: use diagnostic agnostic API if possible

tmtccmd.pus.tc.s3_fsfw_hk.create_request_one_diag_command(sid: bytes) PusTc
tmtccmd.pus.tc.s3_fsfw_hk.create_request_one_hk_command(sid: bytes) PusTc
tmtccmd.pus.tc.s3_fsfw_hk.disable_periodic_hk_command(diag: bool, sid: bytes) PusTc

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s3_fsfw_hk.enable_periodic_hk_command(diag: bool, sid: bytes) PusTc

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s3_fsfw_hk.enable_periodic_hk_command_with_interval(diag: bool, sid: bytes, interval_seconds: float) tuple[PusTc, PusTc]

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s3_fsfw_hk.generate_one_diag_command(sid: bytes) PusTc

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s3_fsfw_hk.generate_one_hk_command(sid: bytes) PusTc

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s3_fsfw_hk.make_interval(interval_seconds: float) bytearray
tmtccmd.pus.tc.s3_fsfw_hk.make_sid(object_id: bytes, set_id: int) bytearray
tmtccmd.pus.tc.s3_fsfw_hk.modify_collection_interval(diag: bool, sid: bytes, interval_seconds: float) PusTc

Deprecated since version v4.0.0a2: use create… API instead

Service 5 Event Module

Contains definitions and functions related to PUS Service 5 Telecommands.

tmtccmd.pus.tc.s5_event.create_disable_event_reporting_command(apid: int = 0, seq_count: int = 0) PusTc
tmtccmd.pus.tc.s5_event.create_enable_event_reporting_command(apid: int = 0, seq_count: int = 0) PusTc
tmtccmd.pus.tc.s5_event.pack_disable_event_reporting_command(apid: int = 0, seq_count: int = 0) PusTc

Deprecated since version v4.0.0a0: use create… API instead

tmtccmd.pus.tc.s5_event.pack_enable_event_reporting_command(apid: int = 0, seq_count: int = 0) PusTc

Deprecated since version v4.0.0a0: use create… API instead

Service 5 Event Module - sat-rs support

sat-rs specific PUS event support.

class tmtccmd.pus.s5_satrs_event_defs.EventSeverity(value)

Bases: IntEnum

An enumeration.

HIGH = 3
INFO = 0
LOW = 1
MEDIUM = 2
class tmtccmd.pus.s5_satrs_event_defs.EventU32(severity: 'EventSeverity', group_id: 'int', unique_id: 'int')

Bases: object

group_id: int
severity: EventSeverity
unique_id: int
classmethod unpack(data: bytes) EventU32

Service 5 Event Module - FSFW support

FSFW specific PUS event support

class tmtccmd.pus.s5_fsfw_event_defs.EventInfo(id: int = 0, name: str = '', severity: str = '', info: str = '', file_location: str = '')

Bases: object

file_location: str = ''
id: int = 0
info: str = ''
name: str = ''
severity: str = ''
class tmtccmd.pus.s5_fsfw_event_defs.Severity(value)

Bases: IntEnum

An enumeration.

HIGH = 4
INFO = 1
LOW = 2
MEDIUM = 3
tmtccmd.pus.s5_fsfw_event_defs.str_to_severity(string: str) Severity | None

Contains classes and functions to deserialize PUS Service 5 Telemetry

class tmtccmd.pus.tm.s5_fsfw_event.EventDefinition(event_id: 'int', reporter_id: 'bytes', param1: 'int', param2: 'int')

Bases: object

classmethod empty() EventDefinition
event_id: int
classmethod from_bytes(data: bytes) EventDefinition
pack() bytes
param1: int
param2: int
reporter_id: bytes
class tmtccmd.pus.tm.s5_fsfw_event.Service5Tm(apid: int, subservice: Subservice, event: EventDefinition, timestamp: bytes, ssc: int = 0, destination_id: int = 0, misc_params: MiscParams | None = None)

Bases: AbstractPusTm

Create a FSFW tailored Event Service 5 telemetry instance. Use the unpack function to create an instance from a raw bytestream instead. :raises ValueError: Invalid input arguments

property ccsds_version: int
property event_definition: EventDefinition
classmethod from_tm(pus_tm: PusTm) Service5Tm
pack() bytearray
property packet_id: PacketId
property packet_seq_control: PacketSeqCtrl
property service: int
property severity: Severity
property source_data: bytes
property sp_header: SpacePacketHeader
property subservice: int
property timestamp: bytes
classmethod unpack(data: bytes | bytearray, timestamp_len: int) Service5Tm

Service 8 Action Commanding Module

FSFW specific PUS actions support

class tmtccmd.pus.s8_fsfw_action_defs.CustomSubservice(value)

Bases: IntEnum

An enumeration.

TC_FUNCTIONAL_CMD = 128
TM_DATA_REPLY = 130

Contains classes and functions to handle PUS Service 8 telemetry.

class tmtccmd.pus.tm.s8_fsfw_action.Service8FsfwDataReply(pus_tm: PusTm)

Bases: object

FSFW Action service data reply telemetry parser.

This class can be used to parse the FSFW action data replies with the tmtccmd.pus.s8_fsfw_action_defs.CustomSubservice.TM_DATA_REPLY subservice. It parses the object ID, the action ID and the reply data.

Raises:

ValueError – Subservice is not correct or the TM source data length is smaller than 8, which is the minimum required size to unpack object ID and action ID.

action_id: int

Action ID.

object_id: ComponentIdU32

Object ID.

pus_tm: PusTm

Corresponding PUS TM packet.

reply_data: bytes

Reply Data.

tmtccmd.pus.tc.s8_fsfw_action.create_action_cmd(object_id: bytes, action_id: int, user_data: bytes = b'', apid: int = 0, seq_count: int = 0) PusTc
tmtccmd.pus.tc.s8_fsfw_action.make_action_id(action_id: int) bytearray
tmtccmd.pus.tc.s8_fsfw_action.make_fsfw_action_cmd(object_id: bytes, action_id: int, user_data: bytes = b'', apid: int = 0, seq_count: int = 0) PusTc

Deprecated since version v4.0.0a2: use create… API instead

Service 11 Telecommand Scheduling Module

class tmtccmd.pus.s11_tc_sched_defs.Subservice(value)

Bases: IntEnum

Unless specified, TCs and TMs are related to a request ID

TC_DELETE = 5
TC_DELETE_WITH_FILTER = 6
TC_DETAIL_REPORT_FILTER_BASED = 11
TC_DETAIL_REPORT_TIME_BASED = 9
TC_DISABLE = 2
TC_ENABLE = 1
TC_INSERT = 4
TC_RESET = 3
TC_TIMESHIFT = 7
TC_TIMESHIFT_ALL = 15
TC_TIMESHIFT_WITH_FILTER = 8
TM_DETAIL_REPORT_FILTER_BASED = 12
TM_DETAIL_REPORT_TIME_BASED = 10
class tmtccmd.pus.s11_tc_sched_defs.TcSchedReqId(apid: int, seq_cnt: int, src_id: int)

Bases: object

Raises:

ValueError – Input invalid

classmethod build_from_tc(tc: PusTc) TcSchedReqId
property id_u64
pack() bytes
class tmtccmd.pus.s11_tc_sched_defs.TypeOfTimeWindow(value)

Bases: IntEnum

An enumeration.

FROM_TIMETAG = 2
FROM_TIMETAG_TO_TIMETAG = 1
SELECT_ALL = 0
TO_TIMETAG = 3

Service 17 Test Module

class tmtccmd.pus.s17_test_defs.CustomSubservice(value)

Bases: IntEnum

An enumeration.

TC_GEN_EVENT = 128

Service 20 Parameter Module - FSFW support

class tmtccmd.pus.s20_fsfw_param_defs.CustomSubservice(value)

Bases: IntEnum

An enumeration.

TC_DUMP = 129
TC_LOAD = 128
TM_DUMP_REPLY = 130
class tmtccmd.pus.s20_fsfw_param_defs.FsfwParamId(object_id: bytes, param_id: ParameterId, ptc: Ptc, pfc: int, rows: int, columns: int)

Bases: object

Wrapper for the whole FSFW specific parameter data. It contains the ECSS PTC and PFC numbers and the number of columns and rows in the parameter. See https://ecss.nl/standard/ecss-e-st-70-41c-space-engineering-telemetry-and-telecommand-packet-utilization-15-april-2016/ p.428 for more information.

Parameters:
  • ptc – ECSS PTC number

  • pfc – ECSS PFC number

  • rows – Number of rows in parameter (for matrix entries, 1 for vector entries, 1 for scalar entries)

  • columns – Number of columns in parameter (for matrix or vector entries, 1 for scalar entries)

Returns:

Parameter information field as 4 byte bytearray

columns: int
object_id: bytes
pack() bytearray

Convert the wrapper to the raw byte format expected for PUS TC or PUS TM creation.

param_id: ParameterId
pfc: int
ptc: Ptc
rows: int
classmethod unpack(data: bytes | bytearray) FsfwParamId
class tmtccmd.pus.s20_fsfw_param_defs.Parameter(fsfw_param_id: 'FsfwParamId', param_raw: 'bytes')

Bases: object

property columns
classmethod empty()
fsfw_param_id: FsfwParamId
property object_id
pack() bytearray

Convert the wrapper to the raw byte format expected for PUS TC or PUS TM creation.

property param_id
param_raw: bytes
parse_scalar_param() int | float
property pfc
property ptc
property rows
classmethod unpack(data: bytes | bytearray) Parameter
class tmtccmd.pus.s20_fsfw_param_defs.ParameterId(domain_id: 'int', unique_id: 'int', linear_index: 'int')

Bases: object

as_u32() int
domain_id: int
classmethod empty() ParameterId
linear_index: int
pack() bytes
unique_id: int
classmethod unpack(data: bytes | bytearray) ParameterId
tmtccmd.pus.s20_fsfw_param_defs.create_matrix_double_parameter(object_id: bytes, domain_id: int, unique_id: int, parameters: Sequence[Sequence[float]]) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_matrix_float_parameter(object_id: bytes, domain_id: int, unique_id: int, parameters: Sequence[Sequence[float]]) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_boolean_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: bool) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_double_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: float) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_float_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: float) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_i16_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_i32_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_i8_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_u16_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_u32_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_scalar_u8_parameter(object_id: bytes, domain_id: int, unique_id: int, parameter: int) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_vector_double_parameter(object_id: bytes, domain_id: int, unique_id: int, parameters: Sequence[float]) Parameter
tmtccmd.pus.s20_fsfw_param_defs.create_vector_float_parameter(object_id: bytes, domain_id: int, unique_id: int, parameters: Sequence[float])
tmtccmd.pus.s20_fsfw_param_defs.deserialize_scalar_entry(ptc: int, pfc: int, param_data: bytes) int | float

Try to deserialize a scalar parameter entry (row = 1 and column = 1).

Raises:
tmtccmd.pus.s20_fsfw_param_defs.parse_scalar_param(wrapper: Parameter) int | float

Contains definitions and functions related to PUS Service 20 Telecommands.

tmtccmd.pus.tc.s20_fsfw_param.create_dump_param_cmd(param_fsfw_id: FsfwParamId, apid: int = 0) PusTc
tmtccmd.pus.tc.s20_fsfw_param.create_load_param_cmd(parameter: Parameter, apid: int = 0) PusTc
tmtccmd.pus.tc.s20_fsfw_param.create_load_param_cmd_from_raw(parameter_raw: bytes, apid: int = 0) PusTc
tmtccmd.pus.tc.s20_fsfw_param.pack_boolean_parameter_app_data(object_id: bytes, domain_id: int, unique_id: int, parameter: bool) bytearray | None

Deprecated since version 3.1.0: use create_scalar_boolean_parameter instead

tmtccmd.pus.tc.s20_fsfw_param.pack_parameter_id(domain_id: int, unique_id: int, linear_index: int) bytearray

Packs the Parameter ID (bytearray with 4 bytes) which is part of the service 20 packets. The first byte of the parameter ID is the domain ID, the second byte is a unique ID and the last two bytes are a linear index if a parameter is not loaded from index 0. :param domain_id: One byte domain ID :param unique_id: One byte unique ID :param linear_index: Two byte linear index.

Deprecated since version 4.0.0a2: use ParameterId helper class with pack() instead

tmtccmd.pus.tc.s20_fsfw_param.pack_scalar_boolean_parameter_app_data(object_id: bytes, domain_id: int, unique_id: int, parameter: bool) bytearray | None

Tailored towards FSFW applications.

Parameters:
  • object_id

  • domain_id

  • unique_id

  • parameter

Returns:

Application data

Deprecated since version 4.0.0a2: Please use create_scalar_boolean_parameter instead

tmtccmd.pus.tc.s20_fsfw_param.pack_scalar_double_param_app_data(object_id: bytes, domain_id: int, unique_id: int, parameter: float) bytearray | None

Deprecated since version 4.0.0a2: Please use create_scalar_double_parameter instead

tmtccmd.pus.tc.s20_fsfw_param.pack_scalar_float_param_app_data(object_id: bytes, domain_id: int, unique_id: int, parameter: float) bytearray | None

Deprecated since version 4.0.0a2: use create_scalar_float_parameter instead

tmtccmd.pus.tc.s20_fsfw_param.pack_scalar_u8_parameter_app_data(object_id: bytes, domain_id: int, unique_id: int, parameter: int) bytearray | None

Tailored towards FSFW applications.

Parameters:
  • object_id

  • domain_id

  • unique_id

  • parameter

Returns:

Application data

Deprecated since version 4.0.0a2: Please use create_scalar_u8_parameter instead

tmtccmd.pus.tc.s20_fsfw_param.pack_type_and_matrix_data(ptc: int, pfc: int, rows: int, columns: int) bytearray

Deprecated since version 4.0.0a2: use ParamWrapper helper class with pack() instead

tmtccmd.pus.tc.s20_fsfw_param.prepare_param_packet_header(object_id: bytes, domain_id: int, unique_id: int, ptc: Ptc, pfc: int, rows: int, columns: int, start_at_idx: int = 0) bytearray | None

Deprecated since version 4.0.0a2: use ParamWrapper helper class with pack() instead

class tmtccmd.pus.tm.s20_fsfw_param.Service20FsfwTm(subservice: int, source_data: bytes, timestamp: bytes, apid: int = 0)

Bases: AbstractPusTm

property ccsds_version: int
classmethod empty() Service20FsfwTm
classmethod from_tm(tm: PusTm)
property object_id: bytes
pack() bytearray
property packet_id: PacketId
property packet_seq_control: PacketSeqCtrl
property service: int
property source_data: bytes
property sp_header: SpacePacketHeader
property subservice: int
property timestamp: bytes
classmethod unpack(raw_telemetry: bytes, timestamp_len: int) Service20FsfwTm
class tmtccmd.pus.tm.s20_fsfw_param.Service20ParamDumpWrapper(param_tm: Service20FsfwTm)

Bases: object

property base_tm: PusTm
get_param() Parameter

Tries to build a Parameter from the own raw telemetry data.

Raises:

ValueError – Telemetry source data too short.

Service 200 Mode Commanding Module - FSFW support

class tmtccmd.pus.s200_fsfw_mode_defs.Subservice(value)

Bases: IntEnum

An enumeration.

TC_MODE_ANNOUNCE = 4
TC_MODE_ANNOUNCE_RECURSIVE = 5
TC_MODE_COMMAND = 1
TC_MODE_COMMAND_FORCES = 2
TC_MODE_READ = 3
TM_CANT_REACH_MODE = 7
TM_MODE_REPLY = 6
TM_WRONG_MODE_REPLY = 8

Core components for mode commanding (custom PUS service).

class tmtccmd.pus.tc.s200_fsfw_mode.Mode(value)

Bases: IntEnum

Standard modes when commanding objects. These mode IDs are reserved by the FSFW, so it is recommended to avoid these numbers for custom modes.

NORMAL = 2
OFF = 0
ON = 1
RAW = 3
tmtccmd.pus.tc.s200_fsfw_mode.create_announce_mode_command(object_id: bytes) PusTc
tmtccmd.pus.tc.s200_fsfw_mode.create_announce_mode_recursive_command(object_id: bytes) PusTc
tmtccmd.pus.tc.s200_fsfw_mode.create_mode_command(object_id: bytes, mode: int | Mode, submode: int) PusTc
tmtccmd.pus.tc.s200_fsfw_mode.create_read_mode_command(object_id: bytes) PusTc
tmtccmd.pus.tc.s200_fsfw_mode.pack_mode_command(object_id: bytes, mode: int | Mode, submode: int) PusTc

Deprecated since version v4.0.0a2: use create… API instead

tmtccmd.pus.tc.s200_fsfw_mode.pack_mode_data(object_id: bytes, mode: Mode | int, submode: int) bytearray

FSFW modes: Mode 0: Off, Mode 1: Mode On, Mode 2: Mode Normal, Mode 3: Mode Raw

Base class for Service 200 mode commanding reply handling.

class tmtccmd.pus.tm.s200_fsfw_mode.Service200FsfwReader(tm: PusTm)

Bases: object

contains_mode() bool
is_cant_reach_mode_reply() bool

Service 201 Health Commanding Module - FSFW support

class tmtccmd.pus.s201_fsfw_health_defs.Subservice(value)

Bases: IntEnum

An enumeration.

TC_ANNOUNCE_HEALTH = 3
TC_ANNOUNCE_HEALTH_ALL = 4
TC_SET_HEALTH = 1
TM_HEALTH_SET = 2