nkjnm

Dependencies:   MAX44000 nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "test_env.h"
00004 #include "EthernetInterface.h"
00005 #include <algorithm>
00006 
00007 #define CHECK(RC, STEP)       if (RC < 0) error(STEP": %d\r\n", RC)
00008 
00009 namespace {
00010     const int BUFFER_SIZE = 64;
00011     const int MAX_ECHO_LOOPS = 100;
00012     const char ASCII_MAX = '~' - ' ';
00013 
00014     struct s_ip_address {
00015         int ip_1;
00016         int ip_2;
00017         int ip_3;
00018         int ip_4;
00019     };
00020 }
00021 
00022 char char_rand() {
00023     return (rand() % ASCII_MAX) + ' ';
00024 }
00025 
00026 int main() {
00027     MBED_HOSTTEST_TIMEOUT(20);
00028     MBED_HOSTTEST_SELECT(udpecho_client_auto);
00029     MBED_HOSTTEST_DESCRIPTION(UDP echo client);
00030     MBED_HOSTTEST_START("NET_6");
00031 
00032     char buffer[BUFFER_SIZE] = {0};
00033     char out_buffer[BUFFER_SIZE] = {0};
00034     s_ip_address ip_addr = {0, 0, 0, 0};
00035     int port = 0;
00036     bool result = true;
00037 
00038     printf("MBED: UDPCllient waiting for server IP and port...\r\n");
00039     scanf("%d.%d.%d.%d:%d", &ip_addr.ip_1, &ip_addr.ip_2, &ip_addr.ip_3, &ip_addr.ip_4, &port);
00040     printf("MBED: Address received: %d.%d.%d.%d:%d\r\n", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4, port);
00041 
00042     EthernetInterface eth;
00043     int rc = eth.init(); //Use DHCP
00044     CHECK(rc, "eth init");
00045 
00046     rc = eth.connect();
00047     CHECK(rc, "connect");
00048     printf("IP: %s\n", eth.getIPAddress());
00049 
00050     UDPSocket socket;
00051     rc = socket.init();
00052     CHECK(rc, "socket init");
00053 
00054     printf("MBED: UDPClient IP Address is %s\r\n", eth.getIPAddress());
00055     sprintf(buffer, "%d.%d.%d.%d", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4);
00056 
00057     Endpoint echo_server;
00058     rc = echo_server.set_address(buffer, port);
00059     CHECK(rc, "set_address");
00060 
00061     for (int i =0; i < MAX_ECHO_LOOPS; i++) {
00062         std::generate(out_buffer, out_buffer + BUFFER_SIZE, char_rand);
00063         rc = socket.sendTo(echo_server, out_buffer, sizeof(out_buffer));
00064         CHECK(rc, "sendTo");
00065 
00066         const int n = socket.receiveFrom(echo_server, buffer, sizeof(buffer));
00067         CHECK(n, "receiveFrom");
00068 
00069         if (memcmp(buffer, out_buffer, BUFFER_SIZE) != 0) {
00070             result = false;
00071             break;
00072         }
00073     }
00074 
00075     if (notify_completion_str(result, buffer)) {
00076         socket.sendTo(echo_server, buffer, strlen(buffer));
00077     }
00078 
00079     socket.close();
00080     eth.disconnect();
00081     MBED_HOSTTEST_RESULT(result);
00082 }