diff --git a/src/lib/tunes/tunes.cpp b/src/lib/tunes/tunes.cpp index d0b4646038349156a2b700632bc6614737a0c6fb..90e1d4226b6c2bac2ec84192ef3c640e9a888e7d 100644 --- a/src/lib/tunes/tunes.cpp +++ b/src/lib/tunes/tunes.cpp @@ -94,6 +94,7 @@ int Tunes::set_control(const tune_control_s &tune_control) switch (tune_control.tune_id) { case static_cast<int>(TuneID::CUSTOM): if (_tune == nullptr || tune_control.tune_override) { + _tune = nullptr; // remove tune in case of override _frequency = (unsigned)tune_control.frequency; _duration = (unsigned)tune_control.duration; _silence = (unsigned)tune_control.silence; diff --git a/src/systemcmds/tune_control/tune_control.cpp b/src/systemcmds/tune_control/tune_control.cpp index 11a4228c9c5f4bebfe56daa09d09ebd2d15fc112..592ae1f401b511dcb2cd0c440e6e3b629680cb0d 100644 --- a/src/systemcmds/tune_control/tune_control.cpp +++ b/src/systemcmds/tune_control/tune_control.cpp @@ -71,6 +71,8 @@ usage() "\t-d <duration>\t\tDuration of the tone in us\n" "\t-s <strength>\t\tStrength of the tone between 0-100\n" "\t-m <melody>\t\tMelody in a string form ex: \"MFT200e8a8a\"\n" + "\n" + "tune_control stop \t\t Stops playback, useful for repeated tunes\n" ); } @@ -185,7 +187,7 @@ tune_control_main(int argc, char *argv[]) usleep(duration + silence); exit_counter++; - // exit if the loop is doing more thatn 50 iteration + // exit if the loop is doing too many iterations if (exit_counter > MAX_NOTE_ITERATION) { break; } @@ -193,7 +195,7 @@ tune_control_main(int argc, char *argv[]) PX4_INFO("Playback finished."); - } else { + } else { // tune id instead of string has been provided if (tune_control.tune_id == 0) { tune_control.tune_id = 1; } @@ -210,13 +212,22 @@ tune_control_main(int argc, char *argv[]) usleep(500000); exit_counter++; - // exit if the loop is doing more thatn 50 iteration + // exit if the loop is doing too many iterations if (exit_counter > MAX_NOTE_ITERATION) { break; } } - } else { + } else if (!strcmp(argv[myoptind], "stop")) { + PX4_INFO("Stopping playback..."); + tune_control.tune_id = 0; + tune_control.frequency = 0; + tune_control.duration = 0; + tune_control.silence = 0; + tune_control.tune_override = true; + publish_tune_control(tune_control); + + } else { usage(); return 1; }