udptest

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 // MBED Headers
00003 #include "mbed.h"
00004 #include "EthernetInterface.h"
00005 
00006 DigitalOut led1(LED1);  // green
00007 DigitalOut led2(LED2);  // blue
00008 DigitalOut led3(LED3);  // red
00009 
00010 Serial logger(SERIAL_TX, SERIAL_RX);
00011 
00012 EthernetInterface   gEth;
00013 #define UDP_PORT            3865
00014 #define UDP_BUFFER_SIZE     500
00015 
00016 UDPSocket           _socket;
00017 UDPSocket           _socketSender;
00018 
00019 char                in_buffer[UDP_BUFFER_SIZE];
00020 
00021 
00022 // -----------------------------------------------------------
00023 // 
00024 // -----------------------------------------------------------
00025 void terminal_error_state( void )
00026 {
00027     led1=0;
00028     led2=0;
00029     led3=0;
00030     logger.printf("\r\n\r\nJUST TO BE CLEAR - THIS IS BAD BAD NEWS !!! \r\n");
00031     logger.printf("\r\n\r\n---- WAITING FOR THE WATCHDOG TO RESET US ---- \r\n");
00032     while( 1 )
00033         {
00034         led1 = !led1;
00035         led2 = !led2;
00036         led3 = !led3;
00037         wait(0.3);
00038         }
00039 }
00040 
00041 
00042 // -----------------------------------------------------------
00043 // 
00044 // -----------------------------------------------------------
00045 static bool DeviceConnect()
00046 {
00047     int retries = 10;
00048     int rc = 0;
00049     
00050     while (retries--) 
00051         {
00052         rc = gEth.connect();
00053         if (rc == 0) {
00054             return true;
00055             }
00056         else
00057             {
00058             logger.printf("Connecting... ERR %d\r\n", rc);
00059             }
00060         }
00061     
00062     logger.printf("Connecting... FAILED\r\n");
00063     return false;
00064 }
00065 
00066 // -----------------------------------------------------------
00067 // 
00068 // -----------------------------------------------------------
00069 static bool DeviceEthStartup()
00070 {
00071     int rc = 0;
00072     
00073     // get ethernet up !
00074     if( !DeviceConnect() ) terminal_error_state();
00075     
00076     // Output the network address
00077     const char *ip = gEth.get_ip_address();
00078     const char *netmask = gEth.get_netmask();
00079     const char *gateway = gEth.get_gateway();
00080     logger.printf("IP address: %s\r\n", ip ? ip : "None");
00081     logger.printf("Netmask: %s\r\n", netmask ? netmask : "None");
00082     logger.printf("Gateway: %s\r\n", gateway ? gateway : "None");
00083     
00084     // setup a listener
00085     _socket.set_blocking(true);
00086     _socket.set_timeout(3000);
00087     
00088     // open the socket
00089     rc = _socket.open((NetworkInterface*)&gEth);
00090     if( rc != 0)
00091         {
00092         logger.printf("UDPSocket RECEIVER OPEN ERROR   (rc=%d)\r\n", rc);
00093         terminal_error_state();
00094         }
00095     
00096     // bind the port
00097     rc = _socket.bind(UDP_PORT);
00098     logger.printf("Binding port %d\r\n", UDP_PORT);
00099     if( rc != 0)
00100         {
00101         logger.printf("UDPSocket BIND ERROR   (rc=%d)\r\n", rc);
00102         terminal_error_state();
00103         }
00104     
00105     // open the sender socket
00106     //rc = _socketSender.open((NetworkInterface*)&gEth);
00107     //if( rc != 0)
00108     //    {
00109     //    logger.printf("UDPSocket SENDER OPEN ERROR   (rc=%d)\r\n", rc);
00110     //    terminal_error_state();
00111     //    }
00112     
00113     return true;
00114 }
00115 
00116 // -----------------------------------------------------------
00117 // 
00118 // -----------------------------------------------------------
00119 void SendUdPMessage(char *buffer)
00120 {
00121     // send the UDP data as broadcast
00122     int rc = _socketSender.sendto( "255.255.255.255", UDP_PORT, (const void *)buffer, strlen( buffer ) );
00123     logger.printf("[SEND rc=%d] buffer[%d]\r\n%s\r\n", rc, strlen(buffer), buffer);
00124 }
00125 
00126 // -----------------------------------------------------------
00127 // main() runs in its own thread in the OS
00128 // -----------------------------------------------------------
00129 int main() {
00130     
00131     DeviceEthStartup();
00132     
00133     while (true) {
00134         led1 = !led1;
00135         wait(0.5);
00136     }
00137 }
00138