diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.cc index dfdf79938a..413bd8a373 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.cc @@ -110,10 +110,23 @@ ModelsPanel::ModelsPanel(QWidget *parent) : QWidget(parent) { list->addItem(lagd_toggle_control); // Software delay control + int liveDelayMaxInt = 30; + std::string liveDelayBytes = params.get("LiveDelay"); + if (!liveDelayBytes.empty()) { + capnp::FlatArrayMessageReader msg(kj::ArrayPtr( + reinterpret_cast(liveDelayBytes.data()), + liveDelayBytes.size() / sizeof(capnp::word))); + auto event = msg.getRoot(); + if (event.hasLiveDelay()) { + auto liveDelay = event.getLiveDelay(); + float lateralDelay = liveDelay.getLateralDelay(); + liveDelayMaxInt = static_cast(lateralDelay * 100.0f) + 20; + } + } delay_control = new OptionControlSP("LagdToggleDelay", tr("Adjust Software Delay"), tr("Adjust the software delay when Live Learning Steer Delay is toggled off." "\nThe default software delay value is 0.2"), - "", {5, 30}, 1, false, nullptr, true, true); + "", {5, liveDelayMaxInt}, 1, false, nullptr, true, true); connect(delay_control, &OptionControlSP::updateLabels, [=]() { float value = QString::fromStdString(params.get("LagdToggleDelay")).toFloat(); @@ -367,8 +380,39 @@ void ModelsPanel::updateLabels() { // Update lagdToggle description with current value QString desc = tr("Enable this for the car to learn and adapt its steering response time. " - "Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. " - "The Current value is updated automatically when the vehicle is Onroad."); + "Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience."); + bool lagdEnabled = params.getBool("LagdToggle"); + if (lagdEnabled) { + std::string liveDelayBytes = params.get("LiveDelay"); + if (!liveDelayBytes.empty()) { + capnp::FlatArrayMessageReader msg(kj::ArrayPtr( + reinterpret_cast(liveDelayBytes.data()), + liveDelayBytes.size() / sizeof(capnp::word))); + auto event = msg.getRoot(); + if (event.hasLiveDelay()) { + auto liveDelay = event.getLiveDelay(); + float lateralDelay = liveDelay.getLateralDelay(); + desc += QString("

%1 %2 s") + .arg(tr("Live Steer Delay:")).arg(QString::number(lateralDelay, 'f', 2)); + } + } + } else { + std::string carParamsBytes = params.get("CarParamsPersistent"); + if (!carParamsBytes.empty()) { + capnp::FlatArrayMessageReader msg(kj::ArrayPtr( + reinterpret_cast(carParamsBytes.data()), + carParamsBytes.size() / sizeof(capnp::word))); + auto carParams = msg.getRoot(); + float steerDelay = carParams.getSteerActuatorDelay(); + float softwareDelay = QString::fromStdString(params.get("LagdToggleDelay")).toFloat(); + float totalLag = steerDelay + softwareDelay; + desc += QString("

" + "%1 %2 s + %3 %4 s = %5 %6 s") + .arg(tr("Actuator Delay:"), QString::number(steerDelay, 'f', 2), + tr("Software Delay:"), QString::number(softwareDelay, 'f', 2), + tr("Total Delay:"), QString::number(totalLag, 'f', 2)); + } + } lagd_toggle_control->setDescription(desc); delay_control->setVisible(!params.getBool("LagdToggle"));