Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510
features/FEATURE_LWIP/TESTS/mbedmicro-net/tcp_echo/main.cpp@0:098463de4c5d, 2017-01-25 (annotated)
- Committer:
- group-onsemi
- Date:
- Wed Jan 25 20:34:15 2017 +0000
- Revision:
- 0:098463de4c5d
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| group-onsemi | 0:098463de4c5d | 1 | #if !FEATURE_LWIP |
| group-onsemi | 0:098463de4c5d | 2 | #error [NOT_SUPPORTED] LWIP not supported for this target |
| group-onsemi | 0:098463de4c5d | 3 | #endif |
| group-onsemi | 0:098463de4c5d | 4 | #if DEVICE_EMAC |
| group-onsemi | 0:098463de4c5d | 5 | #error [NOT_SUPPORTED] Not supported for WiFi targets |
| group-onsemi | 0:098463de4c5d | 6 | #endif |
| group-onsemi | 0:098463de4c5d | 7 | |
| group-onsemi | 0:098463de4c5d | 8 | #include "mbed.h" |
| group-onsemi | 0:098463de4c5d | 9 | #include "EthernetInterface.h" |
| group-onsemi | 0:098463de4c5d | 10 | #include "TCPSocket.h" |
| group-onsemi | 0:098463de4c5d | 11 | #include "greentea-client/test_env.h" |
| group-onsemi | 0:098463de4c5d | 12 | #include "unity/unity.h" |
| group-onsemi | 0:098463de4c5d | 13 | |
| group-onsemi | 0:098463de4c5d | 14 | |
| group-onsemi | 0:098463de4c5d | 15 | #ifndef MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE |
| group-onsemi | 0:098463de4c5d | 16 | #define MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE 256 |
| group-onsemi | 0:098463de4c5d | 17 | #endif |
| group-onsemi | 0:098463de4c5d | 18 | |
| group-onsemi | 0:098463de4c5d | 19 | namespace { |
| group-onsemi | 0:098463de4c5d | 20 | char tx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; |
| group-onsemi | 0:098463de4c5d | 21 | char rx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; |
| group-onsemi | 0:098463de4c5d | 22 | const char ASCII_MAX = '~' - ' '; |
| group-onsemi | 0:098463de4c5d | 23 | } |
| group-onsemi | 0:098463de4c5d | 24 | |
| group-onsemi | 0:098463de4c5d | 25 | void prep_buffer(char *tx_buffer, size_t tx_size) { |
| group-onsemi | 0:098463de4c5d | 26 | for (size_t i=0; i<tx_size; ++i) { |
| group-onsemi | 0:098463de4c5d | 27 | tx_buffer[i] = (rand() % 10) + '0'; |
| group-onsemi | 0:098463de4c5d | 28 | } |
| group-onsemi | 0:098463de4c5d | 29 | } |
| group-onsemi | 0:098463de4c5d | 30 | |
| group-onsemi | 0:098463de4c5d | 31 | int main() { |
| group-onsemi | 0:098463de4c5d | 32 | GREENTEA_SETUP(20, "tcp_echo"); |
| group-onsemi | 0:098463de4c5d | 33 | |
| group-onsemi | 0:098463de4c5d | 34 | EthernetInterface eth; |
| group-onsemi | 0:098463de4c5d | 35 | eth.connect(); |
| group-onsemi | 0:098463de4c5d | 36 | |
| group-onsemi | 0:098463de4c5d | 37 | printf("MBED: TCPClient IP address is '%s'\n", eth.get_ip_address()); |
| group-onsemi | 0:098463de4c5d | 38 | printf("MBED: TCPClient waiting for server IP and port...\n"); |
| group-onsemi | 0:098463de4c5d | 39 | |
| group-onsemi | 0:098463de4c5d | 40 | greentea_send_kv("target_ip", eth.get_ip_address()); |
| group-onsemi | 0:098463de4c5d | 41 | |
| group-onsemi | 0:098463de4c5d | 42 | bool result = false; |
| group-onsemi | 0:098463de4c5d | 43 | |
| group-onsemi | 0:098463de4c5d | 44 | char recv_key[] = "host_port"; |
| group-onsemi | 0:098463de4c5d | 45 | char ipbuf[60] = {0}; |
| group-onsemi | 0:098463de4c5d | 46 | char portbuf[16] = {0}; |
| group-onsemi | 0:098463de4c5d | 47 | unsigned int port = 0; |
| group-onsemi | 0:098463de4c5d | 48 | |
| group-onsemi | 0:098463de4c5d | 49 | greentea_send_kv("host_ip", " "); |
| group-onsemi | 0:098463de4c5d | 50 | greentea_parse_kv(recv_key, ipbuf, sizeof(recv_key), sizeof(ipbuf)); |
| group-onsemi | 0:098463de4c5d | 51 | |
| group-onsemi | 0:098463de4c5d | 52 | greentea_send_kv("host_port", " "); |
| group-onsemi | 0:098463de4c5d | 53 | greentea_parse_kv(recv_key, portbuf, sizeof(recv_key), sizeof(ipbuf)); |
| group-onsemi | 0:098463de4c5d | 54 | sscanf(portbuf, "%u", &port); |
| group-onsemi | 0:098463de4c5d | 55 | |
| group-onsemi | 0:098463de4c5d | 56 | printf("MBED: Server IP address received: %s:%d \n", ipbuf, port); |
| group-onsemi | 0:098463de4c5d | 57 | |
| group-onsemi | 0:098463de4c5d | 58 | TCPSocket sock(ð); |
| group-onsemi | 0:098463de4c5d | 59 | SocketAddress tcp_addr(ipbuf, port); |
| group-onsemi | 0:098463de4c5d | 60 | if (sock.connect(tcp_addr) == 0) { |
| group-onsemi | 0:098463de4c5d | 61 | printf("HTTP: Connected to %s:%d\r\n", ipbuf, port); |
| group-onsemi | 0:098463de4c5d | 62 | printf("tx_buffer buffer size: %u\r\n", sizeof(tx_buffer)); |
| group-onsemi | 0:098463de4c5d | 63 | printf("rx_buffer buffer size: %u\r\n", sizeof(rx_buffer)); |
| group-onsemi | 0:098463de4c5d | 64 | |
| group-onsemi | 0:098463de4c5d | 65 | prep_buffer(tx_buffer, sizeof(tx_buffer)); |
| group-onsemi | 0:098463de4c5d | 66 | sock.send(tx_buffer, sizeof(tx_buffer)); |
| group-onsemi | 0:098463de4c5d | 67 | |
| group-onsemi | 0:098463de4c5d | 68 | // Server will respond with HTTP GET's success code |
| group-onsemi | 0:098463de4c5d | 69 | const int ret = sock.recv(rx_buffer, sizeof(rx_buffer)); |
| group-onsemi | 0:098463de4c5d | 70 | |
| group-onsemi | 0:098463de4c5d | 71 | result = !memcmp(tx_buffer, rx_buffer, sizeof(tx_buffer)); |
| group-onsemi | 0:098463de4c5d | 72 | |
| group-onsemi | 0:098463de4c5d | 73 | TEST_ASSERT_EQUAL(ret, sizeof(rx_buffer)); |
| group-onsemi | 0:098463de4c5d | 74 | TEST_ASSERT_EQUAL(true, result); |
| group-onsemi | 0:098463de4c5d | 75 | } |
| group-onsemi | 0:098463de4c5d | 76 | |
| group-onsemi | 0:098463de4c5d | 77 | sock.close(); |
| group-onsemi | 0:098463de4c5d | 78 | eth.disconnect(); |
| group-onsemi | 0:098463de4c5d | 79 | GREENTEA_TESTSUITE_RESULT(result); |
| group-onsemi | 0:098463de4c5d | 80 | } |