From 08efc252ecb9685c3f772b582a0b4c41c7f1d2bb Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 10 May 2025 12:34:58 -0400 Subject: [PATCH 1/8] ui: fix supported brand settings list (#905) --- .../qt/offroad/settings/vehicle/brand_settings_factory.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_factory.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_factory.cc index 08b137d27..bebc6c303 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_factory.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_factory.cc @@ -17,7 +17,7 @@ static const QStringList supportedBrands = { "mazda", "nissan", "rivian", - "subaru" + "subaru", "tesla", "toyota", "volkswagen", From 8d06444bdda6b89b36e07fceb1c4514ca50089b6 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 10 May 2025 12:46:02 -0400 Subject: [PATCH 2/8] ui: consolidate panel updates at a single location (#904) * init * minimize changes for all brands * more * even less diff * more less * wow srsly --- .../vehicle/brand_settings_interface.cc | 13 ++++++++++ .../vehicle/brand_settings_interface.h | 13 +++++++--- .../settings/vehicle/chrysler_settings.cc | 17 ------------ .../settings/vehicle/chrysler_settings.h | 3 +-- .../offroad/settings/vehicle/ford_settings.cc | 17 ------------ .../offroad/settings/vehicle/ford_settings.h | 3 +-- .../offroad/settings/vehicle/gm_settings.cc | 17 ------------ .../qt/offroad/settings/vehicle/gm_settings.h | 3 +-- .../settings/vehicle/honda_settings.cc | 17 ------------ .../offroad/settings/vehicle/honda_settings.h | 3 +-- .../settings/vehicle/hyundai_settings.cc | 17 ------------ .../settings/vehicle/hyundai_settings.h | 6 +---- .../settings/vehicle/mazda_settings.cc | 17 ------------ .../offroad/settings/vehicle/mazda_settings.h | 3 +-- .../settings/vehicle/nissan_settings.cc | 17 ------------ .../settings/vehicle/nissan_settings.h | 3 +-- .../settings/vehicle/rivian_settings.cc | 17 ------------ .../settings/vehicle/rivian_settings.h | 3 +-- .../settings/vehicle/subaru_settings.cc | 17 ------------ .../settings/vehicle/subaru_settings.h | 3 +-- .../settings/vehicle/tesla_settings.cc | 17 ------------ .../offroad/settings/vehicle/tesla_settings.h | 3 +-- .../settings/vehicle/toyota_settings.cc | 17 ------------ .../settings/vehicle/toyota_settings.h | 3 +-- .../settings/vehicle/volkswagen_settings.cc | 17 ------------ .../settings/vehicle/volkswagen_settings.h | 3 +-- .../qt/offroad/settings/vehicle_panel.cc | 26 ++++++++++--------- .../qt/offroad/settings/vehicle_panel.h | 4 +-- 28 files changed, 51 insertions(+), 248 deletions(-) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.cc index 4c4920727..03921c01a 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.cc @@ -6,3 +6,16 @@ */ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.h" + +BrandSettingsInterface::BrandSettingsInterface(QWidget *parent) : QWidget(parent) { + QVBoxLayout *main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(0, 0, 0, 0); + + list = new ListWidget(this, false); + main_layout->addWidget(list); +} + +void BrandSettingsInterface::updatePanel(bool _offroad) { + offroad = _offroad; + updateSettings(); +} diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.h index 2b6c57ae9..4aff12317 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/brand_settings_interface.h @@ -7,15 +7,22 @@ #pragma once -#include +#include "selfdrive/ui/sunnypilot/ui.h" +#include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h" +#include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" class BrandSettingsInterface : public QWidget { Q_OBJECT public: - explicit BrandSettingsInterface(QWidget *parent = nullptr) : QWidget(parent) {} + explicit BrandSettingsInterface(QWidget *parent = nullptr); virtual ~BrandSettingsInterface() = default; - virtual void updatePanel(bool offroad) = 0; + void updatePanel(bool _offroad); virtual void updateSettings() = 0; + +protected: + ListWidget *list = nullptr; + Params params; + bool offroad = false; }; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.cc index 0912a7afd..fd8fc423f 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - ChryslerSettings::ChryslerSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void ChryslerSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void ChryslerSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.h index 20a623554..ab84bec16 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/chrysler_settings.h @@ -19,8 +19,7 @@ class ChryslerSettings : public BrandSettingsInterface { public: explicit ChryslerSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.cc index eaae5a621..96564cb8a 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - FordSettings::FordSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void FordSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void FordSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.h index 1d97651ba..468bd6b7d 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/ford_settings.h @@ -19,8 +19,7 @@ class FordSettings : public BrandSettingsInterface { public: explicit FordSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.cc index 1aa4ccf93..060a28424 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - GMSettings::GMSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void GMSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void GMSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.h index 35988d95e..211563ab6 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/gm_settings.h @@ -19,8 +19,7 @@ class GMSettings : public BrandSettingsInterface { public: explicit GMSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.cc index 1efdb747f..ca18fa724 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - HondaSettings::HondaSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void HondaSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void HondaSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.h index e494e8001..e41602dc1 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/honda_settings.h @@ -19,8 +19,7 @@ class HondaSettings : public BrandSettingsInterface { public: explicit HondaSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc index 7e4ea4326..693a185cd 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - HyundaiSettings::HyundaiSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void HyundaiSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void HyundaiSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h index 0f065124f..edf495844 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h @@ -19,9 +19,5 @@ class HyundaiSettings : public BrandSettingsInterface { public: explicit HyundaiSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); - -private: - bool offroad = false; + void updateSettings() override; }; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.cc index 330afdc48..b8b8825f2 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - MazdaSettings::MazdaSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void MazdaSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void MazdaSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.h index 3d109fbe9..cbbc38de7 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/mazda_settings.h @@ -19,8 +19,7 @@ class MazdaSettings : public BrandSettingsInterface { public: explicit MazdaSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.cc index 0faa6836f..3c2194362 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - NissanSettings::NissanSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void NissanSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void NissanSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.h index 397a17e97..d6eabac0b 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/nissan_settings.h @@ -19,8 +19,7 @@ class NissanSettings : public BrandSettingsInterface { public: explicit NissanSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.cc index 401048ee5..92cf3dcd6 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - RivianSettings::RivianSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void RivianSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void RivianSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.h index bf83f5966..be25d01b3 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/rivian_settings.h @@ -19,8 +19,7 @@ class RivianSettings : public BrandSettingsInterface { public: explicit RivianSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.cc index 7a021ef4c..47c4057f4 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - SubaruSettings::SubaruSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void SubaruSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void SubaruSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.h index bdf783559..a715951ad 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/subaru_settings.h @@ -19,8 +19,7 @@ class SubaruSettings : public BrandSettingsInterface { public: explicit SubaruSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.cc index d811f1991..50ab02302 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - TeslaSettings::TeslaSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void TeslaSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void TeslaSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.h index 5c40324dc..37f2936cd 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/tesla_settings.h @@ -19,8 +19,7 @@ class TeslaSettings : public BrandSettingsInterface { public: explicit TeslaSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.cc index 13b4435d1..c41617791 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - ToyotaSettings::ToyotaSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void ToyotaSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void ToyotaSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.h index 46c8ef982..9fc18a2a6 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/toyota_settings.h @@ -19,8 +19,7 @@ class ToyotaSettings : public BrandSettingsInterface { public: explicit ToyotaSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.cc index 457776f50..59f0aab72 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.cc @@ -7,25 +7,8 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.h" -#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" - VolkswagenSettings::VolkswagenSettings(QWidget *parent) : BrandSettingsInterface(parent) { - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - - ListWidget *list = new ListWidget(this, false); - - main_layout->addWidget(new ScrollViewSP(list, this)); -} - -void VolkswagenSettings::updatePanel(bool _offroad) { - updateSettings(); - - offroad = _offroad; } void VolkswagenSettings::updateSettings() { - if (!isVisible()) { - return; - } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.h index c74123e7b..25d3a07fa 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/volkswagen_settings.h @@ -19,8 +19,7 @@ class VolkswagenSettings : public BrandSettingsInterface { public: explicit VolkswagenSettings(QWidget *parent = nullptr); - void updatePanel(bool _offroad); - void updateSettings(); + void updateSettings() override; private: bool offroad = false; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.cc index 7ba5790ac..5c00e746f 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.cc @@ -12,26 +12,27 @@ #include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" VehiclePanel::VehiclePanel(QWidget *parent) : QFrame(parent) { - main_layout = new QStackedLayout(this); - ListWidget *list = new ListWidget(this); + QVBoxLayout *main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); - vehicleScreen = new QWidget(this); - QVBoxLayout *vlayout = new QVBoxLayout(vehicleScreen); - vlayout->setContentsMargins(50, 20, 50, 20); + ListWidget *list = new ListWidget(this); platformSelector = new PlatformSelector(); QObject::connect(platformSelector, &PlatformSelector::refreshPanel, this, &VehiclePanel::updateBrandSettings); list->addItem(platformSelector); + brandSettingsContainer = new QWidget(this); + brandSettingsContainerLayout = new QVBoxLayout(brandSettingsContainer); + brandSettingsContainerLayout->setContentsMargins(0, 0, 0, 0); + brandSettingsContainerLayout->setSpacing(0); + list->addItem(brandSettingsContainer); + ScrollViewSP *scroller = new ScrollViewSP(list, this); - vlayout->addWidget(scroller); + main_layout->addWidget(scroller); currentBrandSettings = nullptr; QObject::connect(uiState(), &UIState::offroadTransition, this, &VehiclePanel::updatePanel); - - main_layout->addWidget(vehicleScreen); - main_layout->setCurrentWidget(vehicleScreen); } void VehiclePanel::showEvent(QShowEvent *event) { @@ -39,9 +40,9 @@ void VehiclePanel::showEvent(QShowEvent *event) { } void VehiclePanel::updatePanel(bool _offroad) { + offroad = _offroad; platformSelector->refresh(_offroad); updateBrandSettings(); - offroad = _offroad; } void VehiclePanel::updateBrandSettings() { @@ -50,7 +51,7 @@ void VehiclePanel::updateBrandSettings() { } if (currentBrandSettings) { - vehicleScreen->layout()->removeWidget(currentBrandSettings); + brandSettingsContainerLayout->removeWidget(currentBrandSettings); delete currentBrandSettings; currentBrandSettings = nullptr; } @@ -58,7 +59,8 @@ void VehiclePanel::updateBrandSettings() { if (BrandSettingsFactory::isBrandSupported(platformSelector->brand)) { currentBrandSettings = BrandSettingsFactory::createBrandSettings(platformSelector->brand, this); if (currentBrandSettings) { - vehicleScreen->layout()->addWidget(currentBrandSettings); + currentBrandSettings->setContentsMargins(0, 0, 0, 0); + brandSettingsContainerLayout->addWidget(currentBrandSettings); currentBrandSettings->updatePanel(offroad); } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.h index 5fc03d3d6..a170aa87c 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle_panel.h @@ -23,10 +23,10 @@ public slots: void updatePanel(bool _offroad); private: - QStackedLayout* main_layout = nullptr; - QWidget* vehicleScreen = nullptr; PlatformSelector* platformSelector = nullptr; BrandSettingsInterface* currentBrandSettings = nullptr; + QWidget* brandSettingsContainer = nullptr; + QVBoxLayout* brandSettingsContainerLayout = nullptr; bool offroad = false; private slots: From bf6123c4ada8534bf4104d1a2f4abf84d65cb6fc Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 10 May 2025 12:58:08 -0400 Subject: [PATCH 3/8] Reapply "Hyundai: custom longitudinal tuning" (#894) * Reapply "Hyundai: custom longitudinal tuning" (#892) This reverts commit 68c593db5f1c9677eee71dd2f7b66dc7f6e02ba0. * fix panel behavior * dynamic description * try to merge and use the same scrollview * fix for all to update * dynamic update and fix description * minimize changes for all brands * init * minimize changes for all brands * more * even less diff * more * even less diff * more less * wow srsly * more less * wow srsly --- common/params_keys.h | 1 + .../settings/vehicle/hyundai_settings.cc | 43 +++++++++++++++++++ .../settings/vehicle/hyundai_settings.h | 42 ++++++++++++++++++ sunnypilot/selfdrive/car/interfaces.py | 19 +++++++- system/manager/manager.py | 1 + 5 files changed, 105 insertions(+), 1 deletion(-) diff --git a/common/params_keys.h b/common/params_keys.h index 575dcc2ad..97f23d510 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -164,6 +164,7 @@ inline static std::unordered_map keys = { {"BackupManager_RestoreVersion", PERSISTENT}, // sunnypilot car specific params + {"HyundaiLongitudinalTuning", PERSISTENT}, {"HyundaiRadarTracks", PERSISTENT}, {"HyundaiRadarTracksConfirmed", PERSISTENT}, {"HyundaiRadarTracksPersistent", PERSISTENT}, diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc index 693a185cd..5f0010ac3 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.cc @@ -8,7 +8,50 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h" HyundaiSettings::HyundaiSettings(QWidget *parent) : BrandSettingsInterface(parent) { + std::vector tuning_texts{ tr("Off"), tr("Dynamic"), tr("Predictive") }; + longitudinalTuningToggle = new ButtonParamControl( + "HyundaiLongitudinalTuning", + tr("Custom Longitudinal Tuning"), + "", + "", + tuning_texts, + 500 + ); + QObject::connect(longitudinalTuningToggle, &ButtonParamControlSP::buttonToggled, this, &HyundaiSettings::updateSettings); + list->addItem(longitudinalTuningToggle); + longitudinalTuningToggle->showDescription(); } void HyundaiSettings::updateSettings() { + auto longitudinal_tuning_param = std::atoi(params.get("HyundaiLongitudinalTuning").c_str()); + + auto cp_bytes = params.get("CarParamsPersistent"); + if (!cp_bytes.empty()) { + AlignedBuffer aligned_buf; + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); + cereal::CarParams::Reader CP = cmsg.getRoot(); + + has_longitudinal_control = hasLongitudinalControl(CP); + } else { + has_longitudinal_control = false; + } + + LongitudinalTuningOption longitudinal_tuning_option; + if (longitudinal_tuning_param == int(LongitudinalTuningOption::PREDICTIVE)) { + longitudinal_tuning_option = LongitudinalTuningOption::PREDICTIVE; + } else if (longitudinal_tuning_param == int(LongitudinalTuningOption::DYNAMIC)) { + longitudinal_tuning_option = LongitudinalTuningOption::DYNAMIC; + } else { + longitudinal_tuning_option = LongitudinalTuningOption::OFF; + } + + bool longitudinal_tuning_disabled = !offroad || !has_longitudinal_control; + QString longitudinal_tuning_description = longitudinalTuningDescription(longitudinal_tuning_option); + if (longitudinal_tuning_disabled) { + longitudinal_tuning_description = toggleDisableMsg(offroad, has_longitudinal_control); + } + + longitudinalTuningToggle->setEnabled(!longitudinal_tuning_disabled); + longitudinalTuningToggle->setDescription(longitudinal_tuning_description); + longitudinalTuningToggle->showDescription(); } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h index edf495844..c94d40cfd 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/hyundai_settings.h @@ -14,10 +14,52 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h" #include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" +enum class LongitudinalTuningOption { + OFF, + DYNAMIC, + PREDICTIVE, +}; + class HyundaiSettings : public BrandSettingsInterface { Q_OBJECT public: explicit HyundaiSettings(QWidget *parent = nullptr); void updateSettings() override; + +private: + bool has_longitudinal_control = false; + ButtonParamControl *longitudinalTuningToggle = nullptr; + + static QString toggleDisableMsg(bool _offroad, bool _has_longitudinal_control) { + if (!_has_longitudinal_control) { + return tr("This feature can only be used with openpilot longitudinal control enabled."); + } + + if (!_offroad) { + return tr("Enable \"Always Offroad\" in Device panel, or turn vehicle off to select an option."); + } + + return QString(); + } + + static QString longitudinalTuningDescription(LongitudinalTuningOption option = LongitudinalTuningOption::OFF) { + QString off_str = tr("Off: Uses default tuning"); + QString dynamic_str = tr("Dynamic: Adjusts acceleration limits based on current speed"); + QString predictive_str = tr("Predictive: Uses future trajectory data to anticipate needed adjustments"); + + if (option == LongitudinalTuningOption::PREDICTIVE) { + predictive_str = "" + predictive_str + ""; + } else if (option == LongitudinalTuningOption::DYNAMIC) { + dynamic_str = "" + dynamic_str + ""; + } else { + off_str = "" + off_str + ""; + } + + return QString("%1

%2
%3
%4
") + .arg(tr("Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.")) + .arg(off_str) + .arg(dynamic_str) + .arg(predictive_str); + } }; diff --git a/sunnypilot/selfdrive/car/interfaces.py b/sunnypilot/selfdrive/car/interfaces.py index 2c27e960e..f2019f5ed 100644 --- a/sunnypilot/selfdrive/car/interfaces.py +++ b/sunnypilot/selfdrive/car/interfaces.py @@ -11,6 +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.values import HyundaiFlagsSP from openpilot.common.params import Params from openpilot.common.swaglog import cloudlog @@ -25,6 +26,21 @@ def log_fingerprint(CP: structs.CarParams) -> None: else: sentry.capture_fingerprint(CP.carFingerprint, CP.brand) +def _initialize_custom_longitudinal_tuning(CI: CarInterfaceBase, CP: structs.CarParams, CP_SP: structs.CarParamsSP, + params: Params = None) -> None: + if params is None: + params = Params() + + # Hyundai Custom Longitudinal Tuning + if CP.brand == 'hyundai': + hyundai_longitudinal_tuning = int(params.get("HyundaiLongitudinalTuning", encoding="utf8") or 0) + if hyundai_longitudinal_tuning == LongitudinalTuningType.DYNAMIC: + CP_SP.flags |= HyundaiFlagsSP.LONG_TUNING_DYNAMIC.value + if hyundai_longitudinal_tuning == LongitudinalTuningType.PREDICTIVE: + CP_SP.flags |= HyundaiFlagsSP.LONG_TUNING_PREDICTIVE.value + + CP_SP = CI.get_longitudinal_tuning_sp(CP, CP_SP) + def _initialize_neural_network_lateral_control(CI: CarInterfaceBase, CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None, enabled: bool = False) -> None: @@ -61,10 +77,11 @@ def _initialize_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, CP.radarUnavailable = False -def setup_interfaces(CI: CarInterfaceBase, params: Params = None): +def setup_interfaces(CI: CarInterfaceBase, params: Params = None) -> None: CP = CI.CP CP_SP = CI.CP_SP + _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) diff --git a/system/manager/manager.py b/system/manager/manager.py index fde85f0f7..90df415a8 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -45,6 +45,7 @@ def manager_init() -> None: ("AutoLaneChangeTimer", "0"), ("AutoLaneChangeBsmDelay", "0"), ("DynamicExperimentalControl", "0"), + ("HyundaiLongitudinalTuning", "0"), ("Mads", "1"), ("MadsMainCruiseAllowed", "1"), ("MadsPauseLateralOnBrake", "0"), From 6c1edca8061342754794dafd1522172700837419 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 10 May 2025 18:51:37 -0400 Subject: [PATCH 4/8] MADS: use low velocity threshold for silent wrong gear checks (#901) * MADS: use low velocity threshold for silent wrong gear checks * higher --- sunnypilot/mads/mads.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunnypilot/mads/mads.py b/sunnypilot/mads/mads.py index 2d7d41b4b..d27e2f1fc 100644 --- a/sunnypilot/mads/mads.py +++ b/sunnypilot/mads/mads.py @@ -72,7 +72,7 @@ class ModularAssistiveDrivingSystem: if self.events.has(EventName.seatbeltNotLatched): replace_event(EventName.seatbeltNotLatched, EventNameSP.silentSeatbeltNotLatched) transition_paused_state() - if self.events.has(EventName.wrongGear) and (CS.standstill or CS.gearShifter == GearShifter.reverse): + if self.events.has(EventName.wrongGear) and (CS.vEgo < 2.5 or CS.gearShifter == GearShifter.reverse): replace_event(EventName.wrongGear, EventNameSP.silentWrongGear) transition_paused_state() if self.events.has(EventName.reverseGear): From 921b51f56fdddfc4f075e3dff3f7f2a7fe3ed5a7 Mon Sep 17 00:00:00 2001 From: Nayan Date: Sat, 10 May 2025 19:01:37 -0400 Subject: [PATCH 5/8] ui: display actual fingerprint name with auto-fingerprint (#906) use platform directly Co-authored-by: Jason Wen --- .../qt/offroad/settings/vehicle/platform_selector.cc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc index 21c9a44cb..f31e8e329 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc @@ -70,14 +70,6 @@ void PlatformSelector::refresh(bool _offroad) { platform = QString::fromStdString(CP.getCarFingerprint().cStr()); - for (auto it = platforms.constBegin(); it != platforms.constEnd(); ++it) { - if (it.value()["platform"].toString() == platform) { - platform = it.key(); - brand = it.value()["brand"].toString(); - break; - } - } - if (platform == "MOCK") { platform = unrecognized_str; } else { From 4ceb1ecd190e3ede31da4a636723b1bb72196313 Mon Sep 17 00:00:00 2001 From: Nayan Date: Sat, 10 May 2025 19:10:15 -0400 Subject: [PATCH 6/8] ui: fix description margins on `AbstractControlSP_SELECTOR` (#902) fix margins for description on AbstractControlSP_SELECTOR Co-authored-by: Jason Wen --- selfdrive/ui/sunnypilot/qt/widgets/controls.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/ui/sunnypilot/qt/widgets/controls.cc b/selfdrive/ui/sunnypilot/qt/widgets/controls.cc index 551907c61..d873913b5 100644 --- a/selfdrive/ui/sunnypilot/qt/widgets/controls.cc +++ b/selfdrive/ui/sunnypilot/qt/widgets/controls.cc @@ -148,7 +148,7 @@ AbstractControlSP_SELECTOR::AbstractControlSP_SELECTOR(const QString &title, con // description description = new QLabel(desc); - description->setContentsMargins(0, 20, 40, 20); + description->setContentsMargins(40, 20, 40, 20); description->setStyleSheet("font-size: 40px; color: grey"); description->setWordWrap(true); description->setVisible(false); From 3a4c74b67d0e293622d5cfcca2f54cce1dc73f96 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 10 May 2025 21:47:24 -0400 Subject: [PATCH 7/8] Revert "ui: display actual fingerprint name with auto-fingerprint" (#907) Revert "ui: display actual fingerprint name with auto-fingerprint (#906)" This reverts commit 921b51f56fdddfc4f075e3dff3f7f2a7fe3ed5a7. --- .../qt/offroad/settings/vehicle/platform_selector.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc index f31e8e329..21c9a44cb 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc @@ -70,6 +70,14 @@ void PlatformSelector::refresh(bool _offroad) { platform = QString::fromStdString(CP.getCarFingerprint().cStr()); + for (auto it = platforms.constBegin(); it != platforms.constEnd(); ++it) { + if (it.value()["platform"].toString() == platform) { + platform = it.key(); + brand = it.value()["brand"].toString(); + break; + } + } + if (platform == "MOCK") { platform = unrecognized_str; } else { From 5c9ce2a042a20d4c058525bc73b00045fb947921 Mon Sep 17 00:00:00 2001 From: Nayan Date: Sat, 10 May 2025 23:35:02 -0400 Subject: [PATCH 8/8] ui: display actual fingerprint name with auto-fingerprint (#908) * use platform directly * Revert "use platform directly" This reverts commit b71c315d308a5f8f7cd2091de9ce405fcc51074d. * update brand from platform package --- .../sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc index 21c9a44cb..0d4dde681 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc @@ -72,7 +72,6 @@ void PlatformSelector::refresh(bool _offroad) { for (auto it = platforms.constBegin(); it != platforms.constEnd(); ++it) { if (it.value()["platform"].toString() == platform) { - platform = it.key(); brand = it.value()["brand"].toString(); break; }