EV6: reject fake cruise engagements (#25143)

* EV6: reject fake cruise engagements

* bump panda

* raise to 8

* update refs

* bump panda

Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: 44c6ca7eb4
taco
Adeeb Shihadeh 3 years ago committed by GitHub
parent 4fd8be115b
commit a68aa10b73
  1. 2
      opendbc
  2. 2
      panda
  3. 4
      selfdrive/car/hyundai/carcontroller.py
  4. 11
      selfdrive/car/hyundai/carstate.py
  5. 8
      selfdrive/car/hyundai/hda2can.py
  6. 5
      selfdrive/car/hyundai/interface.py
  7. 2
      selfdrive/car/hyundai/values.py
  8. 2
      selfdrive/test/process_replay/ref_commit

@ -1 +1 @@
Subproject commit 81148db67fd00d4e2a107b5b8269c532436edf2b Subproject commit 3fb3f5e82129ad76232bcdca10632ed0566b20f8

@ -1 +1 @@
Subproject commit baecd2ecc6a2a608e1305601f6f697feca69fe88 Subproject commit 2abeab913f6432e4327b07e247b8a46994ac77a1

@ -82,12 +82,12 @@ class CarController:
if (self.frame - self.last_button_frame) * DT_CTRL > 0.25: if (self.frame - self.last_button_frame) * DT_CTRL > 0.25:
if CC.cruiseControl.cancel: if CC.cruiseControl.cancel:
for _ in range(20): for _ in range(20):
can_sends.append(hda2can.create_buttons(self.packer, CS.buttons_counter+1, True, False)) can_sends.append(hda2can.create_buttons(self.packer, CS.buttons_counter+1, Buttons.CANCEL))
self.last_button_frame = self.frame self.last_button_frame = self.frame
# cruise standstill resume # cruise standstill resume
elif CC.cruiseControl.resume: elif CC.cruiseControl.resume:
can_sends.append(hda2can.create_buttons(self.packer, CS.buttons_counter+1, False, True)) can_sends.append(hda2can.create_buttons(self.packer, CS.buttons_counter+1, Buttons.RES_ACCEL))
self.last_button_frame = self.frame self.last_button_frame = self.frame
else: else:

@ -8,7 +8,7 @@ from opendbc.can.can_define import CANDefine
from selfdrive.car.hyundai.values import DBC, FEATURES, HDA2_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams from selfdrive.car.hyundai.values import DBC, FEATURES, HDA2_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams
from selfdrive.car.interfaces import CarStateBase from selfdrive.car.interfaces import CarStateBase
PREV_BUTTON_SAMPLES = 4 PREV_BUTTON_SAMPLES = 8
class CarState(CarStateBase): class CarState(CarStateBase):
@ -171,7 +171,10 @@ class CarState(CarStateBase):
speed_factor = CV.MPH_TO_MS if cp.vl["CLUSTER_INFO"]["DISTANCE_UNIT"] == 1 else CV.KPH_TO_MS speed_factor = CV.MPH_TO_MS if cp.vl["CLUSTER_INFO"]["DISTANCE_UNIT"] == 1 else CV.KPH_TO_MS
ret.cruiseState.speed = cp.vl["CRUISE_INFO"]["SET_SPEED"] * speed_factor ret.cruiseState.speed = cp.vl["CRUISE_INFO"]["SET_SPEED"] * speed_factor
self.buttons_counter = cp.vl["CRUISE_BUTTONS"]["_COUNTER"] self.cruise_buttons.extend(cp.vl_all["CRUISE_BUTTONS"]["CRUISE_BUTTONS"])
self.main_buttons.extend(cp.vl_all["CRUISE_BUTTONS"]["ADAPTIVE_CRUISE_MAIN_BTN"])
self.buttons_counter = cp.vl["CRUISE_BUTTONS"]["COUNTER"]
self.cam_0x2a4 = copy.copy(cp_cam.vl["CAM_0x2a4"]) self.cam_0x2a4 = copy.copy(cp_cam.vl["CAM_0x2a4"])
return ret return ret
@ -362,7 +365,9 @@ class CarState(CarStateBase):
("CRUISE_ACTIVE", "SCC1"), ("CRUISE_ACTIVE", "SCC1"),
("SET_SPEED", "CRUISE_INFO"), ("SET_SPEED", "CRUISE_INFO"),
("CRUISE_STANDSTILL", "CRUISE_INFO"), ("CRUISE_STANDSTILL", "CRUISE_INFO"),
("_COUNTER", "CRUISE_BUTTONS"), ("COUNTER", "CRUISE_BUTTONS"),
("CRUISE_BUTTONS", "CRUISE_BUTTONS"),
("ADAPTIVE_CRUISE_MAIN_BTN", "CRUISE_BUTTONS"),
("DISTANCE_UNIT", "CLUSTER_INFO"), ("DISTANCE_UNIT", "CLUSTER_INFO"),

@ -18,11 +18,9 @@ def create_cam_0x2a4(packer, frame, camera_values):
}) })
return packer.make_can_msg("CAM_0x2a4", 4, camera_values, frame % 255) return packer.make_can_msg("CAM_0x2a4", 4, camera_values, frame % 255)
def create_buttons(packer, cnt, cancel, resume): def create_buttons(packer, cnt, btn):
values = { values = {
"_COUNTER": cnt % 0xf,
"SET_ME_1": 1, "SET_ME_1": 1,
"DISTANCE_BTN": 1 if resume else 0, "CRUISE_BUTTONS": btn,
"PAUSE_RESUME_BTN": 1 if cancel else 0,
} }
return packer.make_can_msg("CRUISE_BUTTONS", 5, values) return packer.make_can_msg("CRUISE_BUTTONS", 5, values, cnt % 0xf)

@ -2,7 +2,7 @@
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from common.conversions import Conversions as CV from common.conversions import Conversions as CV
from selfdrive.car.hyundai.values import CAR, DBC, HDA2_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons, CarControllerParams from selfdrive.car.hyundai.values import CAR, DBC, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons, CarControllerParams
from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR
from selfdrive.car import STD_CARGO_KG, create_button_enable_events, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config from selfdrive.car import STD_CARGO_KG, create_button_enable_events, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
from selfdrive.car.interfaces import CarInterfaceBase from selfdrive.car.interfaces import CarInterfaceBase
@ -321,8 +321,7 @@ class CarInterface(CarInterfaceBase):
# To avoid re-engaging when openpilot cancels, check user engagement intention via buttons # To avoid re-engaging when openpilot cancels, check user engagement intention via buttons
# Main button also can trigger an engagement on these cars # Main button also can trigger an engagement on these cars
allow_enable = any(btn in ENABLE_BUTTONS for btn in self.CS.cruise_buttons) or any(self.CS.main_buttons) allow_enable = any(btn in ENABLE_BUTTONS for btn in self.CS.cruise_buttons) or any(self.CS.main_buttons)
allow_enable = allow_enable or self.CP.carFingerprint in HDA2_CAR events = self.create_common_events(ret, pcm_enable=self.CS.CP.pcmCruise, allow_enable=allow_enable)
events = self.create_common_events(ret, pcm_enable=self.CS.CP.pcmCruise, allow_enable=allow_enable or True)
if self.CS.brake_error: if self.CS.brake_error:
events.add(EventName.brakeUnavailable) events.add(EventName.brakeUnavailable)

@ -167,7 +167,7 @@ class Buttons:
RES_ACCEL = 1 RES_ACCEL = 1
SET_DECEL = 2 SET_DECEL = 2
GAP_DIST = 3 GAP_DIST = 3
CANCEL = 4 CANCEL = 4 # on newer models, this is a pause/resume button
FINGERPRINTS = { FINGERPRINTS = {
CAR.ELANTRA: [{ CAR.ELANTRA: [{

@ -1 +1 @@
11e721366f1c177a84e6cb8b48171113ac3b54f9 5efbbdf69e16db3d989bfaf62d10e958e80b9ca2
Loading…
Cancel
Save