Skip to main content

Overview

All commands run from the repository root unless otherwise noted.

Native Tests

Run Rust unit and integration tests directly on the host machine without cFS or Docker:

cargo test

This tests protocol implementations, algorithms, and data structures in isolation. The Rust crates are in crates/.

Docker Tests

Build and test the cFS-integrated flight software inside a Linux container:

make docker-build    # build the Docker image (once)
make docker-test # run cargo test --features=cfs inside the container

This tests the Rust code linked against the real cFE, OSAL, and PSP libraries. The cFS framework is in cfe/, osal/, and psp/. Flight apps are in apps/.

NOS3 Simulation

Build and run a full constellation simulation with orbital mechanics, hardware simulators, and inter-satellite communication:

make nos3-build      # build Docker image (adds Rust toolchain to NOS3 base)
make nos3-config # generate NOS3 build configuration
make nos3-build-sim # build hardware simulators (C++) from libs/nos3/components/
make nos3-build-fsw # build flight software (cFS + Rust apps) from apps/
make nos3-launch # start all containers
make nos3-stop # stop all containers
make nos3-shell # interactive shell in FSW container

NOS3 configuration is in libs/nos3/cfg/. Hardware simulator sources are in libs/nos3/components/.

Constellation Simulation

The leodos-cli tool orchestrates multi-satellite constellation simulation:

leodos-cli sim start 3 22     # start 3 orbits × 22 satellites = 66 satellites
leodos-cli sim stop # stop all containers
leodos-cli sim shell 0 # open a shell in orbit-0 container

The start command generates a Docker Compose configuration, assigns spacecraft IDs and ports, and brings up all containers. Each satellite gets a unique ID derived from its grid position: (orbit + 1) × 1000 + satellite_number.

Earth Observation Data

Generate synthetic sensor data for workflow testing before launching the simulation:

cd tools/eosim
uv run eosim wildfire examples/california_wildfire.yaml -o output/ --fmt bin

Or from the repository root:

make eosim-gen       # generate thermal raster files in tools/eosim/output/

Scenario definitions are YAML files in tools/eosim/examples/. Generated rasters go to tools/eosim/output/, which is mounted into the simulation container.

Documentation Site

Build and preview the documentation site locally:

cd site
npm install # install dependencies (once)
npm run start # development server with hot reload
npm run build # production build

The site source is in site/docs/. It deploys automatically to GitHub Pages on pushes to main that modify site/.

Rust API Documentation

Generated Rust API docs are hosted alongside the documentation site:

  • leodos-protocols — the communication stack and SpaceCoMP implementation (built with cfs and tokio features)
  • leodos-libcfs — safe Rust wrappers for the cFE, OSAL, and PSP APIs

To build locally (requires Docker for cFS headers):

make docker-build                  # build Docker image (once)
make docker-prep # prep cFS headers (once)
docker compose run --rm cfs-build \
cargo doc --manifest-path crates/leodos-protocols/Cargo.toml \
--features=cfs,tokio --no-deps --open