diff --git a/opendbc_repo/opendbc/car/hyundai/carcontroller.py b/opendbc_repo/opendbc/car/hyundai/carcontroller.py index 6396aa4f2f..4b2a8a3289 100644 --- a/opendbc_repo/opendbc/car/hyundai/carcontroller.py +++ b/opendbc_repo/opendbc/car/hyundai/carcontroller.py @@ -163,7 +163,7 @@ def update(self, CC, CS, now_nanos): self.steerDeltaDownLC = steerDeltaDownLC else: self.steerDeltaDownLC = self.steerDeltaDown - + self.soft_hold_mode = 1 if params.get_int("AutoCruiseControl") > 1 else 2 self.hapticFeedbackWhenSpeedCamera = int(params.get_int("HapticFeedbackWhenSpeedCamera")) @@ -184,7 +184,7 @@ def update(self, CC, CS, now_nanos): else: self.params.STEER_DELTA_UP = self.steerDeltaUp self.params.STEER_DELTA_DOWN = self.steerDeltaDown - + angle_control = self.CP.flags & HyundaiFlags.ANGLE_CONTROL # steering torque @@ -196,7 +196,7 @@ def update(self, CC, CS, now_nanos): self.angle_limit_counter, self.max_angle_frames, MAX_ANGLE_CONSECUTIVE_FRAMES) - #apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, + #apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, # CS.out.steeringAngleDeg, CC.latActive, self.params.ANGLE_LIMITS) MAX_LAT_ACCEL = 8.0 @@ -211,7 +211,7 @@ def update(self, CC, CS, now_nanos): rate_deg_s = calc_rate_limit_by_lat_accel(self.apply_angle_last, CS.out.vEgoRaw, self.CP.wheelbase, MAX_LAT_ACCEL, MAX_RATE_LOW, MAX_RATE_HIGH) if not same_dir: rate_deg_s = min(rate_deg_s * UNWIND_SCALE, UNWIND_MAX) - + rate_deg_per_tick = rate_deg_s * DT_CTRL apply_angle = np.clip(actuators.steeringAngleDeg, self.apply_angle_last - rate_deg_per_tick, @@ -274,7 +274,7 @@ def update(self, CC, CS, now_nanos): active_speed_decel = hud_control.activeCarrot == 3 and self.activeCarrot != 3 # 3: Speed Decel self.activeCarrot = hud_control.activeCarrot - if active_speed_decel and self.speedCameraHapticEndFrame < 0: # 과속카메라 감속시작 + if active_speed_decel and self.speedCameraHapticEndFrame < 0: # 과속카메라 감속시작 self.speedCameraHapticEndFrame = self.frame + (8.0 / DT_CTRL) #8초간 켜줌. elif not active_speed_decel: self.speedCameraHapticEndFrame = -1 @@ -331,7 +331,7 @@ def update(self, CC, CS, now_nanos): # LFA and HDA icons if self.frame % 5 == 0 and camera_scc: - can_sends.extend(hyundaicanfd.create_lfahda_cluster(self.packer, CS, self.CAN, CC.longActive, CC.latActive)) + can_sends.extend(hyundaicanfd.create_lfahda_cluster(self.packer, CS, self.CAN, CC.longActive, CC.latActive, self.canfd_debug)) # blinkers if hda2 and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: @@ -365,7 +365,7 @@ def update(self, CC, CS, now_nanos): can_sends.extend(hyundaicanfd.forward_button_message(self.packer, self.CAN, self.frame, CS, send_button, self.MainMode_ACC_trigger, self.LFA_trigger)) else: can_sends.extend(self.create_button_messages(CC, CS, use_clu11=False)) - + else: can_sends.append(hyundaican.create_lkas11(self.packer, self.frame, self.CP, apply_torque, apply_steer_req, torque_fault, CS.lkas11, sys_warning, sys_state, CC.enabled, @@ -384,7 +384,7 @@ def update(self, CC, CS, now_nanos): #jerk = 3.0 if actuators.longControlState == LongCtrlState.pid else 1.0 use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value if camera_scc: - + can_sends.extend(hyundaican.create_acc_commands_scc(self.packer, CC.enabled, accel, self.hyundai_jerk, int(self.frame / 2), hud_control, set_speed_in_units, stopping, CC.cruiseControl.override, casper_opt, CS, self.soft_hold_mode)) @@ -609,7 +609,7 @@ def check_carrot_cruise(self, CC, CS, hud_control, stopping, accel, a_target): self.carrot_cruise_accel = max(carrot_cruise, self.carrot_cruise_accel - 1.0 * DT_CTRL) # 점진적으로 줄임. if self.carrot_cruise == 0: self.carrot_cruise_accel = CS.out.aEgo - + def make_jerk(self, CP, CS, accel, actuators, hud_control): if actuators.longControlState == LongCtrlState.stopping: self.jerk = self.jerk_u_min / 2 - CS.out.aEgo diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index 527ba4fb8c..be15b0f2dc 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -86,7 +86,12 @@ def __init__(self, CP): self.adrv_info_160 = None self.adrv_info_162 = None self.hda_info_4a3 = None + self.cluster_speed_limit = None self.new_msg_4b4 = None + + self.hda2_counter = 99 + self.new_msg_4b9 = None + self.tcs_info_373 = None self.mdps_info = {} self.steer_touch_info = {} @@ -123,7 +128,7 @@ def __init__(self, CP): fingerprints_str = Params().get("FingerPrints", encoding='utf-8') fingerprints = ast.literal_eval(fingerprints_str) - #print("fingerprints =", fingerprints) + # print("fingerprints =", fingerprints) ecu_disabled = False if self.CP.openpilotLongitudinalControl and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC): ecu_disabled = True @@ -138,7 +143,7 @@ def __init__(self, CP): self.SCC14 = True if 905 in fingerprints[bus_cruise] else False self.FCA11 = False self.FCA11_bus = Bus.cam - + self.HAS_LFA_BUTTON = True if 913 in fingerprints[0] else False self.CRUISE_BUTTON_ALT = True if 1007 in fingerprints[0] else False @@ -151,8 +156,10 @@ def __init__(self, CP): self.ADRV_0x1ea = True if 0x1ea in fingerprints[cam_bus] else False self.ADRV_0x160 = True if 0x160 in fingerprints[cam_bus] else False self.LFAHDA_CLUSTER = True if 480 in fingerprints[cam_bus] else False + self.CLUSTER_SPEED_LIMIT = True if 0x1fa in fingerprints[pt_bus] else False self.HDA_INFO_4A3 = True if 0x4a3 in fingerprints[pt_bus] else False self.NEW_MSG_4B4 = True if 0x4b4 in fingerprints[pt_bus] else False + self.GEAR = True if 69 in fingerprints[pt_bus] else False self.GEAR_ALT = True if 64 in fingerprints[pt_bus] else False self.CAM_0x362 = True if 0x362 in fingerprints[alt_bus] else False @@ -163,7 +170,7 @@ def __init__(self, CP): self.cp_bsm = None self.time_zone = "UTC" - + self.controls_ready_count = 0 def update(self, can_parsers) -> structs.CarState: @@ -459,7 +466,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: ret.steeringAngleDeg = cp.vl["MDPS"]["STEERING_ANGLE_2"] * -1 else: ret.steeringAngleDeg = cp.vl["STEERING_SENSORS"]["STEERING_ANGLE"] * -1 - + ret.steeringTorque = cp.vl["MDPS"]["STEERING_COL_TORQUE"] ret.steeringTorqueEps = cp.vl["MDPS"]["STEERING_OUT_TORQUE"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > self.params.STEER_THRESHOLD, 5) @@ -470,7 +477,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: if self.STEER_TOUCH_2AF: self.steer_touch_info = cp.vl["STEER_TOUCH_2AF"] - blinkers_info = cp.vl["BLINKERS"] + blinkers_info = cp.vl["BLINKERS"] left_blinker_lamp = blinkers_info["LEFT_LAMP"] or blinkers_info["LEFT_LAMP_ALT"] right_blinker_lamp = blinkers_info["RIGHT_LAMP"] or blinkers_info["RIGHT_LAMP_ALT"] ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, left_blinker_lamp, right_blinker_lamp) @@ -497,7 +504,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.MainMode_ACC = cp_cam.vl["SCC_CONTROL"]["MainMode_ACC"] == 1 self.ACCMode = cp_cam.vl["SCC_CONTROL"]["ACCMode"] self.LFA_ICON = cp_cam.vl["LFAHDA_CLUSTER"]["HDA_LFA_SymSta"] - + if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons ret.cruiseState.enabled = cp.vl["TCS"]["ACC_REQ"] == 1 @@ -524,7 +531,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: if self.LFAHDA_CLUSTER: self.lfahda_cluster_info = cp_cam.vl["LFAHDA_CLUSTER"] - + corner = False self.adrv_info_161 = cp_cam.vl["ADRV_0x161"] if self.CCNC_0x161 else None self.adrv_info_162 = cp_cam.vl["CCNC_0x162"] if self.CCNC_0x162 else None @@ -545,8 +552,10 @@ def update_canfd(self, can_parsers) -> structs.CarState: ret.leftLatDist = self.adrv_info_1ea["LF_DETECT_LATERAL"] ret.rightLatDist = self.adrv_info_1ea["RF_DETECT_LATERAL"] self.adrv_info_160 = cp_cam.vl["ADRV_0x160"] if self.ADRV_0x160 else None + self.cluster_speed_limit = cp.vl["CLUSTER_SPEED_LIMIT"] if self.CLUSTER_SPEED_LIMIT else None self.hda_info_4a3 = cp.vl["HDA_INFO_4A3"] if self.HDA_INFO_4A3 else None + if self.hda_info_4a3 is not None: speedLimit = self.hda_info_4a3["SPEED_LIMIT"] if not self.is_metric: @@ -560,8 +569,17 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.time_zone = ZoneInfo(NUMERIC_TO_TZ.get(country_code, "UTC")) self.new_msg_4b4 = cp.vl["NEW_MSG_4B4"] if self.NEW_MSG_4B4 else None + + # self.new_msg_4b8 = cp.vl["NEW_MSG_4B8"] # if self.NEW_MSG_4B8 else None + # self.new_msg_4b9 = cp.vl["NEW_MSG_4B9"] # if self.NEW_MSG_4B9 else None + # self.new_msg_4ba = cp.vl["NEW_MSG_4BA"] # if self.NEW_MSG_4BA else None + # self.new_msg_4be = cp.vl["NEW_MSG_4BE"] # if self.NEW_MSG_4BE else None + # self.new_msg_4bf = cp.vl["NEW_MSG_4BF"] # if self.NEW_MSG_4BF else None + # self.new_msg_4c1 = cp.vl["NEW_MSG_4C1"] # if self.NEW_MSG_4C1 else None + # self.new_msg_4dc = cp.vl["NEW_MSG_4DC"] # if self.NEW_MSG_4DC else None + self.tcs_info_373 = cp.vl["TCS"] - + ret.gearStep = cp.vl["GEAR"]["GEAR_STEP"] if self.GEAR else 0 if 1 <= ret.gearStep <= 8 and ret.gearShifter == GearShifter.unknown: ret.gearShifter = GearShifter.drive diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index bd28358b52..c97aa4d63b 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -149,7 +149,7 @@ def create_steering_messages_camera_scc(frame, packer, CP, CAN, CC, lat_active, values["HAS_LANE_SAFETY"] = 0 values["LKA_ACTIVE"] = 0 # NEW_SIGNAL_1 - values["DampingGain"] = 0 if lat_active else 100 + values["DampingGain"] = 0 if lat_active else 100 #values["VALUE63"] = 0 #values["VALUE82_SET256"] = 0 @@ -267,14 +267,12 @@ def create_acc_cancel(packer, CP, CAN, cruise_info_copy): }) return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) -def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active): +def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active, canfd_debug): if CS.lfahda_cluster_info is not None: - values = {} # + values = {} values["HDA_CntrlModSta"] = 2 if long_active else 0 values["HDA_LFA_SymSta"] = 2 if lat_active else 0 - - # else: return [] return [packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)] @@ -289,7 +287,7 @@ def create_acc_control_scc2(packer, CAN, enabled, accel_last, accel, stopping, g acc_mode = 4 if enabled else 0 enabled = False accel = accel_last = 0.5 - + elif hyundai_jerk.carrot_cruise == 2: accel = accel_last = hyundai_jerk.carrot_cruise_accel @@ -346,7 +344,7 @@ def create_acc_control_scc2(packer, CAN, enabled, accel_last, accel, stopping, g # AccelLimitBandUpper, Lower values["SysFailState"] = 0 # 1: Performance degredation, 2: system temporairy unavailble, 3: SCC Service required , 눈이 묻어 레이더오류시... 2가 됨. 이때 가속을 안함... - values["AccelLimitBandUpper"] = 0.0 # 이값이 1.26일때 가속을 안하는 증상이 보임.. + values["AccelLimitBandUpper"] = 0.0 # 이값이 1.26일때 가속을 안하는 증상이 보임.. values["AccelLimitBandLower"] = 0.0 return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) @@ -455,7 +453,14 @@ def forward_button_message(packer, CAN, frame, CS, cruise_button, MainMode_ACC_t def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle, left_lane_warning, right_lane_warning, canfd_debug, MainMode_ACC_trigger, LFA_trigger): ret = [] + # if CS.new_msg_4b9 is not None: + # print(f"============new_msg_4b9==========\r\n") + + # if CS.new_msg_4b4 is not None: + # print(f"============new_msg_4b4==========\r\n") + if CP.flags & HyundaiFlags.CAMERA_SCC.value: + if frame % 2 == 0: if CS.adrv_info_160 is not None: values = copy.copy(CS.adrv_info_160) @@ -474,7 +479,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle ret.append(packer.make_can_msg(CS.cruise_btns_msg_canfd, CAN.CAM, values)) - if frame % 5 == 0: + if frame % 5 == 0: # 20hz if CS.adrv_info_161 is not None: main_enabled = CS.out.cruiseState.available cruise_enabled = CC.enabled @@ -540,7 +545,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["LANELINE_CURVATURE"] = (min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) if lat_active else 0 values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 and lat_active else 0 - # lane_color = 6 if lat_active else 2 + # lane_color = 6 if lat_active else 2 lane_color = 2 # 6: green, 2: white, 4: yellow if hud_control.leftLaneDepart: values["LANELINE_LEFT"] = 4 if (frame // 50) % 2 == 0 else 1 @@ -568,8 +573,11 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle if CS.adrv_info_1ea is not None: values = copy.copy(CS.adrv_info_1ea) + lat_active = CC.latActive + #values["HDA_MODE1"] = 8 #values["HDA_MODE2"] = 1 + """ if values['LF_DETECT'] == 0 and hud_control.leadLeftDist > 0: values['LF_DETECT'] = 3 if hud_control.leadLeftDist > 30 else 4 values['LF_DETECT_DISTANCE'] = hud_control.leadLeftDist @@ -578,7 +586,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RF_DETECT'] = 3 if hud_control.leadRightDist > 30 else 4 values['RF_DETECT_DISTANCE'] = hud_control.leadRightDist values['RF_DETECT_LATERAL'] = hud_control.leadRightLat - """ + if values['LR_DETECT'] == 0 and hud_control.leadLeftDist2 > 0: values['LR_DETECT'] = 4 values['LR_DETECT_DISTANCE'] = 2 @@ -588,6 +596,151 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_DISTANCE'] = 2 values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ + # 차선 커브 HUD 랑 클러스터 둘다 휘어짐 + if lat_active or canfd_debug > 0: + curvature = round(CS.out.steeringAngleDeg / 3) + values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) + values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 + else: + # 설정 안하면 0 이니까 굳이 할필요 있나? + values["LANELINE_CURVATURE"] = 0 + values["LANELINE_CURVATURE_DIRECTION"] = 0 + + # if canfd_debug > 0: + # values['LF_DETECT'] = 0 안나옴 + # values['LF_DETECT'] = 1 회색 + # values['LF_DETECT'] = 2 흰색 + # values['LF_DETECT'] = 3 흰색 + # values['LF_DETECT'] = 4 안나옴 + + # 3.6 ~ 4.5 까지 서서히 어두워지다 사라짐 + # values['LF_DETECT_LATERAL'] = 0 ~ 4.5 + # values['LF_DETECT'] = 2 # 2 랑 3 둘다 동일한듯 + + # 0 ~ 150. 근데 100 부터는 동일함 + # values['LF_DETECT_DISTANCE'] = 50 + + # values['LF_DETECT'] = 3 + # values['LF_DETECT_LATERAL'] = 3.0 + # values['LF_DETECT_DISTANCE'] = 0 + + # values['RF_DETECT'] = 3 + # values['RF_DETECT_LATERAL'] = 3.0 + # values['RF_DETECT_DISTANCE'] = 0 + + + # values['CORNER_LR_SIG'] = 1 + # values['CORNER_LR_DETECT'] = 3.0 + # values['CORNER_LR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + + # values['CORNER_RR_SIG'] = 1 + # values['CORNER_RR_DETECT'] = 3.0 + # values['CORNER_RR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + + + # if canfd_debug == 1: + # values['LF_DETECT'] = 0 + # values['LF_DETECT_LATERAL'] = 2.9 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 2: + # values['LF_DETECT'] = 2 + # values['LF_DETECT_LATERAL'] = 3.1 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 3: + # values['LF_DETECT'] = 3 + # values['LF_DETECT_LATERAL'] = 3.2 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 4: + # values['LF_DETECT'] = 4 + # values['LF_DETECT_LATERAL'] = 3.3 + # values['LF_DETECT_DISTANCE'] = 12.0 + + # values['LEFTBLINK1'] = 1 # 좌깜빡이 켜진상태 유지 + # values['RIGHTBLINK1'] = 1 # 우깜빡이 켜진상태 유지 + + # 이것들은 hud랑 연비막대 자리에 텍스트로 나옴 + # values['AUTOLANECHANGE_MSG'] = 1 # 주변 상황을 확인하세요 + # values['AUTOLANECHANGE_MSG'] = 2 # 작동 조건이 아닙니다 + # values['AUTOLANECHANGE_MSG'] = 3 # 주행 차로를 분석중입니다 + # values['AUTOLANECHANGE_MSG'] = 4 # 급커브 구간입니다 + # values['AUTOLANECHANGE_MSG'] = 5 # 주행 중인 차로의 폭이 좁습니다 + # values['AUTOLANECHANGE_MSG'] = 6 # 작동 구간이 아닙니다. + # values['AUTOLANECHANGE_MSG'] = 7 # 비상등이 켜져있습니다 + # values['AUTOLANECHANGE_MSG'] = 8 # 주행속도가 낮습니다 + # values['AUTOLANECHANGE_MSG'] = 9 # 핸들을 잡으십시오 + # values['AUTOLANECHANGE_MSG'] = 10 # 작동 가능한 차로가 아닙니다 + # values['AUTOLANECHANGE_MSG'] = 11 # 핸들 조작이 감지되었습니다. + # 얘는 우측 RPM 게이지에 크게 나옴 + # values['AUTOLANECHANGE_MSG'] = 12 # ok 버튼을 누르면 차로변경 보조기능이 켜집니다 + # values['AUTOLANECHANGE_MSG'] = 13 # 없음. + # values['AUTOLANECHANGE_MSG'] = 14 # 없음. + # values['AUTOLANECHANGE_MSG'] = 15 # 없음. + + if canfd_debug > 0 : + # print(f"CS.lfahda_cluster_info {CS.lfahda_cluster_info is not None}\r\n") + if CS.lfahda_cluster_info is not None: + if CS.lfahda_cluster_info["HDA_CntrlModSta"] == 0: + values['HDA_MODE2'] = 1 # 차선변경 아이콘 회색 + elif CS.lfahda_cluster_info["HDA_CntrlModSta"] == 1: + values['HDA_MODE2'] = 3 # 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 + elif CS.lfahda_cluster_info["HDA_CntrlModSta"] == 2: + values['HDA_MODE2'] = 2 # 옆차선 녹색 + 차선변경 아이콘 녹색 + + # values['HDA_MODE2'] = 1 # 차선변경 아이콘 회색 + # values['HDA_MODE2'] = 2 # 옆차선 녹색 + 차선변경 아이콘 녹색 + # values['HDA_MODE2'] = 3 # 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 + # values['HDA_MODE2'] = 4 # 옆차선 흰색 + 차선변경 아이콘 흰색 둘이 같이 삐르게 점멸 + # values['HDA_MODE2'] = 5 # 차로변경보조 기능 점검 경고 + # values['HDA_MODE2'] = 6 # 딱히 뭐 없음 + # values['HDA_MODE2'] = 7 # 딱히 뭐 없음 + + # LANELINE_X_POSITION 값을 줘서 차선을 하나 넘어가면 화살표가 사라지는데 0 한번 넣어주면 다시 나옴. + # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 + # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 + # values['LANE_CHANGING_1'] = 5 # 딱히 뭐 없음 + # values['LANE_CHANGING_1'] = 6 # 딱히 뭐 없음 + # values['LANE_CHANGING_1'] = 7 # 딱히 뭐 없음 + + # 자동차선변경할때 차선 포지션 15 중앙 0~30 + # 좌, 우 둘다 중앙 기준에서 각 방향으로 멀어짐 + # L30 R30 이면 아주 넓은 차선을 가짐. + # 어쩌면 콤마가 인식하는 차선폭 보고 조정 가능할듯.. + # 새로운 차선이 생기는게 아니라 그냥 반대방향으로 텔레포트 시킴.. ㅋㅋ + # LANE_CHANGING_1 이거 안켜주면 hud 에서만 움직임.. + # if canfd_debug > 0: + # 중앙 + # values['HDA_MODE2'] = 2 + # values['LANE_CHANGING_1'] = 0 + # values['LANELINE_LEFT_POSITION'] = 15 + # values['LANELINE_RIGHT_POSITION'] = 15 + # elif canfd_debug == 2: + # # 왼쪽 + # values['HDA_MODE2'] = 3 + # lp_counter = (frame / 5) % 31 + # if lp_counter == 0 : + # values['LANE_CHANGING_1'] = 0 + # else: + # # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 + # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 + + # values['LANELINE_LEFT_POSITION'] = (15 - lp_counter + 31) % 31 + # values['LANELINE_RIGHT_POSITION'] = (lp_counter + 15) % 31 + + # elif canfd_debug == 3: + # # 오른쪽 + # values['HDA_MODE2'] = 3 + # lp_counter = (frame / 5) % 31 + # if lp_counter == 0 : + # values['LANE_CHANGING_1'] = 0 + # else: + # # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 + + # values['LANELINE_LEFT_POSITION'] = (lp_counter + 15) % 31 + # values['LANELINE_RIGHT_POSITION'] = (15 - lp_counter + 31) % 31 + ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) if CS.adrv_info_162 is not None: @@ -643,19 +796,116 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["VIBRATE"] = 1 ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) - if canfd_debug > 0: - if frame % 20 == 0: # 아직 시험중.. - if CS.hda_info_4a3 is not None: - values = copy.copy(CS.hda_info_4a3) - #if canfd_debug == 1: - values["SIGNAL_0"] = 5 - values["NEW_SIGNAL_1"] = 4 - values["SPEED_LIMIT"] = 80 - values["NEW_SIGNAL_3"] = 154 - values["NEW_SIGNAL_4"] = 9 - values["NEW_SIGNAL_5"] = 0 - values["NEW_SIGNAL_6"] = 256 - ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + if frame % 20 == 0: # 5HZ + if CS.hda_info_4a3 is not None: + values = copy.copy(CS.hda_info_4a3) + if canfd_debug > 0: + if canfd_debug == 1: + values["LinkClass"] = 2 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 40 + elif canfd_debug == 2: + values["LinkClass"] = 1 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 100 + ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + + if not CC.enabled : # 크루즈가 꺼지면 + CS.hda2_counter = 99 # 옆두부 메세지 카운터 리셋 + elif CC.enabled and CS.hda2_counter == 99: # 크루즈가 켜지면 + CS.hda2_counter = 0 # 옆두부 메세지 카운터 리셋 + + if frame % 5 == 0 and CS.hda2_counter < 6: # 20 Hz tick + CS.hda2_counter += 1 + values = {} + if CS.hda2_counter in [1,2,3]: + # 00 00 80 8A 32 30 01 00 + values["BYTE_1"] = 0x00 + values["BYTE_2"] = 0x00 + values["BYTE_3"] = 0x80 + values["BYTE_4"] = 0x8A + values["BYTE_5"] = 0x32 + values["BYTE_6"] = 0x30 + values["BYTE_7"] = 0x01 + values["BYTE_8"] = 0x00 + elif CS.hda2_counter in [4,5,6]: + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + print(f"NEW_MSG_4B9: {values}\r\n") + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + + + + # if frame % 10 == 0: # 10 Hz tick + # ctu = ((frame // 10) % 10) + 1 # 1 ~ 10 + # print(f"=== ctu === {ctu}") + # values = {} + # values["BYTE_1"] = ctu + # ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + + # if frame % 10 == 0: # 1hz + # if canfd_debug > 0: + # if CS.new_msg_4b8 is not None: + # values = copy.copy(CS.new_msg_4b8) + # ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) + # if CS.new_msg_4b9 is not None: + # values = copy.copy(CS.new_msg_4b9) + # ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + # if CS.new_msg_4ba is not None: + # values = copy.copy(CS.new_msg_4ba) + # ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) + # if CS.new_msg_4be is not None: + # values = copy.copy(CS.new_msg_4be) + # ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) + # if CS.new_msg_4bf is not None: + # values = copy.copy(CS.new_msg_4bf) + # ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) + # if CS.new_msg_4c1 is not None: + # values = copy.copy(CS.new_msg_4c1) + # ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) + # if CS.new_msg_4dc is not None: + # values = copy.copy(CS.new_msg_4dc) + # ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) + + if frame % 10 == 0: # 10hz + if CS.cluster_speed_limit is not None: + if canfd_debug > 0: + values = copy.copy(CS.cluster_speed_limit) + if canfd_debug == 1: + values["SPEED_LIMIT_1"] = 0 + values["SPEED_LIMIT_2"] = 0 + values["SPEED_LIMIT_3"] = 0 + elif canfd_debug >= 2: + values["SPEED_LIMIT_1"] = 100 + values["SPEED_LIMIT_2"] = 100 + values["SPEED_LIMIT_3"] = 105 + ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) + + if CS.new_msg_4b4 is not None: + values = copy.copy(CS.new_msg_4b4) + if canfd_debug > 0: + if canfd_debug == 1: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 1 + values["NEW_SIGNAL_4"] = 73 + values["NEW_SIGNAL_6"] = 2 + elif canfd_debug >= 2: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 2 + values["NEW_SIGNAL_4"] = 80 + values["NEW_SIGNAL_6"] = 5 + ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + return ret @@ -711,7 +961,7 @@ def alt_cruise_buttons(packer, CP, CAN, buttons, cruise_btns_msg, cnt): cruise_btns_msg["COUNTER"] = (cruise_btns_msg["COUNTER"] + 1 + cnt) % 256 bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM return packer.make_can_msg("CRUISE_BUTTONS_ALT", bus, cruise_btns_msg) - + def hkg_can_fd_checksum(address: int, sig, d: bytearray) -> int: crc = 0 for i in range(2, len(d)): diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 2436f92f2b..9c5e359ff2 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -506,12 +506,16 @@ BO_ 480 LFAHDA_CLUSTER: 16 FR_CMR SG_ HDA_LFA_WrnSnd : 49|2@1+ (1,0) [0|0] "" Dummy SG_ HDA_InfoPUDis1 : 51|3@1+ (1,0) [0|7] "" CLU,CGW SG_ HDA_TDMRMDclReq : 54|2@1+ (1,0) [0|3] "" Dummy - + BO_ 490 ADRV_0x1ea: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ HDA_MODE1 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ LEFT_BLINK_HOLD : 29|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_BLINK_HOLD : 30|1@0+ (1,0) [0|1] "" XXX SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX + SG_ LANE_LEFT : 36|2@0+ (1,0) [0|3] "" XXX + SG_ LANE_RIGHT : 41|2@0+ (1,0) [0|3] "" XXX + SG_ LANE_CHANGING : 45|3@0+ (1,0) [0|1] "" XXX SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX SG_ LF_DETECT : 74|3@0+ (1,0) [0|7] "" XXX @@ -519,17 +523,18 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ RF_DETECT_LATERAL : 94|7@0+ (0.1,0) [0|127] "" XXX SG_ RF_DETECT : 98|3@0+ (1,0) [0|7] "" XXX SG_ SET_ME_FF : 120|8@1+ (1,0) [0|255] "" XXX - SG_ CORNER_LR_DIST : 138|9@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_LR_DETECT : 152|6@1+ (1,0) [0|63] "" XXX - SG_ CORNER_LR_SIG : 160|1@0+ (1,0) [0|1] "" XXX - SG_ CORNER_RR_DIST : 162|9@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_RR_DETECT : 172|6@1+ (1,0) [0|63] "" XXX - SG_ CORNER_RR_SIG : 184|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_5 : 205|1@0+ (1,0) [0|1] "" XXX - SG_ AUTOLANECHANGE_CONFIRM_MSG_MAYBE : 207|2@0+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_2 : 208|5@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_3 : 239|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_1 : 247|8@0+ (1,0) [0|255] "" XXX + SG_ LR_DETECT_DISTANCE : 139|8@1+ (0.1,0) [0|511] "m" XXX + SG_ LR_DETECT_LATERAL : 152|6@1+ (0.1,0) [0|63] "" XXX + SG_ LR_DETECT : 162|3@0+ (1,0) [0|1] "" XXX + SG_ RR_DETECT_DISTANCE : 163|8@1+ (0.1,0) [0|511] "m" XXX + SG_ RR_DETECT_LATERAL : 172|6@1+ (0.1,0) [0|63] "" XXX + SG_ RR_DETECT : 186|3@0+ (1,0) [0|1] "" XXX + SG_ AUTOLANECHANGE_MSG : 207|4@0+ (1,0) [0|3] "" XXX + SG_ LANELINE_CURVATURE : 208|4@1+ (1,0) [0|31] "" XXX + SG_ LANELINE_CURVATURE_DIRECTION : 212|1@0+ (1,0) [0|1] "" XXX + SG_ LANELINE_LEFT_POSITION : 239|8@0+ (1,0) [0|255] "" XXX + SG_ LANELINE_RIGHT_POSITION : 247|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 248|1@0+ (1,0) [0|1] "" XXX BO_ 507 CAM_0x1fb: 32 CAMERA SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -754,6 +759,86 @@ BO_ 1043 BLINKERS: 8 XXX BO_ 1240 CLUSTER_INFO: 8 XXX SG_ DISTANCE_UNIT : 0|1@1+ (1,0) [0|1] "" XXX +BO_ 1208 NEW_MSG_4B8: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1209 NEW_MSG_4B9: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1210 NEW_MSG_4BA: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1214 NEW_MSG_4BE: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1215 NEW_MSG_4BF: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1217 NEW_MSG_4C1: 8 XXX + SG_ BYTE_1: 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2: 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3: 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4: 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5: 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6: 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7: 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8: 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1227 NEW_MSG_4CB: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|63] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1244 NEW_MSG_4DC: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX @@ -789,6 +874,8 @@ BO_ 485 BLINDSPOTS_FRONT_CORNER_1: 16 XXX SG_ NEW_SIGNAL_9 : 55|8@0+ (1,0) [0|255] "" XXX BO_ 506 CLUSTER_SPEED_LIMIT: 32 CAM + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 23|8@0+ (1,0) [0|255] "" XXX SG_ SPEED_LIMIT_1 : 39|7@0+ (1,0) [0|255] "" XXX SG_ SPEED_LIMIT_2 : 47|7@0+ (1,0) [0|255] "" XXX SG_ SECONDARY_LIMIT_1 : 79|8@0+ (1,0) [0|127] "" XXX @@ -841,17 +928,21 @@ BO_ 1187 HDA_INFO_4A3: 8 XXX SG_ CountryCode : 16|10@1+ (1,0) [0|1023] "" XXX SG_ MapSource : 27|3@1+ (1,0) [0|7] "" XXX SG_ TollExist : 30|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 37|6@0+ (1,0) [0|63] "" XXX SG_ TunnelExist : 38|2@1+ (1,0) [0|3] "" XXX SG_ NEW_SIGNAL_6 : 47|24@0+ (1,0) [0|16777215] "" XXX BO_ 1204 NEW_MSG_4B4: 8 XXX SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_8 : 15|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX - SG_ NEW_SIGNAL_7 : 35|4@0+ (1,0) [0|15] "" XXX - SG_ NEW_SIGNAL_3 : 39|4@0+ (1,0) [0|15] "" XXX - SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 17|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_12 : 18|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_3 : 21|7@1+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_14 : 30|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_2 : 36|7@1+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_7 : 45|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_5 : 46|2@1+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_4 : 48|8@1+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|255] "" XXX BO_ 1259 LOCAL_TIME2: 8 XXX @@ -994,6 +1085,10 @@ VAL_ 480 HDA_LFA_SymSta 0 "Off" 1 "Gray" 2 "Green" 3 "Green blink" ; VAL_ 480 HDA_LFA_WrnSnd 0 "Off " 1 "Additional Warning Sound" 2 "Reserved" 3 "Error indicator" ; VAL_ 480 HDA_InfoPUDis1 0 "No Pop-up" 1 "System Automatic off (LFA)" 2 "System Automatic off (HDA)" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Not Used" 7 "Error Indicator" ; VAL_ 480 HDA_TDMRMDclReq 0 "Not automatically deactivated state of LFA (default)" 1 "Automatically deactivated state of LFA" 2 "Reserved" 3 "Reserved" ; +VAL_ 490 LANE_LEFT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_RIGHT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_CHANGING_1 0 "IDLE" 1 "LEFT_CHECK" 3 "LEFT_CHANGING" 2 "RIGHT_CHECK" 4 "RIGHT_CHANGING"; +VAL_ 490 LANELINE_CURVATURE_DIRECTION 0 "LEFT" 1 "RIGHT"; VAL_ 676 LEFT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 676 RIGHT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 736 MSLA_STATUS 0 "disabled" 1 "active" 2 "paused"; diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index 9229eb710a..b890472565 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -70,14 +70,22 @@ const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { {0x110, 0, 32}, // LKAS_ALT (272) {0x110, 1, 32}, // LKAS_ALT (272) - {0x50, 1, 16}, // - {0x51, 1, 32}, // + {0x50, 1, 16}, // + {0x51, 1, 32}, // {353, 0, 32}, // ADRV_353 {354, 0, 32}, // CORNER_RADAR_HIGHWAY {512, 0, 8}, // ADRV_0x200 - {1187, 2, 8}, // 4A3 - {1204, 2, 8}, // 4B4 + {0x4a3, 2, 8}, // 4A3 1187 + {0x4b4, 2, 8}, // 4B4 1204 + + // {0x4b8, 2, 8}, // test + {0x4b9, 2, 8}, // test + // {0x4ba, 2, 8}, // test + // {0x4be, 2, 8}, // test + // {0x4bf, 2, 8}, // test + // {0x4c1, 2, 8}, // test + // {0x4dc, 2, 8}, // test {203, 0, 24}, // CB {373, 2, 24}, // TCS(0x175) @@ -100,8 +108,8 @@ const CanMsg HYUNDAI_CANFD_HDA1_TX_MSGS[] = { {353, 0, 32}, // ADRV_353 {354, 0, 32}, // CORNER_RADAR_HIGHWAY {512, 0, 8}, // ADRV_0x200 - {1187, 2, 8}, // 4A3 - {1204, 2, 8}, // 4B4 + // {1187, 2, 8}, // 4A3 + // {1204, 2, 8}, // 4B4 {373, 2, 24}, // TCS(0x175) {234, 2, 24}, // MDPS {687, 2, 8}, // STEER_TOUCH_2AF @@ -198,7 +206,7 @@ RxCheck hyundai_canfd_hda2_long_rx_checks[] = { }; RxCheck hyundai_canfd_hda2_long_rx_checks_scc2[] = { HYUNDAI_CANFD_COMMON_RX_CHECKS(0) - HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) }; RxCheck hyundai_canfd_hda2_long_alt_buttons_rx_checks[] = { HYUNDAI_CANFD_COMMON_RX_CHECKS(1) @@ -215,14 +223,14 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[32] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 1187, 1204, 203, 0, }; -int canfd_tx_hz[32] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 0, }; -uint32_t canfd_tx_timeout[32] = { 0, }; -int canfd_tx_addr2[32] = { 0x4a3, 373, 506, 463, 426, 234, 687, 0 }; -int canfd_tx_hz2[32] = { 5, 50, 10, 50, 50, 100, 10, 0 }; -uint32_t canfd_tx_timeout2[32] = { 0, }; -uint32_t canfd_tx_time[32] = { 0, }; -uint32_t canfd_tx_time2[32] = { 0, }; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 203, 0x4a3, 0x4b4, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; +int canfd_tx_hz[64] = { 100, 100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 100, 5, 10, 1, 20, 10, 1, 1, 1, 1, 0,}; +uint32_t canfd_tx_timeout[64] = { 0, }; +int canfd_tx_addr2[64] = { 0x4a3, 0x4b4, /*0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc,*/ 373, 506, 463, 426, 234, 687, 0, }; +int canfd_tx_hz2[64] = { 5, 10, /* 1, 1, 10, 1, 1, 1, 1,*/ 50, 10, 50, 50, 100, 10, 0, }; +uint32_t canfd_tx_timeout2[64] = { 0, }; +uint32_t canfd_tx_time[64] = { 0, }; +uint32_t canfd_tx_time2[64] = { 0, }; int hyundai_canfd_hda2_get_lkas_addr(void) { return hyundai_canfd_hda2_alt_steering ? 0x110 : 0x50; @@ -433,9 +441,19 @@ int addr_list_count2 = 0; static int hyundai_canfd_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; uint32_t now = microsecond_timer_get(); + if (bus_num == 0 && addr == 0x4a3) { return -1; } + if (bus_num == 0 && addr == 0x4b4) { return -1; } + if (bus_num == 0 && addr == 0x4b8) { return -1; } + // if (bus_num == 0 && addr == 0x4b9) { return -1; } + if (bus_num == 0 && addr == 0x4ba) { return -1; } + if (bus_num == 0 && addr == 0x4be) { return -1; } + if (bus_num == 0 && addr == 0x4bf) { return -1; } + if (bus_num == 0 && addr == 0x4c1) { return -1; } + if (bus_num == 0 && addr == 0x4dc) { return -1; } if (bus_num == 0) { bus_fwd = 2; + for (int i = 0; canfd_tx_addr2[i] > 0; i++) { if (addr == canfd_tx_addr2[i] && (now - canfd_tx_time2[i]) < canfd_tx_timeout2[i]) { bus_fwd = -1; @@ -485,7 +503,7 @@ static int hyundai_canfd_fwd_hook(int bus_num, int addr) { //if (addr == 908) bus_fwd = -1; //else if (addr == 1402) bus_fwd = -1; // - // Ʒڵ ڵ .. + // �Ʒ��ڵ��� ���������ڵ� ����.. �� //if (addr == 698) bus_fwd = -1; //if (addr == 1848) bus_fwd = -1; //if (addr == 1996) bus_fwd = -1; @@ -513,9 +531,10 @@ static int hyundai_canfd_fwd_hook(int bus_num, int addr) { static safety_config hyundai_canfd_init(uint16_t param) { - for (int i = 0; i < 32; i++) { + for (int i = 0; i < 64; i++) { if (canfd_tx_addr[i] > 0) canfd_tx_timeout[i] = 1. / canfd_tx_hz[i] * 1000000 + 20000; // add 20ms for safety if (canfd_tx_addr2[i] > 0) canfd_tx_timeout2[i] = 1. / canfd_tx_hz2[i] * 1000000 + 20000; // add 20ms for safety + // if (canfd_tx_addr[i] == 0 && canfd_tx_addr2[i] == 0) break; } hyundai_common_init(param); @@ -536,7 +555,7 @@ static safety_config hyundai_canfd_init(uint16_t param) { else print("no camera_scc \n"); if (hyundai_canfd_alt_buttons) { // carrot : for CANIVAL 4TH HDA2 print("hyundai safety canfd_hda2 long_alt_buttons\n"); - if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); else ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); } else { diff --git a/selfdrive/carrot/carrot_man.py b/selfdrive/carrot/carrot_man.py index 24f4d4f1f8..50525c1e52 100644 --- a/selfdrive/carrot/carrot_man.py +++ b/selfdrive/carrot/carrot_man.py @@ -379,6 +379,7 @@ def carrot_speed_serv(self, carrot_speed, frame): self.v_cruise_last = CS.vCruise else: self.v_cruise_change = 0 + return v_cruise_apply = max(min(CS.vCruise, v_ego_kph), 20) now = time.monotonic()