Added basic Scheduling Functionality
A JSON message can now be received on: 'vesper/DEV_ID/control/addSchedule" Each message, must hold a "file" and "data". The file is the month's name in 3 letter mode (eg jan, feb, mar) The data is an entry for each day of the month. Each day can be an array containing multiple items.
This commit is contained in:
86
vesper/build/sketch/PlaybackControls.hpp
Normal file
86
vesper/build/sketch/PlaybackControls.hpp
Normal file
@@ -0,0 +1,86 @@
|
||||
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\PlaybackControls.hpp"
|
||||
#pragma once
|
||||
|
||||
extern melody_attributes melody;
|
||||
|
||||
bool timeToStop(unsigned long now);
|
||||
bool timeToPause(unsigned long now);
|
||||
bool timeToResume(unsigned long now);
|
||||
void durationTimer(void *param);
|
||||
|
||||
// Timer TASK to control playback state
|
||||
void durationTimer(void *param) {
|
||||
|
||||
// Task Setup
|
||||
|
||||
|
||||
// Task Loop
|
||||
while (true) {
|
||||
|
||||
unsigned long now = millis();
|
||||
|
||||
if (timeToStop(now)) {
|
||||
melody.stop();
|
||||
} else if (timeToPause(now)) {
|
||||
melody.pause();
|
||||
} else if (timeToResume(now)) {
|
||||
melody.unpause();
|
||||
}
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(1000)); // Check every 100ms
|
||||
}
|
||||
}
|
||||
|
||||
// Check if it's time to stop playback
|
||||
bool timeToStop(unsigned long now) {
|
||||
if (melody.isPlaying) {
|
||||
uint64_t stopTime = melody.startTime + melody.duration;
|
||||
if (now >= stopTime) {
|
||||
Serial.println("TIMER: Total Duration Reached");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if it's time to pause playback
|
||||
bool timeToPause(unsigned long now) {
|
||||
if (melody.isPlaying && melody.loop_duration > 0) {
|
||||
uint64_t pauseTimeLimit = melody.loopStartTime + melody.loop_duration;
|
||||
Serial.printf("PTL: %lu // NOW: ",pauseTimeLimit);
|
||||
Serial.println(now);
|
||||
if (now >= pauseTimeLimit && !melody.isPaused) {
|
||||
Serial.println("TIMER: Segment Duration Reached");
|
||||
melody.pauseTime = now;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if it's time to resume playback
|
||||
bool timeToResume(unsigned long now) {
|
||||
if (melody.isPaused) {
|
||||
uint64_t resumeTime = melody.pauseTime + melody.interval;
|
||||
if (now >= resumeTime) {
|
||||
Serial.println("TIMER: Pause Duration Reached");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Handles Incoming Commands to PLAY or STOP
|
||||
void handlePlaybackCommands(char * command){
|
||||
Serial.print("INCOMING COMMAND: ");
|
||||
Serial.println(command);
|
||||
if (command[0] == '1') {
|
||||
melody.play();
|
||||
PublishMqtt("OK - PLAY");
|
||||
} else if (command[0] == '0') {
|
||||
melody.forceStop();
|
||||
PublishMqtt("OK - STOP");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user