@@ -16,6 +16,7 @@ class EthConnectionManager : public ConnectionManager {
16
16
private:
17
17
18
18
void changeConnectionState (NetworkConnectionState _newState);
19
+ void sendNTPpacket (const char * address, uint8_t * packetBuffer);
19
20
20
21
const int CHECK_INTERVAL_IDLE = 100 ;
21
22
const int CHECK_INTERVAL_INIT = 100 ;
@@ -30,23 +31,22 @@ class EthConnectionManager : public ConnectionManager {
30
31
uint8_t * mac;
31
32
int ss_pin;
32
33
EthernetClient ethClient;
34
+ EthernetUDP Udp;
33
35
int connectionTickTimeInterval;
34
36
};
35
37
36
38
#if !defined(BOARD_HAS_WIFI) && !defined(BOARD_HAS_GSM)
37
39
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000 ;
38
40
#endif
39
41
40
- EthConnectionManager::EthConnectionManager (uint8_t *mac, int ss_pin = 10 ) :
42
+ EthConnectionManager::EthConnectionManager (uint8_t *mac, int ss_pin = - 1 ) :
41
43
mac(mac),
42
44
ss_pin(ss_pin),
43
45
lastConnectionTickTime(millis()),
44
46
connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
45
47
}
46
48
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) {
50
50
const int NTP_PACKET_SIZE = 48 ;
51
51
memset (packetBuffer, 0 , NTP_PACKET_SIZE);
52
52
packetBuffer[0 ] = 0b11100011 ;
@@ -57,21 +57,28 @@ void sendNTPpacket(const char * address, uint8_t* packetBuffer, EthernetUDP* udp
57
57
packetBuffer[13 ] = 0x4E ;
58
58
packetBuffer[14 ] = 49 ;
59
59
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 ();
63
63
}
64
64
65
65
unsigned long EthConnectionManager::getTime () {
66
+
66
67
unsigned int localPort = 8888 ;
67
- const char timeServer[] = " time.nist.gov " ;
68
+ const char timeServer[] = " time.apple.com " ;
68
69
const int NTP_PACKET_SIZE = 48 ;
69
70
uint8_t packetBuffer[NTP_PACKET_SIZE];
70
- EthernetUDP Udp;
71
71
72
72
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
+ }
75
82
Udp.read (packetBuffer, NTP_PACKET_SIZE);
76
83
77
84
unsigned long highWord = word (packetBuffer[40 ], packetBuffer[41 ]);
@@ -121,7 +128,11 @@ void EthConnectionManager::check() {
121
128
changeConnectionState (CONNECTION_STATE_INIT);
122
129
break ;
123
130
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
+ }
125
136
networkStatus = Ethernet.hardwareStatus ();
126
137
*msgBuffer = 0 ;
127
138
sprintf (msgBuffer, " Eth hardware status(): %d" , networkStatus);
@@ -153,8 +164,11 @@ void EthConnectionManager::check() {
153
164
*msgBuffer = 0 ;
154
165
sprintf (msgBuffer, " Connecting via dhcp" );
155
166
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
+ }
158
172
*msgBuffer = 0 ;
159
173
sprintf (msgBuffer, " Ethernet.status(): %d" , networkStatus);
160
174
debugMessage (msgBuffer, 2 );
0 commit comments