Skip to content

Commit 701fce2

Browse files
committed
Fix getTime() and begin()
1 parent e606b4c commit 701fce2

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

src/EthernetConnectionManager.h

Lines changed: 28 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;
@@ -30,23 +31,22 @@ class EthConnectionManager : public ConnectionManager {
3031
uint8_t* mac;
3132
int ss_pin;
3233
EthernetClient ethClient;
34+
EthernetUDP Udp;
3335
int connectionTickTimeInterval;
3436
};
3537

3638
#if !defined(BOARD_HAS_WIFI) && !defined(BOARD_HAS_GSM)
3739
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
3840
#endif
3941

40-
EthConnectionManager::EthConnectionManager(uint8_t *mac, int ss_pin = 10) :
42+
EthConnectionManager::EthConnectionManager(uint8_t *mac, int ss_pin = -1) :
4143
mac(mac),
4244
ss_pin(ss_pin),
4345
lastConnectionTickTime(millis()),
4446
connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
4547
}
4648

47-
#include <EthernetUdp.h>
48-
49-
void sendNTPpacket(const char * address, uint8_t* packetBuffer, EthernetUDP* udp) {
49+
void EthConnectionManager::sendNTPpacket(const char * address, uint8_t* packetBuffer) {
5050
const int NTP_PACKET_SIZE = 48;
5151
memset(packetBuffer, 0, NTP_PACKET_SIZE);
5252
packetBuffer[0] = 0b11100011;
@@ -57,21 +57,28 @@ void sendNTPpacket(const char * address, uint8_t* packetBuffer, EthernetUDP* udp
5757
packetBuffer[13] = 0x4E;
5858
packetBuffer[14] = 49;
5959
packetBuffer[15] = 52;
60-
udp->beginPacket(address, 123);
61-
udp->write(packetBuffer, NTP_PACKET_SIZE);
62-
udp->endPacket();
60+
Udp.beginPacket(address, 123);
61+
Udp.write(packetBuffer, NTP_PACKET_SIZE);
62+
Udp.endPacket();
6363
}
6464

6565
unsigned long EthConnectionManager::getTime() {
66+
6667
unsigned int localPort = 8888;
67-
const char timeServer[] = "time.nist.gov";
68+
const char timeServer[] = "time.apple.com";
6869
const int NTP_PACKET_SIZE = 48;
6970
uint8_t packetBuffer[NTP_PACKET_SIZE];
70-
EthernetUDP Udp;
7171

7272
Udp.begin(localPort);
73-
sendNTPpacket(timeServer, packetBuffer, &Udp);
74-
while (!Udp.parsePacket()) {}
73+
sendNTPpacket(timeServer, packetBuffer);
74+
long start = millis();
75+
while (!Udp.parsePacket() && (millis() - start < 1000)) {
76+
77+
}
78+
if (millis() - start >= 1000) {
79+
//timeout reached
80+
return 0;
81+
}
7582
Udp.read(packetBuffer, NTP_PACKET_SIZE);
7683

7784
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
@@ -121,7 +128,11 @@ void EthConnectionManager::check() {
121128
changeConnectionState(CONNECTION_STATE_INIT);
122129
break;
123130
case CONNECTION_STATE_INIT:
124-
Ethernet.init(ss_pin);
131+
if (ss_pin == -1) {
132+
networkStatus = Ethernet.begin(mac);
133+
} else {
134+
networkStatus = Ethernet.begin(mac, ss_pin);
135+
}
125136
networkStatus = Ethernet.hardwareStatus();
126137
*msgBuffer = 0;
127138
sprintf(msgBuffer, "Eth hardware status(): %d", networkStatus);
@@ -153,8 +164,11 @@ void EthConnectionManager::check() {
153164
*msgBuffer = 0;
154165
sprintf(msgBuffer, "Connecting via dhcp");
155166
debugMessage(msgBuffer, 2);
156-
157-
networkStatus = Ethernet.begin(mac, ss_pin);
167+
if (ss_pin == -1) {
168+
networkStatus = Ethernet.begin(mac);
169+
} else {
170+
networkStatus = Ethernet.begin(mac, ss_pin);
171+
}
158172
*msgBuffer = 0;
159173
sprintf(msgBuffer, "Ethernet.status(): %d", networkStatus);
160174
debugMessage(msgBuffer, 2);

0 commit comments

Comments
 (0)