diff --git a/opendbc b/opendbc index f64f469451..c331be696a 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit f64f4694516c0cd0e792fe8663a2c556c0a4d652 +Subproject commit c331be696a7ae8b569efc0a580427fe0623186ed diff --git a/panda b/panda index ae9f23fdb1..76dc825ad8 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit ae9f23fdb1c49be6e478165f79c3ec7de2c0b3bb +Subproject commit 76dc825ad8329bdc3fff97583ad88a7af81c7e2e diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py index b80c6b2647..ef4370752a 100644 --- a/selfdrive/car/volkswagen/carcontroller.py +++ b/selfdrive/car/volkswagen/carcontroller.py @@ -77,8 +77,9 @@ class CarController(): if frame % P.ACC_HUD_STEP == 0: idx = (frame / P.ACC_HUD_STEP) % 16 - can_sends.append(volkswagencan.create_mqb_acc_hud_control(self.packer_pt, CANBUS.pt, CS.tsk_status, + can_sends.append(volkswagencan.create_mqb_acc_02_control(self.packer_pt, CANBUS.pt, CS.tsk_status, set_speed * CV.MS_TO_KPH, speed_visible, lead_visible, idx)) + can_sends.append(volkswagencan.create_mqb_acc_04_control(self.packer_pt, CANBUS.pt, CS.acc_04_stock_values)) # **** Steering Controls ************************************************ # diff --git a/selfdrive/car/volkswagen/carstate.py b/selfdrive/car/volkswagen/carstate.py index b6a799e36f..f74e86c6cb 100644 --- a/selfdrive/car/volkswagen/carstate.py +++ b/selfdrive/car/volkswagen/carstate.py @@ -95,13 +95,14 @@ class CarState(CarStateBase): ret.stockAeb = bool(ext_cp.vl["ACC_10"]["ANB_Teilbremsung_Freigabe"]) or bool(ext_cp.vl["ACC_10"]["ANB_Zielbremsung_Freigabe"]) # Update ACC radar status. + self.acc_04_stock_values = ext_cp.vl["ACC_04"] self.tsk_status = pt_cp.vl["TSK_06"]["TSK_Status"] if self.tsk_status == 2: # ACC okay and enabled, but not currently engaged ret.cruiseState.available = True ret.cruiseState.enabled = False elif self.tsk_status in [3, 4, 5]: - # ACC okay and enabled, currently regulating speed (3) or driver accel override (4) or overrun coast-down (5) + # ACC okay and enabled, currently regulating speed (3) or driver accel override (4) or brake only (5) ret.cruiseState.available = True ret.cruiseState.enabled = True else: @@ -263,12 +264,17 @@ class MqbExtraSignals: # Additional signal and message lists for optional or bus-portable controllers fwd_radar_signals = [ ("ACC_Wunschgeschw", "ACC_02", 0), # ACC set speed + ("ACC_Charisma_FahrPr", "ACC_04", 0), # Driving profile selection + ("ACC_Charisma_Status", "ACC_04", 0), # Driving profile status + ("ACC_Charisma_Umschaltung", "ACC_04", 0), # Driving profile switching + ("ACC_Texte_braking_guard","ACC_04",0), # Part of ACC driver alerts in instrument cluster ("AWV2_Freigabe", "ACC_10", 0), # FCW brake jerk release ("ANB_Teilbremsung_Freigabe", "ACC_10", 0), # AEB partial braking release ("ANB_Zielbremsung_Freigabe", "ACC_10", 0), # AEB target braking release ] fwd_radar_checks = [ ("ACC_10", 50), # From J428 ACC radar control module + ("ACC_04", 17), # From J428 ACC radar control module ("ACC_02", 17), # From J428 ACC radar control module ] bsm_radar_signals = [ diff --git a/selfdrive/car/volkswagen/volkswagencan.py b/selfdrive/car/volkswagen/volkswagencan.py index f7bd80072a..f1a1643986 100644 --- a/selfdrive/car/volkswagen/volkswagencan.py +++ b/selfdrive/car/volkswagen/volkswagencan.py @@ -48,6 +48,27 @@ def create_mqb_acc_buttons_control(packer, bus, buttonStatesToSend, CS, idx): } return packer.make_can_msg("GRA_ACC_01", bus, values, idx) + +def create_mqb_acc_02_control(packer, bus, acc_status, set_speed, speed_visible, lead_visible, idx): + values = { + "ACC_Status_Anzeige": acc_status, + "ACC_Wunschgeschw": 327.36 if not speed_visible else set_speed, + "ACC_Gesetzte_Zeitluecke": 3, + "ACC_Display_Prio": 3, + "ACC_Abstandsindex": 637 if lead_visible else 0, + } + + return packer.make_can_msg("ACC_02", bus, values, idx) + +def create_mqb_acc_04_control(packer, bus, acc_04_stock_values): + values = acc_04_stock_values.copy() + + # Suppress disengagement alert from stock radar when OP long is in use, but passthru FCW/AEB alerts + if values["ACC_Texte_braking_guard"] == 4: + values["ACC_Texte_braking_guard"] = 0 + + return packer.make_can_msg("ACC_04", bus, values) + def create_mqb_acc_06_control(packer, bus, enabled, acc_status, accel, acc_stopping, acc_starting, cb_pos, cb_neg, idx): values = { @@ -74,18 +95,7 @@ def create_mqb_acc_07_control(packer, bus, enabled, accel, acc_hold_request, acc "ACC_Hold_Type": acc_hold_type, "ACC_Hold_Release": acc_hold_release, "ACC_Accel_Secondary": accel+0.01 if enabled else 3.02, - "ACC_Accel_Primary": accel if enabled else 3.01, + "ACC_Accel_TSK": accel if enabled else 3.01, } return packer.make_can_msg("ACC_07", bus, values, idx) - -def create_mqb_acc_hud_control(packer, bus, acc_status, set_speed, speed_visible, lead_visible, idx): - values = { - "ACC_Status_Anzeige": acc_status, - "ACC_Wunschgeschw": 327.36 if not speed_visible else set_speed, - "ACC_Gesetzte_Zeitluecke": 3, - "ACC_Display_Prio": 3, - "ACC_Abstandsindex": 637 if lead_visible else 0, - } - - return packer.make_can_msg("ACC_02", bus, values, idx)