diff --git a/launch_env.sh b/launch_env.sh index 79e9cf9ee..d710cf7cd 100755 --- a/launch_env.sh +++ b/launch_env.sh @@ -21,7 +21,7 @@ fi export QCOM_PRIORITY=12 if [ -z "$AGNOS_VERSION" ]; then - export AGNOS_VERSION="19.6.16" + export AGNOS_VERSION="19.6.17" fi if [ -z "$AGNOS_ACCEPTED_VERSIONS" ]; then diff --git a/opendbc_repo/opendbc/car/hyundai/carcontroller.py b/opendbc_repo/opendbc/car/hyundai/carcontroller.py index f605f1744..65d96e6a5 100644 --- a/opendbc_repo/opendbc/car/hyundai/carcontroller.py +++ b/opendbc_repo/opendbc/car/hyundai/carcontroller.py @@ -8,9 +8,9 @@ from opendbc.car.lateral import apply_driver_steer_torque_limits, apply_steer_an from opendbc.car.common.conversions import Conversions as CV from opendbc.car.hyundai import hyundaicanfd, hyundaican from opendbc.car.hyundai.hyundaicanfd import CanBus -from opendbc.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CAR, CANFD_ANGLE_LONGITUDINAL_CAR, \ +from opendbc.car.hyundai.values import HyundaiFlags, HyundaiStarPilotFlags, Buttons, CarControllerParams, CAR, CANFD_ANGLE_LONGITUDINAL_CAR, \ CANFD_RADAR_LIVE_LONGITUDINAL_CAR, CANFD_ALT_BUTTONS_RESUME_CAR, kia_ev6_gt_line_longitudinal_tuning, \ - KIA_EV6_GT_LINE_LONG_TUNING_TESTING_GROUND_ID + KIA_EV6_GT_LINE_LONG_TUNING_TESTING_GROUND_ID, CANFD_DAW_SUPPRESSION_CAR from opendbc.car.interfaces import CarControllerBase from opendbc.car.vehicle_model import VehicleModel from openpilot.common.params import Params @@ -777,6 +777,8 @@ class CarController(CarControllerBase): left_lane_warning, right_lane_warning, lka_icon)) if self.CP.carFingerprint == CAR.KIA_RAY_EV: self._ray_lkas11_active = True + if getattr(self.FPCP, "flags", 0) & HyundaiStarPilotFlags.HAS_LKAS12: + can_sends.append(hyundaican.create_lkas12(self.packer, CS.lkas12)) # Button messages if not self.long_active_ecu: @@ -892,6 +894,9 @@ class CarController(CarControllerBase): can_sends.extend(hyundaicanfd.create_inactive_angle_steering_messages(self.packer, self.CAN, inactive_steering_angle)) + if self.CP.carFingerprint in CANFD_DAW_SUPPRESSION_CAR and getattr(CS, "stock_daw_msg", None): + can_sends.append(hyundaicanfd.create_suppress_daw(self.packer, self.CAN, CS.stock_daw_msg)) + # prevent LFA from activating on LKA steering cars by sending "no lane lines detected" to ADAS ECU suppress_lfa = bool(lka_steering) if angle_lkas_alt: diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index d0ae59300..e1d9c5ace 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -10,6 +10,7 @@ from opendbc.car.hyundai.hyundaicanfd import CanBus from opendbc.car.hyundai.values import HyundaiFlags, HyundaiStarPilotFlags, HyundaiStarPilotSafetyFlags, CAR, DBC, Buttons, CarControllerParams, \ CANFD_ANGLE_LONGITUDINAL_CAR, CANFD_CORNER_RADAR_BSM_CAR, \ CANFD_ALT_BUTTONS_RESUME_CAR, \ + CANFD_DAW_SUPPRESSION_CAR, \ hyundai_cancel_button_enables_cruise, ALT_BUS_LDA_BUTTON_CARS, ALT_BUS_LDA_BUTTON_SWL_STAT_CARS from opendbc.car.interfaces import CarStateBase @@ -142,6 +143,8 @@ class CarState(CarStateBase): self.msg_364 = {} self.lfa_block_msg = {} self.stock_lkas_msg = {} + self.lkas12 = {} + self.stock_daw_msg = {} self.stock_lfa_msg = {} self.stock_lfahda_cluster_msg = {} self.stock_camera_lead_visible = False @@ -440,6 +443,8 @@ class CarState(CarStateBase): self.lkas11 = {} else: self.lkas11 = copy.copy(cp_cam.vl["LKAS11"]) + if getattr(self.FPCP, "flags", 0) & HyundaiStarPilotFlags.HAS_LKAS12: + self.lkas12 = copy.copy(cp_cam.vl["LKAS12"]) self.clu11 = copy.copy(cp.vl["CLU11"]) self.steer_state = cp.vl["MDPS12"]["CF_Mdps_ToiActive"] # 0 NOT ACTIVE, 1 ACTIVE if not self.main_cruise_tracking: @@ -610,6 +615,8 @@ class CarState(CarStateBase): if self.CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR and cp.ts_nanos["FR_CMR_01_10ms"]["FR_CMR_Crc1Val"] > 0: hba_icon = int(cp.vl["FR_CMR_01_10ms"]["HBA_IndLmpReq"]) self.hba_icon = hba_icon if hba_icon in (1, 2) else 0 + if self.CP.carFingerprint in CANFD_DAW_SUPPRESSION_CAR and cp.ts_nanos["FR_CMR_01_10ms"]["FR_CMR_Crc1Val"] > 0: + self.stock_daw_msg = copy.copy(cp.vl["FR_CMR_01_10ms"]) if cp.ts_nanos["BLINKER_STALKS"]["CHECKSUM_MAYBE"] > 0: self.stock_blinker_stalks_ts = cp.ts_nanos["BLINKER_STALKS"]["CHECKSUM_MAYBE"] @@ -673,7 +680,7 @@ class CarState(CarStateBase): ] if CP.enableBsm: msgs.append(("BLINDSPOTS_REAR_CORNERS", 0)) - if CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR: + if CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR | CANFD_DAW_SUPPRESSION_CAR: msgs.append(("BLINDSPOTS_FRONT_CORNER_2", 0)) msgs.append(("FR_CMR_01_10ms", 0)) if CP.flags & HyundaiFlags.EV: @@ -730,7 +737,7 @@ class CarState(CarStateBase): parsers = { Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], msgs, 0), - Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 2), + Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [("LKAS12", 0)], 2), } if CP.carFingerprint in ALT_BUS_LDA_BUTTON_CARS: parsers[Bus.alt] = CANParser(DBC[CP.carFingerprint][Bus.pt], [("CLU13", 0)], 1) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaican.py b/opendbc_repo/opendbc/car/hyundai/hyundaican.py index 2e31d4af4..0eaeffe88 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaican.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaican.py @@ -106,6 +106,19 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, return packer.make_can_msg("LKAS11", 0, values) +def create_lkas12(packer, lkas12): + values = {s: lkas12[s] for s in ( + "CF_Lkas_TsrSlifOpt", + "CF_LkasTsrStatus", + "CF_Lkas_TsrSpeed_Display_Clu", + "CF_LkasTsrSpeed_Display_Navi", + "CF_Lkas_TsrAddinfo_Display", + "CF_Lkas_Daw_USM", + ) if s in lkas12} + values["CF_LkasDawStatus"] = 0 + return packer.make_can_msg("LKAS12", 0, values) + + def create_checksum_can_canfd_blended(packer, bus, addr, values): dat = packer.make_can_msg(addr, bus, values)[1] return hyundai_checksum(dat[1:8]) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index f93f62c41..121999adf 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -243,6 +243,12 @@ def create_suppress_lfa(packer, CAN, lfa_block_msg, lka_steering_alt): return packer.make_can_msg(suppress_msg, CAN.ACAN, values) +def create_suppress_daw(packer, CAN, daw_msg): + values = copy.copy(daw_msg) + values["DAW_WrnMsgSta"] = 0 + return packer.make_can_msg("FR_CMR_01_10ms", CAN.ECAN, values) + + def create_buttons(packer, CP, CAN, cnt, btn=0, base_values=None, left_paddle=False, right_paddle=False): values = {k: v for k, v in base_values.items() if k not in ("CHECKSUM", "_CHECKSUM", "COUNTER")} if base_values else {} values.update({ diff --git a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py index 8ea963d0d..b91a81e6f 100644 --- a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py @@ -570,6 +570,41 @@ class TestHyundaiFingerprint: assert not (CP.flags & HyundaiFlags.CANFD_LKA_STEERING) assert bool(CP.flags & HyundaiFlags.CANFD_CAMERA_SCC) + def test_ioniq_6_filters_stock_driver_attention_warning(self): + CP = CarParams.new_message() + CP.carFingerprint = CAR.HYUNDAI_IONIQ_6 + CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.EV | HyundaiFlags.CANFD_LKA_STEERING | + HyundaiFlags.CANFD_LKA_STEERING_ALT) + CP.openpilotLongitudinalControl = False + + controller = CarController(DBC[CP.carFingerprint], CP) + controller.frame = 1 + can_bus = CanBus(CP) + parser = CANParser(DBC[CP.carFingerprint][Bus.pt], [("FR_CMR_01_10ms", 0)], can_bus.ECAN) + stock_daw_msg = { + "FR_CMR_AlvCnt1Val": 7, + "DAW_SysSta": 6, + "DAW_WrnMsgSta": 1, + "HBA_IndLmpReq": 2, + } + cc = SimpleNamespace(enabled=True, latActive=True, + actuators=SimpleNamespace(longControlState=LongCtrlState.off), + leftBlinker=False, rightBlinker=False, hudControl=SimpleNamespace()) + cs = SimpleNamespace(stock_lfa_msg=None, stock_lkas_msg={}, lfa_block_msg={}, stock_daw_msg=stock_daw_msg, + out=SimpleNamespace(steeringAngleDeg=0.0, gearShifter=structs.CarState.GearShifter.drive)) + + msgs = controller.create_canfd_msgs(0, True, 0.0, 0.0, 0.0, 0.0, False, cc.hudControl, cs, cc, + get_test_toggles(), lka_icon=2, lfa_icon=2) + daw_msgs = [msg for msg in msgs if msg[0] == 0x11A] + assert len(daw_msgs) == 1 + + parser.update([(1, daw_msgs)]) + + assert parser.can_valid + assert parser.vl["FR_CMR_01_10ms"]["DAW_SysSta"] == 6 + assert parser.vl["FR_CMR_01_10ms"]["DAW_WrnMsgSta"] == 0 + assert parser.vl["FR_CMR_01_10ms"]["HBA_IndLmpReq"] == 2 + def test_ioniq_6_clears_torque_with_inactive_safety_request(self): ioniq_6_cp = SimpleNamespace(carFingerprint=CAR.HYUNDAI_IONIQ_6) other_cp = SimpleNamespace(carFingerprint=CAR.KIA_EV6) @@ -827,6 +862,37 @@ class TestHyundaiFingerprint: palisade_2023 = CarInterface.get_params(CAR.HYUNDAI_PALISADE_2023, gen_empty_fingerprint(), [], True, False, False, None) assert palisade_2023.safetyConfigs[-1].safetyParam & HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON + def test_lkas12_da_warning_is_filtered_for_camera_fingerprint(self): + fingerprint = gen_empty_fingerprint() + fingerprint[2][0x53E] = 6 + CP = CarInterface.get_params(CAR.HYUNDAI_SONATA_HYBRID, fingerprint, [], False, False, False, None) + FPCP = CarInterface.get_starpilot_params(CAR.HYUNDAI_SONATA_HYBRID, fingerprint, [], CP, get_test_toggles()) + assert FPCP.flags & HyundaiStarPilotFlags.HAS_LKAS12 + + packer = CANPacker(DBC[CP.carFingerprint][Bus.pt]) + stock = { + "CF_Lkas_TsrSlifOpt": 3, + "CF_LkasTsrStatus": 2, + "CF_Lkas_TsrSpeed_Display_Clu": 80, + "CF_LkasTsrSpeed_Display_Navi": 70, + "CF_Lkas_TsrAddinfo_Display": 1, + "CF_Lkas_Daw_USM": 0, + "CF_LkasDawStatus": 1, + } + msg = hyundaican.create_lkas12(packer, stock) + parser = CANParser(DBC[CP.carFingerprint][Bus.pt], [("LKAS12", 0)], 0) + parser.update([(1, [msg])]) + + assert parser.can_valid + assert parser.vl["LKAS12"]["CF_LkasDawStatus"] == 0 + assert parser.vl["LKAS12"]["CF_Lkas_TsrSpeed_Display_Clu"] == 80 + + no_lkas12 = CarInterface.get_params(CAR.HYUNDAI_SONATA_HYBRID, gen_empty_fingerprint(), [], False, False, False, None) + no_lkas12_fpcp = CarInterface.get_starpilot_params( + CAR.HYUNDAI_SONATA_HYBRID, gen_empty_fingerprint(), [], no_lkas12, get_test_toggles(), + ) + assert not (no_lkas12_fpcp.flags & HyundaiStarPilotFlags.HAS_LKAS12) + def test_carnival_lka_button_does_not_enable_angle_steering_safety(self): fingerprint = gen_empty_fingerprint() fingerprint[0][0x391] = 8 diff --git a/opendbc_repo/opendbc/car/hyundai/values.py b/opendbc_repo/opendbc/car/hyundai/values.py index c46768eca..38e0dbe5b 100644 --- a/opendbc_repo/opendbc/car/hyundai/values.py +++ b/opendbc_repo/opendbc/car/hyundai/values.py @@ -124,6 +124,7 @@ class HyundaiStarPilotSafetyFlags(IntFlag): class HyundaiStarPilotFlags(IntFlag): SPEED_LIMIT_AVAILABLE = 1 MAIN_CRUISE_STATE_TRACKING = 2 ** 2 + HAS_LKAS12 = 2 ** 9 class HyundaiFlags(IntFlag): @@ -1203,6 +1204,7 @@ CANFD_SECURITYACCESS_CAR = { } CANFD_UNSUPPORTED_LONGITUDINAL_CAR = CAR.with_flags(HyundaiFlags.CANFD_NO_RADAR_DISABLE) - CANFD_SECURITYACCESS_CAR # TODO: merge with UNSUPPORTED_LONGITUDINAL_CAR CANFD_ANGLE_LONGITUDINAL_CAR = {CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE} +CANFD_DAW_SUPPRESSION_CAR = {CAR.HYUNDAI_IONIQ_6} CANFD_ALT_BUTTONS_RESUME_CAR = {CAR.KIA_CARNIVAL_2025, CAR.KIA_CARNIVAL_HEV_4TH_GEN} CANFD_CORNER_RADAR_BSM_CAR = {CAR.HYUNDAI_IONIQ_6, CAR.HYUNDAI_IONIQ_5_PE, CAR.KIA_EV9} CANFD_RADAR_LIVE_LONGITUDINAL_CAR = { diff --git a/opendbc_repo/opendbc/car/interfaces.py b/opendbc_repo/opendbc/car/interfaces.py index 646914924..39198c556 100644 --- a/opendbc_repo/opendbc/car/interfaces.py +++ b/opendbc_repo/opendbc/car/interfaces.py @@ -240,6 +240,9 @@ class CarInterfaceBase(ABC): if 0x1FA in fingerprint[CAN.ECAN]: fp_ret.flags |= HyundaiStarPilotFlags.SPEED_LIMIT_AVAILABLE.value + if not (CP.flags & HyundaiFlags.CANFD) and 0x53E in fingerprint[2]: + fp_ret.flags |= HyundaiStarPilotFlags.HAS_LKAS12.value + fp_ret.redneckCruiseAvailable = bool(CP.flags & HyundaiFlags.NON_SCC) and not bool(CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS) if fp_ret.redneckCruiseAvailable and params.get_bool("RedneckCruise"): fp_ret.pcmCruiseSpeed = False diff --git a/opendbc_repo/opendbc/safety/modes/hyundai.h b/opendbc_repo/opendbc/safety/modes/hyundai.h index b2de4b5d7..4a3e7af72 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai.h @@ -29,6 +29,7 @@ const LongitudinalLimits HYUNDAI_LONG_LIMITS = { {0x340, 0, 8, .check_relay = true}, /* LKAS11 Bus 0 */ \ {0x4F1, scc_bus, 4, .check_relay = false}, /* CLU11 Bus 0 (radar-SCC) or 2 (camera-SCC) */ \ {0x485, 0, (can_refresh) ? 8 : 4, .check_relay = true}, /* LFAHDA_MFC Bus 0 */ \ + {0x53E, 0, 6, .check_relay = false}, /* LKAS12 replacement after camera advertises it */ \ #define HYUNDAI_LONG_COMMON_TX_MSGS(scc_bus, can_refresh) \ HYUNDAI_COMMON_TX_MSGS(scc_bus, can_refresh) \ @@ -140,6 +141,12 @@ static uint32_t hyundai_get_checksum(const CANPacket_t *msg) { return chksum; } +static void hyundai_rx_all_hook(const CANPacket_t *msg) { + if ((msg->addr == 0x53EU) && (msg->bus == 2U) && (GET_LEN(msg) == 6U)) { + hyundai_has_lkas12 = true; + } +} + static uint32_t hyundai_compute_checksum(const CANPacket_t *msg) { uint8_t chksum = 0; if (msg->addr == 0x386U) { @@ -284,6 +291,10 @@ static bool hyundai_tx_hook(const CANPacket_t *msg) { bool tx = true; + if ((msg->addr == 0x53EU) && !hyundai_has_lkas12) { + tx = false; + } + // FCA11: Block any potential actuation. The blended HDA II layout uses // different static fields, but its explicit AEB/FCA request bits stay zero. if (msg->addr == 0x38DU) { @@ -695,6 +706,7 @@ static safety_config hyundai_legacy_init(uint16_t param) { const safety_hooks hyundai_hooks = { .init = hyundai_init, .rx = hyundai_rx_hook, + .rx_all = hyundai_rx_all_hook, .tx = hyundai_tx_hook, .get_counter = hyundai_get_counter, .get_checksum = hyundai_get_checksum, @@ -704,6 +716,7 @@ const safety_hooks hyundai_hooks = { const safety_hooks hyundai_legacy_hooks = { .init = hyundai_legacy_init, .rx = hyundai_rx_hook, + .rx_all = hyundai_rx_all_hook, .tx = hyundai_tx_hook, .get_counter = hyundai_get_counter, .get_checksum = hyundai_get_checksum, diff --git a/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h b/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h index c47ff06f0..f88af7bd6 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h @@ -16,6 +16,7 @@ #define HYUNDAI_CANFD_LKA_STEERING_ALT_COMMON_TX_MSGS(a_can, e_can) \ HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(e_can) \ + {0x11A, e_can, 16, .check_relay = (e_can) == 0}, /* FR_CMR_01_10ms */ \ {0x110, a_can, 32, .check_relay = (a_can) == 0, .disable_static_blocking = true}, /* LKAS_ALT */ \ {0x362, a_can, 32, .check_relay = (a_can) == 0, .disable_static_blocking = true}, /* CAM_0x362 */ \ diff --git a/opendbc_repo/opendbc/safety/modes/hyundai_common.h b/opendbc_repo/opendbc/safety/modes/hyundai_common.h index 460a92c53..965ace00d 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai_common.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai_common.h @@ -63,6 +63,9 @@ bool hyundai_cancel_button_enable = false; extern bool hyundai_can_refresh_msgs; bool hyundai_can_refresh_msgs = false; +extern bool hyundai_has_lkas12; +bool hyundai_has_lkas12 = false; + extern bool hyundai_elantra_hev_2024; bool hyundai_elantra_hev_2024 = false; @@ -106,6 +109,7 @@ void hyundai_common_init(uint16_t param) { hyundai_non_scc = GET_FLAG(param, HYUNDAI_PARAM_NON_SCC); hyundai_cancel_button_enable = GET_FLAG(param, HYUNDAI_PARAM_CANCEL_BTN_ENABLE); hyundai_can_refresh_msgs = GET_FLAG(param, HYUNDAI_PARAM_CAN_REFRESH_MSGS); + hyundai_has_lkas12 = false; hyundai_elantra_hev_2024 = hyundai_can_refresh_msgs && hyundai_hybrid_gas_signal && hyundai_camera_scc; hyundai_aol_main_lkas_sync = false; diff --git a/opendbc_repo/opendbc/safety/tests/test_hyundai.py b/opendbc_repo/opendbc/safety/tests/test_hyundai.py index 21bc06392..cfd4f6c7e 100755 --- a/opendbc_repo/opendbc/safety/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/safety/tests/test_hyundai.py @@ -427,6 +427,18 @@ def test_hyundai_starpilot_rx_sources(): safety.safety_rx_hook(libsafety_py.make_CANPacket(0x421, 0, bytes(8))) +def test_hyundai_lkas12_tx_requires_stock_camera_message(): + safety = libsafety_py.libsafety + assert safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0) == 0 + safety.init_tests() + + lkas12 = libsafety_py.make_CANPacket(0x53E, 0, bytes(6)) + assert not safety.safety_tx_hook(lkas12) + + safety.safety_rx_hook(libsafety_py.make_CANPacket(0x53E, 2, bytes(6))) + assert safety.safety_tx_hook(lkas12) + + class TestHyundaiLongitudinalSafety(HyundaiLongitudinalBase, TestHyundaiSafety): TX_MSGS = [[0x340, 0], [0x4F1, 0], [0x485, 0], [0x420, 0], [0x421, 0], [0x50A, 0], [0x389, 0], [0x4A2, 0], [0x38D, 0], [0x483, 0], [0x7D0, 0]] diff --git a/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py b/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py index c9400dece..03ef6bca7 100755 --- a/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py +++ b/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py @@ -568,7 +568,7 @@ class TestHyundaiCanfdLKASteeringEV(TestHyundaiCanfdBase): # TODO: Handle ICE and HEV configurations once we see cars that use the new messages class TestHyundaiCanfdLKASteeringAltEV(TestHyundaiCanfdBase): - TX_MSGS = [[0x110, 0], [0x1CF, 1], [0x362, 0]] + TX_MSGS = [[0x11A, 1], [0x110, 0], [0x1CF, 1], [0x362, 0]] RELAY_MALFUNCTION_ADDRS = {0: (0x110, 0x362)} # LKAS_ALT, CAM_0x362 FWD_BLACKLISTED_ADDRS = {2: [0x110, 0x362]} @@ -587,7 +587,7 @@ class TestHyundaiCanfdLKASteeringAltEV(TestHyundaiCanfdBase): class TestHyundaiCanfdLKASteeringAltButtonsICE(TestHyundaiCanfdLKASteeringAltEV): - TX_MSGS = [[0x110, 0], [0x1CF, 1], [0x1A0, 1], [0x362, 0]] + TX_MSGS = [[0x11A, 1], [0x110, 0], [0x1CF, 1], [0x1A0, 1], [0x362, 0]] GAS_MSG = ("ACCELERATOR_BRAKE_ALT", "ACCELERATOR_PEDAL_PRESSED") def setUp(self): @@ -691,7 +691,7 @@ class TestHyundaiCanfdLKASteeringLongEV(HyundaiLongitudinalBase, TestHyundaiCanf class TestHyundaiCanfdLKASteeringAltAngleLongEV(HyundaiLongitudinalBase, TestHyundaiCanfdAngleSteering): - TX_MSGS = [[0x110, 0], [0x1CF, 1], [0x362, 0], [0x51, 0], [0x100, 0], [0x730, 1], [0x12a, 1], [0x160, 1], + TX_MSGS = [[0x11A, 1], [0x110, 0], [0x1CF, 1], [0x362, 0], [0x51, 0], [0x100, 0], [0x730, 1], [0x12a, 1], [0x160, 1], [0x1ba, 1], [0x1e0, 1], [0x1e5, 1], [0x31a, 1], [0x3b5, 1], [0x3c1, 1], [0x1a0, 1], [0x1ea, 1], [0x200, 1], [0x345, 1], [0x1da, 1]] diff --git a/selfdrive/controls/lib/latcontrol_vehicle_tunes.py b/selfdrive/controls/lib/latcontrol_vehicle_tunes.py index 137fd3453..075ede4b8 100644 --- a/selfdrive/controls/lib/latcontrol_vehicle_tunes.py +++ b/selfdrive/controls/lib/latcontrol_vehicle_tunes.py @@ -253,12 +253,12 @@ GENESIS_G70_FRICTION_CENTER_LAT = 0.28 GENESIS_G70_FRICTION_CENTER_LAT_WIDTH = 0.10 GENESIS_G70_FRICTION_CALM_JERK = 0.35 GENESIS_G70_FRICTION_CALM_JERK_WIDTH = 0.10 -GENESIS_G70_FRICTION_JERK_DEADZONE_MAX = 0.36 +GENESIS_G70_FRICTION_JERK_DEADZONE_MAX = 0.39 GENESIS_G70_FRICTION_JERK_DEADZONE_LAT = 0.30 GENESIS_G70_FRICTION_JERK_DEADZONE_LAT_WIDTH = 0.08 GENESIS_G70_FRICTION_JERK_DEADZONE_SPEED = 12.0 GENESIS_G70_FRICTION_JERK_DEADZONE_SPEED_WIDTH = 3.5 -GENESIS_G70_CENTER_OUTPUT_TAPER_MAX = 0.20 +GENESIS_G70_CENTER_OUTPUT_TAPER_MAX = 0.22 GENESIS_G70_CENTER_OUTPUT_TAPER_LAT = 0.30 GENESIS_G70_CENTER_OUTPUT_TAPER_LAT_WIDTH = 0.10 GENESIS_G70_CENTER_OUTPUT_TAPER_SPEED = 18.0 @@ -289,10 +289,10 @@ GENESIS_G70_CURVE_UNWIND_LAT_WIDTH = 0.12 GENESIS_G70_CURVE_UNWIND_JERK = 0.08 GENESIS_G70_CURVE_UNWIND_JERK_WIDTH = 0.08 GENESIS_G70_UNWIND_FF_REDUCTION_MAX = 0.28 -GENESIS_G70_UNWIND_FF_OVERSHOOT = 0.16 -GENESIS_G70_UNWIND_FF_OVERSHOOT_WIDTH = 0.16 +GENESIS_G70_UNWIND_FF_OVERSHOOT = 0.18 +GENESIS_G70_UNWIND_FF_OVERSHOOT_WIDTH = 0.20 GENESIS_G70_UNWIND_FF_JERK = 0.10 -GENESIS_G70_UNWIND_FF_JERK_WIDTH = 0.10 +GENESIS_G70_UNWIND_FF_JERK_WIDTH = 0.13 GENESIS_G70_UNWIND_FF_SPEED = 18.0 GENESIS_G70_UNWIND_FF_SPEED_WIDTH = 3.0 GENESIS_G70_HIGH_SPEED_ERROR_DAMPING_MAX = 0.15 diff --git a/system/hardware/tici/agnos.json b/system/hardware/tici/agnos.json index 7c90fd551..d32542e5c 100644 --- a/system/hardware/tici/agnos.json +++ b/system/hardware/tici/agnos.json @@ -56,30 +56,30 @@ }, { "name": "boot", - "url": "https://files.firestar.link/x/83cmdtzb2sav/boot25.img.xz", + "url": "https://files.firestar.link/x/wqn7kn631kdx/boot27.img.xz", "fallback_urls": [ - "https://files-east.firestar.link/x/o3r7dpay7yj5/boot25.img.xz" + "https://files-east.firestar.link/x/0zzizffpkz3a/boot27.img.xz" ], - "hash": "846d9e41fe0eb3543a01cb9a55a6bb540e4097dd838ada890674b654bd97a49a", - "hash_raw": "846d9e41fe0eb3543a01cb9a55a6bb540e4097dd838ada890674b654bd97a49a", - "size": 48302080, + "hash": "173208aec963fa35a6d9a92c7ca77c5f2b49797def096f3cce05591e78b12460", + "hash_raw": "173208aec963fa35a6d9a92c7ca77c5f2b49797def096f3cce05591e78b12460", + "size": 48781312, "sparse": false, "full_check": true, "has_ab": true, - "ondevice_hash": "846d9e41fe0eb3543a01cb9a55a6bb540e4097dd838ada890674b654bd97a49a" + "ondevice_hash": "bc253532027b4756c09ea235b6fd794641d115b6ddbc05c417d6eb89475a22b8" }, { "name": "system", - "url": "https://files.firestar.link/x/ser56g04xioj/system25.img.xz", + "url": "https://files.firestar.link/x/877rsvjzkmp8/system27.img.xz", "fallback_urls": [ - "https://files-east.firestar.link/x/90fsutnuzy13/system25.img.xz" + "https://files-east.firestar.link/x/5ni1fkd2k4hg/system27.img.xz" ], - "hash": "f81ac06c0634ed0dadd5b4778f3b5052a2779d69669b7e70e21505c951ce6ccc", - "hash_raw": "f81ac06c0634ed0dadd5b4778f3b5052a2779d69669b7e70e21505c951ce6ccc", + "hash": "205dfc25b21eb236cefaabd081aa4ad6e15ccd1c9f9fc623ec29de0c1c70fb06", + "hash_raw": "6f204321089c7ec4bae2e8b10eda827c502e6b516e6095a3b659016b4a646d38", "size": 4718592000, - "sparse": false, + "sparse": true, "full_check": false, "has_ab": true, - "ondevice_hash": "f81ac06c0634ed0dadd5b4778f3b5052a2779d69669b7e70e21505c951ce6ccc" + "ondevice_hash": "a8edcedcf4e6fb2a9af2e723a54f763f1f542fb63742cd1efc913ed30035c237" } ]