Skip to content

Commit

Permalink
Merge branch 'hotfix_relase_0.8.140' into development03
Browse files Browse the repository at this point in the history
  • Loading branch information
lumapu committed Sep 14, 2024
2 parents 62ad964 + 384ee6e commit d155ab1
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 18 deletions.
8 changes: 6 additions & 2 deletions src/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,13 @@ void app::onNetwork(bool gotIp) {
if(gotIp) {
ah::Scheduler::resetTicker();
regularTickers(); //reinstall regular tickers
every(std::bind(&app::tickSend, this), mConfig->inst.sendInterval, "tSend");
if(!mConfig->inst.startWithoutTime) // already set in regularTickers
every(std::bind(&app::tickSend, this), mConfig->inst.sendInterval, "tSend");
mTickerInstallOnce = true;
mSunrise = 0; // needs to be set to 0, to reinstall sunrise and ivComm tickers!
once(std::bind(&app::tickNtpUpdate, this), 2, "ntp2");

uint32_t nextTrig = (mTimestamp < 0x1337) ? 0 : (mConfig->ntp.interval * 60);
once(std::bind(&app::tickNtpUpdate, this), nextTrig, "ntp");
}
}

Expand Down Expand Up @@ -237,6 +240,7 @@ void app::tickNtpUpdate(void) {
nxtTrig = mConfig->ntp.interval * 60; // check again in configured interval
mNtpReceived = false;
}
yield();

updateNtp();

Expand Down
53 changes: 37 additions & 16 deletions src/network/AhoyNetwork.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
#include "../utils/helper.h"
#include "AhoyWifiAp.h"
#include "AsyncJson.h"
#include <lwip/dns.h>

#define NTP_PACKET_SIZE 48

class AhoyNetwork {
public:
typedef std::function<void(bool)> OnNetworkCB;
Expand All @@ -26,6 +26,8 @@ class AhoyNetwork {
mOnNetworkCB = onNetworkCB;
mOnTimeCB = onTimeCB;

mNtpIp = IPAddress(0, 0, 0, 0);

if('\0' == mConfig->sys.deviceName[0])
snprintf(mConfig->sys.deviceName, DEVNAME_LEN, "%s", DEF_DEVICE_NAME);

Expand Down Expand Up @@ -55,24 +57,46 @@ class AhoyNetwork {
return ((mStatus == NetworkState::CONNECTED) || (mStatus == NetworkState::GOT_IP));
}

bool updateNtpTime(void) {
if(NetworkState::GOT_IP != mStatus)
return false;
static void dnsCallback(const char *name, const ip_addr_t *ipaddr, void *pClass) {
AhoyNetwork *obj = static_cast<AhoyNetwork*>(pClass);
if (ipaddr) {
obj->mNtpIp = ipaddr->u_addr.ip4.addr;
}
}

void updateNtpTime() {
if(mNtpIp != 0) {
startNtpUpdate();
return;
}

ip_addr_t ipaddr;
mNtpIp = WiFi.gatewayIP();
// dns_gethostbyname runs asynchronous and sets the member mNtpIp which is then checked on
// next call of updateNtpTime
err_t err = dns_gethostbyname(mConfig->ntp.addr, &ipaddr, dnsCallback, this);

if (err == ERR_OK) {
mNtpIp = ipaddr.u_addr.ip4.addr;
startNtpUpdate();
}
}

protected:
void startNtpUpdate() {
DPRINTLN(DBG_INFO, F("get time from: ") + mNtpIp.toString());
if (!mUdp.connected()) {
IPAddress timeServer;
if (!WiFi.hostByName(mConfig->ntp.addr, timeServer))
return false;
if (!mUdp.connect(timeServer, mConfig->ntp.port))
return false;
if (!mUdp.connect(mNtpIp, mConfig->ntp.port))
return;
}

mUdp.onPacket([this](AsyncUDPPacket packet) {
this->handleNTPPacket(packet);
});
sendNTPpacket();

return true;
// reset to start with DNS lookup next time again
mNtpIp = IPAddress(0, 0, 0, 0);
}

public:
Expand Down Expand Up @@ -185,7 +209,7 @@ class AhoyNetwork {
std::swap(sort[i], sort[j]);
}

private:
protected:
void sendNTPpacket(void) {
uint8_t buf[NTP_PACKET_SIZE];
memset(buf, 0, NTP_PACKET_SIZE);
Expand All @@ -194,11 +218,6 @@ class AhoyNetwork {
buf[1] = 0; // Stratum
buf[2] = 6; // Max Interval between messages in seconds
buf[3] = 0xEC; // Clock Precision
// bytes 4 - 11 are for Root Delay and Dispersion and were set to 0 by memset
buf[12] = 49; // four-byte reference ID identifying
buf[13] = 0x4E;
buf[14] = 49;
buf[15] = 52;

mUdp.write(buf, NTP_PACKET_SIZE);
}
Expand Down Expand Up @@ -245,6 +264,8 @@ class AhoyNetwork {
AhoyWifiAp mAp;
DNSServer mDns;

IPAddress mNtpIp;

AsyncUDP mUdp; // for time server
#if defined(ESP8266)
WiFiEventHandler wifiConnectHandler, wifiDisconnectHandler, wifiGotIPHandler;
Expand Down

0 comments on commit d155ab1

Please sign in to comment.