From a043f33b3b02691709b24f793b77280e1f84972d Mon Sep 17 00:00:00 2001 From: e2002 Date: Wed, 28 Dec 2022 10:10:00 +0300 Subject: [PATCH] netserver_queue --- yoRadio/data/www/script.js.gz | Bin 5535 -> 5555 bytes yoRadio/src/core/display.cpp | 2 +- yoRadio/src/core/netserver.cpp | 171 ++++++++++-------- yoRadio/src/core/netserver.h | 8 + yoRadio/src/core/network.cpp | 2 + yoRadio/src/core/options.h | 2 +- yoRadio/src/displays/conf/displayST7789conf.h | 2 +- yoRadio/src/displays/widgets/widgets.cpp | 2 +- 8 files changed, 108 insertions(+), 81 deletions(-) diff --git a/yoRadio/data/www/script.js.gz b/yoRadio/data/www/script.js.gz index 641db6b39b036214aa771fa6385a438d572d2314..dd48ad3e036a24d5b7ce967951ee77ea5bc9eb7f 100644 GIT binary patch delta 5086 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

(RN22ZLmn)2z9k&XgS#*-ld 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 ", config.station.title); } break; + case VOLUME: sprintf (wsbuf, "{\"vol\": %d}", config.store.volume); break; + case NRSSI: sprintf (wsbuf, "{\"rssi\": %d}", rssi); /*rssi = 255;*/ break; + case SDPOS: sprintf (wsbuf, "{\"sdpos\": %d,\"sdend\": %d,\"sdtpos\": %d,\"sdtend\": %d}", player.getFilePos(), player.getFileSize(), player.getAudioCurrentTime(), player.getAudioFileDuration()); break; + case SDLEN: sprintf (wsbuf, "{\"sdmin\": %d,\"sdmax\": %d}", player.sd_min, player.sd_max); break; + case SDSNUFFLE: sprintf (wsbuf, "{\"snuffle\": %d}", config.sdSnuffle); break; + case BITRATE: sprintf (wsbuf, "{\"bitrate\": %d}", config.station.bitrate); break; + case MODE: sprintf (wsbuf, "{\"mode\": \"%s\"}", player.mode == PLAYING ? "playing" : "stopped"); break; + case EQUALIZER: sprintf (wsbuf, "{\"bass\": %d, \"middle\": %d, \"trebble\": %d}", config.store.bass, config.store.middle, config.store.trebble); break; + case BALANCE: sprintf (wsbuf, "{\"balance\": %d}", config.store.balance); break; + default: break; + } + if (strlen(wsbuf) > 0) { + if (clientId == 0) { websocket.textAll(wsbuf); }else{ websocket.text(clientId, wsbuf); } + #ifdef MQTT_HOST + if (clientId == 0 && (request.type == STATION || request.type == ITEM || request.type == TITLE || request.type == MODE)) mqttPublishStatus(); + if (clientId == 0 && request.type == VOLUME) mqttPublishVolume(); + #endif + } + } +} + void NetServer::loop() { if (shouldReboot) { Serial.println("Rebooting..."); @@ -164,7 +251,8 @@ void NetServer::loop() { case IMWIFI: config.saveWifi(); importRequest = IMDONE; break; default: break; } - if (rssi < 255) requestOnChange(NRSSI, 0); + //if (rssi < 255) requestOnChange(NRSSI, 0); + processQueue(); } #if IR_PIN!=255 @@ -543,84 +631,13 @@ bool NetServer::importPlaylist() { SPIFFS.remove(TMP_PATH); return false; } -#ifndef DSP_NOT_FLIPPED - #define DSP_CAN_FLIPPED true -#else - #define DSP_CAN_FLIPPED false -#endif -#if !defined(HIDE_WEATHER) && (!defined(DUMMYDISPLAY) && !defined(USE_NEXTION)) - #define SHOW_WEATHER true -#else - #define SHOW_WEATHER false -#endif -char wsbuf[BUFLEN * 2]; + void NetServer::requestOnChange(requestType_e request, uint8_t clientId) { //char buf[BUFLEN * 2] = { 0 }; - memset(wsbuf, 0, BUFLEN * 2); - switch (request) { - case PLAYLIST: getPlaylist(clientId); break; - case PLAYLISTSAVED: config.indexPlaylist(); config.initPlaylist(); getPlaylist(clientId); break; - case GETACTIVE: { - bool dbgact = false, nxtn=false; - String act = F("\"group_wifi\","); - if (network.status == CONNECTED) { - act += F("\"group_system\","); - if (BRIGHTNESS_PIN != 255 || DSP_CAN_FLIPPED || DSP_MODEL == DSP_NOKIA5110 || dbgact) act += F("\"group_display\","); - #ifdef USE_NEXTION - act += F("\"group_nextion\","); - if (!SHOW_WEATHER || dbgact) act += F("\"group_weather\","); - nxtn=true; - #endif - #if defined(LCD_I2C) || defined(DSP_OLED) - act += F("\"group_oled\","); - #endif - #ifndef HIDE_VU - act += F("\"group_vu\","); - #endif - if (BRIGHTNESS_PIN != 255 || nxtn || dbgact) act += F("\"group_brightness\","); - if (DSP_CAN_FLIPPED || dbgact) act += F("\"group_tft\","); - if (TS_MODEL != TS_MODEL_UNDEFINED || dbgact) act += F("\"group_touch\","); - if (DSP_MODEL == DSP_NOKIA5110) act += F("\"group_nokia\","); - act += F("\"group_timezone\","); - if (SHOW_WEATHER || dbgact) act += F("\"group_weather\","); - act += F("\"group_controls\","); - if (ENC_BTNL != 255 || ENC2_BTNL != 255 || dbgact) act += F("\"group_encoder\","); - if (IR_PIN != 255 || dbgact) act += F("\"group_ir\","); - } - act = act.substring(0, act.length() - 1); - sprintf (wsbuf, "{\"act\":[%s]}", act.c_str()); - break; - } - case GETMODE: sprintf (wsbuf, "{\"pmode\":\"%s\"}", network.status == CONNECTED ? "player" : "ap"); break; - case GETINDEX: requestOnChange(STATION, clientId); requestOnChange(TITLE, clientId); requestOnChange(VOLUME, clientId); requestOnChange(EQUALIZER, clientId); requestOnChange(BALANCE, clientId); requestOnChange(BITRATE, clientId); requestOnChange(MODE, clientId); if (config.store.play_mode==PM_SDCARD) { requestOnChange(SDPOS, clientId); requestOnChange(SDLEN, clientId); requestOnChange(SDSNUFFLE, clientId); } return; break; - case GETSYSTEM: sprintf (wsbuf, "{\"sst\":%d,\"aif\":%d,\"vu\":%d,\"softr\":%d}", config.store.smartstart != 2, config.store.audioinfo, config.store.vumeter, config.store.softapdelay); break; - case GETSCREEN: sprintf (wsbuf, "{\"flip\":%d,\"inv\":%d,\"nump\":%d,\"tsf\":%d,\"tsd\":%d,\"dspon\":%d,\"br\":%d,\"con\":%d}", config.store.flipscreen, config.store.invertdisplay, config.store.numplaylist, config.store.fliptouch, config.store.dbgtouch, config.store.dspon, config.store.brightness, config.store.contrast); break; - case GETTIMEZONE: sprintf (wsbuf, "{\"tzh\":%d,\"tzm\":%d,\"sntp1\":\"%s\",\"sntp2\":\"%s\"}", config.store.tzHour, config.store.tzMin, config.store.sntp1, config.store.sntp2); break; - case GETWEATHER: sprintf (wsbuf, "{\"wen\":%d,\"wlat\":\"%s\",\"wlon\":\"%s\",\"wkey\":\"%s\"}", config.store.showweather, config.store.weatherlat, config.store.weatherlon, config.store.weatherkey); break; - case GETCONTROLS: sprintf (wsbuf, "{\"vols\":%d,\"enca\":%d,\"irtl\":%d}", config.store.volsteps, config.store.encacc, config.store.irtlp); break; - case DSPON: sprintf (wsbuf, "{\"dspontrue\":%d}", 1); break; - case STATION: requestOnChange(STATIONNAME, clientId); requestOnChange(ITEM, clientId); break; - case STATIONNAME: sprintf (wsbuf, "{\"nameset\": \"%s\"}", config.station.name); break; - case ITEM: sprintf (wsbuf, "{\"current\": %d}", config.store.lastStation); break; - case TITLE: sprintf (wsbuf, "{\"meta\": \"%s\"}", config.station.title); if (player.requestToStart) { telnet.info(); player.requestToStart = false; } else { telnet.printf("##CLI.META#: %s\n> ", config.station.title); } break; - case VOLUME: sprintf (wsbuf, "{\"vol\": %d}", config.store.volume); break; - case NRSSI: sprintf (wsbuf, "{\"rssi\": %d}", rssi); rssi = 255; break; - case SDPOS: sprintf (wsbuf, "{\"sdpos\": %d,\"sdend\": %d,\"sdtpos\": %d,\"sdtend\": %d}", player.getFilePos(), player.getFileSize(), player.getAudioCurrentTime(), player.getAudioFileDuration()); break; - case SDLEN: sprintf (wsbuf, "{\"sdmin\": %d,\"sdmax\": %d}", player.sd_min, player.sd_max); break; - case SDSNUFFLE: sprintf (wsbuf, "{\"snuffle\": %d}", config.sdSnuffle); break; - case BITRATE: sprintf (wsbuf, "{\"bitrate\": %d}", config.station.bitrate); break; - case MODE: sprintf (wsbuf, "{\"mode\": \"%s\"}", player.mode == PLAYING ? "playing" : "stopped"); break; - case EQUALIZER: sprintf (wsbuf, "{\"bass\": %d, \"middle\": %d, \"trebble\": %d}", config.store.bass, config.store.middle, config.store.trebble); break; - case BALANCE: sprintf (wsbuf, "{\"balance\": %d}", config.store.balance); break; - default: break; - } - if (strlen(wsbuf) > 0) { - if (clientId == 0) { websocket.textAll(wsbuf); }else{ websocket.text(clientId, wsbuf); } -#ifdef MQTT_HOST - if (clientId == 0 && (request == STATION || request == ITEM || request == TITLE || request == MODE)) mqttPublishStatus(); - if (clientId == 0 && request == VOLUME) mqttPublishVolume(); -#endif - } + nsRequestParams_t nsrequest; + nsrequest.type = request; + nsrequest.clientId = clientId; + xQueueSend(nsQueue, &nsrequest, portMAX_DELAY); } String processor(const String& var) { // %Templates% diff --git a/yoRadio/src/core/netserver.h b/yoRadio/src/core/netserver.h index 3c3b46b..83a4407 100644 --- a/yoRadio/src/core/netserver.h +++ b/yoRadio/src/core/netserver.h @@ -8,6 +8,12 @@ enum requestType_e : uint8_t { PLAYLIST=1, STATION=2, STATIONNAME=3, ITEM=4, TITLE=5, VOLUME=6, NRSSI=7, BITRATE=8, MODE=9, EQUALIZER=10, BALANCE=11, PLAYLISTSAVED=12, GETMODE=13, GETINDEX=14, GETACTIVE=15, GETSYSTEM=16, GETSCREEN=17, GETTIMEZONE=18, GETWEATHER=19, GETCONTROLS=20, DSPON=21, SDPOS=22, SDLEN=23, SDSNUFFLE=24 }; enum import_e : uint8_t { IMDONE=0, IMPL=1, IMWIFI=2 }; +struct nsRequestParams_t +{ + requestType_e type; + uint8_t clientId; +}; + class NetServer { public: import_e importRequest; @@ -28,12 +34,14 @@ class NetServer { #endif private: requestType_e request; + QueueHandle_t nsQueue; int rssi; void getPlaylist(uint8_t clientId); bool importPlaylist(); static size_t chunkedHtmlPageCallback(uint8_t* buffer, size_t maxLen, size_t index); static void beginUpload(AsyncWebServerRequest *request); static void beginUpdate(AsyncWebServerRequest *request); + void processQueue(); }; extern NetServer netserver; diff --git a/yoRadio/src/core/network.cpp b/yoRadio/src/core/network.cpp index c5cb115..fc96c90 100644 --- a/yoRadio/src/core/network.cpp +++ b/yoRadio/src/core/network.cpp @@ -44,7 +44,9 @@ void ticks() { if(divrssi) { int rs = WiFi.RSSI(); netserver.setRSSI(rs); + netserver.requestOnChange(NRSSI, 0); display.putRequest(DSPRSSI, rs); + } } diff --git a/yoRadio/src/core/options.h b/yoRadio/src/core/options.h index 2f286bc..b9d6ab5 100644 --- a/yoRadio/src/core/options.h +++ b/yoRadio/src/core/options.h @@ -1,7 +1,7 @@ #ifndef options_h #define options_h -#define YOVERSION "0.8.855" +#define YOVERSION "0.8.883" /******************************************************* DO NOT EDIT THIS FILE. diff --git a/yoRadio/src/displays/conf/displayST7789conf.h b/yoRadio/src/displays/conf/displayST7789conf.h index fa7bcd3..b87d889 100644 --- a/yoRadio/src/displays/conf/displayST7789conf.h +++ b/yoRadio/src/displays/conf/displayST7789conf.h @@ -50,7 +50,7 @@ const WidgetConfig bootWdtConf PROGMEM = { 0, 162, 1, WA_CENTER }; const ProgressConfig bootPrgConf PROGMEM = { 90, 14, 4 }; /* BANDS */ /* { onebandwidth, onebandheight, bandsHspace, bandsVspace, numofbands, fadespeed } */ -const VUBandsConfig bandsConf PROGMEM = { 24, 100, 4, 2, 10, 5 }; +const VUBandsConfig bandsConf PROGMEM = { 24, 100, 4, 2, 10, 4 }; /* STRINGS */ const char numtxtFmt[] PROGMEM = "%d"; diff --git a/yoRadio/src/displays/widgets/widgets.cpp b/yoRadio/src/displays/widgets/widgets.cpp index 9fcb707..031ad60 100644 --- a/yoRadio/src/displays/widgets/widgets.cpp +++ b/yoRadio/src/displays/widgets/widgets.cpp @@ -282,7 +282,7 @@ void VuWidget::_draw(){ #if !defined(USE_NEXTION) && I2S_DOUT==255 static uint8_t cc = 0; cc++; - if(cc>1){ + if(cc>0){ player.getVUlevel(); cc=0; }