diff --git a/common/params_keys.h b/common/params_keys.h index 35c274d0d..1dd306f58 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -141,4 +141,5 @@ inline static std::unordered_map keys = { {"dp_device_auto_shutdown_in", PERSISTENT}, {"dp_ui_radar_tracks", PERSISTENT}, {"dp_vag_a0_sng", PERSISTENT}, + {"dp_vag_pq_steering_patch", PERSISTENT}, }; diff --git a/opendbc_repo/opendbc/car/structs.py b/opendbc_repo/opendbc/car/structs.py index 0c8c93067..bcd03a1c7 100644 --- a/opendbc_repo/opendbc/car/structs.py +++ b/opendbc_repo/opendbc/car/structs.py @@ -23,4 +23,5 @@ class DPFlags: LateralALKA = 1 ExtRadar = 2 VagA0SnG = 2 ** 2 + VAGPQSteeringPatch = 2 ** 2 pass diff --git a/opendbc_repo/opendbc/car/volkswagen/carcontroller.py b/opendbc_repo/opendbc/car/volkswagen/carcontroller.py index 39ef9a9a5..a7ccc211b 100644 --- a/opendbc_repo/opendbc/car/volkswagen/carcontroller.py +++ b/opendbc_repo/opendbc/car/volkswagen/carcontroller.py @@ -24,6 +24,7 @@ class CarController(CarControllerBase): self.eps_timer_soft_disable_alert = False self.hca_frame_timer_running = 0 self.hca_frame_same_torque = 0 + self.dp_vag_pq_steering_patch = 7 if CP.flags & VolkswagenFlags.PQSteeringPatch else 5 def update(self, CC, CS, now_nanos): actuators = CC.actuators @@ -63,7 +64,7 @@ class CarController(CarControllerBase): self.eps_timer_soft_disable_alert = self.hca_frame_timer_running > self.CCP.STEER_TIME_ALERT / DT_CTRL self.apply_torque_last = apply_torque - can_sends.append(self.CCS.create_steering_control(self.packer_pt, CANBUS.pt, apply_torque, hca_enabled)) + can_sends.append(self.CCS.create_steering_control(self.packer_pt, CANBUS.pt, apply_torque, hca_enabled, self.dp_vag_pq_steering_patch)) if self.CP.flags & VolkswagenFlags.STOCK_HCA_PRESENT: # Pacify VW Emergency Assist driver inactivity detection by changing its view of driver steering input torque diff --git a/opendbc_repo/opendbc/car/volkswagen/interface.py b/opendbc_repo/opendbc/car/volkswagen/interface.py index 0c628a11e..08016f63c 100644 --- a/opendbc_repo/opendbc/car/volkswagen/interface.py +++ b/opendbc_repo/opendbc/car/volkswagen/interface.py @@ -90,4 +90,7 @@ class CarInterface(CarInterfaceBase): if dp_params & structs.DPFlags.VagA0SnG: ret.flags |= VolkswagenFlags.A0SnG.value + if ret.flags & VolkswagenFlags.PQ and dp_params & structs.DPFlags.VAGPQSteeringPatch: + ret.flags |= VolkswagenFlags.PQSteeringPatch.value + return ret diff --git a/opendbc_repo/opendbc/car/volkswagen/mqbcan.py b/opendbc_repo/opendbc/car/volkswagen/mqbcan.py index 4823d19bd..edff008e4 100644 --- a/opendbc_repo/opendbc/car/volkswagen/mqbcan.py +++ b/opendbc_repo/opendbc/car/volkswagen/mqbcan.py @@ -1,4 +1,4 @@ -def create_steering_control(packer, bus, apply_torque, lkas_enabled): +def create_steering_control(packer, bus, apply_torque, lkas_enabled, dp_vag_pq_steering_patch): values = { "HCA_01_Status_HCA": 5 if lkas_enabled else 3, "HCA_01_LM_Offset": abs(apply_torque), diff --git a/opendbc_repo/opendbc/car/volkswagen/pqcan.py b/opendbc_repo/opendbc/car/volkswagen/pqcan.py index a2f8a8b96..5e08f4b4c 100644 --- a/opendbc_repo/opendbc/car/volkswagen/pqcan.py +++ b/opendbc_repo/opendbc/car/volkswagen/pqcan.py @@ -1,8 +1,8 @@ -def create_steering_control(packer, bus, apply_torque, lkas_enabled): +def create_steering_control(packer, bus, apply_torque, lkas_enabled, dp_vag_pq_steering_patch = 5): values = { "LM_Offset": abs(apply_torque), "LM_OffSign": 1 if apply_torque < 0 else 0, - "HCA_Status": 5 if (lkas_enabled and apply_torque != 0) else 3, + "HCA_Status": dp_vag_pq_steering_patch if (lkas_enabled and apply_torque != 0) else 3, "Vib_Freq": 16, } diff --git a/opendbc_repo/opendbc/car/volkswagen/values.py b/opendbc_repo/opendbc/car/volkswagen/values.py index 9645c5bd1..d0ac1853b 100644 --- a/opendbc_repo/opendbc/car/volkswagen/values.py +++ b/opendbc_repo/opendbc/car/volkswagen/values.py @@ -145,6 +145,7 @@ class VolkswagenFlags(IntFlag): PQ = 2 A0SnG = 2 ** 2 + PQSteeringPatch = 2 ** 3 @dataclass class VolkswagenMQBPlatformConfig(PlatformConfig): diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index 45ccbcf0e..7cce7b7fb 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -105,6 +105,9 @@ class Car: if self.params.get_bool("dp_vag_a0_sng"): dp_params |= structs.DPFlags.VagA0SnG + if self.params.get_bool("dp_vag_pq_steering_patch"): + dp_params |= structs.DPFlags.VAGPQSteeringPatch + self.CI = get_car(*self.can_callbacks, obd_callback(self.params), experimental_long_allowed, num_pandas, dp_params, cached_params) self.RI = interfaces[self.CI.CP.carFingerprint].RadarInterface(self.CI.CP) self.CP = self.CI.CP diff --git a/selfdrive/ui/qt/offroad/dp_panel.cc b/selfdrive/ui/qt/offroad/dp_panel.cc index 75253b53b..547f4844f 100644 --- a/selfdrive/ui/qt/offroad/dp_panel.cc +++ b/selfdrive/ui/qt/offroad/dp_panel.cc @@ -45,6 +45,11 @@ void DPPanel::add_vag_toggles() { tr("Enable MQB A0 SnG Mod"), "", }, + { + "dp_vag_pq_steering_patch", + tr("PQ Steering Patch"), + "" + }, }; QWidget *label = nullptr; diff --git a/system/manager/manager.py b/system/manager/manager.py index a0019796c..4deb148e4 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -63,6 +63,7 @@ def manager_init() -> None: ("dp_device_auto_shutdown_in", "-5"), ("dp_ui_radar_tracks", "0"), ("dp_vag_a0_sng", "0"), + ("dp_vag_pq_steering_patch", "0"), ] if params.get_bool("RecordFrontLock"):