2024-06-13 02:17:19 +08:00
|
|
|
import crcmod
|
|
|
|
from openpilot.selfdrive.car.nissan.values import CAR
|
|
|
|
|
|
|
|
# TODO: add this checksum to the CANPacker
|
|
|
|
nissan_checksum = crcmod.mkCrcFun(0x11d, initCrc=0x00, rev=False, xorOut=0xff)
|
|
|
|
|
|
|
|
|
|
|
|
def create_steering_control(packer, apply_steer, frame, steer_on, lkas_max_torque):
|
|
|
|
values = {
|
|
|
|
"COUNTER": frame % 0x10,
|
|
|
|
"DESIRED_ANGLE": apply_steer,
|
|
|
|
"SET_0x80_2": 0x80,
|
|
|
|
"SET_0x80": 0x80,
|
|
|
|
"MAX_TORQUE": lkas_max_torque if steer_on else 0,
|
|
|
|
"LKA_ACTIVE": steer_on,
|
|
|
|
}
|
|
|
|
|
|
|
|
dat = packer.make_can_msg("LKAS", 0, values)[2]
|
|
|
|
|
|
|
|
values["CHECKSUM"] = nissan_checksum(dat[:7])
|
|
|
|
return packer.make_can_msg("LKAS", 0, values)
|
|
|
|
|
|
|
|
|
|
|
|
def create_acc_cancel_cmd(packer, car_fingerprint, cruise_throttle_msg):
|
|
|
|
values = {s: cruise_throttle_msg[s] for s in [
|
|
|
|
"COUNTER",
|
|
|
|
"PROPILOT_BUTTON",
|
|
|
|
"CANCEL_BUTTON",
|
|
|
|
"GAS_PEDAL_INVERTED",
|
|
|
|
"SET_BUTTON",
|
|
|
|
"RES_BUTTON",
|
|
|
|
"FOLLOW_DISTANCE_BUTTON",
|
|
|
|
"NO_BUTTON_PRESSED",
|
|
|
|
"GAS_PEDAL",
|
|
|
|
"USER_BRAKE_PRESSED",
|
|
|
|
"NEW_SIGNAL_2",
|
|
|
|
"GAS_PRESSED_INVERTED",
|
|
|
|
"unsure1",
|
|
|
|
"unsure2",
|
|
|
|
"unsure3",
|
|
|
|
]}
|
|
|
|
can_bus = 1 if car_fingerprint == CAR.NISSAN_ALTIMA else 2
|
|
|
|
|
|
|
|
values["CANCEL_BUTTON"] = 1
|
|
|
|
values["NO_BUTTON_PRESSED"] = 0
|
|
|
|
values["PROPILOT_BUTTON"] = 0
|
|
|
|
values["SET_BUTTON"] = 0
|
|
|
|
values["RES_BUTTON"] = 0
|
|
|
|
values["FOLLOW_DISTANCE_BUTTON"] = 0
|
|
|
|
|
|
|
|
return packer.make_can_msg("CRUISE_THROTTLE", can_bus, values)
|
|
|
|
|
|
|
|
|
|
|
|
def create_cancel_msg(packer, cancel_msg, cruise_cancel):
|
|
|
|
values = {s: cancel_msg[s] for s in [
|
|
|
|
"CANCEL_SEATBELT",
|
|
|
|
"NEW_SIGNAL_1",
|
|
|
|
"NEW_SIGNAL_2",
|
|
|
|
"NEW_SIGNAL_3",
|
|
|
|
]}
|
|
|
|
|
|
|
|
if cruise_cancel:
|
|
|
|
values["CANCEL_SEATBELT"] = 1
|
|
|
|
|
|
|
|
return packer.make_can_msg("CANCEL_MSG", 2, values)
|
|
|
|
|
|
|
|
|
2024-06-08 22:01:59 +08:00
|
|
|
def create_lkas_hud_msg(packer, lkas_hud_msg, enabled, left_line, right_line, left_lane_depart, right_lane_depart, lat_active):
|
2024-06-13 02:17:19 +08:00
|
|
|
values = {s: lkas_hud_msg[s] for s in [
|
|
|
|
"LARGE_WARNING_FLASHING",
|
|
|
|
"SIDE_RADAR_ERROR_FLASHING1",
|
|
|
|
"SIDE_RADAR_ERROR_FLASHING2",
|
|
|
|
"LEAD_CAR",
|
|
|
|
"LEAD_CAR_ERROR",
|
|
|
|
"FRONT_RADAR_ERROR",
|
|
|
|
"FRONT_RADAR_ERROR_FLASHING",
|
|
|
|
"SIDE_RADAR_ERROR_FLASHING3",
|
|
|
|
"LKAS_ERROR_FLASHING",
|
|
|
|
"SAFETY_SHIELD_ACTIVE",
|
|
|
|
"RIGHT_LANE_GREEN_FLASH",
|
|
|
|
"LEFT_LANE_GREEN_FLASH",
|
|
|
|
"FOLLOW_DISTANCE",
|
|
|
|
"AUDIBLE_TONE",
|
|
|
|
"SPEED_SET_ICON",
|
|
|
|
"SMALL_STEERING_WHEEL_ICON",
|
|
|
|
"unknown59",
|
|
|
|
"unknown55",
|
|
|
|
"unknown26",
|
|
|
|
"unknown28",
|
|
|
|
"unknown31",
|
|
|
|
"SET_SPEED",
|
|
|
|
"unknown43",
|
|
|
|
"unknown08",
|
|
|
|
"unknown05",
|
|
|
|
"unknown02",
|
|
|
|
]}
|
|
|
|
|
|
|
|
values["RIGHT_LANE_YELLOW_FLASH"] = 1 if right_lane_depart else 0
|
|
|
|
values["LEFT_LANE_YELLOW_FLASH"] = 1 if left_lane_depart else 0
|
|
|
|
|
2024-06-08 22:01:59 +08:00
|
|
|
values["LARGE_STEERING_WHEEL_ICON"] = 2 if lat_active else 0
|
|
|
|
values["RIGHT_LANE_GREEN"] = 1 if right_line and lat_active else 0
|
|
|
|
values["LEFT_LANE_GREEN"] = 1 if left_line and lat_active else 0
|
2024-06-13 02:17:19 +08:00
|
|
|
|
|
|
|
return packer.make_can_msg("PROPILOT_HUD", 0, values)
|
|
|
|
|
|
|
|
|
|
|
|
def create_lkas_hud_info_msg(packer, lkas_hud_info_msg, steer_hud_alert):
|
|
|
|
values = {s: lkas_hud_info_msg[s] for s in [
|
|
|
|
"NA_HIGH_ACCEL_TEMP",
|
|
|
|
"SIDE_RADAR_NA_HIGH_CABIN_TEMP",
|
|
|
|
"SIDE_RADAR_MALFUNCTION",
|
|
|
|
"LKAS_MALFUNCTION",
|
|
|
|
"FRONT_RADAR_MALFUNCTION",
|
|
|
|
"SIDE_RADAR_NA_CLEAN_REAR_CAMERA",
|
|
|
|
"NA_POOR_ROAD_CONDITIONS",
|
|
|
|
"CURRENTLY_UNAVAILABLE",
|
|
|
|
"SAFETY_SHIELD_OFF",
|
|
|
|
"FRONT_COLLISION_NA_FRONT_RADAR_OBSTRUCTION",
|
|
|
|
"PEDAL_MISSAPPLICATION_SYSTEM_ACTIVATED",
|
|
|
|
"SIDE_IMPACT_NA_RADAR_OBSTRUCTION",
|
|
|
|
"WARNING_DO_NOT_ENTER",
|
|
|
|
"SIDE_IMPACT_SYSTEM_OFF",
|
|
|
|
"SIDE_IMPACT_MALFUNCTION",
|
|
|
|
"FRONT_COLLISION_MALFUNCTION",
|
|
|
|
"SIDE_RADAR_MALFUNCTION2",
|
|
|
|
"LKAS_MALFUNCTION2",
|
|
|
|
"FRONT_RADAR_MALFUNCTION2",
|
|
|
|
"PROPILOT_NA_MSGS",
|
|
|
|
"BOTTOM_MSG",
|
|
|
|
"HANDS_ON_WHEEL_WARNING",
|
|
|
|
"WARNING_STEP_ON_BRAKE_NOW",
|
|
|
|
"PROPILOT_NA_FRONT_CAMERA_OBSTRUCTED",
|
|
|
|
"PROPILOT_NA_HIGH_CABIN_TEMP",
|
|
|
|
"WARNING_PROPILOT_MALFUNCTION",
|
|
|
|
"ACC_UNAVAILABLE_HIGH_CABIN_TEMP",
|
|
|
|
"ACC_NA_FRONT_CAMERA_IMPARED",
|
|
|
|
"unknown07",
|
|
|
|
"unknown10",
|
|
|
|
"unknown15",
|
|
|
|
"unknown23",
|
|
|
|
"unknown19",
|
|
|
|
"unknown31",
|
|
|
|
"unknown32",
|
|
|
|
"unknown46",
|
|
|
|
"unknown61",
|
|
|
|
"unknown55",
|
|
|
|
"unknown50",
|
|
|
|
]}
|
|
|
|
|
|
|
|
if steer_hud_alert:
|
|
|
|
values["HANDS_ON_WHEEL_WARNING"] = 1
|
|
|
|
|
|
|
|
return packer.make_can_msg("PROPILOT_HUD_INFO_MSG", 0, values)
|