diff --git a/Software/src/battery/BATTERIES.cpp b/Software/src/battery/BATTERIES.cpp index a444ed1a..1c954d13 100644 --- a/Software/src/battery/BATTERIES.cpp +++ b/Software/src/battery/BATTERIES.cpp @@ -296,6 +296,8 @@ bool user_selected_tesla_GTW_rightHandDrive = true; uint16_t user_selected_tesla_GTW_mapRegion = 2; uint16_t user_selected_tesla_GTW_chassisType = 2; uint16_t user_selected_tesla_GTW_packEnergy = 1; +/* User-selected EGMP+others settings */ +bool user_selected_use_estimated_SOC = false; // Use 0V for user selected cell/pack voltage defaults (On boot will be replaced with saved values from NVM) uint16_t user_selected_max_pack_voltage_dV = 0; diff --git a/Software/src/battery/BATTERIES.h b/Software/src/battery/BATTERIES.h index 0324c189..cb24124e 100644 --- a/Software/src/battery/BATTERIES.h +++ b/Software/src/battery/BATTERIES.h @@ -62,7 +62,7 @@ extern uint16_t user_selected_max_pack_voltage_dV; extern uint16_t user_selected_min_pack_voltage_dV; extern uint16_t user_selected_max_cell_voltage_mV; extern uint16_t user_selected_min_cell_voltage_mV; - +extern bool user_selected_use_estimated_SOC; extern bool user_selected_LEAF_interlock_mandatory; extern bool user_selected_tesla_digital_HVIL; extern uint16_t user_selected_tesla_GTW_country; diff --git a/Software/src/battery/KIA-E-GMP-BATTERY.cpp b/Software/src/battery/KIA-E-GMP-BATTERY.cpp index 20f3cd8e..664d4867 100644 --- a/Software/src/battery/KIA-E-GMP-BATTERY.cpp +++ b/Software/src/battery/KIA-E-GMP-BATTERY.cpp @@ -114,16 +114,17 @@ uint8_t KiaEGmpBattery::calculateCRC(CAN_frame rx_frame, uint8_t length, uint8_t void KiaEGmpBattery::update_values() { -#ifdef ESTIMATE_SOC_FROM_CELLVOLTAGE - // Use the simplified pack-based SOC estimation with proper compensation - datalayer.battery.status.real_soc = estimateSOC(batteryVoltage, datalayer.battery.info.number_of_cells, batteryAmps); + if (user_selected_use_estimated_SOC) { + // Use the simplified pack-based SOC estimation with proper compensation + datalayer.battery.status.real_soc = + estimateSOC(batteryVoltage, datalayer.battery.info.number_of_cells, batteryAmps); - // For comparison or fallback, we can still calculate from min/max cell voltages - SOC_estimated_lowest = estimateSOCFromCell(CellVoltMin_mV); - SOC_estimated_highest = estimateSOCFromCell(CellVoltMax_mV); -#else - datalayer.battery.status.real_soc = (SOC_Display * 10); //increase SOC range from 0-100.0 -> 100.00 -#endif + // For comparison or fallback, we can still calculate from min/max cell voltages + SOC_estimated_lowest = estimateSOCFromCell(CellVoltMin_mV); + SOC_estimated_highest = estimateSOCFromCell(CellVoltMax_mV); + } else { + datalayer.battery.status.real_soc = (SOC_Display * 10); //increase SOC range from 0-100.0 -> 100.00 + } datalayer.battery.status.soh_pptt = (batterySOH * 10); //Increase decimals from 100.0% -> 100.00% diff --git a/Software/src/battery/KIA-E-GMP-BATTERY.h b/Software/src/battery/KIA-E-GMP-BATTERY.h index dfd0237c..f28b8529 100644 --- a/Software/src/battery/KIA-E-GMP-BATTERY.h +++ b/Software/src/battery/KIA-E-GMP-BATTERY.h @@ -3,7 +3,7 @@ #include "CanBattery.h" #include "KIA-E-GMP-HTML.h" -#define ESTIMATE_SOC_FROM_CELLVOLTAGE +extern bool user_selected_use_estimated_SOC; class KiaEGmpBattery : public CanBattery { public: diff --git a/Software/src/communication/nvm/comm_nvm.cpp b/Software/src/communication/nvm/comm_nvm.cpp index 58eba5c9..315c9fcc 100644 --- a/Software/src/communication/nvm/comm_nvm.cpp +++ b/Software/src/communication/nvm/comm_nvm.cpp @@ -104,6 +104,7 @@ void init_stored_settings() { user_selected_can_addon_crystal_frequency_mhz = settings.getUInt("CANFREQ", 8); user_selected_canfd_addon_crystal_frequency_mhz = settings.getUInt("CANFDFREQ", 40); user_selected_LEAF_interlock_mandatory = settings.getBool("INTERLOCKREQ", false); + user_selected_use_estimated_SOC = settings.getBool("SOCESTIMATED", false); user_selected_tesla_digital_HVIL = settings.getBool("DIGITALHVIL", false); user_selected_tesla_GTW_country = settings.getUInt("GTWCOUNTRY", 0); user_selected_tesla_GTW_rightHandDrive = settings.getBool("GTWRHD", false); diff --git a/Software/src/devboard/webserver/settings_html.cpp b/Software/src/devboard/webserver/settings_html.cpp index 6c91561c..8184bea4 100644 --- a/Software/src/devboard/webserver/settings_html.cpp +++ b/Software/src/devboard/webserver/settings_html.cpp @@ -251,6 +251,10 @@ String settings_processor(const String& var, BatteryEmulatorSettingsStore& setti return settings.getBool("DBLBTR") ? "checked" : ""; } + if (var == "SOCESTIMATED") { + return settings.getBool("SOCESTIMATED") ? "checked" : ""; + } + if (var == "CNTCTRL") { return settings.getBool("CNTCTRL") ? "checked" : ""; } @@ -912,6 +916,11 @@ const char* getCANInterfaceName(CAN_Interface interface) { display: contents; } + form .if-socestimated { display: none; } /* Integrations where you can turn on SOC estimation */ + form[data-battery="16"] .if-socestimated { + display: contents; + } + form .if-dblbtr { display: none; } form[data-dblbtr="true"] .if-dblbtr { display: contents; @@ -1022,6 +1031,11 @@ const char* getCANInterfaceName(CAN_Interface interface) { +
+ + +
+