This commit is contained in:
e2002
2024-12-26 09:58:19 +03:00
parent 27e33a1bc8
commit 775590f213
26 changed files with 172 additions and 70 deletions

View File

@@ -1,8 +1,8 @@
#ifndef COMMON_H
#define COMMON_H
enum displayMode_e { PLAYER, VOL, STATIONS, NUMBERS, LOST, UPDATING, INFO, SETTINGS, TIMEZONE, WIFI, CLEAR, SLEEPING, SDCHANGE };
enum pages_e : uint8_t { PG_PLAYER=0, PG_DIALOG=1, PG_PLAYLIST=2 };
enum displayMode_e { PLAYER, VOL, STATIONS, NUMBERS, LOST, UPDATING, INFO, SETTINGS, TIMEZONE, WIFI, CLEAR, SLEEPING, SDCHANGE, SCREENSAVER };
enum pages_e : uint8_t { PG_PLAYER=0, PG_DIALOG=1, PG_PLAYLIST=2, PG_SCREENSAVER=3 };
enum displayRequestType_e { BOOTSTRING, NEWMODE, CLOCK, NEWTITLE, NEWSTATION, NEXTSTATION, DRAWPLAYLIST, DRAWVOL, DBITRATE, AUDIOINFO, SHOWVUMETER, DSPRSSI, SHOWWEATHER, NEWWEATHER, PSTOP, PSTART, DSP_START, WAITFORSD, SDFILEINDEX, NEWIP, NOPE };
struct requestParams_t

View File

@@ -33,6 +33,8 @@ bool Config::_isFSempty() {
void Config::init() {
EEPROM.begin(EEPROM_SIZE);
sdResumePos = 0;
screensaverTicks = 0;
isScreensaver = false;
bootInfo();
#if RTCSUPPORTED
_rtcFound = false;
@@ -86,6 +88,10 @@ void Config::_setupVersion(){
uint16_t currentVersion = store.version;
switch(currentVersion){
case 1:
saveValue(&store.screensaverEnabled, false);
saveValue(&store.screensaverTimeout, (uint16_t)20);
break;
case 2:
break;
default:
break;
@@ -339,6 +345,8 @@ void Config::setDefaults() {
store.forcemono = false;
store.i2sinternal = false;
store.rotate90 = false;
store.screensaverEnabled = false;
store.screensaverTimeout = 20;
eepromWrite(EEPROM_START, store);
}

View File

@@ -45,7 +45,7 @@
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
#define ESP_ARDUINO_3 1
#endif
#define CONFIG_VERSION 1
#define CONFIG_VERSION 2
enum playMode_e : uint8_t { PM_WEB=0, PM_SDCARD=1 };
enum BitrateFormat { BF_UNCNOWN, BF_MP3, BF_AAC, BF_FLAC, BF_OGG, BF_WAV };
@@ -133,6 +133,8 @@ struct config_t
bool forcemono;
bool i2sinternal;
bool rotate90;
bool screensaverEnabled;
uint16_t screensaverTimeout;
};
#if IR_PIN!=255
@@ -175,6 +177,8 @@ class Config {
uint32_t sdResumePos;
bool emptyFS;
uint16_t vuThreshold;
uint16_t screensaverTicks;
bool isScreensaver;
public:
Config() {};
//void save();

View File

@@ -252,6 +252,10 @@ void irLoop() {
if(config.ircodes.irVals[target][j]==irResults.value){
if (network.status != CONNECTED && network.status!=SDREADY && target!=IR_AST) return;
if(target!=IR_AST && display.mode()==LOST) return;
if (display.mode() == SCREENSAVER) {
display.putRequest(NEWMODE, PLAYER);
return;
}
switch (target){
case IR_PLAY: {
irBlink();
@@ -483,6 +487,12 @@ void onBtnClick(int id) {
if (display.mode() == PLAYER) {
player.toggle();
}
if (display.mode() == SCREENSAVER) {
display.putRequest(NEWMODE, PLAYER);
#ifdef DSP_LCD
delay(200);
#endif
}
if (display.mode() == STATIONS) {
display.putRequest(NEWMODE, PLAYER);
#ifdef DSP_LCD
@@ -530,6 +540,10 @@ void onBtnClick(int id) {
}
void onBtnDoubleClick(int id) {
if (display.mode() == SCREENSAVER) {
display.putRequest(NEWMODE, PLAYER);
return;
}
switch ((controlEvt_e)id) {
case EVT_BTNLEFT: {
if (display.mode() != PLAYER) return;

View File

@@ -16,7 +16,7 @@ Nextion nextion;
//============================================================================================================================
DspCore dsp;
Page *pages[] = { new Page(), new Page(), new Page() };
Page *pages[] = { new Page(), new Page(), new Page(), new Page() };
#ifndef DSQ_SEND_DELAY
#define DSQ_SEND_DELAY portMAX_DELAY
@@ -153,6 +153,7 @@ void Display::_buildPager(){
#endif
if(_vuwidget) pages[PG_PLAYER]->addWidget( _vuwidget);
pages[PG_PLAYER]->addWidget(&_clock);
pages[PG_SCREENSAVER]->addWidget(&_clock);
pages[PG_PLAYER]->addPage(&_footer);
if(_metabackground) pages[PG_DIALOG]->addWidget( _metabackground);
@@ -267,6 +268,7 @@ void Display::_swichMode(displayMode_e newmode) {
_mode = newmode;
dsp.setScrollId(NULL);
if (newmode == PLAYER) {
_clock.moveBack();
#ifdef DSP_LCD
dsp.clearDsp();
#endif
@@ -278,9 +280,17 @@ void Display::_swichMode(displayMode_e newmode) {
_meta.setAlign(metaConf.widget.align);
_meta.setText(config.station.name);
_nums.setText("");
config.isScreensaver = false;
_pager.setPage( pages[PG_PLAYER]);
pm.on_display_player();
}
if (newmode == SCREENSAVER) {
config.isScreensaver = true;
_pager.setPage( pages[PG_SCREENSAVER]);
}else{
config.screensaverTicks=SCREENSAVERSTARTUPDELAY;
config.isScreensaver = false;
}
if (newmode == VOL) {
#ifndef HIDE_IP
_showDialog(const_DlgVolume);
@@ -377,7 +387,7 @@ void Display::loop() {
switch (request.type){
case NEWMODE: _swichMode((displayMode_e)request.payload); break;
case CLOCK:
if(_mode==PLAYER) _time();
if(_mode==PLAYER || _mode==SCREENSAVER) _time();
/*#ifdef USE_NEXTION
if(_mode==TIMEZONE) nextion.localTime(network.timeinfo);
if(_mode==INFO) nextion.rssi();
@@ -522,6 +532,8 @@ void Display::_time(bool redraw) {
config.setBrightness();
}
#endif
if(config.isScreensaver && network.timeinfo.tm_sec % 60 == 0)
_clock.moveTo({clockConf.left, random(TFT_FRAMEWDT+clockConf.textsize, (dsp.height()-TFT_FRAMEWDT*2)), 0});
_clock.draw();
/*#ifdef USE_NEXTION
nextion.printClock(network.timeinfo);

View File

@@ -294,7 +294,7 @@ void NetServer::processQueue(){
config.store.softapdelay,
config.vuThreshold);
break;
case GETSCREEN: sprintf (wsbuf, "{\"flip\":%d,\"inv\":%d,\"nump\":%d,\"tsf\":%d,\"tsd\":%d,\"dspon\":%d,\"br\":%d,\"con\":%d}",
case GETSCREEN: sprintf (wsbuf, "{\"flip\":%d,\"inv\":%d,\"nump\":%d,\"tsf\":%d,\"tsd\":%d,\"dspon\":%d,\"br\":%d,\"con\":%d,\"scre\":%d,\"scrt\":%d}",
config.store.flipscreen,
config.store.invertdisplay,
config.store.numplaylist,
@@ -302,7 +302,9 @@ void NetServer::processQueue(){
config.store.dbgtouch,
config.store.dspon,
config.store.brightness,
config.store.contrast);
config.store.contrast,
config.store.screensaverEnabled,
config.store.screensaverTimeout);
break;
case GETTIMEZONE: sprintf (wsbuf, "{\"tzh\":%d,\"tzm\":%d,\"sntp1\":\"%s\",\"sntp2\":\"%s\"}",
config.store.tzHour,
@@ -475,6 +477,23 @@ void NetServer::onWsMessage(void *arg, uint8_t *data, size_t len, uint8_t client
display.setContrast();
return;
}
if (strcmp(cmd, "screensaverenabled") == 0) {
bool valb = static_cast<bool>(atoi(val));
config.saveValue(&config.store.screensaverEnabled, valb);
#ifndef DSP_LCD
display.putRequest(NEWMODE, PLAYER);
#endif
return;
}
if (strcmp(cmd, "screensavertimeout") == 0) {
uint16_t valb = atoi(val);
valb = constrain(valb,0,65520);
config.saveValue(&config.store.screensaverTimeout, valb);
#ifndef DSP_LCD
display.putRequest(NEWMODE, PLAYER);
#endif
return;
}
if (strcmp(cmd, "tzh") == 0) {
int8_t vali = atoi(val);
config.saveValue(&config.store.tzHour, vali);

View File

@@ -49,6 +49,11 @@ void ticks() {
network.forceWeather = true;
}
}
#ifndef DSP_LCD
if(config.store.screensaverEnabled && display.mode()==PLAYER && !player.isRunning()){
if(config.screensaverTicks++ > config.store.screensaverTimeout+SCREENSAVERSTARTUPDELAY) display.putRequest(NEWMODE, SCREENSAVER);
}
#endif
#if RTCSUPPORTED
if(config.isRTCFound()){
rtc.getTime(&network.timeinfo);

View File

@@ -1,7 +1,7 @@
#ifndef options_h
#define options_h
#define YOVERSION "0.9.390"
#define YOVERSION "0.9.399"
/*******************************************************
DO NOT EDIT THIS FILE.
@@ -479,4 +479,7 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti
#define HOOPSENb 2
#endif
#ifndef SCREENSAVERSTARTUPDELAY
#define SCREENSAVERSTARTUPDELAY 5
#endif
#endif

View File

@@ -190,6 +190,7 @@ void Player::_play(uint16_t stationId) {
config.setDspOn(1);
config.vuThreshold = 0;
//display.putRequest(PSTOP);
config.screensaverTicks=SCREENSAVERSTARTUPDELAY;
if(config.getMode()!=PM_SDCARD) {
display.putRequest(PSTOP);
}
@@ -224,6 +225,7 @@ void Player::_play(uint16_t stationId) {
config.setSmartStart(1);
netserver.requestOnChange(MODE, 0);
setOutputPins(true);
display.putRequest(NEWMODE, PLAYER);
display.putRequest(PSTART);
if (player_on_start_play) player_on_start_play();
pm.on_start_play();

View File

@@ -5,7 +5,7 @@
#include "display.h"
#if defined(SD_SPIPINS) || SD_HSPI
SPIClass SDSPI(HSPI);
SPIClass SDSPI(HOOPSENb);
#define SDREALSPI SDSPI
#else
#define SDREALSPI SPI