fixed sntp blocking on no internet connection

This commit is contained in:
Nic Limper
2023-07-11 20:39:08 +02:00
parent b178994bd6
commit 128fcb0aee
4 changed files with 33 additions and 23 deletions

View File

@@ -8,7 +8,7 @@
#define WAKEUP_REASON_NETWORK_SCAN 0xFD
#define WAKEUP_REASON_WDT_RESET 0xFE
void init_time();
void initTime(void* parameter);
void logLine(char* buffer);
void logLine(String text);
void logStartUp();

View File

@@ -26,9 +26,11 @@ void pinTest();
void delayedStart(void* parameter) {
vTaskDelay(30000 / portTICK_PERIOD_MS);
Serial.println("Resuming content generation");
wsLog("resuming content generation");
config.runStatus = RUNSTATUS_RUN;
if (config.runStatus != RUNSTATUS_RUN) {
Serial.println("Starting content generation");
wsLog("starting content generation");
config.runStatus = RUNSTATUS_RUN;
}
vTaskDelay(10 / portTICK_PERIOD_MS);
vTaskDelete(NULL);
}
@@ -123,8 +125,6 @@ void setup() {
#endif
initAPconfig();
configTzTime(config.timeZone, "0.nl.pool.ntp.org", "europe.pool.ntp.org", "time.nist.gov");
// https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
updateLanguageFromConfig();
updateBrightnessFromConfig();
@@ -142,20 +142,15 @@ void setup() {
vTaskDelay(10 / portTICK_PERIOD_MS);
config.runStatus = RUNSTATUS_INIT;
xTaskCreate(timeTask, "timed tasks", 12000, NULL, 2, NULL);
init_time();
logStartUp();
esp_reset_reason_t resetReason = esp_reset_reason();
if (resetReason == ESP_RST_PANIC) {
Serial.println("Panic! Pausing content generation for 30 seconds");
config.runStatus = RUNSTATUS_PAUSE;
xTaskCreate(delayedStart, "delaystart", 2000, NULL, 2, NULL);
} else {
config.runStatus = RUNSTATUS_RUN;
}
xTaskCreate(timeTask, "timed tasks", 12000, NULL, 2, NULL);
xTaskCreate(initTime, "init time", 5000, NULL, 2, NULL);
xTaskCreate(delayedStart, "delaystart", 2000, NULL, 2, NULL);
}
void loop() {

View File

@@ -478,14 +478,16 @@ void processDataReq(struct espAvailDataReq* eadr, bool local) {
memset(taginfo->md5, 0, 16 * sizeof(uint8_t));
memset(taginfo->md5pending, 0, 16 * sizeof(uint8_t));
const char* reason = "";
if (eadr->adr.wakeupReason == WAKEUP_REASON_FIRSTBOOT) reason = "Booting";
else if (eadr->adr.wakeupReason == WAKEUP_REASON_NETWORK_SCAN) reason = "Network scan";
else if (eadr->adr.wakeupReason == WAKEUP_REASON_WDT_RESET) reason = "Watchdog reset";
sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X %s", eadr->src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], reason);
logLine(buffer);
if (local) {
const char* reason = "";
if (eadr->adr.wakeupReason == WAKEUP_REASON_FIRSTBOOT) reason = "Booting";
else if (eadr->adr.wakeupReason == WAKEUP_REASON_NETWORK_SCAN) reason = "Network scan";
else if (eadr->adr.wakeupReason == WAKEUP_REASON_WDT_RESET) reason = "Watchdog reset";
sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X %s", eadr->src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], reason);
logLine(buffer);
}
}
if (taginfo->batteryMv != eadr->adr.batteryMv) {
if (local && taginfo->batteryMv != eadr->adr.batteryMv) {
sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X battery went from %.2fV to %.2fV", eadr->src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0], static_cast<float>(taginfo->batteryMv) / 1000.0, static_cast<float>(eadr->adr.batteryMv) / 1000.0);
logLine(buffer);
}

View File

@@ -2,10 +2,19 @@
#include <Arduino.h>
#include <FS.h>
#include <sntp.h>
#include "storage.h"
#include "tag_db.h"
void init_time() {
void timeSyncCallback(struct timeval* tv) {
Serial.println("time succesfully synced");
}
void initTime(void* parameter) {
sntp_set_time_sync_notification_cb(timeSyncCallback);
sntp_set_sync_interval(300 * 1000);
configTzTime(config.timeZone, "nl.pool.ntp.org", "europe.pool.ntp.org", "time.nist.gov");
struct tm timeinfo;
while (true) {
if (!getLocalTime(&timeinfo)) {
@@ -15,6 +24,10 @@ void init_time() {
break;
}
}
logStartUp();
if (config.runStatus = RUNSTATUS_INIT) config.runStatus = RUNSTATUS_RUN;
vTaskDelay(10 / portTICK_PERIOD_MS);
vTaskDelete(NULL);
}
void logLine(char* buffer) {