the day of the push

This commit is contained in:
firestar5683
2026-08-25 17:57:36 -05:00
parent 89753b6194
commit f8d47139a3
18 changed files with 343 additions and 88 deletions
+2 -9
View File
@@ -29,9 +29,9 @@ from openpilot.starpilot.common.maps_download_progress import (
storage_bytes,
)
from openpilot.starpilot.common.theme_asset_names import find_matching_theme_asset_file
from openpilot.starpilot.common.starpilot_utilities import get_starpilot_api_info, is_FrogsGoMoo, is_url_pingable, run_cmd
from openpilot.starpilot.common.starpilot_utilities import get_starpilot_api_info, is_url_pingable, run_cmd
from openpilot.starpilot.common.starpilot_variables import (
ERROR_LOGS_PATH, STARPILOT_API, FROGS_GO_MOO_PATH, HD_LOGS_PATH, KONIK_LOGS_PATH, MAPS_PATH, THEME_SAVE_PATH,
ERROR_LOGS_PATH, STARPILOT_API, HD_LOGS_PATH, KONIK_LOGS_PATH, MAPS_PATH, THEME_SAVE_PATH,
StarPilotVariables, get_starpilot_toggles
)
@@ -113,13 +113,6 @@ def install_starpilot(build_metadata, params):
update_boot_logo(starpilot=True, selected_logo=params.get("BootLogo"))
if is_FrogsGoMoo():
mount_options = run_cmd(["findmnt", "-n", "-o", "OPTIONS", "/persist"], "Successfully retrieved mount options", "Failed to retrieve mount options")
run_cmd(["sudo", "mount", "-o", "remount,rw", "/persist"], "Successfully remounted /persist as read-write", "Failed to remount /persist")
run_cmd(["sudo", "python3", FROGS_GO_MOO_PATH], "Successfully ran frogsgomoo.py", "Failed to run frogsgomoo.py")
run_cmd(["sudo", "mount", "-o", f"remount,{mount_options}", "/persist"], "Successfully restored /persist mount options", "Failed to restore /persist mount options")
def register_device(build_metadata, params):
def register_thread():
dongle_id = params.get("DongleId")
+1 -6
View File
@@ -23,7 +23,7 @@ from openpilot.system.hardware import HARDWARE
from openpilot.system.version import get_build_metadata
from panda import Panda, FW_PATH
from openpilot.starpilot.common.starpilot_variables import EARTH_RADIUS, STARPILOT_API, FROGS_GO_MOO_PATH, KONIK_PATH
from openpilot.starpilot.common.starpilot_variables import EARTH_RADIUS, STARPILOT_API, KONIK_PATH
def capture_exception(exception):
@@ -272,11 +272,6 @@ def get_sentry_dsn():
return ""
@cache
def is_FrogsGoMoo():
return FROGS_GO_MOO_PATH.is_file()
def is_url_pingable(url):
if not url:
return False
+19 -5
View File
@@ -74,7 +74,7 @@ def _lkas_allowed_for_aol(car_make, cp_flags, fpcp_safety_configs) -> bool:
hyundai_can_use_lkas_for_aol = car_make == "hyundai" and (
bool(cp_flags & HyundaiFlags.CANFD) or hyundai_has_lda_button
)
return hyundai_can_use_lkas_for_aol or car_make == "honda"
return hyundai_can_use_lkas_for_aol or car_make in ("ford", "honda")
def _main_cruise_aol_allowed(button_control: float) -> bool:
@@ -145,8 +145,6 @@ BACKUP_PATH = _FP_CACHE_ROOT / "on_backup"
STARPILOT_BACKUPS = _FP_DATA_ROOT / "backups"
TOGGLE_BACKUPS = _FP_DATA_ROOT / "toggle_backups"
FROGS_GO_MOO_PATH = _FP_PERSIST_ROOT / "frogsgomoo.py"
HD_LOGS_PATH = _FP_DATA_ROOT / "media/0/realdata_HD"
HD_PATH = _FP_CACHE_ROOT / "use_HD"
@@ -183,6 +181,7 @@ CANCEL_BUTTON_MAPPINGS = (
)
AOL_LKAS_MIGRATION_KEY = "AOLLKASMigratedToButtonControl"
FORD_LKAS_MIGRATION_KEY = "FordLKASButtonControlMigrated"
def sync_reboot_marker(marker_path: Path, enabled: bool, params: Params) -> bool:
@@ -401,6 +400,18 @@ def migrate_aol_lkas_to_button_control(params: Params | None = None) -> bool:
return True
def migrate_ford_lkas_button_default(car_make: str, params: Params | None = None) -> bool:
params = params or Params(return_defaults=True)
if car_make != "ford" or params.get_bool(FORD_LKAS_MIGRATION_KEY):
return False
if params.get_int("LKASButtonControl") == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"]:
params.put_int("LKASButtonControl", BUTTON_FUNCTIONS["AOL_TOGGLE"])
params.put_bool(FORD_LKAS_MIGRATION_KEY, True)
return True
class StarPilotVariables:
def __init__(self):
self.params = Params(return_defaults=True)
@@ -419,7 +430,6 @@ class StarPilotVariables:
self.testing_branch = branch == "StarPilot-Testing"
self.vetting_branch = branch == "StarPilot-Vetting"
self.frogs_go_moo = FROGS_GO_MOO_PATH.is_file()
# Development/vetting branches are no longer gated into dashcam mode.
toggle.block_user = False
@@ -611,6 +621,7 @@ class StarPilotVariables:
alpha_longitudinal = CP.alphaLongitudinalAvailable
toggle.car_make = CP.brand
migrate_ford_lkas_button_default(toggle.car_make, self.params)
toggle.car_model = CP.carFingerprint
toggle.disable_openpilot_long = self.get_value("DisableOpenpilotLongitudinal", condition=not alpha_longitudinal)
friction = CP.lateralTuning.torque.friction
@@ -789,7 +800,10 @@ class StarPilotVariables:
toggle.always_on_lateral = self.get_value("AlwaysOnLateral")
lkas_button_assigned_to_aol = self.get_button_function("LKASButtonControl") == BUTTON_FUNCTIONS["AOL_TOGGLE"]
toggle.always_on_lateral_lkas = toggle.always_on_lateral and toggle.lkas_allowed_for_aol and lkas_button_assigned_to_aol
toggle.ford_lkas_aol_toggle = toggle.car_make == "ford" and lkas_button_assigned_to_aol
toggle.always_on_lateral_lkas = (
toggle.always_on_lateral and toggle.lkas_allowed_for_aol and lkas_button_assigned_to_aol and not toggle.ford_lkas_aol_toggle
)
toggle.always_on_lateral_main = toggle.always_on_lateral and not prohibited_main_aol
toggle.always_on_lateral_pause_speed = self.get_value("PauseAOLOnBrake", cast=float, condition=toggle.always_on_lateral)
@@ -21,6 +21,10 @@ def test_hyundai_and_honda_keep_lkas_aol_button_path():
assert spv._lkas_allowed_for_aol("hyundai", spv.HyundaiFlags.CANFD, []) is True
def test_ford_can_map_lkas_button_to_aol():
assert spv._lkas_allowed_for_aol("ford", 0, []) is True
def test_explicit_main_cruise_aol_mapping_is_not_disabled_by_longitudinal_gate():
aol_button = spv.BUTTON_FUNCTIONS["AOL_TOGGLE"]
@@ -130,6 +134,33 @@ class _FakeParams:
self.bools.pop(key, None)
def test_ford_lkas_default_migrates_from_experimental_to_aol_toggle():
params = _FakeParams(ints={"LKASButtonControl": spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"]})
assert spv.migrate_ford_lkas_button_default("ford", params) is True
assert params.get_int("LKASButtonControl") == spv.BUTTON_FUNCTIONS["AOL_TOGGLE"]
assert params.get_bool(spv.FORD_LKAS_MIGRATION_KEY) is True
params.put_int("LKASButtonControl", spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"])
assert spv.migrate_ford_lkas_button_default("ford", params) is False
assert params.get_int("LKASButtonControl") == spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"]
def test_ford_lkas_default_migration_preserves_custom_mapping():
params = _FakeParams(ints={"LKASButtonControl": spv.BUTTON_FUNCTIONS["BOOKMARK"]})
assert spv.migrate_ford_lkas_button_default("ford", params) is True
assert params.get_int("LKASButtonControl") == spv.BUTTON_FUNCTIONS["BOOKMARK"]
def test_ford_lkas_default_migration_ignores_other_brands():
params = _FakeParams(ints={"LKASButtonControl": spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"]})
assert spv.migrate_ford_lkas_button_default("honda", params) is False
assert params.get_int("LKASButtonControl") == spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"]
assert params.get_bool(spv.FORD_LKAS_MIGRATION_KEY) is False
def test_sync_reboot_marker_uses_manager_guard(tmp_path):
params = _FakeParams()
marker = tmp_path / "cache" / "use_HD"
+1 -1
View File
@@ -545,7 +545,7 @@ class StarPilotVCruise:
v_ego_cluster = max(sm["carState"].vEgoCluster, v_ego)
v_ego_diff = v_ego_cluster - v_ego
# FrogsGoMoo's Curve Speed Controller
# Curve Speed Controller
following_lead = bool(getattr(self.starpilot_planner.starpilot_following, "following_lead", False))
manual_speed_control = is_manual_speed_control(sm)
csc_available = (
+14 -6
View File
@@ -16,7 +16,6 @@ from openpilot.starpilot.common.experimental_state import (
sync_manual_ce_state,
)
from openpilot.starpilot.common.favorite_slots import FAVORITE_ACTION_TRAFFIC_MODE_COUNTER, toggle_favorite_slot
from openpilot.starpilot.common.starpilot_utilities import is_FrogsGoMoo
from openpilot.starpilot.common.starpilot_variables import ERROR_LOGS_PATH, GearShifter, NON_DRIVING_GEARS
HYUNDAI_MAIN_CRUISE_AOL_CONFIRM_TIMEOUT_FRAMES = 100
@@ -74,8 +73,6 @@ class StarPilotCard:
self._onroad_distance_pressed = False
self.always_on_lateral_set = bool(FPCP.alternativeExperience & ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL)
self.frogs_go_moo = is_FrogsGoMoo()
self.long_press_threshold = CRUISE_LONG_PRESS
self.very_long_press_threshold = CRUISE_LONG_PRESS * 5
@@ -215,6 +212,13 @@ class StarPilotCard:
self.params_memory.put_bool("SLCAdoptSpeedLimit", True)
cruise_available_changed = self.prev_cruise_available is not None and carState.cruiseState.available != self.prev_cruise_available
ford_lateral_session_started = self.CP.brand == "ford" and (
(cruise_available_changed and carState.cruiseState.available) or
(carState.cruiseState.enabled and not self.prev_cruise_enabled)
)
if ford_lateral_session_started:
self.pause_lateral = False
if self.g70_main_cruise_aol_pending:
if cruise_available_changed:
self.always_on_lateral_allowed = carState.cruiseState.available
@@ -256,9 +260,9 @@ class StarPilotCard:
self.always_on_lateral_enabled &= sm["starpilotPlan"].lateralCheck
self.always_on_lateral_enabled &= sm["liveCalibration"].calPerc >= 1
alert_types = sm["selfdriveState"].alertType + sm["starpilotSelfdriveState"].alertType
self.always_on_lateral_enabled &= ET.IMMEDIATE_DISABLE not in alert_types or self.frogs_go_moo
self.always_on_lateral_enabled &= ET.IMMEDIATE_DISABLE not in alert_types
self.always_on_lateral_enabled &= not (carState.brakePressed and carState.vEgo < starpilot_toggles.always_on_lateral_pause_speed) or carState.standstill
self.always_on_lateral_enabled &= not self.error_log.is_file() or self.frogs_go_moo
self.always_on_lateral_enabled &= not self.error_log.is_file()
if sm.updated["starpilotPlan"] or any(be_type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be_type in button_event_types):
self.accel_pressed = any(be_type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be_type in button_event_types)
@@ -327,7 +331,11 @@ class StarPilotCard:
self.cancel_pulse_glide_suppressed = False
if lkas_pressed:
self.handle_button_event("lkas", sm, starpilot_toggles)
if self.CP.brand != "ford" or carState.cruiseState.available:
if self.CP.brand == "ford" and getattr(starpilot_toggles, "ford_lkas_aol_toggle", False):
self.pause_lateral = not self.pause_lateral
else:
self.handle_button_event("lkas", sm, starpilot_toggles)
if getattr(starpilot_toggles, "has_canfd_media_buttons", False):
if starpilotCarState.modePressed:
+197 -38
View File
@@ -83,6 +83,7 @@ def make_toggles(**overrides):
"conditional_experimental_mode": False,
"experimental_mode_via_lkas": False,
"force_coast_via_lkas": False,
"ford_lkas_aol_toggle": False,
"pulse_and_glide_available": False,
"pulse_and_glide_via_cancel": False,
"pulse_and_glide_via_cancel_long": False,
@@ -103,7 +104,6 @@ def make_toggles(**overrides):
def test_pulse_and_glide_requires_developer_access_and_active_longitudinal(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -128,7 +128,6 @@ def test_pulse_and_glide_requires_developer_access_and_active_longitudinal(monke
def test_pulse_and_glide_consumes_native_cancel_when_mapped(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -155,7 +154,6 @@ def test_pulse_and_glide_consumes_native_cancel_when_mapped(monkeypatch, tmp_pat
def test_pulse_and_glide_consumes_lkas_when_mapped(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -177,7 +175,6 @@ def test_pulse_and_glide_consumes_lkas_when_mapped(monkeypatch, tmp_path):
def test_pulse_and_glide_long_cancel_consumes_release_after_threshold(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -230,7 +227,6 @@ def test_distance_release_normalization_is_limited_to_reported_elantra_hybrid(
monkeypatch, tmp_path, car_fingerprint, expect_normalized_release,
):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
@@ -263,7 +259,6 @@ def test_distance_release_normalization_is_limited_to_reported_elantra_hybrid(
def test_honda_lkas_button_can_toggle_always_on_lateral(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="honda"), SimpleNamespace(alternativeExperience=0))
@@ -281,7 +276,6 @@ def test_honda_lkas_button_can_toggle_always_on_lateral(monkeypatch, tmp_path):
def test_hyundai_lkas_button_can_start_aol_before_normal_engagement(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(
@@ -311,7 +305,6 @@ def test_hyundai_lkas_button_can_start_aol_before_normal_engagement(monkeypatch,
def test_sonata_hybrid_lkas_button_can_start_aol_before_normal_engagement(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(
@@ -332,7 +325,6 @@ def test_sonata_hybrid_lkas_button_can_start_aol_before_normal_engagement(monkey
def test_sonata_hybrid_preserves_aol_latch_across_reverse(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(
@@ -363,7 +355,6 @@ def test_sonata_hybrid_preserves_aol_latch_across_reverse(monkeypatch, tmp_path)
def test_hyundai_aol_does_not_auto_start_from_cruise_availability(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(
@@ -380,7 +371,6 @@ def test_hyundai_aol_does_not_auto_start_from_cruise_availability(monkeypatch, t
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(
@@ -398,7 +388,6 @@ def test_genesis_g90_main_aol_can_start_before_set(monkeypatch, tmp_path):
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(
@@ -415,7 +404,6 @@ def test_other_legacy_hyundai_main_aol_still_waits_for_set(monkeypatch, tmp_path
def test_legacy_hyundai_main_aol_waits_for_main_button_permission(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(
@@ -447,7 +435,6 @@ def test_legacy_hyundai_main_aol_waits_for_main_button_permission(monkeypatch, t
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)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
@@ -464,7 +451,6 @@ def test_nissan_main_aol_can_start_before_normal_engagement(monkeypatch, tmp_pat
def test_hyundai_canfd_lkas_button_can_toggle_aol_before_engagement(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(
@@ -485,7 +471,6 @@ def test_hyundai_canfd_lkas_button_can_toggle_aol_before_engagement(monkeypatch,
def test_hyundai_canfd_lkas_button_wrapped_enum_can_toggle_aol(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(
@@ -510,7 +495,6 @@ def test_hyundai_canfd_lkas_button_wrapped_enum_can_toggle_aol(monkeypatch, tmp_
def test_kia_forte_non_scc_main_cruise_button_toggles_aol_immediately(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(
@@ -540,7 +524,6 @@ def test_kia_forte_non_scc_main_cruise_button_toggles_aol_immediately(monkeypatc
def test_genesis_g90_main_cruise_button_toggles_aol_immediately(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(
@@ -566,7 +549,6 @@ def test_genesis_g90_main_cruise_button_toggles_aol_immediately(monkeypatch, tmp
def test_genesis_g70_main_cruise_button_waits_for_cruise_availability(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(
@@ -604,7 +586,6 @@ def test_genesis_g70_main_cruise_button_waits_for_cruise_availability(monkeypatc
def test_legacy_hyundai_main_cruise_button_toggles_aol_immediately(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(
@@ -630,7 +611,6 @@ def test_legacy_hyundai_main_cruise_button_toggles_aol_immediately(monkeypatch,
def test_hyundai_main_cruise_button_toggles_aol_immediately(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(
@@ -655,7 +635,6 @@ def test_hyundai_main_cruise_button_toggles_aol_immediately(monkeypatch, tmp_pat
def test_hyundai_main_cruise_button_wrapped_enum_can_toggle_aol(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(
@@ -688,7 +667,6 @@ def test_hyundai_main_cruise_button_wrapped_enum_can_toggle_aol(monkeypatch, tmp
def test_hyundai_lda_platform_main_aol_waits_for_engagement_without_lkas_mapping(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(
@@ -711,7 +689,6 @@ def test_hyundai_lda_platform_main_aol_waits_for_engagement_without_lkas_mapping
def test_honda_mapped_main_cruise_button_keeps_immediate_toggle(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(
@@ -729,7 +706,6 @@ def test_honda_mapped_main_cruise_button_keeps_immediate_toggle(monkeypatch, tmp
def test_hyundai_main_cruise_button_adopts_slc_when_assigned_to_slc(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"), SimpleNamespace(alternativeExperience=0))
@@ -749,7 +725,6 @@ def test_hyundai_main_cruise_button_adopts_slc_when_assigned_to_slc(monkeypatch,
def test_honda_lkas_button_pauses_lateral_when_cruise_is_active(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(
@@ -776,9 +751,204 @@ def test_honda_lkas_button_pauses_lateral_when_cruise_is_active(monkeypatch, tmp
assert ret.pauseLateral is False
def test_ford_lkas_button_pauses_lateral_when_cruise_is_active(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
SimpleNamespace(brand="ford"),
SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL),
)
card.always_on_lateral_allowed = True
car_state = make_car_state(available=True, enabled=True, button_events=[SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)])
starpilot_car_state = SimpleNamespace(distancePressed=False)
sm = make_sm()
sm["selfdriveState"].active = True
sm["carControl"].longActive = True
toggles = make_toggles(always_on_lateral=True, always_on_lateral_main=True, pause_lateral_via_lkas=True)
card.prev_active = True
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is True
assert ret.pauseLongitudinal is False
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=False)]
card.update(car_state, starpilot_car_state, sm, toggles)
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is False
assert ret.pauseLongitudinal is False
def test_ford_lkas_button_pauses_aol_with_only_cruise_master_on(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
SimpleNamespace(brand="ford"),
SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL),
)
starpilot_car_state = SimpleNamespace(distancePressed=False)
sm = make_sm()
toggles = make_toggles(always_on_lateral=True, always_on_lateral_main=True, pause_lateral_via_lkas=True)
master_on = make_car_state(available=True, enabled=False)
ret = card.update(master_on, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.alwaysOnLateralEnabled is True
master_on.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(master_on, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is True
assert ret.pauseLongitudinal is False
sm["starpilotPlan"].lateralCheck = False
master_on.buttonEvents = []
ret = card.update(master_on, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.alwaysOnLateralEnabled is False
master_on.cruiseState.available = False
master_on.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(master_on, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is False
assert ret.pauseLateral is True
sm["starpilotPlan"].lateralCheck = True
master_on.cruiseState.available = True
master_on.buttonEvents = []
ret = card.update(master_on, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.alwaysOnLateralEnabled is True
assert ret.pauseLateral is False
def test_ford_lkas_button_pauses_lateral_when_aol_is_disabled(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(SimpleNamespace(brand="ford"), SimpleNamespace(alternativeExperience=0))
car_state = make_car_state(available=True, enabled=True, button_events=[SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)])
starpilot_car_state = SimpleNamespace(distancePressed=False)
sm = make_sm()
sm["selfdriveState"].active = True
sm["carControl"].longActive = True
toggles = make_toggles(pause_lateral_via_lkas=True)
card.prev_active = True
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is False
assert ret.pauseLateral is True
assert ret.pauseLongitudinal is False
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=False)]
card.update(car_state, starpilot_car_state, sm, toggles)
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is False
assert ret.pauseLateral is False
assert ret.pauseLongitudinal is False
def test_ford_lkas_button_can_use_aol_mapping(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
SimpleNamespace(brand="ford"),
SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL),
)
car_state = make_car_state(available=True)
toggles = make_toggles(always_on_lateral=True, always_on_lateral_main=True, ford_lkas_aol_toggle=True, lkas_allowed_for_aol=True)
ret = card.update(car_state, SimpleNamespace(distancePressed=False), make_sm(), toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is False
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(car_state, SimpleNamespace(distancePressed=False), make_sm(), toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is True
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=False)]
card.update(car_state, SimpleNamespace(distancePressed=False), make_sm(), toggles)
car_state.buttonEvents = [SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)]
ret = card.update(car_state, SimpleNamespace(distancePressed=False), make_sm(), toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is False
def test_ford_aol_mapping_pauses_lateral_when_aol_is_disabled(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(SimpleNamespace(brand="ford"), SimpleNamespace(alternativeExperience=0))
card.prev_cruise_enabled = True
car_state = make_car_state(available=True, enabled=True, button_events=[SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)])
sm = make_sm()
sm["selfdriveState"].active = True
sm["carControl"].longActive = True
ret = card.update(car_state, SimpleNamespace(distancePressed=False), sm, make_toggles(ford_lkas_aol_toggle=True))
assert ret.alwaysOnLateralAllowed is False
assert ret.pauseLateral is True
assert ret.pauseLongitudinal is False
def test_ford_lkas_button_can_keep_experimental_mapping(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(SimpleNamespace(brand="ford"), SimpleNamespace(alternativeExperience=0))
card.prev_cruise_enabled = True
car_state = make_car_state(available=True, enabled=True, button_events=[SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)])
sm = make_sm()
sm["carControl"].longActive = True
ret = card.update(car_state, SimpleNamespace(distancePressed=False), sm, make_toggles(experimental_mode_via_lkas=True))
assert card.params.get_bool("ExperimentalMode") is True
assert ret.pauseLateral is False
def test_ford_new_longitudinal_engagement_resumes_lateral(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(SimpleNamespace(brand="ford"), SimpleNamespace(alternativeExperience=0))
card.pause_lateral = True
car_state = make_car_state(available=True, enabled=True)
starpilot_car_state = SimpleNamespace(distancePressed=False)
sm = make_sm()
sm["selfdriveState"].active = True
sm["carControl"].longActive = True
ret = card.update(car_state, starpilot_car_state, sm, make_toggles())
assert ret.pauseLateral is False
assert ret.pauseLongitudinal is False
def test_honda_main_aol_follows_cruise_main_without_manual_aol_button_mapping(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(
@@ -795,7 +965,6 @@ def test_honda_main_aol_follows_cruise_main_without_manual_aol_button_mapping(mo
def test_hyundai_main_aol_persists_after_brake_disengage_without_manual_aol_button_mapping(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(
@@ -823,7 +992,6 @@ def test_hyundai_main_aol_persists_after_brake_disengage_without_manual_aol_butt
def test_non_button_aol_platform_keeps_main_aol_when_main_cruise_is_mapped(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(
@@ -840,7 +1008,6 @@ def test_non_button_aol_platform_keeps_main_aol_when_main_cruise_is_mapped(monke
def test_main_aol_still_follows_cruise_main_for_other_platforms(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="toyota", carFingerprint="TOYOTA_TEST", pcmCruise=True),
@@ -855,7 +1022,6 @@ def test_main_aol_still_follows_cruise_main_for_other_platforms(monkeypatch, tmp
def test_pacifica_hybrid_main_aol_waits_for_set_press(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(
@@ -890,7 +1056,6 @@ def test_pacifica_hybrid_main_aol_waits_for_set_press(monkeypatch, tmp_path):
def test_conditional_chill_wheel_override_cycles_manual_state(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -907,7 +1072,6 @@ def test_conditional_chill_wheel_override_cycles_manual_state(monkeypatch, tmp_p
def test_cancel_button_short_press_can_run_independent_mapping(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -933,7 +1097,6 @@ def test_cancel_button_short_press_can_run_independent_mapping(monkeypatch, tmp_
def test_lkas_button_press_creates_bookmark(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="toyota"), SimpleNamespace(alternativeExperience=0))
@@ -946,7 +1109,6 @@ def test_lkas_button_press_creates_bookmark(monkeypatch, tmp_path):
def test_favorite_wheel_action_toggles_hidden_onroad_slot(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -963,7 +1125,6 @@ def test_favorite_wheel_action_toggles_hidden_onroad_slot(monkeypatch, tmp_path)
def test_favorite_wheel_action_can_press_virtual_resume(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -978,7 +1139,6 @@ def test_favorite_wheel_action_can_press_virtual_resume(monkeypatch, tmp_path):
def test_favorite_action_toggles_traffic_mode_when_longitudinal_control_is_active(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="gm"), SimpleNamespace(alternativeExperience=0))
@@ -998,7 +1158,6 @@ def test_favorite_action_toggles_traffic_mode_when_longitudinal_control_is_activ
def test_favorite_traffic_mode_action_is_consumed_when_not_active(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="gm"), SimpleNamespace(alternativeExperience=0))
-4
View File
@@ -200,10 +200,6 @@ def send_stats():
build_metadata = get_build_metadata()
starpilot_toggles = get_starpilot_toggles()
frogs_go_moo = getattr(starpilot_toggles, "frogs_go_moo", False)
if frogs_go_moo:
return
if starpilot_toggles.car_make == "mock":
return