# gaucho-rocket-project/gse architecture

> Architecture diagram of the GitHub repository gaucho-rocket-project/gse, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gaucho-rocket-project/gse
- Repository: https://github.com/gaucho-rocket-project/gse

## Overview

GSE is a two-board rocket ground-support system: operators use a local web console to configure and command a host link engine, which exchanges framed messages with a ground bridge and vehicle firmware; the vehicle independently enforces output safety. The graph follows that route and separates host controls, shared protocol, firmware logic, and hardware. README documents key operating-mode, countdown, telemetry, logging, radio configuration, and simulator capabilities. Unsampled subsystems are included only at supported directory granularity; edges without direct evidence are omitted.

Main entry points: [`crates/gse-app/src/engine.rs`](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/engine.rs) (Link engine), [`crates/gse-fw-core/src/hal.rs`](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/hal.rs) (Hardware abstraction), [`crates/gse-fw-core/src/vehicle.rs`](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/vehicle.rs) (Vehicle controller), [`crates/gse-fw-core/src/ground.rs`](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/ground.rs) (Ground bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_host["Operator host"]
  node_console["Web console<br/>[app.js]"]
  node_http["HTTP and SSE<br/>[http.rs]"]
  node_engine["Link engine<br/>[engine.rs]"]
  node_safety["Host interlocks<br/>[safety.rs]"]
  node_state["Shared state<br/>[state.rs]"]
  node_config["Settings<br/>[config.rs]"]
  node_serial["USB serial<br/>[mod.rs]"]
  node_transport["Transport<br/>[transport.rs]"]
  node_logging["Session logs<br/>[logging.rs]"]
end

subgraph group_wire["Wire protocol"]
  node_protocol["Framing and codec<br/>[frame.rs]"]
  node_messages["Wire messages<br/>[message.rs]"]
  node_controls["Controls and events<br/>[control.rs]"]
  node_snapshot["State snapshot<br/>[state.rs]"]
  node_fsm["Control state machine<br/>[fsm.rs]"]
end

subgraph group_firmware["Board firmware"]
  node_ground["Ground bridge<br/>[ground.rs]"]
  node_vehicle["Vehicle controller<br/>[vehicle.rs]"]
  node_hal["Hardware abstraction<br/>[hal.rs]"]
  node_radio["Radio drivers<br/>[radio.rs]"]
  node_e28["E28 radio support<br/>[e28.rs]"]
end

subgraph group_hardware["Hardware and simulation"]
  node_simulator["Board simulator<br/>[main.rs]"]
  node_tcp(("Simulator TCP"))
  node_stm["STM32 hardware<br/>[hw.rs]"]
  node_rf(("RF link"))
  node_actuators["Vehicle outputs"]
end

node_operator(("Operator"))

node_operator -->|"operates"| node_console
node_console -->|"requests"| node_http
node_http -->|"submits commands"| node_engine
node_engine -->|"checks gates"| node_safety
node_engine -->|"publishes state"| node_state
node_http -->|"serves snapshots"| node_state
node_engine -->|"uses transport"| node_transport
node_engine -->|"uses settings"| node_config
node_transport -->|"opens serial"| node_serial
node_engine -->|"records sessions"| node_logging
node_engine -.->|"encodes frames"| node_protocol
node_protocol -->|"encodes messages"| node_messages
node_messages -->|"uses identifiers"| node_controls
node_messages -->|"carries state"| node_snapshot
node_fsm -->|"evaluates actions"| node_controls
node_fsm -->|"checks state"| node_snapshot
node_ground -->|"uses hardware"| node_hal
node_vehicle -->|"drives hardware"| node_hal
node_vehicle -.->|"enforces controls"| node_fsm
node_ground -.->|"bridges frames"| node_rf
node_vehicle -.->|"exchanges frames"| node_rf
node_hal -->|"supports radios"| node_radio
node_hal -->|"supports E28"| node_e28
node_stm -.->|"implements bridge"| node_ground
node_stm -.->|"implements vehicle"| node_vehicle
node_hal -->|"sets outputs"| node_actuators
node_simulator -.->|"runs state machines"| node_ground
node_simulator -.->|"runs state machines"| node_vehicle
node_engine -->|"connects in sim mode"| node_tcp
node_simulator -->|"serves simulation"| node_tcp

click node_console "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/web/app.js"
click node_http "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/http.rs"
click node_engine "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/engine.rs"
click node_safety "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/safety.rs"
click node_state "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/state.rs"
click node_config "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/config.rs"
click node_serial "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/serial/mod.rs"
click node_transport "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/transport.rs"
click node_logging "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/logging.rs"
click node_simulator "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-sim/src/main.rs"
click node_protocol "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/frame.rs"
click node_messages "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/message.rs"
click node_controls "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/control.rs"
click node_snapshot "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/state.rs"
click node_fsm "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/fsm.rs"
click node_ground "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/ground.rs"
click node_vehicle "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/vehicle.rs"
click node_hal "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/hal.rs"
click node_radio "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/radio.rs"
click node_e28 "https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/e28.rs"
click node_stm "https://github.com/gaucho-rocket-project/gse/blob/main/firmware/stm32h753/src/hw.rs"

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_console,node_http,node_engine,node_safety,node_state,node_config,node_serial,node_transport,node_logging toneBlue
class node_protocol,node_messages,node_controls,node_snapshot,node_fsm toneAmber
class node_ground,node_vehicle,node_hal,node_radio,node_e28 toneMint
class node_simulator,node_tcp,node_stm,node_rf,node_actuators toneRose
class node_operator toneIndigo
```

## Components

### Operator host

- [Web console](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/web/app.js): `crates/gse-app/web/app.js`
- [HTTP and SSE](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/http.rs): `crates/gse-app/src/http.rs`
- [Link engine](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/engine.rs): `crates/gse-app/src/engine.rs`
- [Host interlocks](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/safety.rs): `crates/gse-app/src/safety.rs`
- [Shared state](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/state.rs): `crates/gse-app/src/state.rs`
- [Settings](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/config.rs): `crates/gse-app/src/config.rs`
- [USB serial](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/serial/mod.rs): `crates/gse-app/src/serial/mod.rs`
- [Transport](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/transport.rs): `crates/gse-app/src/transport.rs`
- [Session logs](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-app/src/logging.rs): `crates/gse-app/src/logging.rs`

### Wire protocol

- [Framing and codec](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/frame.rs): `crates/gse-proto/src/frame.rs`
- [Wire messages](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/message.rs): `crates/gse-proto/src/message.rs`
- [Controls and events](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/control.rs): `crates/gse-proto/src/control.rs`
- [State snapshot](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/state.rs): `crates/gse-proto/src/state.rs`
- [Control state machine](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-proto/src/fsm.rs): `crates/gse-proto/src/fsm.rs`

### Board firmware

- [Ground bridge](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/ground.rs): `crates/gse-fw-core/src/ground.rs`
- [Vehicle controller](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/vehicle.rs): `crates/gse-fw-core/src/vehicle.rs`
- [Hardware abstraction](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/hal.rs): `crates/gse-fw-core/src/hal.rs`
- [Radio drivers](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/radio.rs): `crates/gse-fw-core/src/radio.rs`
- [E28 radio support](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-fw-core/src/e28.rs): `crates/gse-fw-core/src/e28.rs`

### Hardware and simulation

- [Board simulator](https://github.com/gaucho-rocket-project/gse/blob/main/crates/gse-sim/src/main.rs): `crates/gse-sim/src/main.rs`
- **Simulator TCP**
- [STM32 hardware](https://github.com/gaucho-rocket-project/gse/blob/main/firmware/stm32h753/src/hw.rs): `firmware/stm32h753/src/hw.rs`
- **RF link**
- **Vehicle outputs**

### Other components

- **Operator**

## Connections

- Operator → Web console: operates
- Web console → HTTP and SSE: requests (evidence: `crates/gse-app/src/http.rs`)
- HTTP and SSE → Link engine: submits commands (evidence: `crates/gse-app/src/http.rs`)
- Link engine → Host interlocks: checks gates (evidence: `crates/gse-app/src/engine.rs`)
- Link engine → Shared state: publishes state (evidence: `crates/gse-app/src/engine.rs`)
- HTTP and SSE → Shared state: serves snapshots (evidence: `crates/gse-app/src/http.rs`)
- Link engine → Transport: uses transport (evidence: `crates/gse-app/src/engine.rs`)
- Link engine → Settings: uses settings (evidence: `crates/gse-app/src/engine.rs`)
- Transport → USB serial: opens serial (evidence: `crates/gse-app/src/transport.rs`)
- Link engine → Session logs: records sessions (evidence: `crates/gse-app/src/engine.rs`)
- Link engine → Framing and codec: encodes frames
- Framing and codec → Wire messages: encodes messages (evidence: `crates/gse-proto/src/frame.rs`)
- Wire messages → Controls and events: uses identifiers (evidence: `crates/gse-proto/src/message.rs`)
- Wire messages → State snapshot: carries state (evidence: `crates/gse-proto/src/message.rs`)
- Control state machine → Controls and events: evaluates actions (evidence: `crates/gse-proto/src/fsm.rs`)
- Control state machine → State snapshot: checks state (evidence: `crates/gse-proto/src/fsm.rs`)
- Ground bridge → Hardware abstraction: uses hardware (evidence: `crates/gse-fw-core/src/ground.rs`)
- Vehicle controller → Hardware abstraction: drives hardware (evidence: `crates/gse-fw-core/src/vehicle.rs`)
- Vehicle controller → Control state machine: enforces controls
- Ground bridge → RF link: bridges frames
- Vehicle controller → RF link: exchanges frames
- Hardware abstraction → Radio drivers: supports radios (evidence: `crates/gse-fw-core/src/radio.rs`)
- Hardware abstraction → E28 radio support: supports E28 (evidence: `crates/gse-fw-core/src/e28.rs`)
- STM32 hardware → Ground bridge: implements bridge
- STM32 hardware → Vehicle controller: implements vehicle
- Hardware abstraction → Vehicle outputs: sets outputs (evidence: `crates/gse-fw-core/src/hal.rs`)
- Board simulator → Ground bridge: runs state machines
- Board simulator → Vehicle controller: runs state machines
- Link engine → Simulator TCP: connects in sim mode
- Board simulator → Simulator TCP: serves simulation
