udptest

Files at this revision

API Documentation at this revision

Comitter:
richnash
Date:
Wed Oct 24 19:47:15 2018 +0000
Commit message:
udp test

Changed in this revision

.gitignore Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gitignore	Wed Oct 24 19:47:15 2018 +0000
@@ -0,0 +1,4 @@
+.build
+.mbed
+projectfiles
+*.py*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 24 19:47:15 2018 +0000
@@ -0,0 +1,138 @@
+
+// MBED Headers
+#include "mbed.h"
+#include "EthernetInterface.h"
+
+DigitalOut led1(LED1);  // green
+DigitalOut led2(LED2);  // blue
+DigitalOut led3(LED3);  // red
+
+Serial logger(SERIAL_TX, SERIAL_RX);
+
+EthernetInterface   gEth;
+#define UDP_PORT            3865
+#define UDP_BUFFER_SIZE     500
+
+UDPSocket           _socket;
+UDPSocket           _socketSender;
+
+char                in_buffer[UDP_BUFFER_SIZE];
+
+
+// -----------------------------------------------------------
+// 
+// -----------------------------------------------------------
+void terminal_error_state( void )
+{
+    led1=0;
+    led2=0;
+    led3=0;
+    logger.printf("\r\n\r\nJUST TO BE CLEAR - THIS IS BAD BAD NEWS !!! \r\n");
+    logger.printf("\r\n\r\n---- WAITING FOR THE WATCHDOG TO RESET US ---- \r\n");
+    while( 1 )
+        {
+        led1 = !led1;
+        led2 = !led2;
+        led3 = !led3;
+        wait(0.3);
+        }
+}
+
+
+// -----------------------------------------------------------
+// 
+// -----------------------------------------------------------
+static bool DeviceConnect()
+{
+    int retries = 10;
+    int rc = 0;
+    
+    while (retries--) 
+        {
+        rc = gEth.connect();
+        if (rc == 0) {
+            return true;
+            }
+        else
+            {
+            logger.printf("Connecting... ERR %d\r\n", rc);
+            }
+        }
+    
+    logger.printf("Connecting... FAILED\r\n");
+    return false;
+}
+
+// -----------------------------------------------------------
+// 
+// -----------------------------------------------------------
+static bool DeviceEthStartup()
+{
+    int rc = 0;
+    
+    // get ethernet up !
+    if( !DeviceConnect() ) terminal_error_state();
+    
+    // Output the network address
+    const char *ip = gEth.get_ip_address();
+    const char *netmask = gEth.get_netmask();
+    const char *gateway = gEth.get_gateway();
+    logger.printf("IP address: %s\r\n", ip ? ip : "None");
+    logger.printf("Netmask: %s\r\n", netmask ? netmask : "None");
+    logger.printf("Gateway: %s\r\n", gateway ? gateway : "None");
+    
+    // setup a listener
+    _socket.set_blocking(true);
+    _socket.set_timeout(3000);
+    
+    // open the socket
+    rc = _socket.open((NetworkInterface*)&gEth);
+    if( rc != 0)
+        {
+        logger.printf("UDPSocket RECEIVER OPEN ERROR   (rc=%d)\r\n", rc);
+        terminal_error_state();
+        }
+    
+    // bind the port
+    rc = _socket.bind(UDP_PORT);
+    logger.printf("Binding port %d\r\n", UDP_PORT);
+    if( rc != 0)
+        {
+        logger.printf("UDPSocket BIND ERROR   (rc=%d)\r\n", rc);
+        terminal_error_state();
+        }
+    
+    // open the sender socket
+    //rc = _socketSender.open((NetworkInterface*)&gEth);
+    //if( rc != 0)
+    //    {
+    //    logger.printf("UDPSocket SENDER OPEN ERROR   (rc=%d)\r\n", rc);
+    //    terminal_error_state();
+    //    }
+    
+    return true;
+}
+
+// -----------------------------------------------------------
+// 
+// -----------------------------------------------------------
+void SendUdPMessage(char *buffer)
+{
+    // send the UDP data as broadcast
+    int rc = _socketSender.sendto( "255.255.255.255", UDP_PORT, (const void *)buffer, strlen( buffer ) );
+    logger.printf("[SEND rc=%d] buffer[%d]\r\n%s\r\n", rc, strlen(buffer), buffer);
+}
+
+// -----------------------------------------------------------
+// main() runs in its own thread in the OS
+// -----------------------------------------------------------
+int main() {
+    
+    DeviceEthStartup();
+    
+    while (true) {
+        led1 = !led1;
+        wait(0.5);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Wed Oct 24 19:47:15 2018 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#c9e63f14085f5751ff5ead79a7c0382d50a813a2