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 selfdrive.car import apply_driver_steer_torque_limits
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:
@ -44,7 +44,6 @@ class CarController:
# *** alerts and pcm cancel ***
if self.CP.carFingerprint in PREGLOBAL_CARS:
if self.frame % 5 == 0:
# 1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 = resume deep
@ -66,7 +65,7 @@ class CarController:
else:
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))
self.last_cancel_frame = self.frame
@ -78,7 +77,7 @@ class CarController:
hud_control.leftLaneDepart, hud_control.rightLaneDepart))
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.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 selfdrive.car.interfaces import CarStateBase
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):
@ -87,12 +87,12 @@ class CarState(CarStateBase):
self.es_distance_msg = copy.copy(cp_es_distance.vl["ES_Distance"])
self.es_dashstatus_msg = copy.copy(cp_cam.vl["ES_DashStatus"])
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
@staticmethod
def get_common_global_signals():
def get_common_global_body_signals():
signals = [
("Cruise_On", "CruiseControl"),
("Cruise_Activated", "CruiseControl"),
@ -111,20 +111,10 @@ class CarState(CarStateBase):
return signals, checks
@staticmethod
def get_global_es_brake_signals():
def get_common_global_es_signals():
signals = [
("AEB_Status", "ES_Brake"),
("Brake_Pressure", "ES_Brake"),
]
checks = [
("ES_Brake", 20),
]
return signals, checks
@staticmethod
def get_global_es_distance_signals():
signals = [
("COUNTER", "ES_Distance"),
("CHECKSUM", "ES_Distance"),
("Signal1", "ES_Distance"),
@ -146,7 +136,9 @@ class CarState(CarStateBase):
("Cruise_Resume", "ES_Distance"),
("Signal6", "ES_Distance"),
]
checks = [
("ES_Brake", 20),
("ES_Distance", 20),
]
@ -193,8 +185,8 @@ class CarState(CarStateBase):
if CP.carFingerprint not in PREGLOBAL_CARS:
if CP.carFingerprint not in GLOBAL_GEN2:
signals += CarState.get_common_global_signals()[0]
checks += CarState.get_common_global_signals()[1]
signals += CarState.get_common_global_body_signals()[0]
checks += CarState.get_common_global_body_signals()[1]
signals += [
("Steer_Warning", "Steering_Torque"),
@ -233,7 +225,7 @@ class CarState(CarStateBase):
("CruiseControl", 50),
]
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 0)
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.main)
@staticmethod
def get_cam_can_parser(CP):
@ -319,32 +311,28 @@ class CarState(CarStateBase):
]
if CP.carFingerprint not in GLOBAL_GEN2:
signals += CarState.get_global_es_distance_signals()[0]
signals += CarState.get_global_es_brake_signals()[0]
checks += CarState.get_global_es_distance_signals()[1]
checks += CarState.get_global_es_brake_signals()[1]
signals += CarState.get_common_global_es_signals()[0]
checks += CarState.get_common_global_es_signals()[1]
if CP.flags & SubaruFlags.SEND_INFOTAINMENT:
signals += [
("COUNTER", "INFOTAINMENT_STATUS"),
("CHECKSUM", "INFOTAINMENT_STATUS"),
("LKAS_State_Infotainment", "INFOTAINMENT_STATUS"),
("LKAS_Blue_Lines", "INFOTAINMENT_STATUS"),
("Signal1", "INFOTAINMENT_STATUS"),
("Signal2", "INFOTAINMENT_STATUS"),
("COUNTER", "ES_Infotainment"),
("CHECKSUM", "ES_Infotainment"),
("LKAS_State_Infotainment", "ES_Infotainment"),
("LKAS_Blue_Lines", "ES_Infotainment"),
("Signal1", "ES_Infotainment"),
("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
def get_body_can_parser(CP):
if CP.carFingerprint in GLOBAL_GEN2:
signals, checks = CarState.get_common_global_signals()
signals += CarState.get_global_es_distance_signals()[0]
signals += CarState.get_global_es_brake_signals()[0]
checks += CarState.get_global_es_distance_signals()[1]
checks += CarState.get_global_es_brake_signals()[1]
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 1)
signals, checks = CarState.get_common_global_body_signals()
signals += CarState.get_common_global_es_signals()[0]
checks += CarState.get_common_global_es_signals()[1]
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.alt)
return None

@ -1,4 +1,5 @@
from cereal import car
from selfdrive.car.subaru.values import CanBus
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_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):
@ -140,12 +141,12 @@ def create_es_dashstatus(packer, dashstatus_msg):
if values["LKAS_State_Msg"] in (2, 3):
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
values = {s: infotainmentstatus_msg[s] for s in [
values = {s: es_infotainment_msg[s] for s in [
"CHECKSUM",
"COUNTER",
"LKAS_State_Infotainment",
@ -164,7 +165,7 @@ def create_infotainmentstatus(packer, infotainmentstatus_msg, visual_alert):
if visual_alert == VisualAlert.fcw:
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 ***
@ -181,7 +182,7 @@ def create_preglobal_steering_control(packer, apply_steer, steer_req):
}
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):
@ -208,4 +209,4 @@ def create_preglobal_es_distance(packer, cruise_button, es_distance_msg):
values["Cruise_Button"] = cruise_button
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
class CanBus:
main = 0
alt = 1
camera = 2
class CAR:
# Global platform
ASCENT = "SUBARU ASCENT LIMITED 2019"

Loading…
Cancel
Save