diff --git a/firmware/esp32/overland-controller/bms.cpp b/firmware/esp32/overland-controller/bms.cpp index 86fdda1..bc76d6c 100644 --- a/firmware/esp32/overland-controller/bms.cpp +++ b/firmware/esp32/overland-controller/bms.cpp @@ -511,58 +511,31 @@ void initBms() { } void updateBms() { - if (!appConfig.bms.enabled || appConfig.bms.address.length() == 0) { - bmsData.connected = false; + if (bmsSetupMode) { return; } - unsigned long now = millis(); - - if (!client || !client->isConnected()) { - bmsData.connected = false; - - if (now - lastBmsAttemptMs < bmsRetryIntervalMs) { - return; - } - - lastBmsAttemptMs = now; - - if (!connectBms()) { - consecutiveBmsFailures++; - - if (consecutiveBmsFailures >= 3) { - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS; - } else { - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS; - } - - return; - } - - consecutiveBmsFailures = 0; - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS; - } - - if (!requestBmsData()) { - bmsData.connected = false; - consecutiveBmsFailures++; - - if (client) { - client->disconnect(); - } - - if (consecutiveBmsFailures >= 3) { - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS; - } else { - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS; - } - - lastBmsAttemptMs = now; + if ((long)(bmsReconnectPausedUntil - millis()) > 0) { return; } - consecutiveBmsFailures = 0; - bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS; - bmsData.connected = true; + if (millis() - lastReadAttempt < READ_INTERVAL_MS) { + return; + } + + lastReadAttempt = millis(); + + if (!connectBms()) { + return; + } + + if (requestPacket(JBD_STATUS_REQUEST, sizeof(JBD_STATUS_REQUEST))) { + parseBasicInfo(); + } + + delay(100); + + if (requestPacket(JBD_CELL_REQUEST, sizeof(JBD_CELL_REQUEST))) { + parseCellVoltages(); + } } -