Skip to content

Commit 5166ae1

Browse files
authored
Merge pull request #644 from DavidBerschauer/nmea-over-udp
NMEA stream over UDP
2 parents 577cadc + d70069c commit 5166ae1

File tree

15 files changed

+847
-28
lines changed

15 files changed

+847
-28
lines changed

Firmware/RTK_Surveyor/AP-Config/index.html

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,41 +1274,68 @@
12741274
</div>
12751275

12761276
<div class="form-check mt-3">
1277-
<label class="form-check-label" for="enableTcpClient">TCP Client</label>
1278-
<input class="form-check-input" type="checkbox" value="" id="enableTcpClient"
1277+
<label class="form-check-label" for="enablePvtClient">TCP Client</label>
1278+
<input class="form-check-input" type="checkbox" value="" id="enablePvtClient"
12791279
onClick="tcpBoxes()">
12801280
<span class="tt" data-bs-placement="right"
12811281
title="If enabled, device will connect to WiFi and push NMEA over the given TCP port.">
12821282
<span class="icon-info-circle text-primary ms-2"></span>
12831283
</span>
12841284
</div>
12851285
<div class="form-group row">
1286-
<p id="enableTcpClientError" class="inlineError"></p>
1286+
<p id="enablePvtClientError" class="inlineError"></p>
12871287
</div>
12881288

12891289
<div class="form-check mt-3">
1290-
<label class="form-check-label" for="enableTcpServer">TCP Server</label>
1291-
<input class="form-check-input" type="checkbox" value="" id="enableTcpServer"
1290+
<label class="form-check-label" for="enablePvtServer">TCP Server</label>
1291+
<input class="form-check-input" type="checkbox" value="" id="enablePvtServer"
12921292
onClick="tcpBoxes()">
12931293
<span class="tt" data-bs-placement="right"
12941294
title="If enabled, device will allow inbound TCP connections and push NMEA when a client is connected.">
12951295
<span class="icon-info-circle text-primary ms-2"></span>
12961296
</span>
12971297
</div>
12981298
<div class="form-group row">
1299-
<p id="enableTcpServerError" class="inlineError"></p>
1299+
<p id="enablePvtServerError" class="inlineError"></p>
13001300
</div>
13011301

13021302
<div id="tcpSettingsConfig">
13031303
<div class="form-group row">
1304-
<label for="wifiTcpPort" class="box-margin20 col-sm-3 col-4 col-form-label">Port:
1304+
<label for="pvtServerPort" class="box-margin20 col-sm-3 col-4 col-form-label">Port:
13051305
<span class="tt" data-bs-placement="right" title="TCP port to use. Default: 2947">
13061306
<span class="icon-info-circle text-primary ms-2"></span>
13071307
</span>
13081308
</label>
13091309
<div class="col-sm-8 col-7">
1310-
<input type="text" class="form-control" id="wifiTcpPort">
1311-
<p id="wifiTcpPortError" class="inlineError"></p>
1310+
<input type="text" class="form-control" id="pvtServerPort">
1311+
<p id="pvtServerPortError" class="inlineError"></p>
1312+
</div>
1313+
</div>
1314+
</div>
1315+
1316+
<div class="form-check mt-3">
1317+
<label class="form-check-label" for="enablePvtUdpServer">UDP Server</label>
1318+
<input class="form-check-input" type="checkbox" value="" id="enablePvtUdpServer"
1319+
onClick="udpBoxes()">
1320+
<span class="tt" data-bs-placement="right"
1321+
title="If enabled, device will broadcast NMEA sentences over UPD">
1322+
<span class="icon-info-circle text-primary ms-2"></span>
1323+
</span>
1324+
</div>
1325+
<div class="form-group row">
1326+
<p id="enablePvtUdpServerError" class="inlineError"></p>
1327+
</div>
1328+
1329+
<div id="udpSettingsConfig">
1330+
<div class="form-group row">
1331+
<label for="pvtUdpServerPort" class="box-margin20 col-sm-3 col-4 col-form-label">Port:
1332+
<span class="tt" data-bs-placement="right" title="UDP port to use. Default: 10110">
1333+
<span class="icon-info-circle text-primary ms-2"></span>
1334+
</span>
1335+
</label>
1336+
<div class="col-sm-8 col-7">
1337+
<input type="text" class="form-control" id="pvtUdpServerPort">
1338+
<p id="pvtUdpServerPortError" class="inlineError"></p>
13121339
</div>
13131340
</div>
13141341
</div>

Firmware/RTK_Surveyor/AP-Config/src/main.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ function parseIncoming(msg) {
353353
updateECEFList();
354354
updateGeodeticList();
355355
tcpBoxes();
356+
udpBoxes();
356357
tcpBoxesEthernet();
357358
dhcpEthernet();
358359
updateLatLong();
@@ -592,10 +593,13 @@ function validateFields() {
592593
checkElementString("wifiNetwork2Password", 0, 50, "Must be 0 to 50 characters", "collapseWiFiConfig");
593594
checkElementString("wifiNetwork3SSID", 0, 50, "Must be 0 to 50 characters", "collapseWiFiConfig");
594595
checkElementString("wifiNetwork3Password", 0, 50, "Must be 0 to 50 characters", "collapseWiFiConfig");
595-
if (ge("enableTcpClient").checked || ge("enableTcpServer").checked) {
596-
checkElementString("wifiTcpPort", 1, 65535, "Must be 1 to 65535", "collapseWiFiConfig");
596+
if (ge("enablePvtClient").checked || ge("enablePvtServer").checked) {
597+
checkElementString("pvtServerPort", 1, 65535, "Must be 1 to 65535", "collapseWiFiConfig");
597598
}
598-
checkCheckboxMutex("enableTcpClient", "enableTcpServer", "TCP Client and Server can not be enabled at the same time", "collapseWiFiConfig");
599+
if (ge("enablePvtUdpServer").checked) {
600+
checkElementString("pvtUdpServerPort", 1, 65535, "Must be 1 to 65535", "collapseWiFiConfig");
601+
}
602+
checkCheckboxMutex("enablePvtClient", "enablePvtServer", "TCP Client and Server can not be enabled at the same time", "collapseWiFiConfig");
599603

600604
//System Config
601605
if (ge("enableLogging").checked) {
@@ -1567,12 +1571,22 @@ function abortHandler(event) {
15671571
}
15681572

15691573
function tcpBoxes() {
1570-
if (ge("enableTcpClient").checked || ge("enableTcpServer").checked) {
1574+
if (ge("enablePvtServer").checked || ge("enablePvtClient").checked) {
15711575
show("tcpSettingsConfig");
15721576
}
15731577
else {
15741578
hide("tcpSettingsConfig");
1575-
ge("wifiTcpPort").value = 2947;
1579+
ge("pvtServerPort").value = 2947;
1580+
}
1581+
}
1582+
1583+
function udpBoxes() {
1584+
if (ge("enablePvtUdpServer").checked) {
1585+
show("udpSettingsConfig");
1586+
}
1587+
else {
1588+
hide("udpSettingsConfig");
1589+
ge("pvtUdpServerPort").value = 10110;
15761590
}
15771591
}
15781592

Firmware/RTK_Surveyor/Developer.ino

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@ void pvtServerZeroTail() {}
113113
void pvtServerValidateTables() {}
114114
void discardPvtServerBytes(RING_BUFFER_OFFSET previousTail, RING_BUFFER_OFFSET newTail) {}
115115

116+
//----------------------------------------
117+
// PVT UDP server
118+
//----------------------------------------
119+
120+
int pvtUdpServerSendData(uint16_t dataHead) {return 0;}
121+
void pvtUdpServerUpdate() {}
122+
void pvtUdpServerZeroTail() {}
123+
116124
//----------------------------------------
117125
// WiFi
118126
//----------------------------------------

Firmware/RTK_Surveyor/Ethernet.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ bool ethernetIsNeeded()
254254
return true;
255255

256256
// Does PVT client or server need Ethernet?
257-
if (settings.enablePvtClient || settings.enablePvtServer)
257+
if (settings.enablePvtClient || settings.enablePvtServer || settings.enablePvtUdpServer)
258258
return true;
259259

260260
return false;

Firmware/RTK_Surveyor/Form.ino

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,11 @@ void createSettingsString(char *newSettings)
10041004
else
10051005
stringRecord(newSettings, "wifiConfigOverAP", 0); // 1 = AP mode, 0 = WiFi
10061006

1007+
stringRecord(newSettings, "enablePvtServer", settings.enablePvtServer);
1008+
stringRecord(newSettings, "enablePvtClient", settings.enablePvtClient);
10071009
stringRecord(newSettings, "pvtServerPort", settings.pvtServerPort);
1010+
stringRecord(newSettings, "enablePvtUdpServer", settings.enablePvtUdpServer);
1011+
stringRecord(newSettings, "pvtUdpServerPort", settings.pvtUdpServerPort);
10081012
stringRecord(newSettings, "enableRCFirmware", enableRCFirmware);
10091013

10101014
// New settings not yet integrated
@@ -1250,6 +1254,8 @@ void updateSettingWithValue(const char *settingName, const char *settingValueStr
12501254
}
12511255
else if (strcmp(settingName, "pvtServerPort") == 0)
12521256
settings.pvtServerPort = settingValue;
1257+
else if (strcmp(settingName, "pvtUdpServerPort") == 0)
1258+
settings.pvtUdpServerPort = settingValue;
12531259
else if (strcmp(settingName, "wifiConfigOverAP") == 0)
12541260
{
12551261
if (settingValue == 1) // Drop downs come back as a value
@@ -1262,6 +1268,8 @@ void updateSettingWithValue(const char *settingName, const char *settingValueStr
12621268
settings.enablePvtClient = settingValueBool;
12631269
else if (strcmp(settingName, "enablePvtServer") == 0)
12641270
settings.enablePvtServer = settingValueBool;
1271+
else if (strcmp(settingName, "enablePvtUdpServer") == 0)
1272+
settings.enablePvtUdpServer = settingValueBool;
12651273
else if (strcmp(settingName, "enableRCFirmware") == 0)
12661274
enableRCFirmware = settingValueBool;
12671275
else if (strcmp(settingName, "minElev") == 0)

Firmware/RTK_Surveyor/NVM.ino

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,10 @@ void recordSystemSettingsToFile(File *settingsFile)
323323
settingsFile->printf("%s=%d\r\n", "bluetoothRadioType", settings.bluetoothRadioType);
324324
settingsFile->printf("%s=%d\r\n", "enablePvtClient", settings.enablePvtClient);
325325
settingsFile->printf("%s=%d\r\n", "enablePvtServer", settings.enablePvtServer);
326+
settingsFile->printf("%s=%d\r\n", "enablePvtUdpServer", settings.enablePvtUdpServer);
326327
settingsFile->printf("%s=%d\r\n", "debugPvtClient", settings.debugPvtClient);
327328
settingsFile->printf("%s=%d\r\n", "debugPvtServer", settings.debugPvtServer);
329+
settingsFile->printf("%s=%d\r\n", "debugPvtUdpServer", settings.debugPvtUdpServer);
328330
settingsFile->printf("%s=%d\r\n", "espnowBroadcast", settings.espnowBroadcast);
329331
settingsFile->printf("%s=%d\r\n", "antennaHeight", settings.antennaHeight);
330332
settingsFile->printf("%s=%0.2f\r\n", "antennaReferencePoint", settings.antennaReferencePoint);
@@ -350,6 +352,7 @@ void recordSystemSettingsToFile(File *settingsFile)
350352

351353
settingsFile->printf("%s=%d\r\n", "wifiConfigOverAP", settings.wifiConfigOverAP);
352354
settingsFile->printf("%s=%d\r\n", "pvtServerPort", settings.pvtServerPort);
355+
settingsFile->printf("%s=%d\r\n", "pvtUdpServerPort", settings.pvtUdpServerPort);
353356
settingsFile->printf("%s=%d\r\n", "minElev", settings.minElev);
354357

355358
settingsFile->printf("%s=%d\r\n", "imuYaw", settings.imuYaw);
@@ -1130,10 +1133,14 @@ bool parseLine(char *str, Settings *settings)
11301133
settings->enablePvtClient = d;
11311134
else if (strcmp(settingName, "enablePvtServer") == 0)
11321135
settings->enablePvtServer = d;
1136+
else if (strcmp(settingName, "enablePvtUdpServer") == 0)
1137+
settings->enablePvtUdpServer = d;
11331138
else if (strcmp(settingName, "debugPvtClient") == 0)
11341139
settings->debugPvtClient = d;
11351140
else if (strcmp(settingName, "debugPvtServer") == 0)
11361141
settings->debugPvtServer = d;
1142+
else if (strcmp(settingName, "debugPvtUdpServer") == 0)
1143+
settings->debugPvtUdpServer = d;
11371144
else if (strcmp(settingName, "espnowBroadcast") == 0)
11381145
settings->espnowBroadcast = d;
11391146
else if (strcmp(settingName, "antennaHeight") == 0)
@@ -1162,6 +1169,8 @@ bool parseLine(char *str, Settings *settings)
11621169
settings->wifiConfigOverAP = d;
11631170
else if (strcmp(settingName, "pvtServerPort") == 0)
11641171
settings->pvtServerPort = d;
1172+
else if (strcmp(settingName, "pvtUdpServerPort") == 0)
1173+
settings->pvtUdpServerPort = d;
11651174
else if (strcmp(settingName, "minElev") == 0)
11661175
{
11671176
if (settings->minElev != d)

Firmware/RTK_Surveyor/Network.ino

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ const char * const networkUser[] =
186186
"NTRIP Server",
187187
"PVT Client",
188188
"PVT Server",
189+
"PVT UDP Server",
189190
};
190191
const int networkUserEntries = sizeof(networkUser) / sizeof(networkUser[0]);
191192

@@ -228,6 +229,11 @@ void menuNetwork()
228229
if (settings.enablePvtServer)
229230
systemPrintf("5) PVT Server Port: %ld\r\n", settings.pvtServerPort);
230231

232+
systemPrintf("6) PVT UDP Server: %s\r\n", settings.enablePvtUdpServer ? "Enabled" : "Disabled");
233+
234+
if (settings.enablePvtUdpServer)
235+
systemPrintf("7) PVT UDP Server Port: %ld\r\n", settings.pvtUdpServerPort);
236+
231237
if (HAS_ETHERNET)
232238
{
233239
//------------------------------
@@ -319,6 +325,27 @@ void menuNetwork()
319325
}
320326
}
321327

328+
//------------------------------
329+
// Get the PVT UDP server parameters
330+
//------------------------------
331+
332+
else if (incoming == 6)
333+
// Toggle WiFi UDP NEMA server
334+
settings.enablePvtUdpServer ^= 1;
335+
336+
else if (incoming == 7 && settings.enablePvtUdpServer)
337+
{
338+
systemPrint("Enter the UDP port to use (0 to 65535): ");
339+
int portNumber = getNumber(); // Returns EXIT, TIMEOUT, or long
340+
if ((portNumber != INPUT_RESPONSE_GETNUMBER_EXIT) && (portNumber != INPUT_RESPONSE_GETNUMBER_TIMEOUT))
341+
{
342+
if (portNumber < 0 || portNumber > 65535)
343+
systemPrintln("Error: UDP Port out of range");
344+
else
345+
settings.pvtUdpServerPort = portNumber; // Recorded to NVM and file at main menu exit
346+
}
347+
}
348+
322349
//------------------------------
323350
// Get the network layer parameters
324351
//------------------------------
@@ -845,6 +872,12 @@ void networkStop(uint8_t networkType)
845872
systemPrintln("Network layer stopping PVT server");
846873
pvtServerStop();
847874
break;
875+
876+
case NETWORK_USER_PVT_UDP_SERVER:
877+
if (settings.debugNetworkLayer)
878+
systemPrintln("Network layer stopping PVT UDP server");
879+
pvtUdpServerStop();
880+
break;
848881
}
849882
}
850883
}
@@ -1082,6 +1115,7 @@ void networkUpdate()
10821115
ntripServerUpdate(); // Check the NTRIP server connection and move data ZED --> NTRIP
10831116
pvtClientUpdate(); // Turn on the PVT client as needed
10841117
pvtServerUpdate(); // Turn on the PVT server as needed
1118+
pvtUdpServerUpdate(); // Turn on the PVT UDP server as needed
10851119
}
10861120

10871121
// Display the IP addresses

0 commit comments

Comments
 (0)