diff --git a/common/params.cc b/common/params.cc index 910d18eef..465199de2 100644 --- a/common/params.cc +++ b/common/params.cc @@ -337,6 +337,7 @@ std::unordered_map keys = { {"RoadNameUI", PERSISTENT}, {"RotatingWheel", PERSISTENT}, {"SchedulePending", PERSISTENT}, + {"ScreenBrightness", PERSISTENT}, {"SearchInput", PERSISTENT}, {"SilentMode", PERSISTENT}, {"ShowCPU", 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 000000000..2a3369c4e Binary files /dev/null and b/selfdrive/frogpilot/assets/toggle_icons/icon_light.png differ diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index 6a3138d9a..3c2c7f1d3 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -50,6 +50,8 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot {"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.", ""}, {"HideSpeed", "Hide Speed", "Hide the speed indicator in the onroad UI. Additional toggle allows it to be hidden/shown via tapping the speed itself.", ""}, + + {"ScreenBrightness", "Screen Brightness", "Customize your screen brightness.", "../frogpilot/assets/toggle_icons/icon_light.png"}, }; for (const auto &[param, title, desc, icon] : visualToggles) { @@ -165,6 +167,13 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot std::vector hideSpeedToggleNames{tr("Control Via UI")}; toggle = new FrogPilotParamToggleControl(param, title, desc, icon, hideSpeedToggles, hideSpeedToggleNames); + } 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 5bfbc51a8..676cbff1e 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -348,6 +348,7 @@ void ui_update_frogpilot_params(UIState *s) { scene.hide_speed_ui = scene.hide_speed && params.getBool("HideSpeedUI"); scene.rotating_wheel = params.getBool("RotatingWheel"); + scene.screen_brightness = params.getInt("ScreenBrightness"); } void UIState::updateStatus() { @@ -486,6 +487,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) { @@ -506,7 +510,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 dc1d154c7..03bf71996 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -233,6 +233,7 @@ typedef struct UIScene { int desired_follow; int obstacle_distance; int obstacle_distance_stock; + int screen_brightness; int steering_angle_deg; int stopped_equivalence;