From d11ecaf457a8d1ff4f33d2be6d470c7c780c41e4 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sun, 23 Aug 2026 12:57:42 -0500 Subject: [PATCH] End The Suffering --- selfdrive/selfdrived/selfdrived.py | 2 +- selfdrive/selfdrived/tests/test_selfdrived.py | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/selfdrive/selfdrived/selfdrived.py b/selfdrive/selfdrived/selfdrived.py index 7fedd395a..a2a1e8834 100644 --- a/selfdrive/selfdrived/selfdrived.py +++ b/selfdrive/selfdrived/selfdrived.py @@ -926,7 +926,7 @@ class SelfdriveD: fpss.alertSize = self.starpilot_AM.current_alert.alert_size fpss.alertStatus = self.starpilot_AM.current_alert.alert_status fpss.alertType = self.starpilot_AM.current_alert.alert_type - fpss.vEgo = self.sm["carState"].vEgo + fpss.vEgo = CS.vEgo fpss.alertSound, self.forcing_stop_chime_played = filter_forcing_stop_alert_sound( fpss.alertType, self.starpilot_AM.current_alert.audible_alert, diff --git a/selfdrive/selfdrived/tests/test_selfdrived.py b/selfdrive/selfdrived/tests/test_selfdrived.py index f0c2ba5e9..9d3857ec3 100644 --- a/selfdrive/selfdrived/tests/test_selfdrived.py +++ b/selfdrive/selfdrived/tests/test_selfdrived.py @@ -1,3 +1,5 @@ +from types import SimpleNamespace + import cereal.messaging as messaging from cereal import car, custom, log @@ -40,6 +42,64 @@ def test_dead_or_slow_comm_issue_is_immediate(): assert evaluate_comm_issue(False, True, False, 0) == (True, 0) +def test_starpilot_selfdrive_state_uses_sampled_car_state_speed(): + class FakeEvents: + names = [] + + @staticmethod + def contains(_event_type): + return False + + class FakeSubMaster: + frame = 1 + + @staticmethod + def __getitem__(service): + if service == "starpilotPlan": + return SimpleNamespace(forcingStop=False) + raise KeyError(service) + + class FakePubMaster: + def __init__(self): + self.messages = {} + + def send(self, service, message): + self.messages[service] = message + + stock_alert = SimpleNamespace( + alert_text_1="", alert_text_2="", alert_size=log.SelfdriveState.AlertSize.none, + alert_status=log.SelfdriveState.AlertStatus.normal, alert_type="", + audible_alert=log.SelfdriveState.AudibleAlert.none, + visual_alert=car.CarControl.HUDControl.VisualAlert.none, + ) + starpilot_alert = SimpleNamespace( + alert_text_1="", alert_text_2="", alert_size=custom.StarPilotSelfdriveState.AlertSize.none, + alert_status=custom.StarPilotSelfdriveState.AlertStatus.normal, alert_type="", + audible_alert=log.SelfdriveState.AudibleAlert.none, + ) + + selfdrived = SelfdriveD.__new__(SelfdriveD) + selfdrived.enabled = False + selfdrived.active = False + selfdrived.state_machine = SimpleNamespace(state=log.SelfdriveState.OpenpilotState.disabled) + selfdrived.events = FakeEvents() + selfdrived.starpilot_events = FakeEvents() + selfdrived.events_prev = [] + selfdrived.starpilot_events_prev = [] + selfdrived.experimental_mode = False + selfdrived.personality = log.LongitudinalPersonality.standard + selfdrived.AM = SimpleNamespace(current_alert=stock_alert) + selfdrived.starpilot_AM = SimpleNamespace(current_alert=starpilot_alert) + selfdrived.forcing_stop_chime_played = False + selfdrived.sm = FakeSubMaster() + selfdrived.pm = FakePubMaster() + + selfdrived.publish_selfdriveState(car.CarState.new_message(vEgo=12.5)) + + msg = selfdrived.pm.messages["starpilotSelfdriveState"] + assert msg.starpilotSelfdriveState.vEgo == 12.5 + + class FakeFallbackParams: def __init__(self, controls_ready, ecu_disable_failed, fallback_cp, fallback_fpcp): self.controls_ready = controls_ready