diff --git a/cereal b/cereal index e83ec3be7d..8a261632bf 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit e83ec3be7d83b8d4ce227e7c2027dd1ca5f930b4 +Subproject commit 8a261632bf350817aaa4ba2840517629c5a882ad diff --git a/docs/CARS.md b/docs/CARS.md index e4b7b3cac3..5acda5e800 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -10,10 +10,12 @@ | Honda | Accord 2018-21 | All | Stock | 0mph | 3mph | | Honda | Accord Hybrid 2018-21 | All | Stock | 0mph | 3mph | | Honda | Civic Hatchback 2017-21 | Honda Sensing | Stock | 0mph | 12mph | +| Honda | Civic Hatchback 2022 | All | Stock | 0mph | 0mph | | Honda | Civic Coupe 2016-18 | Honda Sensing | openpilot | 0mph | 12mph | | Honda | Civic Coupe 2019-20 | All | Stock | 0mph | 2mph2 | | Honda | Civic Sedan 2016-18 | Honda Sensing | openpilot | 0mph | 12mph | | Honda | Civic Sedan 2019-20 | All | Stock | 0mph | 2mph2 | +| Honda | Civic Sedan 2022 | All | Stock | 0mph | 0mph | | Honda | CR-V 2015-16 | Touring | openpilot | 25mph1 | 12mph | | Honda | CR-V 2017-21 | Honda Sensing | Stock | 0mph | 12mph | | Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph | diff --git a/opendbc b/opendbc index 2bab99fd86..166e34fc03 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit 2bab99fd861786312bde676823e21d80eeeb01fa +Subproject commit 166e34fc03ada262d61edced450c76660f27ce6d diff --git a/panda b/panda index 6f95a096e6..51c9002530 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 6f95a096e6beb254786759003a38e6e5c4f2c10e +Subproject commit 51c9002530a378ce4a2c04f9b482b1e72492373d diff --git a/selfdrive/car/honda/carstate.py b/selfdrive/car/honda/carstate.py index 12a4ae4c29..32b9b35aa2 100644 --- a/selfdrive/car/honda/carstate.py +++ b/selfdrive/car/honda/carstate.py @@ -5,7 +5,7 @@ from opendbc.can.can_define import CANDefine from opendbc.can.parser import CANParser from selfdrive.config import Conversions as CV from selfdrive.car.interfaces import CarStateBase -from selfdrive.car.honda.values import CAR, DBC, STEER_THRESHOLD, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL +from selfdrive.car.honda.values import CAR, DBC, STEER_THRESHOLD, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL, HONDA_RADARLESS TransmissionType = car.CarParams.TransmissionType @@ -77,7 +77,7 @@ def get_can_signals(CP, gearbox_msg, main_on_sig_msg): signals += [("BRAKE_PRESSED", "BRAKE_MODULE", 0)] checks += [("BRAKE_MODULE", 50)] - if CP.carFingerprint in HONDA_BOSCH: + if CP.carFingerprint in HONDA_BOSCH or CP.carFingerprint in HONDA_RADARLESS: signals += [ ("EPB_STATE", "EPB_STATUS", 0), ("IMPERIAL_UNIT", "CAR_SPEED", 1), @@ -95,7 +95,7 @@ def get_can_signals(CP, gearbox_msg, main_on_sig_msg): ("AEB_STATUS", "ACC_CONTROL", 0), ] checks += [ - ("ACC_HUD", 10), + ("ACC_HUD", 0), # TODO: Fix this ("ACC_CONTROL", 50), ] else: # Nidec signals @@ -107,7 +107,7 @@ def get_can_signals(CP, gearbox_msg, main_on_sig_msg): else: checks += [("CRUISE_PARAMS", 50)] - if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E): + if CP.carFingerprint in (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_22): signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)] elif CP.carFingerprint == CAR.ODYSSEY_CHN: signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1)] @@ -185,7 +185,7 @@ class CarState(CarStateBase): # ******************* parse out can ******************* # TODO: find wheels moving bit in dbc - if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E): + if self.CP.carFingerprint in (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_22): ret.standstill = cp.vl["ENGINE_DATA"]["XMISSION_SPEED"] < 0.1 ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]["DRIVERS_DOOR_OPEN"]) elif self.CP.carFingerprint == CAR.ODYSSEY_CHN: @@ -237,7 +237,7 @@ class CarState(CarStateBase): ret.brakeHoldActive = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"] == 1 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, CAR.CIVIC_22): self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0 else: self.park_brake = 0 # TODO @@ -259,13 +259,14 @@ class CarState(CarStateBase): ret.steeringTorqueEps = cp.vl["STEER_MOTOR_TORQUE"]["MOTOR_TORQUE"] ret.steeringPressed = abs(ret.steeringTorque) > STEER_THRESHOLD.get(self.CP.carFingerprint, 1200) - if self.CP.carFingerprint in HONDA_BOSCH: + if self.CP.carFingerprint in HONDA_BOSCH or self.CP.carFingerprint in HONDA_RADARLESS: if not self.CP.openpilotLongitudinalControl: ret.cruiseState.nonAdaptive = cp.vl["ACC_HUD"]["CRUISE_CONTROL_LABEL"] != 0 ret.cruiseState.standstill = cp.vl["ACC_HUD"]["CRUISE_SPEED"] == 252. # On set, cruise set speed pulses between 254~255 and the set speed prev is set to avoid this. - ret.cruiseState.speed = self.v_cruise_pcm_prev if cp.vl["ACC_HUD"]["CRUISE_SPEED"] > 160.0 else cp.vl["ACC_HUD"]["CRUISE_SPEED"] * CV.KPH_TO_MS + # TODO: Fix this to support both cam and pt bus parsing + ret.cruiseState.speed = self.v_cruise_pcm_prev if cp_cam.vl["ACC_HUD"]["CRUISE_SPEED"] > 160.0 else cp_cam.vl["ACC_HUD"]["CRUISE_SPEED"] * CV.MPH_TO_MS self.v_cruise_pcm_prev = ret.cruiseState.speed else: ret.cruiseState.speed = cp.vl["CRUISE"]["CRUISE_SPEED_PCM"] * CV.KPH_TO_MS @@ -300,12 +301,12 @@ class CarState(CarStateBase): else: self.is_metric = False - if self.CP.carFingerprint in HONDA_BOSCH: + if self.CP.carFingerprint in HONDA_BOSCH or self.CP.carFingerprint in HONDA_RADARLESS: ret.stockAeb = (not self.CP.openpilotLongitudinalControl) and bool(cp.vl["ACC_CONTROL"]["AEB_STATUS"] and cp.vl["ACC_CONTROL"]["ACCEL_COMMAND"] < -1e-5) else: ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE"] > 1e-5) - if self.CP.carFingerprint in HONDA_BOSCH: + if self.CP.carFingerprint in HONDA_BOSCH or self.CP.carFingerprint in HONDA_RADARLESS: self.stock_hud = False ret.stockFcw = False else: @@ -333,7 +334,14 @@ class CarState(CarStateBase): ("STEERING_CONTROL", 100), ] - if CP.carFingerprint not in HONDA_BOSCH: + if CP.carFingerprint in HONDA_RADARLESS: + signals += [("CRUISE_SPEED", "ACC_HUD", 255), + ] + checks += [ + ("ACC_HUD", 0), + ] + + elif CP.carFingerprint not in HONDA_BOSCH: signals += [("COMPUTER_BRAKE", "BRAKE_COMMAND", 0), ("AEB_REQ_1", "BRAKE_COMMAND", 0), ("FCW", "BRAKE_COMMAND", 0), diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py index 6604f7d106..b0ae1dfec4 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -3,7 +3,7 @@ from cereal import car from panda import Panda from common.numpy_fast import interp from common.params import Params -from selfdrive.car.honda.values import CarControllerParams, CruiseButtons, HondaFlags, CAR, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL +from selfdrive.car.honda.values import CarControllerParams, CruiseButtons, HondaFlags, CAR, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL, HONDA_RADARLESS from selfdrive.car import STD_CARGO_KG, CivicParams, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config from selfdrive.car.interfaces import CarInterfaceBase from selfdrive.car.disable_ecu import disable_ecu @@ -41,6 +41,9 @@ class CarInterface(CarInterfaceBase): ret.openpilotLongitudinalControl = Params().get_bool("DisableRadar") ret.pcmCruise = not ret.openpilotLongitudinalControl + elif candidate in HONDA_RADARLESS: + ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hondaRadarless)] + ret.radarOffCan = True else: ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hondaNidec)] ret.enableGasInterceptor = 0x201 in fingerprint[0] @@ -104,7 +107,7 @@ class CarInterface(CarInterfaceBase): ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[1.1], [0.33]] tire_stiffness_factor = 1. - elif candidate in (CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL): + elif candidate in (CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CIVIC_22): stop_and_go = True ret.mass = CivicParams.MASS ret.wheelbase = CivicParams.WHEELBASE diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py index 083a52bb86..73ea03cbaa 100644 --- a/selfdrive/car/honda/values.py +++ b/selfdrive/car/honda/values.py @@ -69,6 +69,7 @@ class CAR: CIVIC = "HONDA CIVIC 2016" CIVIC_BOSCH = "HONDA CIVIC (BOSCH) 2019" CIVIC_BOSCH_DIESEL = "HONDA CIVIC SEDAN 1.6 DIESEL 2019" + CIVIC_22 = "HONDA CIVIC 2022" ACURA_ILX = "ACURA ILX 2016" CRV = "HONDA CR-V 2016" CRV_5G = "HONDA CR-V 2017" @@ -1351,6 +1352,40 @@ FW_VERSIONS = { b'57114-TYF-E030\x00\x00' ], }, + CAR.CIVIC_22:{ + (Ecu.eps, 0x18DA30F1, None):[ + b'39990-T39-A130\x00\x00', + b'39990-T43-J020\x00\x00', #hatch + ], + (Ecu.gateway, 0x18DAEFF1, None):[ + b'38897-T20-A020\x00\x00', + b'38897-T20-A510\x00\x00', #hatch + b'38897-T21-A010\x00\x00', + ], + (Ecu.srs, 0x18DA53F1, None):[ + b'77959-T20-A970\x00\x00', + b'77959-T47-A940\x00\x00', #hatch + ], + (Ecu.combinationMeter, 0x18DA60F1, None):[ + b'78108-T21-A220\x00\x00', + b'78108-T21-A620\x00\x00', + b'78108-T23-A110\x00\x00', #hatch + ], + (Ecu.vsa, 0x18DA28F1, None):[ + b'57114-T20-AB40\x00\x00', + b'57114-T43-JB30\x00\x00', #hatch + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-65D-A020\x00\x00', + b'28101-65D-A120\x00\x00', #hatch + b'28101-65H-A020\x00\x00', + ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-64L-A540\x00\x00', + b'37805-64S-A540\x00\x00', + b'37805-64S-A720\x00\x00', #hatch + ], + }, } DBC = { @@ -1377,6 +1412,7 @@ DBC = { CAR.RIDGELINE: dbc_dict('honda_ridgeline_black_edition_2017_can_generated', 'acura_ilx_2016_nidec'), CAR.INSIGHT: dbc_dict('honda_insight_ex_2019_can_generated', None), CAR.HONDA_E: dbc_dict('acura_rdx_2020_can_generated', None), + CAR.CIVIC_22: dbc_dict('honda_civic_ex_2022_can_generated', None), } STEER_THRESHOLD = { @@ -1391,3 +1427,4 @@ HONDA_NIDEC_ALT_SCM_MESSAGES = set([CAR.ACURA_ILX, CAR.ACURA_RDX, CAR.CRV, CAR.C HONDA_BOSCH = set([CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_5G, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E]) HONDA_BOSCH_ALT_BRAKE_SIGNAL = set([CAR.ACCORD, CAR.CRV_5G, CAR.ACURA_RDX_3G]) +HONDA_RADARLESS = set([CAR.CIVIC_22, ])