diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h index f12ef97e..03acf698 100644 --- a/panda/board/obj/gitversion.h +++ b/panda/board/obj/gitversion.h @@ -1,2 +1,2 @@ extern const uint8_t gitversion[19]; -const uint8_t gitversion[19] = "DEV-701080a6-DEBUG"; +const uint8_t gitversion[19] = "DEV-c45051f5-DEBUG"; diff --git a/panda/board/obj/version b/panda/board/obj/version index e791829c..9429e7a6 100644 --- a/panda/board/obj/version +++ b/panda/board/obj/version @@ -1 +1 @@ -DEV-701080a6-DEBUG \ No newline at end of file +DEV-c45051f5-DEBUG \ No newline at end of file diff --git a/starpilot/controls/starpilot_planner.py b/starpilot/controls/starpilot_planner.py index 87fdf4c8..77024daa 100644 --- a/starpilot/controls/starpilot_planner.py +++ b/starpilot/controls/starpilot_planner.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import json +import math import cereal.messaging as messaging @@ -21,6 +22,16 @@ from openpilot.starpilot.controls.lib.starpilot_vcruise import StarPilotVCruise from openpilot.starpilot.controls.lib.weather_checker import WeatherChecker +def _sanitize_json_value(value): + if isinstance(value, float): + return value if math.isfinite(value) else None + if isinstance(value, dict): + return {k: _sanitize_json_value(v) for k, v in value.items()} + if isinstance(value, (list, tuple)): + return [_sanitize_json_value(v) for v in value] + return value + + class StarPilotPlanner: def __init__(self, error_log, ThemeManager): self.params = Params(return_defaults=True) @@ -166,7 +177,7 @@ class StarPilotPlanner: starpilotPlan.starpilotEvents = self.starpilot_events.events.to_msg() - starpilotPlan.starpilotToggles = json.dumps(vars(starpilot_toggles)) + starpilotPlan.starpilotToggles = json.dumps(_sanitize_json_value(vars(starpilot_toggles)), allow_nan=False) if sm["starpilotCarState"].trafficModeEnabled: starpilotPlan.increasedStoppedDistance = 0 diff --git a/starpilot/ui/starpilot_ui.cc b/starpilot/ui/starpilot_ui.cc index bda411a0..a1a78ff6 100644 --- a/starpilot/ui/starpilot_ui.cc +++ b/starpilot/ui/starpilot_ui.cc @@ -3,6 +3,9 @@ #include #include +#include +#include + #include "system/hardware/hw.h" static void update_state(StarPilotUIState *fs) { @@ -39,7 +42,18 @@ static void update_state(StarPilotUIState *fs) { QByteArray current_toggles(toggles.cStr(), toggles.size()); static QByteArray previous_toggles; if (previous_toggles != current_toggles) { - starpilot_scene.starpilot_toggles = QJsonDocument::fromJson(current_toggles).object(); + QJsonParseError parse_error; + QJsonDocument toggles_doc = QJsonDocument::fromJson(current_toggles, &parse_error); + if (parse_error.error == QJsonParseError::NoError && toggles_doc.isObject()) { + QJsonObject updated_toggles = starpilot_scene.starpilot_toggles; + const QJsonObject parsed_toggles = toggles_doc.object(); + for (auto it = parsed_toggles.begin(); it != parsed_toggles.end(); ++it) { + updated_toggles.insert(it.key(), it.value()); + } + starpilot_scene.starpilot_toggles = updated_toggles; + } else { + qWarning() << "Ignoring invalid StarPilot toggles JSON:" << parse_error.errorString(); + } previous_toggles = current_toggles; } }