# sudochris/spacecraft-telemetry-control architecture

> Architecture diagram of the GitHub repository sudochris/spacecraft-telemetry-control, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sudochris/spacecraft-telemetry-control
- Repository: https://github.com/sudochris/spacecraft-telemetry-control

## Overview

This C++ proof-of-concept simulates spacecraft thermal behavior and closes a telemetry/command loop between a simulator and a graphical ground station over MQTT. The simulator updates a thermal model, assembles thermal and randomized power readings, serializes and publishes telemetry; the ground station receives and displays it, and publishes heater commands back for simulator-side decoding and application. The README documents broader protocol types and SI-unit support; paths for several implementations are present in the tree but their details were not sampled, so their internal wiring is shown only where supported.

Main entry points: [`apps/spacecraft_sim/main.cpp`](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/spacecraft_sim/main.cpp) (Spacecraft Simulator), [`libs/communication/src/transport/mqtt_transport.cpp`](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/transport/mqtt_transport.cpp) (MQTT Transport), [`apps/ground_station/main.cpp`](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/ground_station/main.cpp) (Ground Station Entry), [`libs/communication/src/downlink/text_telemetry_serializer.cpp`](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/downlink/text_telemetry_serializer.cpp) (Text Telemetry Serializer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["Applications"]
  node_sim["Spacecraft Simulator<br/>[main.cpp]"]
  node_ground["Ground Station Entry<br/>[main.cpp]"]
  node_ui["Ground Station UI"]
end

subgraph group_comm["Communication"]
  node_topics["Topic Names<br/>[topics.hpp]"]
  node_mqtt["MQTT Transport<br/>[mqtt_transport.cpp]"]
  node_telemetrypub["Telemetry Publisher"]
  node_telemetryser["Text Telemetry Serializer"]
  node_commandpub["Command Publisher"]
  node_commandser["Text Command Serializer"]
end

subgraph group_domain["Spacecraft Model"]
  node_thermal["Thermal Subsystem"]
  node_sensor["Simulated Temperature Sensor"]
  node_heater["Simulated Heater"]
end

subgraph group_protocol["Shared Protocol"]
  node_telemetrydata["Telemetry Types<br/>[telemetry.hpp]"]
  node_commands["Command Types<br/>[command.hpp]"]
  node_si["Typed SI Units<br/>[si.hpp]"]
end

node_operator(("Operator"))
node_broker(("MQTT Broker"))

node_operator -->|"uses controls"| node_ui
node_sim -->|"updates model"| node_thermal
node_thermal -->|"reads and updates"| node_sensor
node_thermal -->|"checks state"| node_heater
node_sim -->|"applies command"| node_heater
node_sim -->|"assembles readings"| node_telemetrydata
node_sim -->|"serializes"| node_telemetryser
node_telemetryser -->|"encodes"| node_telemetrydata
node_sim -->|"publishes telemetry"| node_mqtt
node_mqtt -->|"sends messages"| node_broker
node_broker -->|"delivers messages"| node_mqtt
node_mqtt -->|"dispatches command"| node_sim
node_sim -->|"decodes command"| node_commandser
node_commandser -->|"produces typed command"| node_commands
node_ground -->|"subscribes telemetry"| node_mqtt
node_mqtt -->|"dispatches telemetry"| node_ground
node_ground -->|"decodes telemetry"| node_telemetryser
node_telemetryser -->|"produces readings"| node_telemetrydata
node_ground -->|"updates display"| node_ui
node_ui -->|"requests command"| node_commandpub
node_commandpub -->|"serializes command"| node_commandser
node_commandser -->|"encodes typed command"| node_commands
node_commandpub -->|"publishes command"| node_mqtt
node_telemetrypub -->|"serializes data"| node_telemetryser
node_telemetrypub -->|"publishes message"| node_mqtt
node_sim -->|"uses topics"| node_topics
node_ground -->|"uses topics"| node_topics
node_thermal -->|"uses quantities"| node_si
node_telemetrydata -->|"uses quantities"| node_si

click node_sim "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/spacecraft_sim/main.cpp"
click node_ground "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/ground_station/main.cpp"
click node_ui "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/ground_station/src/ground_station_ui.cpp"
click node_thermal "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/thermal_subsystem.cpp"
click node_sensor "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/simulated_temperature_sensor.cpp"
click node_heater "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/simulated_heater.cpp"
click node_telemetrydata "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/telemetry.hpp"
click node_commands "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/command.hpp"
click node_si "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/si.hpp"
click node_topics "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/include/communication/topics.hpp"
click node_mqtt "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/transport/mqtt_transport.cpp"
click node_telemetrypub "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/downlink/telemetry_publisher.cpp"
click node_telemetryser "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/downlink/text_telemetry_serializer.cpp"
click node_commandpub "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/uplink/command_publisher.cpp"
click node_commandser "https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/uplink/text_command_serializer.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_sim,node_ground,node_ui toneBlue
class node_topics,node_mqtt,node_telemetrypub,node_telemetryser,node_commandpub,node_commandser toneAmber
class node_thermal,node_sensor,node_heater toneMint
class node_telemetrydata,node_commands,node_si toneRose
class node_operator,node_broker toneIndigo
```

## Components

### Applications

- [Spacecraft Simulator](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/spacecraft_sim/main.cpp): `apps/spacecraft_sim/main.cpp`
- [Ground Station Entry](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/ground_station/main.cpp): `apps/ground_station/main.cpp`
- [Ground Station UI](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/apps/ground_station/src/ground_station_ui.cpp): `apps/ground_station/src/ground_station_ui.cpp`

### Communication

- [Topic Names](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/include/communication/topics.hpp): `libs/communication/include/communication/topics.hpp`
- [MQTT Transport](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/transport/mqtt_transport.cpp): `libs/communication/src/transport/mqtt_transport.cpp`
- [Telemetry Publisher](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/downlink/telemetry_publisher.cpp): `libs/communication/src/downlink/telemetry_publisher.cpp`
- [Text Telemetry Serializer](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/downlink/text_telemetry_serializer.cpp): `libs/communication/src/downlink/text_telemetry_serializer.cpp`
- [Command Publisher](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/uplink/command_publisher.cpp): `libs/communication/src/uplink/command_publisher.cpp`
- [Text Command Serializer](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/communication/src/uplink/text_command_serializer.cpp): `libs/communication/src/uplink/text_command_serializer.cpp`

### Spacecraft Model

- [Thermal Subsystem](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/thermal_subsystem.cpp): `libs/spacecraft/src/thermal/thermal_subsystem.cpp`
- [Simulated Temperature Sensor](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/simulated_temperature_sensor.cpp): `libs/spacecraft/src/thermal/simulated_temperature_sensor.cpp`
- [Simulated Heater](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/spacecraft/src/thermal/simulated_heater.cpp): `libs/spacecraft/src/thermal/simulated_heater.cpp`

### Shared Protocol

- [Telemetry Types](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/telemetry.hpp): `libs/protocol/include/protocol/telemetry.hpp`
- [Command Types](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/command.hpp): `libs/protocol/include/protocol/command.hpp`
- [Typed SI Units](https://github.com/sudochris/spacecraft-telemetry-control/blob/main/libs/protocol/include/protocol/si.hpp): `libs/protocol/include/protocol/si.hpp`

### Other components

- **Operator**
- **MQTT Broker**

## Connections

- Operator → Ground Station UI: uses controls
- Spacecraft Simulator → Thermal Subsystem: updates model
- Thermal Subsystem → Simulated Temperature Sensor: reads and updates
- Thermal Subsystem → Simulated Heater: checks state
- Spacecraft Simulator → Simulated Heater: applies command
- Spacecraft Simulator → Telemetry Types: assembles readings
- Spacecraft Simulator → Text Telemetry Serializer: serializes
- Text Telemetry Serializer → Telemetry Types: encodes
- Spacecraft Simulator → MQTT Transport: publishes telemetry
- MQTT Transport → MQTT Broker: sends messages
- MQTT Broker → MQTT Transport: delivers messages
- MQTT Transport → Spacecraft Simulator: dispatches command
- Spacecraft Simulator → Text Command Serializer: decodes command
- Text Command Serializer → Command Types: produces typed command
- Ground Station Entry → MQTT Transport: subscribes telemetry
- MQTT Transport → Ground Station Entry: dispatches telemetry
- Ground Station Entry → Text Telemetry Serializer: decodes telemetry
- Text Telemetry Serializer → Telemetry Types: produces readings
- Ground Station Entry → Ground Station UI: updates display
- Ground Station UI → Command Publisher: requests command
- Command Publisher → Text Command Serializer: serializes command
- Text Command Serializer → Command Types: encodes typed command
- Command Publisher → MQTT Transport: publishes command
- Telemetry Publisher → Text Telemetry Serializer: serializes data
- Telemetry Publisher → MQTT Transport: publishes message
- Spacecraft Simulator → Topic Names: uses topics
- Ground Station Entry → Topic Names: uses topics
- Thermal Subsystem → Typed SI Units: uses quantities
- Telemetry Types → Typed SI Units: uses quantities
