mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-10 09:49:54 +03:00
1.9.0 web - new implementation
This commit is contained in:
49
src/Ntp.cpp
Normal file
49
src/Ntp.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Ntp.cpp
|
||||
*/
|
||||
|
||||
#include "Ntp.h"
|
||||
|
||||
char * NtpClient::TimeServerName;
|
||||
int8_t NtpClient::timezone;
|
||||
time_t NtpClient::syncInterval;
|
||||
IPAddress NtpClient::timeServer;
|
||||
|
||||
AsyncUDP NtpClient::udpListener;
|
||||
byte NtpClient::NTPpacket[NTP_PACKET_SIZE];
|
||||
|
||||
void ICACHE_FLASH_ATTR NtpClient::Ntp(const char * server, int8_t tz, time_t syncSecs) {
|
||||
TimeServerName = strdup(server);
|
||||
timezone = tz;
|
||||
syncInterval = syncSecs;
|
||||
WiFi.hostByName(TimeServerName, timeServer);
|
||||
setSyncProvider(getNtpTime);
|
||||
setSyncInterval(syncInterval);
|
||||
}
|
||||
|
||||
ICACHE_FLASH_ATTR NtpClient::~NtpClient() {
|
||||
udpListener.close();
|
||||
}
|
||||
|
||||
// send an NTP request to the time server at the given address
|
||||
time_t ICACHE_FLASH_ATTR NtpClient::getNtpTime() {
|
||||
memset(NTPpacket, 0, sizeof(NTPpacket));
|
||||
NTPpacket[0] = 0b11100011;
|
||||
NTPpacket[1] = 0;
|
||||
NTPpacket[2] = 6;
|
||||
NTPpacket[3] = 0xEC;
|
||||
NTPpacket[12] = 49;
|
||||
NTPpacket[13] = 0x4E;
|
||||
NTPpacket[14] = 49;
|
||||
NTPpacket[15] = 52;
|
||||
if (udpListener.connect(timeServer, 123)) {
|
||||
udpListener.onPacket([](AsyncUDPPacket packet) {
|
||||
unsigned long highWord = word(packet.data()[40], packet.data()[41]);
|
||||
unsigned long lowWord = word(packet.data()[42], packet.data()[43]);
|
||||
time_t UnixUTCtime = (highWord << 16 | lowWord) - 2208988800UL;
|
||||
setTime(UnixUTCtime);
|
||||
});
|
||||
}
|
||||
udpListener.write(NTPpacket, sizeof(NTPpacket));
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user