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