10
10
#include " EthernetInterface.h"
11
11
#include " UDPSocket.h"
12
12
#include " greentea-client/test_env.h"
13
+ #include " unity/unity.h"
13
14
14
15
#ifndef MBED_CFG_UDP_CLIENT_ECHO_BUFFER_SIZE
15
16
#define MBED_CFG_UDP_CLIENT_ECHO_BUFFER_SIZE 256
16
17
#endif
17
18
19
+ #ifndef MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT
20
+ #define MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT 500
21
+ #endif
22
+
23
+
18
24
namespace {
19
25
char tx_buffer[MBED_CFG_UDP_CLIENT_ECHO_BUFFER_SIZE] = {0 };
20
26
char rx_buffer[MBED_CFG_UDP_CLIENT_ECHO_BUFFER_SIZE] = {0 };
@@ -37,15 +43,14 @@ int main() {
37
43
38
44
greentea_send_kv (" target_ip" , eth.get_ip_address ());
39
45
40
- bool result = false ;
41
-
42
46
char recv_key[] = " host_port" ;
43
47
char ipbuf[60 ] = {0 };
44
48
char portbuf[16 ] = {0 };
45
49
unsigned int port = 0 ;
46
50
47
51
UDPSocket sock;
48
52
sock.open (ð);
53
+ sock.set_timeout (MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT);
49
54
50
55
greentea_send_kv (" host_ip" , " " );
51
56
greentea_parse_kv (recv_key, ipbuf, sizeof (recv_key), sizeof (ipbuf));
@@ -55,25 +60,28 @@ int main() {
55
60
sscanf (portbuf, " %u" , &port);
56
61
57
62
printf (" MBED: UDP Server IP address received: %s:%d \n " , ipbuf, port);
63
+ SocketAddress udp_addr (ipbuf, port);
58
64
59
- SocketAddress addr (ipbuf, port) ;
65
+ int success = 0 ;
60
66
61
67
for (int i=0 ; i < ECHO_LOOPS; ++i) {
62
68
prep_buffer (tx_buffer, sizeof (tx_buffer));
63
- const int ret = sock.sendto (addr , tx_buffer, sizeof (tx_buffer));
69
+ const int ret = sock.sendto (udp_addr , tx_buffer, sizeof (tx_buffer));
64
70
printf (" [%02d] sent...%d Bytes \n " , i, ret);
65
71
66
- const int n = sock.recvfrom (&addr, rx_buffer, sizeof (rx_buffer));
72
+ SocketAddress temp_addr;
73
+ const int n = sock.recvfrom (&temp_addr, rx_buffer, sizeof (rx_buffer));
67
74
printf (" [%02d] recv...%d Bytes \n " , i, n);
68
75
69
- if (memcmp (rx_buffer, tx_buffer, sizeof (rx_buffer))) {
70
- result = false ;
71
- break ;
76
+ if ((temp_addr == udp_addr &&
77
+ n == sizeof (tx_buffer) &&
78
+ memcmp (rx_buffer, tx_buffer, sizeof (rx_buffer)) == 0 )) {
79
+ success += 1 ;
72
80
}
73
-
74
- result = true ;
75
81
}
76
82
83
+ bool result = (success > 3 *ECHO_LOOPS/4 );
84
+
77
85
sock.close ();
78
86
eth.disconnect ();
79
87
GREENTEA_TESTSUITE_RESULT (result);
0 commit comments