diff --git a/common/params_keys.h b/common/params_keys.h index ef21c0663..a050b3961 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -129,4 +129,5 @@ inline static std::unordered_map keys = { {"dp_lat_lca_speed", PERSISTENT}, {"dp_lat_lca_auto_sec", PERSISTENT}, {"dp_device_go_off_road", CLEAR_ON_MANAGER_START}, + {"dp_ui_hide_hud_speed_kph", PERSISTENT}, }; diff --git a/selfdrive/ui/qt/offroad/dp_panel.cc b/selfdrive/ui/qt/offroad/dp_panel.cc index d85424ba0..e61d24223 100644 --- a/selfdrive/ui/qt/offroad/dp_panel.cc +++ b/selfdrive/ui/qt/offroad/dp_panel.cc @@ -188,6 +188,7 @@ void DPPanel::add_ui_toggles() { tr("Std. - Stock behavior.\nMAIN+ - ACC MAIN on = Display ON.\nOP+ - OP enabled = Display ON.\nMAIN- - ACC MAIN on = Display OFF\nOP- - OP enabled = Display OFF."), "", display_off_mode_texts, 200); + auto hide_hud = new ParamSpinBoxControl("dp_ui_hide_hud_speed_kph", tr("Hide HUD When Moves above:"), tr("To prevent screen burn-in, hide Speed, MAX Speed, and Steering/DM Icons when the car moves.\nOff = Stock Behavior\n1 km/h ≈ 0.6 mph"), "", 0, 120, 5, tr(" km/h"), tr("Off")); QWidget *label = nullptr; bool has_toggle = false; @@ -198,6 +199,8 @@ void DPPanel::add_ui_toggles() { addItem(label); addItem(display_off_mode_setting); has_toggle = true; + addItem(hide_hud); + has_toggle = true; continue; } diff --git a/selfdrive/ui/qt/onroad/annotated_camera.cc b/selfdrive/ui/qt/onroad/annotated_camera.cc index 24addec40..65fc201d3 100644 --- a/selfdrive/ui/qt/onroad/annotated_camera.cc +++ b/selfdrive/ui/qt/onroad/annotated_camera.cc @@ -132,11 +132,17 @@ void AnnotatedCameraWidget::paintGL() { painter.setPen(Qt::NoPen); model.draw(painter, rect()); - if (!s->scene.disable_driver) { - dmon.draw(painter, rect()); + bool hide_hud = s->scene.dp_ui_hide_hud_speed_kph > 0 && sm["carState"].getCarState().getVEgo() > s->scene.dp_ui_hide_hud_speed_kph * 0.278; + if (!hide_hud) { + if (!s->scene.disable_driver) { + dmon.draw(painter, rect()); + } + hud.updateState(*s); + hud.draw(painter, rect()); + experimental_btn->setVisible(true); + } else { + experimental_btn->setVisible(false); } - hud.updateState(*s); - hud.draw(painter, rect()); double cur_draw_t = millis_since_boot(); double dt = cur_draw_t - prev_draw_t; diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 02fe7a66f..98676aba4 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -68,6 +68,7 @@ void ui_update_params(UIState *s) { s->scene.is_metric = params.getBool("IsMetric"); s->scene.disable_driver = getenv("DISABLE_DRIVER"); s->scene.display_mode = std::atoi(params.get("dp_ui_display_mode").c_str()); + s->scene.dp_ui_hide_hud_speed_kph = std::atoi(params.get("dp_ui_hide_hud_speed_kph").c_str()); } void UIState::updateStatus() { diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 5f0ca2d12..3c47c821d 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -65,6 +65,7 @@ typedef struct UIScene { bool disable_driver = false; bool alka_active; int display_mode; + int dp_ui_hide_hud_speed_kph = 0; } UIScene; class UIState : public QObject { diff --git a/system/manager/manager.py b/system/manager/manager.py index e1210f527..25e4a8ab1 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -51,6 +51,7 @@ def manager_init() -> None: ("dp_device_model_list", ""), ("dp_lat_lca_speed", "20"), ("dp_lat_lca_auto_sec", "0"), + ("dp_ui_hide_hud_speed_kph", "0"), ] if params.get_bool("RecordFrontLock"):