comms error?

This commit is contained in:
firestar5683
2026-04-19 11:10:39 -05:00
parent 37100542e9
commit f6197651f4
4 changed files with 47 additions and 6 deletions
+7 -1
View File
@@ -281,7 +281,13 @@ def default_ev_tuning_enabled(CP):
return bool(ev_vehicle)
def get_starpilot_toggles(sm=messaging.SubMaster(["starpilotPlan"])):
toggles = process_starpilot_toggles(sm["starpilotPlan"].starpilotToggles)
toggles_text = sm["starpilotPlan"].starpilotToggles
if toggles_text:
get_starpilot_toggles._last_toggles_text = toggles_text
else:
toggles_text = getattr(get_starpilot_toggles, "_last_toggles_text", "")
toggles = process_starpilot_toggles(toggles_text)
# Force drive-state controls must be authoritative from params so they
# apply immediately even if starpilotPlan publication is temporarily stale.
@@ -0,0 +1,20 @@
from types import SimpleNamespace
from openpilot.starpilot.common import starpilot_variables as spv
def test_get_starpilot_toggles_uses_last_non_empty_broadcast(monkeypatch):
params = SimpleNamespace(get_bool=lambda _key: False)
monkeypatch.setattr(spv.get_starpilot_toggles, "_params", params, raising=False)
monkeypatch.delattr(spv.get_starpilot_toggles, "_last_toggles_text", raising=False)
payload = '{"always_on_lateral": true, "vision_speed_limit_detection": true}'
sm_with_toggles = {"starpilotPlan": SimpleNamespace(starpilotToggles=payload)}
sm_without_toggles = {"starpilotPlan": SimpleNamespace(starpilotToggles="")}
first = spv.get_starpilot_toggles(sm_with_toggles)
second = spv.get_starpilot_toggles(sm_without_toggles)
assert first.always_on_lateral is True
assert second.always_on_lateral is True
assert second.vision_speed_limit_detection is True
+6 -2
View File
@@ -32,6 +32,10 @@ def _sanitize_json_value(value):
return value
def serialize_starpilot_toggles(starpilot_toggles):
return json.dumps(_sanitize_json_value(vars(starpilot_toggles)), allow_nan=False)
class StarPilotPlanner:
def __init__(self, error_log, ThemeManager):
self.params = Params(return_defaults=True)
@@ -152,7 +156,7 @@ class StarPilotPlanner:
self.tracking_lead_filter.update(following_lead)
return self.tracking_lead_filter.x >= THRESHOLD
def publish(self, theme_updated, sm, pm, starpilot_toggles):
def publish(self, theme_updated, sm, pm, starpilot_toggles, serialized_toggles=""):
starpilot_plan_send = messaging.new_message("starpilotPlan")
starpilot_plan_send.valid = sm.all_checks(service_list=["carState", "controlsState", "selfdriveState", "radarState"])
starpilotPlan = starpilot_plan_send.starpilotPlan
@@ -178,7 +182,7 @@ class StarPilotPlanner:
starpilotPlan.starpilotEvents = self.starpilot_events.events.to_msg()
starpilotPlan.starpilotToggles = json.dumps(_sanitize_json_value(vars(starpilot_toggles)), allow_nan=False)
starpilotPlan.starpilotToggles = serialized_toggles
if sm["starpilotCarState"].trafficModeEnabled:
starpilotPlan.increasedStoppedDistance = 0
+14 -3
View File
@@ -24,12 +24,13 @@ from openpilot.starpilot.common.safe_mode import (
)
from openpilot.starpilot.common.starpilot_utilities import ThreadManager, flash_panda, is_url_pingable, lock_doors, use_konik_server
from openpilot.starpilot.common.starpilot_variables import ERROR_LOGS_PATH, StarPilotVariables
from openpilot.starpilot.controls.starpilot_planner import StarPilotPlanner
from openpilot.starpilot.controls.starpilot_planner import StarPilotPlanner, serialize_starpilot_toggles
from openpilot.starpilot.system.starpilot_stats import send_stats
from openpilot.starpilot.system.starpilot_tracking import StarPilotTracking
ASSET_CHECK_RATE = (1 / DT_MDL)
DRIVE_STATS_SYNC_RATE = 30
TOGGLE_BROADCAST_INTERVAL_FRAMES = int(1 / DT_MDL)
UPDATE_CHECK_INTERVAL_SECONDS = 60 * 60
@@ -181,6 +182,8 @@ def starpilot_thread():
thread_manager = ThreadManager()
starpilot_toggles = starpilot_variables.starpilot_toggles
serialized_starpilot_toggles = serialize_starpilot_toggles(starpilot_toggles)
toggle_broadcast_pending = True
drive_stats_session = requests.Session()
next_drive_stats_sync = 0.0
@@ -211,6 +214,8 @@ def starpilot_thread():
starpilot_planner.shutdown()
starpilot_toggles = update_toggles(starpilot_variables, started, theme_manager, thread_manager, time_validated, params, starpilot_toggles)
serialized_starpilot_toggles = serialize_starpilot_toggles(starpilot_toggles)
toggle_broadcast_pending = True
transition_offroad(starpilot_planner, theme_manager, thread_manager, time_validated, sm, params, starpilot_toggles)
run_update_checks = True
@@ -221,13 +226,17 @@ def starpilot_thread():
transition_onroad(error_log)
if started and sm.updated["modelV2"]:
broadcast_toggles = toggle_broadcast_pending or (rate_keeper.frame % TOGGLE_BROADCAST_INTERVAL_FRAMES == 0)
starpilot_planner.update(now, time_validated, sm, starpilot_toggles)
starpilot_planner.publish(theme_manager.theme_updated, sm, pm, starpilot_toggles)
starpilot_planner.publish(theme_manager.theme_updated, sm, pm, starpilot_toggles,
serialized_starpilot_toggles if broadcast_toggles else "")
if broadcast_toggles:
toggle_broadcast_pending = False
starpilot_tracking.update(now, time_validated, sm, starpilot_toggles)
elif not started:
starpilot_plan_send = messaging.new_message("starpilotPlan")
starpilot_plan_send.starpilotPlan.starpilotToggles = json.dumps(vars(starpilot_toggles))
starpilot_plan_send.starpilotPlan.starpilotToggles = serialized_starpilot_toggles
starpilot_plan_send.starpilotPlan.themeUpdated = theme_manager.theme_updated
pm.send("starpilotPlan", starpilot_plan_send)
@@ -256,6 +265,8 @@ def starpilot_thread():
if params_memory.get_bool("StarPilotTogglesUpdated") or theme_manager.theme_updated:
starpilot_toggles = update_toggles(starpilot_variables, started, theme_manager, thread_manager, time_validated, params, starpilot_toggles)
serialized_starpilot_toggles = serialize_starpilot_toggles(starpilot_toggles)
toggle_broadcast_pending = True
periodic_update_due = monotonic_now >= next_periodic_update_check
if periodic_update_due: