diff --git a/common/params_keys.h b/common/params_keys.h index 2ddeff6fe..538d6d149 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -144,4 +144,5 @@ inline static std::unordered_map keys = { {"dp_device_auto_shutdown_in", PERSISTENT}, {"dp_ui_radar_tracks", PERSISTENT}, {"dp_device_ip", CLEAR_ON_MANAGER_START}, + {"dp_vag_a0_sng", PERSISTENT}, }; diff --git a/opendbc_repo/opendbc/car/structs.py b/opendbc_repo/opendbc/car/structs.py index 7389cec8b..0c8c93067 100644 --- a/opendbc_repo/opendbc/car/structs.py +++ b/opendbc_repo/opendbc/car/structs.py @@ -22,4 +22,5 @@ CarParamsT = capnp.lib.capnp._StructModule class DPFlags: LateralALKA = 1 ExtRadar = 2 + VagA0SnG = 2 ** 2 pass diff --git a/opendbc_repo/opendbc/car/volkswagen/carcontroller.py b/opendbc_repo/opendbc/car/volkswagen/carcontroller.py index e2a4fe86d..39ef9a9a5 100644 --- a/opendbc_repo/opendbc/car/volkswagen/carcontroller.py +++ b/opendbc_repo/opendbc/car/volkswagen/carcontroller.py @@ -111,11 +111,22 @@ class CarController(CarControllerBase): lead_distance, hud_control.leadDistanceBars)) # **** Stock ACC Button Controls **************************************** # + if self.CP.flags & VolkswagenFlags.A0SnG: + if self.CP.pcmCruise and CS.gra_stock_values["COUNTER"] != self.gra_acc_counter_last: + standing_resume_spam = CS.out.standstill + spam_window = self.frame % 50 < 15 - gra_send_ready = self.CP.pcmCruise and CS.gra_stock_values["COUNTER"] != self.gra_acc_counter_last - if gra_send_ready and (CC.cruiseControl.cancel or CC.cruiseControl.resume): - can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, self.ext_bus, CS.gra_stock_values, - cancel=CC.cruiseControl.cancel, resume=CC.cruiseControl.resume)) + send_cancel = CC.cruiseControl.cancel + send_resume = CC.cruiseControl.resume or (standing_resume_spam and spam_window) + + if send_cancel or send_resume: + can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, self.ext_bus, CS.gra_stock_values, + cancel=send_cancel, resume=send_resume)) + else: + gra_send_ready = self.CP.pcmCruise and CS.gra_stock_values["COUNTER"] != self.gra_acc_counter_last + if gra_send_ready and (CC.cruiseControl.cancel or CC.cruiseControl.resume): + can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, self.ext_bus, CS.gra_stock_values, + cancel=CC.cruiseControl.cancel, resume=CC.cruiseControl.resume)) new_actuators = actuators.as_builder() new_actuators.torque = self.apply_torque_last / self.CCP.STEER_MAX diff --git a/opendbc_repo/opendbc/car/volkswagen/interface.py b/opendbc_repo/opendbc/car/volkswagen/interface.py index 92e5a9baf..1c2e4eb3a 100644 --- a/opendbc_repo/opendbc/car/volkswagen/interface.py +++ b/opendbc_repo/opendbc/car/volkswagen/interface.py @@ -87,4 +87,7 @@ class CarInterface(CarInterfaceBase): ret.vEgoStopping = 0.5 ret.autoResumeSng = ret.minEnableSpeed == -1 + if dp_params & structs.DPFlags.VagA0SnG: + ret.flags |= VolkswagenFlags.A0SnG.value + return ret diff --git a/opendbc_repo/opendbc/car/volkswagen/values.py b/opendbc_repo/opendbc/car/volkswagen/values.py index 7b4e5a74c..75408ef4a 100644 --- a/opendbc_repo/opendbc/car/volkswagen/values.py +++ b/opendbc_repo/opendbc/car/volkswagen/values.py @@ -144,6 +144,7 @@ class VolkswagenFlags(IntFlag): # Static flags PQ = 2 + A0SnG = 2 ** 2 @dataclass class VolkswagenMQBPlatformConfig(PlatformConfig): diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index fda553b24..50fb3e608 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -105,6 +105,9 @@ class Car: if self.params.get_bool("dp_lat_alka"): dp_params |= structs.DPFlags.LateralALKA + if self.params.get_bool("dp_vag_a0_sng"): + dp_params |= structs.DPFlags.VagA0SnG + self.CI = get_car(*self.can_callbacks, obd_callback(self.params), alpha_long_allowed, is_release, 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 f9d2b8b72..05f9eaea0 100644 --- a/selfdrive/ui/qt/offroad/dp_panel.cc +++ b/selfdrive/ui/qt/offroad/dp_panel.cc @@ -40,6 +40,11 @@ void DPPanel::add_vag_toggles() { QString::fromUtf8("🐉 ") + tr("VW / Audi / Skoda"), "", }, + { + "dp_vag_a0_sng", + tr("Enable MQB A0 SnG Mod"), + "", + }, }; QWidget *label = nullptr; diff --git a/system/manager/manager.py b/system/manager/manager.py index 2cf6debc6..795beea31 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -61,6 +61,7 @@ def manager_init() -> None: ("dp_lon_no_gas_gating", "0"), ("dp_device_auto_shutdown_in", "-5"), ("dp_ui_radar_tracks", "0"), + ("dp_vag_a0_sng", "0"), ] if params.get_bool("RecordFrontLock"):