From 201e0777aa0d3e1c24aa1c953bb218e262a2c3b4 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 3 May 2021 21:38:22 -0700 Subject: [PATCH] fix double DM sounds (#20811) * fix double DM sounds * debug script * bool * cleanup * inf Co-authored-by: Comma Device old-commit-hash: b9f9e2dfdac2a5a95be376b7622337dcfdf2b020 --- selfdrive/debug/cycle_alerts.py | 4 ++++ selfdrive/ui/qt/sound.cc | 4 ++-- selfdrive/ui/qt/sound.h | 20 ++++++++++---------- selfdrive/ui/ui.cc | 5 ++--- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/selfdrive/debug/cycle_alerts.py b/selfdrive/debug/cycle_alerts.py index 9999d8657c..f8905d4741 100755 --- a/selfdrive/debug/cycle_alerts.py +++ b/selfdrive/debug/cycle_alerts.py @@ -5,16 +5,20 @@ import time +from cereal import car import cereal.messaging as messaging from selfdrive.car.honda.interface import CarInterface from selfdrive.controls.lib.events import ET, EVENTS, Events from selfdrive.controls.lib.alertmanager import AlertManager +EventName = car.CarEvent.EventName def cycle_alerts(duration=200, is_metric=False): alerts = list(EVENTS.keys()) print(alerts) + alerts = [EventName.preDriverDistracted, EventName.promptDriverDistracted, EventName.driverDistracted] + CP = CarInterface.get_params("HONDA CIVIC 2016 TOURING") sm = messaging.SubMaster(['deviceState', 'pandaState', 'roadCameraState', 'modelV2', 'liveCalibration', 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman']) diff --git a/selfdrive/ui/qt/sound.cc b/selfdrive/ui/qt/sound.cc index 682fb88081..9ad57cb93d 100644 --- a/selfdrive/ui/qt/sound.cc +++ b/selfdrive/ui/qt/sound.cc @@ -9,7 +9,7 @@ Sound::Sound() { } void Sound::play(AudibleAlert alert) { - int loops = sound_map[alert].second> - 1 ? sound_map[alert].second : QSoundEffect::Infinite; + int loops = sound_map[alert].second ? QSoundEffect::Infinite : 0; sounds[alert].setLoopCount(loops); sounds[alert].setVolume(volume); sounds[alert].play(); @@ -18,7 +18,7 @@ void Sound::play(AudibleAlert alert) { void Sound::stop() { for (auto &kv : sounds) { // Only stop repeating sounds - if (sound_map[kv.first].second != 0) { + if (kv.second.loopsRemaining() == QSoundEffect::Infinite) { kv.second.stop(); } } diff --git a/selfdrive/ui/qt/sound.h b/selfdrive/ui/qt/sound.h index 1f0ce6d5d6..a94e3ab723 100644 --- a/selfdrive/ui/qt/sound.h +++ b/selfdrive/ui/qt/sound.h @@ -14,16 +14,16 @@ public: float volume = 0; private: - std::map> sound_map { - // AudibleAlert, (file path, loop count) - {AudibleAlert::CHIME_DISENGAGE, {"../assets/sounds/disengaged.wav", 0}}, - {AudibleAlert::CHIME_ENGAGE, {"../assets/sounds/engaged.wav", 0}}, - {AudibleAlert::CHIME_WARNING1, {"../assets/sounds/warning_1.wav", 0}}, - {AudibleAlert::CHIME_WARNING2, {"../assets/sounds/warning_2.wav", 0}}, - {AudibleAlert::CHIME_WARNING2_REPEAT, {"../assets/sounds/warning_2.wav", -1}}, - {AudibleAlert::CHIME_WARNING_REPEAT, {"../assets/sounds/warning_repeat.wav", -1}}, - {AudibleAlert::CHIME_ERROR, {"../assets/sounds/error.wav", 0}}, - {AudibleAlert::CHIME_PROMPT, {"../assets/sounds/error.wav", 0}} + std::map> sound_map { + // AudibleAlert, (file path, inf loop) + {AudibleAlert::CHIME_DISENGAGE, {"../assets/sounds/disengaged.wav", false}}, + {AudibleAlert::CHIME_ENGAGE, {"../assets/sounds/engaged.wav", false}}, + {AudibleAlert::CHIME_WARNING1, {"../assets/sounds/warning_1.wav", false}}, + {AudibleAlert::CHIME_WARNING2, {"../assets/sounds/warning_2.wav", false}}, + {AudibleAlert::CHIME_WARNING2_REPEAT, {"../assets/sounds/warning_2.wav", true}}, + {AudibleAlert::CHIME_WARNING_REPEAT, {"../assets/sounds/warning_repeat.wav", true}}, + {AudibleAlert::CHIME_ERROR, {"../assets/sounds/error.wav", false}}, + {AudibleAlert::CHIME_PROMPT, {"../assets/sounds/error.wav", false}} }; std::map sounds; diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 0e9c87fce4..83aaf41fab 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -224,9 +224,8 @@ static void update_alert(UIState *s) { if (s->sm->updated("controlsState")) { auto alert_sound = scene.controls_state.getAlertSound(); if (scene.alert_type.compare(scene.controls_state.getAlertType()) != 0) { - if (alert_sound == AudibleAlert::NONE) { - s->sound->stop(); - } else { + s->sound->stop(); + if (alert_sound != AudibleAlert::NONE) { s->sound->play(alert_sound); } }