Ford: fix gear parsing (#25267)

* Ford: fix gear shifter state

* Ford: manumatic is drive

* add full gear names to CarStateBase

* fix for unrecognised gears

* Update interfaces.py

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
pull/25268/head
Cameron Clough 3 years ago committed by GitHub
parent d6105f2d1f
commit 2351ae48b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      selfdrive/car/ford/carstate.py
  2. 4
      selfdrive/car/ford/interface.py
  3. 1
      selfdrive/car/ford/values.py
  4. 21
      selfdrive/car/interfaces.py

@ -1,5 +1,3 @@
from typing import Dict
from cereal import car from cereal import car
from common.conversions import Conversions as CV from common.conversions import Conversions as CV
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
@ -51,8 +49,8 @@ class CarState(CarStateBase):
# gear # gear
if self.CP.transmissionType == TransmissionType.automatic: if self.CP.transmissionType == TransmissionType.automatic:
gear = int(cp.vl["Gear_Shift_by_Wire_FD1"]["TrnGear_D_RqDrv"]) gear = self.shifter_values.get(cp.vl["Gear_Shift_by_Wire_FD1"]["TrnGear_D_RqDrv"], None)
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear, None)) ret.gearShifter = self.parse_gear_shifter(gear)
elif self.CP.transmissionType == TransmissionType.manual: elif self.CP.transmissionType == TransmissionType.manual:
ret.clutchPressed = cp.vl["Engine_Clutch_Data"]["CluPdlPos_Pc_Meas"] > 0 ret.clutchPressed = cp.vl["Engine_Clutch_Data"]["CluPdlPos_Pc_Meas"] > 0
if bool(cp.vl["BCM_Lamp_Stat_FD1"]["RvrseLghtOn_B_Stat"]): if bool(cp.vl["BCM_Lamp_Stat_FD1"]["RvrseLghtOn_B_Stat"]):
@ -85,14 +83,6 @@ class CarState(CarStateBase):
return ret return ret
@staticmethod
def parse_gear_shifter(gear: str) -> car.CarState.GearShifter:
d: Dict[str, car.CarState.GearShifter] = {
'Park': GearShifter.park, 'Reverse': GearShifter.reverse, 'Neutral': GearShifter.neutral,
'Manual': GearShifter.manumatic, 'Drive': GearShifter.drive,
}
return d.get(gear, GearShifter.unknown)
@staticmethod @staticmethod
def get_can_parser(CP): def get_can_parser(CP):
signals = [ signals = [

@ -2,7 +2,7 @@
from cereal import car from cereal import car
from common.conversions import Conversions as CV from common.conversions import Conversions as CV
from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint
from selfdrive.car.ford.values import TransmissionType, CAR from selfdrive.car.ford.values import CAR, TransmissionType, GearShifter
from selfdrive.car.interfaces import CarInterfaceBase from selfdrive.car.interfaces import CarInterfaceBase
@ -70,7 +70,7 @@ class CarInterface(CarInterfaceBase):
def _update(self, c): def _update(self, c):
ret = self.CS.update(self.cp, self.cp_cam) ret = self.CS.update(self.cp, self.cp_cam)
events = self.create_common_events(ret) events = self.create_common_events(ret, extra_gears=[GearShifter.manumatic])
ret.events = events.to_msg() ret.events = events.to_msg()
return ret return ret

@ -7,6 +7,7 @@ from selfdrive.car.docs_definitions import CarInfo
Ecu = car.CarParams.Ecu Ecu = car.CarParams.Ecu
TransmissionType = car.CarParams.TransmissionType TransmissionType = car.CarParams.TransmissionType
GearShifter = car.CarState.GearShifter
AngleRateLimit = namedtuple('AngleRateLimit', ['speed_points', 'max_angle_diff_points']) AngleRateLimit = namedtuple('AngleRateLimit', ['speed_points', 'max_angle_diff_points'])

@ -2,7 +2,7 @@ import yaml
import os import os
import time import time
from abc import abstractmethod, ABC from abc import abstractmethod, ABC
from typing import Any, Dict, Tuple, List from typing import Any, Dict, Optional, Tuple, List
from cereal import car from cereal import car
from common.basedir import BASEDIR from common.basedir import BASEDIR
@ -318,13 +318,22 @@ class CarStateBase(ABC):
return bool(left_blinker_stalk or self.left_blinker_cnt > 0), bool(right_blinker_stalk or self.right_blinker_cnt > 0) return bool(left_blinker_stalk or self.left_blinker_cnt > 0), bool(right_blinker_stalk or self.right_blinker_cnt > 0)
@staticmethod @staticmethod
def parse_gear_shifter(gear: str) -> car.CarState.GearShifter: def parse_gear_shifter(gear: Optional[str]) -> car.CarState.GearShifter:
if gear is None:
return GearShifter.unknown
d: Dict[str, car.CarState.GearShifter] = { d: Dict[str, car.CarState.GearShifter] = {
'P': GearShifter.park, 'R': GearShifter.reverse, 'N': GearShifter.neutral, 'P': GearShifter.park, 'PARK': GearShifter.park,
'E': GearShifter.eco, 'T': GearShifter.manumatic, 'D': GearShifter.drive, 'R': GearShifter.reverse, 'REVERSE': GearShifter.reverse,
'S': GearShifter.sport, 'L': GearShifter.low, 'B': GearShifter.brake 'N': GearShifter.neutral, 'NEUTRAL': GearShifter.neutral,
'E': GearShifter.eco, 'ECO': GearShifter.eco,
'T': GearShifter.manumatic, 'MANUAL': GearShifter.manumatic,
'D': GearShifter.drive, 'DRIVE': GearShifter.drive,
'S': GearShifter.sport, 'SPORT': GearShifter.sport,
'L': GearShifter.low, 'LOW': GearShifter.low,
'B': GearShifter.brake, 'BRAKE': GearShifter.brake,
} }
return d.get(gear, GearShifter.unknown) return d.get(gear.upper(), GearShifter.unknown)
@staticmethod @staticmethod
def get_cam_can_parser(CP): def get_cam_can_parser(CP):

Loading…
Cancel
Save