79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
#ifndef player_h
|
|
#define player_h
|
|
#include "options.h"
|
|
|
|
#if I2S_DOUT!=255 || I2S_INTERNAL
|
|
#include "../audioI2S/AudioEx.h"
|
|
#else
|
|
#include "../audioVS1053/audioVS1053Ex.h"
|
|
#endif
|
|
|
|
#ifndef MQTT_BURL_SIZE
|
|
#define MQTT_BURL_SIZE 512
|
|
#endif
|
|
|
|
#define PLERR_LN 64
|
|
#define SET_PLAY_ERROR(...) {char buff[512 + 64]; sprintf(buff,__VA_ARGS__); setError(buff);}
|
|
|
|
enum playerRequestType_e : uint8_t { PR_PLAY = 1, PR_STOP = 2, PR_PREV = 3, PR_NEXT = 4, PR_VOL = 5 };
|
|
struct playerRequestParams_t
|
|
{
|
|
playerRequestType_e type;
|
|
int payload;
|
|
};
|
|
|
|
enum plStatus_e : uint8_t{ PLAYING = 1, STOPPED = 2 };
|
|
|
|
class Player: public Audio {
|
|
private:
|
|
uint32_t _volTicks; /* delayed volume save */
|
|
bool _volTimer; /* delayed volume save */
|
|
uint32_t _resumeFilePos;
|
|
plStatus_e _status;
|
|
char _plError[PLERR_LN];
|
|
private:
|
|
void _stop(bool alreadyStopped = false);
|
|
void _play(uint16_t stationId);
|
|
void _loadVol(uint8_t volume);
|
|
public:
|
|
bool requestToStart;
|
|
SemaphoreHandle_t playmutex=NULL;
|
|
bool lockOutput = true;
|
|
bool resumeAfterUrl = false;
|
|
uint32_t sd_min, sd_max;
|
|
#ifdef MQTT_ROOT_TOPIC
|
|
char burl[MQTT_BURL_SIZE]; /* buffer for browseUrl */
|
|
#endif
|
|
public:
|
|
Player();
|
|
void init();
|
|
void loop();
|
|
void initHeaders(const char *file);
|
|
void setError(const char *e);
|
|
bool hasError() { return strlen(_plError)>0; }
|
|
void sendCommand(playerRequestParams_t request);
|
|
#ifdef MQTT_ROOT_TOPIC
|
|
void browseUrl();
|
|
#endif
|
|
bool remoteStationName = false;
|
|
plStatus_e status() { return _status; }
|
|
void prev();
|
|
void next();
|
|
void toggle();
|
|
void stepVol(bool up);
|
|
void setVol(uint8_t volume);
|
|
uint8_t volToI2S(uint8_t volume);
|
|
void stopInfo();
|
|
void setOutputPins(bool isPlaying);
|
|
void setResumeFilePos(uint32_t pos) { _resumeFilePos = pos; }
|
|
};
|
|
|
|
extern Player player;
|
|
|
|
extern __attribute__((weak)) void player_on_start_play();
|
|
extern __attribute__((weak)) void player_on_stop_play();
|
|
extern __attribute__((weak)) void player_on_track_change();
|
|
extern __attribute__((weak)) void player_on_station_change();
|
|
|
|
#endif
|