From 232c2bd7138a3c87241242735ae15958b3c57225 Mon Sep 17 00:00:00 2001 From: FrogAi <91348155+FrogAi@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:34:47 -0700 Subject: [PATCH] Numerical temperature gauge Added toggle to replace the "GOOD", "OK", and "HIGH" temperature statuses with a numerical temperature gauge based on the highest temperature between the memory, CPU, and GPU and a function to swap between it by simply taping on the "Temp" gauge itself. --- common/params.cc | 2 ++ .../assets/toggle_icons/icon_temperature.png | Bin 0 -> 21434 bytes selfdrive/frogpilot/ui/visual_settings.cc | 7 +++++++ selfdrive/ui/qt/sidebar.cc | 19 +++++++++++++++--- selfdrive/ui/ui.cc | 3 +++ selfdrive/ui/ui.h | 2 ++ 6 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 selfdrive/frogpilot/assets/toggle_icons/icon_temperature.png diff --git a/common/params.cc b/common/params.cc index d1101cf..e11a185 100644 --- a/common/params.cc +++ b/common/params.cc @@ -266,6 +266,7 @@ std::unordered_map keys = { {"ExperimentalModeViaDistance", PERSISTENT}, {"ExperimentalModeViaLKAS", PERSISTENT}, {"ExperimentalModeViaScreen", PERSISTENT}, + {"Fahrenheit", PERSISTENT}, {"FireTheBabysitter", PERSISTENT}, {"ForceAutoTune", PERSISTENT}, {"ForceFingerprint", PERSISTENT}, @@ -314,6 +315,7 @@ std::unordered_map keys = { {"NoLogging", PERSISTENT}, {"NoUploads", PERSISTENT}, {"NudgelessLaneChange", PERSISTENT}, + {"NumericalTemp", PERSISTENT}, {"OneLaneChange", PERSISTENT}, {"PathEdgeWidth", PERSISTENT}, {"PathWidth", PERSISTENT}, diff --git a/selfdrive/frogpilot/assets/toggle_icons/icon_temperature.png b/selfdrive/frogpilot/assets/toggle_icons/icon_temperature.png new file mode 100644 index 0000000000000000000000000000000000000000..8fab713a25afd9dde387c9f58172eed1b568ebf4 GIT binary patch literal 21434 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 DnX7j4 literal 0 HcmV?d00001 diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index 3af49aa..5b9a3a2 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -42,6 +42,8 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot {"RoadEdgesWidth", "Road Edges", "Adjust the visual thickness of road edges on your display.\n\nDefault is 1/2 of the MUTCD average lane line width of 4 inches.", ""}, {"UnlimitedLength", "'Unlimited' Road UI Length", "Extend the display of the path, lane lines, and road edges as far as the system can detect, providing a more expansive view of the road ahead.", ""}, + {"NumericalTemp", "Numerical Temperature Gauge", "Replace the 'GOOD', 'OK', and 'HIGH' temperature statuses with a numerical temperature gauge based on the highest temperature between the memory, CPU, and GPU.", "../frogpilot/assets/toggle_icons/icon_temperature.png"}, + {"QOLVisuals", "Quality of Life", "Miscellaneous quality of life changes to improve your overall openpilot experience.", "../frogpilot/assets/toggle_icons/quality_of_life.png"}, {"DriveStats", "Drive Stats In Home Screen", "Display your device's drive stats in the home screen.", ""}, {"FullMap", "Full Sized Map", "Maximize the size of the map in the onroad UI.", ""}, @@ -142,6 +144,11 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot } else if (param == "PathWidth") { toggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 100, std::map(), this, false, " feet", 10); + } else if (param == "NumericalTemp") { + std::vector temperatureToggles{"Fahrenheit"}; + std::vector temperatureToggleNames{tr("Fahrenheit")}; + toggle = new FrogPilotParamToggleControl(param, title, desc, icon, temperatureToggles, temperatureToggleNames); + } else if (param == "QOLVisuals") { FrogPilotParamManageControl *qolToggle = new FrogPilotParamManageControl(param, title, desc, icon, this); QObject::connect(qolToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() { diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index e66a9ea..4ede551 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -99,9 +99,11 @@ void Sidebar::mousePressEvent(QMouseEvent *event) { // Declare the click boxes QRect cpuRect = {30, 496, 240, 126}; QRect memoryRect = {30, 654, 240, 126}; + QRect tempRect = {30, 338, 240, 126}; static int showChip = 0; static int showMemory = 0; + static int showTemp = 0; // Swap between the respective metrics upon tap if (cpuRect.contains(event->pos())) { @@ -120,6 +122,13 @@ void Sidebar::mousePressEvent(QMouseEvent *event) { params.putBoolNonBlocking("ShowStorageLeft", isStorageLeft); params.putBoolNonBlocking("ShowStorageUsed", isStorageUsed); update(); + } else if (tempRect.contains(event->pos())) { + showTemp = (showTemp + 1) % 3; + scene.fahrenheit = showTemp == 2; + scene.numerical_temp = showTemp != 0; + params.putBoolNonBlocking("Fahrenheit", showTemp == 2); + params.putBoolNonBlocking("NumericalTemp", showTemp != 0); + update(); } else if (onroad && home_btn.contains(event->pos())) { flag_pressed = true; update(); @@ -173,6 +182,10 @@ void Sidebar::updateState(const UIState &s) { auto frogpilotDeviceState = sm["frogpilotDeviceState"].getFrogpilotDeviceState(); + bool isNumericalTemp = scene.numerical_temp; + + int maxTempC = deviceState.getMaxTempC(); + QString max_temp = scene.fahrenheit ? QString::number(maxTempC * 9 / 5 + 32) + "°F" : QString::number(maxTempC) + "°C"; QColor theme_color = currentColors[0]; // FrogPilot metrics @@ -234,12 +247,12 @@ void Sidebar::updateState(const UIState &s) { } setProperty("connectStatus", QVariant::fromValue(connectStatus)); - ItemStatus tempStatus = {{tr("TEMP"), tr("HIGH")}, danger_color}; + ItemStatus tempStatus = {{tr("TEMP"), isNumericalTemp ? max_temp : tr("HIGH")}, danger_color}; auto ts = deviceState.getThermalStatus(); if (ts == cereal::DeviceState::ThermalStatus::GREEN) { - tempStatus = {{tr("TEMP"), tr("GOOD")}, theme_color}; + tempStatus = {{tr("TEMP"), isNumericalTemp ? max_temp : tr("GOOD")}, theme_color}; } else if (ts == cereal::DeviceState::ThermalStatus::YELLOW) { - tempStatus = {{tr("TEMP"), tr("OK")}, warning_color}; + tempStatus = {{tr("TEMP"), isNumericalTemp ? max_temp : tr("OK")}, warning_color}; } setProperty("tempStatus", QVariant::fromValue(tempStatus)); diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 31705d4..ad5d25b 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -311,6 +311,7 @@ void ui_update_frogpilot_params(UIState *s) { scene.disable_smoothing_mtsc = params.getBool("DisableMTSCSmoothing"); scene.driver_camera = params.getBool("DriverCamera"); scene.experimental_mode_via_screen = params.getBool("ExperimentalModeViaScreen") && params.getBool("ExperimentalModeActivation"); + scene.fahrenheit = params.getBool("Fahrenheit"); scene.model_ui = params.getBool("ModelUI"); scene.dynamic_path_width = scene.model_ui && params.getBool("DynamicPathWidth"); @@ -320,6 +321,8 @@ void ui_update_frogpilot_params(UIState *s) { scene.road_edge_width = params.getInt("RoadEdgesWidth") * (scene.is_metric ? 1.0f : INCH_TO_CM) / 200.0f; scene.unlimited_road_ui_length = scene.model_ui && params.getBool("UnlimitedLength"); + scene.numerical_temp = params.getBool("NumericalTemp"); + bool quality_of_life_controls = params.getBool("QOLControls"); scene.reverse_cruise = quality_of_life_controls && params.getBool("ReverseCruise"); scene.reverse_cruise_ui = scene.reverse_cruise && params.getBool("ReverseCruiseUI"); diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 2ce5f2d..c2d8833 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -184,6 +184,7 @@ typedef struct UIScene { bool enabled; bool experimental_mode; bool experimental_mode_via_screen; + bool fahrenheit; bool fps_counter; bool full_map; bool hide_speed; @@ -192,6 +193,7 @@ typedef struct UIScene { bool lead_info; bool map_open; bool model_ui; + bool numerical_temp; bool reverse_cruise; bool reverse_cruise_ui; bool show_driver_camera;