@@ -118,29 +118,94 @@ void menuEthernet()
118
118
// Ethernet routines
119
119
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
120
120
121
- // Regularly called to update the Ethernet status
122
- void ethernetBegin ()
121
+ // Display the Ethernet state
122
+ void ethernetDisplayState ()
123
123
{
124
- if (present.ethernet_ws5500 == false )
125
- return ;
124
+ if (online.ethernetStatus >= ethernetStateEntries)
125
+ systemPrint (" UNKNOWN" );
126
+ else
127
+ systemPrint (ethernetStates[online.ethernetStatus ]);
128
+ }
126
129
127
- // Skip if going into configure-via-ethernet mode
128
- if (configureViaEthernet)
130
+ // Return the IP address for the Ethernet controller
131
+ IPAddress ethernetGetIpAddress ()
132
+ {
133
+ return ETH.localIP ();
134
+ }
135
+
136
+ // Determine if Ethernet is needed. Saves RAM...
137
+ bool ethernetIsNeeded ()
138
+ {
139
+ bool needed = true ;
140
+
141
+ do
129
142
{
130
- if (settings.debugNetworkLayer )
131
- systemPrintln (" configureViaEthernet: skipping ethernetBegin" );
143
+ // Does NTP need Ethernet?
144
+ if (inNtpMode () == true )
145
+ break ;
146
+
147
+ // Does Base mode NTRIP Server need Ethernet?
148
+ if (settings.enableNtripServer == true && inBaseMode () == true )
149
+ break ;
150
+
151
+ // Does Rover mode NTRIP Client need Ethernet?
152
+ if (settings.enableNtripClient == true && inRoverMode () == true )
153
+ break ;
154
+
155
+ // Does TCP client or server need Ethernet?
156
+ if (settings.enableTcpClient || settings.enableTcpServer || settings.enableUdpServer ||
157
+ settings.enableAutoFirmwareUpdate )
158
+ break ;
159
+
160
+ // Is the platform using Ethernet
161
+ if (networkGetActiveType () == NETWORK_TYPE_ETHERNET)
162
+ break ;
163
+
164
+ // Forced to use Ethernet
165
+ if ((settings.defaultNetworkType == NETWORK_TYPE_ETHERNET) && (!settings.enableNetworkFailover ))
166
+ break ;
167
+
168
+ needed = false ;
169
+ } while (0 );
170
+
171
+ if (settings.enablePrintEthernetDiag && (!inMainMenu))
172
+ systemPrintf (" ethernetIsNeeded = %s\r\n " , needed ? " true" : " false" );
173
+ return needed;
174
+ }
175
+
176
+ // Ethernet (W5500) ISR
177
+ // Triggered by the falling edge of the W5500 interrupt signal - indicates the arrival of a packet
178
+ // Record the time the packet arrived
179
+ void ethernetISR ()
180
+ {
181
+ // Don't check or clear the interrupt here -
182
+ // it may clash with a GNSS SPI transaction and cause a wdt timeout.
183
+ // Do it in updateEthernet
184
+ gettimeofday ((timeval *)ðernetNtpTv, nullptr ); // Record the time of the NTP interrupt
185
+ }
186
+
187
+ // Restart the Ethernet controller
188
+ void ethernetRestart ()
189
+ {
190
+ // Reset online.ethernetStatus so ethernetBegin will call Ethernet.begin to use the new settings
191
+ online.ethernetStatus = ETH_NOT_STARTED;
192
+
193
+ // NTP Server
194
+ ntpServerStop ();
195
+
196
+ // NTRIP?
197
+ }
198
+
199
+ // Update the Ethernet state
200
+ void ethernetUpdate ()
201
+ {
202
+ if (present.ethernet_ws5500 == false )
132
203
return ;
133
- }
134
204
135
- if ((productVariant != RTK_EVK) && (!ethernetIsNeeded ()))
205
+ // Skip if in configure-via-ethernet mode
206
+ if (configureViaEthernet)
136
207
return ;
137
208
138
- if (PERIODIC_DISPLAY (PD_ETHERNET_STATE))
139
- {
140
- PERIODIC_CLEAR (PD_ETHERNET_STATE);
141
- ethernetDisplayState ();
142
- systemPrintln ();
143
- }
144
209
switch (online.ethernetStatus )
145
210
{
146
211
case (ETH_NOT_STARTED):
@@ -150,7 +215,7 @@ void ethernetBegin()
150
215
if (!(ETH.begin (ETH_PHY_W5500, 0 , pin_Ethernet_CS, pin_Ethernet_Interrupt, -1 , SPI)))
151
216
{
152
217
if (settings.debugNetworkLayer )
153
- systemPrintln (" Ethernet begin failed" );
218
+ systemPrintln (" ERROR: ETH. begin failed" );
154
219
online.ethernetStatus = ETH_CAN_NOT_BEGIN;
155
220
return ;
156
221
}
@@ -181,7 +246,10 @@ void ethernetBegin()
181
246
else
182
247
{
183
248
if (settings.debugNetworkLayer )
184
- systemPrintln (" Ethernet started with static IP" );
249
+ {
250
+ systemPrint (" Ethernet started with static IP: " );
251
+ systemPrintln (settings.ethernetIP );
252
+ }
185
253
online.ethernetStatus = ETH_CONNECTED;
186
254
}
187
255
}
@@ -220,86 +288,18 @@ void ethernetBegin()
220
288
break ;
221
289
222
290
default :
223
- log_d (" Unknown status" );
291
+ if (settings.debugNetworkLayer )
292
+ systemPrintf (" ERROR: Unknown state, %d\r\n " , online.ethernetStatus );
224
293
break ;
225
294
}
226
- }
227
-
228
- // Display the Ethernet state
229
- void ethernetDisplayState ()
230
- {
231
- if (online.ethernetStatus >= ethernetStateEntries)
232
- systemPrint (" UNKNOWN" );
233
- else
234
- systemPrint (ethernetStates[online.ethernetStatus ]);
235
- }
236
-
237
- // Return the IP address for the Ethernet controller
238
- IPAddress ethernetGetIpAddress ()
239
- {
240
- return ETH.localIP ();
241
- }
242
-
243
- // Determine if Ethernet is needed. Saves RAM...
244
- bool ethernetIsNeeded ()
245
- {
246
- // Does NTP need Ethernet?
247
- if (inNtpMode () == true )
248
- return true ;
249
-
250
- // Does Base mode NTRIP Server need Ethernet?
251
- if (settings.enableNtripServer == true && inBaseMode () == true )
252
- return true ;
253
-
254
- // Does Rover mode NTRIP Client need Ethernet?
255
- if (settings.enableNtripClient == true && inRoverMode () == true )
256
- return true ;
257
-
258
- // Does TCP client or server need Ethernet?
259
- if (settings.enableTcpClient || settings.enableTcpServer || settings.enableUdpServer ||
260
- settings.enableAutoFirmwareUpdate )
261
- return true ;
262
-
263
- return false ;
264
- }
265
-
266
- // Ethernet (W5500) ISR
267
- // Triggered by the falling edge of the W5500 interrupt signal - indicates the arrival of a packet
268
- // Record the time the packet arrived
269
- void ethernetISR ()
270
- {
271
- // Don't check or clear the interrupt here -
272
- // it may clash with a GNSS SPI transaction and cause a wdt timeout.
273
- // Do it in updateEthernet
274
- gettimeofday ((timeval *)ðernetNtpTv, nullptr ); // Record the time of the NTP interrupt
275
- }
276
-
277
- // Restart the Ethernet controller
278
- void ethernetRestart ()
279
- {
280
- // Reset online.ethernetStatus so ethernetBegin will call Ethernet.begin to use the new settings
281
- online.ethernetStatus = ETH_NOT_STARTED;
282
295
283
- // NTP Server
284
- ntpServerStop ();
285
-
286
- // NTRIP?
287
- }
288
-
289
- // Update the Ethernet state
290
- void ethernetUpdate ()
291
- {
292
- // Skip if in configure-via-ethernet mode
293
- if (configureViaEthernet)
294
- return ;
295
-
296
- if (present.ethernet_ws5500 == false )
297
- return ;
298
-
299
- if (online.ethernetStatus == ETH_CAN_NOT_BEGIN)
300
- return ;
301
-
302
- ethernetBegin (); // This updates the link status
296
+ // Display the current state
297
+ if (PERIODIC_DISPLAY (PD_ETHERNET_STATE))
298
+ {
299
+ PERIODIC_CLEAR (PD_ETHERNET_STATE);
300
+ ethernetDisplayState ();
301
+ systemPrintln ();
302
+ }
303
303
}
304
304
305
305
// Verify the Ethernet tables
@@ -348,6 +348,8 @@ void onEthernetEvent(arduino_event_id_t event, arduino_event_info_t info)
348
348
eth_connected = false ;
349
349
break ;
350
350
default :
351
+ if (settings.enablePrintEthernetDiag && (!inMainMenu))
352
+ systemPrintf (" ETH Unknown event: %d\r\n " , event);
351
353
break ;
352
354
}
353
355
}
0 commit comments