diff --git a/Firmware/RTK_Everywhere/UdpServer.ino b/Firmware/RTK_Everywhere/UdpServer.ino index ab05b5e94..5745108f0 100644 --- a/Firmware/RTK_Everywhere/UdpServer.ino +++ b/Firmware/RTK_Everywhere/UdpServer.ino @@ -105,16 +105,17 @@ int32_t udpServerSendDataBroadcast(uint8_t *data, uint16_t length) return 0; // Send the data as broadcast - if (settings.enableUdpServer && online.udpServer && wifiIsConnected()) + if (settings.enableUdpServer && online.udpServer && networkIsMediaConnected(networkGetUserNetwork(NETWORK_USER_UDP_SERVER))) { - udpServer->beginPacket(networkGetBroadcastIpAddress(networkGetType(NETWORK_USER_UDP_SERVER)), - settings.udpServerPort); + IPAddress broadcastAddress = networkGetBroadcastIpAddress(networkGetType(NETWORK_USER_UDP_SERVER)); + udpServer->beginPacket( broadcastAddress, settings.udpServerPort); udpServer->write(data, length); if (udpServer->endPacket()) { if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_BROADCAST_DATA)) && (!inMainMenu)) { - systemPrintf("UDP Server wrote %d bytes as broadcast on port %d\r\n", length, settings.udpServerPort); + systemPrintf("UDP Server wrote %d bytes as broadcast (%s) on port %d\r\n", length, + broadcastAddress.toString(), settings.udpServerPort); PERIODIC_CLEAR(PD_UDP_SERVER_BROADCAST_DATA); } } @@ -122,7 +123,8 @@ int32_t udpServerSendDataBroadcast(uint8_t *data, uint16_t length) else if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_BROADCAST_DATA)) && (!inMainMenu)) { PERIODIC_CLEAR(PD_UDP_SERVER_BROADCAST_DATA); - systemPrintf("UDP Server failed to write %d bytes as broadcast\r\n", length); + systemPrintf("UDP Server failed to write %d bytes as broadcast (%s) on port %d\r\n", length, + broadcastAddress.toString(), settings.udpServerPort); length = 0; } } @@ -204,9 +206,9 @@ void udpServerSetState(uint8_t newState) if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_STATE)) && (!inMainMenu)) { if (udpServerState == newState) - systemPrint("*"); + systemPrint("UDP Server: *"); else - systemPrintf("%s --> ", udpServerStateName[udpServerState]); + systemPrintf("UDP Server: %s --> ", udpServerStateName[udpServerState]); } udpServerState = newState; if ((settings.debugUdpServer || PERIODIC_DISPLAY(PD_UDP_SERVER_STATE)) && (!inMainMenu)) @@ -214,7 +216,7 @@ void udpServerSetState(uint8_t newState) PERIODIC_CLEAR(PD_UDP_SERVER_STATE); if (newState >= UDP_SERVER_STATE_MAX) { - systemPrintf("Unknown UDP Server state: %d\r\n", udpServerState); + systemPrintf("Unknown state: %d\r\n", udpServerState); reportFatalError("Unknown UDP Server state"); } else @@ -311,7 +313,7 @@ void udpServerUpdate() // Wait until the UDP server is enabled case UDP_SERVER_STATE_OFF: // Determine if the UDP server should be running - if (EQ_RTK_MODE(udpServerMode) && settings.enableUdpServer && (!wifiIsConnected())) + if (EQ_RTK_MODE(udpServerMode) && settings.enableUdpServer) // Was && (!wifiIsConnected())) - TODO check this { if (networkUserOpen(NETWORK_USER_UDP_SERVER, NETWORK_TYPE_ACTIVE)) { diff --git a/Firmware/RTK_Everywhere/menuSystem.ino b/Firmware/RTK_Everywhere/menuSystem.ino index 0bd1c783e..949d3cd04 100644 --- a/Firmware/RTK_Everywhere/menuSystem.ino +++ b/Firmware/RTK_Everywhere/menuSystem.ino @@ -1239,6 +1239,15 @@ void menuPeriodicPrint() systemPrint("55) Provisioning state: "); systemPrintf("%s\r\n", PERIODIC_SETTING(PD_PROVISIONING_STATE) ? "Enabled" : "Disabled"); + systemPrint("56) UDP server state: "); + systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_STATE) ? "Enabled" : "Disabled"); + + systemPrint("57) UDP server data: "); + systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_DATA) ? "Enabled" : "Disabled"); + + systemPrint("58) UDP server broadcast data: "); + systemPrintf("%s\r\n", PERIODIC_SETTING(PD_UDP_SERVER_BROADCAST_DATA) ? "Enabled" : "Disabled"); + systemPrintln("------- Tasks ------"); systemPrint("70) btReadTask state: "); systemPrintf("%s\r\n", PERIODIC_SETTING(PD_TASK_BLUETOOTH_READ) ? "Enabled" : "Disabled"); @@ -1336,6 +1345,12 @@ void menuPeriodicPrint() PERIODIC_TOGGLE(PD_HTTP_CLIENT_STATE); else if (incoming == 55) PERIODIC_TOGGLE(PD_PROVISIONING_STATE); + else if (incoming == 56) + PERIODIC_TOGGLE(PD_UDP_SERVER_STATE); + else if (incoming == 57) + PERIODIC_TOGGLE(PD_UDP_SERVER_DATA); + else if (incoming == 58) + PERIODIC_TOGGLE(PD_UDP_SERVER_BROADCAST_DATA); else if (incoming == 70) PERIODIC_TOGGLE(PD_TASK_BLUETOOTH_READ); diff --git a/Firmware/Tools/UDP_Client.py b/Firmware/Tools/UDP_Client.py new file mode 100644 index 000000000..af9100a93 --- /dev/null +++ b/Firmware/Tools/UDP_Client.py @@ -0,0 +1,37 @@ +import socket +import argparse +import multiprocessing + +def client(server, port): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + sock.bind((server, port)) + while True: + payload = sock.recvfrom(1024) + print(payload[0].decode('latin1'), end='') + +if __name__ == "__main__": + + parser = argparse.ArgumentParser( + description='UDP Client') + + parser.add_argument('-server', type=str, default="", + help='Host Name or IP Address of the UDP Server') + + parser.add_argument('-port', type=int, default=10110, + help='UDP Port Number') + + args = parser.parse_args() + + if (args.server != ""): + print("Connecting to " + args.server + " on port " + str(args.port)) + else: + print("Listening on port " + str(args.port)) + + proc = multiprocessing.Process(target = client, args = (args.server, args.port)) + proc.start() + + try: + while True: + pass + except KeyboardInterrupt: + proc.terminate()