v0.7.490
This commit is contained in:
18
README.md
18
README.md
@@ -317,6 +317,24 @@ Work is in progress...
|
|||||||
|
|
||||||
---
|
---
|
||||||
## Version history
|
## Version history
|
||||||
|
#### v0.7.490
|
||||||
|
**!!! a [full update](#update-over-web-interface) with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!** \
|
||||||
|
**Please backup playlist.csv and wifi.csv before updating.**
|
||||||
|
- fixed playlist break down when saving it
|
||||||
|
- fixed bug with cropped song titles on single line displays (GC9106, ST7735mini, N5110 etc.)
|
||||||
|
- netserver - optimization and refactoring
|
||||||
|
- web interface optimization
|
||||||
|
- the AUDIOBUFFER_MULTIPLIER parameter is deprecated. New parameter AUDIOBUFFER_MULTIPLIER2. If everything works fine, then it is better not to touch it.
|
||||||
|
- new setting VS_PATCH_ENABLE (see PS)
|
||||||
|
- fixing other bugs
|
||||||
|
|
||||||
|
_**PS:** A bug was found with the lack of sound on some (not all) green VS1053 boards.
|
||||||
|
If there is no sound, you need to assign in myoptions_
|
||||||
|
```
|
||||||
|
#define VS_PATCH_ENABLE false
|
||||||
|
```
|
||||||
|
_On red boards and normally working green boards, nothing else needs to be done._
|
||||||
|
|
||||||
#### v0.7.414
|
#### v0.7.414
|
||||||
- fixed non latin long titles of songs error
|
- fixed non latin long titles of songs error
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ void audio_info(const char *info) {
|
|||||||
player.mode = STOPPED;
|
player.mode = STOPPED;
|
||||||
player.stopInfo();
|
player.stopInfo();
|
||||||
}
|
}
|
||||||
if (strstr(info, "not supported") != NULL){
|
if (strstr(info, "not supported") != NULL || strstr(info, "Account already in use") != NULL){
|
||||||
config.setTitle(info);
|
config.setTitle(info);
|
||||||
netserver.requestOnChange(TITLE, 0);
|
netserver.requestOnChange(TITLE, 0);
|
||||||
player.setOutputPins(false);
|
player.setOutputPins(false);
|
||||||
@@ -47,20 +47,32 @@ bool printable(const char *info) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void audio_showstation(const char *info) {
|
void audio_showstation(const char *info) {
|
||||||
|
DBGVB("[%s] info = %s", __func__, info);
|
||||||
if (strlen(info) > 0) {
|
if (strlen(info) > 0) {
|
||||||
bool p = printable(info);
|
bool p = printable(info);
|
||||||
config.setTitle(p?info:"*****");
|
config.setTitle(p?info:config.station.name);
|
||||||
netserver.requestOnChange(TITLE, 0);
|
netserver.requestOnChange(TITLE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_showstreamtitle(const char *info) {
|
void audio_showstreamtitle(const char *info) {
|
||||||
|
DBGVB("[%s] info = %s", __func__, info);
|
||||||
|
if (strstr(info, "Account already in use") != NULL){
|
||||||
|
config.setTitle(info);
|
||||||
|
netserver.requestOnChange(TITLE, 0);
|
||||||
|
player.setOutputPins(false);
|
||||||
|
player.setDefaults();
|
||||||
|
if (player_on_stop_play) player_on_stop_play();
|
||||||
|
player.mode = STOPPED;
|
||||||
|
player.stopInfo();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (strlen(info) > 0) {
|
if (strlen(info) > 0) {
|
||||||
bool p = printable(info);
|
bool p = printable(info);
|
||||||
#ifdef DEBUG_TITLES
|
#ifdef DEBUG_TITLES
|
||||||
config.setTitle(DEBUG_TITLES);
|
config.setTitle(DEBUG_TITLES);
|
||||||
#else
|
#else
|
||||||
config.setTitle(p?info:"*****");
|
config.setTitle(p?info:config.station.name);
|
||||||
#endif
|
#endif
|
||||||
netserver.requestOnChange(TITLE, 0);
|
netserver.requestOnChange(TITLE, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ bool Config::parseSsid(const char* line, char* ssid, char* pass) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Config::saveWifi(const char* post) {
|
bool Config::saveWifiFromNextion(const char* post){
|
||||||
File file = SPIFFS.open(SSIDS_PATH, "w");
|
File file = SPIFFS.open(SSIDS_PATH, "w");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return false;
|
return false;
|
||||||
@@ -455,6 +455,14 @@ bool Config::saveWifi(const char* post) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Config::saveWifi() {
|
||||||
|
if (!SPIFFS.exists(TMP_PATH)) return false;
|
||||||
|
SPIFFS.remove(SSIDS_PATH);
|
||||||
|
SPIFFS.rename(TMP_PATH, SSIDS_PATH);
|
||||||
|
ESP.restart();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Config::initNetwork() {
|
bool Config::initNetwork() {
|
||||||
File file = SPIFFS.open(SSIDS_PATH, "r");
|
File file = SPIFFS.open(SSIDS_PATH, "r");
|
||||||
if (!file || file.isDirectory()) {
|
if (!file || file.isDirectory()) {
|
||||||
|
|||||||
@@ -147,7 +147,8 @@ class Config {
|
|||||||
bool parseSsid(const char* line, char* ssid, char* pass);
|
bool parseSsid(const char* line, char* ssid, char* pass);
|
||||||
void loadStation(uint16_t station);
|
void loadStation(uint16_t station);
|
||||||
bool initNetwork();
|
bool initNetwork();
|
||||||
bool saveWifi(const char* post);
|
bool saveWifi();
|
||||||
|
bool saveWifiFromNextion(const char* post);
|
||||||
void setSmartStart(byte ss);
|
void setSmartStart(byte ss);
|
||||||
void initPlaylist();
|
void initPlaylist();
|
||||||
void indexPlaylist();
|
void indexPlaylist();
|
||||||
|
|||||||
Binary file not shown.
@@ -177,6 +177,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-row last">
|
<div class="flex-row last">
|
||||||
|
<input id="file-upload" type="file" accept=".txt, .csv" hidden/>
|
||||||
<div class="button group group_system hidden" data-name="wifiexport">Export</div>
|
<div class="button group group_system hidden" data-name="wifiexport">Export</div>
|
||||||
<div class="button hlbutton" data-name="wifiupload">Save & Reboot</div>
|
<div class="button hlbutton" data-name="wifiupload">Save & Reboot</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -580,7 +580,7 @@ char *split(char *str, const char *delim) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Display::title() {
|
void Display::title() {
|
||||||
DBGVB("call of %s(), config.station.title=%s", __func__, config.station.title);
|
DBGVB("[%s] config.station.title = %s", __func__, config.station.title);
|
||||||
if (strlen(config.station.title) > 0) {
|
if (strlen(config.station.title) > 0) {
|
||||||
char tmpbuf[strlen(config.station.title)+1];
|
char tmpbuf[strlen(config.station.title)+1];
|
||||||
strlcpy(tmpbuf, config.station.title, strlen(config.station.title)+1);
|
strlcpy(tmpbuf, config.station.title, strlen(config.station.title)+1);
|
||||||
@@ -589,7 +589,7 @@ void Display::title() {
|
|||||||
title1.setText(dsp.utf8Rus(tmpbuf, true));
|
title1.setText(dsp.utf8Rus(tmpbuf, true));
|
||||||
title2.setText(dsp.utf8Rus(stitle, true));
|
title2.setText(dsp.utf8Rus(stitle, true));
|
||||||
}else{
|
}else{
|
||||||
title1.setText(dsp.utf8Rus(tmpbuf, true));
|
title1.setText(dsp.utf8Rus(config.station.title, true));
|
||||||
title2.setText(dsp.utf8Rus("", true));
|
title2.setText(dsp.utf8Rus("", true));
|
||||||
}
|
}
|
||||||
#ifdef USE_NEXTION
|
#ifdef USE_NEXTION
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -6,38 +6,38 @@
|
|||||||
#include "AsyncUDP.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 };
|
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 };
|
||||||
enum htmlPath_e : uint8_t { PINDEX=1, PSETTINGS=2, PUPDATE=3, PIR=4, PPLAYLIST=5, PSSIDS=6 };
|
enum import_e : uint8_t { IMDONE=0, IMPL=1, IMWIFI=2 };
|
||||||
|
|
||||||
|
#define PLOW() //player.setBufsize(1600*2, -1); vTaskDelay(150)
|
||||||
|
#define PHIG() //vTaskDelay(150); player.setBufsize(1600*AUDIOBUFFER_MULTIPLIER2, -1)
|
||||||
|
|
||||||
class NetServer {
|
class NetServer {
|
||||||
public:
|
public:
|
||||||
uint8_t playlistrequest; // ClientId want the playlist
|
//uint8_t playlistrequest; // ClientId want the playlist/* Cleanup this */
|
||||||
bool importRequest;
|
import_e importRequest;
|
||||||
bool resumePlay;
|
bool resumePlay;
|
||||||
htmlPath_e htmlPath;
|
char chunkedPathBuffer[40];
|
||||||
public:
|
public:
|
||||||
NetServer() {};
|
NetServer() {};
|
||||||
bool begin();
|
bool begin();
|
||||||
void loop();
|
void loop();
|
||||||
void requestOnChange(requestType_e request, uint8_t clientId);
|
void requestOnChange(requestType_e request, uint8_t clientId);
|
||||||
void setRSSI(int val);
|
void setRSSI(int val) { rssi = val; };
|
||||||
|
void chunkedHtmlPage(const String& contentType, AsyncWebServerRequest *request, const char * path, bool gzip = false);
|
||||||
void onWsMessage(void *arg, uint8_t *data, size_t len, uint8_t clientId);
|
void onWsMessage(void *arg, uint8_t *data, size_t len, uint8_t clientId);
|
||||||
bool savePlaylist(const char* post);
|
|
||||||
void takeMallocDog();
|
|
||||||
void giveMallocDog();
|
|
||||||
uint32_t max, htmlpos;
|
|
||||||
bool theend;
|
|
||||||
#if IR_PIN!=255
|
#if IR_PIN!=255
|
||||||
bool irRecordEnable;
|
bool irRecordEnable;
|
||||||
void irToWs(const char* protocol, uint64_t irvalue);
|
void irToWs(const char* protocol, uint64_t irvalue);
|
||||||
void irValsToWs();
|
void irValsToWs();
|
||||||
void chunkedHtmlPage(const String& contentType, AsyncWebServerRequest *request);
|
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
requestType_e request;
|
requestType_e request;
|
||||||
int rssi;
|
int rssi;
|
||||||
|
|
||||||
void getPlaylist(uint8_t clientId);
|
void getPlaylist(uint8_t clientId);
|
||||||
bool importPlaylist();
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NetServer netserver;
|
extern NetServer netserver;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef options_h
|
#ifndef options_h
|
||||||
#define options_h
|
#define options_h
|
||||||
|
|
||||||
#define VERSION "0.7.414"
|
#define VERSION "0.7.490"
|
||||||
|
|
||||||
/*******************************************************
|
/*******************************************************
|
||||||
DO NOT EDIT THIS FILE.
|
DO NOT EDIT THIS FILE.
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ void Player::stopInfo() {
|
|||||||
|
|
||||||
void Player::loop() {
|
void Player::loop() {
|
||||||
if (mode == PLAYING) {
|
if (mode == PLAYING) {
|
||||||
|
xSemaphoreTake(playmutex, portMAX_DELAY);
|
||||||
Audio::loop();
|
Audio::loop();
|
||||||
|
xSemaphoreGive(playmutex);
|
||||||
|
vTaskDelay(2);
|
||||||
} else {
|
} else {
|
||||||
if (isRunning()) {
|
if (isRunning()) {
|
||||||
//digitalWrite(LED_BUILTIN, LOW);
|
//digitalWrite(LED_BUILTIN, LOW);
|
||||||
@@ -71,7 +74,6 @@ void Player::loop() {
|
|||||||
//stopSong();
|
//stopSong();
|
||||||
setDefaults();
|
setDefaults();
|
||||||
stopInfo();
|
stopInfo();
|
||||||
xSemaphoreGive(playmutex);
|
|
||||||
if (player_on_stop_play) player_on_stop_play();
|
if (player_on_stop_play) player_on_stop_play();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,8 +114,6 @@ void Player::setOutputPins(bool isPlaying) {
|
|||||||
|
|
||||||
void Player::play(uint16_t stationId) {
|
void Player::play(uint16_t stationId) {
|
||||||
//stopSong();
|
//stopSong();
|
||||||
xSemaphoreGive(playmutex);
|
|
||||||
xSemaphoreTake(playmutex, portMAX_DELAY);
|
|
||||||
setDefaults();
|
setDefaults();
|
||||||
setOutputPins(false);
|
setOutputPins(false);
|
||||||
config.setTitle("[connecting]");
|
config.setTitle("[connecting]");
|
||||||
|
|||||||
@@ -32,8 +32,8 @@
|
|||||||
#include <FFat.h>
|
#include <FFat.h>
|
||||||
#endif // SDFATFS_USED
|
#endif // SDFATFS_USED
|
||||||
|
|
||||||
#ifndef AUDIOBUFFER_MULTIPLIER
|
#ifndef AUDIOBUFFER_MULTIPLIER2
|
||||||
#define AUDIOBUFFER_MULTIPLIER 12
|
#define AUDIOBUFFER_MULTIPLIER2 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SDFATFS_USED
|
#ifdef SDFATFS_USED
|
||||||
@@ -140,7 +140,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
size_t m_buffSizePSRAM = 300000; // most webstreams limit the advance to 100...300Kbytes
|
size_t m_buffSizePSRAM = 300000; // most webstreams limit the advance to 100...300Kbytes
|
||||||
//size_t m_buffSizeRAM = 1600 * 5;
|
//size_t m_buffSizeRAM = 1600 * 5;
|
||||||
size_t m_buffSizeRAM = 1600 * AUDIOBUFFER_MULTIPLIER;
|
size_t m_buffSizeRAM = 1600 * AUDIOBUFFER_MULTIPLIER2;
|
||||||
size_t m_buffSize = 0;
|
size_t m_buffSize = 0;
|
||||||
size_t m_freeSpace = 0;
|
size_t m_freeSpace = 0;
|
||||||
size_t m_writeSpace = 0;
|
size_t m_writeSpace = 0;
|
||||||
|
|||||||
@@ -7,7 +7,9 @@
|
|||||||
* Updated on: Aug 15.2022
|
* Updated on: Aug 15.2022
|
||||||
* Author: Wolle
|
* Author: Wolle
|
||||||
*/
|
*/
|
||||||
|
#ifndef VS_PATCH_ENABLE
|
||||||
|
#define VS_PATCH_ENABLE true
|
||||||
|
#endif
|
||||||
#include "audioVS1053Ex.h"
|
#include "audioVS1053Ex.h"
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -325,7 +327,7 @@ void Audio::begin(){
|
|||||||
setVUmeter();
|
setVUmeter();
|
||||||
m_endFillByte = wram_read(0x1E06) & 0xFF;
|
m_endFillByte = wram_read(0x1E06) & 0xFF;
|
||||||
// printDetails("After last clocksetting \n");
|
// printDetails("After last clocksetting \n");
|
||||||
loadUserCode(); // load in VS1053B if you want to play flac
|
if(VS_PATCH_ENABLE) loadUserCode(); // load in VS1053B if you want to play flac
|
||||||
startSong();
|
startSong();
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -1613,6 +1615,7 @@ void Audio::setDefaults(){
|
|||||||
* \n The VU meter takes about 0.2MHz of processing power with 48 kHz samplerate.
|
* \n The VU meter takes about 0.2MHz of processing power with 48 kHz samplerate.
|
||||||
*/
|
*/
|
||||||
void Audio::setVUmeter() {
|
void Audio::setVUmeter() {
|
||||||
|
if(!VS_PATCH_ENABLE) return;
|
||||||
uint16_t MP3Status = read_register(SCI_STATUS);
|
uint16_t MP3Status = read_register(SCI_STATUS);
|
||||||
if(MP3Status==0) {
|
if(MP3Status==0) {
|
||||||
Serial.println("VS1053 Error: Unable to write SCI_STATUS");
|
Serial.println("VS1053 Error: Unable to write SCI_STATUS");
|
||||||
@@ -1636,6 +1639,7 @@ void Audio::setVUmeter() {
|
|||||||
* \warning This feature is only available with patches that support VU meter.
|
* \warning This feature is only available with patches that support VU meter.
|
||||||
*/
|
*/
|
||||||
void Audio::getVUlevel() {
|
void Audio::getVUlevel() {
|
||||||
|
if(!VS_PATCH_ENABLE) return;
|
||||||
if(!_vuInitalized) return;
|
if(!_vuInitalized) return;
|
||||||
int16_t reg = read_register(SCI_AICTRL3);
|
int16_t reg = read_register(SCI_AICTRL3);
|
||||||
uint8_t rl = map((uint8_t)reg, 85, 92, 0, 255);
|
uint8_t rl = map((uint8_t)reg, 85, 92, 0, 255);
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
#ifndef _vs1053_ext
|
#ifndef _vs1053_ext
|
||||||
#define _vs1053_ext
|
#define _vs1053_ext
|
||||||
|
|
||||||
#ifndef AUDIOBUFFER_MULTIPLIER
|
#ifndef AUDIOBUFFER_MULTIPLIER2
|
||||||
#define AUDIOBUFFER_MULTIPLIER 12
|
#define AUDIOBUFFER_MULTIPLIER2 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VS1053VOLM 128 // 128 or 96 only
|
#define VS1053VOLM 128 // 128 or 96 only
|
||||||
@@ -97,7 +97,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
const size_t m_buffSizePSRAM = 300000; // most webstreams limit the advance to 100...300Kbytes
|
const size_t m_buffSizePSRAM = 300000; // most webstreams limit the advance to 100...300Kbytes
|
||||||
//const size_t m_buffSizeRAM = 1600 * 10;
|
//const size_t m_buffSizeRAM = 1600 * 10;
|
||||||
const size_t m_buffSizeRAM = 1600 * AUDIOBUFFER_MULTIPLIER;
|
const size_t m_buffSizeRAM = 1600 * AUDIOBUFFER_MULTIPLIER2;
|
||||||
size_t m_buffSize = 0;
|
size_t m_buffSize = 0;
|
||||||
size_t m_freeSpace = 0;
|
size_t m_freeSpace = 0;
|
||||||
size_t m_writeSpace = 0;
|
size_t m_writeSpace = 0;
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ void Nextion::loop() {
|
|||||||
wifisettings+=(String(scanBuf)+"\n");
|
wifisettings+=(String(scanBuf)+"\n");
|
||||||
}
|
}
|
||||||
if (sscanf(rxbuf, "wifidone=%d", &scanDigit) == 1){
|
if (sscanf(rxbuf, "wifidone=%d", &scanDigit) == 1){
|
||||||
config.saveWifi(wifisettings.c_str());
|
config.saveWifiFromNextion(wifisettings.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user