diff --git a/opendbc_repo/opendbc/car/hyundai/interface.py b/opendbc_repo/opendbc/car/hyundai/interface.py index a043060b4..830e32b7d 100644 --- a/opendbc_repo/opendbc/car/hyundai/interface.py +++ b/opendbc_repo/opendbc/car/hyundai/interface.py @@ -214,6 +214,8 @@ class CarInterface(CarInterfaceBase): # Car specific configuration overrides if candidate == CAR.GENESIS_G90: + ret.safetyConfigs[-1].safetyParam |= HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON.value + ret.safetyConfigs[-1].safetyParam |= HyundaiStarPilotSafetyFlags.AOL_LKAS_ON_ENGAGE.value ret.stoppingDecelRate = 0.55 ret.vEgoStopping = 0.8 diff --git a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py index 0303d1cd3..08e6c146e 100644 --- a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py @@ -20,7 +20,7 @@ from opendbc.car.hyundai.values import CAMERA_SCC_CAR, CANFD_CAR, CAN_GEARS, CAR HYBRID_CAR, EV_CAR, FW_QUERY_CONFIG, LEGACY_SAFETY_MODE_CAR, CANFD_FUZZY_WHITELIST, \ UNSUPPORTED_LONGITUDINAL_CAR, PLATFORM_CODE_ECUS, HYUNDAI_VERSION_REQUEST_LONG, \ CarControllerParams, DBC, HyundaiFlags, get_platform_codes, HyundaiSafetyFlags, \ - HyundaiStarPilotSafetyFlags, Buttons + HyundaiStarPilotSafetyFlags, Buttons, GENESIS_G90_STEER_MAX, HYUNDAI_PALISADE_2023_STEER_MAX LongCtrlState = CarControl.Actuators.LongControlState from opendbc.car.hyundai.fingerprints import FW_VERSIONS @@ -278,6 +278,7 @@ class TestHyundaiFingerprint: g90 = CarInterface.get_params(CAR.GENESIS_G90, gen_empty_fingerprint(), [], False, False, False, None) assert g90.safetyConfigs[-1].safetyParam & HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON + assert g90.safetyConfigs[-1].safetyParam & HyundaiStarPilotSafetyFlags.AOL_LKAS_ON_ENGAGE sonata_without_lda = CarInterface.get_params(CAR.HYUNDAI_SONATA, gen_empty_fingerprint(), [], False, False, False, None) assert not (sonata_without_lda.safetyConfigs[-1].safetyParam & HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON) @@ -1502,6 +1503,16 @@ class TestHyundaiFingerprint: assert sportage_params.ANGLE_LIMITS.MAX_ANGLE_RATE > comparison_params.ANGLE_LIMITS.MAX_ANGLE_RATE assert comparison_params.ANGLE_LIMITS.MAX_LATERAL_JERK == ioniq6_params.ANGLE_LIMITS.MAX_LATERAL_JERK + def test_g90_and_palisade_2023_steer_max_limits(self): + g90 = CarParams.new_message() + g90.carFingerprint = CAR.GENESIS_G90 + assert CarControllerParams(g90).STEER_MAX == GENESIS_G90_STEER_MAX + + palisade_2023 = CarParams.new_message() + palisade_2023.carFingerprint = CAR.HYUNDAI_PALISADE_2023 + palisade_2023.flags = int(HyundaiFlags.CAN_CANFD_BLENDED) + assert CarControllerParams(palisade_2023).STEER_MAX == HYUNDAI_PALISADE_2023_STEER_MAX + def test_ioniq_5_canfd_aux_messages_are_optional(self): toggles = get_test_toggles() fingerprint = gen_empty_fingerprint() diff --git a/opendbc_repo/opendbc/car/hyundai/values.py b/opendbc_repo/opendbc/car/hyundai/values.py index 0a439161b..320d0ea74 100644 --- a/opendbc_repo/opendbc/car/hyundai/values.py +++ b/opendbc_repo/opendbc/car/hyundai/values.py @@ -22,6 +22,8 @@ HYUNDAI_MANDO_FRONT_RADAR_DBC = "hyundai_kia_mando_front_radar_generated" HYUNDAI_MRREVO14F_RADAR_DBC = "hyundai_mrrevo14f_radar_generated" HYUNDAI_MRR30_RADAR_DBC = "hyundai_mrr30_radar_generated" HYUNDAI_MRR35_RADAR_DBC = "hyundai_mrr35_radar_generated" +GENESIS_G90_STEER_MAX = 461 +HYUNDAI_PALISADE_2023_STEER_MAX = 485 class CarControllerParams: @@ -99,12 +101,15 @@ class CarControllerParams: self.STEER_DELTA_DOWN = 3 elif CP.flags & HyundaiFlags.CAN_CANFD_BLENDED: - self.STEER_MAX = 404 + self.STEER_MAX = HYUNDAI_PALISADE_2023_STEER_MAX self.STEER_DRIVER_ALLOWANCE = 50 self.STEER_THRESHOLD = 150 self.STEER_DELTA_UP = 2 self.STEER_DELTA_DOWN = 3 + elif CP.carFingerprint == CAR.GENESIS_G90: + self.STEER_MAX = GENESIS_G90_STEER_MAX + # Default for most HKG else: self.STEER_MAX = 384 diff --git a/opendbc_repo/opendbc/safety/modes/hyundai.h b/opendbc_repo/opendbc/safety/modes/hyundai.h index f24ab60e3..b4abe605b 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai.h @@ -239,9 +239,10 @@ static void hyundai_rx_hook(const CANPacket_t *msg) { static bool hyundai_tx_hook(const CANPacket_t *msg) { const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS = HYUNDAI_LIMITS(384, 3, 7); + const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_G90 = HYUNDAI_LIMITS(461, 3, 7); const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_ALT = HYUNDAI_LIMITS(270, 2, 3); const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_ALT_2 = HYUNDAI_LIMITS(170, 2, 3); - const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_CAN_CANFD_BLENDED = HYUNDAI_LIMITS(404, 2, 3); + const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_CAN_CANFD_BLENDED = HYUNDAI_LIMITS(485, 2, 3); bool tx = true; @@ -290,7 +291,9 @@ static bool hyundai_tx_hook(const CANPacket_t *msg) { int desired_torque = ((GET_BYTES(msg, 0, 4) >> 16) & 0x7ffU) - 1024U; bool steer_req = GET_BIT(msg, 27U); - const TorqueSteeringLimits limits = hyundai_can_canfd_blended ? HYUNDAI_STEERING_LIMITS_CAN_CANFD_BLENDED : + const bool hyundai_g90_limits = hyundai_has_lda_button && hyundai_aol_lkas_on_engage; // G90 path sets both bits + const TorqueSteeringLimits limits = hyundai_g90_limits ? HYUNDAI_STEERING_LIMITS_G90 : + hyundai_can_canfd_blended ? HYUNDAI_STEERING_LIMITS_CAN_CANFD_BLENDED : hyundai_alt_limits_2 ? HYUNDAI_STEERING_LIMITS_ALT_2 : hyundai_alt_limits ? HYUNDAI_STEERING_LIMITS_ALT : HYUNDAI_STEERING_LIMITS; diff --git a/opendbc_repo/opendbc/safety/tests/test_hyundai.py b/opendbc_repo/opendbc/safety/tests/test_hyundai.py index b4ade671f..0c7a8cc81 100755 --- a/opendbc_repo/opendbc/safety/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/safety/tests/test_hyundai.py @@ -151,6 +151,17 @@ class TestHyundaiSafetyAltLimits2(TestHyundaiSafety): self.safety.init_tests() +class TestHyundaiSafetyGenesisG90(TestHyundaiSafety): + MAX_TORQUE_LOOKUP = [0], [461] + + def setUp(self): + self.packer = CANPackerSafety("hyundai_kia_generic") + self.safety = libsafety_py.libsafety + self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, + HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON | HyundaiStarPilotSafetyFlags.AOL_LKAS_ON_ENGAGE) + self.safety.init_tests() + + class TestHyundaiSafetyCameraSCC(TestHyundaiSafety): BUTTONS_TX_BUS = 2 # tx on 2, rx on 0 SCC_BUS = 2 # rx on 2 @@ -213,7 +224,7 @@ class TestHyundaiCanCanfdBlendedSafety(TestHyundaiSafety): FWD_BLACKLISTED_ADDRS = {2: [0x340, 0x485, 0x364]} MAX_RATE_UP = 2 MAX_RATE_DOWN = 3 - MAX_TORQUE_LOOKUP = [0], [404] + MAX_TORQUE_LOOKUP = [0], [485] def setUp(self): self.packer = CANPackerSafety("hyundai_palisade_2023_generated") diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index c205ff244..7a74c5d97 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -377,6 +377,8 @@ class StarPilotVariables: self.staging_branch = branch == "StarPilot-Staging" self.testing_branch = branch == "StarPilot-Testing" self.vetting_branch = branch == "StarPilot-Vetting" + self.force_no_uploads = True + toggle.force_no_uploads = self.force_no_uploads self.frogs_go_moo = FROGS_GO_MOO_PATH.is_file() # Development/vetting branches are no longer gated into dashcam mode. @@ -833,8 +835,8 @@ class StarPilotVariables: # Keep force-onroad desktop simulations from polluting logs, but never disable # loggerd/encoderd on real devices because that breaks route continuity/uploads. toggle.no_logging = self.get_value("NoLogging", condition=device_management and not self.vetting_branch) or (toggle.force_onroad and HARDWARE.get_device_type() == "pc") - toggle.no_uploads = self.get_value("NoUploads", condition=device_management and not self.vetting_branch) - toggle.no_onroad_uploads = self.get_value("DisableOnroadUploads", condition=toggle.no_uploads) + toggle.no_uploads = self.force_no_uploads or self.get_value("NoUploads", condition=device_management and not self.vetting_branch) + toggle.no_onroad_uploads = (not self.force_no_uploads) and self.get_value("DisableOnroadUploads", condition=toggle.no_uploads) toggle.nostalgia_mode = self.get_value("NostalgiaMode", condition=toggle.openpilot_longitudinal and toggle.car_model == HYUNDAI_CAR.HYUNDAI_IONIQ_6) toggle.remap_cancel_to_distance = self.get_value( diff --git a/system/manager/manager.py b/system/manager/manager.py index 6663c2042..5792cccbb 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -681,6 +681,13 @@ def manager_init() -> None: params.put_bool("IsReleaseBranch", build_metadata.release_channel) params.put("HardwareSerial", serial) + params.put_bool("NoUploads", True) + params_cache.put_bool("NoUploads", True) + params.put_bool("DisableOnroadUploads", False) + params_cache.put_bool("DisableOnroadUploads", False) + params.put_bool("AlwaysAllowUploads", False) + params_cache.put_bool("AlwaysAllowUploads", False) + # Branch migration: rename legacy Bolt fingerprint persisted in CarParams. migrate_legacy_bolt_fingerprint(params) diff --git a/system/manager/process_config.py b/system/manager/process_config.py index 2c56c7b11..479c23905 100644 --- a/system/manager/process_config.py +++ b/system/manager/process_config.py @@ -72,6 +72,8 @@ def allow_logging(started: bool, params: Params, CP: car.CarParams, starpilot_to return not starpilot_toggles.no_logging def allow_uploads(started: bool, params: Params, CP: car.CarParams, starpilot_toggles: SimpleNamespace) -> bool: + if getattr(starpilot_toggles, "force_no_uploads", False): + return False return params.get_bool("AlwaysAllowUploads") or not starpilot_toggles.no_uploads or starpilot_toggles.no_onroad_uploads def run_speed_limit_filler(started: bool, params: Params, CP: car.CarParams, starpilot_toggles: SimpleNamespace) -> bool: