|
|
@ -5,7 +5,7 @@ from cereal import car |
|
|
|
from common.conversions import Conversions as CV |
|
|
|
from common.conversions import Conversions as CV |
|
|
|
from opendbc.can.parser import CANParser |
|
|
|
from opendbc.can.parser import CANParser |
|
|
|
from opendbc.can.can_define import CANDefine |
|
|
|
from opendbc.can.can_define import CANDefine |
|
|
|
from selfdrive.car.hyundai.values import DBC, FEATURES, CAMERA_SCC_CAR, HDA2_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams |
|
|
|
from selfdrive.car.hyundai.values import DBC, FEATURES, CAMERA_SCC_CAR, CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams |
|
|
|
from selfdrive.car.interfaces import CarStateBase |
|
|
|
from selfdrive.car.interfaces import CarStateBase |
|
|
|
|
|
|
|
|
|
|
|
PREV_BUTTON_SAMPLES = 8 |
|
|
|
PREV_BUTTON_SAMPLES = 8 |
|
|
@ -19,7 +19,7 @@ class CarState(CarStateBase): |
|
|
|
self.cruise_buttons = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) |
|
|
|
self.cruise_buttons = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) |
|
|
|
self.main_buttons = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) |
|
|
|
self.main_buttons = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) |
|
|
|
|
|
|
|
|
|
|
|
if CP.carFingerprint in HDA2_CAR: |
|
|
|
if CP.carFingerprint in CANFD_CAR: |
|
|
|
self.shifter_values = can_define.dv["ACCELERATOR"]["GEAR"] |
|
|
|
self.shifter_values = can_define.dv["ACCELERATOR"]["GEAR"] |
|
|
|
elif self.CP.carFingerprint in FEATURES["use_cluster_gears"]: |
|
|
|
elif self.CP.carFingerprint in FEATURES["use_cluster_gears"]: |
|
|
|
self.shifter_values = can_define.dv["CLU15"]["CF_Clu_Gear"] |
|
|
|
self.shifter_values = can_define.dv["CLU15"]["CF_Clu_Gear"] |
|
|
@ -35,8 +35,8 @@ class CarState(CarStateBase): |
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
|
|
|
|
|
|
|
|
def update(self, cp, cp_cam): |
|
|
|
def update(self, cp, cp_cam): |
|
|
|
if self.CP.carFingerprint in HDA2_CAR: |
|
|
|
if self.CP.carFingerprint in CANFD_CAR: |
|
|
|
return self.update_hda2(cp, cp_cam) |
|
|
|
return self.update_canfd(cp, cp_cam) |
|
|
|
|
|
|
|
|
|
|
|
ret = car.CarState.new_message() |
|
|
|
ret = car.CarState.new_message() |
|
|
|
|
|
|
|
|
|
|
@ -133,7 +133,7 @@ class CarState(CarStateBase): |
|
|
|
|
|
|
|
|
|
|
|
return ret |
|
|
|
return ret |
|
|
|
|
|
|
|
|
|
|
|
def update_hda2(self, cp, cp_cam): |
|
|
|
def update_canfd(self, cp, cp_cam): |
|
|
|
ret = car.CarState.new_message() |
|
|
|
ret = car.CarState.new_message() |
|
|
|
|
|
|
|
|
|
|
|
ret.gas = cp.vl["ACCELERATOR"]["ACCELERATOR_PEDAL"] / 255. |
|
|
|
ret.gas = cp.vl["ACCELERATOR"]["ACCELERATOR_PEDAL"] / 255. |
|
|
@ -183,8 +183,8 @@ class CarState(CarStateBase): |
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@staticmethod |
|
|
|
def get_can_parser(CP): |
|
|
|
def get_can_parser(CP): |
|
|
|
if CP.carFingerprint in HDA2_CAR: |
|
|
|
if CP.carFingerprint in CANFD_CAR: |
|
|
|
return CarState.get_can_parser_hda2(CP) |
|
|
|
return CarState.get_can_parser_canfd(CP) |
|
|
|
|
|
|
|
|
|
|
|
signals = [ |
|
|
|
signals = [ |
|
|
|
# signal_name, signal_address |
|
|
|
# signal_name, signal_address |
|
|
@ -318,7 +318,7 @@ class CarState(CarStateBase): |
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@staticmethod |
|
|
|
def get_cam_can_parser(CP): |
|
|
|
def get_cam_can_parser(CP): |
|
|
|
if CP.carFingerprint in HDA2_CAR: |
|
|
|
if CP.carFingerprint in CANFD_CAR: |
|
|
|
signals = [(f"BYTE{i}", "CAM_0x2a4") for i in range(3, 24)] |
|
|
|
signals = [(f"BYTE{i}", "CAM_0x2a4") for i in range(3, 24)] |
|
|
|
checks = [("CAM_0x2a4", 20)] |
|
|
|
checks = [("CAM_0x2a4", 20)] |
|
|
|
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 6) |
|
|
|
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 6) |
|
|
@ -373,7 +373,7 @@ class CarState(CarStateBase): |
|
|
|
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 2) |
|
|
|
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 2) |
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@staticmethod |
|
|
|
def get_can_parser_hda2(CP): |
|
|
|
def get_can_parser_canfd(CP): |
|
|
|
signals = [ |
|
|
|
signals = [ |
|
|
|
("WHEEL_SPEED_1", "WHEEL_SPEEDS"), |
|
|
|
("WHEEL_SPEED_1", "WHEEL_SPEEDS"), |
|
|
|
("WHEEL_SPEED_2", "WHEEL_SPEEDS"), |
|
|
|
("WHEEL_SPEED_2", "WHEEL_SPEEDS"), |
|
|
|