VariableLength

class ccsdspy.VariableLength(fields, apid=None, name=None, description=None)[source]

Bases: _BasePacket

Define a variable length packet to decode binary data.

Variable length packets are packets which have a different length each time. Variable length fields are defined as PacketArray fields where array_shape="expand" (causing the field to grow to fill the packet) or array_shape="other_field" (causes the field named other_field to set the number of elements in this array).

Please note that while this class is able to parse fixed length packets, it is much slower. Use the FixedLength class instead.

Rules for variable length packets:
  • Do only specify a PacketArray with the array_shape="other_field" when other_field precedes it in the packet definition

  • Do not provide more than one expanding PacketArray with array_shape="expand"

  • Do not specify the primary header fields manually

  • Do not specify explicit bit_offsets (they will be computed automatically)

Parameters:
fieldslist of PacketField or PacketArray

Layout of packet fields contained in the definition. No more than one field should have array_shape=”expand”. The field must have no bit_offset’s. Do not include the primary header fields.

apidint, optional

APID of the packet. Acts as a unique identifier for the packet type. Used as metadata.

namestr, optional

Name of the packet. Used as metadata.

descriptionstr, optional

Description of the packet. Used as metadata.

Raises:
ValueError

one or more of the arguments are invalid, or do not follow the specified rules.

Methods Summary

load(file[, include_primary_header, ...])

Decode a file-like object containing a sequence of these packets.

to_file(file, pkt_type, apid, ...)

Encode a file containing a sequence of packet fields.

Methods Documentation

load(file, include_primary_header=False, reset_file_obj=False)[source]

Decode a file-like object containing a sequence of these packets.

Parameters:
filestr

Path to file on the local file system, or file-like object

include_primary_headerbool

If True, provides the primary header in the output. The names of the fields are: CCSDS_VERSION_NUMBER, CCSDS_PACKET_TYPE, CCSDS_SECONDARY_FLAG, CCSDS_SEQUENCE_FLAG, CCSDS_APID, CCSDS_SEQUENCE_COUNT, and CCSDS_PACKET_LENGTH

reset_file_objbool

If True, leave the file object, when it is file buffer, where it was before load is called. Otherwise, (default), leave the file stream pos after the read packets. Does not apply when file is a string.

Returns:
field_arraysdict, string to NumPy array

dictionary mapping field names to NumPy arrays, with key order matching the order of fields in the packet.

Warns:
UserWarning

If the ccsds sequence count is not in order

UserWarning

If the ccsds sequence count is missing packets

UserWarning

If there are more than one APID

to_file(file, pkt_type, apid, sec_header_flag, seq_flag, data)[source]

Encode a file containing a sequence of packet fields. For more information about the CCSDS primary header see CCSDS.

Parameters:
filestr

Path to file on the local file system, or file-like object

pkt_typeint

For the CCSDS primary header, for telemetry (or reporting), set to 0, for commanding set to 1.

apiduint

For the CCSDS primary header, the Application process identifier (0 to 2047)

sec_header_flaguint

For the CCSDS primary header, identicates the presence or absence of a secondary header. Set to 1 if present.

seq_flaguint

For the CCSDS primary header, tet to 1 if the data is a continuation segment, set to 0 if it contains the first or only segment of data.

seq_countuint

For the CCSDS primary header, the start sequence number for the packets

datadict

The data to add to the file where the keys must match the packet field names and values are ndarray except for variable length fields which must be lists. The number of elements must be the same.

Returns:
filestr

A binary file with the packet data

Raises:
ValueError

If the number of elements in the data values are not the same.