Skip to main content

Various CCSDS and ECSS packet implementations

Project description

package Documentation Status codecov PyPI version

ECSS and CCSDS Spacepackets

This package contains generic implementations for various CCSDS (Consultative Committee for Space Data Systems) and ECSS (European Cooperation for Space Standardization) packet standards.

Currently, this includes the following components:

Install

You can install this package from PyPI

Linux:

python3 -m pip install spacepackets

Windows:

py -m pip install spacepackets

Examples

You can find all examples listed here in the example folder as well.

ECSS PUS Packets

This examples shows how to generate PUS packets using the PUS ping telecommand and a PUS ping telemetry reply:

from spacepackets.ecss.tc import PusTelecommand
from spacepackets.ecss.tm import PusTelemetry
from spacepackets.util import get_printable_data_string, PrintFormats


def main():
    print("-- PUS packet examples --")
    ping_cmd = PusTelecommand(service=17, subservice=1, apid=0x01)
    cmd_as_bytes = ping_cmd.pack()
    print_string = get_printable_data_string(
        print_format=PrintFormats.HEX, data=cmd_as_bytes
    )
    print(f"Ping telecommand [17,1]: {print_string}")

    ping_reply = PusTelemetry(service=17, subservice=2, apid=0x01)
    tm_as_bytes = ping_reply.pack()
    print_string = get_printable_data_string(
        print_format=PrintFormats.HEX, data=tm_as_bytes
    )
    print(f"Ping reply [17,2]: {print_string}")


if __name__ == "__main__":
    main()

CCSDS Space Packet

This example shows how to generate a space packet header:

from spacepackets.ccsds.spacepacket import SpacePacketHeader, PacketTypes
from spacepackets.util import get_printable_data_string, PrintFormats


def main():
    print("-- Space Packet examples --")
    spacepacket_header = SpacePacketHeader(
        packet_type=PacketTypes.TC, apid=0x01, source_sequence_count=0, data_length=0
    )
    header_as_bytes = spacepacket_header.pack()
    print_string = get_printable_data_string(
        print_format=PrintFormats.HEX, data=header_as_bytes
    )
    print(f"Space packet header: {print_string}")


if __name__ == "__main__":
    main()

USLP Frames

This example shows how to generate a simple variable length USLP frame containing a simple space packet:

from spacepackets.uslp.header import (
    PrimaryHeader,
    SourceOrDestField,
    ProtocolCommandFlag,
    BypassSequenceControlFlag,
)
from spacepackets.uslp.frame import (
    TransferFrame,
    TransferFrameDataField,
    TfdzConstructionRules,
    UslpProtocolIdentifier,
)
from spacepackets.ccsds.spacepacket import SpacePacketHeader, PacketTypes, SequenceFlags

SPACECRAFT_ID = 0x73


def main():
    print("-- USLP frame example --")
    frame_header = PrimaryHeader(
        scid=SPACECRAFT_ID,
        map_id=0,
        vcid=1,
        src_dest=SourceOrDestField.SOURCE,
        frame_len=0,
        vcf_count_len=0,
        op_ctrl_flag=False,
        prot_ctrl_cmd_flag=ProtocolCommandFlag.USER_DATA,
        bypass_seq_ctrl_flag=BypassSequenceControlFlag.SEQ_CTRLD_QOS,
    )
    data = bytearray([1, 2, 3, 4])
    # Wrap the data into a space packet
    space_packet_wrapper = SpacePacketHeader(
        packet_type=PacketTypes.TC,
        sequence_flags=SequenceFlags.UNSEGMENTED,
        apid=SPACECRAFT_ID,
        data_length=len(data) - 1,
        source_sequence_count=0,
    )
    tfdz = space_packet_wrapper.pack() + data
    tfdf = TransferFrameDataField(
        tfdz_cnstr_rules=TfdzConstructionRules.VpNoSegmentation,
        uslp_ident=UslpProtocolIdentifier.SPACE_PACKETS_ENCAPSULATION_PACKETS,
        tfdz=tfdz,
    )
    var_frame = TransferFrame(header=frame_header, tfdf=tfdf)
    var_frame_packed = var_frame.pack()
    print(
        f"USLP variable length frame without FECF, and Operation Control Field containing a "
        f"simple space packet: {var_frame_packed.hex(sep=',')}"
    )


if __name__ == "__main__":
    main()

Tests

All tests are provided in the tests folder and can be run with coverage information by running

coverage run -m pytest

provided that pytest and coverage were installed with

python3 -m pip install coverage pytest

License

Copyright 2019-2021 Robin Mueller, Institute of Space Systems Stuttgart, KSat e.V. Stuttgart

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spacepackets-0.9.0.tar.gz (61.1 kB view hashes)

Uploaded Source

Built Distribution

spacepackets-0.9.0-py3-none-any.whl (78.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page