Skip to content

Commit e862e56

Browse files
authored
Merge pull request #405 from sparkfun/UDP_Improvements
Fix UDP Server on Ethernet (EVK)
2 parents a50c4b5 + 0221705 commit e862e56

File tree

3 files changed

+63
-9
lines changed

3 files changed

+63
-9
lines changed

Firmware/RTK_Everywhere/UdpServer.ino

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,24 +105,26 @@ int32_t udpServerSendDataBroadcast(uint8_t *data, uint16_t length)
105105
return 0;
106106

107107
// Send the data as broadcast
108-
if (settings.enableUdpServer && online.udpServer && wifiIsConnected())
108+
if (settings.enableUdpServer && online.udpServer && networkIsMediaConnected(networkGetUserNetwork(NETWORK_USER_UDP_SERVER)))
109109
{
110-
udpServer->beginPacket(networkGetBroadcastIpAddress(networkGetType(NETWORK_USER_UDP_SERVER)),
111-
settings.udpServerPort);
110+
IPAddress broadcastAddress = networkGetBroadcastIpAddress(networkGetType(NETWORK_USER_UDP_SERVER));
111+
udpServer->beginPacket( broadcastAddress, settings.udpServerPort);
112112
udpServer->write(data, length);
113113
if (udpServer->endPacket())
114114
{
115115
if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_BROADCAST_DATA)) && (!inMainMenu))
116116
{
117-
systemPrintf("UDP Server wrote %d bytes as broadcast on port %d\r\n", length, settings.udpServerPort);
117+
systemPrintf("UDP Server wrote %d bytes as broadcast (%s) on port %d\r\n", length,
118+
broadcastAddress.toString(), settings.udpServerPort);
118119
PERIODIC_CLEAR(PD_UDP_SERVER_BROADCAST_DATA);
119120
}
120121
}
121122
// Failed to write the data
122123
else if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_BROADCAST_DATA)) && (!inMainMenu))
123124
{
124125
PERIODIC_CLEAR(PD_UDP_SERVER_BROADCAST_DATA);
125-
systemPrintf("UDP Server failed to write %d bytes as broadcast\r\n", length);
126+
systemPrintf("UDP Server failed to write %d bytes as broadcast (%s) on port %d\r\n", length,
127+
broadcastAddress.toString(), settings.udpServerPort);
126128
length = 0;
127129
}
128130
}
@@ -204,17 +206,17 @@ void udpServerSetState(uint8_t newState)
204206
if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_STATE)) && (!inMainMenu))
205207
{
206208
if (udpServerState == newState)
207-
systemPrint("*");
209+
systemPrint("UDP Server: *");
208210
else
209-
systemPrintf("%s --> ", udpServerStateName[udpServerState]);
211+
systemPrintf("UDP Server: %s --> ", udpServerStateName[udpServerState]);
210212
}
211213
udpServerState = newState;
212214
if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_STATE)) && (!inMainMenu))
213215
{
214216
PERIODIC_CLEAR(PD_UDP_SERVER_STATE);
215217
if (newState >= UDP_SERVER_STATE_MAX)
216218
{
217-
systemPrintf("Unknown UDP Server state: %d\r\n", udpServerState);
219+
systemPrintf("Unknown state: %d\r\n", udpServerState);
218220
reportFatalError("Unknown UDP Server state");
219221
}
220222
else
@@ -311,7 +313,7 @@ void udpServerUpdate()
311313
// Wait until the UDP server is enabled
312314
case UDP_SERVER_STATE_OFF:
313315
// Determine if the UDP server should be running
314-
if (EQ_RTK_MODE(udpServerMode) && settings.enableUdpServer && (!wifiIsConnected()))
316+
if (EQ_RTK_MODE(udpServerMode) && settings.enableUdpServer) // Was && (!wifiIsConnected())) - TODO check this
315317
{
316318
if (networkUserOpen(NETWORK_USER_UDP_SERVER, NETWORK_TYPE_ACTIVE))
317319
{

Firmware/RTK_Everywhere/menuSystem.ino

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,15 @@ void menuPeriodicPrint()
12391239
systemPrint("55) Provisioning state: ");
12401240
systemPrintf("%s\r\n", PERIODIC_SETTING(PD_PROVISIONING_STATE) ? "Enabled" : "Disabled");
12411241

1242+
systemPrint("56) UDP server state: ");
1243+
systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_STATE) ? "Enabled" : "Disabled");
1244+
1245+
systemPrint("57) UDP server data: ");
1246+
systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_DATA) ? "Enabled" : "Disabled");
1247+
1248+
systemPrint("58) UDP server broadcast data: ");
1249+
systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_BROADCAST_DATA) ? "Enabled" : "Disabled");
1250+
12421251
systemPrintln("------- Tasks ------");
12431252
systemPrint("70) btReadTask state: ");
12441253
systemPrintf("%s\r\n", PERIODIC_SETTING(PD_TASK_BLUETOOTH_READ) ? "Enabled" : "Disabled");
@@ -1336,6 +1345,12 @@ void menuPeriodicPrint()
13361345
PERIODIC_TOGGLE(PD_HTTP_CLIENT_STATE);
13371346
else if (incoming == 55)
13381347
PERIODIC_TOGGLE(PD_PROVISIONING_STATE);
1348+
else if (incoming == 56)
1349+
PERIODIC_TOGGLE(PD_UDP_SERVER_STATE);
1350+
else if (incoming == 57)
1351+
PERIODIC_TOGGLE(PD_UDP_SERVER_DATA);
1352+
else if (incoming == 58)
1353+
PERIODIC_TOGGLE(PD_UDP_SERVER_BROADCAST_DATA);
13391354

13401355
else if (incoming == 70)
13411356
PERIODIC_TOGGLE(PD_TASK_BLUETOOTH_READ);

Firmware/Tools/UDP_Client.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import socket
2+
import argparse
3+
import multiprocessing
4+
5+
def client(server, port):
6+
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
7+
sock.bind((server, port))
8+
while True:
9+
payload = sock.recvfrom(1024)
10+
print(payload[0].decode('latin1'), end='')
11+
12+
if __name__ == "__main__":
13+
14+
parser = argparse.ArgumentParser(
15+
description='UDP Client')
16+
17+
parser.add_argument('-server', type=str, default="",
18+
help='Host Name or IP Address of the UDP Server')
19+
20+
parser.add_argument('-port', type=int, default=10110,
21+
help='UDP Port Number')
22+
23+
args = parser.parse_args()
24+
25+
if (args.server != ""):
26+
print("Connecting to " + args.server + " on port " + str(args.port))
27+
else:
28+
print("Listening on port " + str(args.port))
29+
30+
proc = multiprocessing.Process(target = client, args = (args.server, args.port))
31+
proc.start()
32+
33+
try:
34+
while True:
35+
pass
36+
except KeyboardInterrupt:
37+
proc.terminate()

0 commit comments

Comments
 (0)