You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.7 KiB
64 lines
2.7 KiB
5 years ago
|
import crcmod
|
||
|
from selfdrive.car.hyundai.values import CHECKSUM
|
||
|
|
||
|
hyundai_checksum = crcmod.mkCrcFun(0x11D, initCrc=0xFD, rev=False, xorOut=0xdf)
|
||
|
|
||
|
def create_lkas11(packer, car_fingerprint, apply_steer, steer_req, cnt, enabled, lkas11, hud_alert, keep_stock=False):
|
||
|
values = {
|
||
|
"CF_Lkas_Bca_R": 3 if enabled else 0,
|
||
|
"CF_Lkas_LdwsSysState": 3 if steer_req else 1,
|
||
|
"CF_Lkas_SysWarning": hud_alert,
|
||
|
"CF_Lkas_LdwsLHWarning": lkas11["CF_Lkas_LdwsLHWarning"] if keep_stock else 0,
|
||
|
"CF_Lkas_LdwsRHWarning": lkas11["CF_Lkas_LdwsRHWarning"] if keep_stock else 0,
|
||
|
"CF_Lkas_HbaLamp": lkas11["CF_Lkas_HbaLamp"] if keep_stock else 0,
|
||
|
"CF_Lkas_FcwBasReq": lkas11["CF_Lkas_FcwBasReq"] if keep_stock else 0,
|
||
|
"CR_Lkas_StrToqReq": apply_steer,
|
||
|
"CF_Lkas_ActToi": steer_req,
|
||
|
"CF_Lkas_ToiFlt": 0,
|
||
|
"CF_Lkas_HbaSysState": lkas11["CF_Lkas_HbaSysState"] if keep_stock else 1,
|
||
|
"CF_Lkas_FcwOpt": lkas11["CF_Lkas_FcwOpt"] if keep_stock else 0,
|
||
|
"CF_Lkas_HbaOpt": lkas11["CF_Lkas_HbaOpt"] if keep_stock else 3,
|
||
|
"CF_Lkas_MsgCount": cnt,
|
||
|
"CF_Lkas_FcwSysState": lkas11["CF_Lkas_FcwSysState"] if keep_stock else 0,
|
||
|
"CF_Lkas_FcwCollisionWarning": lkas11["CF_Lkas_FcwCollisionWarning"] if keep_stock else 0,
|
||
|
"CF_Lkas_FusionState": lkas11["CF_Lkas_FusionState"] if keep_stock else 0,
|
||
|
"CF_Lkas_Chksum": 0,
|
||
|
"CF_Lkas_FcwOpt_USM": 2 if enabled else 1,
|
||
|
"CF_Lkas_LdwsOpt_USM": lkas11["CF_Lkas_LdwsOpt_USM"] if keep_stock else 3,
|
||
|
}
|
||
|
|
||
|
dat = packer.make_can_msg("LKAS11", 0, values)[2]
|
||
|
|
||
|
if car_fingerprint in CHECKSUM["crc8"]:
|
||
|
# CRC Checksum as seen on 2019 Hyundai Santa Fe
|
||
|
dat = dat[:6] + dat[7:8]
|
||
|
checksum = hyundai_checksum(dat)
|
||
|
elif car_fingerprint in CHECKSUM["6B"]:
|
||
|
# Checksum of first 6 Bytes, as seen on 2018 Kia Sorento
|
||
|
checksum = sum(dat[:6]) % 256
|
||
|
elif car_fingerprint in CHECKSUM["7B"]:
|
||
|
# Checksum of first 6 Bytes and last Byte as seen on 2018 Kia Stinger
|
||
|
checksum = (sum(dat[:6]) + dat[7]) % 256
|
||
|
|
||
|
values["CF_Lkas_Chksum"] = checksum
|
||
|
|
||
|
return packer.make_can_msg("LKAS11", 0, values)
|
||
|
|
||
|
def create_clu11(packer, clu11, button):
|
||
|
values = {
|
||
|
"CF_Clu_CruiseSwState": button,
|
||
|
"CF_Clu_CruiseSwMain": clu11["CF_Clu_CruiseSwMain"],
|
||
|
"CF_Clu_SldMainSW": clu11["CF_Clu_SldMainSW"],
|
||
|
"CF_Clu_ParityBit1": clu11["CF_Clu_ParityBit1"],
|
||
|
"CF_Clu_VanzDecimal": clu11["CF_Clu_VanzDecimal"],
|
||
|
"CF_Clu_Vanz": clu11["CF_Clu_Vanz"],
|
||
|
"CF_Clu_SPEED_UNIT": clu11["CF_Clu_SPEED_UNIT"],
|
||
|
"CF_Clu_DetentOut": clu11["CF_Clu_DetentOut"],
|
||
|
"CF_Clu_RheostatLevel": clu11["CF_Clu_RheostatLevel"],
|
||
|
"CF_Clu_CluInfo": clu11["CF_Clu_CluInfo"],
|
||
|
"CF_Clu_AmpInfo": clu11["CF_Clu_AmpInfo"],
|
||
|
"CF_Clu_AliveCnt1": 0,
|
||
|
}
|
||
|
|
||
|
return packer.make_can_msg("CLU11", 0, values)
|