From ee5076f5810516b53affab126f3feeb43657829c Mon Sep 17 00:00:00 2001 From: Lee Jong Mun <43285072+crwusiz@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:27:59 +0900 Subject: [PATCH] fix (#155) add c3x position on sidebar --- common/params_keys.h | 9 +++++---- selfdrive/assets/img_c3x.png | Bin 0 -> 45667 bytes selfdrive/ui/qt/offroad/settings.cc | 25 ++++++++++++++++++++++--- selfdrive/ui/qt/sidebar.cc | 12 +++++++++++- selfdrive/ui/qt/sidebar.h | 3 ++- 5 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 selfdrive/assets/img_c3x.png diff --git a/common/params_keys.h b/common/params_keys.h index be7f941..8d79e97 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -119,11 +119,11 @@ inline static std::unordered_map keys = { {"UpdaterTargetBranch", CLEAR_ON_MANAGER_START}, {"UpdaterLastFetchTime", PERSISTENT}, {"Version", PERSISTENT}, - + // carrot {"LongitudinalPersonalityMax", PERSISTENT}, {"NetworkAddress", CLEAR_ON_MANAGER_START}, - + {"ApiCache_NavDestinations", PERSISTENT}, {"NavDestination", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, {"NavDestinationWaypoints", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, @@ -261,9 +261,10 @@ inline static std::unordered_map keys = { {"CustomSR", PERSISTENT}, {"SteerRatioRate", PERSISTENT}, {"SoftRestartTriggered", CLEAR_ON_MANAGER_START}, - + {"NNFF", PERSISTENT}, {"NNFFLite", PERSISTENT}, {"NNFFModelName", CLEAR_ON_OFFROAD_TRANSITION}, - + + {"DevicePosition", CLEAR_ON_MANAGER_START}, }; diff --git a/selfdrive/assets/img_c3x.png b/selfdrive/assets/img_c3x.png new file mode 100644 index 0000000000000000000000000000000000000000..73631d780b9023c73dc9ec5536cc087069f88e37 GIT binary patch literal 45667 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∨P%>ozkH~ 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 z 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.getLiveCalibration(); + if (calib.getCalStatus() != cereal::LiveCalibrationData::Status::UNCALIBRATED) { + double pitch = calib.getRpyCalib()[1] * (180 / M_PI); + double yaw = calib.getRpyCalib()[2] * (180 / M_PI); + QString position = QString("%2 %1° %4 %3°") + .arg(QString::number(std::abs(pitch), 'g', 1), pitch > 0 ? "↓" : "↑", + QString::number(std::abs(yaw), 'g', 1), yaw > 0 ? "←" : "→"); + params.put("DevicePosition", position.toStdString()); + } + } catch (kj::Exception) { + qInfo() << "invalid CalibrationParams"; + } + } + if (Hardware::TICI()) { auto regulatoryBtn = new ButtonControl(tr("Regulatory"), tr("VIEW"), ""); connect(regulatoryBtn, &ButtonControl::clicked, [=]() { @@ -399,7 +418,7 @@ void SettingsWindow::setCurrentPanel(int index, const QString ¶m) { if (param.endsWith("Panel")) { QString panelName = param; panelName.chop(5); // Remove "Panel" suffix - + // Find the panel by name for (int i = 0; i < nav_btns->buttons().size(); i++) { if (nav_btns->buttons()[i]->text() == tr(panelName.toStdString().c_str())) { @@ -411,7 +430,7 @@ void SettingsWindow::setCurrentPanel(int index, const QString ¶m) { emit expandToggleDescription(param); } } - + panel_widget->setCurrentIndex(index); nav_btns->buttons()[index]->setChecked(true); } diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index 966396e..0f865be 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -28,6 +28,7 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed( home_img = loadPixmap("../assets/images/button_home.png", home_btn.size()); flag_img = loadPixmap("../assets/images/button_flag.png", home_btn.size()); settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio); + c3x_img = loadPixmap("../assets/img_c3x.png", home_btn.size()); connect(this, &Sidebar::valueChanged, [=] { update(); }); @@ -115,11 +116,20 @@ void Sidebar::paintEvent(QPaintEvent *event) { p.fillRect(rect(), QColor(57, 57, 57)); + QString c3x_position = QString("%1").arg(QString::fromStdString(params.get("DevicePosition"))); + // buttons p.setOpacity(settings_pressed ? 0.65 : 1.0); p.drawPixmap(settings_btn.x(), settings_btn.y(), settings_img); p.setOpacity(onroad && flag_pressed ? 0.65 : 1.0); - p.drawPixmap(home_btn.x(), home_btn.y(), onroad ? flag_img : home_img); + //p.drawPixmap(home_btn.x(), home_btn.y(), onroad ? flag_img : home_img); + p.drawPixmap(home_btn.x(), home_btn.y(), c3x_img); + + const QRect r3 = QRect(0, 967, event->rect().width(), 50); + p.setFont(InterFont(30)); + p.setPen(QColor(0xff, 0xff, 0xff)); + p.drawText(r3, Qt::AlignCenter, c3x_position); + p.setOpacity(1.0); // network diff --git a/selfdrive/ui/qt/sidebar.h b/selfdrive/ui/qt/sidebar.h index 2091418..4ba44fd 100644 --- a/selfdrive/ui/qt/sidebar.h +++ b/selfdrive/ui/qt/sidebar.h @@ -36,7 +36,7 @@ protected: void mouseReleaseEvent(QMouseEvent *event) override; void drawMetric(QPainter &p, const QPair &label, QColor c, int y); - QPixmap home_img, flag_img, settings_img; + QPixmap home_img, flag_img, settings_img, c3x_img; bool onroad, flag_pressed, settings_pressed; const QMap network_type = { {cereal::DeviceState::NetworkType::NONE, tr("--")}, @@ -61,4 +61,5 @@ protected: private: std::unique_ptr pm; Networking *networking = nullptr; + Params params; };