support both analog and digital clusters

pull/81/head
Jason Young 3 years ago
parent e5c50477ef
commit bfd4fb12eb
  1. 7
      selfdrive/car/volkswagen/carcontroller.py
  2. 6
      selfdrive/car/volkswagen/carstate.py
  3. 4
      selfdrive/car/volkswagen/volkswagencan.py

@ -77,9 +77,14 @@ class CarController():
acc_hold_type, stopping_distance, idx)) acc_hold_type, stopping_distance, idx))
if frame % P.ACC_HUD_STEP == 0: if frame % P.ACC_HUD_STEP == 0:
if lead_visible:
lead_distance = 512 if CS.digital_cluster_installed else 8 # TODO: look up actual distance to lead
else:
lead_distance = 0
idx = (frame / P.ACC_HUD_STEP) % 16 idx = (frame / P.ACC_HUD_STEP) % 16
can_sends.append(volkswagencan.create_mqb_acc_02_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, set_speed * CV.MS_TO_KPH, speed_visible, lead_distance,
idx)) idx))
can_sends.append(volkswagencan.create_mqb_acc_04_control(self.packer_pt, CANBUS.pt, CS.acc_04_stock_values, can_sends.append(volkswagencan.create_mqb_acc_04_control(self.packer_pt, CANBUS.pt, CS.acc_04_stock_values,
idx)) idx))

@ -16,6 +16,7 @@ class CarState(CarStateBase):
self.shifter_values = can_define.dv["EV_Gearshift"]["GearPosition"] self.shifter_values = can_define.dv["EV_Gearshift"]["GearPosition"]
self.hca_status_values = can_define.dv["LH_EPS_03"]["EPS_HCA_Status"] self.hca_status_values = can_define.dv["LH_EPS_03"]["EPS_HCA_Status"]
self.buttonStates = BUTTON_STATES.copy() self.buttonStates = BUTTON_STATES.copy()
self.digital_cluster_installed = False
def update(self, pt_cp, cam_cp, ext_cp, trans_type): def update(self, pt_cp, cam_cp, ext_cp, trans_type):
ret = car.CarState.new_message() ret = car.CarState.new_message()
@ -145,6 +146,9 @@ class CarState(CarStateBase):
# Additional safety checks performed in CarInterface. # Additional safety checks performed in CarInterface.
ret.espDisabled = pt_cp.vl["ESP_21"]["ESP_Tastung_passiv"] != 0 ret.espDisabled = pt_cp.vl["ESP_21"]["ESP_Tastung_passiv"] != 0
# Update misc car configuration/equipment info
self.digital_cluster_installed = bool(pt_cp.vl["Kombi_03"]["KBI_Variante"])
return ret return ret
@staticmethod @staticmethod
@ -180,6 +184,7 @@ class CarState(CarStateBase):
("ESP_Haltebestaetigung", "ESP_21"), # ESP hold confirmation ("ESP_Haltebestaetigung", "ESP_21"), # ESP hold confirmation
("KBI_MFA_v_Einheit_02", "Einheiten_01"), # MPH vs KMH speed display ("KBI_MFA_v_Einheit_02", "Einheiten_01"), # MPH vs KMH speed display
("KBI_Handbremse", "Kombi_01"), # Manual handbrake applied ("KBI_Handbremse", "Kombi_01"), # Manual handbrake applied
("KBI_Variante", "Kombi_03"), # Digital/full-screen instrument cluster installed
("TSK_Status", "TSK_06"), # ACC engagement status from drivetrain coordinator ("TSK_Status", "TSK_06"), # ACC engagement status from drivetrain coordinator
("GRA_Hauptschalter", "GRA_ACC_01"), # ACC button, on/off ("GRA_Hauptschalter", "GRA_ACC_01"), # ACC button, on/off
("GRA_Abbrechen", "GRA_ACC_01"), # ACC button, cancel ("GRA_Abbrechen", "GRA_ACC_01"), # ACC button, cancel
@ -210,6 +215,7 @@ class CarState(CarStateBase):
("Kombi_01", 2), # From J285 Instrument cluster ("Kombi_01", 2), # From J285 Instrument cluster
("Blinkmodi_02", 1), # From J519 BCM (sent at 1Hz when no lights active, 50Hz when active) ("Blinkmodi_02", 1), # From J519 BCM (sent at 1Hz when no lights active, 50Hz when active)
("Einheiten_01", 1), # From J??? not known if gateway, cluster, or BCM ("Einheiten_01", 1), # From J??? not known if gateway, cluster, or BCM
("Kombi_03", 1), # From J285 instrument cluster
] ]
if CP.transmissionType == TransmissionType.automatic: if CP.transmissionType == TransmissionType.automatic:

@ -48,13 +48,13 @@ def create_mqb_acc_buttons_control(packer, bus, buttonStatesToSend, CS, idx):
} }
return packer.make_can_msg("GRA_ACC_01", bus, values, 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): def create_mqb_acc_02_control(packer, bus, acc_status, set_speed, speed_visible, lead_distance, idx):
values = { values = {
"ACC_Status_Anzeige": 3 if acc_status == 5 else acc_status, "ACC_Status_Anzeige": 3 if acc_status == 5 else acc_status,
"ACC_Wunschgeschw": 327.36 if not speed_visible else set_speed, "ACC_Wunschgeschw": 327.36 if not speed_visible else set_speed,
"ACC_Gesetzte_Zeitluecke": 3, "ACC_Gesetzte_Zeitluecke": 3,
"ACC_Display_Prio": 3, "ACC_Display_Prio": 3,
"ACC_Abstandsindex": 637 if lead_visible else 0, "ACC_Abstandsindex": lead_distance,
} }
return packer.make_can_msg("ACC_02", bus, values, idx) return packer.make_can_msg("ACC_02", bus, values, idx)

Loading…
Cancel
Save