Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions crates/xtce-cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[package]
name = "xtce-cli"
description = "Command-line tools for inspecting and decoding CCSDS telemetry defined by XTCE"
readme = "README.md"
keywords = ["xtce", "ccsds", "telemetry", "spacecraft", "cli"]
categories = ["aerospace::space-protocols", "command-line-utilities"]
version.workspace = true
edition.workspace = true
rust-version.workspace = true
Expand Down
14 changes: 14 additions & 0 deletions crates/xtce-cli/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# xtce-cli

The `xtce` command: inspect an XTCE definition and decode a CCSDS stream against it.

```console
$ xtce info mission.xml # what it contains, and what cannot be decoded
$ xtce decode mission.xml downlink.dat # values, as a table or as JSON lines
$ xtce decode mission.xml downlink.dat --param 'ADGPSPOS*'
```

`--param` takes a glob, and a value matching nothing in the definition is an error naming the
nearest parameter rather than an empty report.

Part of [RustSpaceLab/xtce-rs](https://github.com/RustSpaceLab/xtce-rs).
3 changes: 3 additions & 0 deletions crates/xtce-codegen/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[package]
name = "xtce-codegen"
description = "Compile an XTCE telemetry definition into a static Rust decoder"
readme = "README.md"
keywords = ["xtce", "ccsds", "telemetry", "codegen", "spacecraft"]
categories = ["aerospace::space-protocols", "development-tools"]
version.workspace = true
edition.workspace = true
rust-version.workspace = true
Expand Down
14 changes: 14 additions & 0 deletions crates/xtce-codegen/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# xtce-codegen

Compiles an XTCE definition into a `struct` per container whose `decode` is a sequence of
loads, shifts and masks with every offset already a literal. Nothing consults the XTCE model at
run time.

Measured against the interpreted decoder in the same repository on the same 7 200-packet
stream: roughly 100× it, which is about 11 000× the Python reference.

Refusals are fatal by design. A construct the generator cannot compile is refused with the
element named, rather than falling back to interpretation — a silent fallback would make the
measurement above meaningless.

Part of [RustSpaceLab/xtce-rs](https://github.com/RustSpaceLab/xtce-rs).
3 changes: 3 additions & 0 deletions crates/xtce-decode/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[package]
name = "xtce-decode"
description = "Decode CCSDS telemetry packets against an XTCE definition"
readme = "README.md"
keywords = ["xtce", "ccsds", "telemetry", "spacecraft", "decoder"]
categories = ["aerospace::space-protocols", "encoding"]
version.workspace = true
edition.workspace = true
rust-version.workspace = true
Expand Down
19 changes: 19 additions & 0 deletions crates/xtce-decode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# xtce-decode

Decodes CCSDS space packets against an XTCE definition, and is tested the only way that means
anything: packet for packet against
[`lasp/space_packet_parser`](https://github.com/lasp/space_packet_parser), the Python
implementation, over nine recorded mission streams. Where the two disagree, this crate is wrong
until proven otherwise — and the handful of deliberate divergences are listed, with reasons, in
the repository's `SUPPORTED.md`.

Measured at roughly 100× that reference on decode.

* **No panics.** Every failure is a `DecodeError`; a corrupt or hostile packet must not take
down a process sitting on a live downlink.
* **No allocation for aligned reads.** Byte-aligned binary and string fields borrow straight
from the packet.
* **Raw and engineering values both kept.** XTCE treats them as distinct and restriction
criteria may test either.

Part of [RustSpaceLab/xtce-rs](https://github.com/RustSpaceLab/xtce-rs).
3 changes: 3 additions & 0 deletions crates/xtce-model/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[package]
name = "xtce-model"
description = "XTCE telemetry metadata: streaming XML parser and arena-backed intermediate representation"
readme = "README.md"
keywords = ["xtce", "ccsds", "telemetry", "spacecraft", "parser"]
categories = ["aerospace::space-protocols", "parser-implementations"]
version.workspace = true
edition.workspace = true
rust-version.workspace = true
Expand Down
15 changes: 15 additions & 0 deletions crates/xtce-model/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# xtce-model

Reads an XTCE `SpaceSystem` document into `XtceDb`: a flat, index-addressed model that
[`xtce-decode`](https://crates.io/crates/xtce-decode) walks to decode CCSDS packets, and that
`xtce-codegen` compiles into static Rust decoders.

Streaming XML through `quick-xml`, an arena behind every entity, and a `u32` newtype instead of
a pointer — which keeps the model `Send + Sync`, makes cloning cheap, and turns following a
reference into an array index.

Only `TelemetryMetaData` is modelled. Constructs outside the decodable subset are still
*represented*, so loading a real mission database never fails merely because part of it is out
of scope; the error comes later, from the decoder, at the point a value actually depends on it.

Part of [RustSpaceLab/xtce-rs](https://github.com/RustSpaceLab/xtce-rs).
Loading