c610cc023c
Validate / build-test (macos-latest) (push) Failing after 4s
Validate / build-test (windows-latest) (push) Failing after 17s
Validate / build-test (ubuntu-latest) (push) Successful in 16s
Validate / reports (push) Has been skipped
Release / release (push) Successful in 48s
Neue Layer: - safety/sg/SG-001..005 als eigene Doorstop-Items (ASIL D/D/A/C/B) - SYS-Reqs verlinken nach oben auf SG via frontmatter - Kette ist jetzt: SG -> SYS -> SA, SWE -> SWA -> Code (@arch) + Test (@reqs) Drive-Away-Assist im Safety Manager: - SWE-011 (Anfahrabsicht erkennen) implementiert - SWE-012 (Sicherheits-Check Tuer + Gurt) implementiert - Neuer State SAFETY_DRIVE_AWAY + safety_mgr_release_requested() - SafetyInputs erweitert um gas_pedal_percent, gear_in_drive, door_closed, seatbelt_fastened - 5 neue Tests (DRIVE_AWAY armed/blocked/end-conditions) - Test-Header @reqs erweitert auf SWE-007..012 traceability.py erweitert: - SG als neuer Top-Level - Code-Mapping-Check: @arch im Header von src/*.c muss SWA-id matchen - Test-Mapping-Check: @reqs im Header der Tests muss alle SWE der zugehoerigen SWA abdecken - HTML zeigt 7 Spalten: SG | SYS | SA | SWE | SWA | Code | Test - 2 zusaetzliche Tabellen: Code->Arch und Test->Reqs test_apply_controller.c: - @reqs Header um SWE-005 ergaenzt (war funktional drin, nur Tag fehlte) Counts: - 55 doorstop-Items (war 50) - 46 Unit-Tests (war 41) - Traceability vollstaendig in beide Richtungen
63 lines
2.1 KiB
C
63 lines
2.1 KiB
C
/**
|
|
* @file safety_manager.h
|
|
* @brief Safety Manager — Hill-Hold, Auto-Apply, Drive-Away-Assist.
|
|
*
|
|
* @arch SWA-001
|
|
* @reqs SWE-007 SWE-008 SWE-009 SWE-010 SWE-011 SWE-012
|
|
*
|
|
* ASIL: D.
|
|
*
|
|
* State Machine:
|
|
* IDLE --(engine_off & v<0.5 & !APPLIED)--> AUTO_APPLY_ARMED
|
|
* AUTO_APPLY_ARMED --(40 * 50ms = 2s)--> AUTO_APPLY_TRIGGERED
|
|
* AUTO_APPLY_TRIGGERED --(state==APPLIED)--> IDLE
|
|
*
|
|
* IDLE --(grade>5% & v<0.5 & brake)--> HILL_HOLD_ARMED
|
|
* HILL_HOLD_ARMED --(!brake)--> HILL_HOLD_ACTIVE
|
|
* HILL_HOLD_ACTIVE --(v>2 km/h | state==APPLIED)--> IDLE
|
|
*
|
|
* IDLE --(APPLIED & gas>10% & gear_drive & engine & door & belt)--> DRIVE_AWAY
|
|
* DRIVE_AWAY --(state==RELEASED|RELEASING)--> IDLE
|
|
*/
|
|
#ifndef SAFETY_MANAGER_H
|
|
#define SAFETY_MANAGER_H
|
|
|
|
#include "epb_types.h"
|
|
|
|
typedef enum {
|
|
SAFETY_IDLE = 0,
|
|
SAFETY_HILL_HOLD_ARMED = 1,
|
|
SAFETY_HILL_HOLD_ACTIVE = 2,
|
|
SAFETY_AUTO_APPLY_ARMED = 3,
|
|
SAFETY_AUTO_APPLY_TRIGGERED = 4,
|
|
SAFETY_DRIVE_AWAY = 5
|
|
} SafetyState;
|
|
|
|
typedef struct {
|
|
bool engine_running;
|
|
bool brake_pedal_pressed;
|
|
float vehicle_speed_kmh;
|
|
float grade_percent;
|
|
EpbState current_state; /* aus Apply Controller */
|
|
/* Drive-Away-Assist Inputs (SWE-011, SWE-012) */
|
|
float gas_pedal_percent; /* 0..100 */
|
|
bool gear_in_drive; /* Vorwaerts oder Rueckwaerts */
|
|
bool door_closed; /* Fahrertuer */
|
|
bool seatbelt_fastened; /* Fahrer-Gurt */
|
|
} SafetyInputs;
|
|
|
|
/* Schwellwerte als Konstanten, damit Tests darauf zugreifen koennen. */
|
|
#define SAFETY_AUTO_APPLY_DELAY_50MS 40U /* 40 * 50ms = 2.0 s */
|
|
#define SAFETY_STANDSTILL_KMH 0.5f
|
|
#define SAFETY_RELEASE_KMH 2.0f
|
|
#define SAFETY_HILLHOLD_GRADE_PCT 5.0f
|
|
#define SAFETY_DRIVE_INTENT_GAS_PCT 10.0f /* Gaspedal > 10% = Anfahrabsicht */
|
|
|
|
EpbStatus safety_mgr_init(void);
|
|
void safety_mgr_step_50ms(const SafetyInputs* in);
|
|
bool safety_mgr_apply_requested(void);
|
|
bool safety_mgr_release_requested(void); /* Drive-Away-Assist */
|
|
SafetyState safety_mgr_get_state(void);
|
|
|
|
#endif /* SAFETY_MANAGER_H */
|