feat(i18n): tools + landing page + doorstop generator in English
Validate / build-test (macos-latest) (push) Failing after 2s
Validate / build-test (windows-latest) (push) Failing after 16s
Validate / build-test (ubuntu-latest) (push) Successful in 18s
Validate / reports (push) Successful in 52s

Phase 1 of full English translation:
- generate_doorstop_items.py: all 55 items (SG/SYS/SWE/SA/SWA) rewritten in English
- generate_landing_page.py: full UI labels, KPI cards, section headings in English
- traceability.py: docstring, error messages, HTML headers in English
- generate_test_report.py: report content + table headers in English
- All 55 markdown items in safety/sg/, reqs/, arch/ regenerated in English

Still to come:
- demo-epb filled Word docs (PID, plans, safety, manuals, audit artefacts)
- Code comments + test names + CI workflow step names
- README + dev-process repo templates
This commit is contained in:
Stefan Lohmaier
2026-05-12 03:28:54 -07:00
parent 542a358abc
commit a47e0aed3e
61 changed files with 805 additions and 803 deletions
+15 -15
View File
@@ -17,12 +17,12 @@ asil: D
# SWA-001: Safety Manager
## Verantwortung
## Responsibility
Hoechste Sicherheitsschicht. Erkennt Motor-Aus, aktiviert Hill-Hold,
triggert Auto-Apply. Lebenswichtige Logik mit redundanter Pruefung.
Highest safety layer. Detects engine-off, activates hill-hold,
triggers auto-apply. Life-critical logic with redundant checks.
## Statische Sicht
## Static view
```plantuml
@startuml
@@ -31,20 +31,20 @@ package "Safety Manager" {
[Hill-Hold Logic]
[Auto-Apply Logic]
}
[Safety Manager] ..> [Apply Controller] : Apply-Anforderung
[Safety Manager] ..> [Apply Controller] : apply request
[Wheel Speed Plausi] --> [Safety Manager] : v_vehicle
[Inclinometer Filter] --> [Safety Manager] : grade
@enduml
```
## Schnittstellen (Provided)
## Provided interfaces
```c
Status safety_mgr_init(void);
void safety_mgr_step_50ms(const SafetyInputs* in);
```
## Dynamisches Verhalten
## Dynamic behaviour
```plantuml
@startuml
@@ -58,16 +58,16 @@ AutoApplyTriggered --> Idle : applied
@enduml
```
## Ressourcen
## Resources
- Stack: <= 256 B
- Worst-Case Timing: 200 us / Aufruf
- Worst-case timing: 200 us per call
## Mapping auf Anforderungen
## Mapping to requirements
| Anforderung | Wie abgedeckt |
|-------------|---------------|
| Requirement | How covered |
|-------------|-------------|
| SWE-007 | engine_off + v<0.5 in step_50ms |
| SWE-008 | 2s-Filter und Trigger |
| SWE-009 | Hill-Hold-Aktivierung |
| SWE-010 | Brake-Released-Detektion |
| SWE-008 | 2 s filter and trigger |
| SWE-009 | hill-hold activation |
| SWE-010 | brake-released detection |
+22 -21
View File
@@ -16,12 +16,13 @@ asil: D
# SWA-002: Apply Controller
## Verantwortung
## Responsibility
Zentraler Controller fuer Apply, Hold und Release der Parkbremse.
ASIL-D-Kern der EPB-Software. Implementiert in `src/apply_controller.c`.
Central controller for apply, hold and release of the parking brake.
ASIL-D core of the EPB software. Implemented in
`src/apply_controller.c`.
## Statische Sicht
## Static view
```plantuml
@startuml
@@ -34,7 +35,7 @@ ASIL-D-Kern der EPB-Software. Implementiert in `src/apply_controller.c`.
@enduml
```
## Schnittstellen (Provided)
## Provided interfaces
```c
Status apply_ctrl_init(void);
@@ -42,7 +43,7 @@ void apply_ctrl_step_50ms(const ApplyInputs* in);
EpbStatus apply_ctrl_get_status(void);
```
## Dynamisches Verhalten
## Dynamic behaviour
```plantuml
@startuml
@@ -58,24 +59,24 @@ Error --> Released : reset & no fault
@enduml
```
## Ressourcen
## Resources
- Stack: <= 384 B
- Worst-Case Timing: 350 us / Aufruf
- Worst-case timing: 350 us per call
## Designentscheidungen
## Design decisions
| Entscheidung | Begruendung |
|--------------|-------------|
| Statische Allokation, kein Heap | Determinismus, MISRA C 21.3 |
| State Machine | Einfacher zu verifizieren, deterministisch |
| 50ms Step-Funktion | Synchron zur Inclinometer-Abtastung |
| Decision | Rationale |
|----------|-----------|
| Static allocation, no heap | Determinism, MISRA C 21.3 |
| State machine | Easier to verify, deterministic |
| 50 ms step function | Synchronous with inclinometer sample rate |
## Mapping auf Anforderungen
## Mapping to requirements
| Anforderung | Wie abgedeckt |
|-------------|---------------|
| SWE-001 | Hold-Zustand mit periodischer Klemmkraft-Pruefung |
| SWE-002 | Watchdog-Pet im step_50ms |
| SWE-003 | sw_apply Input wird sofort ausgewertet |
| SWE-004 | Current-Target-Detektion via Actuator-Driver-Feedback |
| Requirement | How covered |
|-------------|-------------|
| SWE-001 | Hold state with periodic clamping-force check |
| SWE-002 | Watchdog pet in step_50ms |
| SWE-003 | sw_apply input is evaluated immediately |
| SWE-004 | current-target detection via actuator-driver feedback |
+16 -16
View File
@@ -15,13 +15,13 @@ asil: B
# SWA-003: Actuator Driver
## Verantwortung
## Responsibility
Low-Level-Ansteuerung der beiden Aktor-Motoren. PWM-Generierung,
Strom-Messung, Overcurrent-Cutoff, Klemmkraft-Schaetzung.
Implementiert in `src/actuator_driver.c`.
Low-level control of the two actuator motors. PWM generation,
current measurement, overcurrent cutoff, clamping-force estimation.
Implemented in `src/actuator_driver.c`.
## Statische Sicht
## Static view
```plantuml
@startuml
@@ -32,7 +32,7 @@ Implementiert in `src/actuator_driver.c`.
@enduml
```
## Schnittstellen (Provided)
## Provided interfaces
```c
Status actuator_init(void);
@@ -40,20 +40,20 @@ void actuator_apply(ActuatorId id, uint8_t pwm_percent);
void actuator_release(ActuatorId id, uint8_t pwm_percent);
void actuator_stop(ActuatorId id);
ActuatorStatus actuator_get_status(ActuatorId id);
void actuator_isr_1khz(void); // Strom-Sampling
void actuator_isr_1khz(void); // Current sampling
```
## Ressourcen
## Resources
- Stack: <= 256 B
- Worst-Case Timing: 50 us / ISR
- Static RAM: 64 B pro Aktor
- Worst-case timing: 50 us per ISR
- Static RAM: 64 B per actuator
## Mapping auf Anforderungen
## Mapping to requirements
| Anforderung | Wie abgedeckt |
|-------------|---------------|
| SWE-006 | actuator_release fuer beide Aktoren parallel |
| Requirement | How covered |
|-------------|-------------|
| SWE-006 | actuator_release for both actuators in parallel |
| SWE-013 | actuator_isr_1khz |
| SWE-014 | Overcurrent-Detektor in ISR |
| SWE-015 | Peak-Current-Tracking + lineare Klemmkraft-Schaetzung |
| SWE-014 | overcurrent detector in ISR |
| SWE-015 | peak-current tracking + linear clamping-force estimate |
+6 -6
View File
@@ -1,7 +1,7 @@
---
active: true
derived: false
header: 'Wheel Speed Plausibilisierung'
header: 'Wheel Speed Plausibilisation'
level: 1.4
normative: true
reviewed: null
@@ -11,14 +11,14 @@ links:
asil: B
---
# SWA-004: Wheel Speed Plausibilisierung
# SWA-004: Wheel Speed Plausibilisation
## Verantwortung
## Responsibility
Aufbereitung und Plausibilisierung der 4 Wheel-Speed-Signale. Erkennt
Stillstand und plausibilisiert untereinander.
Conditioning and plausibilisation of the four wheel-speed signals.
Detects standstill and cross-checks the wheels.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status wheel_speed_init(void);
+4 -3
View File
@@ -12,11 +12,12 @@ asil: B
# SWA-005: Inclinometer Filter
## Verantwortung
## Responsibility
Tiefpass-Filterung des Inclinometer-Roh-Signals fuer die Hill-Hold-Bewertung.
Low-pass filtering of the raw inclinometer signal for hill-hold
evaluation.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status inclino_init(void);
+9 -8
View File
@@ -12,12 +12,13 @@ asil: QM
# SWA-006: Switch Debouncer
## Verantwortung
## Responsibility
Software-Entprellung des EPB-Schalters. Liefert stabiles Apply / Release
Signal an den Apply-Controller. Implementiert in `src/switch_debouncer.c`.
Software debouncing of the EPB switch. Provides a stable apply /
release signal to the apply controller. Implemented in
`src/switch_debouncer.c`.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status switch_init(void);
@@ -25,8 +26,8 @@ void switch_step_10ms(SwitchRaw raw);
SwitchState switch_get_state(void);
```
## Mapping auf Anforderungen
## Mapping to requirements
| Anforderung | Wie abgedeckt |
|-------------|---------------|
| SWE-025 | 50ms Debounce-Logik |
| Requirement | How covered |
|-------------|-------------|
| SWE-025 | 50 ms debounce logic |
+5 -5
View File
@@ -13,15 +13,15 @@ asil: QM
# SWA-007: Display Manager
## Verantwortung
## Responsibility
Steuert LED am EPB-Schalter und CAN-Status-Frame an das Kombi-Display.
Empfaengt Status vom Apply-Controller.
Drives the LED on the EPB switch and the CAN status frame to the
instrument cluster. Receives status from the apply controller.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status display_init(void);
void display_set_status(EpbStatus s);
void display_step_20ms(void); // 50 Hz CAN-Frame
void display_step_20ms(void); // 50 Hz CAN frame
```
+4 -3
View File
@@ -13,11 +13,12 @@ asil: QM
# SWA-008: Diagnostic Manager
## Verantwortung
## Responsibility
UDS-Diagnose nach ISO 14229: ReadDTC, ReadDataByIdentifier, RoutineControl.
UDS diagnostics per ISO 14229: ReadDTC, ReadDataByIdentifier,
RoutineControl.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status diag_init(void);
+4 -3
View File
@@ -13,7 +13,8 @@ asil: QM
# SWA-009: Service Mode
## Verantwortung
## Responsibility
Service-Modus fuer Werkstatt. Wird ueber UDS RoutineControl 0x31, Routine-ID
0x0301 aktiviert. Steuert Aktoren in Wartungsposition.
Service mode for the workshop. Activated via UDS RoutineControl
0x31, routine ID 0x0301. Drives the actuators into maintenance
position.
+4 -4
View File
@@ -13,12 +13,12 @@ asil: QM
# SWA-010: Logger
## Verantwortung
## Responsibility
Logging fuer Entwicklung und Service. Ringpuffer im RAM (1 KB) sowie
Persistenz im EEPROM bei kritischen Ereignissen.
Logging for development and service. Ring buffer in RAM (1 KB)
plus persistence in EEPROM on critical events.
## Schnittstellen (Provided)
## Provided interfaces
```c
Status log_init(void);
+30 -30
View File
@@ -21,28 +21,28 @@ asil: D
# SA-001: EPB ECU
## Verantwortung
## Responsibility
Zentrales Steuergeraet der elektrischen Parkbremse. Beinhaltet alle Software-
Komponenten und die elektronische Ansteuerung der Aktoren.
Central control unit of the electric parking brake. Contains all
software components and the electronic actuation of the actuators.
## System-Kontext
## System context
```plantuml
@startuml
node "EPB ECU" as ECU
node "Aktor links" as AL
node "Aktor rechts" as AR
node "Wheel Speed Sensoren (x4)" as WS
node "Actuator left" as AL
node "Actuator right" as AR
node "Wheel-speed sensors (x4)" as WS
node "Inclinometer" as IN
node "EPB-Schalter + LED" as SW
node "CAN-Bus" as CAN
node "Kombi-Display" as DI
node "OBD-Tester" as OBD
node "EPB switch + LED" as SW
node "CAN bus" as CAN
node "Instrument cluster" as DI
node "OBD tester" as OBD
ECU --> AL : PWM, I-Mess
ECU --> AR : PWM, I-Mess
WS --> ECU : Pulse
ECU --> AL : PWM, I-meas
ECU --> AR : PWM, I-meas
WS --> ECU : pulses
IN --> ECU : SPI
SW --> ECU : GPIO
ECU --> SW : LED
@@ -52,24 +52,24 @@ CAN <-> OBD
@enduml
```
## Schnittstellen
## Interfaces
| Schnittstelle | Typ | Richtung |
|---------------|----------------|----------|
| Aktor L/R | PWM + Shunt | I/O |
| Wheel Speed | Hall-Pulse | In |
| Inclinometer | SPI | In |
| Schalter | GPIO debounced | In |
| LED | GPIO | Out |
| CAN | ISO 11898 | I/O |
| Interface | Type | Direction |
|---------------|------------------|-----------|
| Actuator L/R | PWM + shunt | I/O |
| Wheel speed | Hall pulses | in |
| Inclinometer | SPI | in |
| Switch | GPIO debounced | in |
| LED | GPIO | out |
| CAN | ISO 11898 | I/O |
## Subkomponenten (Aufteilung auf SW)
## Subcomponents (allocated to software)
Realisiert in Software: alle SWA-Elemente SWA-001..SWA-010.
Realised in software: all SWA elements SWA-001..SWA-010.
## Nichtfunktionale Eigenschaften
## Non-functional properties
- Worst-Case Reaktionszeit (Schalter → Aktor-Bewegung): 250 ms
- Flash-Bedarf: < 256 KB
- RAM-Bedarf: < 32 KB
- Stromaufnahme: < 200 mA (Standby) / < 30 A (Aktor-Spitze)
- Worst-case reaction time (switch to actuator motion): 250 ms
- Flash demand: < 256 KB
- RAM demand: < 32 KB
- Current: < 200 mA (standby) / < 30 A (actuator peak)
+17 -17
View File
@@ -1,7 +1,7 @@
---
active: true
derived: false
header: 'Aktoren (Caliper-Motoren)'
header: 'Actuators (calliper motors)'
level: 1.2
normative: true
reviewed: null
@@ -13,25 +13,25 @@ links:
asil: D
---
# SA-002: Aktoren (Caliper-Motoren)
# SA-002: Actuators (calliper motors)
## Verantwortung
## Responsibility
Zwei elektromechanische Aktoren an den hinteren Bremssaetteln klemmen
und loesen die Bremsbelaege. Geliefert (Annahme): kommerzielles Bauteil
eines Tier-1-Lieferanten.
Two electromechanical actuators on the rear callipers clamp and
release the brake pads. Supplied (assumption): commercial component
from a Tier-1 supplier.
## Schnittstellen
## Interfaces
| Schnittstelle | Typ | Bemerkung |
|---------------|--------------|-----------------------------------|
| Power | 12 V, PWM | bidirektional fuer Apply/Release |
| Strom-Shunt | Analog | wird in der ECU abgegriffen |
| Interface | Type | Notes |
|---------------|--------------|---------------------------------|
| Power | 12 V, PWM | bidirectional for apply/release |
| Current shunt | analog | sampled inside the ECU |
## Nichtfunktionale Eigenschaften
## Non-functional properties
- Max. Klemmkraft: 20 kN
- Apply-Zeit (0 → max): 600 ms
- Strom (nominal): 4 A
- Strom (Spitze): 30 A (kurzzeitig)
- Temperaturbereich: -40°C bis +85°C
- Max clamping force: 20 kN
- Apply time (0 → max): 600 ms
- Nominal current: 4 A
- Peak current: 30 A (brief)
- Temperature range: -40 °C to +85 °C
+19 -19
View File
@@ -1,7 +1,7 @@
---
active: true
derived: false
header: 'Sensor-Cluster'
header: 'Sensor cluster'
level: 1.3
normative: true
reviewed: null
@@ -12,27 +12,27 @@ links:
asil: B
---
# SA-003: Sensor-Cluster
# SA-003: Sensor cluster
## Verantwortung
## Responsibility
Zusammenfassung aller fuer die EPB benoetigten Eingangssignale:
Wheel-Speed-Sensoren (4x), Inclinometer (1x), EPB-Schalter, Bremspedal-
Status, Gear-Position, Door-Open, Seat-Belt — die letzten vier per CAN.
Summary of all input signals required by the EPB: wheel-speed
sensors (4x), inclinometer (1x), EPB switch, brake-pedal status,
gear position, door open, seatbelt — the last four via CAN.
## Schnittstellen
## Interfaces
| Sensor | Typ | Quelle |
|-----------------|------------------|--------------|
| Wheel Speed x4 | Hall-Pulse | direkt |
| Inclinometer | SPI 1 kHz | direkt |
| EPB-Schalter | GPIO | direkt |
| Bremspedal | CAN 0x100 | aus BCM |
| Gear | CAN 0x110 | aus TCU |
| Door / Belt | CAN 0x120 | aus BCM |
| Sensor | Type | Source |
|-----------------|--------------|------------|
| Wheel speed x4 | Hall pulses | direct |
| Inclinometer | SPI 1 kHz | direct |
| EPB switch | GPIO | direct |
| Brake pedal | CAN 0x100 | from BCM |
| Gear | CAN 0x110 | from TCU |
| Door / belt | CAN 0x120 | from BCM |
## Nichtfunktionale Eigenschaften
## Non-functional properties
- Wheel-Speed-Genauigkeit: +/- 0.1 km/h ab 1 km/h
- Inclinometer-Genauigkeit: +/- 0.5°
- Sampling-Frequenz Inclinometer: 100 Hz
- Wheel-speed accuracy: +/- 0.1 km/h above 1 km/h
- Inclinometer accuracy: +/- 0.5°
- Inclinometer sampling rate: 100 Hz
+11 -11
View File
@@ -1,7 +1,7 @@
---
active: true
derived: false
header: 'HMI (Schalter, LED, Display)'
header: 'HMI (switch, LED, display)'
level: 1.4
normative: true
reviewed: null
@@ -11,17 +11,17 @@ links:
asil: QM
---
# SA-004: HMI (Schalter, LED, Display)
# SA-004: HMI (switch, LED, display)
## Verantwortung
## Responsibility
Fahrer-Interaktion und -Information: Tippschalter mit integrierter LED,
Statusanzeige im Kombi-Display via CAN.
Driver interaction and information: tap switch with integrated LED,
status display in the instrument cluster via CAN.
## Schnittstellen
## Interfaces
| Element | Typ | Verhalten |
|---------------|----------|--------------------------------------------|
| Tippschalter | GPIO | Apply-Richtung / Release-Richtung |
| LED | GPIO | aus / an / blink 2 Hz / blink 4 Hz |
| Display | CAN 0x3A0 | 50 Hz Status-Frame |
| Element | Type | Behaviour |
|---------------|----------|-------------------------------------------|
| Tap switch | GPIO | apply direction / release direction |
| LED | GPIO | off / on / blink 2 Hz / blink 4 Hz |
| Display | CAN 0x3A0| 50 Hz status frame |
+11 -10
View File
@@ -1,7 +1,7 @@
---
active: true
derived: false
header: 'CAN-Bus'
header: 'CAN bus'
level: 1.5
normative: true
reviewed: null
@@ -11,16 +11,17 @@ links:
asil: QM
---
# SA-005: CAN-Bus
# SA-005: CAN bus
## Verantwortung
## Responsibility
Kommunikations-Backbone fuer Eingangsdaten (Bremspedal, Gang, Tuer, Gurt),
Ausgabe (Status-Frame an Display) und Diagnose (UDS auf Tester-Adresse).
Communication backbone for input data (brake pedal, gear, door,
belt), output (status frame to the display) and diagnostics (UDS
on the tester address).
## Schnittstellen
## Interfaces
- Baudrate: 500 kbit/s, CAN 2.0B
- Empfangene Frames: 0x100 (Bremspedal), 0x110 (Gang), 0x120 (Door/Belt),
0x712 (UDS-Request)
- Gesendete Frames: 0x3A0 (Status 50 Hz), 0x71A (UDS-Response)
- Baud rate: 500 kbit/s, CAN 2.0B
- Received frames: 0x100 (brake pedal), 0x110 (gear),
0x120 (door/belt), 0x712 (UDS request)
- Sent frames: 0x3A0 (status 50 Hz), 0x71A (UDS response)