# fome-tech/fome-fw architecture

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

- Interactive diagram: https://gitdiagram.com/fome-tech/fome-fw
- Repository: https://github.com/fome-tech/fome-fw

## Overview

FOME is an open-source STM32 ECU firmware project with a Java tuning/debug console and a firmware simulator. In the main workflow, engine configuration and sensor/shaft-position inputs inform firmware control, which schedules fuel and ignition outputs; the console connects to a controller and presents engine data and trigger charts. The graph also preserves documented simulator and board/engine-configuration branches. Edges are limited to relationships shown in the excerpts, source index, or README; unsampled implementation details are not inferred.

Main entry points: [`firmware/controllers/algo/engine.cpp`](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/algo/engine.cpp) (Engine state), [`firmware/controllers/engine_controller.cpp`](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/engine_controller.cpp) (Controller setup), [`firmware/main.cpp`](https://github.com/fome-tech/fome-fw/blob/master/firmware/main.cpp) (Firmware entry), [`firmware/config/engines/custom_engine.cpp`](https://github.com/fome-tech/fome-fw/blob/master/firmware/config/engines/custom_engine.cpp) (Engine setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Configuration"]
  node_board_config["Board setup"]
  node_engine_config["Engine setup<br/>[custom_engine.cpp]"]
end

subgraph group_control["Engine control"]
  node_firmware_main["Firmware entry<br/>[main.cpp]"]
  node_engine_controller["Controller setup"]
  node_engine_core["Engine state<br/>[engine.cpp]"]
  node_fuel_math["Fuel calculations<br/>[fuel_math.h]"]
  node_actuators["Actuator control"]
end

subgraph group_interfaces["Data and interfaces"]
  node_sensor_core["Sensor framework<br/>[sensor.cpp]"]
  node_engine_sniffer["Wave capture<br/>[engine_sniffer.cpp]"]
  node_serial_console["Serial console"]
  node_simulator["Firmware simulator<br/>[main.cpp]"]
end

subgraph group_console["Console"]
  node_link_manager["Controller link<br/>[LinkManager.java]"]
  node_engine_state["Data decoding<br/>[EngineState.java]"]
  node_sniffer_panel["Sniffer display"]
  node_chart_parser["Chart parser"]
  node_engine_report["Wave report<br/>[EngineReport.java]"]
end

node_engine_user(("Engine inputs"))
node_operator(("Tuner"))

node_engine_user -.->|"provides signals"| node_engine_core
node_board_config -.->|"configures"| node_engine_config
node_engine_config -->|"sets parameters"| node_engine_core
node_firmware_main -.->|"starts control"| node_engine_controller
node_engine_controller -->|"registers RPM"| node_engine_core
node_engine_core -->|"uses calculations"| node_fuel_math
node_engine_controller -->|"prepares outputs"| node_actuators
node_engine_core -.->|"reads sensors"| node_sensor_core
node_engine_core -.->|"enables capture"| node_engine_sniffer
node_engine_sniffer -.->|"publishes data"| node_serial_console
node_firmware_main -.->|"runs in simulation"| node_simulator
node_operator -.->|"connects"| node_link_manager
node_link_manager -->|"creates decoder"| node_engine_state
node_operator -.->|"views charts"| node_sniffer_panel
node_sniffer_panel -->|"parses messages"| node_chart_parser
node_chart_parser -.->|"builds reports"| node_engine_report

click node_board_config "https://github.com/fome-tech/fome-fw/tree/master/firmware/config/boards"
click node_engine_config "https://github.com/fome-tech/fome-fw/blob/master/firmware/config/engines/custom_engine.cpp"
click node_firmware_main "https://github.com/fome-tech/fome-fw/blob/master/firmware/main.cpp"
click node_engine_controller "https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/engine_controller.cpp"
click node_engine_core "https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/algo/engine.cpp"
click node_fuel_math "https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/algo/fuel_math.h"
click node_actuators "https://github.com/fome-tech/fome-fw/tree/master/firmware/controllers/actuators"
click node_sensor_core "https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/sensors/core/sensor.cpp"
click node_engine_sniffer "https://github.com/fome-tech/fome-fw/blob/master/firmware/development/engine_sniffer.cpp"
click node_serial_console "https://github.com/fome-tech/fome-fw/tree/master/firmware/console"
click node_simulator "https://github.com/fome-tech/fome-fw/blob/master/simulator/main.cpp"
click node_link_manager "https://github.com/fome-tech/fome-fw/blob/master/java_console/io/src/main/java/com/rusefi/io/LinkManager.java"
click node_engine_state "https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/core/EngineState.java"
click node_sniffer_panel "https://github.com/fome-tech/fome-fw/blob/master/java_console/ui/src/main/java/com/rusefi/ui/engine/EngineSnifferPanel.java"
click node_chart_parser "https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/waves/EngineChartParser.java"
click node_engine_report "https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/waves/EngineReport.java"

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_board_config,node_engine_config toneBlue
class node_firmware_main,node_engine_controller,node_engine_core,node_fuel_math,node_actuators toneAmber
class node_sensor_core,node_engine_sniffer,node_serial_console,node_simulator toneMint
class node_link_manager,node_engine_state,node_sniffer_panel,node_chart_parser,node_engine_report toneRose
class node_engine_user,node_operator toneIndigo
```

## Components

### Configuration

- [Board setup](https://github.com/fome-tech/fome-fw/tree/master/firmware/config/boards): `firmware/config/boards`
- [Engine setup](https://github.com/fome-tech/fome-fw/blob/master/firmware/config/engines/custom_engine.cpp): `firmware/config/engines/custom_engine.cpp`

### Engine control

- [Firmware entry](https://github.com/fome-tech/fome-fw/blob/master/firmware/main.cpp): `firmware/main.cpp`
- [Controller setup](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/engine_controller.cpp): `firmware/controllers/engine_controller.cpp`
- [Engine state](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/algo/engine.cpp): `firmware/controllers/algo/engine.cpp`
- [Fuel calculations](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/algo/fuel_math.h): `firmware/controllers/algo/fuel_math.h`
- [Actuator control](https://github.com/fome-tech/fome-fw/tree/master/firmware/controllers/actuators): `firmware/controllers/actuators`

### Data and interfaces

- [Sensor framework](https://github.com/fome-tech/fome-fw/blob/master/firmware/controllers/sensors/core/sensor.cpp): `firmware/controllers/sensors/core/sensor.cpp`
- [Wave capture](https://github.com/fome-tech/fome-fw/blob/master/firmware/development/engine_sniffer.cpp): `firmware/development/engine_sniffer.cpp`
- [Serial console](https://github.com/fome-tech/fome-fw/tree/master/firmware/console): `firmware/console`
- [Firmware simulator](https://github.com/fome-tech/fome-fw/blob/master/simulator/main.cpp): `simulator/main.cpp`

### Console

- [Controller link](https://github.com/fome-tech/fome-fw/blob/master/java_console/io/src/main/java/com/rusefi/io/LinkManager.java): `java_console/io/src/main/java/com/rusefi/io/LinkManager.java`
- [Data decoding](https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/core/EngineState.java): `java_console/models/src/main/java/com/rusefi/core/EngineState.java`
- [Sniffer display](https://github.com/fome-tech/fome-fw/blob/master/java_console/ui/src/main/java/com/rusefi/ui/engine/EngineSnifferPanel.java): `java_console/ui/src/main/java/com/rusefi/ui/engine/EngineSnifferPanel.java`
- [Chart parser](https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/waves/EngineChartParser.java): `java_console/models/src/main/java/com/rusefi/waves/EngineChartParser.java`
- [Wave report](https://github.com/fome-tech/fome-fw/blob/master/java_console/models/src/main/java/com/rusefi/waves/EngineReport.java): `java_console/models/src/main/java/com/rusefi/waves/EngineReport.java`

### Other components

- **Engine inputs**
- **Tuner**

## Connections

- Engine inputs → Engine state: provides signals
- Board setup → Engine setup: configures (evidence: `firmware/config/engines/custom_engine.cpp`)
- Engine setup → Engine state: sets parameters (evidence: `firmware/config/engines/custom_engine.cpp`)
- Firmware entry → Controller setup: starts control
- Controller setup → Engine state: registers RPM (evidence: `firmware/controllers/engine_controller.cpp`)
- Engine state → Fuel calculations: uses calculations (evidence: `firmware/controllers/algo/engine.cpp`)
- Controller setup → Actuator control: prepares outputs (evidence: `firmware/controllers/engine_controller.cpp`)
- Engine state → Sensor framework: reads sensors
- Engine state → Wave capture: enables capture
- Wave capture → Serial console: publishes data (evidence: `firmware/development/engine_sniffer.cpp`)
- Firmware entry → Firmware simulator: runs in simulation (evidence: `README.md`)
- Tuner → Controller link: connects
- Controller link → Data decoding: creates decoder (evidence: `java_console/io/src/main/java/com/rusefi/io/LinkManager.java`)
- Tuner → Sniffer display: views charts
- Sniffer display → Chart parser: parses messages (evidence: `java_console/ui/src/main/java/com/rusefi/ui/engine/EngineSnifferPanel.java`)
- Chart parser → Wave report: builds reports
