From b840b4418ad60be48ffcf2eb83745afc8f9fc6bd Mon Sep 17 00:00:00 2001 From: e2002 Date: Mon, 11 Apr 2022 13:18:33 +0300 Subject: [PATCH] v0.6.200 --- Controls.md | 2 +- README.md | 11 +- exsamples/displayhandlers.ino | 138 ++++- yoRadio/audiohandlers.ino | 4 +- yoRadio/config.cpp | 2 +- yoRadio/controls.cpp | 62 ++- yoRadio/data/www/dragpl.js | 40 -- yoRadio/data/www/dragpl.js.gz | Bin 0 -> 440 bytes yoRadio/data/www/elogo.png | Bin 3691 -> 2126 bytes yoRadio/data/www/elogo100.png | Bin 17854 -> 6438 bytes yoRadio/data/www/index.html | 4 +- yoRadio/data/www/script.js | 349 ------------ yoRadio/data/www/script.js.gz | Bin 0 -> 3252 bytes yoRadio/data/www/style.css | 527 ------------------ yoRadio/data/www/style.css.gz | Bin 0 -> 9521 bytes yoRadio/display.cpp | 182 ++++-- yoRadio/display.h | 56 +- yoRadio/netserver.cpp | 52 +- yoRadio/netserver.h | 2 + yoRadio/options.h | 3 +- yoRadio/player.cpp | 16 +- .../Adafruit_GC9106Ex/Adafruit_GC9106Ex.cpp | 1 - yoRadio/src/audioI2S/Audio.cpp | 4 +- yoRadio/src/audioI2S/AudioEx.h | 5 +- yoRadio/src/audioVS1053/audioVS1053Ex.cpp | 2 +- yoRadio/src/audioVS1053/audioVS1053Ex.h | 4 +- yoRadio/src/displays/displayGC9106.cpp | 7 +- yoRadio/src/displays/displayGC9106.h | 2 +- yoRadio/src/displays/displayILI9341.h | 4 +- yoRadio/src/displays/displayN5110.h | 4 +- yoRadio/src/displays/displaySH1106.h | 4 +- yoRadio/src/displays/displaySSD1305.h | 4 +- yoRadio/src/displays/displaySSD1306.cpp | 2 +- yoRadio/src/displays/displaySSD1306.h | 2 +- yoRadio/src/displays/displaySSD1327.cpp | 87 ++- yoRadio/src/displays/displaySSD1327.h | 16 +- yoRadio/src/displays/displayST7735.h | 4 +- yoRadio/src/displays/displayST7789.h | 4 +- yoRadio/src/displays/fonts/bootlogobw.h | 163 ++++++ yoRadio/telnet.cpp | 18 +- yoRadio/yoRadio.ino | 5 +- 41 files changed, 661 insertions(+), 1131 deletions(-) delete mode 100644 yoRadio/data/www/dragpl.js create mode 100644 yoRadio/data/www/dragpl.js.gz delete mode 100644 yoRadio/data/www/script.js create mode 100644 yoRadio/data/www/script.js.gz delete mode 100644 yoRadio/data/www/style.css create mode 100644 yoRadio/data/www/style.css.gz create mode 100644 yoRadio/src/displays/fonts/bootlogobw.h diff --git a/Controls.md b/Controls.md index 56907cc..fc06a98 100644 --- a/Controls.md +++ b/Controls.md @@ -47,7 +47,7 @@ You can connect one or two encoders to replace/complete the buttons. One encoder - ENCODER2\ rotate left: (ENC2_BTNL) if not pressed - switch to PLAYLIST mode and move up, if pressed - volume down\ rotate right: (ENC2_BTNR) if not pressed - switch to PLAYLIST mode and move down, if pressed - volume up\ - click, dblclick: (ENC2_BTNB) same as BTN_CENTER + click, dblclick: (ENC2_BTNB) toggle between PLAYER/VOLUME mode --- ### IR receiver diff --git a/README.md b/README.md index cd06d9c..8c4e318 100644 --- a/README.md +++ b/README.md @@ -281,8 +281,15 @@ Work is in progress... --- ## Version history -#### v0.6.121 -- fixed compiling error with DSP_GC9106 option +#### v0.6.200 +- please backup your playlist and wifi settings before updating (export) +- accelerated displays up to ~30fps (everything except LCD) +- corrections/additions in the WEB interface (a [full update](#update) is required) +- rewrote [plugin example](https://github.com/e2002/yoradio/blob/main/exsamples/displayhandlers.ino) +- fixed compilation errors on macOS +- changed the logic of the second encoder (switching to the volume control mode by double click) +- optimization, bug fixes +- probably some other things that I forgot about %) #### v0.6.120 - added support for GC9106 160x80 SPI displays diff --git a/exsamples/displayhandlers.ino b/exsamples/displayhandlers.ino index 56d8474..1882168 100644 --- a/exsamples/displayhandlers.ino +++ b/exsamples/displayhandlers.ino @@ -5,23 +5,19 @@ **************************************************************/ -#if DSP_MODEL==DSP_ST7735 -// 3600s = 60 minutes to not flooding -#define WEATHER_REQUEST_INTERVAL 3600 // 60min +#if (DSP_MODEL==DSP_ST7735) || (DSP_MODEL==DSP_ST7789) || (DSP_MODEL==DSP_SSD1327) || (DSP_MODEL==DSP_ILI9341) -#include // https://github.com/Bodmer/OpenWeather -#include // https://github.com/Bodmer/JSON_Decoder +#define WEATHER_REQUEST_INTERVAL 1800 //30min +#define WEATHER_REQUEST_INTERVAL_FAULTY 30 + +#include #include -String api_key = "********************************"; // openweathermap.org API key +const char* host = "api.openweathermap.org"; +const char* lat = "55.7512"; +const char* lon = "37.6184"; +const char* key = "********************************"; -String latitude = "55.7512"; -String longitude = "37.6184"; - -String units = "metric"; -String language = "ru"; - -OW_Weather ow; Ticker ticker; /*********************************************** @@ -33,14 +29,100 @@ char weather[140] = { 0 }; bool weatherRequest = false; TaskHandle_t weatherUpdateTaskHandle; +bool getForecast() { + WiFiClient client; + if (!client.connect(host, 80)) { + Serial.println("## OPENWEATHERMAP ###: connection failed"); + return false; + } + char httpget[250] = {0}; + sprintf(httpget, "GET /data/2.5/weather?lat=%s&lon=%s&units=metric&lang=ru&appid=%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", lat, lon, key, host); + client.print(httpget); + unsigned long timeout = millis(); + while (client.available() == 0) { + if (millis() - timeout > 2000UL) { + Serial.println("## OPENWEATHERMAP ###: client available timeout !"); + client.stop(); + return false; + } + } + timeout = millis(); + String line = ""; + if (client.connected()) { + while (client.available()) + { + line = client.readStringUntil('\n'); + if (strstr(line.c_str(), "\"temp\"") != NULL) { + client.stop(); + break; + } + if ((millis() - timeout) > 500) + { + client.stop(); + Serial.println("## OPENWEATHERMAP ###: client read timeout !"); + return false; + } + } + } + if (strstr(line.c_str(), "\"temp\"") == NULL) { + Serial.println("## OPENWEATHERMAP ###: weather not found !"); + return false; + } + char *tmpe; + char *tmps; + const char* cursor = line.c_str(); + char desc[120], temp[20], hum[20], press[20]; + + tmps = strstr(cursor, "\"description\":\""); + if (tmps == NULL) { Serial.println("## OPENWEATHERMAP ###: description not found !"); return false;} + tmps += 15; + tmpe = strstr(tmps, "\",\""); + if (tmpe == NULL) { Serial.println("## OPENWEATHERMAP ###: description not found !"); return false;} + strlcpy(desc, tmps, tmpe - tmps + 1); + cursor = tmpe + 3; + + tmps = strstr(cursor, "\"temp\":"); + if (tmps == NULL) { Serial.println("## OPENWEATHERMAP ###: temp not found !"); return false;} + tmps += 7; + tmpe = strstr(tmps, ",\""); + if (tmpe == NULL) { Serial.println("## OPENWEATHERMAP ###: temp not found !"); return false;} + strlcpy(temp, tmps, tmpe - tmps + 1); + cursor = tmpe + 2; + float tempf = atof(temp); + + tmps = strstr(cursor, "\"pressure\":"); + if (tmps == NULL) { Serial.println("## OPENWEATHERMAP ###: pressure not found !"); return false;} + tmps += 11; + tmpe = strstr(tmps, ",\""); + if (tmpe == NULL) { Serial.println("## OPENWEATHERMAP ###: pressure not found !"); return false;} + strlcpy(press, tmps, tmpe - tmps + 1); + cursor = tmpe + 2; + int pressi = (float)atoi(press) / 1.333; + + tmps = strstr(cursor, "humidity\":"); + if (tmps == NULL) { Serial.println("## OPENWEATHERMAP ###: humidity not found !"); return false;} + tmps += 10; + tmpe = strstr(tmps, ",\""); + if (tmpe == NULL) { Serial.println("## OPENWEATHERMAP ###: humidity not found !"); return false;} + strlcpy(hum, tmps, tmpe - tmps + 1); + + Serial.printf("## OPENWEATHERMAP ###: description: %s, temp:%.1f C, pressure:%dmmHg, humidity:%s%%\n", desc, tempf, pressi, hum); + sprintf(weather, "%s, %.1f C * давление: %d мм * влажность: %s%%", desc, tempf, pressi, hum); + + return true; + +} + void getWeather( void * pvParameters ) { - OW_current *current = new OW_current; - OW_hourly *hourly = new OW_hourly; - OW_daily *daily = new OW_daily; - delay(5000); - ow.getForecast(current, hourly, daily, api_key, latitude, longitude, units, language); - sprintf(weather, "TEMP: %.1f C * PRESS: %d HG * HUM: %d%%", current->temp, (int)(current->pressure / 1.333), current->humidity); - weatherRequest = true; + delay(200); + if (getForecast()) { + weatherRequest = true; + ticker.detach(); + ticker.attach(WEATHER_REQUEST_INTERVAL, updateWeather); + } else { + ticker.detach(); + ticker.attach(WEATHER_REQUEST_INTERVAL_FAULTY, updateWeather); + } vTaskDelete( NULL ); } @@ -48,18 +130,17 @@ void updateWeather() { xTaskCreatePinnedToCore( getWeather, /* Task function. */ "getWeather1", /* name of task. */ - 8192, /* Stack size of task */ + 1024 * 4, /* Stack size of task */ NULL, /* parameter of the task */ 0, /* priority of the task */ &weatherUpdateTaskHandle, /* Task handle to keep track of created task */ - 0); /* pin task to core CORE_FOR_LOOP_CONTROLS */ + 1); /* pin task to core CORE_FOR_LOOP_CONTROLS */ } /*********************************************** Occurs when the network is connected ***********************************************/ void network_on_connect() { - ticker.attach(WEATHER_REQUEST_INTERVAL, updateWeather); updateWeather(); } @@ -75,17 +156,20 @@ void dsp_on_start(DspCore *dsp) { Occurs when the display is initialized ***********************************************/ void dsp_on_init() { - hello.init(5, " * ", 1, TFT_LINEHGHT*4+6, 0, ORANGE, TFT_BG); - Serial.println(TFT_LINEHGHT*4+6); + if (DSP_MODEL == DSP_ST7735 || (DSP_MODEL == DSP_SSD1327)) { + hello.init(5, " * ", 1, TFT_LINEHGHT * 4 + 6, 0, ORANGE, TFT_BG); + } else { + hello.init(5, " * ", 2, TFT_LINEHGHT * 9 + 5, 0, ORANGE, TFT_BG); + } } /************************ The loop cycle ************************/ -void dsp_on_loop() { +void dsp_on_loop(DspCore *dsp) { if (weatherRequest) { weatherRequest = false; - hello.setText(weather); + hello.setText(dsp->utf8Rus(weather, true)); } if (display.mode == PLAYER) hello.loop(); } diff --git a/yoRadio/audiohandlers.ino b/yoRadio/audiohandlers.ino index b919e84..eac008f 100644 --- a/yoRadio/audiohandlers.ino +++ b/yoRadio/audiohandlers.ino @@ -1,6 +1,6 @@ void audio_info(const char *info) { if(config.store.audioinfo) telnet.printf("##AUDIO.INFO#: %s\n", info); - if (strstr(info, "failed!") != NULL || strstr(info, "404") != NULL) { + if (strstr(info, "failed!") != NULL || strstr(info, " 404") != NULL) { config.setTitle("[request failed]"); //config.setTitle(info); player.mode = STOPPED; @@ -28,7 +28,6 @@ bool printable(const char *info) { void audio_showstation(const char *info) { if (strlen(info) > 0) { bool p = printable(info); - //display.title(p?info:"*****"); config.setTitle(p?info:"*****"); netserver.requestOnChange(TITLE, 0); } @@ -37,7 +36,6 @@ void audio_showstation(const char *info) { void audio_showstreamtitle(const char *info) { if (strlen(info) > 0) { bool p = printable(info); - //display.title(p?info:"*****"); config.setTitle(p?info:"*****"); netserver.requestOnChange(TITLE, 0); } diff --git a/yoRadio/config.cpp b/yoRadio/config.cpp index 6881bdb..674af08 100644 --- a/yoRadio/config.cpp +++ b/yoRadio/config.cpp @@ -132,7 +132,7 @@ byte Config::setLastSSID(byte val) { void Config::setTitle(const char* title) { memset(config.station.title, 0, BUFLEN); strlcpy(config.station.title, title, BUFLEN); - display.title(); + display.putRequest({NEWTITLE, 0}); } void Config::setStation(const char* station) { diff --git a/yoRadio/controls.cpp b/yoRadio/controls.cpp index 1371ad1..a8dc26d 100644 --- a/yoRadio/controls.cpp +++ b/yoRadio/controls.cpp @@ -153,7 +153,7 @@ void encoder2Loop() { if (ENC2_BTNB != 255) { bp = digitalRead(ENC2_BTNB); } - if (bp == HIGH && display.mode != STATIONS) display.swichMode(STATIONS); + if (bp == HIGH && display.mode == PLAYER) display.putRequest({NEWMODE, STATIONS}); //display.swichMode(STATIONS); controlsEvent(encNewPosition > 0); } } @@ -172,13 +172,12 @@ void irBlink() { void irNum(byte num) { uint16_t s; if (display.numOfNextStation == 0 && num == 0) return; - //if (display.mode == PLAYER) display.swichMode(NUMBERS); - display.swichMode(NUMBERS); + display.putRequest({NEWMODE, NUMBERS}); if (display.numOfNextStation > UINT16_MAX / 10) return; s = display.numOfNextStation * 10 + num; if (s > config.store.countStation) return; display.numOfNextStation = s; - display.drawNextStationNum(s); + display.putRequest({NEXTSTATION, s}); } void irLoop() { @@ -204,10 +203,8 @@ void irLoop() { case IR_CODE_PLAY: { irBlink(); if (display.mode == NUMBERS) { - display.swichMode(PLAYER); + display.putRequest({NEWMODE, PLAYER}); player.play(display.numOfNextStation); - //player.request.station = display.numOfNextStation; - //player.request.doSave = true; display.numOfNextStation = 0; break; } @@ -234,12 +231,12 @@ void irLoop() { } case IR_CODE_HASH: { if (display.mode == NUMBERS) { - display.returnTile(); - display.swichMode(PLAYER); + display.putRequest({RETURNTITLE, 0}); + display.putRequest({NEWMODE, PLAYER}); display.numOfNextStation = 0; break; } - display.swichMode(display.mode == PLAYER ? STATIONS : PLAYER); + display.putRequest({NEWMODE, display.mode == PLAYER ? STATIONS : PLAYER}); break; } case IR_CODE_NUM0: { @@ -355,7 +352,7 @@ void touchLoop() { touchLongPress=millis(); if(display.mode==PLAYER || display.mode==VOL){ int16_t xDelta = map(abs(touchVol - touchX), 0, display.screenwidth, 0, TS_STEPS); - display.swichMode(VOL); + display.putRequest({NEWMODE, VOL}); if (xDelta>1) { controlsEvent((touchVol - touchX)<0); touchVol = touchX; @@ -368,7 +365,7 @@ void touchLoop() { touchLongPress=millis(); if(display.mode==PLAYER || display.mode==STATIONS){ int16_t yDelta = map(abs(touchStation - touchY), 0, display.screenheight, 0, TS_STEPS); - display.swichMode(STATIONS); + display.putRequest({NEWMODE, STATIONS}); if (yDelta>1) { controlsEvent((touchStation - touchY)>0); touchStation = touchY; @@ -390,7 +387,7 @@ void touchLoop() { if(millis()-touchLongPress < BTN_PRESS_TICKS*2){ onBtnClick(EVT_BTNCENTER); }else{ - display.swichMode(display.mode == PLAYER ? STATIONS : PLAYER); + display.putRequest({NEWMODE, display.mode == PLAYER ? STATIONS : PLAYER}); } } direct = TSD_STAY; @@ -411,9 +408,15 @@ void onBtnLongPressStart(int id) { } case EVT_BTNCENTER: case EVT_ENCBTNB: { - display.swichMode(display.mode == PLAYER ? STATIONS : PLAYER); + display.putRequest({NEWMODE, display.mode == PLAYER ? STATIONS : PLAYER}); break; } + case EVT_ENC2BTNB: { + display.putRequest({NEWMODE, display.mode == PLAYER ? VOL : PLAYER}); + break; + } + default: + break; } } @@ -426,6 +429,8 @@ void onBtnLongPressStop(int id) { lpId = -1; break; } + default: + break; } } @@ -453,13 +458,15 @@ void onBtnDuringLongPress(int id) { case EVT_BTNUP: case EVT_BTNDOWN: { if (display.mode == PLAYER) { - display.swichMode(STATIONS); + display.putRequest({NEWMODE, STATIONS}); } if (display.mode == STATIONS) { controlsEvent(id == EVT_BTNDOWN); } break; } + default: + break; } } } @@ -467,19 +474,16 @@ void onBtnDuringLongPress(int id) { void controlsEvent(bool toRight) { if (display.mode == NUMBERS) { display.numOfNextStation = 0; - display.swichMode(PLAYER); + display.putRequest({NEWMODE, PLAYER}); } if (display.mode != STATIONS) { - display.swichMode(VOL); + display.putRequest({NEWMODE, VOL}); player.stepVol(toRight); } if (display.mode == STATIONS) { - int p = toRight ? display.currentPlItem + 1 : display.currentPlItem - 1; - if (p < 1) p = config.store.countStation; - if (p > config.store.countStation) p = 1; - display.currentPlItem = p; - //display.clear(); - display.drawPlaylist(); + display.resetQueue(); + display.putRequest({DRAWPLAYLIST, toRight}); + } } @@ -494,16 +498,14 @@ void onBtnClick(int id) { case EVT_ENC2BTNB: { if (display.mode == NUMBERS) { display.numOfNextStation = 0; - display.swichMode(PLAYER); + display.putRequest({NEWMODE, PLAYER}); } if (display.mode == PLAYER) { player.toggle(); } if (display.mode == STATIONS) { - display.swichMode(PLAYER); + display.putRequest({NEWMODE, PLAYER}); player.play(display.currentPlItem); - //player.request.station = display.currentPlItem; - //player.request.doSave = true; } break; } @@ -521,7 +523,7 @@ void onBtnClick(int id) { } } else { if (display.mode == PLAYER) { - display.swichMode(STATIONS); + display.putRequest({NEWMODE, STATIONS}); } if (display.mode == STATIONS) { controlsEvent(id == EVT_BTNDOWN); @@ -542,7 +544,7 @@ void onBtnDoubleClick(int id) { case EVT_BTNCENTER: case EVT_ENCBTNB: case EVT_ENC2BTNB: { - display.swichMode(display.mode == PLAYER ? STATIONS : PLAYER); + display.putRequest({NEWMODE, display.mode == PLAYER ? VOL : PLAYER}); break; } case EVT_BTNRIGHT: { @@ -550,5 +552,7 @@ void onBtnDoubleClick(int id) { player.next(); break; } + default: + break; } } diff --git a/yoRadio/data/www/dragpl.js b/yoRadio/data/www/dragpl.js deleted file mode 100644 index 90c4b69..0000000 --- a/yoRadio/data/www/dragpl.js +++ /dev/null @@ -1,40 +0,0 @@ -let dragged; -let id; -let index; -let indexDrop; -let list; - -document.addEventListener("dragstart", ({target}) => { - dragged = target.parentNode; - id = target.parentNode.id; - list = target.parentNode.parentNode.children; - for(let i = 0; i < list.length; i += 1) { - if(list[i] === dragged){ - index = i; - } - } -}); - -document.addEventListener("dragover", (event) => { - event.preventDefault(); -}); - -document.addEventListener("drop", ({target}) => { - if(target.parentNode.className == "pleitem" && target.parentNode.id !== id) { - dragged.remove( dragged ); - for(let i = 0; i < list.length; i += 1) { - if(list[i] === target.parentNode){ - indexDrop = i; - } - } - if(index > indexDrop) { - target.parentNode.before( dragged ); - } else { - target.parentNode.after( dragged ); - } - let items=document.getElementById('pleditorcontent').getElementsByTagName('li'); - for (let i = 0; i <= items.length-1; i++) { - items[i].getElementsByTagName('span')[0].innerText=("00"+(i+1)).slice(-3); - } - } -}); diff --git a/yoRadio/data/www/dragpl.js.gz b/yoRadio/data/www/dragpl.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d5b729190e527dc9a77fc2dfb451d92e98828fe GIT binary patch literal 440 zcmV;p0Z0BHiwFqLt59M917vbxXK-vTYI6XUk~?q0Fc8P*?e)RCG2!BDAU zVnYmWd<07-iEM*Fi0|HW9xde|R4JCvKHua2%V}^#8jh?my;liAnvTBZ6 zSvLwpS!TN}6fPA~&h}`0;yn~#Xyg-GCya|;2|b~agF7?A$K(_SZ8gG4<47xEFnV4} z7=?kl>qvc9fiHa5dtqi9r6r#5`MNZ;ZXaU?Bi!EW)>92d?l%4+;bh2sPk~xf?^~)B z;hc9wn0E!We9WORXK)VjJG1Bd%RLw`AH1v8PDp)9D^u@NSc{!@6tg|gSXTF7V&Ato zGA*o~i!GoQ5>*W?LZLbwf_g`HPM^O4cp*nwmQI` zaJ?`=Lw@`_fNkzu8DD_SUH5w?pe;NK5o?EJuOe{O3K5v)KmP+GXBxaYIethQBT}hc zX|l4w|KnnI@xo4y3z2*JG}bEaz>zC*ys6Q$>ksiVNjh}igWw)ywUsDhwj8WdRp4+e i;NUoo27@S}Dj71CTCFmm{Wtb!V7~$3d!{Pt0{{S-Xv}K> literal 0 HcmV?d00001 diff --git a/yoRadio/data/www/elogo.png b/yoRadio/data/www/elogo.png index bdc932f17f3989f2964180adaf2fd49a8670b721..cb92ffdc7b5f23db20a131f79c74f4ff423d51ab 100644 GIT binary patch delta 2124 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 JPDHLkV1jh$>sbH* diff --git a/yoRadio/data/www/elogo100.png b/yoRadio/data/www/elogo100.png index 8e5cdc570b474a30bbe637fe36b9901760f8678e..d1508d53d088cc623d6d6a05ab85a53c45147af2 100644 GIT binary patch literal 6438 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 literal 17854 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 diff --git a/yoRadio/data/www/index.html b/yoRadio/data/www/index.html index fc2e92f..99695d6 100644 --- a/yoRadio/data/www/index.html +++ b/yoRadio/data/www/index.html @@ -6,7 +6,7 @@ - + ёRadio @@ -105,7 +105,7 @@