Skip to content

Commit 610944a

Browse files
authored
Merge pull request #349 from LeeLeahy2/eth-clear-provision
Ethernet: Clear and provision working using NetworkClientSecure
2 parents 5bb1e55 + d45bf08 commit 610944a

File tree

4 files changed

+439
-444
lines changed

4 files changed

+439
-444
lines changed

Firmware/RTK_Everywhere/Ethernet.ino

Lines changed: 97 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -118,29 +118,94 @@ void menuEthernet()
118118
// Ethernet routines
119119
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
120120

121-
// Regularly called to update the Ethernet status
122-
void ethernetBegin()
121+
// Display the Ethernet state
122+
void ethernetDisplayState()
123123
{
124-
if (present.ethernet_ws5500 == false)
125-
return;
124+
if (online.ethernetStatus >= ethernetStateEntries)
125+
systemPrint("UNKNOWN");
126+
else
127+
systemPrint(ethernetStates[online.ethernetStatus]);
128+
}
126129

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
129142
{
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 *)&ethernetNtpTv, 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)
132203
return;
133-
}
134204

135-
if ((productVariant != RTK_EVK) && (!ethernetIsNeeded()))
205+
// Skip if in configure-via-ethernet mode
206+
if (configureViaEthernet)
136207
return;
137208

138-
if (PERIODIC_DISPLAY(PD_ETHERNET_STATE))
139-
{
140-
PERIODIC_CLEAR(PD_ETHERNET_STATE);
141-
ethernetDisplayState();
142-
systemPrintln();
143-
}
144209
switch (online.ethernetStatus)
145210
{
146211
case (ETH_NOT_STARTED):
@@ -150,7 +215,7 @@ void ethernetBegin()
150215
if (!(ETH.begin(ETH_PHY_W5500, 0, pin_Ethernet_CS, pin_Ethernet_Interrupt, -1, SPI)))
151216
{
152217
if (settings.debugNetworkLayer)
153-
systemPrintln("Ethernet begin failed");
218+
systemPrintln("ERROR: ETH.begin failed");
154219
online.ethernetStatus = ETH_CAN_NOT_BEGIN;
155220
return;
156221
}
@@ -181,7 +246,10 @@ void ethernetBegin()
181246
else
182247
{
183248
if (settings.debugNetworkLayer)
184-
systemPrintln("Ethernet started with static IP");
249+
{
250+
systemPrint("Ethernet started with static IP: ");
251+
systemPrintln(settings.ethernetIP);
252+
}
185253
online.ethernetStatus = ETH_CONNECTED;
186254
}
187255
}
@@ -220,86 +288,18 @@ void ethernetBegin()
220288
break;
221289

222290
default:
223-
log_d("Unknown status");
291+
if (settings.debugNetworkLayer)
292+
systemPrintf("ERROR: Unknown state, %d\r\n", online.ethernetStatus);
224293
break;
225294
}
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 *)&ethernetNtpTv, 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;
282295

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+
}
303303
}
304304

305305
// Verify the Ethernet tables
@@ -348,6 +348,8 @@ void onEthernetEvent(arduino_event_id_t event, arduino_event_info_t info)
348348
eth_connected = false;
349349
break;
350350
default:
351+
if (settings.enablePrintEthernetDiag && (!inMainMenu))
352+
systemPrintf("ETH Unknown event: %d\r\n", event);
351353
break;
352354
}
353355
}

Firmware/RTK_Everywhere/MQTT_Client.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ void mqttClientUpdate()
525525

526526
// Start the network
527527
case MQTT_CLIENT_ON: {
528-
if (networkUserOpen(NETWORK_USER_MQTT_CLIENT, NETWORK_TYPE_WIFI))
528+
if (networkUserOpen(NETWORK_USER_MQTT_CLIENT, NETWORK_TYPE_ACTIVE))
529529
mqttClientSetState(MQTT_CLIENT_NETWORK_STARTED);
530530
break;
531531
}

Firmware/RTK_Everywhere/RTK_Everywhere.ino

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ int16_t *commandIndex;
801801

802802
// Display boot times
803803
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
804-
#define MAX_BOOT_TIME_ENTRIES 40
804+
#define MAX_BOOT_TIME_ENTRIES 39
805805
uint8_t bootTimeIndex;
806806
uint32_t bootTime[MAX_BOOT_TIME_ENTRIES];
807807
const char *bootTimeString[MAX_BOOT_TIME_ENTRIES];
@@ -1074,9 +1074,6 @@ void setup()
10741074
DMW_b("gnssConfigure");
10751075
gnssConfigure(); // Requires settings. Configure ZED module
10761076

1077-
DMW_b("ethernetBegin");
1078-
ethernetBegin(); // Requires settings. Start up the Ethernet connection
1079-
10801077
DMW_b("beginLBand");
10811078
beginLBand(); // Begin L-Band
10821079

0 commit comments

Comments
 (0)