diff --git a/common/params.cc b/common/params.cc index 18a213a4f..b6af46820 100644 --- a/common/params.cc +++ b/common/params.cc @@ -86,7 +86,7 @@ private: }; std::unordered_map keys = { - {"BehaviordInitialiazed", PERSISTENT}, + {"BehaviordInitialized", PERSISTENT}, {"MaxDeacceleration", PERSISTENT}, {"AccelCruiseMaxFactor", PERSISTENT}, {"AccessToken", CLEAR_ON_MANAGER_START | DONT_LOG}, diff --git a/selfdrive/controls/behaviord.py b/selfdrive/controls/behaviord.py index b6692b419..aec42a3dc 100644 --- a/selfdrive/controls/behaviord.py +++ b/selfdrive/controls/behaviord.py @@ -7,7 +7,7 @@ import time # Update this dict and run slider_gen.py to generate the code for the sliders, params, and log.capnp PARAMS = { - "MaxDeacceleration": {"default": -1.2, "range": (-3.0, 0.0), "label": "Minimum Cruise Accel:", "units": "m/s2"}, + "MaxDeacceleration": {"default": -1.2, "range": (-3.0, 0.0), "label": "Max Cruise De-accel:", "units": "m/s2"}, "AccelCruiseMaxFactor": {"default": 1.0, "range": (0.0, 3.0), "label": "Cruise Accel Factor:", "units": "Coef."}, } @@ -68,7 +68,7 @@ class Behaviord: for param in PARAMS.keys(): self.p.put(param, str(self.get_param(param))) if not self.initialized: - self.p.put_bool("BehaviordInitialiazed", True) + self.p.put_bool("BehaviordInitialized", True) self.initialized = True def behaviord_thread(self): diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 017003efd..3d48908c1 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -342,7 +342,7 @@ BehaviorPanel::BehaviorPanel(SettingsWindow *parent) : ListWidget(parent){ // Add sliders here // name, label, units, min, max, default, setter function std::vector slider_defs{ - {"MaxDeacceleration", tr("Minimum Cruise Accel:"), "m/s2", -3.0, 0.0, -1.2, + {"MaxDeacceleration", tr("Max Cruise De-accel:"), "m/s2", -3.0, 0.0, -1.2, [](cereal::Behavior::Builder &behavior, double value) { behavior.setMaxDeacceleration(static_cast(value)); } @@ -371,18 +371,13 @@ BehaviorPanel::BehaviorPanel(SettingsWindow *parent) : ListWidget(parent){ sliders[slider_def.paramName] = slider; // Store the slider pointer in the map sliderItems[slider_def.paramName] = slider->getSliderItem(); // Store the slider item pointer in the map addItem(slider->getSliderItem()); // Add the slider item to the list widget - } // create a pubmaster for all the sliders pm = std::make_unique>( {"behavior"}); - timer = new QTimer(this); - timer->setInterval(1000); // Send all slider values every interval - timer->start(); - - connect(timer, &QTimer::timeout, this, &BehaviorPanel::sendAllSliderValues); + sendAllSliderValues(); } void BehaviorPanel::sendAllSliderValues() diff --git a/selfdrive/ui/qt/widgets/slider.cc b/selfdrive/ui/qt/widgets/slider.cc index 18477b56f..546aa25dc 100644 --- a/selfdrive/ui/qt/widgets/slider.cc +++ b/selfdrive/ui/qt/widgets/slider.cc @@ -43,7 +43,20 @@ void CustomSlider::initialize() connect(resetButton, &ButtonControl::clicked, [&]() { if (ConfirmationDialog::confirm(tr("Are you sure you want to reset ") + QString::fromStdString(param) + "?", tr("Reset"), this)) { this->setValue(sliderMin + (defaultVal - paramMin) / (paramMax - paramMin) * (sliderRange)); - } + QWidget* widget = this->parentWidget(); + BehaviorPanel* parentBehaviorPanel = nullptr; + + while (widget) { + parentBehaviorPanel = qobject_cast(widget); + if (parentBehaviorPanel) { + break; + } + widget = widget->parentWidget(); + } + if (parentBehaviorPanel) { + parentBehaviorPanel->sendAllSliderValues(); + } + } }); // slider settings @@ -52,14 +65,13 @@ void CustomSlider::initialize() setMaximum(sliderMax); // Set the default value of the slider to begin with - setValue(sliderMin + (defaultVal - paramMin) / (paramMax - paramMin) * (sliderRange)); - label->setText(title + " " + QString::number(defaultVal, 'f', 2) + " " + unit); + setSliderValue(defaultVal); try // Try to get the value of the param from params. If it doesn't exist, catch the error { QString valueStr; double value; - if (Params().getBool("BehaviordInitialiazed")){ + if (Params().getBool("BehaviordInitialized")){ valueStr = QString::fromStdString(Params().get(param)); value = QString(valueStr).toDouble(); } else{ @@ -71,8 +83,7 @@ void CustomSlider::initialize() auto behavior = msg.initEvent().initBehavior(); cerealSetFunc(behavior, value); - setValue(sliderMin + (value - paramMin) / (paramMax - paramMin) * (sliderRange)); // Set the value of the slider. The value is scaled to the slider range - label->setText(title + " " + QString::number(value, 'f', 2) + " " + unit); + setSliderValue(value); // Set the slider to be enabled or disabled depending on the lock status bool locked = Params().getBool((param + "Lock")); @@ -92,22 +103,38 @@ void CustomSlider::initialize() mainLayout->addWidget(this); - connect(this, &CustomSlider::valueChanged, [=](int value) - { - // Update the label as the slider is moved. Don't save the value to params here - double dValue = paramMin + (paramMax - paramMin) * (value - sliderMin) / (sliderRange); - label->setText(title + " " + QString::number(dValue, 'f', 2) + " " + unit); - - }); + connectSliderValueChanged(); - connect(this, &CustomSlider::sliderReleasedWithValue, [this]() { - // Call the sendAllSliderValues method from the BehaviorPanel - auto parentBehaviorPanel = qobject_cast(this->parentWidget()); - if (parentBehaviorPanel) - { + connect(this, &CustomSlider::sliderReleased, [this]() { + QWidget* widget = this->parentWidget(); + BehaviorPanel* parentBehaviorPanel = nullptr; + + while (widget) { + parentBehaviorPanel = qobject_cast(widget); + if (parentBehaviorPanel) { + break; + } + widget = widget->parentWidget(); + } + if (parentBehaviorPanel) { parentBehaviorPanel->sendAllSliderValues(); } }); +} +void CustomSlider::setSliderValue(double value) { + setValue(sliderMin + (value - paramMin) / (paramMax - paramMin) * (sliderRange)); + updateLabel(value); +} + +void CustomSlider::connectSliderValueChanged() { + connect(this, &CustomSlider::valueChanged, [=](int value) { + double dValue = paramMin + (paramMax - paramMin) * (value - sliderMin) / (sliderRange); + updateLabel(dValue); + }); +} + +void CustomSlider::updateLabel(double value) { + label->setText(title + " " + QString::number(value, 'f', 2) + " " + unit); } diff --git a/selfdrive/ui/qt/widgets/slider.h b/selfdrive/ui/qt/widgets/slider.h index 84ac6a83e..2f91e2003 100644 --- a/selfdrive/ui/qt/widgets/slider.h +++ b/selfdrive/ui/qt/widgets/slider.h @@ -34,17 +34,20 @@ public: int sliderMax = 10000; signals: - void sliderReleasedWithValue(int value); + void sliderValueChanged(); protected: void mouseReleaseEvent(QMouseEvent *event) override { QSlider::mouseReleaseEvent(event); - emit sliderReleasedWithValue(value()); + emit sliderValueChanged(); } private: void initialize(); - + void setSliderValue(double value); + void updateLabel(double value); + void connectSliderValueChanged(); + double defaultVal; double scaleFactor; std::string param;