# andreibaw/honda_k-line_kwp2000 architecture

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

- Interactive diagram: https://gitdiagram.com/andreibaw/honda_k-line_kwp2000
- Repository: https://github.com/andreibaw/honda_k-line_kwp2000

## Overview

This firmware is a Honda motorcycle ECU diagnostic interface for ESP32-S3. A browser connects to the device-hosted web app, selects a mode or sends settings, and the network service dispatches commands to the application controller. The controller directs K-Line polling; ECU data is used for live display, table inspection, and gear calculation, then broadcast to browser clients or rendered on the optional OLED. The README documents configurable polling, Wi-Fi management, and offline OLED operation. Some subsystem behavior is represented from README or declarations because its implementation was not sampled.

Main entry points: [`src/AppController.cpp`](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/AppController.cpp) (Application controller), [`src/NetworkService.cpp`](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/NetworkService.cpp) (Network service), [`src/HondaKWP2000.cpp`](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/HondaKWP2000.cpp) (KWP2000 polling), [`src/OledManager.cpp`](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/OledManager.cpp) (OLED display)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_webui["Web UI<br/>[app.js]"]
  node_webassets["Hosted web assets<br/>[index.html]"]
  node_network["Network service<br/>[NetworkService.cpp]"]
end

subgraph group_control["Application control"]
  node_app["Application controller<br/>[AppController.cpp]"]
  node_status["System status<br/>[SystemStatus.cpp]"]
end

subgraph group_ecu["ECU diagnostics"]
  node_ecu["KWP2000 polling<br/>[HondaKWP2000.cpp]"]
  node_gears["Gear calculation<br/>[GearCalculator.cpp]"]
  node_table["Table viewer<br/>[HondaKWP2000.cpp]"]
  node_gearstore[("Gear calibration settings<br/>[GearCalculator.cpp]")]
end

subgraph group_display["Display and status"]
  node_oled["OLED display<br/>[OledManager.cpp]"]
  node_oledstore[("OLED preferences<br/>[OledManager.cpp]")]
end

node_rider(("Rider / browser"))
node_bikeecu(("Honda motorcycle ECU"))
node_wifi(("Wi-Fi access point"))
node_nvs[("Device preferences")]

node_rider -->|"uses"| node_webui
node_webui -->|"sends commands"| node_network
node_network -->|"dispatches messages"| node_app
node_app -->|"broadcasts updates"| node_network
node_network -->|"serves assets"| node_webassets
node_network -->|"joins"| node_wifi
node_app -->|"starts tasks"| node_status
node_app -->|"sets polling mode"| node_ecu
node_ecu -->|"exchanges KWP data"| node_bikeecu
node_ecu -->|"signals new data"| node_app
node_app -->|"reads snapshots"| node_ecu
node_app -->|"calculates gear"| node_gears
node_app -->|"records ratios"| node_gears
node_app -->|"selects table"| node_table
node_app -.->|"updates display"| node_oled
node_oled -.->|"reads live data"| node_ecu
node_oled -->|"persists settings"| node_oledstore
node_gears -->|"loads and saves ratios"| node_gearstore
node_gearstore -->|"uses preferences"| node_nvs
node_oledstore -->|"uses preferences"| node_nvs

click node_webui "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/data/app.js"
click node_webassets "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/data/index.html"
click node_network "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/NetworkService.cpp"
click node_app "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/AppController.cpp"
click node_status "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/SystemStatus.cpp"
click node_ecu "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/HondaKWP2000.cpp"
click node_gears "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/GearCalculator.cpp"
click node_table "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/HondaKWP2000.cpp"
click node_gearstore "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/GearCalculator.cpp"
click node_oled "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/OledManager.cpp"
click node_oledstore "https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/OledManager.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_webui,node_webassets,node_network,node_rider toneBlue
class node_app,node_status,node_nvs toneAmber
class node_ecu,node_gears,node_table,node_gearstore toneMint
class node_oled,node_oledstore toneRose
class node_bikeecu,node_wifi toneIndigo
```

## Components

### Web interface

- [Web UI](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/data/app.js): `data/app.js`
- [Hosted web assets](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/data/index.html): `data/index.html`
- [Network service](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/NetworkService.cpp): `src/NetworkService.cpp`

### Application control

- [Application controller](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/AppController.cpp): `src/AppController.cpp`
- [System status](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/SystemStatus.cpp): `src/SystemStatus.cpp`

### ECU diagnostics

- [KWP2000 polling](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/HondaKWP2000.cpp): `src/HondaKWP2000.cpp`
- [Gear calculation](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/GearCalculator.cpp): `src/GearCalculator.cpp`
- [Table viewer](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/HondaKWP2000.cpp): `src/HondaKWP2000.cpp`
- [Gear calibration settings](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/GearCalculator.cpp): `src/GearCalculator.cpp`

### Display and status

- [OLED display](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/OledManager.cpp): `src/OledManager.cpp`
- [OLED preferences](https://github.com/andreibaw/honda_k-line_kwp2000/blob/main/src/OledManager.cpp): `src/OledManager.cpp`

### Other components

- **Rider / browser**
- **Honda motorcycle ECU**
- **Wi-Fi access point**
- **Device preferences**

## Connections

- Rider / browser → Web UI: uses
- Web UI → Network service: sends commands
- Network service → Application controller: dispatches messages
- Application controller → Network service: broadcasts updates
- Network service → Hosted web assets: serves assets
- Network service → Wi-Fi access point: joins
- Application controller → System status: starts tasks
- Application controller → KWP2000 polling: sets polling mode
- KWP2000 polling → Honda motorcycle ECU: exchanges KWP data
- KWP2000 polling → Application controller: signals new data
- Application controller → KWP2000 polling: reads snapshots
- Application controller → Gear calculation: calculates gear
- Application controller → Gear calculation: records ratios
- Application controller → Table viewer: selects table
- Application controller → OLED display: updates display
- OLED display → KWP2000 polling: reads live data
- OLED display → OLED preferences: persists settings
- Gear calculation → Gear calibration settings: loads and saves ratios
- Gear calibration settings → Device preferences: uses preferences
- OLED preferences → Device preferences: uses preferences
