fixed several crashes

This commit is contained in:
Stefan Ostermann 2024-02-06 23:37:20 +01:00
parent ef30b832ae
commit efd570fb50
2 changed files with 42 additions and 13 deletions

View File

@ -167,6 +167,19 @@ void DirectoryNode::advanceToFirstMP3InThisNode()
DirectoryNode *DirectoryNode::advanceToMP3(const uint16_t id) DirectoryNode *DirectoryNode::advanceToMP3(const uint16_t id)
{ {
for (size_t i = 0; i < ids.size(); i++)
{
if (id == ids[i])
{
// Found the current MP3 file
currentPlaying = &mp3Files[i];
currentPlayingId = id;
return this;
}
}
for (auto subdir : subdirectories) for (auto subdir : subdirectories)
{ {
if (subdir->getId() == id) if (subdir->getId() == id)
@ -181,12 +194,9 @@ DirectoryNode *DirectoryNode::advanceToMP3(const uint16_t id)
if (id == subdir->ids[i]) if (id == subdir->ids[i])
{ {
// Found the current MP3 file // Found the current MP3 file
if (i < subdir->mp3Files.size() - 1) subdir->currentPlaying = &subdir->mp3Files[i];
{ subdir->currentPlayingId = id;
subdir->currentPlaying = &subdir->mp3Files[i]; return subdir;
subdir->currentPlayingId = id;
return subdir;
}
} }
} }
} }

View File

@ -64,7 +64,7 @@ DNSServer dns;
uint16_t DirectoryNode::idCounter = 0; uint16_t DirectoryNode::idCounter = 0;
DirectoryNode rootNode("/"); DirectoryNode rootNode("/");
DirectoryNode *currentNode = NULL; DirectoryNode *currentNode = nullptr;
@ -124,13 +124,25 @@ uint32_t getBatteryVoltageMv() {
void playSongById(uint16_t id, uint32_t continueSeconds = 0) void playSongById(uint16_t id, uint32_t continueSeconds = 0)
{ {
currentNode = rootNode.advanceToMP3(id); currentNode = rootNode.advanceToMP3(id);
if (currentNode==nullptr) {
return;
}
String mp3File = currentNode->getCurrentPlayingFilePath(); String mp3File = currentNode->getCurrentPlayingFilePath();
Serial.print("playing by id: "); Serial.print("playing by id: ");
Serial.print(id);Serial.print(" ");Serial.println(continueSeconds); Serial.print(id);Serial.print(" ");Serial.println(continueSeconds);
Serial.println(mp3File.c_str()); Serial.println(mp3File.c_str());
deactivateRFID(); deactivateRFID();
activateSD(); activateSD();
if (currentNode != nullptr && currentNode->getCurrentPlaying()==nullptr) {
currentNode = nullptr;
Serial.println("no node by id found, exiting playSongById");
return;
}
playFile(mp3File.c_str()); playFile(mp3File.c_str());
if (continueSeconds!=0) { if (continueSeconds!=0) {
audio.setAudioPlayPosition(continueSeconds); audio.setAudioPlayPosition(continueSeconds);
@ -178,6 +190,10 @@ void playSongByRFID(String id)
*/ */
bool playFile(const char *filename, uint32_t resumeFilePos) bool playFile(const char *filename, uint32_t resumeFilePos)
{ {
if (filename == nullptr || strlen(filename)==0) {
Serial.println("filename is empty.");
return false;
}
return audio.connecttoSD(filename, resumeFilePos); return audio.connecttoSD(filename, resumeFilePos);
} }
@ -206,7 +222,7 @@ void playNextMp3()
Serial.print("Now advancing to "); Serial.print("Now advancing to ");
String mp3File = currentNode->getCurrentPlayingFilePath(); String mp3File = currentNode->getCurrentPlayingFilePath();
Serial.println(mp3File.c_str()); Serial.println(mp3File.c_str());
deactivateRFID(); deactivateRFID();
activateSD(); activateSD();
playFile(mp3File.c_str()); playFile(mp3File.c_str());
activateRFID(); activateRFID();
@ -270,7 +286,8 @@ String getState()
{ {
DynamicJsonDocument jsonState(1024); DynamicJsonDocument jsonState(1024);
jsonState["playing"] = audio.isRunning(); jsonState["playing"] = audio.isRunning();
if (currentNode != NULL)
if (currentNode != nullptr)
jsonState["title"] = *currentNode->getCurrentPlaying(); jsonState["title"] = *currentNode->getCurrentPlaying();
else else
jsonState["title"] = "Angehalten"; jsonState["title"] = "Angehalten";
@ -367,12 +384,12 @@ void next()
void previous() void previous()
{ {
if (currentNode != nullptr) { if (currentNode != NULL) {
const String* curr = currentNode->getCurrentPlaying(); const String* curr = currentNode->getCurrentPlaying();
DirectoryNode* newNode = currentNode->goToPreviousMP3(); DirectoryNode* newNode = currentNode->goToPreviousMP3();
if (newNode != nullptr) { if (newNode != NULL) {
if (curr == newNode->getCurrentPlaying()) { if (curr == newNode->getCurrentPlaying()) {
// reset to 0 seconds playtime: // reset to 0 seconds playtime:
audio.setAudioPlayPosition(0); audio.setAudioPlayPosition(0);
@ -510,6 +527,8 @@ void setup()
Serial.println("Deactivating Brownout detector..."); Serial.println("Deactivating Brownout detector...");
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
//wifiManager.resetSettings();
if (wifiManager.autoConnect("HannaBox")) if (wifiManager.autoConnect("HannaBox"))
{ {
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
@ -645,7 +664,7 @@ void loop()
deactivateRFID(); deactivateRFID();
activateSD(); activateSD();
audio.loop(); audio.loop();
if (currentNode != NULL && !prepareSleepMode) if (currentNode != nullptr && !prepareSleepMode)
{ {
currentNode->setSecondsPlayed(audio.getAudioCurrentTime()); currentNode->setSecondsPlayed(audio.getAudioCurrentTime());
} }