Skip to content

Commit 5bc44a7

Browse files
committed
Fix getTime() and begin()
1 parent e606b4c commit 5bc44a7

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

src/EthernetConnectionManager.h

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class EthConnectionManager : public ConnectionManager {
1616
private:
1717

1818
void changeConnectionState(NetworkConnectionState _newState);
19+
void sendNTPpacket(const char * address, uint8_t* packetBuffer);
1920

2021
const int CHECK_INTERVAL_IDLE = 100;
2122
const int CHECK_INTERVAL_INIT = 100;
@@ -29,24 +30,24 @@ class EthConnectionManager : public ConnectionManager {
2930
unsigned long lastConnectionTickTime, lastNetworkStep;
3031
uint8_t* mac;
3132
int ss_pin;
33+
long cached_epoch = 0;
3234
EthernetClient ethClient;
35+
EthernetUDP Udp;
3336
int connectionTickTimeInterval;
3437
};
3538

3639
#if !defined(BOARD_HAS_WIFI) && !defined(BOARD_HAS_GSM)
3740
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
3841
#endif
3942

40-
EthConnectionManager::EthConnectionManager(uint8_t *mac, int ss_pin = 10) :
43+
EthConnectionManager::EthConnectionManager(uint8_t *mac, int ss_pin = -1) :
4144
mac(mac),
4245
ss_pin(ss_pin),
4346
lastConnectionTickTime(millis()),
4447
connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
4548
}
4649

47-
#include <EthernetUdp.h>
48-
49-
void sendNTPpacket(const char * address, uint8_t* packetBuffer, EthernetUDP* udp) {
50+
void EthConnectionManager::sendNTPpacket(const char * address, uint8_t* packetBuffer) {
5051
const int NTP_PACKET_SIZE = 48;
5152
memset(packetBuffer, 0, NTP_PACKET_SIZE);
5253
packetBuffer[0] = 0b11100011;
@@ -57,21 +58,31 @@ void sendNTPpacket(const char * address, uint8_t* packetBuffer, EthernetUDP* udp
5758
packetBuffer[13] = 0x4E;
5859
packetBuffer[14] = 49;
5960
packetBuffer[15] = 52;
60-
udp->beginPacket(address, 123);
61-
udp->write(packetBuffer, NTP_PACKET_SIZE);
62-
udp->endPacket();
61+
Udp.beginPacket(address, 123);
62+
Udp.write(packetBuffer, NTP_PACKET_SIZE);
63+
Udp.endPacket();
6364
}
6465

6566
unsigned long EthConnectionManager::getTime() {
67+
68+
if (cached_epoch != 0) {
69+
return cached_epoch;
70+
}
6671
unsigned int localPort = 8888;
67-
const char timeServer[] = "time.nist.gov";
72+
const char timeServer[] = "time.apple.com";
6873
const int NTP_PACKET_SIZE = 48;
6974
uint8_t packetBuffer[NTP_PACKET_SIZE];
70-
EthernetUDP Udp;
7175

7276
Udp.begin(localPort);
73-
sendNTPpacket(timeServer, packetBuffer, &Udp);
74-
while (!Udp.parsePacket()) {}
77+
sendNTPpacket(timeServer, packetBuffer);
78+
long start = millis();
79+
while (!Udp.parsePacket() && (millis() - start < 1000)) {
80+
81+
}
82+
if (millis() - start >= 1000) {
83+
//timeout reached
84+
return 0;
85+
}
7586
Udp.read(packetBuffer, NTP_PACKET_SIZE);
7687

7788
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
@@ -80,6 +91,7 @@ unsigned long EthConnectionManager::getTime() {
8091
const unsigned long seventyYears = 2208988800UL;
8192
unsigned long epoch = secsSince1900 - seventyYears;
8293

94+
cached_epoch = epoch;
8395
return epoch;
8496
}
8597

@@ -121,7 +133,11 @@ void EthConnectionManager::check() {
121133
changeConnectionState(CONNECTION_STATE_INIT);
122134
break;
123135
case CONNECTION_STATE_INIT:
124-
Ethernet.init(ss_pin);
136+
if (ss_pin == -1) {
137+
networkStatus = Ethernet.begin(mac);
138+
} else {
139+
networkStatus = Ethernet.begin(mac, ss_pin);
140+
}
125141
networkStatus = Ethernet.hardwareStatus();
126142
*msgBuffer = 0;
127143
sprintf(msgBuffer, "Eth hardware status(): %d", networkStatus);
@@ -153,8 +169,11 @@ void EthConnectionManager::check() {
153169
*msgBuffer = 0;
154170
sprintf(msgBuffer, "Connecting via dhcp");
155171
debugMessage(msgBuffer, 2);
156-
157-
networkStatus = Ethernet.begin(mac, ss_pin);
172+
if (ss_pin == -1) {
173+
networkStatus = Ethernet.begin(mac);
174+
} else {
175+
networkStatus = Ethernet.begin(mac, ss_pin);
176+
}
158177
*msgBuffer = 0;
159178
sprintf(msgBuffer, "Ethernet.status(): %d", networkStatus);
160179
debugMessage(msgBuffer, 2);

0 commit comments

Comments
 (0)