Skip to content

Commit f3855a7

Browse files
authored
Hyundai CAN Longitudinal: Enable for Camera SCC cars (#1563)
* Hyundai CAN Longitudinal: Enable for Camera SCC cars * fix
1 parent 2bc227e commit f3855a7

File tree

4 files changed

+19
-16
lines changed

4 files changed

+19
-16
lines changed

opendbc/car/hyundai/carcontroller.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def update(self, CC, CS, now_nanos):
9090
# *** common hyundai stuff ***
9191

9292
# tester present - w/ no response (keeps relevant ECU disabled)
93-
if self.frame % 100 == 0 and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC.value) and self.CP.openpilotLongitudinalControl:
93+
if self.frame % 100 == 0 and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC) and self.CP.openpilotLongitudinalControl:
9494
# for longitudinal control, either radar or ADAS driving ECU
9595
addr, bus = 0x7d0, 0
9696
if self.CP.flags & HyundaiFlags.CANFD_HDA2.value:
@@ -147,15 +147,15 @@ def update(self, CC, CS, now_nanos):
147147
use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value
148148
can_sends.extend(hyundaican.create_acc_commands(self.packer, CC.enabled, accel, jerk, int(self.frame / 2),
149149
hud_control, set_speed_in_units, stopping,
150-
CC.cruiseControl.override, use_fca))
150+
CC.cruiseControl.override, use_fca, self.CP))
151151

152152
# 20 Hz LFA MFA message
153153
if self.frame % 5 == 0 and self.CP.flags & HyundaiFlags.SEND_LFA.value:
154154
can_sends.append(hyundaican.create_lfahda_mfc(self.packer, CC.enabled))
155155

156156
# 5 Hz ACC options
157157
if self.frame % 20 == 0 and self.CP.openpilotLongitudinalControl:
158-
can_sends.extend(hyundaican.create_acc_opt(self.packer))
158+
can_sends.extend(hyundaican.create_acc_opt(self.packer, self.CP))
159159

160160
# 2 Hz front radar options
161161
if self.frame % 50 == 0 and self.CP.openpilotLongitudinalControl:

opendbc/car/hyundai/carstate.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def update(self, can_parsers) -> structs.CarState:
153153

154154
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear))
155155

156-
if not self.CP.openpilotLongitudinalControl:
156+
if not self.CP.openpilotLongitudinalControl or self.CP.flags & HyundaiFlags.CAMERA_SCC:
157157
aeb_src = "FCA11" if self.CP.flags & HyundaiFlags.USE_FCA.value else "SCC12"
158158
aeb_sig = "FCA_CmdAct" if self.CP.flags & HyundaiFlags.USE_FCA.value else "AEB_CmdAct"
159159
aeb_warning = cp_cruise.vl[aeb_src]["CF_VSM_Warn"] != 0
@@ -372,7 +372,7 @@ def get_can_parsers(self, CP):
372372
("LKAS11", 100)
373373
]
374374

375-
if not CP.openpilotLongitudinalControl and CP.flags & HyundaiFlags.CAMERA_SCC:
375+
if CP.flags & HyundaiFlags.CAMERA_SCC:
376376
cam_messages += [
377377
("SCC11", 50),
378378
("SCC12", 50),

opendbc/car/hyundai/hyundaican.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def create_lfahda_mfc(packer, enabled):
123123
}
124124
return packer.make_can_msg("LFAHDA_MFC", 0, values)
125125

126-
def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, set_speed, stopping, long_override, use_fca):
126+
def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, set_speed, stopping, long_override, use_fca, CP):
127127
commands = []
128128

129129
scc11_values = {
@@ -169,7 +169,8 @@ def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, se
169169
commands.append(packer.make_can_msg("SCC14", 0, scc14_values))
170170

171171
# Only send FCA11 on cars where it exists on the bus
172-
if use_fca:
172+
# On Camera SCC cars, FCA11 is not disabled, so we forward stock FCA11 back to the car forward hooks
173+
if use_fca and not (CP.flags & HyundaiFlags.CAMERA_SCC):
173174
# note that some vehicles most likely have an alternate checksum/counter definition
174175
# https://github.com/commaai/opendbc/commit/9ddcdb22c4929baf310295e832668e6e7fcfa602
175176
fca11_values = {
@@ -184,7 +185,7 @@ def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, se
184185

185186
return commands
186187

187-
def create_acc_opt(packer):
188+
def create_acc_opt(packer, CP):
188189
commands = []
189190

190191
scc13_values = {
@@ -195,11 +196,13 @@ def create_acc_opt(packer):
195196
commands.append(packer.make_can_msg("SCC13", 0, scc13_values))
196197

197198
# TODO: this needs to be detected and conditionally sent on unsupported long cars
198-
fca12_values = {
199-
"FCA_DrvSetState": 2,
200-
"FCA_USM": 1, # AEB disabled
201-
}
202-
commands.append(packer.make_can_msg("FCA12", 0, fca12_values))
199+
# On Camera SCC cars, FCA12 is not disabled, so we forward stock FCA12 back to the car forward hooks
200+
if not (CP.flags & HyundaiFlags.CAMERA_SCC):
201+
fca12_values = {
202+
"FCA_DrvSetState": 2,
203+
"FCA_USM": 1, # AEB disabled
204+
}
205+
commands.append(packer.make_can_msg("FCA12", 0, fca12_values))
203206

204207
return commands
205208

opendbc/car/hyundai/interface.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from panda import Panda
22
from opendbc.car import Bus, get_safety_config, structs
33
from opendbc.car.hyundai.hyundaicanfd import CanBus
4-
from opendbc.car.hyundai.values import HyundaiFlags, CAR, DBC, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, \
4+
from opendbc.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_RADAR_SCC_CAR, \
55
CANFD_UNSUPPORTED_LONGITUDINAL_CAR, \
66
UNSUPPORTED_LONGITUDINAL_CAR
77
from opendbc.car.hyundai.radar_interface import RADAR_START_ADDR
@@ -68,7 +68,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experime
6868

6969
else:
7070
# Shared configuration for non CAN-FD cars
71-
ret.experimentalLongitudinalAvailable = candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | CAMERA_SCC_CAR)
71+
ret.experimentalLongitudinalAvailable = candidate not in UNSUPPORTED_LONGITUDINAL_CAR
7272
ret.enableBsm = 0x58b in fingerprint[0]
7373

7474
# Send LFA message on cars with HDA
@@ -128,7 +128,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experime
128128

129129
@staticmethod
130130
def init(CP, can_recv, can_send):
131-
if CP.openpilotLongitudinalControl and not (CP.flags & HyundaiFlags.CANFD_CAMERA_SCC.value):
131+
if CP.openpilotLongitudinalControl and not (CP.flags & (HyundaiFlags.CANFD_CAMERA_SCC | HyundaiFlags.CAMERA_SCC)):
132132
addr, bus = 0x7d0, 0
133133
if CP.flags & HyundaiFlags.CANFD_HDA2.value:
134134
addr, bus = 0x730, CanBus(CP).ECAN

0 commit comments

Comments
 (0)