diff --git a/platformio.ini b/platformio.ini index 155460b1c..7d2ac6b44 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,6 +14,7 @@ default_envs = tbeam ;default_envs = heltec-v2.0 ;default_envs = heltec-v1 ;default_envs = tlora-v1 +;default_envs = tlora-v1 ;default_envs = tlora_v1_3 ;default_envs = tlora-v2 ;default_envs = lora-relay-v1 # nrf board @@ -103,9 +104,13 @@ src_filter = ${arduino_base.src_filter} - upload_speed = 921600 debug_init_break = tbreak setup + +# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. +# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h +# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h build_flags = ${arduino_base.build_flags} -Wall -Wextra -Isrc/esp32 -Isrc/esp32-mfix-esp32-psram-cache-issue -lnimble -std=c++11 - -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG + -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL -DAXP_DEBUG_PORT=Serial lib_deps = ${arduino_base.lib_deps} @@ -116,6 +121,8 @@ lib_deps = robtillaart/DS18B20@^0.1.11 h2zero/NimBLE-Arduino@1.3.1 tobozo/ESP32-targz@^1.1.4 + arduino-libraries/NTPClient#531eff39d9fbc831f3d03f706a161739203fbe2a + # Hmm - this doesn't work yet # board_build.ldscript = linker/esp32.extram.bss.ld lib_ignore = diff --git a/src/gps/RTC.h b/src/gps/RTC.h index 3a89d9810..730d1914e 100644 --- a/src/gps/RTC.h +++ b/src/gps/RTC.h @@ -11,8 +11,11 @@ enum RTCQuality { /// Some other node gave us a time we can use RTCQualityFromNet = 1, + /// Our time is based on NTP + RTCQualityNTP= 2, + /// Our time is based on our own GPS - RTCQualityGPS = 2 + RTCQualityGPS = 3 }; RTCQuality getRTCQuality(); diff --git a/src/mesh/http/WiFiAPClient.cpp b/src/mesh/http/WiFiAPClient.cpp index c5cbe9c93..1101ad1cd 100644 --- a/src/mesh/http/WiFiAPClient.cpp +++ b/src/mesh/http/WiFiAPClient.cpp @@ -1,5 +1,6 @@ #include "mesh/http/WiFiAPClient.h" #include "NodeDB.h" +#include "RTC.h" #include "concurrency/Periodic.h" #include "configuration.h" #include "main.h" @@ -9,7 +10,9 @@ #include "target_specific.h" #include #include +#include #include +#include using namespace concurrency; @@ -18,6 +21,10 @@ static void WiFiEvent(WiFiEvent_t event); // DNS Server for the Captive Portal DNSServer dnsServer; +// NTP +WiFiUDP ntpUDP; +NTPClient timeClient(ntpUDP, "0.pool.ntp.org"); + uint8_t wifiDisconnectReason = 0; // Stores our hostname @@ -46,10 +53,10 @@ static WifiSleepObserver wifiSleepObserver; static int32_t reconnectWiFi() { - if (radioConfig.has_preferences && needReconnect) { + const char *wifiName = radioConfig.preferences.wifi_ssid; + const char *wifiPsw = radioConfig.preferences.wifi_password; - const char *wifiName = radioConfig.preferences.wifi_ssid; - const char *wifiPsw = radioConfig.preferences.wifi_password; + if (radioConfig.has_preferences && needReconnect && !WiFi.isConnected()) { if (!*wifiPsw) // Treat empty password as no password wifiPsw = NULL; @@ -60,6 +67,26 @@ static int32_t reconnectWiFi() DEBUG_MSG("... Reconnecting to WiFi access point\n"); WiFi.mode(WIFI_MODE_STA); WiFi.begin(wifiName, wifiPsw); + + + // Starting timeClient; + } + } + + //if (*wifiName) { + if (WiFi.isConnected()) { + DEBUG_MSG("Updating NTP time\n"); + if (timeClient.update()) { + DEBUG_MSG("NTP Request Success - Setting RTCQualityNTP if needed\n"); + + struct timeval tv; + tv.tv_sec = timeClient.getEpochTime(); + tv.tv_usec = 0; + + perhapsSetRTC(RTCQualityNTP, &tv); + + } else { + DEBUG_MSG("NTP Update failed\n"); } } @@ -128,6 +155,10 @@ static void onNetworkConnected() MDNS.addService("https", "tcp", 443); } + DEBUG_MSG("Starting NTP time client\n"); + timeClient.begin(); + timeClient.setUpdateInterval(60*60); // Update once an hour + initWebServer(); initApiServer();