EL4121 Embedded System / mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 /*
be_bryan 0:b74591d5ab33 2 * Copyright (c) 2013-2017, ARM Limited, All Rights Reserved
be_bryan 0:b74591d5ab33 3 * SPDX-License-Identifier: Apache-2.0
be_bryan 0:b74591d5ab33 4 *
be_bryan 0:b74591d5ab33 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
be_bryan 0:b74591d5ab33 6 * not use this file except in compliance with the License.
be_bryan 0:b74591d5ab33 7 * You may obtain a copy of the License at
be_bryan 0:b74591d5ab33 8 *
be_bryan 0:b74591d5ab33 9 * http://www.apache.org/licenses/LICENSE-2.0
be_bryan 0:b74591d5ab33 10 *
be_bryan 0:b74591d5ab33 11 * Unless required by applicable law or agreed to in writing, software
be_bryan 0:b74591d5ab33 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
be_bryan 0:b74591d5ab33 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
be_bryan 0:b74591d5ab33 14 * See the License for the specific language governing permissions and
be_bryan 0:b74591d5ab33 15 * limitations under the License.
be_bryan 0:b74591d5ab33 16 */
be_bryan 0:b74591d5ab33 17
be_bryan 0:b74591d5ab33 18 #ifndef MBED_CONF_APP_CONNECT_STATEMENT
be_bryan 0:b74591d5ab33 19 #error [NOT_SUPPORTED] No network configuration found for this target.
be_bryan 0:b74591d5ab33 20 #endif
be_bryan 0:b74591d5ab33 21
be_bryan 0:b74591d5ab33 22 #include "mbed.h"
be_bryan 0:b74591d5ab33 23 #include MBED_CONF_APP_HEADER_FILE
be_bryan 0:b74591d5ab33 24 #include "TCPSocket.h"
be_bryan 0:b74591d5ab33 25 #include "greentea-client/test_env.h"
be_bryan 0:b74591d5ab33 26 #include "unity/unity.h"
be_bryan 0:b74591d5ab33 27 #include "utest.h"
be_bryan 0:b74591d5ab33 28
be_bryan 0:b74591d5ab33 29 using namespace utest::v1;
be_bryan 0:b74591d5ab33 30
be_bryan 0:b74591d5ab33 31 #ifndef MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE
be_bryan 0:b74591d5ab33 32 #define MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE 256
be_bryan 0:b74591d5ab33 33 #endif
be_bryan 0:b74591d5ab33 34
be_bryan 0:b74591d5ab33 35 namespace {
be_bryan 0:b74591d5ab33 36 char tx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0};
be_bryan 0:b74591d5ab33 37 char rx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0};
be_bryan 0:b74591d5ab33 38 const char ASCII_MAX = '~' - ' ';
be_bryan 0:b74591d5ab33 39 }
be_bryan 0:b74591d5ab33 40
be_bryan 0:b74591d5ab33 41 void prep_buffer(char *tx_buffer, size_t tx_size) {
be_bryan 0:b74591d5ab33 42 for (size_t i=0; i<tx_size; ++i) {
be_bryan 0:b74591d5ab33 43 tx_buffer[i] = (rand() % 10) + '0';
be_bryan 0:b74591d5ab33 44 }
be_bryan 0:b74591d5ab33 45 }
be_bryan 0:b74591d5ab33 46
be_bryan 0:b74591d5ab33 47 void test_tcp_echo() {
be_bryan 0:b74591d5ab33 48
be_bryan 0:b74591d5ab33 49 NetworkInterface* net = MBED_CONF_APP_OBJECT_CONSTRUCTION;
be_bryan 0:b74591d5ab33 50 int err = MBED_CONF_APP_CONNECT_STATEMENT;
be_bryan 0:b74591d5ab33 51
be_bryan 0:b74591d5ab33 52 if (err) {
be_bryan 0:b74591d5ab33 53 printf("MBED: failed to connect with an error of %d\r\n", err);
be_bryan 0:b74591d5ab33 54 TEST_ASSERT_EQUAL(0, err);
be_bryan 0:b74591d5ab33 55 }
be_bryan 0:b74591d5ab33 56
be_bryan 0:b74591d5ab33 57 printf("MBED: TCPClient IP address is '%s'\n", net->get_ip_address());
be_bryan 0:b74591d5ab33 58
be_bryan 0:b74591d5ab33 59 bool result = false;
be_bryan 0:b74591d5ab33 60
be_bryan 0:b74591d5ab33 61 TCPSocket sock(net);
be_bryan 0:b74591d5ab33 62
be_bryan 0:b74591d5ab33 63 SocketAddress tcp_addr(MBED_CONF_APP_ECHO_SERVER_ADDR, MBED_CONF_APP_ECHO_SERVER_PORT);
be_bryan 0:b74591d5ab33 64
be_bryan 0:b74591d5ab33 65 if (sock.connect(tcp_addr) == 0) {
be_bryan 0:b74591d5ab33 66 printf("HTTP: Connected to %s:%d\r\n", MBED_CONF_APP_ECHO_SERVER_ADDR, MBED_CONF_APP_ECHO_SERVER_PORT);
be_bryan 0:b74591d5ab33 67 printf("tx_buffer buffer size: %u\r\n", sizeof(tx_buffer));
be_bryan 0:b74591d5ab33 68 printf("rx_buffer buffer size: %u\r\n", sizeof(rx_buffer));
be_bryan 0:b74591d5ab33 69
be_bryan 0:b74591d5ab33 70 prep_buffer(tx_buffer, sizeof(tx_buffer));
be_bryan 0:b74591d5ab33 71 sock.recv(rx_buffer, sizeof(MBED_CONF_APP_TCP_ECHO_PREFIX));
be_bryan 0:b74591d5ab33 72 const int ret = sock.send(tx_buffer, sizeof(tx_buffer));
be_bryan 0:b74591d5ab33 73 if (ret >= 0) {
be_bryan 0:b74591d5ab33 74 printf("sent %d bytes - %.*s \n", ret, ret, tx_buffer);
be_bryan 0:b74591d5ab33 75 } else {
be_bryan 0:b74591d5ab33 76 printf("Network error %d\n", ret);
be_bryan 0:b74591d5ab33 77 }
be_bryan 0:b74591d5ab33 78
be_bryan 0:b74591d5ab33 79 int n = sock.recv(rx_buffer, sizeof(rx_buffer));
be_bryan 0:b74591d5ab33 80 if (n >= 0) {
be_bryan 0:b74591d5ab33 81 printf("recv %d bytes - %.*s \n", n, n, rx_buffer);
be_bryan 0:b74591d5ab33 82 } else {
be_bryan 0:b74591d5ab33 83 printf("Network error %d\n", n);
be_bryan 0:b74591d5ab33 84 }
be_bryan 0:b74591d5ab33 85
be_bryan 0:b74591d5ab33 86 result = !memcmp(tx_buffer, rx_buffer, sizeof(tx_buffer));
be_bryan 0:b74591d5ab33 87 TEST_ASSERT_EQUAL(ret, sizeof(rx_buffer));
be_bryan 0:b74591d5ab33 88 TEST_ASSERT_EQUAL(true, result);
be_bryan 0:b74591d5ab33 89 }
be_bryan 0:b74591d5ab33 90
be_bryan 0:b74591d5ab33 91 sock.close();
be_bryan 0:b74591d5ab33 92 net->disconnect();
be_bryan 0:b74591d5ab33 93 TEST_ASSERT_EQUAL(true, result);
be_bryan 0:b74591d5ab33 94 }
be_bryan 0:b74591d5ab33 95
be_bryan 0:b74591d5ab33 96
be_bryan 0:b74591d5ab33 97 // Test setup
be_bryan 0:b74591d5ab33 98 utest::v1::status_t test_setup(const size_t number_of_cases) {
be_bryan 0:b74591d5ab33 99 char uuid[48] = {0};
be_bryan 0:b74591d5ab33 100 GREENTEA_SETUP(240, "tcp_echo");
be_bryan 0:b74591d5ab33 101
be_bryan 0:b74591d5ab33 102 // create mac address based on uuid
be_bryan 0:b74591d5ab33 103 uint64_t mac = 0;
be_bryan 0:b74591d5ab33 104 for (int i = 0; i < sizeof(uuid); i++) {
be_bryan 0:b74591d5ab33 105 mac += uuid[i];
be_bryan 0:b74591d5ab33 106 }
be_bryan 0:b74591d5ab33 107 //mbed_set_mac_address((const char*)mac, /*coerce control bits*/ 1);
be_bryan 0:b74591d5ab33 108
be_bryan 0:b74591d5ab33 109 return verbose_test_setup_handler(number_of_cases);
be_bryan 0:b74591d5ab33 110 }
be_bryan 0:b74591d5ab33 111
be_bryan 0:b74591d5ab33 112 Case cases[] = {
be_bryan 0:b74591d5ab33 113 Case("TCP echo", test_tcp_echo),
be_bryan 0:b74591d5ab33 114 };
be_bryan 0:b74591d5ab33 115
be_bryan 0:b74591d5ab33 116 Specification specification(test_setup, cases);
be_bryan 0:b74591d5ab33 117
be_bryan 0:b74591d5ab33 118 int main() {
be_bryan 0:b74591d5ab33 119 return !Harness::run(specification);
be_bryan 0:b74591d5ab33 120 }