# Architecture Overview
This document provides a high-level view of the framework’s components and how they interact, plus a Mermaid diagram for quick orientation.
## Components
- Tests (pytest) — test modules and functions under `tests/`
- Fixtures — defined in `tests/conftest.py` (config, lin, flash_ecu)
- Config Loader — `ecu_framework/config.py` (YAML → dataclasses)
- LIN Abstraction — `ecu_framework/lin/base.py` (`LinInterface`, `LinFrame`)
- Mock LIN Adapter — `ecu_framework/lin/mock.py`
- BabyLIN Adapter — `ecu_framework/lin/babylin.py` (SDK wrapper → BabyLIN_library.py)
- Flasher — `ecu_framework/flashing/hex_flasher.py`
- Reporting Plugin — `conftest_plugin.py` (docstring → report metadata)
- Reports — `reports/report.html`, `reports/junit.xml`
## Mermaid architecture diagram
```mermaid
flowchart TB
subgraph Tests & Pytest
T[tests/*]
CF[tests/conftest.py]
PL[conftest_plugin.py]
end
subgraph Framework
CFG[ecu_framework/config.py]
BASE[ecu_framework/lin/base.py]
MOCK[ecu_framework/lin/mock.py]
BABY[ecu_framework/lin/babylin.py]
FLASH[ecu_framework/flashing/hex_flasher.py]
end
subgraph Artifacts
REP[reports/report.html
reports/junit.xml]
YAML[config/*.yaml
babylin.example.yaml
test_config.yaml]
SDK[vendor/BabyLIN_library.py
platform-specific libs]
end
T --> CF
CF --> CFG
CF --> BASE
CF --> MOCK
CF --> BABY
CF --> FLASH
PL --> REP
CFG --> YAML
BABY --> SDK
T --> REP
```
## Data and control flow summary
- Tests use fixtures to obtain config and a connected LIN adapter
- Config loader reads YAML (or env override), returns typed dataclasses
- LIN calls are routed through the interface abstraction to the selected adapter
- Flasher (optional) uses the same interface to program the ECU
- Reporting plugin parses docstrings and enriches the HTML report
## Extending the architecture
- Add new bus adapters by implementing `LinInterface`
- Add new report sinks (e.g., JSON or a DB) by extending the plugin
- Add new fixtures for diagnostics or measurement tools (Scopes, power supplies, etc.)