Subaru: Signals Cleanup (#28602)

Co-authored-by: Cameron Clough <cameronjclough@gmail.com>
pull/28684/head
Justin Newberry 2 years ago committed by GitHub
parent 6cc600e84f
commit 803c077dc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      opendbc
  2. 2
      panda
  3. 7
      selfdrive/car/subaru/carcontroller.py
  4. 58
      selfdrive/car/subaru/carstate.py
  5. 15
      selfdrive/car/subaru/subarucan.py
  6. 6
      selfdrive/car/subaru/values.py

@ -1 +1 @@
Subproject commit aa044ea9452e60f861577910ddc1cb3b610bc73a Subproject commit f241a87591b0e0339c5c8b6e2b1976271807ac56

@ -1 +1 @@
Subproject commit 58b80f3b77fd81fc13c2682b5d51c616f2dcdcc9 Subproject commit b2cf1976796dbd9f700a76543466c8c9c9665827

@ -1,7 +1,7 @@
from opendbc.can.packer import CANPacker from opendbc.can.packer import CANPacker
from selfdrive.car import apply_driver_steer_torque_limits from selfdrive.car import apply_driver_steer_torque_limits
from selfdrive.car.subaru import subarucan from selfdrive.car.subaru import subarucan
from selfdrive.car.subaru.values import DBC, GLOBAL_GEN2, PREGLOBAL_CARS, CarControllerParams, SubaruFlags from selfdrive.car.subaru.values import DBC, GLOBAL_GEN2, PREGLOBAL_CARS, CanBus, CarControllerParams, SubaruFlags
class CarController: class CarController:
@ -44,7 +44,6 @@ class CarController:
# *** alerts and pcm cancel *** # *** alerts and pcm cancel ***
if self.CP.carFingerprint in PREGLOBAL_CARS: if self.CP.carFingerprint in PREGLOBAL_CARS:
if self.frame % 5 == 0: if self.frame % 5 == 0:
# 1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 = resume deep # 1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 = resume deep
@ -66,7 +65,7 @@ class CarController:
else: else:
if pcm_cancel_cmd and (self.frame - self.last_cancel_frame) > 0.2: if pcm_cancel_cmd and (self.frame - self.last_cancel_frame) > 0.2:
bus = 1 if self.CP.carFingerprint in GLOBAL_GEN2 else 0 bus = CanBus.alt if self.CP.carFingerprint in GLOBAL_GEN2 else CanBus.main
can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg, bus, pcm_cancel_cmd)) can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg, bus, pcm_cancel_cmd))
self.last_cancel_frame = self.frame self.last_cancel_frame = self.frame
@ -78,7 +77,7 @@ class CarController:
hud_control.leftLaneDepart, hud_control.rightLaneDepart)) hud_control.leftLaneDepart, hud_control.rightLaneDepart))
if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT: if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT:
can_sends.append(subarucan.create_infotainmentstatus(self.packer, CS.es_infotainmentstatus_msg, hud_control.visualAlert)) can_sends.append(subarucan.create_es_infotainment(self.packer, CS.es_infotainment_msg, hud_control.visualAlert))
new_actuators = actuators.copy() new_actuators = actuators.copy()
new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX

@ -4,7 +4,7 @@ from opendbc.can.can_define import CANDefine
from common.conversions import Conversions as CV from common.conversions import Conversions as CV
from selfdrive.car.interfaces import CarStateBase from selfdrive.car.interfaces import CarStateBase
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from selfdrive.car.subaru.values import DBC, CAR, GLOBAL_GEN2, PREGLOBAL_CARS, SubaruFlags from selfdrive.car.subaru.values import DBC, CAR, GLOBAL_GEN2, PREGLOBAL_CARS, CanBus, SubaruFlags
class CarState(CarStateBase): class CarState(CarStateBase):
@ -87,12 +87,12 @@ class CarState(CarStateBase):
self.es_distance_msg = copy.copy(cp_es_distance.vl["ES_Distance"]) self.es_distance_msg = copy.copy(cp_es_distance.vl["ES_Distance"])
self.es_dashstatus_msg = copy.copy(cp_cam.vl["ES_DashStatus"]) self.es_dashstatus_msg = copy.copy(cp_cam.vl["ES_DashStatus"])
if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT: if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT:
self.es_infotainmentstatus_msg = copy.copy(cp_cam.vl["INFOTAINMENT_STATUS"]) self.es_infotainment_msg = copy.copy(cp_cam.vl["ES_Infotainment"])
return ret return ret
@staticmethod @staticmethod
def get_common_global_signals(): def get_common_global_body_signals():
signals = [ signals = [
("Cruise_On", "CruiseControl"), ("Cruise_On", "CruiseControl"),
("Cruise_Activated", "CruiseControl"), ("Cruise_Activated", "CruiseControl"),
@ -111,20 +111,10 @@ class CarState(CarStateBase):
return signals, checks return signals, checks
@staticmethod @staticmethod
def get_global_es_brake_signals(): def get_common_global_es_signals():
signals = [ signals = [
("AEB_Status", "ES_Brake"), ("AEB_Status", "ES_Brake"),
("Brake_Pressure", "ES_Brake"), ("Brake_Pressure", "ES_Brake"),
]
checks = [
("ES_Brake", 20),
]
return signals, checks
@staticmethod
def get_global_es_distance_signals():
signals = [
("COUNTER", "ES_Distance"), ("COUNTER", "ES_Distance"),
("CHECKSUM", "ES_Distance"), ("CHECKSUM", "ES_Distance"),
("Signal1", "ES_Distance"), ("Signal1", "ES_Distance"),
@ -146,7 +136,9 @@ class CarState(CarStateBase):
("Cruise_Resume", "ES_Distance"), ("Cruise_Resume", "ES_Distance"),
("Signal6", "ES_Distance"), ("Signal6", "ES_Distance"),
] ]
checks = [ checks = [
("ES_Brake", 20),
("ES_Distance", 20), ("ES_Distance", 20),
] ]
@ -193,8 +185,8 @@ class CarState(CarStateBase):
if CP.carFingerprint not in PREGLOBAL_CARS: if CP.carFingerprint not in PREGLOBAL_CARS:
if CP.carFingerprint not in GLOBAL_GEN2: if CP.carFingerprint not in GLOBAL_GEN2:
signals += CarState.get_common_global_signals()[0] signals += CarState.get_common_global_body_signals()[0]
checks += CarState.get_common_global_signals()[1] checks += CarState.get_common_global_body_signals()[1]
signals += [ signals += [
("Steer_Warning", "Steering_Torque"), ("Steer_Warning", "Steering_Torque"),
@ -233,7 +225,7 @@ class CarState(CarStateBase):
("CruiseControl", 50), ("CruiseControl", 50),
] ]
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 0) return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.main)
@staticmethod @staticmethod
def get_cam_can_parser(CP): def get_cam_can_parser(CP):
@ -319,32 +311,28 @@ class CarState(CarStateBase):
] ]
if CP.carFingerprint not in GLOBAL_GEN2: if CP.carFingerprint not in GLOBAL_GEN2:
signals += CarState.get_global_es_distance_signals()[0] signals += CarState.get_common_global_es_signals()[0]
signals += CarState.get_global_es_brake_signals()[0] checks += CarState.get_common_global_es_signals()[1]
checks += CarState.get_global_es_distance_signals()[1]
checks += CarState.get_global_es_brake_signals()[1]
if CP.flags & SubaruFlags.SEND_INFOTAINMENT: if CP.flags & SubaruFlags.SEND_INFOTAINMENT:
signals += [ signals += [
("COUNTER", "INFOTAINMENT_STATUS"), ("COUNTER", "ES_Infotainment"),
("CHECKSUM", "INFOTAINMENT_STATUS"), ("CHECKSUM", "ES_Infotainment"),
("LKAS_State_Infotainment", "INFOTAINMENT_STATUS"), ("LKAS_State_Infotainment", "ES_Infotainment"),
("LKAS_Blue_Lines", "INFOTAINMENT_STATUS"), ("LKAS_Blue_Lines", "ES_Infotainment"),
("Signal1", "INFOTAINMENT_STATUS"), ("Signal1", "ES_Infotainment"),
("Signal2", "INFOTAINMENT_STATUS"), ("Signal2", "ES_Infotainment"),
] ]
checks.append(("INFOTAINMENT_STATUS", 10)) checks.append(("ES_Infotainment", 10))
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 2) return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.camera)
@staticmethod @staticmethod
def get_body_can_parser(CP): def get_body_can_parser(CP):
if CP.carFingerprint in GLOBAL_GEN2: if CP.carFingerprint in GLOBAL_GEN2:
signals, checks = CarState.get_common_global_signals() signals, checks = CarState.get_common_global_body_signals()
signals += CarState.get_global_es_distance_signals()[0] signals += CarState.get_common_global_es_signals()[0]
signals += CarState.get_global_es_brake_signals()[0] checks += CarState.get_common_global_es_signals()[1]
checks += CarState.get_global_es_distance_signals()[1] return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.alt)
checks += CarState.get_global_es_brake_signals()[1]
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 1)
return None return None

@ -1,4 +1,5 @@
from cereal import car from cereal import car
from selfdrive.car.subaru.values import CanBus
VisualAlert = car.CarControl.HUDControl.VisualAlert VisualAlert = car.CarControl.HUDControl.VisualAlert
@ -102,7 +103,7 @@ def create_es_lkas_state(packer, es_lkas_state_msg, enabled, visual_alert, left_
values["LKAS_Left_Line_Visible"] = int(left_line) values["LKAS_Left_Line_Visible"] = int(left_line)
values["LKAS_Right_Line_Visible"] = int(right_line) values["LKAS_Right_Line_Visible"] = int(right_line)
return packer.make_can_msg("ES_LKAS_State", 0, values) return packer.make_can_msg("ES_LKAS_State", CanBus.main, values)
def create_es_dashstatus(packer, dashstatus_msg): def create_es_dashstatus(packer, dashstatus_msg):
@ -140,12 +141,12 @@ def create_es_dashstatus(packer, dashstatus_msg):
if values["LKAS_State_Msg"] in (2, 3): if values["LKAS_State_Msg"] in (2, 3):
values["LKAS_State_Msg"] = 0 values["LKAS_State_Msg"] = 0
return packer.make_can_msg("ES_DashStatus", 0, values) return packer.make_can_msg("ES_DashStatus", CanBus.main, values)
def create_infotainmentstatus(packer, infotainmentstatus_msg, visual_alert): def create_es_infotainment(packer, es_infotainment_msg, visual_alert):
# Filter stock LKAS disabled and Keep hands on steering wheel OFF alerts # Filter stock LKAS disabled and Keep hands on steering wheel OFF alerts
values = {s: infotainmentstatus_msg[s] for s in [ values = {s: es_infotainment_msg[s] for s in [
"CHECKSUM", "CHECKSUM",
"COUNTER", "COUNTER",
"LKAS_State_Infotainment", "LKAS_State_Infotainment",
@ -164,7 +165,7 @@ def create_infotainmentstatus(packer, infotainmentstatus_msg, visual_alert):
if visual_alert == VisualAlert.fcw: if visual_alert == VisualAlert.fcw:
values["LKAS_State_Infotainment"] = 2 values["LKAS_State_Infotainment"] = 2
return packer.make_can_msg("INFOTAINMENT_STATUS", 0, values) return packer.make_can_msg("ES_Infotainment", CanBus.main, values)
# *** Subaru Pre-global *** # *** Subaru Pre-global ***
@ -181,7 +182,7 @@ def create_preglobal_steering_control(packer, apply_steer, steer_req):
} }
values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_LKAS") values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_LKAS")
return packer.make_can_msg("ES_LKAS", 0, values) return packer.make_can_msg("ES_LKAS", CanBus.main, values)
def create_preglobal_es_distance(packer, cruise_button, es_distance_msg): def create_preglobal_es_distance(packer, cruise_button, es_distance_msg):
@ -208,4 +209,4 @@ def create_preglobal_es_distance(packer, cruise_button, es_distance_msg):
values["Cruise_Button"] = cruise_button values["Cruise_Button"] = cruise_button
values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_Distance") values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_Distance")
return packer.make_can_msg("ES_Distance", 0, values) return packer.make_can_msg("ES_Distance", CanBus.main, values)

@ -34,6 +34,12 @@ class SubaruFlags(IntFlag):
SEND_INFOTAINMENT = 1 SEND_INFOTAINMENT = 1
class CanBus:
main = 0
alt = 1
camera = 2
class CAR: class CAR:
# Global platform # Global platform
ASCENT = "SUBARU ASCENT LIMITED 2019" ASCENT = "SUBARU ASCENT LIMITED 2019"

Loading…
Cancel
Save