Richard Nash
/
udpping-mbed-os
udptest
main.cpp@0:9cd5c49d26e4, 2018-10-24 (annotated)
- Committer:
- richnash
- Date:
- Wed Oct 24 19:47:15 2018 +0000
- Revision:
- 0:9cd5c49d26e4
udp test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
richnash | 0:9cd5c49d26e4 | 1 | |
richnash | 0:9cd5c49d26e4 | 2 | // MBED Headers |
richnash | 0:9cd5c49d26e4 | 3 | #include "mbed.h" |
richnash | 0:9cd5c49d26e4 | 4 | #include "EthernetInterface.h" |
richnash | 0:9cd5c49d26e4 | 5 | |
richnash | 0:9cd5c49d26e4 | 6 | DigitalOut led1(LED1); // green |
richnash | 0:9cd5c49d26e4 | 7 | DigitalOut led2(LED2); // blue |
richnash | 0:9cd5c49d26e4 | 8 | DigitalOut led3(LED3); // red |
richnash | 0:9cd5c49d26e4 | 9 | |
richnash | 0:9cd5c49d26e4 | 10 | Serial logger(SERIAL_TX, SERIAL_RX); |
richnash | 0:9cd5c49d26e4 | 11 | |
richnash | 0:9cd5c49d26e4 | 12 | EthernetInterface gEth; |
richnash | 0:9cd5c49d26e4 | 13 | #define UDP_PORT 3865 |
richnash | 0:9cd5c49d26e4 | 14 | #define UDP_BUFFER_SIZE 500 |
richnash | 0:9cd5c49d26e4 | 15 | |
richnash | 0:9cd5c49d26e4 | 16 | UDPSocket _socket; |
richnash | 0:9cd5c49d26e4 | 17 | UDPSocket _socketSender; |
richnash | 0:9cd5c49d26e4 | 18 | |
richnash | 0:9cd5c49d26e4 | 19 | char in_buffer[UDP_BUFFER_SIZE]; |
richnash | 0:9cd5c49d26e4 | 20 | |
richnash | 0:9cd5c49d26e4 | 21 | |
richnash | 0:9cd5c49d26e4 | 22 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 23 | // |
richnash | 0:9cd5c49d26e4 | 24 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 25 | void terminal_error_state( void ) |
richnash | 0:9cd5c49d26e4 | 26 | { |
richnash | 0:9cd5c49d26e4 | 27 | led1=0; |
richnash | 0:9cd5c49d26e4 | 28 | led2=0; |
richnash | 0:9cd5c49d26e4 | 29 | led3=0; |
richnash | 0:9cd5c49d26e4 | 30 | logger.printf("\r\n\r\nJUST TO BE CLEAR - THIS IS BAD BAD NEWS !!! \r\n"); |
richnash | 0:9cd5c49d26e4 | 31 | logger.printf("\r\n\r\n---- WAITING FOR THE WATCHDOG TO RESET US ---- \r\n"); |
richnash | 0:9cd5c49d26e4 | 32 | while( 1 ) |
richnash | 0:9cd5c49d26e4 | 33 | { |
richnash | 0:9cd5c49d26e4 | 34 | led1 = !led1; |
richnash | 0:9cd5c49d26e4 | 35 | led2 = !led2; |
richnash | 0:9cd5c49d26e4 | 36 | led3 = !led3; |
richnash | 0:9cd5c49d26e4 | 37 | wait(0.3); |
richnash | 0:9cd5c49d26e4 | 38 | } |
richnash | 0:9cd5c49d26e4 | 39 | } |
richnash | 0:9cd5c49d26e4 | 40 | |
richnash | 0:9cd5c49d26e4 | 41 | |
richnash | 0:9cd5c49d26e4 | 42 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 43 | // |
richnash | 0:9cd5c49d26e4 | 44 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 45 | static bool DeviceConnect() |
richnash | 0:9cd5c49d26e4 | 46 | { |
richnash | 0:9cd5c49d26e4 | 47 | int retries = 10; |
richnash | 0:9cd5c49d26e4 | 48 | int rc = 0; |
richnash | 0:9cd5c49d26e4 | 49 | |
richnash | 0:9cd5c49d26e4 | 50 | while (retries--) |
richnash | 0:9cd5c49d26e4 | 51 | { |
richnash | 0:9cd5c49d26e4 | 52 | rc = gEth.connect(); |
richnash | 0:9cd5c49d26e4 | 53 | if (rc == 0) { |
richnash | 0:9cd5c49d26e4 | 54 | return true; |
richnash | 0:9cd5c49d26e4 | 55 | } |
richnash | 0:9cd5c49d26e4 | 56 | else |
richnash | 0:9cd5c49d26e4 | 57 | { |
richnash | 0:9cd5c49d26e4 | 58 | logger.printf("Connecting... ERR %d\r\n", rc); |
richnash | 0:9cd5c49d26e4 | 59 | } |
richnash | 0:9cd5c49d26e4 | 60 | } |
richnash | 0:9cd5c49d26e4 | 61 | |
richnash | 0:9cd5c49d26e4 | 62 | logger.printf("Connecting... FAILED\r\n"); |
richnash | 0:9cd5c49d26e4 | 63 | return false; |
richnash | 0:9cd5c49d26e4 | 64 | } |
richnash | 0:9cd5c49d26e4 | 65 | |
richnash | 0:9cd5c49d26e4 | 66 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 67 | // |
richnash | 0:9cd5c49d26e4 | 68 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 69 | static bool DeviceEthStartup() |
richnash | 0:9cd5c49d26e4 | 70 | { |
richnash | 0:9cd5c49d26e4 | 71 | int rc = 0; |
richnash | 0:9cd5c49d26e4 | 72 | |
richnash | 0:9cd5c49d26e4 | 73 | // get ethernet up ! |
richnash | 0:9cd5c49d26e4 | 74 | if( !DeviceConnect() ) terminal_error_state(); |
richnash | 0:9cd5c49d26e4 | 75 | |
richnash | 0:9cd5c49d26e4 | 76 | // Output the network address |
richnash | 0:9cd5c49d26e4 | 77 | const char *ip = gEth.get_ip_address(); |
richnash | 0:9cd5c49d26e4 | 78 | const char *netmask = gEth.get_netmask(); |
richnash | 0:9cd5c49d26e4 | 79 | const char *gateway = gEth.get_gateway(); |
richnash | 0:9cd5c49d26e4 | 80 | logger.printf("IP address: %s\r\n", ip ? ip : "None"); |
richnash | 0:9cd5c49d26e4 | 81 | logger.printf("Netmask: %s\r\n", netmask ? netmask : "None"); |
richnash | 0:9cd5c49d26e4 | 82 | logger.printf("Gateway: %s\r\n", gateway ? gateway : "None"); |
richnash | 0:9cd5c49d26e4 | 83 | |
richnash | 0:9cd5c49d26e4 | 84 | // setup a listener |
richnash | 0:9cd5c49d26e4 | 85 | _socket.set_blocking(true); |
richnash | 0:9cd5c49d26e4 | 86 | _socket.set_timeout(3000); |
richnash | 0:9cd5c49d26e4 | 87 | |
richnash | 0:9cd5c49d26e4 | 88 | // open the socket |
richnash | 0:9cd5c49d26e4 | 89 | rc = _socket.open((NetworkInterface*)&gEth); |
richnash | 0:9cd5c49d26e4 | 90 | if( rc != 0) |
richnash | 0:9cd5c49d26e4 | 91 | { |
richnash | 0:9cd5c49d26e4 | 92 | logger.printf("UDPSocket RECEIVER OPEN ERROR (rc=%d)\r\n", rc); |
richnash | 0:9cd5c49d26e4 | 93 | terminal_error_state(); |
richnash | 0:9cd5c49d26e4 | 94 | } |
richnash | 0:9cd5c49d26e4 | 95 | |
richnash | 0:9cd5c49d26e4 | 96 | // bind the port |
richnash | 0:9cd5c49d26e4 | 97 | rc = _socket.bind(UDP_PORT); |
richnash | 0:9cd5c49d26e4 | 98 | logger.printf("Binding port %d\r\n", UDP_PORT); |
richnash | 0:9cd5c49d26e4 | 99 | if( rc != 0) |
richnash | 0:9cd5c49d26e4 | 100 | { |
richnash | 0:9cd5c49d26e4 | 101 | logger.printf("UDPSocket BIND ERROR (rc=%d)\r\n", rc); |
richnash | 0:9cd5c49d26e4 | 102 | terminal_error_state(); |
richnash | 0:9cd5c49d26e4 | 103 | } |
richnash | 0:9cd5c49d26e4 | 104 | |
richnash | 0:9cd5c49d26e4 | 105 | // open the sender socket |
richnash | 0:9cd5c49d26e4 | 106 | //rc = _socketSender.open((NetworkInterface*)&gEth); |
richnash | 0:9cd5c49d26e4 | 107 | //if( rc != 0) |
richnash | 0:9cd5c49d26e4 | 108 | // { |
richnash | 0:9cd5c49d26e4 | 109 | // logger.printf("UDPSocket SENDER OPEN ERROR (rc=%d)\r\n", rc); |
richnash | 0:9cd5c49d26e4 | 110 | // terminal_error_state(); |
richnash | 0:9cd5c49d26e4 | 111 | // } |
richnash | 0:9cd5c49d26e4 | 112 | |
richnash | 0:9cd5c49d26e4 | 113 | return true; |
richnash | 0:9cd5c49d26e4 | 114 | } |
richnash | 0:9cd5c49d26e4 | 115 | |
richnash | 0:9cd5c49d26e4 | 116 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 117 | // |
richnash | 0:9cd5c49d26e4 | 118 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 119 | void SendUdPMessage(char *buffer) |
richnash | 0:9cd5c49d26e4 | 120 | { |
richnash | 0:9cd5c49d26e4 | 121 | // send the UDP data as broadcast |
richnash | 0:9cd5c49d26e4 | 122 | int rc = _socketSender.sendto( "255.255.255.255", UDP_PORT, (const void *)buffer, strlen( buffer ) ); |
richnash | 0:9cd5c49d26e4 | 123 | logger.printf("[SEND rc=%d] buffer[%d]\r\n%s\r\n", rc, strlen(buffer), buffer); |
richnash | 0:9cd5c49d26e4 | 124 | } |
richnash | 0:9cd5c49d26e4 | 125 | |
richnash | 0:9cd5c49d26e4 | 126 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 127 | // main() runs in its own thread in the OS |
richnash | 0:9cd5c49d26e4 | 128 | // ----------------------------------------------------------- |
richnash | 0:9cd5c49d26e4 | 129 | int main() { |
richnash | 0:9cd5c49d26e4 | 130 | |
richnash | 0:9cd5c49d26e4 | 131 | DeviceEthStartup(); |
richnash | 0:9cd5c49d26e4 | 132 | |
richnash | 0:9cd5c49d26e4 | 133 | while (true) { |
richnash | 0:9cd5c49d26e4 | 134 | led1 = !led1; |
richnash | 0:9cd5c49d26e4 | 135 | wait(0.5); |
richnash | 0:9cd5c49d26e4 | 136 | } |
richnash | 0:9cd5c49d26e4 | 137 | } |
richnash | 0:9cd5c49d26e4 | 138 |