diff --git a/selfdrive/ui/soundd.cc b/selfdrive/ui/soundd.cc index 8e8f5348a9..b36514d141 100644 --- a/selfdrive/ui/soundd.cc +++ b/selfdrive/ui/soundd.cc @@ -58,16 +58,19 @@ public: s->setVolume(std::round(100 * volume) / 100); } } + + auto cs = sm["controlsState"].getControlsState(); if (sm.updated("controlsState")) { - setAlert(sm["controlsState"].getControlsState().getAlertSound()); - } else if (sm.rcv_frame("controlsState") > 0 && sm["controlsState"].getControlsState().getEnabled() && + setAlert(cs.getAlertType().cStr(), cs.getAlertSound()); + } else if (sm.rcv_frame("controlsState") > 0 && cs.getEnabled() && ((nanos_since_boot() - sm.rcv_time("controlsState")) / 1e9 > CONTROLS_TIMEOUT)) { - setAlert(CONTROLS_UNRESPONSIVE_ALERT.sound); + setAlert(CONTROLS_UNRESPONSIVE_ALERT.type, CONTROLS_UNRESPONSIVE_ALERT.sound); } } - void setAlert(AudibleAlert sound) { - if (current_sound != sound) { + void setAlert(const QString &alert_type, AudibleAlert sound) { + if (alert_type != current_alert_type || current_sound != sound) { + current_alert_type = alert_type; current_sound = sound; // stop sounds for (auto &[s, loops] : sounds) { @@ -88,6 +91,8 @@ public: private: AudibleAlert current_sound = AudibleAlert::NONE; + QString current_alert_type; + QMap> sounds; SubMaster sm; };