Various CCSDS and ECSS packet implementations
Project description
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:
- Space Packet implementation according to CCSDS Blue Book 133.0-B-2
- PUS Telecommand and PUS Telemetry implementation according to the ECSS-E-ST-70-41C standard. It supports PUS A as well.
- CCSDS File Delivery Protcol (CFDP) packet implementations according to CCSDS Blue Book 727.0-B-5.
- Unified Space Data Link Protocol (USLP) frame implementations according to CCSDS Blue Book 732.1-B-2.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for spacepackets-0.7.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80d21f87a9b19a445f72d59b85cee57c085b8d60db0c27bbed87f02a0d23aed0 |
|
MD5 | 14add168d1a48f9163db53ff7a3700e6 |
|
BLAKE2b-256 | 0b8fd9cacbc85bd9f36b01590f4dd8aa2959db8a98687304d728d6a6ea9e9566 |