From abee8c425d33b0dab390faa8a0e98e1708d03f48 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Fri, 15 Sep 2023 21:52:36 +0200 Subject: [PATCH 1/8] [RTTTL] Add Async play and other improvements --- lib/AnyRtttl/AUTHORS | 5 + lib/AnyRtttl/CHANGES | 32 + lib/AnyRtttl/CMakeLists.txt | 160 +++++ lib/AnyRtttl/INSTALL.md | 105 +++ lib/AnyRtttl/LICENSE | 21 + lib/AnyRtttl/README.md | 523 ++++++++++++++ lib/AnyRtttl/appveyor.yml | 81 +++ lib/AnyRtttl/docs/AnyRtttl-splashscreen.png | Bin 0 -> 111214 bytes lib/AnyRtttl/docs/AnyRtttl.xcf | Bin 0 -> 554290 bytes lib/AnyRtttl/examples.cpp.in | 14 + lib/AnyRtttl/examples/Basic/Basic.ino | 22 + .../BlockingProgramMemoryRtttl.ino | 37 + .../examples/BlockingRtttl/BlockingRtttl.ino | 31 + .../BlockingWithNonBlocking.ino | 44 ++ .../examples/ESP32Rtttl/ESP32Rtttl.ino | 62 ++ .../NonBlockingProgramMemoryRtttl.ino | 43 ++ .../NonBlockingRtttl/NonBlockingRtttl.ino | 38 + .../NonBlockingStopBeforeEnd.ino | 42 ++ .../examples/Play10Bits/Play10Bits.ino | 44 ++ .../examples/Play16Bits/Play16Bits.ino | 25 + .../examples/Rtttl2Code/Rtttl2Code.ino | 52 ++ lib/AnyRtttl/keywords.txt | 16 + lib/AnyRtttl/library.properties | 9 + lib/AnyRtttl/src/anyrtttl.cpp | 672 ++++++++++++++++++ lib/AnyRtttl/src/anyrtttl.h | 262 +++++++ lib/AnyRtttl/src/binrtttl.cpp | 136 ++++ lib/AnyRtttl/src/binrtttl.h | 107 +++ lib/AnyRtttl/src/pitches.h | 222 ++++++ lib/AnyRtttl/test/TestAnyRtttl.cpp | 332 +++++++++ lib/AnyRtttl/test/TestAnyRtttl.h | 25 + lib/AnyRtttl/test/expected_call_stack.log | 124 ++++ lib/AnyRtttl/test/main.cpp | 26 + src/src/CustomBuild/define_plugin_sets.h | 9 + .../ESPEasyCore/ESPEasy_backgroundtasks.cpp | 7 + src/src/Helpers/Audio.cpp | 88 ++- src/src/Helpers/Audio.h | 9 +- 36 files changed, 3401 insertions(+), 24 deletions(-) create mode 100644 lib/AnyRtttl/AUTHORS create mode 100644 lib/AnyRtttl/CHANGES create mode 100644 lib/AnyRtttl/CMakeLists.txt create mode 100644 lib/AnyRtttl/INSTALL.md create mode 100644 lib/AnyRtttl/LICENSE create mode 100644 lib/AnyRtttl/README.md create mode 100644 lib/AnyRtttl/appveyor.yml create mode 100644 lib/AnyRtttl/docs/AnyRtttl-splashscreen.png create mode 100644 lib/AnyRtttl/docs/AnyRtttl.xcf create mode 100644 lib/AnyRtttl/examples.cpp.in create mode 100644 lib/AnyRtttl/examples/Basic/Basic.ino create mode 100644 lib/AnyRtttl/examples/BlockingProgramMemoryRtttl/BlockingProgramMemoryRtttl.ino create mode 100644 lib/AnyRtttl/examples/BlockingRtttl/BlockingRtttl.ino create mode 100644 lib/AnyRtttl/examples/BlockingWithNonBlocking/BlockingWithNonBlocking.ino create mode 100644 lib/AnyRtttl/examples/ESP32Rtttl/ESP32Rtttl.ino create mode 100644 lib/AnyRtttl/examples/NonBlockingProgramMemoryRtttl/NonBlockingProgramMemoryRtttl.ino create mode 100644 lib/AnyRtttl/examples/NonBlockingRtttl/NonBlockingRtttl.ino create mode 100644 lib/AnyRtttl/examples/NonBlockingStopBeforeEnd/NonBlockingStopBeforeEnd.ino create mode 100644 lib/AnyRtttl/examples/Play10Bits/Play10Bits.ino create mode 100644 lib/AnyRtttl/examples/Play16Bits/Play16Bits.ino create mode 100644 lib/AnyRtttl/examples/Rtttl2Code/Rtttl2Code.ino create mode 100644 lib/AnyRtttl/keywords.txt create mode 100644 lib/AnyRtttl/library.properties create mode 100644 lib/AnyRtttl/src/anyrtttl.cpp create mode 100644 lib/AnyRtttl/src/anyrtttl.h create mode 100644 lib/AnyRtttl/src/binrtttl.cpp create mode 100644 lib/AnyRtttl/src/binrtttl.h create mode 100644 lib/AnyRtttl/src/pitches.h create mode 100644 lib/AnyRtttl/test/TestAnyRtttl.cpp create mode 100644 lib/AnyRtttl/test/TestAnyRtttl.h create mode 100644 lib/AnyRtttl/test/expected_call_stack.log create mode 100644 lib/AnyRtttl/test/main.cpp diff --git a/lib/AnyRtttl/AUTHORS b/lib/AnyRtttl/AUTHORS new file mode 100644 index 0000000000..ef27329702 --- /dev/null +++ b/lib/AnyRtttl/AUTHORS @@ -0,0 +1,5 @@ +# This file contains a list of people who've made contribution to +# the project. People who commit code are encouraged to add +# their names here. Please keep the list sorted by first names. + +Antoine Beauchamp diff --git a/lib/AnyRtttl/CHANGES b/lib/AnyRtttl/CHANGES new file mode 100644 index 0000000000..491a02e4d1 --- /dev/null +++ b/lib/AnyRtttl/CHANGES @@ -0,0 +1,32 @@ +Changes for 2.3 + +* Fixed issue #2 - Support for PROGMEM / FLASH melodies in non-blocking mode. + + +Changes for 2.2.1: + +* Fixed issue #4: error compiling example code. +* Fixed issue #5: Refactor build process to use Arduino CLI instead of Arduino IDE. + + +Changes for 2.2.0: + +* New feature: Build option `ANYRTTTL_BUILD_EXAMPLES` to enable/disable building AnyRtttl examples. +* New feature: Changed file/folder structure to be compatible with Arduino Library Manager. +* New feature: Using RapidAssist 0.5.0 and win32Arduino 2.3.1. + + +Changes for 2.1.229: + +* New feature: Implemented support for RTTTL in Program Memory (PROGMEM). + + +Changes for 2.0.179: + +* Library converted to AnyRtttl. +* First github release. +* Code originally release at http://www.end2endzone.com/anyrtttl-a-feature-rich-arduino-library-for-playing-rtttl-melodies/ + + +Changes for 1.0.0: +* Initial release of NonBlockingRtttl. diff --git a/lib/AnyRtttl/CMakeLists.txt b/lib/AnyRtttl/CMakeLists.txt new file mode 100644 index 0000000000..1e51d78965 --- /dev/null +++ b/lib/AnyRtttl/CMakeLists.txt @@ -0,0 +1,160 @@ +cmake_minimum_required(VERSION 3.4.3) +project(AnyRtttl) + +# Set the output folder where your program will be created +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +set( LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) + +############################################################################################################################################## +# Functions +############################################################################################################################################## +function(GIT_EXTERNAL DIR REPO_URL TAG) + # Find the name of the repository + get_filename_component(REPO_NAME ${REPO_URL} NAME_WE) + + # Compute output directory + set(REPO_DIR "${DIR}/${REPO_NAME}") + + if (EXISTS "${REPO_DIR}") + message(STATUS "Repository ${REPO_NAME} already exists in directory ${DIR}. Skipping git clone command.") + return() + endif() + + # Clone the repository + message(STATUS "git clone ${REPO_URL} ${REPO_DIR}") + execute_process( + COMMAND "${GIT_EXECUTABLE}" clone ${REPO_URL} ${REPO_DIR} + RESULT_VARIABLE returncode ERROR_VARIABLE error + WORKING_DIRECTORY "${DIR}") + if(returncode) + message(FATAL_ERROR "Clone failed: ${error}\n") + endif() + message(STATUS "git clone completed") + + # Checking out the required tag + message(STATUS "git checkout ${TAG}") + execute_process( + COMMAND "${GIT_EXECUTABLE}" checkout ${TAG} + RESULT_VARIABLE returncode ERROR_VARIABLE error + WORKING_DIRECTORY "${REPO_DIR}") + if(returncode) + message(FATAL_ERROR "Checkout failed: ${error}\n") + endif() + message(STATUS "git checkout completed") + + # Delete the .git folder to simulate an export of the repository + message(STATUS "Deleting ${REPO_DIR}/.git") + file(REMOVE_RECURSE "${REPO_DIR}/.git") + +endfunction() + +function(add_example name) + # Create custom example.cpp file which includes the ino sketch file. + SET(SOURCE_INO_FILE "${PROJECT_SOURCE_DIR}/examples/${name}/${name}.ino") + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/examples.cpp.in" "${PROJECT_BINARY_DIR}/${name}/examples.cpp") + + add_executable(${name} + ${ARDUINO_LIBRARY_SOURCE_FILES} + ${SOURCE_INO_FILE} + "${PROJECT_BINARY_DIR}/${name}/examples.cpp" + ) + + target_include_directories(${name} PRIVATE ${PROJECT_SOURCE_DIR}/src ${BITREADER_SOURCE_DIR} win32arduino ) + target_link_libraries(${name} PRIVATE win32arduino rapidassist) + + set_property(GLOBAL PROPERTY USE_FOLDERS ON) + set_target_properties(${name} PROPERTIES FOLDER "examples") + + if(WIN32) + # 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\ostream(743,1): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc + # 1>D:\dev\AnyRtttl\master\third_parties\win32Arduino\install\include\win32arduino-2.4.0\SerialPrinter.h(202): message : see reference to function template instantiation 'std::basic_ostream> &std::operator <<>(std::basic_ostream> &,const char *)' being compiled + set_target_properties(${name} PROPERTIES COMPILE_FLAGS "/wd4530") + endif() + +endfunction() + +############################################################################################################################################## +# Dependencies +############################################################################################################################################## +find_package(GTest REQUIRED) +find_package(rapidassist 0.5.0 REQUIRED) +find_package(win32arduino 2.3.1 REQUIRED) +find_package(Git REQUIRED) + +# Arduino BitReader library dependency +file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external") +GIT_EXTERNAL("${CMAKE_CURRENT_SOURCE_DIR}/external" "http://github.com/end2endzone/BitReader.git" "1.3.0") +set(BITREADER_SOURCE_DIR "${PROJECT_SOURCE_DIR}/external/BitReader/src") + +############################################################################################################################################## +# Project settings +############################################################################################################################################## + +# Build options +option(ANYRTTTL_BUILD_EXAMPLES "Build all example projects" OFF) + +# Prevents annoying warnings on MSVC +if (WIN32) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + +# Find all library source and unit test files +file( GLOB ARDUINO_LIBRARY_SOURCE_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/src/*.h ${BITREADER_SOURCE_DIR}/*.cpp ${BITREADER_SOURCE_DIR}/*.h) +file( GLOB ARDUINO_LIBRARY_TEST_FILES ${PROJECT_SOURCE_DIR}/test/*.cpp ${PROJECT_SOURCE_DIR}/test/*.h ) + +# Create unit test executable +add_executable(anyrtttl_unittest + ${ARDUINO_LIBRARY_SOURCE_FILES} + ${ARDUINO_LIBRARY_TEST_FILES} +) + +#include directories +target_include_directories(anyrtttl_unittest + PRIVATE ${PROJECT_SOURCE_DIR}/src # Arduino Library folder + ${GTEST_INCLUDE_DIR} + ${BITREADER_SOURCE_DIR} + win32arduino +) + +# Unit test projects requires to link with pthread if also linking with gtest +if(NOT WIN32) + set(PTHREAD_LIBRARIES -pthread) +endif() + +#link libraries +target_link_libraries(anyrtttl_unittest PRIVATE win32arduino rapidassist ${PTHREAD_LIBRARIES} ${GTEST_LIBRARIES} ) + +if(WIN32) + # 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\ostream(743,1): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc + # 1>D:\dev\AnyRtttl\master\third_parties\win32Arduino\install\include\win32arduino-2.4.0\SerialPrinter.h(202): message : see reference to function template instantiation 'std::basic_ostream> &std::operator <<>(std::basic_ostream> &,const char *)' being compiled + set_target_properties(anyrtttl_unittest PROPERTIES COMPILE_FLAGS "/wd4530") +endif() + +# Copy `expected_call_stack.log` to expected locations +configure_file(${PROJECT_SOURCE_DIR}/test/expected_call_stack.log ${PROJECT_BINARY_DIR}/expected_call_stack.log COPYONLY) +set(TEST_FILES_BINARY_DIR ${EXECUTABLE_OUTPUT_PATH}) +if(WIN32) + set(TEST_FILES_BINARY_DIR ${TEST_FILES_BINARY_DIR}/${CMAKE_CFG_INTDIR}) +endif() +add_custom_command( + TARGET anyrtttl_unittest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/test/expected_call_stack.log + ${TEST_FILES_BINARY_DIR}/expected_call_stack.log) + +############################################################################################################################################## +# Add all samples to the project unless the user has specified otherwise. +############################################################################################################################################## +if(ANYRTTTL_BUILD_EXAMPLES) + add_example("Basic") + add_example("BlockingProgramMemoryRtttl") + add_example("BlockingRtttl") + add_example("BlockingWithNonBlocking") + add_example("NonBlockingProgramMemoryRtttl") + add_example("NonBlockingRtttl") + add_example("NonBlockingStopBeforeEnd") + add_example("Play10Bits") + add_example("Play16Bits") + add_example("Rtttl2Code") +endif() + \ No newline at end of file diff --git a/lib/AnyRtttl/INSTALL.md b/lib/AnyRtttl/INSTALL.md new file mode 100644 index 0000000000..017401126e --- /dev/null +++ b/lib/AnyRtttl/INSTALL.md @@ -0,0 +1,105 @@ +# Install # + +The library can be found, installed, or updated from the Arduino IDE using the official Arduino Library Manager (available from IDE version 1.6.2). + + +The library can be installed on the system by following the same steps as with other Arduino library. + +Refer to [Installing Additional Arduino Libraries](https://www.arduino.cc/en/Guide/Libraries) tutorial for details on how to install a third party library. + + + + +# Dependencies # + +The AnyRtttl library have no dependencies on other Arduino library. However, some examples of the library requires external dependencies. + +The following Arduino Library must be installed on the system to use the library examples: + +* [BitReader v1.3.0](https://github.com/end2endzone/BitReader/tree/1.3.0) + + + + +# Build # + +The library unit tests can be build on Windows/Linux platform to maintain the product stability and level of quality. + +This section explains how to compile and build the software and how to get a test environment ready. + + + +## Prerequisites ## + + + +### Software Requirements ### + +The following software must be installed on the system before compiling unit test source code: + +* [Google C++ Testing Framework v1.8.0](https://github.com/google/googletest/tree/release-1.8.0) +* [RapidAssist v0.5.0](https://github.com/end2endzone/RapidAssist/tree/0.5.0) +* [win32Arduino v2.3.1](https://github.com/end2endzone/win32Arduino/tree/2.3.1) +* [CMake](http://www.cmake.org/) v3.4.3 (or newer) + + + +### Linux Requirements ### + +These are the base requirements to build source code: + + * GNU-compatible Make or gmake + * POSIX-standard shell + * A C++98-standard-compliant compiler + + + +### Windows Requirements ### + +* Microsoft Visual C++ 2010 or newer + + + +## Build steps ## + +The AnyRtttl unit test uses the CMake build system to generate a platform-specific build environment. CMake reads the CMakeLists.txt files, checks for installed dependencies and then generates files for the selected build system. + +The following steps show how to build the library: + +1) Download the source code from an existing [tags](https://github.com/end2endzone/AnyRtttl/tags) and extract the content to a local directory (for example `c:\projects\AnyRtttl` or `~/dev/AnyRtttl`). + +2) Open a Command Prompt (Windows) or Terminal (Linux) and browse to the project directory. + +3) Enter the following commands to generate the project files for your build system: +``` +mkdir build +cd build +cmake .. +``` + +4) Build the source code. + +**Windows** +``` +cmake --build . --config Release +``` + +**Linux** +``` +make +``` + + + + +# Testing # + +AnyRtttl comes with unit tests which help maintaining the product stability and level of quality. + +Test are build using the Google Test v1.8.0 framework. For more information on how googletest is working, see the [google test documentation primer](https://github.com/google/googletest/blob/release-1.8.0/googletest/docs/V1_6_Primer.md). + +To run tests, open a shell prompt and browse to the `build/bin` folder and run `anyrtttl_unittest` executable. For Windows users, the executable is located in `build\bin\Release`. + +Test results are saved in junit format in file `anyrtttl_unittest.release.xml`. + +The latest test results are available at the beginning of the [README.md](README.md) file. diff --git a/lib/AnyRtttl/LICENSE b/lib/AnyRtttl/LICENSE new file mode 100644 index 0000000000..dd4add21ca --- /dev/null +++ b/lib/AnyRtttl/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Antoine Beauchamp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/AnyRtttl/README.md b/lib/AnyRtttl/README.md new file mode 100644 index 0000000000..d26d7aa41b --- /dev/null +++ b/lib/AnyRtttl/README.md @@ -0,0 +1,523 @@ +![AnyRtttl logo](https://github.com/end2endzone/AnyRtttl/raw/master/docs/AnyRtttl-splashscreen.png) + + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Github Releases](https://img.shields.io/github/release/end2endzone/AnyRtttl.svg)](https://github.com/end2endzone/AnyRtttl/releases) + + + +# AnyRtttl # + +AnyRtttl is a feature rich arduino library for playing [RTTTL](http://www.end2endzone.com/anyrtttl-a-feature-rich-arduino-library-for-playing-rtttl-melodies/#Quick_recall_of_the_RTTTL_format) melodies. The library offers much more interesting features than relying on the widely available `void play_rtttl(char *p)` function. The library supports all best RTTTL features. + +Library features: + +* Really small increase in memory & code footprint compared to the usual blocking algorithm. +* Blocking & Non-Blocking modes available. +* Support custom `tone()`, `noTone()`, `delay()` and `millis()` functions. +* Compatible with external Tone libraries. +* Supports highly compressed RTTTL binary format. +* Supports RTTTL melodies stored in Program Memory (`PROGMEM`). +* Play two monolithic melodies on two different pins using 2 piezo buzzer with the help of an external Tone library. + + + +## Status ## + +Build: + +| Service | Build | Tests | +|----|-------|-------| +| AppVeyor | [![Build status](https://img.shields.io/appveyor/ci/end2endzone/AnyRtttl/master.svg?logo=appveyor)](https://ci.appveyor.com/project/end2endzone/AnyRtttl) | [![Tests status](https://img.shields.io/appveyor/tests/end2endzone/AnyRtttl/master.svg?logo=appveyor)](https://ci.appveyor.com/project/end2endzone/AnyRtttl/branch/master/tests) | +| Windows Server 2019 | [![Build on Windows](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_windows.yml/badge.svg)](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_windows.yml) | [![Tests on Windows](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/end2endzone/58cf6c72c08e706335337d5ef9ca48e8/raw/AnyRtttl.master.Windows.json)](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_windows.yml) | +| Ubuntu 22.04 | [![Build on Linux](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_linux.yml/badge.svg)](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_linux.yml) | [![Tests on Linux](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/end2endzone/58cf6c72c08e706335337d5ef9ca48e8/raw/AnyRtttl.master.Linux.json)](https://github.com/end2endzone/AnyRtttl/actions/workflows/build_linux.yml) | + +Statistics: + +| AppVeyor | GitHub | +|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------| +| [![Statistics](https://buildstats.info/appveyor/chart/end2endzone/AnyRtttl)](https://ci.appveyor.com/project/end2endzone/AnyRtttl/branch/master) | [![Statistics](https://buildstats.info/github/chart/end2endzone/AnyRtttl)](https://github.com/end2endzone/AnyRtttl/actions) | + + + + +# Purpose # + +After publishing [NonBlockingRtttl](https://github.com/end2endzone/NonBlockingRTTTL) arduino library, I started using the library in more complex projects which was requiring other libraries. I quickly ran into the hell of library dependencies and library conflicts. I realized that I needed more features that could help me prototype faster. + +Other libraries available which allows you to "play" a melody in [RTTTL](http://www.end2endzone.com/anyrtttl-a-feature-rich-arduino-library-for-playing-rtttl-melodies/#Quick_recall_of_the_RTTTL_format) format suffer the same issue: they are based on blocking APIs or the RTTTL data is not optimized for space. + +AnyRtttl is different since it packs multiple RTTTL related features in a single library. It supports [blocking](https://en.wikipedia.org/wiki/Blocking_(computing)) & [non-blocking](http://en.wikipedia.org/wiki/Non-blocking_algorithm) API which makes it suitable to be used by more advanced algorithm. For instance, when using the non-blocking API, the melody can be stopped when a button is pressed. The library is also compatible with external Tone libraries and it supports highly compressed RTTTL binary formats. + + + +## Non-Blocking ## + +Most of the code that can "play" a melody on internet are build the same way: sequential calls to `tone()` and `delay()` functions using hardcoded values. This type of implementation might be good for robots but not for realtime application or projects that needs to monitor pins while the song is playing. + +With AnyRtttl non-blocking mode, your program can read/write IOs pins while playing and react on changes. Implementing a "stop" or "next song" push button is easy! + + + +## External Tone or Timer #0 libraries ## + +The AnyRtttl library is also flexible by allowing you to use the build-in arduino `tone()` and `noTone()` functions or an implementation from any external library which makes it compatible with any Tone library in the market. + +The library also supports custom `delay()` and `millis()` functions. If a project requires modification to the microcontroller's build-in Timer #0, the `millis()` function may be impacted and behave incorrectly. To maximize compatibility, one can supply a custom function which behaves like the original to prevent altering playback. + + + +## Binary RTTTL ## + +The AnyRtttl library also supports playing RTTTL data which is stored as binary data instead of text. This is actually a custom implementation of the RTTTL format. Using this format, one can achieve storing an highly compressed RTTTL melody which saves memory. + +See below for details on RTTTL binary format. + + + + +# Usage # + +The following instructions show how to use the library. + +Define `ANY_RTTTL_INFO` to enable the debugging of the library state on the serial port. + +Use `ANY_RTTTL_VERSION` to get the current version of the library. + +Note, the specified macros must be defined before including `anyrtttl.h` in your sketches. + + + +## Non-blocking mode ## + + anyrtttl::nonblocking::begin(BUZZER_PIN, mario); +Call `anyrtttl::nonblocking::begin()` to setup AnyRtttl library in non-blocking mode. + +Then call `anyrtttl::nonblocking::play()` to update the library's state and play notes as required. + +Use `anyrtttl::done()` or `anyrtttl::nonblocking::isPlaying()` to know if the library is done playing the given song. + +Anytime, one can call `anyrtttl::nonblocking::stop()` to stop playing the current song. + +The following code shows how to use the library in non-blocking mode: + +```cpp +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char * arkanoid = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char * mario = "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +byte songIndex = 0; //which song to play when the previous one finishes + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + // If we are not playing something + if ( !anyrtttl::nonblocking::isPlaying() ) + { + // Play a song based on songIndex. + if (songIndex == 0) + anyrtttl::nonblocking::begin(BUZZER_PIN, tetris); + else if (songIndex == 1) + anyrtttl::nonblocking::begin(BUZZER_PIN, arkanoid); + else if (songIndex == 2) + anyrtttl::nonblocking::begin(BUZZER_PIN, mario); + + //Set songIndex ready for next song + songIndex++; + } + else + { + anyrtttl::nonblocking::play(); + } +} +``` + + + +## Playing RTTTL data stored in flash (program) memory ## + +AnyRtttl also supports RTTTL melodies stored in flash or Program Memory (PROGMEM). + +The `anyrtttl::nonblocking::begin()` function supports _Program Memory_ macros such as `FPSTR()` or `F()`. + +The following code shows how to use the library with RTTTL data stored in flash (program) memory instead of SRAM: + +```cpp +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char tetris[] PROGMEM = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char arkanoid[] PROGMEM = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char mario[] PROGMEM = "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +// James Bond theme defined in inline code below (also stored in flash memory) +byte songIndex = 0; //which song to play when the previous one finishes + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + // If we are not playing something + if ( !anyrtttl::nonblocking::isPlaying() ) + { + // Play a song based on songIndex. + if (songIndex == 0) + anyrtttl::nonblocking::beginProgMem(BUZZER_PIN, tetris); + else if (songIndex == 1) + anyrtttl::nonblocking::begin_P(BUZZER_PIN, arkanoid); + else if (songIndex == 2) + anyrtttl::nonblocking::begin(BUZZER_PIN, FPSTR(mario)); + else if (songIndex == 3) + anyrtttl::nonblocking::begin(BUZZER_PIN, F("Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6")); + + //Set songIndex ready for next song + songIndex++; + } + else + { + anyrtttl::nonblocking::play(); + } +} +``` + + + +# Advanced Usage # + + + +## Custom Tone function (a.k.a. RTTTL 2 code) ## + +This example shows how custom functions can be used by the AnyRtttl library to convert an RTTTL melody to arduino code. + +First define replacement functions like the following: + +```cpp +void serialTone(byte pin, uint16_t frequency, uint32_t duration) { + Serial.print("tone("); + Serial.print(pin); + Serial.print(","); + Serial.print(frequency); + Serial.print(","); + Serial.print(duration); + Serial.println(");"); +} + +void serialNoTone(byte pin) { + Serial.print("noTone("); + Serial.print(pin); + Serial.println(");"); +} + +void serialDelay(uint32_t duration) { + Serial.print("delay("); + Serial.print(duration); + Serial.println(");"); +} +``` + +Each new functions prints the function call & arguments to the serial port. + +In the `setup()` function, setup the AnyRtttl library to use the new functions: + +```cpp +//Use custom functions +anyrtttl::setToneFunction(&serialTone); +anyrtttl::setNoToneFunction(&serialNoTone); +anyrtttl::setDelayFunction(&serialDelay); +``` + +Use the `anyrtttl::blocking::play()` API for "playing" an RTTTL melody and monitor the output of the serial port to see the actual arduino code generated by the library. + +The following code shows how to use the library with custom functions: + +```cpp +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; + +//******************************************************************************************************************* +// The following replacement functions prints the function call & parameters to the serial port. +//******************************************************************************************************************* +void serialTone(byte pin, uint16_t frequency, uint32_t duration) { + Serial.print("tone("); + Serial.print(pin); + Serial.print(","); + Serial.print(frequency); + Serial.print(","); + Serial.print(duration); + Serial.println(");"); +} + +void serialNoTone(byte pin) { + Serial.print("noTone("); + Serial.print(pin); + Serial.println(");"); +} + +void serialDelay(uint32_t duration) { + Serial.print("delay("); + Serial.print(duration); + Serial.println(");"); +} + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); + + //Use custom functions + anyrtttl::setToneFunction(&serialTone); + anyrtttl::setNoToneFunction(&serialNoTone); + anyrtttl::setDelayFunction(&serialDelay); +} + +void loop() { + anyrtttl::blocking::play(BUZZER_PIN, tetris); + + while(true) + { + } +} +``` + + +## Play 16 bits per note RTTTL ## + +Note that this mode requires that an RTTTL melody be already converted to 16-bits per note binary format. + +Use the `anyrtttl::blocking::play16Bits()` API for playing an RTTTL melody encoded as 16 bits per note. + +The following code shows how to use the library with 16-bits per note binary RTTTL: + +```cpp +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 + +//RTTTL 16 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +const unsigned char tetris16[] = {0x0A, 0x14, 0x12, 0x02, 0x33, 0x01, 0x03, 0x02, 0x0B, 0x02, 0x14, 0x02, 0x0C, 0x02, 0x03, 0x02, 0x33, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x29, 0x01, 0x3B, 0x01, 0x0A, 0x02, 0x1B, 0x02, 0x2A, 0x02, 0x23, 0x02, 0x1B, 0x02, 0x12, 0x02, 0x13, 0x02, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x2A, 0x01}; +const int tetris16_length = 42; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + anyrtttl::blocking::play16Bits(BUZZER_PIN, tetris16, tetris16_length); + + while(true) + { + } +} +``` + + + +## Play 10 bits per note RTTTL ## + +Note that this mode requires that an RTTTL melody be already converted to 10-bits per note binary format. + +Create a function that will be used by AnyRtttl library to read bits as required. The signature of the library must look like this: `uint16_t function_name(uint8_t numBits)`. + +Note that this code requires the [BitReader](https://github.com/end2endzone/BitReader) library to extract bits from the RTTTL binary buffer. The implementation of `readNextBits()` function delegates the job to the BitReader's `read()` method. + +In the `setup()` function, setup the external library that is used for reading bits: `bitreader.setBuffer(tetris10);`. + +Use the `anyrtttl::blocking::play10Bits()` API for playing an RTTTL melody encoded as 10 bits per note. The 3rd argument of the function requires a pointer to the function extracting bits: `&function_name`. + +The following code shows how to use the library with 10-bits per note binary RTTTL: + +```cpp +#include +#include +#include + +//The BitReader library is required for extracting 10 bit blocks from the RTTTL buffer. +//It can be installed from Arduino Library Manager or from https://github.com/end2endzone/BitReader/releases +#include + +//project's constants +#define BUZZER_PIN 8 + +//RTTTL 10 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +const unsigned char tetris10[] = {0x0A, 0x14, 0x12, 0xCE, 0x34, 0xE0, 0x82, 0x14, 0x32, 0x38, 0xE0, 0x4C, 0x2A, 0xAD, 0x34, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA5, 0xB4, 0x93, 0x82, 0x1B, 0xAA, 0x38, 0xE2, 0x86, 0x12, 0x4E, 0x38, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA9, 0x04}; +const int tetris10_length = 42; + +//bit reader support +#ifndef USE_BITADDRESS_READ_WRITE +BitReader bitreader; +#else +BitAddress bitreader; +#endif +uint16_t readNextBits(uint8_t numBits) +{ + uint16_t bits = 0; + bitreader.read(numBits, &bits); + return bits; +} + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + bitreader.setBuffer(tetris10); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + anyrtttl::blocking::play10Bits(BUZZER_PIN, tetris10_length, &readNextBits); + + while(true) + { + } +} +``` + + + +## Other ## + +More AnyRtttl examples are also available: + +* [Basic](examples/Basic/Basic.ino) +* [BlockingProgramMemoryRtttl](examples/BlockingProgramMemoryRtttl/BlockingProgramMemoryRtttl.ino) +* [BlockingRtttl](examples/BlockingRtttl/BlockingRtttl.ino) +* [BlockingWithNonBlocking](examples/BlockingWithNonBlocking/BlockingWithNonBlocking.ino) +* [NonBlockingProgramMemoryRtttl](examples/NonBlockingProgramMemoryRtttl/NonBlockingProgramMemoryRtttl.ino) +* [NonBlockingRtttl](examples/NonBlockingRtttl/NonBlockingRtttl.ino) +* [NonBlockingStopBeforeEnd](examples/NonBlockingStopBeforeEnd/NonBlockingStopBeforeEnd.ino) +* [Play10Bits](examples/Play10Bits/Play10Bits.ino) +* [Play16Bits](examples/Play16Bits/Play16Bits.ino) +* [Rtttl2Code](examples/Rtttl2Code/Rtttl2Code.ino) + + + + +# Binary RTTTL format definition # + +The following section defines the field order and size (in bits) required for encoding / decoding of each melody as binary RTTTL. + +This is actually a custom implementation of the RTTTL format. Using this format, one can achieve storing an highly compressed RTTTL melody which saves memory. + +Note that all fields definition are defined in LSB to MSB order. + +## Header ## + +The first 16 bits stores the RTTTL default section (a.k.a header) which is defined as the following: + +| Field name | Size (bits) | Range | Description | +|-------------------------|:-----------:|----------|-------------------------------------------------------------| +| Default duration index | 3 | [0, 7] | Matches the index used for `getNoteDurationFromIndex()` API | +| Default octave index | 2 | [0, 3] | Matches the index used for `getNoteOctaveFromIndex()` API. | +| Beats per minutes (BPM) | 10 | [1, 900] | | +| Padding | 1 | | | + +## Notes ## + +Next is each note's of the melody. Each note is encoded as 10 bits (or 16 bits) per note. Notes are defined as the following: + +| Field name | Size (bits) | Range | Description | +|--------------------|:-----------:|---------|--------------------------------------------------------------| +| Duration index | 3 | [0, 7] | Matches the index used for `getNoteDurationFromIndex()` API. | +| Note letter index | 3 | [0, 7] | Matches the index used for `getNoteLetterFromIndex()` API. | +| Pound | 1 | boolean | Defines if the note is pounded or not. | +| Dotted | 1 | boolean | Defines if the note is dotted or not. | +| Octave index | 2 | [0, 3] | Matches the index used for `getNoteOctaveFromIndex()` API. | +| Padding (optional) | 6 | | See description below. | + +The last field of a note (defined as `Padding`) is an optional 6 bits field. The AnyRtttl library supports both 10 bits per note and 16 bits per note definitions. Use the appropriate API for playing both format. + + + +## 10 bits per note (no padding) ## + +Each RTTTL note is encoded into 10 bits which is the minimum size of a note. This storage method is the best compression method for storing RTTTL melodies and reduces the usage of the dynamic memory to the minimum. + +However, since all notes are not aligned on multiple of 8 bits, addressing each note by an offset is impossible which makes the playback harder. Each notes must be deserialized one after the other from a buffer using blocks of 10 bits which increases the program storage space footprint. + +An external arduino library (or custom code) is required to allow AnyRtttl library to consume bits as needed. The arduino [BitReader](https://github.com/end2endzone/BitReader) library may be used for handling bit deserialization but any library that can extract a given number of bits from a buffer would work. + + + +## 16 bits per note (with padding) ## + +Each RTTTL note is encoded into 16 bits which is much better than the average 3.28 bytes per note text format. This storage method is optimum for storing RTTTL melodies and reduces the usage of the dynamic memory without increasing to much program storage space. + +All notes are aligned on 16 bits. Addressing each note by an offset allows an easy playback. Only the first 10 bits of each 16 bits block is used. The value of the padding field is undefined. + + + +## Playback ## + +The following AnyRtttl blocking APIs are available for playing both binary formats: +* 10 bits per note: `anyrtttl::blocking::play10Bits()`. +* 16 bits per note: `anyrtttl::blocking::play16Bits()`. + + + + +# Building # + +Please refer to file [INSTALL.md](INSTALL.md) for details on how installing/building the application. + + + + +# Platforms # + +AnyRtttl has been tested with the following platform: + + * Linux x86/x64 + * Windows x86/x64 + + + + +# Versioning # + +We use [Semantic Versioning 2.0.0](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/end2endzone/AnyRtttl/tags). + + + + +# Authors # + +* **Antoine Beauchamp** - *Initial work* - [end2endzone](https://github.com/end2endzone) + +See also the list of [contributors](https://github.com/end2endzone/AnyRtttl/blob/master/AUTHORS) who participated in this project. + + + + +# License # + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details diff --git a/lib/AnyRtttl/appveyor.yml b/lib/AnyRtttl/appveyor.yml new file mode 100644 index 0000000000..88c6ab9481 --- /dev/null +++ b/lib/AnyRtttl/appveyor.yml @@ -0,0 +1,81 @@ +#---------------------------------# +# general configuration # +#---------------------------------# + +# version format +version: "{branch} (#{build})" + +# branches to build +branches: + only: + - master + - /feature-issue.*/ + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# Build worker image (VM template) +image: Visual Studio 2019 + +# scripts that are called at very beginning, before repo cloning +init: + - cmd: git config --global core.autocrlf true + - ps: $env:GIT_HASH=$env:APPVEYOR_REPO_COMMIT.Substring(0, 10) + +# clone directory +clone_folder: c:\projects\AnyRtttl + +# scripts that run after cloning repository +install: +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\install_arduinocli.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_install_libraries.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\install_this.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\install_googletest.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\install_rapidassist.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\install_win32arduino.bat + +#---------------------------------# +# build configuration # +#---------------------------------# + +environment: + PlatformToolset: v142 + +# build platform, i.e. x86, x64, Any CPU. This setting is optional. +platform: Win32 + +# build Configuration, i.e. Debug, Release, etc. +configuration: Release + +build_script: +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\build_library.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\external\BitReader\ci\appveyor\arduino_library_install.bat +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat Basic +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat BlockingProgramMemoryRtttl +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat BlockingRtttl +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat BlockingWithNonBlocking +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat NonBlockingProgramMemoryRtttl +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat NonBlockingRtttl +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat NonBlockingStopBeforeEnd +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat Play10Bits +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat Play16Bits +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\arduino_build_sketch.bat Rtttl2Code + + +#---------------------------------# +# tests configuration # +#---------------------------------# + +# to run your custom scripts instead of automatic tests +test_script: +- cmd: call %APPVEYOR_BUILD_FOLDER%\ci\appveyor\test_script.bat +- ps: . "$env:APPVEYOR_BUILD_FOLDER\ci\appveyor\UploadJUnitFiles.ps1" -Path "$env:APPVEYOR_BUILD_FOLDER\build\bin" + +#---------------------------------# +# artifacts configuration # +#---------------------------------# + +artifacts: +- path: build\bin\Release\anyrtttl_unittest.release.xml + name: anyrtttl_unittest.release.xml diff --git a/lib/AnyRtttl/docs/AnyRtttl-splashscreen.png b/lib/AnyRtttl/docs/AnyRtttl-splashscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..55c5d76751500c74a001917235abc83b18002505 GIT binary patch literal 111214 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 literal 0 HcmV?d00001 diff --git a/lib/AnyRtttl/docs/AnyRtttl.xcf b/lib/AnyRtttl/docs/AnyRtttl.xcf new file mode 100644 index 0000000000000000000000000000000000000000..8f8a2b090595b9dc5346ace9ce10e44fea2cdbfc GIT binary patch literal 554290 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 literal 0 HcmV?d00001 diff --git a/lib/AnyRtttl/examples.cpp.in b/lib/AnyRtttl/examples.cpp.in new file mode 100644 index 0000000000..adbafa79be --- /dev/null +++ b/lib/AnyRtttl/examples.cpp.in @@ -0,0 +1,14 @@ +#include +#include "Arduino.h" +#include "@SOURCE_INO_FILE@" + +using namespace testarduino; + +int main(int argc, char* argv[]) +{ + printf("Calling setup()...\n"); + setup(); + + printf("Calling loop()...\n"); + loop(); +} diff --git a/lib/AnyRtttl/examples/Basic/Basic.ino b/lib/AnyRtttl/examples/Basic/Basic.ino new file mode 100644 index 0000000000..4c7ba902d6 --- /dev/null +++ b/lib/AnyRtttl/examples/Basic/Basic.ino @@ -0,0 +1,22 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + anyrtttl::blocking::play(BUZZER_PIN, tetris); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/BlockingProgramMemoryRtttl/BlockingProgramMemoryRtttl.ino b/lib/AnyRtttl/examples/BlockingProgramMemoryRtttl/BlockingProgramMemoryRtttl.ino new file mode 100644 index 0000000000..cf28266d55 --- /dev/null +++ b/lib/AnyRtttl/examples/BlockingProgramMemoryRtttl/BlockingProgramMemoryRtttl.ino @@ -0,0 +1,37 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char tetris[] PROGMEM = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char arkanoid[] PROGMEM = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char mario[] PROGMEM = "mario:d=4,o=5,b=140:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +// James Bond theme defined in inline code below (also stored in flash memory) + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println("ready"); +} + +void loop() { + anyrtttl::blocking::playProgMem(BUZZER_PIN, tetris); + delay(1000); + + anyrtttl::blocking::play_P(BUZZER_PIN, arkanoid); + delay(1000); + +#if defined(ESP8266) + anyrtttl::blocking::play(BUZZER_PIN, FPSTR(mario)); + delay(1000); +#endif + + anyrtttl::blocking::play(BUZZER_PIN, F("Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6")); + delay(1000); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/BlockingRtttl/BlockingRtttl.ino b/lib/AnyRtttl/examples/BlockingRtttl/BlockingRtttl.ino new file mode 100644 index 0000000000..6156ecdd1f --- /dev/null +++ b/lib/AnyRtttl/examples/BlockingRtttl/BlockingRtttl.ino @@ -0,0 +1,31 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char * arkanoid = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char * mario = "mario:d=4,o=5,b=140:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println("ready"); +} + +void loop() { + anyrtttl::blocking::play(BUZZER_PIN, tetris); + delay(1000); + + anyrtttl::blocking::play(BUZZER_PIN, arkanoid); + delay(1000); + + anyrtttl::blocking::play(BUZZER_PIN, mario); + delay(1000); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/BlockingWithNonBlocking/BlockingWithNonBlocking.ino b/lib/AnyRtttl/examples/BlockingWithNonBlocking/BlockingWithNonBlocking.ino new file mode 100644 index 0000000000..9f6e4d0643 --- /dev/null +++ b/lib/AnyRtttl/examples/BlockingWithNonBlocking/BlockingWithNonBlocking.ino @@ -0,0 +1,44 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char * arkanoid = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char * mario = "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + + // Play tetris and wait until done playing before jumping to the next song. + anyrtttl::nonblocking::begin(BUZZER_PIN, tetris); + while( !anyrtttl::nonblocking::done() ) + { + anyrtttl::nonblocking::play(); + } + + // Play arkanoid and loop until done playing before jumping to the next song. + anyrtttl::nonblocking::begin(BUZZER_PIN, arkanoid); + while( !anyrtttl::nonblocking::done() ) + { + anyrtttl::nonblocking::play(); + } + + // Play mario and loop until done playing before looping again. + anyrtttl::nonblocking::begin(BUZZER_PIN, mario); + while( !anyrtttl::nonblocking::done() ) + { + anyrtttl::nonblocking::play(); + } + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/ESP32Rtttl/ESP32Rtttl.ino b/lib/AnyRtttl/examples/ESP32Rtttl/ESP32Rtttl.ino new file mode 100644 index 0000000000..e5039c79fb --- /dev/null +++ b/lib/AnyRtttl/examples/ESP32Rtttl/ESP32Rtttl.ino @@ -0,0 +1,62 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char tetris[] PROGMEM = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char arkanoid[] PROGMEM = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char mario[] PROGMEM = "mario:d=4,o=5,b=140:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +// James Bond theme defined in inline code below (also stored in flash memory) + +// tone() and noTone() are not implemented for Arduino core for the ESP32 +// See https://github.com/espressif/arduino-esp32/issues/980 +// and https://github.com/espressif/arduino-esp32/issues/1720 +void esp32NoTone(uint8_t pin) { + // don't care about the given pin + ledcWrite(0, 0); // channel, volume +} + +void esp32Tone(uint8_t pin, unsigned int frq, unsigned long duration) { + // don't care about the given pin or the duration + ledcWriteTone(0, frq); // channel, freq + ledcWrite(0, 255); // channel, volume +} + +void esp32ToneSetup(uint8_t pin) { + ledcSetup(0, 1000, 10); // resolution always seems to be 10bit, no matter what is given + ledcAttachPin(pin, 0); +} + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + // setup AnyRtttl for ESP32 + esp32ToneSetup(BUZZER_PIN); + anyrtttl::setToneFunction(&esp32Tone); + anyrtttl::setNoToneFunction(&esp32NoTone); + + Serial.begin(115200); + + Serial.println("ready"); +} + +void loop() { + anyrtttl::blocking::playProgMem(BUZZER_PIN, tetris); + delay(1000); + + anyrtttl::blocking::play_P(BUZZER_PIN, arkanoid); + delay(1000); + +#if defined(ESP8266) || defined(ESP32) + anyrtttl::blocking::play(BUZZER_PIN, FPSTR(mario)); + delay(1000); +#endif + + anyrtttl::blocking::play(BUZZER_PIN, F("Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6")); + delay(1000); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/NonBlockingProgramMemoryRtttl/NonBlockingProgramMemoryRtttl.ino b/lib/AnyRtttl/examples/NonBlockingProgramMemoryRtttl/NonBlockingProgramMemoryRtttl.ino new file mode 100644 index 0000000000..fb92e1f466 --- /dev/null +++ b/lib/AnyRtttl/examples/NonBlockingProgramMemoryRtttl/NonBlockingProgramMemoryRtttl.ino @@ -0,0 +1,43 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char tetris[] PROGMEM = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char arkanoid[] PROGMEM = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char mario[] PROGMEM = "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +// James Bond theme defined in inline code below (also stored in flash memory) +byte songIndex = 0; //which song to play when the previous one finishes + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + // If we are not playing something + if ( !anyrtttl::nonblocking::isPlaying() ) + { + // Play a song based on songIndex. + if (songIndex == 0) + anyrtttl::nonblocking::beginProgMem(BUZZER_PIN, tetris); + else if (songIndex == 1) + anyrtttl::nonblocking::begin_P(BUZZER_PIN, arkanoid); +#if defined(ESP8266) + else if (songIndex == 2) + anyrtttl::nonblocking::begin(BUZZER_PIN, FPSTR(mario)); +#endif + else if (songIndex == 3) + anyrtttl::nonblocking::begin(BUZZER_PIN, F("Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6")); + + //Set songIndex ready for next song + songIndex++; + } + else + { + anyrtttl::nonblocking::play(); + } +} diff --git a/lib/AnyRtttl/examples/NonBlockingRtttl/NonBlockingRtttl.ino b/lib/AnyRtttl/examples/NonBlockingRtttl/NonBlockingRtttl.ino new file mode 100644 index 0000000000..fac679bd89 --- /dev/null +++ b/lib/AnyRtttl/examples/NonBlockingRtttl/NonBlockingRtttl.ino @@ -0,0 +1,38 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; +const char * arkanoid = "Arkanoid:d=4,o=5,b=140:8g6,16p,16g.6,2a#6,32p,8a6,8g6,8f6,8a6,2g6"; +const char * mario = "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"; +byte songIndex = 0; //which song to play when the previous one finishes + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + // If we are not playing something + if ( !anyrtttl::nonblocking::isPlaying() ) + { + // Play a song based on songIndex. + if (songIndex == 0) + anyrtttl::nonblocking::begin(BUZZER_PIN, tetris); + else if (songIndex == 1) + anyrtttl::nonblocking::begin(BUZZER_PIN, arkanoid); + else if (songIndex == 2) + anyrtttl::nonblocking::begin(BUZZER_PIN, mario); + + //Set songIndex ready for next song + songIndex++; + } + else + { + anyrtttl::nonblocking::play(); + } +} diff --git a/lib/AnyRtttl/examples/NonBlockingStopBeforeEnd/NonBlockingStopBeforeEnd.ino b/lib/AnyRtttl/examples/NonBlockingStopBeforeEnd/NonBlockingStopBeforeEnd.ino new file mode 100644 index 0000000000..7cffd2c93f --- /dev/null +++ b/lib/AnyRtttl/examples/NonBlockingStopBeforeEnd/NonBlockingStopBeforeEnd.ino @@ -0,0 +1,42 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; + +unsigned long playStart = 0; +bool firstPass = true; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + if (firstPass) { + anyrtttl::nonblocking::begin(BUZZER_PIN, tetris); + + //remember when we started playing the song + playStart = millis(); + + firstPass = false; + } + + //if we are playing something + if ( anyrtttl::nonblocking::isPlaying() ) { + + //does the melody been playing for more than 5 seconds ? + if ( millis() - playStart > 5000 ) + { + anyrtttl::nonblocking::stop(); + } + } + + //if anything available for playing, play it + anyrtttl::nonblocking::play(); + +} diff --git a/lib/AnyRtttl/examples/Play10Bits/Play10Bits.ino b/lib/AnyRtttl/examples/Play10Bits/Play10Bits.ino new file mode 100644 index 0000000000..841ee7cc75 --- /dev/null +++ b/lib/AnyRtttl/examples/Play10Bits/Play10Bits.ino @@ -0,0 +1,44 @@ +#include +#include +#include + +//The BitReader library is required for extracting 10 bit blocks from the RTTTL buffer. +//It can be installed from Arduino Library Manager or from https://github.com/end2endzone/BitReader/releases +#include + +//project's constants +#define BUZZER_PIN 8 + +//RTTTL 10 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +const unsigned char tetris10[] = {0x0A, 0x14, 0x12, 0xCE, 0x34, 0xE0, 0x82, 0x14, 0x32, 0x38, 0xE0, 0x4C, 0x2A, 0xAD, 0x34, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA5, 0xB4, 0x93, 0x82, 0x1B, 0xAA, 0x38, 0xE2, 0x86, 0x12, 0x4E, 0x38, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA9, 0x04}; +const int tetris10_length = 42; + +//bit reader support +#ifndef USE_BITADDRESS_READ_WRITE +BitReader bitreader; +#else +BitAddress bitreader; +#endif +uint16_t readNextBits(uint8_t numBits) +{ + uint16_t bits = 0; + bitreader.read(numBits, &bits); + return bits; +} + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + bitreader.setBuffer(tetris10); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + anyrtttl::blocking::play10Bits(BUZZER_PIN, tetris10_length, &readNextBits); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/Play16Bits/Play16Bits.ino b/lib/AnyRtttl/examples/Play16Bits/Play16Bits.ino new file mode 100644 index 0000000000..ad18800e40 --- /dev/null +++ b/lib/AnyRtttl/examples/Play16Bits/Play16Bits.ino @@ -0,0 +1,25 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 + +//RTTTL 16 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +const unsigned char tetris16[] = {0x0A, 0x14, 0x12, 0x02, 0x33, 0x01, 0x03, 0x02, 0x0B, 0x02, 0x14, 0x02, 0x0C, 0x02, 0x03, 0x02, 0x33, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x29, 0x01, 0x3B, 0x01, 0x0A, 0x02, 0x1B, 0x02, 0x2A, 0x02, 0x23, 0x02, 0x1B, 0x02, 0x12, 0x02, 0x13, 0x02, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x2A, 0x01}; +const int tetris16_length = 42; + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); +} + +void loop() { + anyrtttl::blocking::play16Bits(BUZZER_PIN, tetris16, tetris16_length); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/examples/Rtttl2Code/Rtttl2Code.ino b/lib/AnyRtttl/examples/Rtttl2Code/Rtttl2Code.ino new file mode 100644 index 0000000000..afb3c30510 --- /dev/null +++ b/lib/AnyRtttl/examples/Rtttl2Code/Rtttl2Code.ino @@ -0,0 +1,52 @@ +#include +#include +#include + +//project's constants +#define BUZZER_PIN 8 +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; + +//******************************************************************************************************************* +// The following replacement functions prints the function call & parameters to the serial port. +//******************************************************************************************************************* +void serialTone(uint8_t pin, unsigned int frequency, unsigned long duration) { + Serial.print("tone("); + Serial.print(pin); + Serial.print(","); + Serial.print(frequency); + Serial.print(","); + Serial.print(duration); + Serial.println(");"); +} + +void serialNoTone(uint8_t pin) { + Serial.print("noTone("); + Serial.print(pin); + Serial.println(");"); +} + +void serialDelay(unsigned long duration) { + Serial.print("delay("); + Serial.print(duration); + Serial.println(");"); +} + +void setup() { + pinMode(BUZZER_PIN, OUTPUT); + + Serial.begin(115200); + Serial.println(); + + //Use custom functions + anyrtttl::setToneFunction(&serialTone); + anyrtttl::setNoToneFunction(&serialNoTone); + anyrtttl::setDelayFunction(&serialDelay); +} + +void loop() { + anyrtttl::blocking::play(BUZZER_PIN, tetris); + + while(true) + { + } +} diff --git a/lib/AnyRtttl/keywords.txt b/lib/AnyRtttl/keywords.txt new file mode 100644 index 0000000000..d327e0eda1 --- /dev/null +++ b/lib/AnyRtttl/keywords.txt @@ -0,0 +1,16 @@ +anyrtttl KEYWORD1 +play16Bits KEYWORD2 +play10Bits KEYWORD2 +begin KEYWORD2 +beginProgMem KEYWORD2 +begin_P KEYWORD2 +play KEYWORD2 +playProgMem KEYWORD2 +play_P KEYWORD2 +stop KEYWORD2 +isPlaying KEYWORD2 +done KEYWORD2 +setToneFunction KEYWORD2 +setNoToneFunction KEYWORD2 +setDelayFunction KEYWORD2 +setMillisFunction KEYWORD2 diff --git a/lib/AnyRtttl/library.properties b/lib/AnyRtttl/library.properties new file mode 100644 index 0000000000..f8c77a30a6 --- /dev/null +++ b/lib/AnyRtttl/library.properties @@ -0,0 +1,9 @@ +name=AnyRtttl +version=2.3 +author=Antoine Beauchamp +maintainer=Antoine Beauchamp +sentence=A feature rich arduino library for playing rtttl melodies. +paragraph=The AnyRtttl is a feature rich library which supports all best RTTTL features: Blocking & Non-Blocking modes, custom tone(), delay() and millis() functions, PROGMEM support, and much more. +category=Other +url=https://github.com/end2endzone/AnyRtttl +architectures=* diff --git a/lib/AnyRtttl/src/anyrtttl.cpp b/lib/AnyRtttl/src/anyrtttl.cpp new file mode 100644 index 0000000000..584e968795 --- /dev/null +++ b/lib/AnyRtttl/src/anyrtttl.cpp @@ -0,0 +1,672 @@ +// --------------------------------------------------------------------------- +// AUTHOR/LICENSE: +// The following code was written by Antoine Beauchamp. For other authors, see AUTHORS file. +// The code & updates for the library can be found at https://github.com/end2endzone/AnyRtttl +// MIT License: http://www.opensource.org/licenses/mit-license.php +// --------------------------------------------------------------------------- +#include "Arduino.h" +#include "anyrtttl.h" +#include "binrtttl.h" + +/********************************************************* + * RTTTL Library data + *********************************************************/ + +namespace anyrtttl +{ + +const uint16_t notes[] = { NOTE_SILENT, +NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4, +NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5, +NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6, +NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7 +}; + +#define isdigit(n) (n >= '0' && n <= '9') +typedef uint16_t TONE_DURATION; +static const byte NOTES_PER_OCTAVE = 12; + +const char * buffer = ""; +ReadCharFuncPtr readCharFunc = &readChar; +int bufferIndex = -32760; +byte default_dur = 4; +byte default_oct = 5; +RTTTL_BPM bpm = 63; +RTTTL_DURATION wholenote; +byte pin = -1; +unsigned long delayToNextNote = 0; //milliseconds before playing the next note +bool playing = false; +TONE_DURATION duration; +byte noteOffset; +RTTTL_OCTAVE_VALUE scale; +int tmpNumber; + +const char * readNumber(const char * iBuffer, int & oValue, ReadCharFuncPtr iReadCharFunc) +{ + oValue = 0; + while(isdigit(iReadCharFunc(iBuffer))) + { + oValue = (oValue * 10) + (readCharFunc(iBuffer) - '0'); + iBuffer++; + } + return iBuffer; +} + +void serialPrint(const char * iBuffer, ReadCharFuncPtr iReadCharFunc) +{ + char c = readCharFunc(iBuffer); + while(c) { + Serial.print(c); + iBuffer++; + c = readCharFunc(iBuffer); + } +} + +/**************************************************************************** + * Custom functions + ****************************************************************************/ + +ToneFuncPtr _tone = &tone; +NoToneFuncPtr _noTone = &noTone; +DelayFuncPtr _delay = &delay; +MillisFuncPtr _millis = &millis; + +void setToneFunction(ToneFuncPtr iFunc) { + _tone = iFunc; +} + +void setNoToneFunction(NoToneFuncPtr iFunc) { + _noTone = iFunc; +} + +void setDelayFunction(DelayFuncPtr iFunc) { + _delay = iFunc; +} + +void setMillisFunction(MillisFuncPtr iFunc) { + _millis = iFunc; +} + +char readChar(const char * iBuffer) { + return *iBuffer; +} + +char readChar_P(const char * iBuffer) { + return pgm_read_byte_near(iBuffer); +} + + + +/**************************************************************************** + * Blocking API + ****************************************************************************/ +namespace blocking +{ + +void play(byte iPin, const char * iBuffer, ReadCharFuncPtr iReadCharFunc) { + // Absolutely no error checking in here + + default_dur = 4; + default_oct = 6; + bpm = 63; + buffer = iBuffer; + readCharFunc = iReadCharFunc; + + #ifdef ANY_RTTTL_DEBUG + Serial.print("playing: "); + serialPrint(buffer, readCharFunc); + Serial.println(); + #endif + + // format: d=N,o=N,b=NNN: + // find the start (skip name, etc) + + while(readCharFunc(buffer) != ':') buffer++; // ignore name + buffer++; // skip ':' + + // get default duration + if(readCharFunc(buffer) == 'd') + { + buffer++; buffer++; // skip "d=" + buffer = readNumber(buffer, tmpNumber, readCharFunc); + if(tmpNumber > 0) + default_dur = tmpNumber; + buffer++; // skip comma + } + + #ifdef ANY_RTTTL_INFO + Serial.print("ddur: "); Serial.println(default_dur, 10); + #endif + + // get default octave + if(readCharFunc(buffer) == 'o') + { + buffer++; buffer++; // skip "o=" + buffer = readNumber(buffer, tmpNumber, readCharFunc); + if(tmpNumber >= 3 && tmpNumber <= 7) + default_oct = tmpNumber; + buffer++; // skip comma + } + + #ifdef ANY_RTTTL_INFO + Serial.print("doct: "); Serial.println(default_oct, 10); + #endif + + // get BPM + if(readCharFunc(buffer) == 'b') + { + buffer++; buffer++; // skip "b=" + buffer = readNumber(buffer, tmpNumber, readCharFunc); + bpm = tmpNumber; + buffer++; // skip colon + } + + #ifdef ANY_RTTTL_INFO + Serial.print("bpm: "); Serial.println(bpm, 10); + #endif + + // BPM usually expresses the number of quarter notes per minute + wholenote = (60 * 1000L / bpm) * 4; // this is the time for whole noteOffset (in milliseconds) + + #ifdef ANY_RTTTL_INFO + Serial.print("wn: "); Serial.println(wholenote, 10); + #endif + + // now begin note loop + while(readCharFunc(buffer)) + { + // first, get note duration, if available + buffer = readNumber(buffer, tmpNumber, readCharFunc); + + if(tmpNumber) + duration = wholenote / tmpNumber; + else + duration = wholenote / default_dur; // we will need to check if we are a dotted noteOffset after + + // now get the note + noteOffset = getNoteOffsetFromLetter(readCharFunc(buffer)); + buffer++; + + // now, get optional '#' sharp + if(readCharFunc(buffer) == '#') + { + noteOffset++; + buffer++; + } + + // now, get optional '.' dotted note + if(readCharFunc(buffer) == '.') + { + duration += duration/2; + buffer++; + } + + // now, get scale + if(isdigit(readCharFunc(buffer))) + { + scale = readCharFunc(buffer) - '0'; + buffer++; + } + else + { + scale = default_oct; + } + + if(readCharFunc(buffer) == ',') + buffer++; // skip comma for next note (or we may be at the end) + + // now play the note + if(noteOffset) + { + uint16_t frequency = notes[(scale - 4) * NOTES_PER_OCTAVE + noteOffset]; + + #ifdef ANY_RTTTL_INFO + Serial.print("Playing: "); + Serial.print(scale, 10); Serial.print(' '); + Serial.print(noteOffset, 10); Serial.print(" ("); + Serial.print(frequency, 10); + Serial.print(") "); + Serial.println(duration, 10); + #endif + + _tone(iPin, frequency, duration); + _delay(duration+1); + _noTone(iPin); + } + else + { + #ifdef ANY_RTTTL_INFO + Serial.print("Pausing: "); + Serial.println(duration, 10); + #endif + _delay(duration); + } + } +} + +void play(byte iPin, const char * iBuffer) { play(iPin, iBuffer, &readChar); } + +void play(byte iPin, const __FlashStringHelper* str) { play(iPin, (const char *)str, &readChar_P); } +void playProgMem(byte iPin, const char * iBuffer) { play(iPin, iBuffer, &readChar_P); } +void play_P(byte iPin, const char * iBuffer) { play(iPin, iBuffer, &readChar_P); } +void play_P(byte iPin, const __FlashStringHelper* str) { play(iPin, (const char *)str, &readChar_P); } + +void play16Bits(int iPin, const unsigned char * iBuffer, int iNumNotes) { + // Absolutely no error checking in here + + RTTTL_DEFAULT_VALUE_SECTION * defaultSection = (RTTTL_DEFAULT_VALUE_SECTION *)iBuffer; + RTTTL_NOTE * notesBuffer = (RTTTL_NOTE *)iBuffer; + + bpm = defaultSection->bpm; + + #ifdef ANY_RTTTL_DEBUG + Serial.print("numNotes="); + Serial.println(iNumNotes); + // format: d=N,o=N,b=NNN: + Serial.print("d="); + Serial.print(getNoteDurationFromIndex(defaultSection->durationIdx)); + Serial.print(",o="); + Serial.print(getNoteOctaveFromIndex(defaultSection->octaveIdx)); + Serial.print(",b="); + Serial.println(bpm); + #endif + + // BPM usually expresses the number of quarter notes per minute + wholenote = (60 * 1000L / bpm) * 4; // this is the time for whole noteOffset (in milliseconds) + + // now begin note loop + for(int i=0; i= 0 && iIndex < gNoteLettersCount) + return gNoteLetters[iIndex]; + return -1; +} + +uint16_t getNoteLettersCount() +{ + return gNoteLettersCount; +} + +NOTE_LETTER_INDEX findNoteLetterIndex(RTTTL_NOTE_LETTER n) +{ + for(NOTE_LETTER_INDEX i=0; i= 0 && iIndex < gNoteLettersCount) + return gNoteOffsets[iIndex]; + return 0; +} + +int getNoteOffsetFromLetter(RTTTL_NOTE_LETTER n) +{ + NOTE_LETTER_INDEX index = findNoteLetterIndex(n); + return getNoteOffsetFromLetterIndex(index); +} + +RTTTL_DURATION getNoteDurationFromIndex(DURATION_INDEX iIndex) +{ + if (iIndex >= 0 && iIndex < gNoteDurationsCount) + return gNoteDurations[iIndex]; + return -1; +} + +uint16_t getNoteDurationsCount() +{ + return gNoteDurationsCount; +} + +DURATION_INDEX findNoteDurationIndex(RTTTL_DURATION n) +{ + for(DURATION_INDEX i=0; i= 0 && iIndex < gNoteOctavesCount) + return gNoteOctaves[iIndex]; + return -1; +} + +uint16_t getNoteOctavesCount() +{ + return gNoteOctavesCount; +} + +OCTAVE_INDEX findNoteOctaveIndex(RTTTL_OCTAVE_VALUE n) +{ + for(OCTAVE_INDEX i=0; i= 0 && iIndex < gNoteBpmsCount) + return gNoteBpms[iIndex]; + return -1; +} + +uint16_t getBpmsCount() +{ + return gNoteBpmsCount; +} + +BPM_INDEX findBpmIndex(RTTTL_BPM n) +{ + for(BPM_INDEX i=0; i +#include + +#include "TestAnyRtttl.h" +#include "Arduino.h" +#include "anyrtttl.h" +#include "bitreader.h" + +#include "rapidassist/strings.h" +#include "rapidassist/testing.h" +#include "rapidassist/filesystem.h" + +#include "IncrementalClockStrategy.h" + +using namespace testarduino; + +//rtttl native format +const char * tetris = "tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a"; + +//RTTTL 10 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +//Compatible with AnyRtttl library v2.0 +//The code & updates for the AnyRtttl library can be found on http://end2endzone.com +const unsigned char tetris10[] = {0x0A, 0x14, 0x12, 0xCE, 0x34, 0xE0, 0x82, 0x14, 0x32, 0x38, 0xE0, 0x4C, 0x2A, 0xAD, 0x34, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA5, 0xB4, 0x93, 0x82, 0x1B, 0xAA, 0x38, 0xE2, 0x86, 0x12, 0x4E, 0x38, 0xA0, 0x84, 0x0B, 0x0E, 0x28, 0xD3, 0x4C, 0x03, 0x2A, 0x28, 0xA1, 0x80, 0x2A, 0xA9, 0x04}; +const int tetris10_length = 42; + +//RTTTL 16 bits binary format for the following: tetris:d=4,o=5,b=160:e6,8b,8c6,8d6,16e6,16d6,8c6,8b,a,8a,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,2a,8p,d6,8f6,a6,8g6,8f6,e6,8e6,8c6,e6,8d6,8c6,b,8b,8c6,d6,e6,c6,a,a +//Compatible with AnyRtttl library v2.0 +//The code & updates for the AnyRtttl library can be found on http://end2endzone.com +const unsigned char tetris16[] = {0x0A, 0x14, 0x12, 0x02, 0x33, 0x01, 0x03, 0x02, 0x0B, 0x02, 0x14, 0x02, 0x0C, 0x02, 0x03, 0x02, 0x33, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x29, 0x01, 0x3B, 0x01, 0x0A, 0x02, 0x1B, 0x02, 0x2A, 0x02, 0x23, 0x02, 0x1B, 0x02, 0x12, 0x02, 0x13, 0x02, 0x03, 0x02, 0x12, 0x02, 0x0B, 0x02, 0x03, 0x02, 0x32, 0x01, 0x33, 0x01, 0x03, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x02, 0x02, 0x2A, 0x01, 0x2A, 0x01}; +const int tetris16_length = 42; + + +#define PIEZO_PIN 99 + +namespace arduino { namespace test +{ + + //bit reader support + #ifndef USE_BITADDRESS_READ_WRITE + BitReader bitreader; + #else + BitAddress bitreader; + #endif + uint16_t readNextBits(uint8_t numBits) + { + uint16_t bits = 0; + bitreader.read(numBits, &bits); + return bits; + } + + void filterToneFunctions(ra::strings::StringVector & calls) + { + ra::strings::StringVector copy = calls; + calls.clear(); + + for(size_t i=0; icurrent_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + //play the actual content + anyrtttl::nonblocking::begin(PIEZO_PIN, tetris); + while( !anyrtttl::nonblocking::done() ) + { + anyrtttl::nonblocking::play(); + } + + //assert + + //load both files into memory + ra::strings::StringVector expectedCalls; + ASSERT_TRUE (ra::testing::GetTextFileContent("expected_call_stack.log", expectedCalls)); + ra::strings::StringVector actualCalls; + ASSERT_TRUE (ra::testing::GetTextFileContent(logFile.c_str(), actualCalls)); + + //assert that file ends with a noTone(); + std::string lastCall = actualCalls[actualCalls.size()-1]; + ASSERT_NE(lastCall.find("noTone("), std::string::npos); + + //compare tone() function calls with the "blocking" template + //file since its the only common thing betwwen blocking and + //non-blocking api. + + //filter out anything that is not tone(...) + filterToneFunctions(expectedCalls); + filterToneFunctions(actualCalls); + + ASSERT_EQ( expectedCalls.size(), actualCalls.size() ); + for(size_t i=0; icurrent_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + anyrtttl::nonblocking::begin(PIEZO_PIN, tetris); + + //play for 5 sec then stop. + //note: this is a blocking code section + //use to demonstrate the use of stop() + unsigned long start = millis(); + while( millis() - start < 5000 ) + { + anyrtttl::nonblocking::play(); + } + anyrtttl::nonblocking::stop(); + + //assert + + //load output file into memory + ra::strings::StringVector actualCalls; + ASSERT_TRUE (ra::testing::GetTextFileContent(logFile.c_str(), actualCalls)); + + //assert that file ends with a noTone(); + std::string lastCall = actualCalls[actualCalls.size()-1]; + ASSERT_NE(lastCall.find("noTone("), std::string::npos); + } + //-------------------------------------------------------------------------------------------------- + TEST_F(TestAnyRtttl, testBlockingPlay) + { + //setup log file + std::string logFile = std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + //play the actual content + anyrtttl::blocking::play(PIEZO_PIN, tetris); + + //assert + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\n", "") ); + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\r\n", "") ); //windows + std::string diffReason; + bool fileAreIdentical = ra::testing::IsFileEquals("expected_call_stack.log", logFile.c_str(), diffReason, 1); + ASSERT_TRUE( fileAreIdentical ) << diffReason.c_str(); + } + //-------------------------------------------------------------------------------------------------- + TEST_F(TestAnyRtttl, testBlockingPlay10) + { + //setup log file + std::string logFile = std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + //play the actual content + bitreader.setBuffer(tetris10); + anyrtttl::blocking::play10Bits(PIEZO_PIN, tetris10_length, &readNextBits); + + //assert + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\n", "") ); + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\r\n", "") ); //windows + std::string diffReason; + bool fileAreIdentical = ra::testing::IsFileEquals("expected_call_stack.log", logFile.c_str(), diffReason, 1); + ASSERT_TRUE( fileAreIdentical ) << diffReason.c_str(); + } + //-------------------------------------------------------------------------------------------------- + TEST_F(TestAnyRtttl, testBlockingPlay16) + { + //setup log file + std::string logFile = std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + //play the actual content + anyrtttl::blocking::play16Bits(PIEZO_PIN, tetris16, tetris16_length); + + //assert + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\n", "") ); + ASSERT_TRUE( fileContentReplace(logFile.c_str(), "millis();\r\n", "") ); //windows + std::string diffReason; + bool fileAreIdentical = ra::testing::IsFileEquals("expected_call_stack.log", logFile.c_str(), diffReason, 1); + ASSERT_TRUE( fileAreIdentical ) << diffReason.c_str(); + } + //-------------------------------------------------------------------------------------------------- + static int toneCounts = 0; + static int noToneCounts = 0; + static int delayCounts = 0; + void myToneFunc(uint8_t pin, unsigned int frequency, unsigned long duration) + { + toneCounts++; + } + void myNoToneFunc(uint8_t pin) + { + noToneCounts++; + } + void myDelayFunc(unsigned long duration) + { + delayCounts++; + } + + TEST_F(TestAnyRtttl, testCustomFunctionsPlay) + { + //setup log file + std::string logFile = std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()) + ".log"; + testarduino::setLogFile(logFile.c_str()); + + toneCounts = 0; + noToneCounts = 0; + delayCounts = 0; + + //use test's custom functions + anyrtttl::setToneFunction(&myToneFunc); + anyrtttl::setNoToneFunction(&myNoToneFunc); + anyrtttl::setDelayFunction(&myDelayFunc); + + //play the actual content + anyrtttl::blocking::play(PIEZO_PIN, tetris); + + //back to native arduino functions + anyrtttl::setToneFunction(&tone); + anyrtttl::setNoToneFunction(&noTone); + anyrtttl::setDelayFunction(&delay); + + //assert + ASSERT_GT( toneCounts , 0 ); + ASSERT_GT( noToneCounts, 0 ); + ASSERT_GT( delayCounts , 0 ); + } + //-------------------------------------------------------------------------------------------------- +} // End namespace test +} // End namespace arduino diff --git a/lib/AnyRtttl/test/TestAnyRtttl.h b/lib/AnyRtttl/test/TestAnyRtttl.h new file mode 100644 index 0000000000..8fdd41183a --- /dev/null +++ b/lib/AnyRtttl/test/TestAnyRtttl.h @@ -0,0 +1,25 @@ +// --------------------------------------------------------------------------- +// AUTHOR/LICENSE: +// The following code was written by Antoine Beauchamp. For other authors, see AUTHORS file. +// The code & updates for the library can be found at https://github.com/end2endzone/AnyRtttl +// MIT License: http://www.opensource.org/licenses/mit-license.php +// --------------------------------------------------------------------------- + +#ifndef TEST_RTTTL_H +#define TEST_RTTTL_H + +#include + +namespace arduino { namespace test +{ + class TestAnyRtttl : public ::testing::Test + { + public: + virtual void SetUp(); + virtual void TearDown(); + }; + +} // End namespace test +} // End namespace arduino + +#endif // TEST_RTTTL_H diff --git a/lib/AnyRtttl/test/expected_call_stack.log b/lib/AnyRtttl/test/expected_call_stack.log new file mode 100644 index 0000000000..5fc4e6e92a --- /dev/null +++ b/lib/AnyRtttl/test/expected_call_stack.log @@ -0,0 +1,124 @@ +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,988,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,1175,187); +delay(188); +noTone(99); +tone(99,1319,93); +delay(94); +noTone(99); +tone(99,1175,93); +delay(94); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,988,187); +delay(188); +noTone(99); +tone(99,880,375); +delay(376); +noTone(99); +tone(99,880,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,1175,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,988,375); +delay(376); +noTone(99); +tone(99,988,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,1175,375); +delay(376); +noTone(99); +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,1047,375); +delay(376); +noTone(99); +tone(99,880,375); +delay(376); +noTone(99); +tone(99,880,750); +delay(751); +noTone(99); +delay(187); +tone(99,1175,375); +delay(376); +noTone(99); +tone(99,1397,187); +delay(188); +noTone(99); +tone(99,1760,375); +delay(376); +noTone(99); +tone(99,1568,187); +delay(188); +noTone(99); +tone(99,1397,187); +delay(188); +noTone(99); +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,1319,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,1175,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,988,375); +delay(376); +noTone(99); +tone(99,988,187); +delay(188); +noTone(99); +tone(99,1047,187); +delay(188); +noTone(99); +tone(99,1175,375); +delay(376); +noTone(99); +tone(99,1319,375); +delay(376); +noTone(99); +tone(99,1047,375); +delay(376); +noTone(99); +tone(99,880,375); +delay(376); +noTone(99); +tone(99,880,375); +delay(376); +noTone(99); diff --git a/lib/AnyRtttl/test/main.cpp b/lib/AnyRtttl/test/main.cpp new file mode 100644 index 0000000000..c3b44b2c8d --- /dev/null +++ b/lib/AnyRtttl/test/main.cpp @@ -0,0 +1,26 @@ +// --------------------------------------------------------------------------- +// AUTHOR/LICENSE: +// The following code was written by Antoine Beauchamp. For other authors, see AUTHORS file. +// The code & updates for the library can be found at https://github.com/end2endzone/AnyRtttl +// MIT License: http://www.opensource.org/licenses/mit-license.php +// --------------------------------------------------------------------------- + +#include +#include +#include "rapidassist/environment.h" + +int main(int argc, char **argv) +{ + //define default values for xml output report + if (ra::environment::IsConfigurationDebug()) + ::testing::GTEST_FLAG(output) = "xml:anyrtttl_unittest.debug.xml"; + else + ::testing::GTEST_FLAG(output) = "xml:anyrtttl_unittest.release.xml"; + + ::testing::GTEST_FLAG(filter) = "*"; + ::testing::InitGoogleTest(&argc, argv); + + int wResult = RUN_ALL_TESTS(); //Find and run all tests + + return wResult; // returns 0 if all the tests are successful, or 1 otherwise +} diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index 668314e055..836ceea3c0 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -2851,6 +2851,15 @@ To create/register a plugin, you have to : #undef FEATURE_RTTTL #define FEATURE_RTTTL 1 #endif +#if FEATURE_RTTTL && !defined(FEATURE_ANYRTTTL_LIB) //&& defined(ESP32) + #define FEATURE_ANYRTTTL_LIB 1 // Enable AnyRtttl library for ESP32 builds +#endif +#ifndef FEATURE_ANYRTTTL_LIB + #define FEATURE_ANYRTTTL_LIB 0 +#endif +#ifndef FEATURE_ANYRTTTL_ASYNC + #define FEATURE_ANYRTTTL_ASYNC 1 // Use Async by default for better (non-blocking) behavior +#endif #ifndef FEATURE_SD #define FEATURE_SD 0 diff --git a/src/src/ESPEasyCore/ESPEasy_backgroundtasks.cpp b/src/src/ESPEasyCore/ESPEasy_backgroundtasks.cpp index 80d6c64c2b..1ad7a88cea 100644 --- a/src/src/ESPEasyCore/ESPEasy_backgroundtasks.cpp +++ b/src/src/ESPEasyCore/ESPEasy_backgroundtasks.cpp @@ -9,6 +9,9 @@ #include "../Globals/NetworkState.h" #include "../Globals/Services.h" #include "../Globals/Settings.h" +#if FEATURE_RTTTL && FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC +#include "../Helpers/Audio.h" +#endif // if FEATURE_RTTTL && FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC #include "../Helpers/ESPEasy_time_calc.h" #include "../Helpers/Network.h" #include "../Helpers/Networking.h" @@ -121,6 +124,10 @@ void backgroundtasks() delay(0); + #if FEATURE_RTTTL && FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC + update_rtttl(); + #endif // if FEATURE_RTTTL && FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC + statusLED(false); runningBackgroundTasks = false; diff --git a/src/src/Helpers/Audio.cpp b/src/src/Helpers/Audio.cpp index a7b3c6c831..1d4efee130 100644 --- a/src/src/Helpers/Audio.cpp +++ b/src/src/Helpers/Audio.cpp @@ -1,5 +1,6 @@ #include "../Helpers/Audio.h" +#include "../ESPEasyCore/ESPEasyGPIO.h" #include "../Globals/RamTracker.h" #include "../Helpers/Hardware.h" @@ -8,58 +9,100 @@ Generate a tone of specified frequency on pin \*********************************************************************************************/ bool tone_espEasy(int8_t _pin, unsigned int frequency, unsigned long duration) { - if (_pin<0) return false; + if (!validGpio(_pin)) return false; // Duty cycle can be used as some kind of volume. - if (!set_Gpio_PWM_pct(_pin, 50, frequency)) return false; + if (!set_Gpio_PWM_pct(_pin, 50, frequency)) { return false; } + if (duration > 0) { delay(duration); return set_Gpio_PWM(_pin, 0, frequency); } return true; - } /********************************************************************************************\ Play RTTTL string on specified pin \*********************************************************************************************/ #if FEATURE_RTTTL +# if FEATURE_ANYRTTTL_LIB +# include +# include + +bool play_rtttl(int8_t _pin, const char *p) { + if (!validGpio(_pin)) { return false; } + + // addLog(LOG_LEVEL_INFO, F("RTTTL: Using AnyRtttl")); + + # ifndef BUILD_NO_RAM_TRACKER + checkRAM(F("play_rtttl")); + # endif // ifndef BUILD_NO_RAM_TRACKER + + anyrtttl::setNoToneFunction(&setInternalGPIOPullupMode); + # if FEATURE_ANYRTTTL_ASYNC + + if (anyrtttl::nonblocking::isPlaying()) { // If currently playing, cancel that + addLog(LOG_LEVEL_INFO, F("RTTTL: Cancelling running song...")); + anyrtttl::nonblocking::stop(); + } + anyrtttl::nonblocking::begin(_pin, p); + anyrtttl::nonblocking::play(); + # else // if FEATURE_ANYRTTTL_ASYNC + anyrtttl::blocking::play(_pin, p); + # endif // if FEATURE_ANYRTTTL_ASYNC + # ifndef BUILD_NO_RAM_TRACKER + checkRAM(F("play_rtttl2")); + # endif // ifndef BUILD_NO_RAM_TRACKER + return true; +} + +void update_rtttl() { + # if FEATURE_ANYRTTTL_ASYNC + + if (anyrtttl::nonblocking::isPlaying()) { + anyrtttl::nonblocking::play(); + } + # endif // if FEATURE_ANYRTTTL_ASYNC +} + +# else // if FEATURE_ANYRTTTL_LIB bool play_rtttl(int8_t _pin, const char *p) { - if (_pin<0) return false; - - #ifndef BUILD_NO_RAM_TRACKER + if (!validGpio(_pin)) { return false; } + + # ifndef BUILD_NO_RAM_TRACKER checkRAM(F("play_rtttl")); - #endif - #define OCTAVE_OFFSET 0 + # endif // ifndef BUILD_NO_RAM_TRACKER + # define OCTAVE_OFFSET 0 // FIXME: Absolutely no error checking in here const int notes[] = { 0, - 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, - 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988, - 1047,1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976, - 2093,2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951 + 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, + 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988, + 1047,1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976, + 2093,2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951 }; uint8_t default_dur = 4; uint8_t default_oct = 6; - int bpm = 63; - int num; - long wholenote; - long duration; + int bpm = 63; + int num; + long wholenote; + long duration; uint8_t note; uint8_t scale; // format: d=N,o=N,b=NNN: // find the start (skip name, etc) - while (*p != ':') { + while (*p != ':') { p++; // ignore name - if (*p == 0) return false; + + if (*p == 0) { return false; } } - p++; // skip ':' + p++; // skip ':' // get default duration if (*p == 'd') @@ -191,9 +234,12 @@ bool play_rtttl(int8_t _pin, const char *p) delay(duration / 10); } } - #ifndef BUILD_NO_RAM_TRACKER + setInternalGPIOPullupMode(_pin); // Turn off sound, Arduino _noTone() doesn't do that reliably + # ifndef BUILD_NO_RAM_TRACKER checkRAM(F("play_rtttl2")); - #endif + # endif // ifndef BUILD_NO_RAM_TRACKER return true; } + +# endif // if FEATURE_ANYRTTTL_LIB #endif // if FEATURE_RTTTL diff --git a/src/src/Helpers/Audio.h b/src/src/Helpers/Audio.h index 297179d3d6..e4be1a869b 100644 --- a/src/src/Helpers/Audio.h +++ b/src/src/Helpers/Audio.h @@ -7,7 +7,7 @@ /********************************************************************************************\ Generate a tone of specified frequency on pin \*********************************************************************************************/ -bool tone_espEasy(int8_t _pin, +bool tone_espEasy(int8_t _pin, unsigned int frequency, unsigned long duration); @@ -15,9 +15,12 @@ bool tone_espEasy(int8_t _pin, Play RTTTL string on specified pin \*********************************************************************************************/ #if FEATURE_RTTTL -bool play_rtttl(int8_t _pin, +bool play_rtttl(int8_t _pin, const char *p); +# if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC +void update_rtttl(); +# endif // if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC #endif // if FEATURE_RTTTL -#endif \ No newline at end of file +#endif // ifndef HELPERS_AUDIO_H From c3ea63f51018bd802b21d86a8183866509bc6e9b Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Fri, 15 Sep 2023 21:56:06 +0200 Subject: [PATCH 2/8] [RTTTL] update documentation --- docs/source/Plugin/P001_commands_RTTTL.repl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/Plugin/P001_commands_RTTTL.repl b/docs/source/Plugin/P001_commands_RTTTL.repl index 6fc613a9e2..7b2e0ef9d9 100644 --- a/docs/source/Plugin/P001_commands_RTTTL.repl +++ b/docs/source/Plugin/P001_commands_RTTTL.repl @@ -43,4 +43,10 @@ Supported hardware: |P000_usedby_RTTTL| (Ringtones etc.) ``rtttl,14,test:d=8,o=5,b=180,c6,b,c6,p,g,g-`` `More RTTTL Ringtone Downloads `_ + + Since 2023-09-15: + + The ``rtttl`` command, by default, now uses the `AnyRtttl library `_, allowing asynchronous handling of the command. This has the advantage of being non-blocking, allowing ESPEasy to handle other tasks while the tune is being played, but comes with the disadvantage of the output possibly being interrupted/delayed by other (possibly blocking) tasks and events, so the music may not play continuously. + + Also, the previous implementation may not have stopped sound correctly after playing a song, but as this has been corrected, so there is no longer a need to turn off the GPIO after playing a song. " From 8d9a4501ba048adb3902870f7673be3413000f86 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Fri, 15 Sep 2023 21:57:12 +0200 Subject: [PATCH 3/8] [GPIO] Decrease buildsize by optimizing logging --- src/src/Commands/GPIO.cpp | 66 +++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index 67b7295785..1fe33d2eed 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -99,9 +99,8 @@ bool gpio_monitor_helper(int port, struct EventStruct *event, const char *Line) if (state == -1) { globalMapPortStatus[key].mode = PIN_MODE_OFFLINE; } if (loglevelActiveFor(LOG_LEVEL_INFO)) { - String log = concat(logPrefix, F(" port #")); - log += port; - log += F(": added to monitor list."); + String log = logPrefix; + log += strformat(F(" port #%d: added to monitor list."), port); addLogMove(LOG_LEVEL_INFO, log); } String dummy; @@ -151,9 +150,8 @@ bool gpio_unmonitor_helper(int port, struct EventStruct *event, const char *Line removeMonitorFromPort(key); if (loglevelActiveFor(LOG_LEVEL_INFO)) { - String log = concat(logPrefix, F(" port #")); - log += port; - log += F(": removed from monitor list."); + String log = logPrefix; + log += strformat(F(" port #%d: removed from monitor list."), port); addLogMove(LOG_LEVEL_INFO, log); } @@ -399,17 +397,14 @@ const __FlashStringHelper * Command_GPIO_RTTTL(struct EventStruct *event, const melody.replace('-', '#'); if (loglevelActiveFor(LOG_LEVEL_INFO)) { - String log = concat(F("RTTTL : pin: "), event->Par1); - log += F(" melody: "); - log += melody; - addLogMove(LOG_LEVEL_INFO, log); + addLogMove(LOG_LEVEL_INFO, strformat(F("RTTTL: pin: %d melody: %s"), event->Par1, melody.c_str())); } if (play_rtttl(event->Par1, melody.c_str())) { return return_command_success(); } #else // if FEATURE_RTTTL - addLog(LOG_LEVEL_ERROR, F("RTTTL : command not included in build")); + addLog(LOG_LEVEL_ERROR, F("RTTTL: command not included in build")); #endif // if FEATURE_RTTTL return return_command_failed(); } @@ -454,9 +449,7 @@ const __FlashStringHelper * Command_GPIO_Pulse(struct EventStruct *event, const GPIO_Write(pluginID, event->Par1, !event->Par2); String log = logPrefix; - log += concat(F(" : port "), event->Par1); - log += concat(F(". Pulse set for "), event->Par3); - log += F(" ms"); + log += strformat(F(" : port %d. Pulse set for %d ms"), event->Par1, event->Par3); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); @@ -502,10 +495,7 @@ const __FlashStringHelper * Command_GPIO_Toggle(struct EventStruct *event, const GPIO_Write(pluginID, event->Par1, !state); String log = logPrefix; - log += F(" toggle: port#"); - log += event->Par1; - log += F(": set to "); - log += static_cast(!state); + log += strformat(F(" toggle: port#%d: set to %d"), event->Par1, static_cast(!state)); addLog(LOG_LEVEL_ERROR, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); @@ -584,10 +574,7 @@ const __FlashStringHelper * Command_GPIO(struct EventStruct *event, const char * if ((mode == PIN_MODE_OUTPUT) || (pluginID == PLUGIN_PCF)) { GPIO_Write(pluginID, event->Par1, state, mode); } String log = logPrefix; - log += F(" : port#"); - log += event->Par1; - log += F(": set to "); - log += state; + log += strformat(F(" : port#%d: set to %d"), event->Par1, state); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); return return_command_success(); @@ -604,7 +591,10 @@ const __FlashStringHelper * Command_GPIO(struct EventStruct *event, const char * void logErrorGpio(const __FlashStringHelper * prefix, int port, const __FlashStringHelper * description) { if (port >= 0) { - addLog(LOG_LEVEL_ERROR, concat(prefix, concat(F(" : port#"), port)) + description); + String log = prefix; + log += concat(F(" : port#"), port); + log += description; + addLog(LOG_LEVEL_ERROR, log); } } @@ -927,8 +917,7 @@ bool mcpgpio_range_pattern_helper(struct EventStruct *event, const char *Line, b createAndSetPortStatus_Mode_State(key, mode, state); String log; log += data.logPrefix; - log += concat(F(": port#"), static_cast(currentPin)); - log += concat(F(": set to "), static_cast(state)); + log += strformat(F(": port#%d: set to %d"), currentPin, state); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); } @@ -983,7 +972,8 @@ bool pcfgpio_range_pattern_helper(struct EventStruct *event, const char *Line, b state = onLine ? ((writeGPIOValue & (1 << j)) >> j) : -1; createAndSetPortStatus_Mode_State(key, mode, state); - log = concat(data.logPrefix, F(": port#")) + String(currentPin) + String(F(": set to ")) + String(state); + log = data.logPrefix; + log += strformat(F(": port#%d: set to %d"), currentPin, state); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); } else { @@ -1163,8 +1153,10 @@ bool gpio_mode_range_helper(uint8_t pin, uint8_t pinMode, struct EventStruct *ev createAndSetPortStatus_Mode_State(key, mode, currentState); - const String log = concat(logPrefix, F(" : port#")) + String(pin) + String(F(": MODE set to ")) + logPostfix + String(F(". Value = ")) + - String(currentState); + String log = logPrefix; + log += strformat(F(" : port#%d: MODE set to "), pin); + log += logPostfix; + log += concat(F(". Value = "), currentState); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); return true; @@ -1274,7 +1266,9 @@ bool getGPIOPinStateValues(String& str) { if (success) { #ifndef BUILD_NO_DEBUG - addLog(LOG_LEVEL_DEBUG, logPrefix + F(" PLUGIN PINSTATE pin =") + String(par1) + F("; value=") + str); + String log = logPrefix; + log += strformat(F(" PLUGIN PINSTATE pin =%d; value=%s"), par1, str.c_str()); + addLog(LOG_LEVEL_DEBUG, log); #endif // ifndef BUILD_NO_DEBUG } else { addLog(LOG_LEVEL_ERROR, F(" PLUGIN PINSTATE. Syntax error. Pin parameter is not numeric")); @@ -1324,16 +1318,14 @@ bool getGPIOPinStateValues(String& str) { if (success) { #ifndef BUILD_NO_DEBUG - addLogMove(LOG_LEVEL_DEBUG, - concat(logPrefix, F(" PLUGIN RANGE pin start=")) + String(par1) + - concat(F("; pin end="), par2) + - concat(F("; value="), str)); + String log = logPrefix; + log += strformat(F(" PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()); + addLogMove(LOG_LEVEL_DEBUG, log); #endif // ifndef BUILD_NO_DEBUG } else { - addLogMove(LOG_LEVEL_ERROR, - concat(logPrefix, F(" IS OFFLINE. PLUGIN RANGE pin start=")) + String(par1) + - concat(F("; pin end="), par2) + - concat(F("; value="), str)); + String log = logPrefix; + log += strformat(F(" IS OFFLINE. PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()); + addLogMove(LOG_LEVEL_ERROR, log); } } else { addLog(LOG_LEVEL_ERROR, F(" PLUGIN PINRANGE. Syntax error. Pin parameters are not numeric.")); From ece1bbaeb9880b02753cf2da16852e56d2fe444c Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Fri, 15 Sep 2023 22:14:09 +0200 Subject: [PATCH 4/8] [RTTTL] Add FEATURE_ flags to Custom-sample.h --- src/Custom-sample.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Custom-sample.h b/src/Custom-sample.h index aeb550cc57..e90ee8a21c 100644 --- a/src/Custom-sample.h +++ b/src/Custom-sample.h @@ -227,6 +227,8 @@ // #define FEATURE_I2C_DEVICE_CHECK 0 // Disable the I2C Device check feature // #define FEATURE_I2C_GET_ADDRESS 0 // Disable fetching the I2C address from I2C plugins. Will be enabled when FEATURE_I2C_DEVICE_CHECK is enabled // #define FEATURE_RTTTL 1 // Enable rtttl command +// #define FEATURE_ANYRTTTL_LIB 1 // Use AnyRttl library for RTTTL handling +// #define FEATURE_ANYRTTTL_ASYNC 1 // When AnyRttl enabled, use Async (nonblocking) mode instead of the default Blocking mode #if FEATURE_CUSTOM_PROVISIONING From 38515d39ddd098d9f886d7143a6e684c96164554 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Sat, 16 Sep 2023 11:08:10 +0200 Subject: [PATCH 5/8] [GPIO] Adopt optimized logging improvements (@gijs) --- src/src/Commands/GPIO.cpp | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index 1fe33d2eed..657fcc3014 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -99,9 +99,9 @@ bool gpio_monitor_helper(int port, struct EventStruct *event, const char *Line) if (state == -1) { globalMapPortStatus[key].mode = PIN_MODE_OFFLINE; } if (loglevelActiveFor(LOG_LEVEL_INFO)) { - String log = logPrefix; - log += strformat(F(" port #%d: added to monitor list."), port); - addLogMove(LOG_LEVEL_INFO, log); + addLog(LOG_LEVEL_INFO, concat( + logPrefix, + strformat(F(" port #%d: added to monitor list."), port))); } String dummy; SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, dummy, 0); @@ -150,9 +150,9 @@ bool gpio_unmonitor_helper(int port, struct EventStruct *event, const char *Line removeMonitorFromPort(key); if (loglevelActiveFor(LOG_LEVEL_INFO)) { - String log = logPrefix; - log += strformat(F(" port #%d: removed from monitor list."), port); - addLogMove(LOG_LEVEL_INFO, log); + addLog(LOG_LEVEL_INFO, concat( + logPrefix, + strformat(F(" port #%d: removed from monitor list."), port))); } return true; @@ -495,7 +495,9 @@ const __FlashStringHelper * Command_GPIO_Toggle(struct EventStruct *event, const GPIO_Write(pluginID, event->Par1, !state); String log = logPrefix; - log += strformat(F(" toggle: port#%d: set to %d"), event->Par1, static_cast(!state)); + log += concat( + F(" toggle"), + strformat(F(": port#%d: set to %d"), event->Par1, static_cast(!state))); addLog(LOG_LEVEL_ERROR, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); @@ -727,7 +729,7 @@ range_pattern_helper_data range_helper_shared(pluginID_t plugin, uint8_t pin1, u !checkValidPortRange(plugin, pin2) || ((pin2 - pin1 + 1) > 16)) { if (loglevelActiveFor(LOG_LEVEL_ERROR)) { - addLogMove(LOG_LEVEL_ERROR, concat(data.logPrefix, F(": pin numbers out of range."))); + addLog(LOG_LEVEL_ERROR, concat(data.logPrefix, F(": pin numbers out of range."))); } return data; } @@ -785,7 +787,7 @@ range_pattern_helper_data range_pattern_helper_shared(pluginID_t plugin, struct data.write = data.write << data.deltaStart; } else { if (loglevelActiveFor(LOG_LEVEL_ERROR)) { - addLogMove(LOG_LEVEL_ERROR, concat(data.logPrefix, F(": write value must be 0 or 1."))); + addLog(LOG_LEVEL_ERROR, concat(data.logPrefix, F(": write value must be 0 or 1."))); } return data; } @@ -915,9 +917,9 @@ bool mcpgpio_range_pattern_helper(struct EventStruct *event, const char *Line, b const int8_t state = onLine ? ((writeGPIOValue & (1 << j)) >> j) : -1; createAndSetPortStatus_Mode_State(key, mode, state); - String log; - log += data.logPrefix; - log += strformat(F(": port#%d: set to %d"), currentPin, state); + String log = concat( + data.logPrefix, + strformat(F(": port#%d: set to %d"), currentPin, state)); addLog(LOG_LEVEL_INFO, log); SendStatusOnlyIfNeeded(event, SEARCH_PIN_STATE, key, log, 0); } @@ -1309,7 +1311,7 @@ bool getGPIOPinStateValues(String& str) { str = String(tempValue); break; } - #endif +#endif default: addLog(LOG_LEVEL_ERROR, F("PLUGIN PINSTATE. Plugin not included in build")); return false; @@ -1318,14 +1320,14 @@ bool getGPIOPinStateValues(String& str) { if (success) { #ifndef BUILD_NO_DEBUG - String log = logPrefix; - log += strformat(F(" PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()); - addLogMove(LOG_LEVEL_DEBUG, log); + addLog(LOG_LEVEL_DEBUG, concat( + logPrefix, + strformat(F(" PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()))); #endif // ifndef BUILD_NO_DEBUG } else { - String log = logPrefix; - log += strformat(F(" IS OFFLINE. PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()); - addLogMove(LOG_LEVEL_ERROR, log); + addLog(LOG_LEVEL_ERROR, concat( + logPrefix, + strformat(F(" IS OFFLINE. PLUGIN RANGE pin start=%d; pin end=%d; value=%s"), par1, par2, str.c_str()))); } } else { addLog(LOG_LEVEL_ERROR, F(" PLUGIN PINRANGE. Syntax error. Pin parameters are not numeric.")); From e2050cc9104358d69da8df662a86bcf10dd8c0a2 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Wed, 27 Sep 2023 23:37:22 +0200 Subject: [PATCH 6/8] [RTTTL] Add events for RTTTL play (async only), fix intermitted/skipped async playing --- src/Custom-sample.h | 2 +- src/src/Commands/GPIO.cpp | 5 +- src/src/CustomBuild/define_plugin_sets.h | 7 ++- src/src/Helpers/Audio.cpp | 58 ++++++++++++++++++++++-- src/src/Helpers/Audio.h | 1 + 5 files changed, 64 insertions(+), 9 deletions(-) diff --git a/src/Custom-sample.h b/src/Custom-sample.h index a7bc4cdc47..8d7b8766d9 100644 --- a/src/Custom-sample.h +++ b/src/Custom-sample.h @@ -229,7 +229,7 @@ // #define FEATURE_RTTTL 1 // Enable rtttl command // #define FEATURE_ANYRTTTL_LIB 1 // Use AnyRttl library for RTTTL handling // #define FEATURE_ANYRTTTL_ASYNC 1 // When AnyRttl enabled, use Async (nonblocking) mode instead of the default Blocking mode - +// #define FEATURE_RTTTL_EVENTS 1 // Enable RTTTL events for Async use, for blocking it doesn't make sense #if FEATURE_CUSTOM_PROVISIONING // For device models, see src/src/DataTypes/DeviceModel.h diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index 76dac2513a..b82528b639 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -385,12 +385,15 @@ const __FlashStringHelper * Command_GPIO_RTTTL(struct EventStruct *event, const // play a tune via a RTTTL string, look at https://www.letscontrolit.com/forum/viewtopic.php?f=4&t=343&hilit=speaker&start=10 for // more info. - String melody = parseStringToEndKeepCase(Line, 2); + String melody = parseStringToEndKeepCase(Line, 3); melody.replace('-', '#'); if (loglevelActiveFor(LOG_LEVEL_INFO)) { addLog(LOG_LEVEL_INFO, strformat(F("RTTTL: pin: %d melody: %s"), event->Par1, melody.c_str())); } + #if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC + set_rtttl_melody(melody); + #endif // if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC if (play_rtttl(event->Par1, melody.c_str())) { return return_command_success_flashstr(); diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index 20ff99d97d..8e5333fec7 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -2920,8 +2920,8 @@ To create/register a plugin, you have to : #undef FEATURE_RTTTL #define FEATURE_RTTTL 1 #endif -#if FEATURE_RTTTL && !defined(FEATURE_ANYRTTTL_LIB) //&& defined(ESP32) - #define FEATURE_ANYRTTTL_LIB 1 // Enable AnyRtttl library for ESP32 builds +#if FEATURE_RTTTL && !defined(FEATURE_ANYRTTTL_LIB) + #define FEATURE_ANYRTTTL_LIB 1 // Enable AnyRtttl library #endif #ifndef FEATURE_ANYRTTTL_LIB #define FEATURE_ANYRTTTL_LIB 0 @@ -2929,6 +2929,9 @@ To create/register a plugin, you have to : #ifndef FEATURE_ANYRTTTL_ASYNC #define FEATURE_ANYRTTTL_ASYNC 1 // Use Async by default for better (non-blocking) behavior #endif +#if FEATURE_ANYRTTTL_ASYNC && !defined(FEATURE_RTTTL_EVENTS) + #define FEATURE_RTTTL_EVENTS 1 // Enable RTTTL events for Async use, for blocking it doesn't make sense +#endif #ifndef FEATURE_SD #define FEATURE_SD 0 diff --git a/src/src/Helpers/Audio.cpp b/src/src/Helpers/Audio.cpp index 1d4efee130..d0b5ea793e 100644 --- a/src/src/Helpers/Audio.cpp +++ b/src/src/Helpers/Audio.cpp @@ -9,7 +9,7 @@ Generate a tone of specified frequency on pin \*********************************************************************************************/ bool tone_espEasy(int8_t _pin, unsigned int frequency, unsigned long duration) { - if (!validGpio(_pin)) return false; + if (!validGpio(_pin)) { return false; } // Duty cycle can be used as some kind of volume. if (!set_Gpio_PWM_pct(_pin, 50, frequency)) { return false; } @@ -28,6 +28,23 @@ bool tone_espEasy(int8_t _pin, unsigned int frequency, unsigned long duration) { # if FEATURE_ANYRTTTL_LIB # include # include +# if FEATURE_RTTTL_EVENTS +# include "../Globals/EventQueue.h" +# include "../Globals/Settings.h" +static bool rtttlPlaying = false; +# endif // if FEATURE_RTTTL_EVENTS +# if FEATURE_ANYRTTTL_ASYNC +static String rtttlMelody; +void set_rtttl_melody(String& melody) { + if (melody.isEmpty()) { + rtttlMelody = String(); + } else { + rtttlMelody = String(melody); + } +} + +# endif // if FEATURE_ANYRTTTL_ASYNC + bool play_rtttl(int8_t _pin, const char *p) { if (!validGpio(_pin)) { return false; } @@ -44,9 +61,28 @@ bool play_rtttl(int8_t _pin, const char *p) { if (anyrtttl::nonblocking::isPlaying()) { // If currently playing, cancel that addLog(LOG_LEVEL_INFO, F("RTTTL: Cancelling running song...")); anyrtttl::nonblocking::stop(); + # if FEATURE_RTTTL_EVENTS + + if (Settings.UseRules) { + eventQueue.add(F("RTTTL#Cancelled")); + } + rtttlPlaying = false; + # endif // if FEATURE_RTTTL_EVENTS + } + + if (!rtttlMelody.isEmpty()) { + anyrtttl::nonblocking::begin(_pin, rtttlMelody.c_str()); + } else { + anyrtttl::nonblocking::begin(_pin, p); } - anyrtttl::nonblocking::begin(_pin, p); anyrtttl::nonblocking::play(); + # if FEATURE_RTTTL_EVENTS + + if (Settings.UseRules) { + eventQueue.add(F("RTTTL#Started")); + } + rtttlPlaying = true; + # endif // if FEATURE_RTTTL_EVENTS # else // if FEATURE_ANYRTTTL_ASYNC anyrtttl::blocking::play(_pin, p); # endif // if FEATURE_ANYRTTTL_ASYNC @@ -56,15 +92,27 @@ bool play_rtttl(int8_t _pin, const char *p) { return true; } +# if FEATURE_ANYRTTTL_ASYNC void update_rtttl() { - # if FEATURE_ANYRTTTL_ASYNC - if (anyrtttl::nonblocking::isPlaying()) { anyrtttl::nonblocking::play(); + } else { + # if FEATURE_RTTTL_EVENTS + + if (rtttlPlaying) { + if (Settings.UseRules) { + eventQueue.add(F("RTTTL#Finished")); + } + rtttlPlaying = false; + } + # endif // if FEATURE_RTTTL_EVENTS + String dummy; + set_rtttl_melody(dummy); // Release memory } - # endif // if FEATURE_ANYRTTTL_ASYNC } +# endif // if FEATURE_ANYRTTTL_ASYNC + # else // if FEATURE_ANYRTTTL_LIB bool play_rtttl(int8_t _pin, const char *p) { diff --git a/src/src/Helpers/Audio.h b/src/src/Helpers/Audio.h index e4be1a869b..58b8c199a7 100644 --- a/src/src/Helpers/Audio.h +++ b/src/src/Helpers/Audio.h @@ -19,6 +19,7 @@ bool play_rtttl(int8_t _pin, const char *p); # if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC void update_rtttl(); +void set_rtttl_melody(String& melody); # endif // if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC #endif // if FEATURE_RTTTL From ce68d2aa361f63b3130b279f45a6a0ec7bf18f8a Mon Sep 17 00:00:00 2001 From: TD-er Date: Thu, 28 Sep 2023 09:56:50 +0200 Subject: [PATCH 7/8] [RTTTL] Fix parsing correct command argument --- src/src/Commands/GPIO.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index b82528b639..9ae29158a0 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -385,7 +385,7 @@ const __FlashStringHelper * Command_GPIO_RTTTL(struct EventStruct *event, const // play a tune via a RTTTL string, look at https://www.letscontrolit.com/forum/viewtopic.php?f=4&t=343&hilit=speaker&start=10 for // more info. - String melody = parseStringToEndKeepCase(Line, 3); + String melody = parseStringToEndKeepCase(Line, 2); melody.replace('-', '#'); if (loglevelActiveFor(LOG_LEVEL_INFO)) { From 7852c42b2d3558588451e9c57459ff5455bf9c6e Mon Sep 17 00:00:00 2001 From: TD-er Date: Thu, 28 Sep 2023 11:26:00 +0200 Subject: [PATCH 8/8] [RTTTL] Fix argument index for melody + prevent crash when changing song --- docs/source/Plugin/P000_Buzzer_RTTTL.rst | 4 ++-- .../source/Plugin/P000_Piezo_element_RTTTL.rst | 4 ++-- docs/source/Plugin/P000_Speaker_RTTTL.rst | 4 ++-- src/src/Commands/GPIO.cpp | 8 ++++++++ src/src/Helpers/Audio.cpp | 18 +++++++++++------- src/src/Helpers/Audio.h | 1 + 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/docs/source/Plugin/P000_Buzzer_RTTTL.rst b/docs/source/Plugin/P000_Buzzer_RTTTL.rst index 11c0d77dad..e3c7dd127f 100644 --- a/docs/source/Plugin/P000_Buzzer_RTTTL.rst +++ b/docs/source/Plugin/P000_Buzzer_RTTTL.rst @@ -57,7 +57,7 @@ From ESP Easy v2.0.0 its possible to play melodies via `RTTTL /control?cmd=rtttl,14:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 + http:///control?cmd=rtttl,14,:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 This plays a melody on pin 14. @@ -68,7 +68,7 @@ To make a boot-sound on startup, create a rule like this: .. code-block:: none On System#Boot do - rtttl,14:d=10,o=6,b=180,c,e,g + rtttl,14,:d=10,o=6,b=180,c,e,g endon `A place to find more tunes `_, all saved as txt files. diff --git a/docs/source/Plugin/P000_Piezo_element_RTTTL.rst b/docs/source/Plugin/P000_Piezo_element_RTTTL.rst index cd28215a05..59d2f49692 100644 --- a/docs/source/Plugin/P000_Piezo_element_RTTTL.rst +++ b/docs/source/Plugin/P000_Piezo_element_RTTTL.rst @@ -54,7 +54,7 @@ From ESP Easy v2.0.0 its possible to play melodies via `RTTTL /control?cmd=rtttl,14:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 + http:///control?cmd=rtttl,14,:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 This plays a melody on pin 14. @@ -65,7 +65,7 @@ To make a boot-sound on startup, create a rule like this: .. code-block:: none On System#Boot do - rtttl,14:d=10,o=6,b=180,c,e,g + rtttl,14,:d=10,o=6,b=180,c,e,g endon `A place to find more tunes `_, all saved as txt files. diff --git a/docs/source/Plugin/P000_Speaker_RTTTL.rst b/docs/source/Plugin/P000_Speaker_RTTTL.rst index 67c860fda1..ecaccd9005 100644 --- a/docs/source/Plugin/P000_Speaker_RTTTL.rst +++ b/docs/source/Plugin/P000_Speaker_RTTTL.rst @@ -54,7 +54,7 @@ From ESP Easy v2.0.0 its possible to play melodies via `RTTTL /control?cmd=rtttl,14:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 + http:///control?cmd=rtttl,14,:d=4,o=5,b=112:8a,8a,a,8a,8a,a,8a,8c6,8f.,16g,2a,8a-,8a-,8a-.,16a-,8a-,8a,8a.,16a,8a,8g,8g,8a,g,c6 This plays a melody on pin 14. @@ -65,7 +65,7 @@ To make a boot-sound on startup, create a rule like this: .. code-block:: none On System#Boot do - rtttl,14:d=10,o=6,b=180,c,e,g + rtttl,14,:d=10,o=6,b=180,c,e,g endon `A place to find more tunes `_, all saved as txt files. diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index 9ae29158a0..17c5319704 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -385,8 +385,16 @@ const __FlashStringHelper * Command_GPIO_RTTTL(struct EventStruct *event, const // play a tune via a RTTTL string, look at https://www.letscontrolit.com/forum/viewtopic.php?f=4&t=343&hilit=speaker&start=10 for // more info. + // First assume 'old' syntax: rtttl, + // No comma between the GPIO argument and the melody String melody = parseStringToEndKeepCase(Line, 2); + if (melody.indexOf(':') == -1) { + // Apparently this is now using the 'new' (correct) syntax: + // rtttl,, + melody = parseStringToEndKeepCase(Line, 3); + } melody.replace('-', '#'); + melody.replace('_', '#'); if (loglevelActiveFor(LOG_LEVEL_INFO)) { addLog(LOG_LEVEL_INFO, strformat(F("RTTTL: pin: %d melody: %s"), event->Par1, melody.c_str())); diff --git a/src/src/Helpers/Audio.cpp b/src/src/Helpers/Audio.cpp index d0b5ea793e..f9509b4995 100644 --- a/src/src/Helpers/Audio.cpp +++ b/src/src/Helpers/Audio.cpp @@ -35,12 +35,17 @@ static bool rtttlPlaying = false; # endif // if FEATURE_RTTTL_EVENTS # if FEATURE_ANYRTTTL_ASYNC static String rtttlMelody; + +void clear_rtttl_melody() { + // The non-blocking play will read from a char pointer. + // So we must stop the playing before changing the string as it could otherwise lead to a crash. + anyrtttl::nonblocking::stop(); + rtttlMelody = String(); +} + void set_rtttl_melody(String& melody) { - if (melody.isEmpty()) { - rtttlMelody = String(); - } else { - rtttlMelody = String(melody); - } + clear_rtttl_melody(); + rtttlMelody = melody; } # endif // if FEATURE_ANYRTTTL_ASYNC @@ -106,8 +111,7 @@ void update_rtttl() { rtttlPlaying = false; } # endif // if FEATURE_RTTTL_EVENTS - String dummy; - set_rtttl_melody(dummy); // Release memory + clear_rtttl_melody(); // Release memory } } diff --git a/src/src/Helpers/Audio.h b/src/src/Helpers/Audio.h index 58b8c199a7..bff26501a7 100644 --- a/src/src/Helpers/Audio.h +++ b/src/src/Helpers/Audio.h @@ -19,6 +19,7 @@ bool play_rtttl(int8_t _pin, const char *p); # if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC void update_rtttl(); +void clear_rtttl_melody(); void set_rtttl_melody(String& melody); # endif // if FEATURE_ANYRTTTL_LIB && FEATURE_ANYRTTTL_ASYNC #endif // if FEATURE_RTTTL