export interface AMSMessage { type: 'error' | 'status' | 'shunt' | 'slaveStatus' | 'slaveLog'; } export interface AMSError extends AMSMessage { type: 'error'; kind: number; arg: number; } export enum AMSState { TS_INACTIVE = 0, TS_ACTIVE = 1, TS_PRECHARGE = 2, TS_DISCHARGE = 3, TS_ERROR = 4 } export interface AMSStatus extends AMSMessage { type: 'status'; state: AMSState; sdcClosed: boolean; soc: number; minCellVolt: number; maxCellTemp: number; imdOK: boolean; // TODO: IMD state & R_iso } export interface Shunt extends AMSMessage { type: 'shunt'; logType: 'current' | 'voltage1' | 'voltage2'; } export interface ShuntCurrent extends Shunt { logType: 'current'; current: number; } export interface ShuntVoltage1 extends Shunt { logType: 'voltage1'; voltage: number; } export interface ShuntVoltage2 extends Shunt { logType: 'voltage2'; voltage: number; } export interface SlaveStatus extends AMSMessage { type: 'slaveStatus'; slaveId: number; error: boolean; minCellVolt: number; maxCellVolt: number; maxTemp: number; soc: number; } export interface SlaveLog extends AMSMessage { type: 'slaveLog'; slaveId: number; logType: 'voltage' | 'lastCell' | 'temperature'; } export interface SlaveLogVoltage extends SlaveLog { logType: 'voltage'; startIndex: number; voltages: [number, number, number, number]; } export interface SlaveLogLastCell extends SlaveLog { logType: 'lastCell'; voltage: number; failed_temp_sensors: number; } export interface SlaveLogTemperature extends SlaveLog { logType: 'temperature'; startIndex: number; temperatures: [number, number, number, number, number, number, number, number]; }