You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
344 lines
13 KiB
344 lines
13 KiB
#include <Arduino.h>
|
|
#include "settings.h"
|
|
#include "Cmd.h"
|
|
#include "AudioPlayer.h"
|
|
#include "Battery.h"
|
|
#include "Ftp.h"
|
|
#include "Led.h"
|
|
#include "Log.h"
|
|
#include "Mqtt.h"
|
|
#include "System.h"
|
|
#include "Wlan.h"
|
|
|
|
void Cmd_Action(const uint16_t mod) {
|
|
switch (mod) {
|
|
case CMD_LOCK_BUTTONS_MOD: { // Locks/unlocks all buttons
|
|
System_ToggleLockControls();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_TIMER_MOD_15: { // Enables/disables sleep after 15 minutes
|
|
System_SetSleepTimer(15u);
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
|
|
gPlayProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_TIMER_MOD_30: { // Enables/disables sleep after 30 minutes
|
|
System_SetSleepTimer(30u);
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
|
|
gPlayProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_TIMER_MOD_60: { // Enables/disables sleep after 60 minutes
|
|
System_SetSleepTimer(60u);
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
|
|
gPlayProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_TIMER_MOD_120: { // Enables/disables sleep after 2 hrs
|
|
System_SetSleepTimer(120u);
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
|
|
gPlayProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_AFTER_END_OF_TRACK: { // Puts uC to sleep after end of current track
|
|
if (gPlayProperties.playMode == NO_PLAYLIST) {
|
|
Log_Println((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
|
|
System_IndicateError();
|
|
return;
|
|
}
|
|
if (gPlayProperties.sleepAfterCurrentTrack) {
|
|
Log_Println((char *) FPSTR(modificatorSleepAtEOTd), LOGLEVEL_NOTICE);
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "0", false);
|
|
#endif
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToInitialBrightness();
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
Log_Println((char *) FPSTR(modificatorSleepAtEOT), LOGLEVEL_NOTICE);
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "EOT", false);
|
|
#endif
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToNightBrightness();
|
|
Log_Println((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
|
|
#endif
|
|
}
|
|
gPlayProperties.sleepAfterCurrentTrack = !gPlayProperties.sleepAfterCurrentTrack;
|
|
gPlayProperties.sleepAfterPlaylist = false;
|
|
System_DisableSleepTimer();
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicLedBrightnessState), Led_GetBrightness(), false);
|
|
#endif
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_AFTER_END_OF_PLAYLIST: { // Puts uC to sleep after end of whole playlist (can take a while :->)
|
|
if (gPlayProperties.playMode == NO_PLAYLIST) {
|
|
Log_Println((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
|
|
System_IndicateError();
|
|
return;
|
|
}
|
|
if (gPlayProperties.sleepAfterCurrentTrack) {
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "0", false);
|
|
#endif
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToInitialBrightness();
|
|
#endif
|
|
Log_Println((char *) FPSTR(modificatorSleepAtEOPd), LOGLEVEL_NOTICE);
|
|
} else {
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToNightBrightness();
|
|
Log_Println((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
|
|
#endif
|
|
Log_Println((char *) FPSTR(modificatorSleepAtEOP), LOGLEVEL_NOTICE);
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "EOP", false);
|
|
#endif
|
|
}
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false;
|
|
gPlayProperties.sleepAfterPlaylist = !gPlayProperties.sleepAfterPlaylist;
|
|
System_DisableSleepTimer();
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicLedBrightnessState), Led_GetBrightness(), false);
|
|
#endif
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEP_AFTER_5_TRACKS: {
|
|
if (gPlayProperties.playMode == NO_PLAYLIST) {
|
|
Log_Println((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
|
|
System_IndicateError();
|
|
return;
|
|
}
|
|
|
|
gPlayProperties.sleepAfterCurrentTrack = false;
|
|
gPlayProperties.sleepAfterPlaylist = false;
|
|
System_DisableSleepTimer();
|
|
|
|
if (gPlayProperties.playUntilTrackNumber > 0) {
|
|
gPlayProperties.playUntilTrackNumber = 0;
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "0", false);
|
|
#endif
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToInitialBrightness();
|
|
#endif
|
|
Log_Println((char *) FPSTR(modificatorSleepd), LOGLEVEL_NOTICE);
|
|
} else {
|
|
if (gPlayProperties.currentTrackNumber + 5 > gPlayProperties.numberOfTracks) { // If currentTrack + 5 exceeds number of tracks in playlist, sleep after end of playlist
|
|
gPlayProperties.sleepAfterPlaylist = true;
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "EOP", false);
|
|
#endif
|
|
} else {
|
|
gPlayProperties.playUntilTrackNumber = gPlayProperties.currentTrackNumber + 5;
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicSleepTimerState), "EO5T", false);
|
|
#endif
|
|
}
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToNightBrightness();
|
|
#endif
|
|
Log_Println((char *) FPSTR(sleepTimerEO5), LOGLEVEL_NOTICE);
|
|
}
|
|
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicLedBrightnessState), Led_GetBrightness(), false);
|
|
#endif
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_REPEAT_PLAYLIST: {
|
|
if (gPlayProperties.playMode == NO_PLAYLIST) {
|
|
Log_Println((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
|
|
System_IndicateError();
|
|
} else {
|
|
if (gPlayProperties.repeatPlaylist) {
|
|
Log_Println((char *) FPSTR(modificatorPlaylistLoopDeactive), LOGLEVEL_NOTICE);
|
|
} else {
|
|
Log_Println((char *) FPSTR(modificatorPlaylistLoopActive), LOGLEVEL_NOTICE);
|
|
}
|
|
gPlayProperties.repeatPlaylist = !gPlayProperties.repeatPlaylist;
|
|
char rBuf[2];
|
|
snprintf(rBuf, 2, "%u", AudioPlayer_GetRepeatMode());
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicRepeatModeState), rBuf, false);
|
|
#endif
|
|
System_IndicateOk();
|
|
}
|
|
break;
|
|
}
|
|
|
|
case CMD_REPEAT_TRACK: { // Introduces looping for track-mode
|
|
if (gPlayProperties.playMode == NO_PLAYLIST) {
|
|
Log_Println((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
|
|
System_IndicateError();
|
|
} else {
|
|
if (gPlayProperties.repeatCurrentTrack) {
|
|
Log_Println((char *) FPSTR(modificatorTrackDeactive), LOGLEVEL_NOTICE);
|
|
} else {
|
|
Log_Println((char *) FPSTR(modificatorTrackActive), LOGLEVEL_NOTICE);
|
|
}
|
|
gPlayProperties.repeatCurrentTrack = !gPlayProperties.repeatCurrentTrack;
|
|
char rBuf[2];
|
|
snprintf(rBuf, 2, "%u", AudioPlayer_GetRepeatMode());
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicRepeatModeState), rBuf, false);
|
|
#endif
|
|
System_IndicateOk();
|
|
}
|
|
break;
|
|
}
|
|
|
|
case CMD_DIMM_LEDS_NIGHTMODE: {
|
|
#ifdef MQTT_ENABLE
|
|
publishMqtt((char *) FPSTR(topicLedBrightnessState), Led_GetBrightness(), false);
|
|
#endif
|
|
Log_Println((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
|
|
#ifdef NEOPIXEL_ENABLE
|
|
Led_ResetToNightBrightness();
|
|
#endif
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
case CMD_TOGGLE_WIFI_STATUS: {
|
|
Wlan_ToggleEnable();
|
|
System_IndicateOk();
|
|
break;
|
|
}
|
|
|
|
#ifdef BLUETOOTH_ENABLE
|
|
case CMD_TOGGLE_BLUETOOTH_MODE: {
|
|
if (System_GetOperationModeFromNvs() == OPMODE_NORMAL) {
|
|
System_IndicateOk();
|
|
System_SetOperationMode(OPMODE_BLUETOOTH);
|
|
} else if (System_GetOperationModeFromNvs() == OPMODE_BLUETOOTH) {
|
|
System_IndicateOk();
|
|
System_SetOperationMode(OPMODE_NORMAL);
|
|
} else {
|
|
System_IndicateError();
|
|
}
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
#ifdef FTP_ENABLE
|
|
case CMD_ENABLE_FTP_SERVER: {
|
|
Ftp_EnableServer();
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
case CMD_PLAYPAUSE: {
|
|
AudioPlayer_TrackControlToQueueSender(PAUSEPLAY);
|
|
break;
|
|
}
|
|
|
|
case CMD_PREVTRACK: {
|
|
AudioPlayer_TrackControlToQueueSender(PREVIOUSTRACK);
|
|
break;
|
|
}
|
|
|
|
case CMD_NEXTTRACK: {
|
|
AudioPlayer_TrackControlToQueueSender(NEXTTRACK);
|
|
break;
|
|
}
|
|
|
|
case CMD_FIRSTTRACK: {
|
|
AudioPlayer_TrackControlToQueueSender(FIRSTTRACK);
|
|
break;
|
|
}
|
|
|
|
case CMD_LASTTRACK: {
|
|
AudioPlayer_TrackControlToQueueSender(LASTTRACK);
|
|
break;
|
|
}
|
|
|
|
case CMD_VOLUMEINIT: {
|
|
AudioPlayer_VolumeToQueueSender(AudioPlayer_GetInitVolume(), true);
|
|
break;
|
|
}
|
|
|
|
case CMD_VOLUMEUP: {
|
|
AudioPlayer_VolumeToQueueSender(AudioPlayer_GetCurrentVolume() + 1, true);
|
|
break;
|
|
}
|
|
|
|
case CMD_VOLUMEDOWN:{
|
|
AudioPlayer_VolumeToQueueSender(AudioPlayer_GetCurrentVolume() - 1, true);
|
|
break;
|
|
}
|
|
|
|
case CMD_MEASUREBATTERY: {
|
|
#ifdef MEASURE_BATTERY_VOLTAGE
|
|
float voltage = Battery_GetVoltage();
|
|
snprintf(Log_Buffer, Log_BufferLength, "%s: %.2f V", (char *) FPSTR(currentVoltageMsg), voltage);
|
|
Log_Println(Log_Buffer, LOGLEVEL_INFO);
|
|
Led_Indicate(LedIndicatorType::Voltage);
|
|
#ifdef MQTT_ENABLE
|
|
char vstr[6];
|
|
snprintf(vstr, 6, "%.2f", voltage);
|
|
publishMqtt((char *) FPSTR(topicBatteryVoltage), vstr, false);
|
|
#endif
|
|
#endif
|
|
break;
|
|
}
|
|
|
|
case CMD_SLEEPMODE: {
|
|
System_RequestSleep();
|
|
break;
|
|
}
|
|
|
|
case CMD_SEEK_FORWARDS: {
|
|
gPlayProperties.seekmode = SEEK_FORWARDS;
|
|
break;
|
|
}
|
|
|
|
case CMD_SEEK_BACKWARDS: {
|
|
gPlayProperties.seekmode = SEEK_BACKWARDS;
|
|
break;
|
|
}
|
|
|
|
#ifdef ENABLE_ESPUINO_DEBUG
|
|
case PRINT_TASK_STATS: {
|
|
System_esp_print_tasks();
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
default: {
|
|
snprintf(Log_Buffer, Log_BufferLength, "%s %d !", (char *) FPSTR(modificatorDoesNotExist), mod);
|
|
Log_Println(Log_Buffer, LOGLEVEL_ERROR);
|
|
System_IndicateError();
|
|
}
|
|
}
|
|
}
|