VW MLB: Get door state and gearshift position from PT CAN (#3255)

This commit is contained in:
Jason Young
2026-03-28 23:16:27 -07:00
committed by GitHub
parent c9f2ab30cc
commit 3cb9a2db15

View File

@@ -46,11 +46,12 @@ class CarState(CarStateBase):
pt_cp = can_parsers[Bus.pt]
cam_cp = can_parsers[Bus.cam]
ext_cp = pt_cp if self.CP.networkLocation == NetworkLocation.fwdCamera else cam_cp
alt_cp = can_parsers[Bus.alt]
if self.CP.flags & VolkswagenFlags.PQ:
return self.update_pq(pt_cp, cam_cp, ext_cp)
elif self.CP.flags & VolkswagenFlags.MLB:
return self.update_mlb(pt_cp, cam_cp, ext_cp)
return self.update_mlb(pt_cp, cam_cp, ext_cp, alt_cp)
ret = structs.CarState()
@@ -230,7 +231,7 @@ class CarState(CarStateBase):
self.frame += 1
return ret
def update_mlb(self, pt_cp, cam_cp, ext_cp) -> structs.CarState:
def update_mlb(self, pt_cp, cam_cp, ext_cp, alt_cp) -> structs.CarState:
ret = structs.CarState()
self.parse_wheel_speeds(ret,
@@ -241,7 +242,7 @@ class CarState(CarStateBase):
)
ret.gasPressed = pt_cp.vl["Motor_03"]["MO_Fahrpedalrohwert_01"] > 0
ret.gearShifter = self.parse_gear_shifter(self.CCP.shifter_values.get(pt_cp.vl["Getriebe_03"]["GE_Waehlhebel"], None))
ret.gearShifter = self.parse_gear_shifter(self.CCP.shifter_values.get(alt_cp.vl["Getriebe_03"]["GE_Waehlhebel"], None))
# ACC okay but disabled (1), ACC ready (2), a radar visibility or other fault/disruption (6 or 7)
# currently regulating speed (3), driver accel override (4), brake only (5)
@@ -263,10 +264,10 @@ class CarState(CarStateBase):
ret.rightBlinker = bool(pt_cp.vl["BCM"]["BLINKER_RIGHT"])
ret.seatbeltUnlatched = bool(pt_cp.vl["Airbag_01"]["AB_Gurtwarn_VF"])
ret.doorOpen = any([pt_cp.vl["Gateway_05"]["FT_Tuer_geoeffnet"],
pt_cp.vl["Gateway_05"]["BT_Tuer_geoeffnet"],
pt_cp.vl["Gateway_05"]["HL_Tuer_geoeffnet"],
pt_cp.vl["Gateway_05"]["HR_Tuer_geoeffnet"]])
ret.doorOpen = any([alt_cp.vl["Gateway_05"]["FT_Tuer_geoeffnet"],
alt_cp.vl["Gateway_05"]["BT_Tuer_geoeffnet"],
alt_cp.vl["Gateway_05"]["HL_Tuer_geoeffnet"],
alt_cp.vl["Gateway_05"]["HR_Tuer_geoeffnet"]])
# Consume blind-spot monitoring info/warning LED states, if available.
# Infostufe: BSM LED on, Warnung: BSM LED flashing
@@ -317,7 +318,7 @@ class CarState(CarStateBase):
return CarState.get_can_parsers_pq(CP)
# manually configure some optional and variable-rate/edge-triggered messages
pt_messages, cam_messages = [], []
pt_messages, cam_messages, alt_messages = [], [], []
if not CP.flags & VolkswagenFlags.MLB:
pt_messages += [
@@ -331,6 +332,7 @@ class CarState(CarStateBase):
return {
Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], pt_messages, CanBus(CP).pt),
Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], cam_messages, CanBus(CP).cam),
Bus.alt: CANParser(DBC[CP.carFingerprint][Bus.pt], alt_messages, CanBus(CP).alt),
}
@staticmethod
@@ -338,4 +340,5 @@ class CarState(CarStateBase):
return {
Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CanBus(CP).pt),
Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CanBus(CP).cam),
Bus.alt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CanBus(CP).alt),
}