diff --git a/device/main/AudioPlayer.cpp b/device/main/AudioPlayer.cpp index f5bb427..4c72aac 100644 --- a/device/main/AudioPlayer.cpp +++ b/device/main/AudioPlayer.cpp @@ -1,8 +1,9 @@ #include "AudioPlayer.hpp" +#include #include #include "audio_setup.h" - +#include AudioPlayer::AudioPlayer() { playerHandle = setup_player(NULL, NULL); @@ -11,11 +12,21 @@ AudioPlayer::AudioPlayer() { esp_audio_vol_set(playerHandle, 50); } -void AudioPlayer::play(char* uri) { - esp_player_music_stop(); - esp_player_sdcard_music_play(uri, 0); +void AudioPlayer::play(std::string uri) { + if (isLastUri(uri)) { + esp_player_music_resume(); + } else { + esp_player_music_stop(); + esp_player_sdcard_music_play(uri.c_str(), 0); + std::cout << "Zeile 22 wurde ausgefuehrt." << "\n"; + lastUri = std::string(uri); + } } void AudioPlayer::pause() { esp_player_music_pause(); +} + +bool AudioPlayer::isLastUri(std::string uri) { + return lastUri == uri; } \ No newline at end of file diff --git a/device/main/AudioPlayer.hpp b/device/main/AudioPlayer.hpp index 51db038..cfd5719 100644 --- a/device/main/AudioPlayer.hpp +++ b/device/main/AudioPlayer.hpp @@ -1,10 +1,16 @@ #pragma once +#include + class AudioPlayer { void* playerHandle; + std::string lastUri; public: AudioPlayer(); - void play(char* uri); + void play(std::string uri); void pause(); + + private: + bool isLastUri(std::string uri); }; \ No newline at end of file diff --git a/device/main/TagPlayerControl.cpp b/device/main/TagPlayerControl.cpp index 5ef0b16..750361c 100644 --- a/device/main/TagPlayerControl.cpp +++ b/device/main/TagPlayerControl.cpp @@ -5,13 +5,14 @@ #include #include #include +#include #include static const char* TAG = "TagPlayerControl"; -TagPlayerControl::TagPlayerControl(AudioPlayer* player) { - audioPlayer = player; +TagPlayerControl::TagPlayerControl(std::shared_ptr player) + : audioPlayer(player) { } void TagPlayerControl::onTagChanged(char* tagId) { @@ -55,7 +56,7 @@ void TagPlayerControl::playTag(char* tagId) { content.append(line); } - audioPlayer->play((char*)(content.c_str())); + audioPlayer->play(content); file.close(); } \ No newline at end of file diff --git a/device/main/TagPlayerControl.hpp b/device/main/TagPlayerControl.hpp index e42c0f1..e24271a 100644 --- a/device/main/TagPlayerControl.hpp +++ b/device/main/TagPlayerControl.hpp @@ -1,12 +1,13 @@ #pragma once +#include #include "AudioPlayer.hpp" class TagPlayerControl { - AudioPlayer* audioPlayer; + std::shared_ptr audioPlayer; public: - TagPlayerControl(AudioPlayer* player); + TagPlayerControl(std::shared_ptr player); void onTagChanged(char* tagId); diff --git a/device/main/main.cpp b/device/main/main.cpp index 64dd565..f71c5b8 100644 --- a/device/main/main.cpp +++ b/device/main/main.cpp @@ -7,6 +7,7 @@ #include "TagPlayerControl.hpp" #include +#include extern "C" { void app_main(); @@ -16,24 +17,28 @@ Networking networking; WebInterface webInterface; RFIDInterface rfid; +std::shared_ptr audioPlayer; // initialize here, because the ctor does init stuff that fails when executed before `app_main()` + +std::shared_ptr tagPlayerControl; + void app_main(void) { initArduino(); webInterface.initSD(); - /* networking.connectWifi(); +/* networking.connectWifi(); webInterface.start(); rfid.registerWebResources(&webInterface); webInterface.finishResourceRegistrations(); */ - AudioPlayer audioPlayer; // initialize here, because the ctor does init stuff that fails when executed before `app_main()` + + audioPlayer = std::make_shared(); + tagPlayerControl = std::make_shared(audioPlayer); rfid.start(); - - TagPlayerControl tagPlayerControl(&audioPlayer); - rfid.registerTagChangeCallback([&tagPlayerControl](char* tagId) { - tagPlayerControl.onTagChanged(tagId); + rfid.registerTagChangeCallback([tagPlayerControl](char* tagId) { + tagPlayerControl->onTagChanged(tagId); }); }