From 62e60535e6a78246f04cfc23a1b2be87c26b6193 Mon Sep 17 00:00:00 2001 From: FrogAi <91348155+FrogAi@users.noreply.github.com> Date: Fri, 12 Jan 2024 22:39:30 -0700 Subject: [PATCH] Custom screen brightness Added toggle to customize the screen brightness. --- common/params.cc | 1 + .../frogpilot/assets/toggle_icons/icon_light.png | Bin 0 -> 9097 bytes selfdrive/frogpilot/ui/visual_settings.cc | 9 +++++++++ selfdrive/ui/ui.cc | 13 ++++++++++++- selfdrive/ui/ui.h | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 selfdrive/frogpilot/assets/toggle_icons/icon_light.png diff --git a/common/params.cc b/common/params.cc index 6275d79..8d8a54a 100644 --- a/common/params.cc +++ b/common/params.cc @@ -251,6 +251,7 @@ std::unordered_map keys = { {"RelaxedFollow", PERSISTENT}, {"RelaxedJerk", PERSISTENT}, {"RoadEdgesWidth", PERSISTENT}, + {"ScreenBrightness", PERSISTENT}, {"ShowCPU", PERSISTENT}, {"ShowFPS", PERSISTENT}, {"ShowGPU", PERSISTENT}, diff --git a/selfdrive/frogpilot/assets/toggle_icons/icon_light.png b/selfdrive/frogpilot/assets/toggle_icons/icon_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3369c4e8fec9e7d4ef17ea84083133287eff96 GIT binary patch literal 9097 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 literal 0 HcmV?d00001 diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index cf453b4..8c215f2 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -18,6 +18,8 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot {"PathWidth", "Path Width", "Customize the width of the driving path shown on your UI.\n\nDefault matches the width of a 2019 Lexus ES 350.", ""}, {"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.", ""}, + + {"ScreenBrightness", "Screen Brightness", "Customize your screen brightness.", "../frogpilot/assets/toggle_icons/icon_light.png"}, }; for (const auto &[param, title, desc, icon] : visualToggles) { @@ -58,6 +60,13 @@ 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 == "ScreenBrightness") { + std::map brightnessLabels; + for (int i = 0; i <= 101; ++i) { + brightnessLabels[i] = i == 0 ? "Screen Off" : i == 101 ? "Auto" : QString::number(i) + "%"; + } + toggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 101, brightnessLabels, this, false); + } else { toggle = new ParamControl(param, title, desc, icon, this); } diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 44880fe..b6b9f1d 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -292,6 +292,8 @@ void ui_update_params(UIState *s) { scene.path_width = params.getInt("PathWidth") / 10.0 * (scene.is_metric ? 1 : FOOT_TO_METER) / 2; scene.road_edge_width = params.getInt("RoadEdgesWidth") * (scene.is_metric ? 1 : INCH_TO_CM) / 200; scene.unlimited_road_ui_length = scene.model_ui && params.getBool("UnlimitedLength"); + + scene.screen_brightness = params.getInt("ScreenBrightness"); } void UIState::updateStatus() { @@ -339,6 +341,8 @@ UIState::UIState(QObject *parent) : QObject(parent) { QObject::connect(timer, &QTimer::timeout, this, &UIState::update); timer->start(1000 / UI_FREQ); + scene.screen_brightness = params.getInt("ScreenBrightness"); + setDefaultParams(); } @@ -427,6 +431,9 @@ void Device::updateBrightness(const UIState &s) { int brightness = brightness_filter.update(clipped_brightness); if (!awake) { brightness = 0; + } else if (s.scene.screen_brightness <= 100) { + // Bring the screen brightness up to 5% upon screen tap + brightness = fmax(5, s.scene.screen_brightness); } if (brightness != last_brightness) { @@ -447,7 +454,11 @@ void Device::updateWakefulness(const UIState &s) { emit interactiveTimeout(); } - setAwake(s.scene.ignition || interactive_timeout > 0); + if (s.scene.screen_brightness != 0) { + setAwake(s.scene.ignition || interactive_timeout > 0); + } else { + setAwake(interactive_timeout > 0); + } } UIState *uiState() { diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 7834982..9ec8e2d 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -198,6 +198,7 @@ typedef struct UIScene { int desired_follow; int obstacle_distance; int obstacle_distance_stock; + int screen_brightness; int stopped_equivalence; QPolygonF track_adjacent_vertices[6]; QPolygonF track_edge_vertices;