export interface BMSBasicInfo { packVoltage: number; // Volts current: number; // Amps remainingCapacity: number; // Ah fullCapacity: number; // Ah cycleCount: number; productionDate: string; balanceStatus: number; // Bitfield protectionStatus: ProtectionStatus; version: number; rsoc: number; // % mosfetStatus: { charge: boolean; discharge: boolean; }; ntcCount: number; ntcTemps: number[]; // Celsius } export interface BMSCellInfo { voltages: number[]; // Volts } // C# JbdDevice.cs의 레지스터 목록과 1:1 매칭되도록 확장 export interface BMSConfig { // --- Basic Protection --- cellOvp: number; // 0x24 (mV) cellOvpRel: number; // 0x25 (mV) cellUvp: number; // 0x26 (mV) cellUvpRel: number; // 0x27 (mV) packOvp: number; // 0x20 (10mV) packOvpRel: number; // 0x21 (10mV) packUvp: number; // 0x22 (10mV) packUvpRel: number; // 0x23 (10mV) // Temperatures (Basic) chgOt: number; // 0x18 chgOtRel: number; // 0x19 chgUt: number; // 0x1A chgUtRel: number; // 0x1B dsgOt: number; // 0x1C dsgOtRel: number; // 0x1D dsgUt: number; // 0x1E (C# mapping check needed, using std logic) dsgUtRel: number; // 0x1F // Over Current chgOc: number; // 0x?? Depends on mapping, typically extended dsgOc: number; // --- Delays (2 bytes split) --- // Format: [Delay1 (s/ms), Delay2 (s/ms)] cellVDelays: { cuvp: number; covp: number }; // 0x3D packVDelays: { puvp: number; povp: number }; // 0x3C chgTDelays: { chgut: number; chgot: number }; // 0x3A dsgTDelays: { dsgut: number; dsgot: number }; // 0x3B chgOcDelays: { delay: number; release: number }; // 0x3E dsgOcDelays: { delay: number; release: number }; // 0x3F // --- High Protection --- covpHigh: number; // 0x36 cuvpHigh: number; // 0x37 // --- Function Config (Bitfield 0x2D) --- funcConfig: number; // Raw uint16 value // --- NTC Config (Bitfield 0x2E) --- ntcConfig: number; // Raw uint16 value // --- Balance --- balStart: number; // 0x2A (mV) balWindow: number; // 0x2B (mV) // --- Capacity & Misc --- designCapacity: number; // 0x10 (10mAh) cycleCapacity: number; // 0x11 (10mAh) dsgRate: number; // 0x14 (%) cap100: number; // 0x12 cap80: number; // 0x32 cap60: number; // 0x33 cap40: number; // 0x34 cap20: number; // 0x35 cap0: number; // 0x13 fetCtrl: number; // 0x30 (s) ledTimer: number; // 0x31 (s) // --- Hardware / Misc --- shuntRes: number; // 0x2C (mOhm) cellCnt: number; // 0x2F cycleCnt: number; // 0x17 serialNum: number; // 0x16 // --- Strings --- mfgName: string; // 0xA0 deviceName: string; // 0xA1 barcode: string; // 0xA2 // --- Date --- mfgDate: number; // 0x15 (Raw uint16 encoded) } export interface ProtectionStatus { covp: boolean; // Cell Over Voltage Protection cuvp: boolean; // Cell Under Voltage Protection povp: boolean; // Pack Over Voltage Protection puvp: boolean; // Pack Under Voltage Protection chgot: boolean; // Charge Over Temp chgut: boolean; // Charge Under Temp dsgot: boolean; // Discharge Over Temp dsgut: boolean; // Discharge Under Temp chgoc: boolean; // Charge Over Current dsgoc: boolean; // Discharge Over Current sc: boolean; // Short Circuit afe: boolean; // AFE Error } export enum ConnectionState { DISCONNECTED = 'DISCONNECTED', CONNECTING = 'CONNECTING', CONNECTED = 'CONNECTED', ERROR = 'ERROR', } export interface SerialOptions { baudRate: number; dataBits: number; stopBits: number; parity: ParityType; } export type ParityType = 'none' | 'even' | 'odd';