This commit is contained in:
e2002
2022-02-13 11:12:33 +03:00
parent e20bcd953c
commit 287bc69bef
13 changed files with 163 additions and 61 deletions

View File

@@ -33,7 +33,7 @@ void audio_showstreamtitle(const char *info) {
telnet.info();
player.requesToStart = false;
} else {
telnet.printf("##CLI.META#: %s\n", info);
telnet.printf("##CLI.META#: %s\n> ", info);
}
}
}

View File

@@ -6,6 +6,12 @@ Config config;
void Config::init() {
eepromRead(EEPROM_START, store);
if (store.tz_set!=57){ // update to v0.4.200
store.tz_set = 57;
store.tzHour = 3;
store.tzMin = 0;
store.timezoneOffset = 0;
}
if (store.config_set != 4256) setDefaults();
//if (!SPIFFS.begin(false, "/spiffs", 30)) {
if (!SPIFFS.begin(false)) {
@@ -54,6 +60,25 @@ void Config::setDefaults() {
store.lastSSID = 0;
store.audioinfo = false;
store.smartstart = 2;
store.tz_set = 57;
store.tzHour = 3;
store.tzMin = 0;
store.timezoneOffset = 0;
}
void Config::setTimezone(int8_t tzh, int8_t tzm) {
store.tzHour=tzh;
store.tzMin=tzm;
save();
}
void Config::setTimezoneOffset(uint16_t tzo) {
store.timezoneOffset=tzo;
save();
}
uint16_t Config::getTimezoneOffset() {
return 0; // TODO
}
void Config::save() {

View File

@@ -23,6 +23,10 @@ struct config_t
byte lastSSID;
bool audioinfo;
byte smartstart;
byte tz_set; // must be 57
int8_t tzHour;
int8_t tzMin;
uint16_t timezoneOffset;
};
struct station_t
@@ -67,6 +71,9 @@ class Config {
void initPlaylist();
void indexPlaylist();
void fillPlMenu(char plmenu[][40], int from, byte count);
void setTimezone(int8_t tzh, int8_t tzm);
void setTimezoneOffset(uint16_t tzo);
uint16_t getTimezoneOffset();
private:
template <class T> int eepromWrite(int ee, const T& value);
template <class T> int eepromRead(int ee, T& value);

View File

@@ -1,10 +1,11 @@
#include "options.h"
#include "WiFi.h"
#include "time.h"
#include "display.h"
#include "player.h"
#include "netserver.h"
#include "options.h"
#include "network.h"
#if DSP_MODEL==0
@@ -85,7 +86,7 @@ void Scroll::clearscrolls() {
void Scroll::loop() {
if (checkdelay(x == TFT_FRAMEWDT ? delayStartScroll : SCROLLTIME, scrolldelay)) {
scroll();
ticks();
sticks();
}
yield();
}
@@ -103,7 +104,7 @@ void Scroll::drawFrame() {
dsp.drawScrollFrame(texttop, textheight, bg);
}
void Scroll::ticks() {
void Scroll::sticks() {
if (!doscroll || locked) return;
setTextParams();
dsp.set_Cursor(x, texttop);
@@ -170,7 +171,6 @@ void Display::start() {
station();
rssi();
time();
configTime(TIMEZONE, OFFSET, "pool.ntp.org", "ru.pool.ntp.org");
timer.attach_ms(1000, ticks);
// Экстреминатус секвестирован
}
@@ -213,14 +213,8 @@ void Display::swichMode(displayMode_e newmode) {
void Display::drawPlayer() {
if (clockRequest) {
if (syncTicks % 21600 == 0) { //6hours
configTime(TIMEZONE, OFFSET, "pool.ntp.org", "ru.pool.ntp.org");
yield();
syncTicks = 0;
}
getLocalTime(&timeinfo);
getLocalTime(&network.timeinfo);
time();
syncTicks++;
clockRequest = false;
}
meta.loop();
@@ -322,9 +316,9 @@ void Display::time() {
if (!dt) {
heap();
rssi();
strftime(timeStringBuff, sizeof(timeStringBuff), "%H:%M", &timeinfo);
strftime(timeStringBuff, sizeof(timeStringBuff), "%H:%M", &network.timeinfo);
} else {
strftime(timeStringBuff, sizeof(timeStringBuff), "%H %M", &timeinfo);
strftime(timeStringBuff, sizeof(timeStringBuff), "%H %M", &network.timeinfo);
}
dsp.printClock(timeStringBuff);
dt = !dt;

View File

@@ -7,9 +7,6 @@
enum displayMode_e { PLAYER, VOL, STATIONS };
#define TIMEZONE 10800 // 3600*3=10800 (UTC+3)
#define OFFSET 0 // Daylight Offset (sec.)
class Scroll {
public:
Scroll() { };
@@ -33,7 +30,7 @@ class Scroll {
void getbounds(uint16_t &tWidth, uint16_t &tHeight, uint16_t &sWidth);
boolean checkdelay(int m, unsigned long &tstamp);
void scroll();
void ticks();
void sticks();
void clear();
void setTextParams();
void drawFrame();
@@ -41,8 +38,6 @@ class Scroll {
class Display {
public:
struct tm timeinfo;
uint16_t syncTicks;
bool clockRequest;
uint16_t screenwidth, screenheight;
displayMode_e mode;

View File

@@ -2,9 +2,15 @@
#include "WiFi.h"
#include "display.h"
#include "options.h"
#include "config.h"
#include "telnet.h"
Network network;
void syncTime() {
network.requestTimeSync(true);
}
void Network::begin() {
config.initNetwork();
if (config.ssidsCount == 0) {
@@ -35,7 +41,7 @@ void Network::begin() {
break;
}
}
if(WiFi.status() != WL_CONNECTED && ls==startedls){
if (WiFi.status() != WL_CONNECTED && ls == startedls) {
raiseSoftAP();
return;
}
@@ -46,6 +52,22 @@ void Network::begin() {
}
digitalWrite(LED_BUILTIN, LOW);
status = CONNECTED;
requestTimeSync();
ntimer.attach_ms(TSYNC_DELAY, syncTime);
}
void Network::requestTimeSync(bool withTelnetOutput) {
configTime(config.store.tzHour * 3600 + config.store.tzMin * 60, config.getTimezoneOffset(), "pool.ntp.org", "ru.pool.ntp.org");
if (withTelnetOutput) {
getLocalTime(&timeinfo);
char timeStringBuff[50];
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S", &timeinfo);
if (config.store.tzHour < 0) {
telnet.printf(0, "##SYS.DATE#: %s%03d:%02d\n> ", timeStringBuff, config.store.tzHour, config.store.tzMin);
} else {
telnet.printf(0, "##SYS.DATE#: %s+%02d:%02d\n> ", timeStringBuff, config.store.tzHour, config.store.tzMin);
}
}
}
void Network::raiseSoftAP() {

View File

@@ -1,18 +1,24 @@
#ifndef network_h
#define network_h
#include <Ticker.h>
#include "time.h"
#define apSsid "yoRadioAP"
#define apPassword "12345987"
#define TSYNC_DELAY 10800000 // 1000*60*60*3 = 3 hours
enum n_Status_e { CONNECTED, SOFT_AP, FAILED };
class Network {
public:
n_Status_e status;
struct tm timeinfo;
public:
Network() {};
void begin();
void requestTimeSync(bool withTelnetOutput=false);
private:
Ticker ntimer;
void raiseSoftAP();
};

View File

@@ -1,7 +1,7 @@
#ifndef options_h
#define options_h
#define VERSION "0.4.199"
#define VERSION "0.4.210"
/* DISPLAY MODEL
* 0 - DUMMY

View File

@@ -30,6 +30,7 @@ void Player::loop() {
} else {
if (isRunning()) {
digitalWrite(LED_BUILTIN, LOW);
display.title("[stopped]");
stopSong();
stopInfo();
}

View File

@@ -4,7 +4,7 @@
#include "config.h"
#include "telnet.h"
#include "player.h"
#include "display.h"
#include "network.h"
Telnet telnet;
@@ -139,7 +139,7 @@ void Telnet::info() {
byte volume;
telnet.printf("##CLI.INFO#\n");
char timeStringBuff[50];
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S+03:00", &display.timeinfo);
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S+03:00", &network.timeinfo);
telnet.printf("##SYS.DATE#: %s\n", timeStringBuff); //TODO timezone offset
telnet.printf("##CLI.NAMESET#: %d %s\n", config.store.lastStation, config.station.name);
if (player.mode == PLAYING) {
@@ -170,7 +170,7 @@ void Telnet::on_input(const char* str, byte clientId) {
}
if (strcmp(str, "cli.stop") == 0 || strcmp(str, "stop") == 0) {
player.mode = STOPPED;
display.title("[stopped]");
//display.title("[stopped]");
info();
return;
}
@@ -183,13 +183,11 @@ void Telnet::on_input(const char* str, byte clientId) {
return;
}
if (strcmp(str, "cli.vol") == 0 || strcmp(str, "vol") == 0) {
printf(clientId, "##CLI.VOL#: %d\n", config.store.volume);
printf(clientId, "##CLI.VOL#: %d\n> ", config.store.volume);
return;
}
if (strcmp(str, "sys.date") == 0) {
char timeStringBuff[50];
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S+03:00", &display.timeinfo);
telnet.printf("##SYS.DATE#: %s\n", timeStringBuff); //TODO timezone offset
network.requestTimeSync(true);
return;
}
int volume;
@@ -199,24 +197,25 @@ void Telnet::on_input(const char* str, byte clientId) {
player.setVol(volume, false);
return;
}
if (strcmp(str, "cli.audioinfo") == 0 || strcmp(str, "audioinfo") == 0) {
printf(clientId, "##CLI.AUDIOINFO#: %d\n", config.store.audioinfo>0);
printf(clientId, "##CLI.AUDIOINFO#: %d\n> ", config.store.audioinfo > 0);
return;
}
byte ainfo;
if (sscanf(str, "audioinfo(%d)", &ainfo) == 1 || sscanf(str, "cli.audioinfo(\"%d\")", &ainfo) == 1 || sscanf(str, "audioinfo %d", &ainfo) == 1) {
config.store.audioinfo = ainfo>0;
config.store.audioinfo = ainfo > 0;
printf(clientId, "new audioinfo value is: %d\n> ", config.store.audioinfo);
config.save();
return;
}
if (strcmp(str, "cli.smartstart") == 0 || strcmp(str, "smartstart") == 0) {
printf(clientId, "##CLI.SMARTSTART#: %d\n", config.store.smartstart);
printf(clientId, "##CLI.SMARTSTART#: %d\n> ", config.store.smartstart);
return;
}
byte sstart;
if (sscanf(str, "smartstart(%d)", &sstart) == 1 || sscanf(str, "cli.smartstart(\"%d\")", &sstart) == 1 || sscanf(str, "smartstart %d", &sstart) == 1) {
config.store.smartstart = sstart;
printf(clientId, "new smartstart value is: %d\n> ", config.store.audioinfo);
config.save();
return;
}
@@ -242,8 +241,12 @@ void Telnet::on_input(const char* str, byte clientId) {
if (strcmp(str, "cli.info") == 0 || strcmp(str, "info") == 0) {
printf(clientId, "##CLI.INFO#\n");
char timeStringBuff[50];
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S+03:00", &display.timeinfo);
printf(clientId, "##SYS.DATE#: %s\n", timeStringBuff); //TODO timezone offset
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S", &network.timeinfo);
if (config.store.tzHour < 0) {
printf(clientId, "##SYS.DATE#: %s%03d:%02d\n", timeStringBuff, config.store.tzHour, config.store.tzMin);
} else {
printf(clientId, "##SYS.DATE#: %s+%02d:%02d\n", timeStringBuff, config.store.tzHour, config.store.tzMin);
}
printf(clientId, "##CLI.NAMESET#: %d %s\n", config.store.lastStation, config.station.name);
if (player.mode == PLAYING) {
printf(clientId, "##CLI.META#: %s\n", config.station.title);
@@ -257,7 +260,6 @@ void Telnet::on_input(const char* str, byte clientId) {
printf(clientId, "> ");
return;
}
uint8_t sb;
if (sscanf(str, "play(%d)", &sb) == 1 || sscanf(str, "cli.play(\"%d\")", &sb) == 1 || sscanf(str, "play %d", &sb) == 1 ) {
if (sb < 1) sb = 1;
@@ -265,5 +267,37 @@ void Telnet::on_input(const char* str, byte clientId) {
player.play(sb);
return;
}
if (strcmp(str, "sys.tzo") == 0 || strcmp(str, "tzo") == 0) {
printf(clientId, "##SYS.TZO#: %d:%d\n> ", config.store.tzHour, config.store.tzMin);
return;
}
int16_t tzh, tzm;
if (sscanf(str, "tzo(%d:%d)", &tzh, &tzm) == 2 || sscanf(str, "sys.tzo(\"%d:%d\")", &tzh, &tzm) == 2 || sscanf(str, "tzo %d:%d", &tzh, &tzm) == 2) {
if (tzh < -12) tzh = -12;
if (tzh > 14) tzh = 14;
if (tzm < 0) tzm = 0;
if (tzm > 59) tzm = 59;
config.setTimezone(tzh, tzm);
if(tzh<0){
printf(clientId, "new timezone offset: %03d:%02d\n", config.store.tzHour, config.store.tzMin);
}else{
printf(clientId, "new timezone offset: %02d:%02d\n", config.store.tzHour, config.store.tzMin);
}
network.requestTimeSync(true);
return;
}
if (sscanf(str, "tzo(%d)", &tzh) == 1 || sscanf(str, "sys.tzo(\"%d\")", &tzh) == 1 || sscanf(str, "tzo %d", &tzh) == 1) {
if (tzh < -12) tzh = -12;
if (tzh > 14) tzh = 14;
config.setTimezone(tzh, 0);
if(tzh<0){
printf(clientId, "new timezone offset: %03d:%02d\n", config.store.tzHour, config.store.tzMin);
}else{
printf(clientId, "new timezone offset: %02d:%02d\n", config.store.tzHour, config.store.tzMin);
}
network.requestTimeSync(true);
return;
}
telnet.printf(clientId, "unknown command: %s\n> ", str);
}