Files
yoradio/yoRadio/src/core/display.h
2023-03-07 11:39:55 +03:00

118 lines
3.1 KiB
C++

#ifndef display_h
#define display_h
#include "options.h"
#include "Arduino.h"
#include <Ticker.h>
#include "config.h"
#include "../displays/dspcore.h"
enum displayMode_e { PLAYER, VOL, STATIONS, NUMBERS, LOST, UPDATING, INFO, SETTINGS, TIMEZONE, WIFI, CLEAR, SLEEPING };
enum pages_e : uint8_t { PG_PLAYER=0, PG_DIALOG=1, PG_PLAYLIST=2 };
//enum dialogType_e : uint8_t { DG_NONE=0, DG_VOLUME=1, DG_LOST=2, DG_UPDATING=3, DG_NEXTION=4 };
enum displayRequestType_e { BOOTSTRING, NEWMODE, CLOCK, NEWTITLE, NEWSTATION, NEXTSTATION, DRAWPLAYLIST, DRAWVOL, DBITRATE, AUDIOINFO, SHOWVUMETER, DSPRSSI, SHOWWEATHER, NEWWEATHER, PSTOP, PSTART, DSP_START };
struct requestParams_t
{
displayRequestType_e type;
int payload;
};
#if NEXTION_RX!=255 && NEXTION_TX!=255
#define USE_NEXTION
#include "../displays/nextion.h"
#endif
#ifndef DUMMYDISPLAY
void loopDspTask(void * pvParameters);
class Display {
public:
uint16_t currentPlItem;
uint16_t numOfNextStation;
displayMode_e _mode;
public:
Display() {};
displayMode_e mode() { return _mode; }
void mode(displayMode_e m) { _mode=m; }
void init();
void loop();
void _start();
bool ready() { return _bootStep==2; }
void resetQueue();
void putRequest(displayRequestType_e type, int payload=0);
void flip();
void invert();
bool deepsleep();
void wakeup();
void setContrast();
void printPLitem(uint8_t pos, const char* item);
private:
ScrollWidget _meta, _title1, _plcurrent;
ScrollWidget *_weather;
ScrollWidget *_title2;
BitrateWidget *_fullbitrate;
FillWidget *_metabackground, *_plbackground;
SliderWidget *_volbar, *_heapbar;
Pager _pager;
Page _footer;
VuWidget *_vuwidget;
NumWidget _nums;
ProgressWidget _testprogress;
ClockWidget _clock;
Page *_boot;
TextWidget *_bootstring, *_volip, *_voltxt, *_rssi, *_bitrate;
Ticker _returnTicker;
uint8_t _bootStep;
void _time(bool redraw = false);
void _apScreen();
void _swichMode(displayMode_e newmode);
void _drawPlaylist();
void _volume();
void _title();
void _station();
void _drawNextStationNum(uint16_t num);
void _createDspTask();
void _showDialog(const char *title);
void _buildPager();
void _bootScreen();
void _setReturnTicker(uint8_t time_s);
void _layoutChange(bool played);
void _setRSSI(int rssi);
};
#else
class Display {
public:
uint16_t currentPlItem;
uint16_t numOfNextStation;
displayMode_e _mode;
public:
Display() {};
displayMode_e mode() { return _mode; }
void mode(displayMode_e m) { _mode=m; }
void init();
void _start();
void putRequest(displayRequestType_e type, int payload=0);
void loop(){}
bool ready() { return true; }
void resetQueue(){}
void centerText(const char* text, byte y, uint16_t fg, uint16_t bg){}
void rightText(const char* text, byte y, uint16_t fg, uint16_t bg){}
void flip(){}
void invert(){}
void setContrast(){}
bool deepsleep(){return true;}
void wakeup(){}
void printPLitem(uint8_t pos, const char* item){}
};
#endif
extern Display display;
#endif