forked from achamaikin/CCSModuleSW30Web
fb766dfa66
Latch fire alarm until reboot, block recovery commands, and send periodic Everest ESTOP while active. Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
1.7 KiB
C
75 lines
1.7 KiB
C
#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);
|
|
}
|
|
}
|