From 345510a58b802cbbb18f2b59f3cc2f237de01a87 Mon Sep 17 00:00:00 2001 From: e2002 Date: Tue, 20 Dec 2022 15:37:08 +0300 Subject: [PATCH] sd_i2s+sd_vs_v6 --- yoRadio/data/www/script.js.gz | Bin 5415 -> 5459 bytes yoRadio/src/core/netserver.cpp | 47 ++++++++++++++++++--------------- yoRadio/src/core/netserver.h | 2 +- yoRadio/src/core/player.cpp | 12 +++++++++ yoRadio/src/core/player.h | 3 +++ yoRadio/yoRadio.ino | 5 ++++ 6 files changed, 46 insertions(+), 23 deletions(-) diff --git a/yoRadio/data/www/script.js.gz b/yoRadio/data/www/script.js.gz index 3909b63de90af541e71f0d46cf5dd7758993ebd6..52bca8b94687ba11e7e1aa5e7de515b6f5975388 100644 GIT binary patch delta 5373 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 b|5q{zV~td0VOanGOTIFZ delta 5329 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 j&H=SA&>QCP|CLO_SV`qEN+OF38O;8*|vf(tP| diff --git a/yoRadio/src/core/netserver.cpp b/yoRadio/src/core/netserver.cpp index 4bc7e5a..3ef3f1d 100644 --- a/yoRadio/src/core/netserver.cpp +++ b/yoRadio/src/core/netserver.cpp @@ -544,8 +544,10 @@ bool NetServer::importPlaylist() { #else #define SHOW_WEATHER false #endif +char wsbuf[BUFLEN * 2]; void NetServer::requestOnChange(requestType_e request, uint8_t clientId) { - char buf[BUFLEN * 2] = { 0 }; + //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; @@ -577,30 +579,31 @@ void NetServer::requestOnChange(requestType_e request, uint8_t clientId) { if (IR_PIN != 255 || dbgact) act += F("\"group_ir\","); } act = act.substring(0, act.length() - 1); - sprintf (buf, "{\"act\":[%s]}", act.c_str()); + sprintf (wsbuf, "{\"act\":[%s]}", act.c_str()); break; } - case GETMODE: sprintf (buf, "{\"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); return; break; - case GETSYSTEM: sprintf (buf, "{\"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 (buf, "{\"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 (buf, "{\"tzh\":%d,\"tzm\":%d,\"sntp1\":\"%s\",\"sntp2\":\"%s\"}", config.store.tzHour, config.store.tzMin, config.store.sntp1, config.store.sntp2); break; - case GETWEATHER: sprintf (buf, "{\"wen\":%d,\"wlat\":\"%s\",\"wlon\":\"%s\",\"wkey\":\"%s\"}", config.store.showweather, config.store.weatherlat, config.store.weatherlon, config.store.weatherkey); break; - case GETCONTROLS: sprintf (buf, "{\"vols\":%d,\"enca\":%d,\"irtl\":%d}", config.store.volsteps, config.store.encacc, config.store.irtlp); break; - case DSPON: sprintf (buf, "{\"dspontrue\":%d}", 1); break; - case STATION: sprintf (buf, "{\"nameset\": \"%s\"}", config.station.name); requestOnChange(ITEM, clientId); break; - case ITEM: sprintf (buf, "{\"current\": %d}", config.store.lastStation); break; - case TITLE: sprintf (buf, "{\"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 (buf, "{\"vol\": %d}", config.store.volume); break; - case NRSSI: sprintf (buf, "{\"rssi\": %d}", rssi); rssi = 255; break; - case SDPOS: if(player.getFilePos()>295903) sprintf (buf, "{\"sdpos\": %d,\"sdend\": %d,\"sdtpos\": %d,\"sdtend\": %d}", player.getFilePos(), player.getFileSize(), player.getAudioCurrentTime(), player.getAudioFileDuration()); break; - case BITRATE: sprintf (buf, "{\"bitrate\": %d}", config.station.bitrate); break; - case MODE: sprintf (buf, "{\"mode\": \"%s\"}", player.mode == PLAYING ? "playing" : "stopped"); break; - case EQUALIZER: sprintf (buf, "{\"bass\": %d, \"middle\": %d, \"trebble\": %d}", config.store.bass, config.store.middle, config.store.trebble); break; - case BALANCE: sprintf (buf, "{\"balance\": %d}", config.store.balance); 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); 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 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; } - if (strlen(buf) > 0) { - if (clientId == 0) { websocket.textAll(buf); }else{ websocket.text(clientId, buf); } + 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(); diff --git a/yoRadio/src/core/netserver.h b/yoRadio/src/core/netserver.h index 940fae3..9dc9b57 100644 --- a/yoRadio/src/core/netserver.h +++ b/yoRadio/src/core/netserver.h @@ -5,7 +5,7 @@ #include "ESPAsyncWebServer.h" #include "AsyncUDP.h" -enum requestType_e : uint8_t { PLAYLIST=1, STATION=2, ITEM=3, TITLE=4, VOLUME=5, NRSSI=6, BITRATE=7, MODE=8, EQUALIZER=9, BALANCE=10, PLAYLISTSAVED=11, GETMODE=12, GETINDEX=13, GETACTIVE=14, GETSYSTEM=15, GETSCREEN=16, GETTIMEZONE=17, GETWEATHER=18, GETCONTROLS=19, DSPON=20, SDPOS=21 }; +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 }; enum import_e : uint8_t { IMDONE=0, IMPL=1, IMWIFI=2 }; class NetServer { diff --git a/yoRadio/src/core/player.cpp b/yoRadio/src/core/player.cpp index 6efbe78..fb0531e 100644 --- a/yoRadio/src/core/player.cpp +++ b/yoRadio/src/core/player.cpp @@ -82,6 +82,18 @@ void Player::stop(const char *nttl){ if (player_on_stop_play) player_on_stop_play(); } +void Player::initHeaders(const char *file) { + if(strlen(file)==0) return; + connecttoFS(SD,file); + for(int c=0;c<20;c++) player.loopreader(); + //netserver.requestOnChange(SDPOS, 0); + setDefaults(); +} + +void Player::loopreader() { + Audio::loop(); +} + void Player::loop() { if (mode == PLAYING) { xSemaphoreTake(playmutex, portMAX_DELAY); diff --git a/yoRadio/src/core/player.h b/yoRadio/src/core/player.h index d82e9c2..b8a8901 100644 --- a/yoRadio/src/core/player.h +++ b/yoRadio/src/core/player.h @@ -26,10 +26,13 @@ class Player: public Audio { bool requestToStart; void zeroRequest(); SemaphoreHandle_t playmutex=NULL; + bool lockOutput = true; public: Player(); void init(); void loop(); + void initHeaders(const char *file); + void loopreader(); void play(uint16_t stationId, uint32_t filePos=0); void stop(const char *nttl = NULL); void prev(); diff --git a/yoRadio/yoRadio.ino b/yoRadio/yoRadio.ino index 3845484..055bb04 100644 --- a/yoRadio/yoRadio.ino +++ b/yoRadio/yoRadio.ino @@ -55,6 +55,8 @@ void setup() { #ifdef MQTT_HOST mqttInit(); #endif + if (config.store.play_mode==PM_SDCARD) player.initHeaders(config.station.url); + player.lockOutput=false; if (config.store.smartstart == 1) player.play(config.store.lastStation); } @@ -96,6 +98,7 @@ void checkConnection(){ //=============================================// void audio_info(const char *info) { + if(player.lockOutput) return; if(config.store.audioinfo) telnet.printf("##AUDIO.INFO#: %s\n", info); #ifdef USE_NEXTION nextion.audioinfo(info); @@ -167,6 +170,7 @@ void audio_id3artist(const char *info){ } void audio_id3album(const char *info){ + if(player.lockOutput) return; if(printable(info)){ if(strlen(config.station.title)==0){ config.setTitle(info); @@ -191,6 +195,7 @@ void audio_beginSDread(){ } void audio_id3data(const char *info){ //id3 metadata + if(player.lockOutput) return; telnet.printf("##AUDIO.ID3#: %s\n", info); } void audio_eof_mp3(const char *info){ //end of file