ECSS Package

spacepackets.ecss.check_pus_crc(tc_packet: bytes) bool

Checks the CRC of a given raw PUS packet. It is expected that the passed packet is the exact raw PUS packet. Both TC and TM packets can be passed to this function because both packet formats have a CCITT-CRC16 at the last two bytes as specified in the PUS standard.

Returns:

True if the CRC is valid, False otherwise.

class spacepackets.ecss.defs.PusService(value)

Bases: IntEnum

An enumeration.

S11_TC_SCHED = 11
S15_TM_STORAGE = 15
S17_TEST = 17
S1_VERIFICATION = 1
S20_PARAMETER = 20
S23_FILE_MGMT = 23
S2_RAW_CMD = 2
S3_HOUSEKEEPING = 3
S5_EVENT = 5
S6_MEMORY_MGMT = 6
S8_FUNC_CMD = 8
S9_TIME_MGMT = 9
class spacepackets.ecss.defs.PusVersion(value)

Bases: IntEnum

An enumeration.

ESA_PUS = 0
PUS_A = 1
PUS_C = 2

ECSS PUS Telecommand Module

ECSS Telecommand Module

ECSS PUS Telemetry Module

ECSS Telemetry Module

ECSS Fields Submodule

class spacepackets.ecss.fields.PacketFieldBase(ptc: 'int', pfc: 'int')

Bases: object

pfc: int
ptc: int
class spacepackets.ecss.fields.PacketFieldEnum(pfc: int, val: int)

Bases: PacketFieldBase

static check_pfc(pfc: int) int

Check for byte alignment of the PFC. Do not use this if to plan to pack multiple enumerations into one byte

len()

Return the length in bytes. This will raise a ValueError for non-byte-aligned PFC values.

pack() bytearray
classmethod unpack(data: bytes, pfc: int)

Construct from a raw bytestream.

Raises:

BytesTooShortError – Raw bytestream too short.

classmethod with_byte_size(num_bytes: int, val: int)
class spacepackets.ecss.fields.PacketFieldU16(val: int)

Bases: PacketFieldEnum

class spacepackets.ecss.fields.PacketFieldU32(val: int)

Bases: PacketFieldEnum

class spacepackets.ecss.fields.PacketFieldU8(val: int)

Bases: PacketFieldEnum

class spacepackets.ecss.fields.PfcReal(value)

Bases: IntEnum

An enumeration.

DOUBLE_PRECISION_IEEE = 2
DOUBLE_PRECISION_MIL_STD_6_OCTETS = 4
FLOAT_PRECISION_MIL_STD_4_OCTETS = 3
FLOAT_SIMPLE_PRECISION_IEEE = 1
class spacepackets.ecss.fields.PfcSigned(value)

Bases: IntEnum

An enumeration.

EIGHT_BYTES = 16
ELEVEN_BIT = 7
FIFTEEN_BIT = 11
FIVE_BIT = 1
FOURTEEN_BIT = 10
FOUR_BIT = 0
FOUR_BYTES = 14
NINE_BIT = 5
ONE_BYTE = 4
SEVEN_BIT = 3
SIX_BIT = 2
SIX_BYTES = 15
TEN_BIT = 6
THIRTEEN_BIT = 9
THREE_BYTES = 13
TWELVE_BIT = 8
TWO_BYTES = 12
class spacepackets.ecss.fields.PfcUnsigned(value)

Bases: IntEnum

An enumeration.

EIGHT_BYTES = 16
ELEVEN_BIT = 7
FIFTEEN_BIT = 11
FIVE_BIT = 1
FOURTEEN_BIT = 10
FOUR_BIT = 0
FOUR_BYTES = 14
NINE_BIT = 5
ONE_BIT = 17
ONE_BYTE = 4
SEVEN_BIT = 3
SIX_BIT = 2
SIX_BYTES = 15
TEN_BIT = 6
THIRTEEN_BIT = 9
THREE_BIT = 19
THREE_BYTES = 13
TWELVE_BIT = 8
TWO_BIT = 18
TWO_BYTES = 12
class spacepackets.ecss.fields.Ptc(value)

Bases: IntEnum

An enumeration.

ABSOLUTE_TIME = 9
BIT_STRING = 6
BOOLEAN = 1
CHARACTER_STRING = 8
DEDUCED = 11
ENUMERATED = 2
OCTET_STRING = 7
PACKET = 12
REAL = 5
RELATIVE_TIME = 10
SIGNED = 4
UNSIGNED = 3

ECSS Request ID Submodule

class spacepackets.ecss.req_id.RequestId(tc_packet_id: PacketId, tc_psc: PacketSeqCtrl, ccsds_version: int = 0)

Bases: object

The request ID which is used to identify PUS telecommands. The request ID consists of the first two bytes of the CCSDS primary header. It is primarily used to verify the execution of sent telecommands.

>>> from spacepackets.ccsds import PacketType, SequenceFlags
>>> packet_id = PacketId(ptype=PacketType.TC, sec_header_flag=False, apid=0x22)
>>> psc = PacketSeqCtrl(seq_flags=SequenceFlags.UNSEGMENTED, seq_count=17)
>>> req_id = RequestId(packet_id, psc)
>>> req_id
RequestId(tc_packet_id=PacketId(ptype=<PacketType.TC: 1>, sec_header_flag=False, apid=34), tc_psc=PacketSeqCtrl(seq_flags=<SequenceFlags.UNSEGMENTED: 3>, seq_count=17), ccsds_version=0)
>>> struct.pack("!I", req_id.as_u32()).hex(sep=",")
'10,22,c0,11'
as_u32()
classmethod empty()
classmethod from_pus_tc(pus_tc: PusTc)
classmethod from_sp_header(header: SpacePacketHeader) RequestId
pack() bytes
classmethod unpack(tm_data: bytes) RequestId

ECSS PUS 1 Verification Service Submodule

ECSS PUS Service 1 Verification

class spacepackets.ecss.pus_1_verification.FailureNotice(code: PacketFieldEnum, data: bytes)

Bases: object

len()
pack() bytes
classmethod unpack(data: bytes, num_bytes_err_code: int, num_bytes_data: int | None = None)
exception spacepackets.ecss.pus_1_verification.InvalidVerifParams

Bases: Exception

class spacepackets.ecss.pus_1_verification.Service1Tm(apid: int, subservice: Subservice, timestamp: bytes, verif_params: VerificationParams | None = None, seq_count: int = 0, packet_version: int = 0, space_time_ref: int = 0, destination_id: int = 0)

Bases: AbstractPusTm

Service 1 TM class representation.

property ccsds_version: int
property error_code: PacketFieldEnum | None
property failure_notice: FailureNotice | None
classmethod from_tm(tm: PusTm, params: UnpackParams) Service1Tm
property has_failure_notice: bool
property is_step_reply: bool
pack() bytearray
property packet_id: PacketId
property packet_seq_control: PacketSeqCtrl
property service
property source_data: bytes
property sp_header: SpacePacketHeader
property step_id: PacketFieldEnum | None

Retrieve the step number. Returns NONE if this packet does not have a step ID

property subservice
property tc_req_id
property timestamp: bytes
classmethod unpack(data: bytes, params: UnpackParams) Service1Tm

Parse a service 1 telemetry packet.

Parameters:
  • params

  • data

Raises:
Returns:

class spacepackets.ecss.pus_1_verification.Subservice(value)

Bases: IntEnum

An enumeration.

INVALID = 0
TM_ACCEPTANCE_FAILURE = 2
TM_ACCEPTANCE_SUCCESS = 1
TM_COMPLETION_FAILURE = 8
TM_COMPLETION_SUCCESS = 7
TM_START_FAILURE = 4
TM_START_SUCCESS = 3
TM_STEP_FAILURE = 6
TM_STEP_SUCCESS = 5
class spacepackets.ecss.pus_1_verification.UnpackParams(timestamp_len: 'int', bytes_step_id: 'int' = 1, bytes_err_code: 'int' = 1)

Bases: object

bytes_err_code: int = 1
bytes_step_id: int = 1
timestamp_len: int
class spacepackets.ecss.pus_1_verification.VerificationParams(req_id: 'RequestId', step_id: 'Optional[StepId]' = None, failure_notice: 'Optional[FailureNotice]' = None)

Bases: object

failure_notice: FailureNotice | None = None
len()
pack() bytearray
req_id: RequestId
step_id: PacketFieldEnum | None = None
verify_against_subservice(subservice: Subservice)
spacepackets.ecss.pus_1_verification.create_acceptance_failure_tm(apid: int, pus_tc: PusTc, failure_notice: FailureNotice, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_acceptance_success_tm(apid: int, pus_tc: PusTc, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_completion_failure_tm(apid: int, pus_tc: PusTc, failure_notice: FailureNotice, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_completion_success_tm(apid: int, pus_tc: PusTc, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_start_failure_tm(apid: int, pus_tc: PusTc, failure_notice: FailureNotice, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_start_success_tm(apid: int, pus_tc: PusTc, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_step_failure_tm(apid: int, pus_tc: PusTc, step_id: PacketFieldEnum, failure_notice: FailureNotice, timestamp: bytes) Service1Tm
spacepackets.ecss.pus_1_verification.create_step_success_tm(apid: int, pus_tc: PusTc, step_id: PacketFieldEnum, timestamp: bytes) Service1Tm

ECSS PUS 3 Housekeeping Service Submodule

class spacepackets.ecss.pus_3_hk.Subservice(value)

Bases: IntEnum

An enumeration.

TC_DISABLE_PERIODIC_DIAGNOSTICS_GEN = 8
TC_DISABLE_PERIODIC_HK_GEN = 6
TC_ENABLE_PERIODIC_DIAGNOSTICS_GEN = 7
TC_ENABLE_PERIODIC_HK_GEN = 5
TC_GENERATE_ONE_DIAGNOSTICS_REPORT = 28
TC_GENERATE_ONE_PARAMETER_REPORT = 27
TC_MODIFY_DIAGNOSTICS_REPORT_COLLECTION_INTERVAL = 32
TC_MODIFY_PARAMETER_REPORT_COLLECTION_INTERVAL = 31
TM_DIAGNOSTICS_REPORT = 26
TM_DIAG_DEFINITION_REPORT = 12
TM_HK_DEFINITIONS_REPORT = 10
TM_HK_REPORT = 25
TM_REPORT_DIAG_REPORT_STRUCTURES = 11
TM_REPORT_HK_REPORT_STRUCTURES = 9