From 33954a904fa2f23eb48039692e13a40485def23f Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Mon, 11 Oct 2021 14:04:26 -0400 Subject: [PATCH] lib/tunes: never play tunes if circuit breaker is set --- src/lib/tunes/CMakeLists.txt | 9 ++++++--- src/lib/tunes/tunes.cpp | 30 ++++++++++++++++++++++++++++++ src/lib/tunes/tunes.h | 2 ++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/lib/tunes/CMakeLists.txt b/src/lib/tunes/CMakeLists.txt index deeb8f3139..24b8557cf3 100644 --- a/src/lib/tunes/CMakeLists.txt +++ b/src/lib/tunes/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2017 PX4 Development Team. All rights reserved. +# Copyright (c) 2017-2021 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -32,6 +32,9 @@ ############################################################################ px4_add_library(tunes - tunes.cpp default_tunes.cpp -) \ No newline at end of file + tune_definition.h + tunes.cpp + tunes.h +) +target_link_libraries(tunes PRIVATE circuit_breaker) diff --git a/src/lib/tunes/tunes.cpp b/src/lib/tunes/tunes.cpp index a95b1b9567..e0371559af 100644 --- a/src/lib/tunes/tunes.cpp +++ b/src/lib/tunes/tunes.cpp @@ -38,6 +38,9 @@ #include "tunes.h" #include + +#include + #include #include #include @@ -56,6 +59,10 @@ Tunes::Tunes(unsigned default_note_length, NoteMode default_note_mode, _default_octave(default_octave), _default_tempo(default_tempo) { + if (circuit_breaker_enabled("CBRK_BUZZER", CBRK_BUZZER_KEY)) { + _tunes_disabled = true; + } + reset(false); } @@ -152,6 +159,14 @@ void Tunes::set_string(const char *const string, uint8_t volume) Tunes::Status Tunes::get_next_note(unsigned &frequency, unsigned &duration, unsigned &silence, uint8_t &volume) { + if (_tunes_disabled) { + frequency = 0; + duration = 0; + silence = 0; + volume = 0; + return Tunes::Status::Stop; + } + Tunes::Status ret = get_next_note(frequency, duration, silence); // Check if note should not be heard -> adjust volume to 0 to be safe. @@ -167,6 +182,13 @@ Tunes::Status Tunes::get_next_note(unsigned &frequency, unsigned &duration, unsi Tunes::Status Tunes::get_next_note(unsigned &frequency, unsigned &duration, unsigned &silence) { + if (_tunes_disabled) { + frequency = 0; + duration = 0; + silence = 0; + return Tunes::Status::Stop; + } + // Return the values for frequency and duration if the custom msg was received. if (_using_custom_msg) { _using_custom_msg = false; @@ -350,6 +372,10 @@ Tunes::Status Tunes::get_next_note(unsigned &frequency, unsigned &duration, unsi Tunes::Status Tunes::tune_end() { + if (_tunes_disabled) { + return Tunes::Status::Stop; + } + // Restore intial parameters. reset(_repeat); @@ -364,6 +390,10 @@ Tunes::Status Tunes::tune_end() Tunes::Status Tunes::tune_error() { + if (_tunes_disabled) { + return Tunes::Status::Stop; + } + // The tune appears to be bad (unexpected EOF, bad character, etc.). _repeat = false; // Don't loop on error. reset(_repeat); diff --git a/src/lib/tunes/tunes.h b/src/lib/tunes/tunes.h index 195907c058..7ab240fde5 100644 --- a/src/lib/tunes/tunes.h +++ b/src/lib/tunes/tunes.h @@ -232,4 +232,6 @@ private: uint8_t _volume = 0; bool _using_custom_msg = false; + + bool _tunes_disabled{false}; };