mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-02-18 15:13:52 +08:00
Panel - init
This commit is contained in:
@@ -118,4 +118,5 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
|
||||
{"UpdaterLastFetchTime", PERSISTENT},
|
||||
{"Version", PERSISTENT},
|
||||
{"dp_device_last_log", CLEAR_ON_MANAGER_START},
|
||||
{"dp_device_reset_conf", CLEAR_ON_MANAGER_START},
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ qt_libs = [widgets, qt_util] + base_libs
|
||||
|
||||
qt_src = ["main.cc", "ui.cc", "qt/sidebar.cc", "qt/body.cc",
|
||||
"qt/window.cc", "qt/home.cc", "qt/offroad/settings.cc",
|
||||
"qt/offroad/software_settings.cc", "qt/offroad/developer_panel.cc", "qt/offroad/onboarding.cc",
|
||||
"qt/offroad/software_settings.cc", "qt/offroad/developer_panel.cc", "qt/offroad/onboarding.cc", "qt/offroad/dp_panel.cc",
|
||||
"qt/offroad/driverview.cc", "qt/offroad/experimental_mode.cc", "qt/offroad/firehose.cc",
|
||||
"qt/onroad/onroad_home.cc", "qt/onroad/annotated_camera.cc", "qt/onroad/model.cc",
|
||||
"qt/onroad/buttons.cc", "qt/onroad/alerts.cc", "qt/onroad/driver_monitoring.cc", "qt/onroad/hud.cc"]
|
||||
|
||||
295
selfdrive/ui/qt/offroad/dp_panel.cc
Normal file
295
selfdrive/ui/qt/offroad/dp_panel.cc
Normal file
@@ -0,0 +1,295 @@
|
||||
#include "selfdrive/ui/qt/offroad/dp_panel.h"
|
||||
|
||||
void DPPanel::add_toyota_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("Toyota / Lexus"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_vag_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("VW / Audi / Skoda"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_mazda_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("Mazda"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_lateral_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("Lateral Ctrl"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_longitudinal_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("Longitudinal Ctrl"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_ui_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("UI"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DPPanel::add_device_toggles() {
|
||||
std::vector<std::tuple<QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
"",
|
||||
QString::fromUtf8("🐉 ") + tr("Device"),
|
||||
"",
|
||||
},
|
||||
};
|
||||
|
||||
QWidget *label = nullptr;
|
||||
bool has_toggle = false;
|
||||
|
||||
for (auto &[param, title, desc] : toggle_defs) {
|
||||
if (param.isEmpty()) {
|
||||
label = new LabelControl(title, "");
|
||||
addItem(label);
|
||||
continue;
|
||||
}
|
||||
|
||||
has_toggle = true;
|
||||
auto toggle = new ParamControl(param, title, desc, "", this);
|
||||
bool locked = params.getBool((param + "Lock").toStdString());
|
||||
toggle->setEnabled(!locked);
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
}
|
||||
|
||||
// If no toggles were added, hide the label
|
||||
if (!has_toggle && label) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
DPPanel::DPPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
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<cereal::CarParams>();
|
||||
brand = QString::fromStdString(CP.getBrand());
|
||||
vehicle_has_long_ctrl = hasLongitudinalControl(CP);
|
||||
vehicle_has_radar_unavailable = CP.getRadarUnavailable();
|
||||
}
|
||||
|
||||
if (brand == "toyota") {
|
||||
add_toyota_toggles();
|
||||
} else if (brand == "volkswagen") {
|
||||
add_vag_toggles();
|
||||
} else if (brand == "mazda") {
|
||||
add_mazda_toggles();
|
||||
}
|
||||
add_lateral_toggles();
|
||||
add_longitudinal_toggles();
|
||||
add_ui_toggles();
|
||||
add_device_toggles();
|
||||
|
||||
auto resetBtn = new ButtonControl(tr("Reset dragonpilot settings"), tr("RESET"));
|
||||
connect(resetBtn, &ButtonControl::clicked, [&]() {
|
||||
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset all settings?"), tr("Reset"), this)) {
|
||||
params.putBool("dp_device_reset_conf", true);
|
||||
}
|
||||
});
|
||||
addItem(resetBtn);
|
||||
|
||||
fs_watch = new ParamWatcher(this);
|
||||
QObject::connect(fs_watch, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) {
|
||||
updateStates();
|
||||
});
|
||||
|
||||
connect(uiState(), &UIState::offroadTransition, [=](bool offroad) {
|
||||
is_onroad = !offroad;
|
||||
updateStates();
|
||||
});
|
||||
|
||||
updateStates();
|
||||
}
|
||||
|
||||
void DPPanel::showEvent(QShowEvent *event) {
|
||||
updateStates();
|
||||
}
|
||||
|
||||
void DPPanel::updateStates() {
|
||||
// do fs_watch here
|
||||
|
||||
if (!isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// do state change logic here
|
||||
|
||||
}
|
||||
|
||||
void DPPanel::expandToggleDescription(const QString ¶m) {
|
||||
toggles[param.toStdString()]->showDescription();
|
||||
}
|
||||
31
selfdrive/ui/qt/offroad/dp_panel.h
Normal file
31
selfdrive/ui/qt/offroad/dp_panel.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "selfdrive/ui/qt/offroad/settings.h"
|
||||
|
||||
class DPPanel : public ListWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DPPanel(SettingsWindow *parent);
|
||||
|
||||
public slots:
|
||||
void expandToggleDescription(const QString ¶m);
|
||||
|
||||
private:
|
||||
Params params;
|
||||
ParamWatcher *fs_watch;
|
||||
std::map<std::string, ParamControl*> toggles;
|
||||
QString brand;
|
||||
bool is_onroad = false;
|
||||
bool vehicle_has_long_ctrl;
|
||||
bool vehicle_has_radar_unavailable;
|
||||
|
||||
void add_toyota_toggles();
|
||||
void add_vag_toggles();
|
||||
void add_mazda_toggles();
|
||||
void add_lateral_toggles();
|
||||
void add_longitudinal_toggles();
|
||||
void add_ui_toggles();
|
||||
void add_device_toggles();
|
||||
void updateStates();
|
||||
void showEvent(QShowEvent *event) override;
|
||||
};
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "selfdrive/ui/qt/widgets/scrollview.h"
|
||||
#include "selfdrive/ui/qt/offroad/developer_panel.h"
|
||||
#include "selfdrive/ui/qt/offroad/firehose.h"
|
||||
#include "selfdrive/ui/qt/offroad/dp_panel.h"
|
||||
|
||||
TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
// param, title, desc, icon
|
||||
@@ -399,6 +400,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
|
||||
{tr("Software"), new SoftwarePanel(this)},
|
||||
{tr("Firehose"), new FirehosePanel(this)},
|
||||
{tr("Developer"), new DeveloperPanel(this)},
|
||||
{"DP", new DPPanel(this)},
|
||||
};
|
||||
|
||||
nav_btns = new QButtonGroup(this);
|
||||
|
||||
@@ -165,8 +165,10 @@ def manager_thread() -> None:
|
||||
|
||||
# Exit main loop when uninstall/shutdown/reboot is needed
|
||||
shutdown = False
|
||||
for param in ("DoUninstall", "DoShutdown", "DoReboot"):
|
||||
for param in ("DoUninstall", "DoShutdown", "DoReboot", "dp_device_reset_conf"):
|
||||
if params.get_bool(param):
|
||||
if param == "dp_device_reset_conf":
|
||||
os.system("rm -fr /data/params/d/dp_*")
|
||||
shutdown = True
|
||||
params.put("LastManagerExitReason", f"{param} {datetime.datetime.now()}")
|
||||
cloudlog.warning(f"Shutting down manager - {param} set")
|
||||
|
||||
Reference in New Issue
Block a user