This commit is contained in:
royjr
2025-05-20 01:34:50 -04:00
parent 9d60846b70
commit a492625927
6 changed files with 79 additions and 2 deletions
+1
View File
@@ -169,6 +169,7 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
{"HyundaiRadarTracksConfirmed", PERSISTENT},
{"HyundaiRadarTracksPersistent", PERSISTENT},
{"HyundaiRadarTracksToggle", PERSISTENT},
{"HyundaiRadar", PERSISTENT},
{"DynamicExperimentalControl", PERSISTENT},
};
@@ -20,6 +20,19 @@ HyundaiSettings::HyundaiSettings(QWidget *parent) : BrandSettingsInterface(paren
QObject::connect(longitudinalTuningToggle, &ButtonParamControlSP::buttonToggled, this, &HyundaiSettings::updateSettings);
list->addItem(longitudinalTuningToggle);
longitudinalTuningToggle->showDescription();
std::vector<QString> radar_tuning_texts{ tr("Off"), tr("Lead Only"), tr("Full Radar") };
radarToggle = new ButtonParamControl(
"HyundaiRadar",
tr("Radar Tracks"),
"",
"",
radar_tuning_texts,
500
);
QObject::connect(radarToggle, &ButtonParamControlSP::buttonToggled, this, &HyundaiSettings::updateSettings);
list->addItem(radarToggle);
radarToggle->showDescription();
}
void HyundaiSettings::updateSettings() {
@@ -54,4 +67,25 @@ void HyundaiSettings::updateSettings() {
longitudinalTuningToggle->setEnabled(!longitudinal_tuning_disabled);
longitudinalTuningToggle->setDescription(longitudinal_tuning_description);
longitudinalTuningToggle->showDescription();
auto radar_param = std::atoi(params.get("HyundaiRadar").c_str());
RadarOption radar_option;
if (radar_param == int(RadarOption::LEAD_ONLY)) {
radar_option = RadarOption::LEAD_ONLY;
} else if (radar_param == int(RadarOption::FULL_RADAR)) {
radar_option = RadarOption::FULL_RADAR;
} else {
radar_option = RadarOption::OFF;
}
bool radar_disabled = !offroad || !has_longitudinal_control;
QString radar_description = radarDescription(radar_option);
if (radar_disabled) {
radar_description = toggleDisableMsg(offroad, has_longitudinal_control);
}
radarToggle->setEnabled(!radar_disabled);
radarToggle->setDescription(radar_description);
radarToggle->showDescription();
}
@@ -20,6 +20,12 @@ enum class LongitudinalTuningOption {
PREDICTIVE,
};
enum class RadarOption {
OFF,
LEAD_ONLY,
FULL_RADAR,
};
class HyundaiSettings : public BrandSettingsInterface {
Q_OBJECT
@@ -30,6 +36,7 @@ public:
private:
bool has_longitudinal_control = false;
ButtonParamControl *longitudinalTuningToggle = nullptr;
ButtonParamControl *radarToggle = nullptr;
static QString toggleDisableMsg(bool _offroad, bool _has_longitudinal_control) {
if (!_has_longitudinal_control) {
@@ -62,4 +69,24 @@ private:
.arg(dynamic_str)
.arg(predictive_str);
}
static QString radarDescription(RadarOption option = RadarOption::OFF) {
QString off_str = tr("Off: Disables radar tracking. Vision-only vehicle detection.");
QString lead_only_str = tr("Lead Only: Tracks only the closest vehicle ahead.");
QString full_radar_str = tr("Full Radar: Tracks all nearby vehicles using radar.");
if (option == RadarOption::LEAD_ONLY) {
lead_only_str = "<font color='white'><b>" + lead_only_str + "</b></font>";
} else if (option == RadarOption::FULL_RADAR) {
full_radar_str = "<font color='white'><b>" + full_radar_str + "</b></font>";
} else {
off_str = "<font color='white'><b>" + off_str + "</b></font>";
}
return QString("%1<br><br>%2<br>%3<br>%4<br>")
.arg(tr("Configure how radar tracks surrounding vehicles — turn it off, track only the lead, or track all."))
.arg(off_str)
.arg(lead_only_str)
.arg(full_radar_str);
}
};
+15 -1
View File
@@ -11,7 +11,7 @@ from opendbc.car.car_helpers import can_fingerprint
from opendbc.car.interfaces import CarInterfaceBase
from opendbc.car.hyundai.radar_interface import RADAR_START_ADDR
from opendbc.car.hyundai.values import HyundaiFlags, DBC as HYUNDAI_DBC
from opendbc.sunnypilot.car.hyundai.longitudinal.helpers import LongitudinalTuningType
from opendbc.sunnypilot.car.hyundai.longitudinal.helpers import LongitudinalTuningType, RadarType
from opendbc.sunnypilot.car.hyundai.values import HyundaiFlagsSP
from openpilot.common.params import Params
from openpilot.common.swaglog import cloudlog
@@ -77,6 +77,19 @@ def _initialize_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP,
CP.radarUnavailable = False
def _initialize_radar(CI: CarInterfaceBase, CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None) -> None:
if params is None:
params = Params()
# Hyundai Radar
if CP.brand == 'hyundai':
hyundai_radar = int(params.get("HyundaiRadar", encoding="utf8") or 0)
if hyundai_radar == RadarType.LEAD_ONLY:
CP_SP.flags |= HyundaiFlagsSP.RADAR_LEAD_ONLY.value
if hyundai_radar == RadarType.FULL_RADAR:
CP_SP.flags |= HyundaiFlagsSP.RADAR_FULL_RADAR.value
def setup_interfaces(CI: CarInterfaceBase, params: Params = None) -> None:
CP = CI.CP
CP_SP = CI.CP_SP
@@ -84,6 +97,7 @@ def setup_interfaces(CI: CarInterfaceBase, params: Params = None) -> None:
_initialize_custom_longitudinal_tuning(CI, CP, CP_SP, params)
_initialize_neural_network_lateral_control(CI, CP, CP_SP, params)
_initialize_radar_tracks(CP, CP_SP, params)
_initialize_radar(CI, CP, CP_SP, params)
def _enable_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, can_recv: CanRecvCallable,
+1
View File
@@ -46,6 +46,7 @@ def manager_init() -> None:
("AutoLaneChangeBsmDelay", "0"),
("DynamicExperimentalControl", "0"),
("HyundaiLongitudinalTuning", "0"),
("HyundaiRadar", "0"),
("Mads", "1"),
("MadsMainCruiseAllowed", "1"),
("MadsSteeringMode", "0"),