From 6370abd73a16d507a249f6596c734b0e765ec346 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:46:29 -0500 Subject: [PATCH] G90 --- starpilot/controls/starpilot_card.py | 5 +- .../controls/tests/test_starpilot_card.py | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/starpilot/controls/starpilot_card.py b/starpilot/controls/starpilot_card.py index 5a2678582..7ebd93414 100644 --- a/starpilot/controls/starpilot_card.py +++ b/starpilot/controls/starpilot_card.py @@ -40,8 +40,11 @@ class StarPilotCard: getattr(self.CP, "carFingerprint", None) in (HYUNDAI_CAR.KIA_FORTE_2019_NON_SCC, HYUNDAI_CAR.KIA_FORTE_2021_NON_SCC) and bool(hyundai_flags & HyundaiFlags.NON_SCC) ) + hyundai_aol_before_engagement = kia_forte_non_scc or getattr(self.CP, "carFingerprint", None) == HYUNDAI_CAR.GENESIS_G90 self.hyundai_preserve_aol_across_reverse = getattr(self.CP, "carFingerprint", None) == HYUNDAI_CAR.HYUNDAI_SONATA_HYBRID - self.hyundai_aol_needs_engagement = self.CP.brand == "hyundai" and not (hyundai_flags & HyundaiFlags.CANFD) and not kia_forte_non_scc + self.hyundai_aol_needs_engagement = ( + self.CP.brand == "hyundai" and not (hyundai_flags & HyundaiFlags.CANFD) and not hyundai_aol_before_engagement + ) self.hyundai_aol_ready = False self.main_cruise_aol_pending = False self.main_cruise_aol_pending_frames = 0 diff --git a/starpilot/controls/tests/test_starpilot_card.py b/starpilot/controls/tests/test_starpilot_card.py index 8b5ce9b49..b8048f208 100644 --- a/starpilot/controls/tests/test_starpilot_card.py +++ b/starpilot/controls/tests/test_starpilot_card.py @@ -219,6 +219,41 @@ def test_hyundai_aol_does_not_auto_start_from_cruise_availability(monkeypatch, t assert ret.alwaysOnLateralEnabled is False +def test_genesis_g90_main_aol_can_start_before_set(monkeypatch, tmp_path): + monkeypatch.setattr(spc, "Params", FakeParams) + monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False) + monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path) + + card = spc.StarPilotCard( + SimpleNamespace(brand="hyundai", carFingerprint=spc.HYUNDAI_CAR.GENESIS_G90), + SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL), + ) + + ret = card.update(make_car_state(available=True), SimpleNamespace(distancePressed=False), make_sm(), + make_toggles(always_on_lateral=True, always_on_lateral_main=True)) + + assert card.hyundai_aol_needs_engagement is False + assert ret.alwaysOnLateralAllowed is True + assert ret.alwaysOnLateralEnabled is True + + +def test_other_legacy_hyundai_main_aol_still_waits_for_set(monkeypatch, tmp_path): + monkeypatch.setattr(spc, "Params", FakeParams) + monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False) + monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path) + + card = spc.StarPilotCard( + SimpleNamespace(brand="hyundai", carFingerprint=spc.HYUNDAI_CAR.GENESIS_G80), + SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL), + ) + + ret = card.update(make_car_state(available=True), SimpleNamespace(distancePressed=False), make_sm(), + make_toggles(always_on_lateral=True, always_on_lateral_main=True)) + + assert card.hyundai_aol_needs_engagement is True + assert ret.alwaysOnLateralEnabled is False + + def test_nissan_main_aol_can_start_before_normal_engagement(monkeypatch, tmp_path): monkeypatch.setattr(spc, "Params", FakeParams) monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False) @@ -313,6 +348,33 @@ def test_kia_forte_non_scc_main_cruise_button_waits_for_main_confirmation(monkey assert ret.alwaysOnLateralEnabled is True +def test_genesis_g90_main_cruise_button_waits_for_main_confirmation(monkeypatch, tmp_path): + monkeypatch.setattr(spc, "Params", FakeParams) + monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False) + monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path) + + card = spc.StarPilotCard( + SimpleNamespace(brand="hyundai", carFingerprint=spc.HYUNDAI_CAR.GENESIS_G90), + SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL), + ) + + car_state = make_car_state(button_events=[SimpleNamespace(type=spc.ButtonType.mainCruise, pressed=True)]) + starpilot_car_state = SimpleNamespace(distancePressed=False) + sm = make_sm() + toggles = make_toggles(always_on_lateral=True, main_cruise_aol_toggle=True) + + card.update(make_car_state(), starpilot_car_state, sm, toggles) + ret = card.update(car_state, starpilot_car_state, sm, toggles) + assert ret.alwaysOnLateralAllowed is False + assert ret.alwaysOnLateralEnabled is False + + car_state.buttonEvents = [] + car_state.cruiseState.available = True + ret = card.update(car_state, starpilot_car_state, sm, toggles) + assert ret.alwaysOnLateralAllowed is True + assert ret.alwaysOnLateralEnabled is True + + def test_hyundai_main_cruise_button_follows_confirmed_main_state(monkeypatch, tmp_path): monkeypatch.setattr(spc, "Params", FakeParams) monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False)