Easily add all supported connectivity methods to your mbed OS project
esp8266-driver/TESTS/net/tcp_echo/main.cpp
- Committer:
- MACRUM
- Date:
- 2017-07-12
- Revision:
- 0:615f90842ce8
File content as of revision 0:615f90842ce8:
#include "mbed.h" #include "ESP8266Interface.h" #include "TCPSocket.h" #include "greentea-client/test_env.h" #include "unity/unity.h" #include "utest.h" using namespace utest::v1; #ifndef MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE #define MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE 256 #endif #ifndef MBED_CFG_ESP8266_TX #define MBED_CFG_ESP8266_TX D1 #endif #ifndef MBED_CFG_ESP8266_RX #define MBED_CFG_ESP8266_RX D0 #endif #ifndef MBED_CFG_ESP8266_DEBUG #define MBED_CFG_ESP8266_DEBUG false #endif namespace { char tx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; char rx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; const char ASCII_MAX = '~' - ' '; } void prep_buffer(char *tx_buffer, size_t tx_size) { for (size_t i=0; i<tx_size; ++i) { tx_buffer[i] = (rand() % 10) + '0'; } } void test_tcp_echo() { ESP8266Interface net(MBED_CFG_ESP8266_TX, MBED_CFG_ESP8266_RX, MBED_CFG_ESP8266_DEBUG); int err = net.connect(MBED_CFG_ESP8266_SSID, MBED_CFG_ESP8266_PASS); if (err) { printf("MBED: failed to connect with an error of %d\r\n", err); TEST_ASSERT_EQUAL(0, err); } printf("MBED: TCPClient IP address is '%s'\n", net.get_ip_address()); printf("MBED: TCPClient waiting for server IP and port...\n"); greentea_send_kv("target_ip", net.get_ip_address()); bool result = false; char recv_key[] = "host_port"; char ipbuf[60] = {0}; char portbuf[16] = {0}; unsigned int port = 0; greentea_send_kv("host_ip", " "); greentea_parse_kv(recv_key, ipbuf, sizeof(recv_key), sizeof(ipbuf)); greentea_send_kv("host_port", " "); greentea_parse_kv(recv_key, portbuf, sizeof(recv_key), sizeof(ipbuf)); sscanf(portbuf, "%u", &port); printf("MBED: Server IP address received: %s:%d \n", ipbuf, port); TCPSocket sock(&net); SocketAddress tcp_addr(ipbuf, port); if (sock.connect(tcp_addr) == 0) { printf("HTTP: Connected to %s:%d\r\n", ipbuf, port); printf("tx_buffer buffer size: %u\r\n", sizeof(tx_buffer)); printf("rx_buffer buffer size: %u\r\n", sizeof(rx_buffer)); prep_buffer(tx_buffer, sizeof(tx_buffer)); sock.send(tx_buffer, sizeof(tx_buffer)); printf("MBED: Finished sending\r\n"); // Server will respond with HTTP GET's success code const int ret = sock.recv(rx_buffer, sizeof(rx_buffer)); printf("MBED: Finished receiving\r\n"); result = !memcmp(tx_buffer, rx_buffer, sizeof(tx_buffer)); TEST_ASSERT_EQUAL(ret, sizeof(rx_buffer)); TEST_ASSERT_EQUAL(true, result); } sock.close(); net.disconnect(); TEST_ASSERT_EQUAL(true, result); } // Test setup utest::v1::status_t test_setup(const size_t number_of_cases) { char uuid[48] = {0}; GREENTEA_SETUP_UUID(120, "tcp_echo", uuid, 48); // create mac address based on uuid uint64_t mac = 0; for (int i = 0; i < sizeof(uuid); i++) { mac += uuid[i]; } mbed_set_mac_address((const char*)mac, /*coerce control bits*/ 1); return verbose_test_setup_handler(number_of_cases); } Case cases[] = { Case("TCP echo", test_tcp_echo), }; Specification specification(test_setup, cases); int main() { return !Harness::run(specification); }