libtunes: Separate the default tunes from tunes.cpp

This commit is contained in:
Simone Guscetti
2018-01-29 09:45:59 -05:00
committed by Daniel Agar
parent 6e712876a4
commit 915f728145
5 changed files with 102 additions and 51 deletions
+1
View File
@@ -34,6 +34,7 @@ px4_add_module(
MODULE lib__tunes
SRCS
tunes.cpp
default_tunes.cpp
DEPENDS
platforms__common
modules__uORB
+61
View File
@@ -0,0 +1,61 @@
/****************************************************************************
*
* Copyright (c) 2017 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
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/**
* @file default_tunes.h
*/
#include "tunes.h"
// initialise default tunes
const char *Tunes::_default_tunes[] = {
"", // empty to align with the index
"MFT240L8 O4aO5dc O4aO5dc O4aO5dc L16dcdcdcdc", // startup tune
"MBT200a8a8a8PaaaP", // ERROR tone
"MFT200e8a8a", // Notify Positive tone
"MFT200e8e", // Notify Neutral tone
"MFT200e8c8e8c8e8c8", // Notify Negative tone
"MNT75L1O2G", //arming warning
"MBNT100a8", //battery warning slow
"MBNT255a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8", //battery warning fast
"MFT255L4AAAL1F#", //gps warning slow
"MFT255L4<<<BAP", // arming failure tune
"MFT255L16agagagag", // parachute release
"MFT255L8ddd#d#eeff", // ekf warning
"MFT255L4gf#fed#d", // baro warning
"MFT100a8", // single beep
"MFT100L4>G#6A#6B#4", // home set tune
};
// set default_tunes array size
const unsigned int Tunes::_default_tunes_size = sizeof(_default_tunes) / sizeof(_default_tunes[0]);
+35 -49
View File
@@ -49,26 +49,6 @@
#define BEAT_TIME_CONVERSION_US BEAT_TIME_CONVERSION_MS * 1000
#define BEAT_TIME_CONVERSION BEAT_TIME_CONVERSION_US
// initialise default tunes
const char *Tunes::_default_tunes[] = {
"", // empty to align with the index
"MFT240L8 O4aO5dc O4aO5dc O4aO5dc L16dcdcdcdc", // startup tune
"MBT200a8a8a8PaaaP", // ERROR tone
"MFT200e8a8a", // Notify Positive tone
"MFT200e8e", // Notify Neutral tone
"MFT200e8c8e8c8e8c8", // Notify Negative tone
"MNT75L1O2G", //arming warning
"MBNT100a8", //battery warning slow
"MBNT255a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8", //battery warning fast
"MFT255L4AAAL1F#", //gps warning slow
"MFT255L4<<<BAP", // arming failure tune
"MFT255L16agagagag", // parachute release
"MFT255L8ddd#d#eeff", // ekf warning
"MFT255L4gf#fed#d", // baro warning
"MFT100a8", // single beep
"MFT100L4>G#6A#6B#4", // home set tune
};
// semitone offsets from C for the characters 'A'-'G'
const uint8_t Tunes::_note_tab[] = {9, 11, 0, 2, 4, 5, 7};
@@ -102,40 +82,46 @@ void Tunes::set_control(const tune_control_s &tune_control)
{
bool reset_playing_tune = false;
switch (tune_control.tune_id) {
case tune_control_s::TUNE_ID_STARTUP:
case tune_control_s::TUNE_ID_ERROR:
case tune_control_s::TUNE_ID_NOTIFY_POSITIVE:
case tune_control_s::TUNE_ID_NOTIFY_NEUTRAL:
case tune_control_s::TUNE_ID_NOTIFY_NEGATIVE:
reset_playing_tune = true;
config_tone();
if (tune_control.tune_id < _default_tunes_size) {
switch (tune_control.tune_id) {
case tune_control_s::TUNE_ID_CUSTOM:
_frequency = (unsigned)tune_control.frequency;
_duration = (unsigned)tune_control.duration;
_using_custom_msg = true;
break;
case tune_control_s::TUNE_ID_ARMING_WARNING:
case tune_control_s::TUNE_ID_BATTERY_WARNING_SLOW:
case tune_control_s::TUNE_ID_BATTERY_WARNING_FAST:
case tune_control_s::TUNE_ID_GPS_WARNING:
case tune_control_s::TUNE_ID_PARACHUTE_RELEASE:
case tune_control_s::TUNE_ID_EKF_WARNING:
case tune_control_s::TUNE_ID_BARO_WARNING:
case tune_control_s::TUNE_ID_SINGLE_BEEP:
case tune_control_s::TUNE_ID_HOME_SET:
case tune_control_s::TUNE_ID_STARTUP:
case tune_control_s::TUNE_ID_ERROR:
case tune_control_s::TUNE_ID_NOTIFY_POSITIVE:
case tune_control_s::TUNE_ID_NOTIFY_NEUTRAL:
case tune_control_s::TUNE_ID_NOTIFY_NEGATIVE:
reset_playing_tune = true;
config_tone();
// TODO: come up with a better strategy
if (_tune == nullptr || reset_playing_tune || tune_control.tune_override) {
_tune = _default_tunes[tune_control.tune_id];
_next = _tune;
case tune_control_s::TUNE_ID_ARMING_WARNING:
case tune_control_s::TUNE_ID_BATTERY_WARNING_SLOW:
case tune_control_s::TUNE_ID_BATTERY_WARNING_FAST:
case tune_control_s::TUNE_ID_GPS_WARNING:
case tune_control_s::TUNE_ID_PARACHUTE_RELEASE:
case tune_control_s::TUNE_ID_EKF_WARNING:
case tune_control_s::TUNE_ID_BARO_WARNING:
case tune_control_s::TUNE_ID_SINGLE_BEEP:
case tune_control_s::TUNE_ID_HOME_SET:
default:
// TODO: come up with a better strategy
if (_tune == nullptr || reset_playing_tune || tune_control.tune_override) {
_tune = _default_tunes[tune_control.tune_id];
_next = _tune;
}
break;
}
break;
case tune_control_s::TUNE_ID_CUSTOM:
default:
_frequency = (unsigned)tune_control.frequency;
_duration = (unsigned)tune_control.duration;
_using_custom_msg = true;
break;
} else {
PX4_WARN("Tune ID not recognized.");
}
}
void Tunes::set_string(const char *string)
+4 -1
View File
@@ -87,9 +87,12 @@ public:
*/
int get_next_tune(unsigned &frequency, unsigned &duration, unsigned &silence);
unsigned int get_default_tunes_size() {return _default_tunes_size;}
private:
static const char *_default_tunes[TONE_NUMBER_OF_TUNES];
static const char *_default_tunes[];
static const uint8_t _note_tab[];
static const unsigned int _default_tunes_size;
bool _repeat; ///< if true, tune restarts at end
const char *_tune = nullptr; ///< current tune string
+1 -1
View File
@@ -121,7 +121,7 @@ tune_control_main(int argc, char *argv[])
case 't':
value = (uint8_t)(strtol(myoptarg, NULL, 0));
if (value >= 1 && value <= 15) {
if (value > 0 && value < tunes.get_default_tunes_size()) {
tune_control.tune_id = value;
} else {