mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-26 16:32:06 +08:00
Clean up Hyundai gear parsing (#21410)
* Use can definitions and refactor gear Hyundai parsing * comment * auto detect gearbox message auto detect gearbox message remove todos remove todos * comment * Revert "comment" This reverts commit 4b5129004ee3f65dc85808dc710ec461ce5eb418. * Revert "auto detect gearbox message" This reverts commit bcdf7c452da50066a22fd7d051d275b18ee62114. * no longer needed * bump
This commit is contained in:
+1
-1
Submodule opendbc updated: 11b61cd09d...1e9219759b
@@ -3,12 +3,23 @@ from cereal import car
|
||||
from selfdrive.car.hyundai.values import DBC, STEER_THRESHOLD, FEATURES, EV_CAR, HYBRID_CAR
|
||||
from selfdrive.car.interfaces import CarStateBase
|
||||
from opendbc.can.parser import CANParser
|
||||
from opendbc.can.can_define import CANDefine
|
||||
from selfdrive.config import Conversions as CV
|
||||
|
||||
GearShifter = car.CarState.GearShifter
|
||||
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def __init__(self, CP):
|
||||
super().__init__(CP)
|
||||
can_define = CANDefine(DBC[CP.carFingerprint]["pt"])
|
||||
|
||||
if self.CP.carFingerprint in FEATURES["use_cluster_gears"]:
|
||||
self.shifter_values = can_define.dv["CLU15"]["CF_Clu_Gear"]
|
||||
elif self.CP.carFingerprint in FEATURES["use_tcu_gears"]:
|
||||
self.shifter_values = can_define.dv["TCU12"]["CUR_GR"]
|
||||
else: # preferred and elect gear methods use same definition
|
||||
self.shifter_values = can_define.dv["LVR12"]["CF_Lvr_Gear"]
|
||||
|
||||
|
||||
def update(self, cp, cp_cam):
|
||||
ret = car.CarState.new_message()
|
||||
|
||||
@@ -66,57 +77,18 @@ class CarState(CarStateBase):
|
||||
ret.gas = cp.vl["EMS12"]["PV_AV_CAN"] / 100.
|
||||
ret.gasPressed = bool(cp.vl["EMS16"]["CF_Ems_AclAct"])
|
||||
|
||||
# TODO: refactor gear parsing in function
|
||||
# Gear Selection via Cluster - For those Kia/Hyundai which are not fully discovered, we can use the Cluster Indicator for Gear Selection,
|
||||
# as this seems to be standard over all cars, but is not the preferred method.
|
||||
if self.CP.carFingerprint in FEATURES["use_cluster_gears"]:
|
||||
if cp.vl["CLU15"]["CF_Clu_InhibitD"] == 1:
|
||||
ret.gearShifter = GearShifter.drive
|
||||
elif cp.vl["CLU15"]["CF_Clu_InhibitN"] == 1:
|
||||
ret.gearShifter = GearShifter.neutral
|
||||
elif cp.vl["CLU15"]["CF_Clu_InhibitP"] == 1:
|
||||
ret.gearShifter = GearShifter.park
|
||||
elif cp.vl["CLU15"]["CF_Clu_InhibitR"] == 1:
|
||||
ret.gearShifter = GearShifter.reverse
|
||||
else:
|
||||
ret.gearShifter = GearShifter.unknown
|
||||
# Gear Selecton via TCU12
|
||||
gear = cp.vl["CLU15"]["CF_Clu_Gear"]
|
||||
elif self.CP.carFingerprint in FEATURES["use_tcu_gears"]:
|
||||
gear = cp.vl["TCU12"]["CUR_GR"]
|
||||
if gear == 0:
|
||||
ret.gearShifter = GearShifter.park
|
||||
elif gear == 14:
|
||||
ret.gearShifter = GearShifter.reverse
|
||||
elif gear > 0 and gear < 9: # unaware of anything over 8 currently
|
||||
ret.gearShifter = GearShifter.drive
|
||||
else:
|
||||
ret.gearShifter = GearShifter.unknown
|
||||
# Gear Selecton - This is only compatible with optima hybrid 2017
|
||||
elif self.CP.carFingerprint in FEATURES["use_elect_gears"]:
|
||||
gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"]
|
||||
if gear in (5, 8): # 5: D, 8: sport mode
|
||||
ret.gearShifter = GearShifter.drive
|
||||
elif gear == 6:
|
||||
ret.gearShifter = GearShifter.neutral
|
||||
elif gear == 0:
|
||||
ret.gearShifter = GearShifter.park
|
||||
elif gear == 7:
|
||||
ret.gearShifter = GearShifter.reverse
|
||||
else:
|
||||
ret.gearShifter = GearShifter.unknown
|
||||
# Gear Selecton - This is not compatible with all Kia/Hyundai's, But is the best way for those it is compatible with
|
||||
else:
|
||||
gear = cp.vl["LVR12"]["CF_Lvr_Gear"]
|
||||
if gear in (5, 8): # 5: D, 8: sport mode
|
||||
ret.gearShifter = GearShifter.drive
|
||||
elif gear == 6:
|
||||
ret.gearShifter = GearShifter.neutral
|
||||
elif gear == 0:
|
||||
ret.gearShifter = GearShifter.park
|
||||
elif gear == 7:
|
||||
ret.gearShifter = GearShifter.reverse
|
||||
else:
|
||||
ret.gearShifter = GearShifter.unknown
|
||||
|
||||
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear))
|
||||
|
||||
if self.CP.carFingerprint in FEATURES["use_fca"]:
|
||||
ret.stockAeb = cp.vl["FCA11"]["FCA_CmdAct"] != 0
|
||||
@@ -255,10 +227,7 @@ class CarState(CarStateBase):
|
||||
|
||||
if CP.carFingerprint in FEATURES["use_cluster_gears"]:
|
||||
signals += [
|
||||
("CF_Clu_InhibitD", "CLU15", 0),
|
||||
("CF_Clu_InhibitP", "CLU15", 0),
|
||||
("CF_Clu_InhibitN", "CLU15", 0),
|
||||
("CF_Clu_InhibitR", "CLU15", 0),
|
||||
("CF_Clu_Gear", "CLU15", 0),
|
||||
]
|
||||
checks += [
|
||||
("CLU15", 5)
|
||||
|
||||
Reference in New Issue
Block a user