@ -39,7 +39,7 @@ class CarControllerParams:
# If the max stock LKAS request is <384, add your car to this list.
# If the max stock LKAS request is <384, add your car to this list.
elif CP . carFingerprint in ( CAR . GENESIS_G80 , CAR . GENESIS_G90 , CAR . ELANTRA , CAR . IONIQ ,
elif CP . carFingerprint in ( CAR . GENESIS_G80 , CAR . GENESIS_G90 , CAR . ELANTRA , CAR . IONIQ ,
CAR . IONIQ_EV_LTD , CAR . SANTA_FE_PHEV_2022 , CAR . SONATA_LF , CAR . KIA_FORTE , CAR . KIA_NIRO_PHEV ,
CAR . IONIQ_EV_LTD , CAR . SANTA_FE_PHEV_2022 , CAR . SONATA_LF , CAR . KIA_FORTE , CAR . KIA_NIRO_PHEV ,
CAR . KIA_OPTIMA_H , CAR . KIA_SORENTO ) :
CAR . KIA_OPTIMA_H , CAR . KIA_OPTIMA_H_G4_FL , CAR . KIA_ SORENTO ) :
self . STEER_MAX = 255
self . STEER_MAX = 255
# these cars have significantly more torque than most HKG; limit to 70% of max
# these cars have significantly more torque than most HKG; limit to 70% of max
@ -114,6 +114,7 @@ class CAR:
KIA_OPTIMA_G4 = " KIA OPTIMA 4TH GEN "
KIA_OPTIMA_G4 = " KIA OPTIMA 4TH GEN "
KIA_OPTIMA_G4_FL = " KIA OPTIMA 4TH GEN FACELIFT "
KIA_OPTIMA_G4_FL = " KIA OPTIMA 4TH GEN FACELIFT "
KIA_OPTIMA_H = " KIA OPTIMA HYBRID 2017 & SPORTS 2019 "
KIA_OPTIMA_H = " KIA OPTIMA HYBRID 2017 & SPORTS 2019 "
KIA_OPTIMA_H_G4_FL = " KIA OPTIMA HYBRID 4TH GEN FACELIFT "
KIA_SELTOS = " KIA SELTOS 2021 "
KIA_SELTOS = " KIA SELTOS 2021 "
KIA_SPORTAGE_5TH_GEN = " KIA SPORTAGE 5TH GEN "
KIA_SPORTAGE_5TH_GEN = " KIA SPORTAGE 5TH GEN "
KIA_SORENTO = " KIA SORENTO GT LINE 2018 "
KIA_SORENTO = " KIA SORENTO GT LINE 2018 "
@ -237,12 +238,11 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
] ,
] ,
CAR . KIA_NIRO_HEV_2ND_GEN : HyundaiCarInfo ( " Kia Niro Hybrid 2023 " , car_parts = CarParts . common ( [ CarHarness . hyundai_a ] ) ) ,
CAR . KIA_NIRO_HEV_2ND_GEN : HyundaiCarInfo ( " Kia Niro Hybrid 2023 " , car_parts = CarParts . common ( [ CarHarness . hyundai_a ] ) ) ,
CAR . KIA_OPTIMA_G4 : HyundaiCarInfo ( " Kia Optima 2017 " , " Advanced Smart Cruise Control " ,
CAR . KIA_OPTIMA_G4 : HyundaiCarInfo ( " Kia Optima 2017 " , " Advanced Smart Cruise Control " ,
car_parts = CarParts . common ( [ CarHarness . hyundai_b ] ) ) , # TODO: may support 2016, 2018
car_parts = CarParts . common ( [ CarHarness . hyundai_b ] ) ) , # TODO: may support 2016, 2018
CAR . KIA_OPTIMA_G4_FL : HyundaiCarInfo ( " Kia Optima 2019-20 " , car_parts = CarParts . common ( [ CarHarness . hyundai_g ] ) ) ,
CAR . KIA_OPTIMA_G4_FL : HyundaiCarInfo ( " Kia Optima 2019-20 " , car_parts = CarParts . common ( [ CarHarness . hyundai_g ] ) ) ,
CAR . KIA_OPTIMA_H : [
# TODO: may support adjacent years. may have a non-zero minimum steering speed
HyundaiCarInfo ( " Kia Optima Hybrid 2017 " , " Advanced Smart Cruise Control " ) , # TODO: may support adjacent years
CAR . KIA_OPTIMA_H : HyundaiCarInfo ( " Kia Optima Hybrid 2017 " , " Advanced Smart Cruise Control " ) ,
HyundaiCarInfo ( " Kia Optima Hybrid 2019 " ) ,
CAR . KIA_OPTIMA_H_G4_FL : HyundaiCarInfo ( " Kia Optima Hybrid 2019 " , car_parts = CarParts . common ( [ CarHarness . hyundai_h ] ) ) ,
] ,
CAR . KIA_SELTOS : HyundaiCarInfo ( " Kia Seltos 2021 " , car_parts = CarParts . common ( [ CarHarness . hyundai_a ] ) ) ,
CAR . KIA_SELTOS : HyundaiCarInfo ( " Kia Seltos 2021 " , car_parts = CarParts . common ( [ CarHarness . hyundai_a ] ) ) ,
CAR . KIA_SPORTAGE_5TH_GEN : HyundaiCarInfo ( " Kia Sportage 2023 " , car_parts = CarParts . common ( [ CarHarness . hyundai_n ] ) ) ,
CAR . KIA_SPORTAGE_5TH_GEN : HyundaiCarInfo ( " Kia Sportage 2023 " , car_parts = CarParts . common ( [ CarHarness . hyundai_n ] ) ) ,
CAR . KIA_SORENTO : [
CAR . KIA_SORENTO : [
@ -1624,6 +1624,17 @@ FW_VERSIONS = {
b ' \xf1 \x00 JFP LKAS AT EUR LHD 1.00 1.03 95895-A8100 160711 ' ,
b ' \xf1 \x00 JFP LKAS AT EUR LHD 1.00 1.03 95895-A8100 160711 ' ,
] ,
] ,
} ,
} ,
CAR . KIA_OPTIMA_H_G4_FL : {
( Ecu . fwdRadar , 0x7d0 , None ) : [
b ' \xf1 \x00 JFhe SCC FHCUP 1.00 1.01 99110-A8500 ' ,
] ,
( Ecu . fwdCamera , 0x7c4 , None ) : [
b ' \xf1 \x00 JFH MFC AT KOR LHD 1.00 1.01 95895-A8200 180323 ' ,
] ,
( Ecu . engine , 0x7e0 , None ) : [
b ' \xf1 \x81 6H6D1051 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
} ,
CAR . ELANTRA : {
CAR . ELANTRA : {
( Ecu . fwdCamera , 0x7c4 , None ) : [
( Ecu . fwdCamera , 0x7c4 , None ) : [
b ' \xf1 \x00 PD LKAS AT USA LHD 1.01 1.01 95740-G3100 A54 ' ,
b ' \xf1 \x00 PD LKAS AT USA LHD 1.01 1.01 95740-G3100 A54 ' ,
@ -1987,7 +1998,7 @@ CAN_GEARS = {
# which message has the gear
# which message has the gear
" use_cluster_gears " : { CAR . ELANTRA , CAR . KONA } ,
" use_cluster_gears " : { CAR . ELANTRA , CAR . KONA } ,
" use_tcu_gears " : { CAR . KIA_OPTIMA_G4 , CAR . KIA_OPTIMA_G4_FL , CAR . SONATA_LF , CAR . VELOSTER , CAR . TUCSON } ,
" use_tcu_gears " : { CAR . KIA_OPTIMA_G4 , CAR . KIA_OPTIMA_G4_FL , CAR . SONATA_LF , CAR . VELOSTER , CAR . TUCSON } ,
" use_elect_gears " : { CAR . KIA_NIRO_EV , CAR . KIA_NIRO_PHEV , CAR . KIA_NIRO_HEV_2021 , CAR . KIA_OPTIMA_H , CAR . IONIQ_EV_LTD ,
" use_elect_gears " : { CAR . KIA_NIRO_EV , CAR . KIA_NIRO_PHEV , CAR . KIA_NIRO_HEV_2021 , CAR . KIA_OPTIMA_H , CAR . KIA_OPTIMA_H_G4_FL , CAR . IONIQ_EV_LTD ,
CAR . KONA_EV , CAR . IONIQ , CAR . IONIQ_EV_2020 , CAR . IONIQ_PHEV , CAR . ELANTRA_HEV_2021 , CAR . SONATA_HYBRID ,
CAR . KONA_EV , CAR . IONIQ , CAR . IONIQ_EV_2020 , CAR . IONIQ_PHEV , CAR . ELANTRA_HEV_2021 , CAR . SONATA_HYBRID ,
CAR . KONA_HEV , CAR . IONIQ_HEV_2022 , CAR . SANTA_FE_HEV_2022 , CAR . SANTA_FE_PHEV_2022 , CAR . IONIQ_PHEV_2019 ,
CAR . KONA_HEV , CAR . IONIQ_HEV_2022 , CAR . SANTA_FE_HEV_2022 , CAR . SANTA_FE_PHEV_2022 , CAR . IONIQ_PHEV_2019 ,
CAR . KONA_EV_2022 , CAR . KIA_K5_HEV_2020 } ,
CAR . KONA_EV_2022 , CAR . KIA_K5_HEV_2020 } ,
@ -2009,7 +2020,7 @@ CAMERA_SCC_CAR = {CAR.KONA_EV_2022, }
HYBRID_CAR = { CAR . IONIQ_PHEV , CAR . ELANTRA_HEV_2021 , CAR . KIA_NIRO_PHEV , CAR . KIA_NIRO_HEV_2021 , CAR . SONATA_HYBRID , CAR . KONA_HEV , CAR . IONIQ ,
HYBRID_CAR = { CAR . IONIQ_PHEV , CAR . ELANTRA_HEV_2021 , CAR . KIA_NIRO_PHEV , CAR . KIA_NIRO_HEV_2021 , CAR . SONATA_HYBRID , CAR . KONA_HEV , CAR . IONIQ ,
CAR . IONIQ_HEV_2022 , CAR . SANTA_FE_HEV_2022 , CAR . SANTA_FE_PHEV_2022 , CAR . IONIQ_PHEV_2019 , CAR . TUCSON_HYBRID_4TH_GEN ,
CAR . IONIQ_HEV_2022 , CAR . SANTA_FE_HEV_2022 , CAR . SANTA_FE_PHEV_2022 , CAR . IONIQ_PHEV_2019 , CAR . TUCSON_HYBRID_4TH_GEN ,
CAR . KIA_SPORTAGE_HYBRID_5TH_GEN , CAR . KIA_SORENTO_PHEV_4TH_GEN , CAR . KIA_K5_HEV_2020 , CAR . KIA_NIRO_HEV_2ND_GEN ,
CAR . KIA_SPORTAGE_HYBRID_5TH_GEN , CAR . KIA_SORENTO_PHEV_4TH_GEN , CAR . KIA_K5_HEV_2020 , CAR . KIA_NIRO_HEV_2ND_GEN ,
CAR . KIA_SORENTO_HEV_4TH_GEN , CAR . KIA_OPTIMA_H , CAR . KIA_K8_HEV_1ST_GEN }
CAR . KIA_SORENTO_HEV_4TH_GEN , CAR . KIA_OPTIMA_H , CAR . KIA_OPTIMA_H_G4_FL , CAR . KIA_ K8_HEV_1ST_GEN }
EV_CAR = { CAR . IONIQ_EV_2020 , CAR . IONIQ_EV_LTD , CAR . KONA_EV , CAR . KIA_NIRO_EV , CAR . KIA_NIRO_EV_2ND_GEN , CAR . KONA_EV_2022 ,
EV_CAR = { CAR . IONIQ_EV_2020 , CAR . IONIQ_EV_LTD , CAR . KONA_EV , CAR . KIA_NIRO_EV , CAR . KIA_NIRO_EV_2ND_GEN , CAR . KONA_EV_2022 ,
CAR . KIA_EV6 , CAR . IONIQ_5 , CAR . IONIQ_6 , CAR . GENESIS_GV60_EV_1ST_GEN , CAR . KONA_EV_2ND_GEN }
CAR . KIA_EV6 , CAR . IONIQ_5 , CAR . IONIQ_6 , CAR . GENESIS_GV60_EV_1ST_GEN , CAR . KONA_EV_2ND_GEN }
@ -2020,7 +2031,8 @@ LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_LTD, CAR.KIA_OPTIMA_
CAR . KIA_OPTIMA_H }
CAR . KIA_OPTIMA_H }
# these cars have not been verified to work with longitudinal yet - radar disable, sending correct messages, etc.
# these cars have not been verified to work with longitudinal yet - radar disable, sending correct messages, etc.
UNSUPPORTED_LONGITUDINAL_CAR = LEGACY_SAFETY_MODE_CAR | { CAR . KIA_NIRO_PHEV , CAR . KIA_SORENTO , CAR . SONATA_LF , CAR . KIA_OPTIMA_G4_FL }
UNSUPPORTED_LONGITUDINAL_CAR = LEGACY_SAFETY_MODE_CAR | { CAR . KIA_NIRO_PHEV , CAR . KIA_SORENTO , CAR . SONATA_LF , CAR . KIA_OPTIMA_G4_FL ,
CAR . KIA_OPTIMA_H_G4_FL }
# If 0x500 is present on bus 1 it probably has a Mando radar outputting radar points.
# If 0x500 is present on bus 1 it probably has a Mando radar outputting radar points.
# If no points are outputted by default it might be possible to turn it on using selfdrive/debug/hyundai_enable_radar_points.py
# If no points are outputted by default it might be possible to turn it on using selfdrive/debug/hyundai_enable_radar_points.py
@ -2049,6 +2061,7 @@ DBC = {
CAR . KIA_OPTIMA_G4 : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_G4 : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_G4_FL : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_G4_FL : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_H : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_H : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_OPTIMA_H_G4_FL : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_SELTOS : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_SELTOS : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_SORENTO : dbc_dict ( ' hyundai_kia_generic ' , None ) , # Has 0x5XX messages, but different format
CAR . KIA_SORENTO : dbc_dict ( ' hyundai_kia_generic ' , None ) , # Has 0x5XX messages, but different format
CAR . KIA_STINGER : dbc_dict ( ' hyundai_kia_generic ' , None ) ,
CAR . KIA_STINGER : dbc_dict ( ' hyundai_kia_generic ' , None ) ,