forked from achamaikin/CCSModuleSW30Web
Add fire alarm handling for DC30 CCS main controller.
Latch fire alarm until reboot, block recovery commands, and send periodic Everest ESTOP while active. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#include "fire_alarm.h"
|
||||
#include "serial_control.h"
|
||||
#include "charger_control.h"
|
||||
#include "connector.h"
|
||||
#include "serial.h"
|
||||
#include "cp.h"
|
||||
#include "debug.h"
|
||||
|
||||
static uint8_t fire_alarm_latched = 0;
|
||||
static uint32_t fire_alarm_last_estop_tick = 0;
|
||||
|
||||
extern CCS_ConnectorState_t CCS_ConnectorState;
|
||||
|
||||
uint8_t FireAlarm_IsLatched(void) {
|
||||
return fire_alarm_latched;
|
||||
}
|
||||
|
||||
uint8_t FireAlarm_IsBlockingCommand(uint8_t command_code) {
|
||||
if (!fire_alarm_latched) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (command_code) {
|
||||
case CMD_GET_STATUS:
|
||||
case CMD_GET_INFO:
|
||||
case CMD_GET_LOG:
|
||||
case CMD_DEVICE_RESET:
|
||||
return 0;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
void FireAlarm_Activate(void) {
|
||||
if (fire_alarm_latched) {
|
||||
return;
|
||||
}
|
||||
|
||||
fire_alarm_latched = 1;
|
||||
CONN.chargingError = CONN_ERR_FIRE_ALARM;
|
||||
CONN.connControl = CMD_STOP;
|
||||
CONN.EnableOutput = 0;
|
||||
|
||||
log_printf(LOG_ERR, "FIRE ALARM activated\n");
|
||||
|
||||
CCS_SendEmergencyStop();
|
||||
fire_alarm_last_estop_tick = HAL_GetTick();
|
||||
CP_SetDuty(100);
|
||||
CCS_ConnectorState = CCS_DISABLED;
|
||||
CONN_SetState(Disabled);
|
||||
}
|
||||
|
||||
void FireAlarm_Maintain(void) {
|
||||
if (!fire_alarm_latched) {
|
||||
return;
|
||||
}
|
||||
|
||||
CONN.chargingError = CONN_ERR_FIRE_ALARM;
|
||||
CONN.EnableOutput = 0;
|
||||
CP_SetDuty(100);
|
||||
|
||||
if ((int32_t)(HAL_GetTick() - fire_alarm_last_estop_tick) >= 1000) {
|
||||
CCS_SendEmergencyStop();
|
||||
fire_alarm_last_estop_tick = HAL_GetTick();
|
||||
}
|
||||
|
||||
if (CCS_ConnectorState != CCS_DISABLED && CCS_ConnectorState != CCS_UNKNOWN) {
|
||||
CCS_ConnectorState = CCS_DISABLED;
|
||||
}
|
||||
|
||||
if (CONN.connState != Disabled) {
|
||||
CONN_SetState(Disabled);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user