Use ntp time sync at end of wifi activities
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
|
#include <WiFi.h>
|
||||||
#include <esp_private/esp_clk.h>
|
#include <esp_private/esp_clk.h>
|
||||||
#include <esp_sntp.h>
|
#include <esp_sntp.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@@ -260,4 +261,17 @@ void formatLogTime(char* buf, size_t bufSize) {
|
|||||||
snprintf(buf, bufSize, "%02d:%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
|
snprintf(buf, bufSize, "%02d:%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wifiOff(bool skipNtpSync) {
|
||||||
|
if (!skipNtpSync && isApproximate() && WiFi.getMode() == WIFI_STA && WiFi.status() == WL_CONNECTED) {
|
||||||
|
syncNtp();
|
||||||
|
}
|
||||||
|
if (esp_sntp_enabled()) {
|
||||||
|
esp_sntp_stop();
|
||||||
|
}
|
||||||
|
WiFi.disconnect(false);
|
||||||
|
delay(100);
|
||||||
|
WiFi.mode(WIFI_OFF);
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace HalClock
|
} // namespace HalClock
|
||||||
|
|||||||
@@ -65,4 +65,9 @@ void formatTime(char* buf, size_t bufSize, bool use24h);
|
|||||||
/// synced, or an empty string if not.
|
/// synced, or an empty string if not.
|
||||||
void formatLogTime(char* buf, size_t bufSize);
|
void formatLogTime(char* buf, size_t bufSize);
|
||||||
|
|
||||||
|
/// Tear down WiFi cleanly. When skipNtpSync is false (default) and the
|
||||||
|
/// clock is approximate, performs an opportunistic NTP sync before
|
||||||
|
/// disconnecting — essentially free since we already have a connection.
|
||||||
|
void wifiOff(bool skipNtpSync = false);
|
||||||
|
|
||||||
} // namespace HalClock
|
} // namespace HalClock
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <Epub.h>
|
#include <Epub.h>
|
||||||
#include <GfxRenderer.h>
|
#include <GfxRenderer.h>
|
||||||
|
#include <HalClock.h>
|
||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
#include <OpdsStream.h>
|
#include <OpdsStream.h>
|
||||||
@@ -39,8 +40,7 @@ void OpdsBookBrowserActivity::onEnter() {
|
|||||||
void OpdsBookBrowserActivity::onExit() {
|
void OpdsBookBrowserActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
|
|
||||||
// Turn off WiFi when exiting
|
HalClock::wifiOff();
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
|
|
||||||
entries.clear();
|
entries.clear();
|
||||||
navigationHistory.clear();
|
navigationHistory.clear();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <DNSServer.h>
|
#include <DNSServer.h>
|
||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include <GfxRenderer.h>
|
#include <GfxRenderer.h>
|
||||||
|
#include <HalClock.h>
|
||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <esp_task_wdt.h>
|
#include <esp_task_wdt.h>
|
||||||
@@ -86,15 +87,12 @@ void CrossPointWebServerActivity::onExit() {
|
|||||||
if (isApMode) {
|
if (isApMode) {
|
||||||
LOG_DBG("WEBACT", "Stopping WiFi AP...");
|
LOG_DBG("WEBACT", "Stopping WiFi AP...");
|
||||||
WiFi.softAPdisconnect(true);
|
WiFi.softAPdisconnect(true);
|
||||||
} else {
|
delay(30);
|
||||||
LOG_DBG("WEBACT", "Disconnecting WiFi (graceful)...");
|
|
||||||
WiFi.disconnect(false); // false = don't erase credentials, send disconnect frame
|
|
||||||
}
|
|
||||||
delay(30); // Allow disconnect frame to be sent
|
|
||||||
|
|
||||||
LOG_DBG("WEBACT", "Setting WiFi mode OFF...");
|
|
||||||
WiFi.mode(WIFI_OFF);
|
WiFi.mode(WIFI_OFF);
|
||||||
delay(30); // Allow WiFi hardware to power down
|
delay(30);
|
||||||
|
} else {
|
||||||
|
HalClock::wifiOff();
|
||||||
|
}
|
||||||
|
|
||||||
LOG_DBG("WEBACT", "Free heap at onExit end: %d bytes", ESP.getFreeHeap());
|
LOG_DBG("WEBACT", "Free heap at onExit end: %d bytes", ESP.getFreeHeap());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <esp_sntp.h>
|
|
||||||
|
|
||||||
#include "KOReaderCredentialStore.h"
|
#include "KOReaderCredentialStore.h"
|
||||||
#include "KOReaderDocumentId.h"
|
#include "KOReaderDocumentId.h"
|
||||||
@@ -14,18 +13,6 @@
|
|||||||
#include "components/UITheme.h"
|
#include "components/UITheme.h"
|
||||||
#include "fontIds.h"
|
#include "fontIds.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
void wifiOff() {
|
|
||||||
if (esp_sntp_enabled()) {
|
|
||||||
esp_sntp_stop();
|
|
||||||
}
|
|
||||||
WiFi.disconnect(false);
|
|
||||||
delay(100);
|
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
delay(100);
|
|
||||||
}
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void KOReaderSyncActivity::onWifiSelectionComplete(const bool success) {
|
void KOReaderSyncActivity::onWifiSelectionComplete(const bool success) {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
LOG_DBG("KOSync", "WiFi connection failed, exiting");
|
LOG_DBG("KOSync", "WiFi connection failed, exiting");
|
||||||
@@ -149,7 +136,7 @@ void KOReaderSyncActivity::performUpload() {
|
|||||||
const auto result = KOReaderSyncClient::updateProgress(progress);
|
const auto result = KOReaderSyncClient::updateProgress(progress);
|
||||||
|
|
||||||
if (result != KOReaderSyncClient::OK) {
|
if (result != KOReaderSyncClient::OK) {
|
||||||
wifiOff();
|
HalClock::wifiOff(true);
|
||||||
{
|
{
|
||||||
RenderLock lock(*this);
|
RenderLock lock(*this);
|
||||||
state = SYNC_FAILED;
|
state = SYNC_FAILED;
|
||||||
@@ -159,7 +146,7 @@ void KOReaderSyncActivity::performUpload() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wifiOff();
|
HalClock::wifiOff(true);
|
||||||
{
|
{
|
||||||
RenderLock lock(*this);
|
RenderLock lock(*this);
|
||||||
state = UPLOAD_COMPLETE;
|
state = UPLOAD_COMPLETE;
|
||||||
@@ -193,7 +180,7 @@ void KOReaderSyncActivity::onEnter() {
|
|||||||
void KOReaderSyncActivity::onExit() {
|
void KOReaderSyncActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
|
|
||||||
wifiOff();
|
HalClock::wifiOff(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KOReaderSyncActivity::render(RenderLock&&) {
|
void KOReaderSyncActivity::render(RenderLock&&) {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <esp_sntp.h>
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -188,15 +187,6 @@ bool detectTimezoneSetting(uint8_t& outSetting, std::string& outIana, bool& outD
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wifiOff() {
|
|
||||||
if (esp_sntp_enabled()) {
|
|
||||||
esp_sntp_stop();
|
|
||||||
}
|
|
||||||
WiFi.disconnect(false);
|
|
||||||
delay(100);
|
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
delay(100);
|
|
||||||
}
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void DetectTimezoneActivity::onEnter() {
|
void DetectTimezoneActivity::onEnter() {
|
||||||
@@ -219,7 +209,7 @@ void DetectTimezoneActivity::onEnter() {
|
|||||||
|
|
||||||
void DetectTimezoneActivity::onExit() {
|
void DetectTimezoneActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
wifiOff();
|
HalClock::wifiOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectTimezoneActivity::onWifiSelectionComplete(bool success) {
|
void DetectTimezoneActivity::onWifiSelectionComplete(bool success) {
|
||||||
@@ -254,7 +244,7 @@ void DetectTimezoneActivity::performDetect() {
|
|||||||
state = FAILED;
|
state = FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
wifiOff();
|
HalClock::wifiOff();
|
||||||
requestUpdate();
|
requestUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "KOReaderAuthActivity.h"
|
#include "KOReaderAuthActivity.h"
|
||||||
|
|
||||||
#include <GfxRenderer.h>
|
#include <GfxRenderer.h>
|
||||||
|
#include <HalClock.h>
|
||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|
||||||
@@ -65,11 +66,7 @@ void KOReaderAuthActivity::onEnter() {
|
|||||||
void KOReaderAuthActivity::onExit() {
|
void KOReaderAuthActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
|
|
||||||
// Turn off wifi
|
HalClock::wifiOff();
|
||||||
WiFi.disconnect(false);
|
|
||||||
delay(100);
|
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
delay(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KOReaderAuthActivity::render(RenderLock&&) {
|
void KOReaderAuthActivity::render(RenderLock&&) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "OtaUpdateActivity.h"
|
#include "OtaUpdateActivity.h"
|
||||||
|
|
||||||
#include <GfxRenderer.h>
|
#include <GfxRenderer.h>
|
||||||
|
#include <HalClock.h>
|
||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|
||||||
@@ -66,11 +67,7 @@ void OtaUpdateActivity::onEnter() {
|
|||||||
void OtaUpdateActivity::onExit() {
|
void OtaUpdateActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
|
|
||||||
// Turn off wifi
|
HalClock::wifiOff();
|
||||||
WiFi.disconnect(false); // false = don't erase credentials, send disconnect frame
|
|
||||||
delay(100); // Allow disconnect frame to be sent
|
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
delay(100); // Allow WiFi hardware to fully power down
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OtaUpdateActivity::render(RenderLock&&) {
|
void OtaUpdateActivity::render(RenderLock&&) {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
#include <I18n.h>
|
#include <I18n.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <esp_sntp.h>
|
|
||||||
|
|
||||||
#include "CrossPointSettings.h"
|
#include "CrossPointSettings.h"
|
||||||
#include "MappedInputManager.h"
|
#include "MappedInputManager.h"
|
||||||
@@ -13,18 +12,6 @@
|
|||||||
#include "components/UITheme.h"
|
#include "components/UITheme.h"
|
||||||
#include "fontIds.h"
|
#include "fontIds.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
void wifiOff() {
|
|
||||||
if (esp_sntp_enabled()) {
|
|
||||||
esp_sntp_stop();
|
|
||||||
}
|
|
||||||
WiFi.disconnect(false);
|
|
||||||
delay(100);
|
|
||||||
WiFi.mode(WIFI_OFF);
|
|
||||||
delay(100);
|
|
||||||
}
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void SyncTimeActivity::onEnter() {
|
void SyncTimeActivity::onEnter() {
|
||||||
Activity::onEnter();
|
Activity::onEnter();
|
||||||
|
|
||||||
@@ -45,7 +32,7 @@ void SyncTimeActivity::onEnter() {
|
|||||||
|
|
||||||
void SyncTimeActivity::onExit() {
|
void SyncTimeActivity::onExit() {
|
||||||
Activity::onExit();
|
Activity::onExit();
|
||||||
wifiOff();
|
HalClock::wifiOff(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncTimeActivity::onWifiSelectionComplete(bool success) {
|
void SyncTimeActivity::onWifiSelectionComplete(bool success) {
|
||||||
@@ -68,7 +55,7 @@ void SyncTimeActivity::onWifiSelectionCancelled() { finish(); }
|
|||||||
|
|
||||||
void SyncTimeActivity::performSync() {
|
void SyncTimeActivity::performSync() {
|
||||||
bool ok = HalClock::syncNtp();
|
bool ok = HalClock::syncNtp();
|
||||||
wifiOff();
|
HalClock::wifiOff(true);
|
||||||
|
|
||||||
state = ok ? SUCCESS : FAILED;
|
state = ok ? SUCCESS : FAILED;
|
||||||
requestUpdate();
|
requestUpdate();
|
||||||
|
|||||||
Reference in New Issue
Block a user