Components Overview¶
ORION's flight software is built on the F-Prime component framework developed by NASA JPL. Each component is an isolated unit with typed input/output ports, commands, events, telemetry channels, and (optionally) an internal state machine. Components communicate exclusively through port connections defined in the system topology; hence, there are no shared globals or direct function calls between components.
The six ORION-specific components form a linear pipeline from sensor input to ground downlink:
| Component | Purpose | Key Ports |
|---|---|---|
| EventAction | Mission mode controller (IDLE / MEASURE / DOWNLINK / SAFE) | schedIn, navStateIn, modeChangeOut[4], sendFileOut |
| NavTelemetry | Position tracking and comm window computation | schedIn, navStateGet |
| CameraManager | Earth observation image acquisition | schedIn, modeChangeIn, inferenceRequestOut, navStateOut |
| VlmInferenceEngine | On-board VLM triage classification (HIGH / MEDIUM / LOW) | inferenceRequestIn, modeChangeIn, triageDecisionOut |
| TriageRouter | Routes frames by verdict: downlink, store, or discard | triageDecisionIn, modeChangeIn, fileDownlinkOut |
| GroundCommsDriver | Simulated X-band TCP downlink with disk queue | fileDownlinkIn, schedIn, modeChangeIn |
In addition, the Orion/Utils/ directory contains SimSatClient, a plain C++ libcurl wrapper used by NavTelemetry and CameraManager to fetch position and imagery from SimSat. It is not an F-Prime component. See the architecture overview for details.
Communication Model¶
All inter-component communication flows through F-Prime's port system. Ports are either synchronous (caller blocks until the callee returns) or asynchronous (message is enqueued on the callee's thread). Key patterns in ORION:
- Mode broadcasting: EventAction sends mode changes to CameraManager, VlmInferenceEngine, TriageRouter, and GroundCommsDriver via four
modeChangeOutoutput ports. Each receiving component uses the mode to gate its behavior. - Position queries: NavTelemetry exposes a guarded (mutex-protected) synchronous input port. EventAction and CameraManager call it to read cached GPS state without blocking NavTelemetry's own polling.
- Pipeline forwarding: The image pipeline flows CameraManager -> VlmInferenceEngine -> TriageRouter -> GroundCommsDriver, with buffer ownership transferring at each stage. Buffers are returned to the shared BufferManager pool after use.
For detailed data, link, storage, power, and timing budgets per orbit, see Mission Budgets.