From e9ea7ab698bd878ee444782f61b935aa30a7ba8e Mon Sep 17 00:00:00 2001 From: Simone Guscetti <simone@px4.io> Date: Fri, 17 Feb 2017 16:38:55 +0100 Subject: [PATCH] lib tunes: clean up --- src/lib/tunes/tunes.cpp | 4 +- src/lib/tunes/tunes.h | 81 ++++++++++++++++++++++++++--------------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/lib/tunes/tunes.cpp b/src/lib/tunes/tunes.cpp index 33cc000518..fd69a13c03 100644 --- a/src/lib/tunes/tunes.cpp +++ b/src/lib/tunes/tunes.cpp @@ -254,7 +254,7 @@ unsigned Tunes::next_dots() int Tunes::next_note(unsigned &frequency, unsigned &duration, unsigned &silence) { - // make sure we still have a tune - may be removed by the write / ioctl handler + // make sure we still have a tune if ((_next == nullptr) || (_tune == nullptr)) { return TUNE_ERROR; } @@ -263,7 +263,6 @@ int Tunes::next_note(unsigned &frequency, unsigned &duration, unsigned &silence) unsigned note = 0; unsigned note_length = _note_length; - // NOTE: is this while loop necessary? while (note == 0) { // we always need at least one character from the string int c = next_char(); @@ -441,7 +440,6 @@ tune_end: return TUNE_CONTINUE; } else { - _default_tune_number = 0; return TUNE_STOP; } } diff --git a/src/lib/tunes/tunes.h b/src/lib/tunes/tunes.h index 0e40d44f60..cfe8c28094 100644 --- a/src/lib/tunes/tunes.h +++ b/src/lib/tunes/tunes.h @@ -53,45 +53,66 @@ public: Tunes(); Tunes(unsigned tempo, unsigned octave, unsigned note_length, NoteMode mode); ~Tunes() = default; + + /** + * parse a tune_control_s in frequency(Hz), duration(us) and silence(us). + * + * @param tune_control struct containig the uORB message + * @param frequency return frequency value (Hz) + * @param duration return duration of the tone (us) + * @param silence return silance duration (us) + * @return -1 for error, 0 for play one tone and 1 for continue a sequence + */ int parse_cmd(tune_control_s &tune_control, unsigned &frequency, unsigned &duration, unsigned &silence); + + /** + * parse a tune string, formatted with the syntax of the Microsoft GWBasic/QBasic, in frequency(Hz), + * duration(us) and silence(us). + * + * @param string tune input string + * @param frequency return frequency value (Hz) + * @param duration return duration of the tone (us) + * @param silence return silance duration (us) + * @return -1 for error, 0 for play one tone and 1 for continue a sequence + */ int parse_string(const char *string, unsigned &frequency, unsigned &duration, unsigned &silence); private: - static const unsigned _tune_max = 1024 * 8; // be reasonable about user tunes - static const char *_default_tunes[TONE_NUMBER_OF_TUNES]; - static const char *_tune_names[TONE_NUMBER_OF_TUNES]; - static const uint8_t _note_tab[]; - - unsigned _default_tune_number; // number of currently playing default tune (0 for none) - - const char *_user_tune; - - const char *_tune = nullptr; // current tune string - const char *_next = nullptr; // next note in the string - - unsigned _tempo; - unsigned _note_length; - NoteMode _note_mode; - unsigned _octave; - unsigned _default_tempo = 120; - unsigned _default_note_length = 4; - NoteMode _default_mode = NoteMode::MODE_NORMAL; - unsigned _default_octave = 4; - // unsigned _silence_length; // if nonzero, silence before next note - bool _repeat; // if true, tune restarts at end - int _cbrk; //if true, no audio output + static const char *_default_tunes[TONE_NUMBER_OF_TUNES]; + static const uint8_t _note_tab[]; + bool _repeat; // if true, tune restarts at end + + const char *_tune = nullptr; // current tune string + const char *_next = nullptr; // next note in the string + + unsigned _tempo; + unsigned _note_length; + NoteMode _note_mode; + unsigned _octave; + + unsigned _default_tempo = 120; + unsigned _default_note_length = 4; + NoteMode _default_mode = NoteMode::MODE_NORMAL; + unsigned _default_octave = 4; /** * Convert note to frequency - * @param note - * @return frequency + * + * @param note unsigned value of the semitone from C + * @return frequency (Hz) */ uint32_t note_to_frequency(unsigned note); - // Calculate the duration in microseconds of play and silence for a - // note given the current tempo, length and mode and the number of - // dots following in the play string. - // + /** + * Calculate the duration in microseconds of play and silence for a + * note given the current tempo, length and mode and the number of + * dots following in the play string. + * + * @param silence return silence duration (us) + * @param note_length note length + * @param dots extention of the note length + * @return duration of the note (us) + */ unsigned note_duration(unsigned &silence, unsigned note_length, unsigned dots); // Calculate the duration in microseconds of a rest corresponding to @@ -99,7 +120,7 @@ private: // unsigned rest_duration(unsigned rest_length, unsigned dots); - // Parse the next note out of the string and play it + // Parse the next note out of the string // int next_note(unsigned &frequency, unsigned &duration, unsigned &silence); -- GitLab