diff --git a/common/params_keys.h b/common/params_keys.h index 2971ce9278..baffa7d014 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -166,7 +166,7 @@ inline static std::unordered_map keys = { {"OnroadUploads", {PERSISTENT | BACKUP, BOOL, "1"}}, {"QuickBootToggle", {PERSISTENT | BACKUP, BOOL, "0"}}, {"QuietMode", {PERSISTENT | BACKUP, BOOL, "0"}}, - {"QuietModeUI", {PERSISTENT | BACKUP, BOOL, "0"}}, + {"QuietVisualMode", {PERSISTENT | BACKUP, BOOL, "0"}}, {"RainbowMode", {PERSISTENT | BACKUP, BOOL, "0"}}, {"ShowAdvancedControls", {PERSISTENT | BACKUP, BOOL, "0"}}, {"ShowTurnSignals", {PERSISTENT | BACKUP, BOOL, "0"}}, diff --git a/selfdrive/ui/qt/onroad/driver_monitoring.cc b/selfdrive/ui/qt/onroad/driver_monitoring.cc index e67c483047..090766d838 100644 --- a/selfdrive/ui/qt/onroad/driver_monitoring.cc +++ b/selfdrive/ui/qt/onroad/driver_monitoring.cc @@ -28,6 +28,13 @@ void DriverMonitorRenderer::updateState(const UIState &s) { auto &sm = *(s.sm); is_visible = sm["selfdriveState"].getSelfdriveState().getAlertSize() == cereal::SelfdriveState::AlertSize::NONE && sm.rcv_frame("driverStateV2") > s.scene.started_frame; + +#ifdef SUNNYPILOT + if (s.scene.quiet_visual_mode) { + is_visible = sm["selfdriveState"].getSelfdriveState().getAlertStatus() == cereal::SelfdriveState::AlertStatus::NORMAL && + sm.rcv_frame("driverStateV2") > s.scene.started_frame; + } +#endif if (!is_visible) return; auto dm_state = sm["driverMonitoringState"].getDriverMonitoringState(); diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/visuals_panel.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/visuals_panel.cc index 626c5f4c2f..391405fa16 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/visuals_panel.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/visuals_panel.cc @@ -97,6 +97,13 @@ VisualsPanel::VisualsPanel(QWidget *parent) : QWidget(parent) { "", false, }, + { + "QuietVisualMode", + tr("Hide Non-Critical Alerts on UI"), + tr("Hide all normal alerts from the UI. Alert chime will still play unless Quiet Mode is on. Critical & User-Confirm alerts will continue to show as usual."), + "", + false, + }, }; // Add regular toggles first diff --git a/selfdrive/ui/sunnypilot/qt/onroad/alerts.cc b/selfdrive/ui/sunnypilot/qt/onroad/alerts.cc index 293b4894b7..5ba8679909 100644 --- a/selfdrive/ui/sunnypilot/qt/onroad/alerts.cc +++ b/selfdrive/ui/sunnypilot/qt/onroad/alerts.cc @@ -20,13 +20,13 @@ OnroadAlerts::Alert OnroadAlertsSP::getAlert(const SubMaster &sm, uint64_t start } void OnroadAlertsSP::paintEvent(QPaintEvent *event) { - bool hideAlerts = params.getBool("QuietModeUI"); + auto s_sp = uiState(); if (alert.size == cereal::SelfdriveState::AlertSize::NONE) { return; } else if (alert.size == cereal::SelfdriveState::AlertSize::FULL) { OnroadAlerts::paintEvent(event); return; - } else if (hideAlerts) { + } else if (s_sp->scene.quiet_visual_mode) { if (alert.status == cereal::SelfdriveState::AlertStatus::NORMAL) return; } static std::map alert_heights = { @@ -45,7 +45,7 @@ void OnroadAlertsSP::paintEvent(QPaintEvent *event) { int margin = 40; int radius = 30; - const int dev_ui_info = uiStateSP()->scene.dev_ui_info; + const int dev_ui_info = s_sp->scene.dev_ui_info; const int v_adjustment = dev_ui_info > 1 && alert.size != cereal::SelfdriveState::AlertSize::FULL ? 40 : 0; const int h_adjustment = dev_ui_info > 0 && alert.size != cereal::SelfdriveState::AlertSize::FULL ? 230 : 0; diff --git a/selfdrive/ui/sunnypilot/qt/onroad/hud.cc b/selfdrive/ui/sunnypilot/qt/onroad/hud.cc index 5db7ba1814..182b660e27 100644 --- a/selfdrive/ui/sunnypilot/qt/onroad/hud.cc +++ b/selfdrive/ui/sunnypilot/qt/onroad/hud.cc @@ -152,8 +152,12 @@ void HudRendererSP::updateState(const UIState &s) { speedCluster = car_state.getCruiseState().getSpeedCluster() * speedConv; - allow_e2e_alerts = sm["selfdriveState"].getSelfdriveState().getAlertSize() == cereal::SelfdriveState::AlertSize::NONE && - sm.rcv_frame("driverStateV2") > s.scene.started_frame && !reversing; + allow_e2e_alerts = sm.rcv_frame("driverStateV2") > s.scene.started_frame && !reversing; + if (s.scene.quiet_visual_mode) { + allow_e2e_alerts &= sm["selfdriveState"].getSelfdriveState().getAlertStatus() != cereal::SelfdriveState::AlertStatus::NORMAL; + } else { + allow_e2e_alerts &= sm["selfdriveState"].getSelfdriveState().getAlertSize() == cereal::SelfdriveState::AlertSize::NONE; + } } void HudRendererSP::draw(QPainter &p, const QRect &surface_rect) { diff --git a/selfdrive/ui/sunnypilot/ui.cc b/selfdrive/ui/sunnypilot/ui.cc index df7b3ce5ca..5088894cbb 100644 --- a/selfdrive/ui/sunnypilot/ui.cc +++ b/selfdrive/ui/sunnypilot/ui.cc @@ -76,6 +76,8 @@ void ui_update_params_sp(UIStateSP *s) { s->scene.chevron_info = std::atoi(params.get("ChevronInfo").c_str()); s->scene.blindspot_ui = params.getBool("BlindSpot"); s->scene.rainbow_mode = params.getBool("RainbowMode"); + + s->scene.quiet_visual_mode = params.getBool("QuietVisualMode"); } void UIStateSP::reset_onroad_sleep_timer(OnroadTimerStatusToggle toggleTimerStatus) { diff --git a/selfdrive/ui/sunnypilot/ui_scene.h b/selfdrive/ui/sunnypilot/ui_scene.h index da98931e6b..2e4ef1c72e 100644 --- a/selfdrive/ui/sunnypilot/ui_scene.h +++ b/selfdrive/ui/sunnypilot/ui_scene.h @@ -21,4 +21,5 @@ typedef struct UISceneSP : UIScene { int chevron_info; bool blindspot_ui; bool rainbow_mode; + bool quiet_visual_mode; } UISceneSP;