Honda carstate: refactor MAIN_ON signal (#22226)

* Honda carstate: refactor MAIN_ON signal

MAIN_ON handling was scattered throughout the code since
the enclosing message differed by model.  Store the message
name in the instance.

Several cases in get_can_signals() and update() were
subsequently collapsed.

* remove duplicate BRAKE_HOLD_ACTIVE signal

* Update selfdrive/car/honda/carstate.py

* add some whitespace

* cleanup carstate

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
pull/22247/head
John Belmonte 4 years ago committed by GitHub
parent 66c275b711
commit 7ee9ba34dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 37
      selfdrive/car/honda/carstate.py

@ -10,7 +10,7 @@ from selfdrive.car.honda.values import CAR, DBC, STEER_THRESHOLD, SPEED_FACTOR,
TransmissionType = car.CarParams.TransmissionType TransmissionType = car.CarParams.TransmissionType
def get_can_signals(CP, gearbox_msg): def get_can_signals(CP, gearbox_msg, main_on_sig_msg):
# this function generates lists for signal, messages and initial values # this function generates lists for signal, messages and initial values
signals = [ signals = [
("XMISSION_SPEED", "ENGINE_DATA", 0), ("XMISSION_SPEED", "ENGINE_DATA", 0),
@ -38,6 +38,7 @@ def get_can_signals(CP, gearbox_msg):
("PEDAL_GAS", "POWERTRAIN_DATA", 0), ("PEDAL_GAS", "POWERTRAIN_DATA", 0),
("CRUISE_SETTING", "SCM_BUTTONS", 0), ("CRUISE_SETTING", "SCM_BUTTONS", 0),
("ACC_STATUS", "POWERTRAIN_DATA", 0), ("ACC_STATUS", "POWERTRAIN_DATA", 0),
("MAIN_ON", main_on_sig_msg, 0),
] ]
checks = [ checks = [
@ -78,7 +79,6 @@ def get_can_signals(CP, gearbox_msg):
if CP.carFingerprint in HONDA_BOSCH: if CP.carFingerprint in HONDA_BOSCH:
signals += [ signals += [
("MAIN_ON", "SCM_FEEDBACK", 0),
("EPB_STATE", "EPB_STATUS", 0), ("EPB_STATE", "EPB_STATUS", 0),
] ]
checks += [ checks += [
@ -124,25 +124,14 @@ def get_can_signals(CP, gearbox_msg):
] ]
if CP.carFingerprint == CAR.CIVIC: if CP.carFingerprint == CAR.CIVIC:
signals += [("MAIN_ON", "SCM_FEEDBACK", 0), signals += [("IMPERIAL_UNIT", "HUD_SETTING", 0),
("IMPERIAL_UNIT", "HUD_SETTING", 0),
("EPB_STATE", "EPB_STATUS", 0)] ("EPB_STATE", "EPB_STATUS", 0)]
checks += [ checks += [
("HUD_SETTING", 50), ("HUD_SETTING", 50),
("EPB_STATUS", 50), ("EPB_STATUS", 50),
] ]
elif CP.carFingerprint in (CAR.ACURA_ILX, CAR.CRV, CAR.CRV_EU, CAR.ACURA_RDX, CAR.PILOT, CAR.PILOT_2019, CAR.RIDGELINE): elif CP.carFingerprint in (CAR.ODYSSEY, CAR.ODYSSEY_CHN):
signals += [("MAIN_ON", "SCM_BUTTONS", 0)] signals += [("EPB_STATE", "EPB_STATUS", 0)]
elif CP.carFingerprint in (CAR.FIT, CAR.HRV):
signals += [("MAIN_ON", "SCM_BUTTONS", 0),
("BRAKE_HOLD_ACTIVE", "VSA_STATUS", 0)]
elif CP.carFingerprint == CAR.ODYSSEY:
signals += [("MAIN_ON", "SCM_FEEDBACK", 0),
("EPB_STATE", "EPB_STATUS", 0)]
checks += [("EPB_STATUS", 50)]
elif CP.carFingerprint == CAR.ODYSSEY_CHN:
signals += [("MAIN_ON", "SCM_BUTTONS", 0),
("EPB_STATE", "EPB_STATUS", 0)]
checks += [("EPB_STATUS", 50)] checks += [("EPB_STATUS", 50)]
# add gas interceptor reading if we are using it # add gas interceptor reading if we are using it
@ -169,6 +158,11 @@ class CarState(CarStateBase):
if CP.carFingerprint == CAR.ACCORD and CP.transmissionType == TransmissionType.cvt: if CP.carFingerprint == CAR.ACCORD and CP.transmissionType == TransmissionType.cvt:
self.gearbox_msg = "GEARBOX_15T" self.gearbox_msg = "GEARBOX_15T"
self.main_on_sig_msg = "SCM_FEEDBACK"
if CP.carFingerprint in (CAR.ACURA_ILX, CAR.ACURA_RDX, CAR.CRV, CAR.CRV_EU, CAR.FIT, CAR.HRV,
CAR.ODYSSEY_CHN, CAR.PILOT, CAR.PILOT_2019, CAR.RIDGELINE):
self.main_on_sig_msg = "SCM_BUTTONS"
self.shifter_values = can_define.dv[self.gearbox_msg]["GEAR_SHIFTER"] self.shifter_values = can_define.dv[self.gearbox_msg]["GEAR_SHIFTER"]
self.steer_status_values = defaultdict(lambda: "UNKNOWN", can_define.dv["STEER_STATUS"]["STEER_STATUS"]) self.steer_status_values = defaultdict(lambda: "UNKNOWN", can_define.dv["STEER_STATUS"]["STEER_STATUS"])
@ -240,16 +234,11 @@ class CarState(CarStateBase):
250, cp.vl["SCM_FEEDBACK"]["LEFT_BLINKER"], cp.vl["SCM_FEEDBACK"]["RIGHT_BLINKER"]) 250, cp.vl["SCM_FEEDBACK"]["LEFT_BLINKER"], cp.vl["SCM_FEEDBACK"]["RIGHT_BLINKER"])
self.brake_hold = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"] self.brake_hold = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"]
if self.CP.carFingerprint in (CAR.CIVIC, CAR.ODYSSEY, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, if self.CP.carFingerprint in (CAR.CIVIC, CAR.ODYSSEY, CAR.ODYSSEY_CHN, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH,
CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E): CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E):
self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0 self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0
main_on = cp.vl["SCM_FEEDBACK"]["MAIN_ON"]
elif self.CP.carFingerprint == CAR.ODYSSEY_CHN:
self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0
main_on = cp.vl["SCM_BUTTONS"]["MAIN_ON"]
else: else:
self.park_brake = 0 # TODO self.park_brake = 0 # TODO
main_on = cp.vl["SCM_BUTTONS"]["MAIN_ON"]
gear = int(cp.vl[self.gearbox_msg]["GEAR_SHIFTER"]) gear = int(cp.vl[self.gearbox_msg]["GEAR_SHIFTER"])
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear, None)) ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear, None))
@ -294,7 +283,7 @@ class CarState(CarStateBase):
ret.brake = cp.vl["VSA_STATUS"]["USER_BRAKE"] ret.brake = cp.vl["VSA_STATUS"]["USER_BRAKE"]
ret.cruiseState.enabled = cp.vl["POWERTRAIN_DATA"]["ACC_STATUS"] != 0 ret.cruiseState.enabled = cp.vl["POWERTRAIN_DATA"]["ACC_STATUS"] != 0
ret.cruiseState.available = bool(main_on) ret.cruiseState.available = bool(cp.vl[self.main_on_sig_msg]["MAIN_ON"])
# Gets rid of Pedal Grinding noise when brake is pressed at slow speeds for some models # Gets rid of Pedal Grinding noise when brake is pressed at slow speeds for some models
if self.CP.carFingerprint in (CAR.PILOT, CAR.PILOT_2019, CAR.RIDGELINE): if self.CP.carFingerprint in (CAR.PILOT, CAR.PILOT_2019, CAR.RIDGELINE):
@ -326,7 +315,7 @@ class CarState(CarStateBase):
return ret return ret
def get_can_parser(self, CP): def get_can_parser(self, CP):
signals, checks = get_can_signals(CP, self.gearbox_msg) signals, checks = get_can_signals(CP, self.gearbox_msg, self.main_on_sig_msg)
bus_pt = 1 if CP.carFingerprint in HONDA_BOSCH else 0 bus_pt = 1 if CP.carFingerprint in HONDA_BOSCH else 0
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, bus_pt) return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, bus_pt)

Loading…
Cancel
Save