Browse Source

AP_Notify: fixed recursion bug in tone player

copter407
Andrew Tridgell 5 years ago
parent
commit
dfd80b5d8b
  1. 14
      libraries/AP_Notify/MMLPlayer.cpp
  2. 4
      libraries/AP_Notify/MMLPlayer.h

14
libraries/AP_Notify/MMLPlayer.cpp

@ -21,7 +21,7 @@ void MMLPlayer::update() @@ -21,7 +21,7 @@ void MMLPlayer::update()
}
}
void MMLPlayer::play(const char* string)
void MMLPlayer::prepare_to_play_string(const char* string)
{
stop();
@ -36,6 +36,12 @@ void MMLPlayer::play(const char* string) @@ -36,6 +36,12 @@ void MMLPlayer::play(const char* string)
_repeat = false;
_playing = true;
_note_duration_us = 0;
}
void MMLPlayer::play(const char* string)
{
prepare_to_play_string(string);
next_action();
}
@ -133,7 +139,11 @@ void MMLPlayer::next_action() @@ -133,7 +139,11 @@ void MMLPlayer::next_action()
char c = next_char();
if (c == '\0') {
if (_repeat) {
play(_string);
// don't "play" here, as we may have been called from
// there, and it turns out infinite recursion on
// invalid strings is suboptimal. The next call to
// update() will push things out as appropriate.
prepare_to_play_string(_string);
} else {
stop();
}

4
libraries/AP_Notify/MMLPlayer.h

@ -10,6 +10,10 @@ public: @@ -10,6 +10,10 @@ public:
void stop();
private:
// initialise ready to play string
void prepare_to_play_string(const char* string);
bool _playing;
uint32_t _note_duration_us;

Loading…
Cancel
Save