alro65
|
e82dbc449c
|
sprint-6: Alarm engine + safety monitor + NMEA 2000 publisher
Python side:
- alarm_engine.py: AlarmEngine evaluates 9 firmware alarm bits + PC-side
heading staleness and off-course logic with severe-timer; on_disengage
callback triggers on first EMERGENCY alarm; acknowledge/clear API
- test_alarm_engine.py: 25 tests covering fire/clear cycle, acknowledge,
highest_severity, auto-disengage callback, heading staleness, off-course
with wraparound and timer, fw-bit suppression of duplicate PC alarm
Firmware:
- safety_monitor.h: exposes AlarmBits struct + safety_alarm_bits() API
- safety_monitor.cpp: 50 Hz task evaluates off-course (with severe timer),
rudder-not-responding (3 s timeout), heading lost, VMS/DI4, limit switches,
battery voltage, actuator current; buzzer on any alarm; EMERGENCY → force_standby
- modbus_slave.cpp: wires 9 discrete alarm registers to safety_alarm_bits();
battery voltage and actuator current ADC registers now live
- nmea2000_publisher.h/cpp: new task, PGN 127245 rudder angle at 10 Hz,
PGN 127237 Heading/Track Control at 1 Hz
- main.cpp: start nmea2000_publisher; set watchdog-tripped flag on ESP_RST_TASK_WDT
Tests: 309 passed | Flash: 27.6%
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-20 00:16:24 -04:00 |
|