Make PHEV HTML array crash proof

This commit is contained in:
Daniel Öster 2025-06-10 13:07:22 +03:00
parent 4f96ed40dd
commit 289fa0d16e

View file

@ -17,198 +17,201 @@ class BmwPhevHtmlRenderer : public BatteryHtmlRenderer {
content += "<h4>Allowed Charge Power: " + String(datalayer.battery.status.max_charge_power_W) + " W</h4>"; content += "<h4>Allowed Charge Power: " + String(datalayer.battery.status.max_charge_power_W) + " W</h4>";
content += "<h4>Balancing: "; content += "<h4>Balancing: ";
switch (datalayer_extended.bmwphev.balancing_status) { switch (datalayer_extended.bmwphev.balancing_status) {
case 0: case 0:
content += String("0 Balancing Inactive - Balancing not needed</h4>"); content += String("0 Balancing Inactive - Balancing not needed</h4>");
break; break;
case 1: case 1:
content += String("1 Balancing Active</h4>"); content += String("1 Balancing Active</h4>");
break; break;
case 2: case 2:
content += String("2 Balancing Inactive - Cells not in rest break wait 10mins</h4>"); content += String("2 Balancing Inactive - Cells not in rest break wait 10mins</h4>");
break; break;
case 3: case 3:
content += String("3 Balancing Inactive</h4>"); content += String("3 Balancing Inactive</h4>");
break; break;
case 4: case 4:
content += String("4 Unknown</h4>"); content += String("4 Unknown</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Interlock: "; content += "<h4>Interlock: ";
switch (datalayer_extended.bmwphev.ST_interlock) { switch (datalayer_extended.bmwphev.ST_interlock) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error! Not seated!</h4>"); content += String("Error! Not seated!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Isolation external: "; content += "<h4>Isolation external: ";
switch (datalayer_extended.bmwphev.ST_iso_ext) { switch (datalayer_extended.bmwphev.ST_iso_ext) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error!</h4>"); content += String("Error!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Isolation internal: "; content += "<h4>Isolation internal: ";
switch (datalayer_extended.bmwphev.ST_iso_int) { switch (datalayer_extended.bmwphev.ST_iso_int) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error!</h4>"); content += String("Error!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Isolation: "; content += "<h4>Isolation: ";
switch (datalayer_extended.bmwphev.ST_isolation) { switch (datalayer_extended.bmwphev.ST_isolation) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error!</h4>"); content += String("Error!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Cooling valve: "; content += "<h4>Cooling valve: ";
switch (datalayer_extended.bmwphev.ST_valve_cooling) { switch (datalayer_extended.bmwphev.ST_valve_cooling) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error!</h4>"); content += String("Error!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Emergency: "; content += "<h4>Emergency: ";
switch (datalayer_extended.bmwphev.ST_EMG) { switch (datalayer_extended.bmwphev.ST_EMG) {
case 0: case 0:
content += String("Not Evaluated</h4>"); content += String("Not Evaluated</h4>");
break; break;
case 1: case 1:
content += String("OK</h4>"); content += String("OK</h4>");
break; break;
case 2: case 2:
content += String("Error!</h4>"); content += String("Error!</h4>");
break; break;
case 3: case 3:
content += String("Invalid signal</h4>"); content += String("Invalid signal</h4>");
break; break;
default: default:
content += String("Unknown</h4>"); content += String("Unknown</h4>");
} }
content += "<h4>Precharge: ";
switch (datalayer_extended.bmwphev.ST_precharge) {
static const char* prechargeText[16] = {"Not evaluated", case 0:
"Not active, closing not blocked", content += String("Not Evaluated</h4>");
"Error precharge blocked", break;
"Invalid signal", case 1:
"", content += String("Not active, closing not blocked</h4>");
"", break;
"", case 2:
"", content += String("Error precharge blocked</h4>");
"", break;
"", case 3:
"", content += String("Invalid signal</h4>");
"", break;
"", default:
"", content += String("Unknown</h4>"); //Still unclear of enum
"", }
""}; content += "<h4>Contactor status: ";
content += "<h4>Precharge: " + String(prechargeText[datalayer_extended.bmwphev.ST_precharge]) + switch (datalayer_extended.bmwphev.ST_DCSW) {
"</h4>"; //Still unclear of enum case 0:
static const char* DCSWText[16] = {"Contactors open", content += String("Contactors open</h4>");
"Precharge ongoing", break;
"Contactors engaged", case 1:
"Invalid signal", content += String("Precharge ongoing</h4>");
"", break;
"", case 2:
"", content += String("Contactors engaged</h4>");
"", break;
"", case 3:
"", content += String("Invalid signal</h4>");
"", break;
"", default:
"", content += String("Unknown</h4>");
"", }
"", content += "<h4>Contactor weld: ";
""}; switch (datalayer_extended.bmwphev.ST_WELD) {
content += "<h4>Contactor status: " + String(DCSWText[datalayer_extended.bmwphev.ST_DCSW]) + "</h4>"; case 0:
static const char* contText[16] = {"Contactors OK", content += String("Contactors OK</h4>");
"One contactor welded!", break;
"Two contactors welded!", case 1:
"Invalid signal", content += String("One contactor welded!</h4>");
"", break;
"", case 2:
"", content += String("Two contactors welded!</h4>");
"", break;
"", case 3:
"", content += String("Invalid signal</h4>");
"", break;
"", default:
"", content += String("Unknown</h4>");
"", }
"", content += "<h4>Cold shutoff valve: ";
""}; switch (datalayer_extended.bmwphev.ST_cold_shutoff_valve) {
content += "<h4>Contactor weld: " + String(contText[datalayer_extended.bmwphev.ST_WELD]) + "</h4>"; case 0:
static const char* valveText[16] = {"OK", content += String("OK</h4>");
"Short circuit to GND", break;
"Short circuit to 12V", case 1:
"Line break", content += String("Short circuit to GND</h4>");
"", break;
"", case 2:
"Driver error", content += String("Short circuit to 12V</h4>");
"", break;
"", case 3:
"", content += String("Line break</h4>");
"", break;
"", case 6:
"Stuck", content += String("Driver error</h4>");
"Stuck", break;
"", case 12:
"Invalid Signal"}; case 13:
content += content += String("Stuck</h4>");
"<h4>Cold shutoff valve: " + String(valveText[datalayer_extended.bmwphev.ST_cold_shutoff_valve]) + "</h4>"; break;
default:
content += String("Invalid Signal</h4>");
}
content += content +=
"<h4>Min Cell Voltage Data Age: " + String(datalayer_extended.bmwphev.min_cell_voltage_data_age) + " ms</h4>"; "<h4>Min Cell Voltage Data Age: " + String(datalayer_extended.bmwphev.min_cell_voltage_data_age) + " ms</h4>";
content += content +=