sdsf

Committer:
latexinfo
Date:
Fri Apr 06 07:05:50 2018 +0000
Revision:
0:2b5da3767c0a
just a test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
latexinfo 0:2b5da3767c0a 1
latexinfo 0:2b5da3767c0a 2 #include <algorithm>
latexinfo 0:2b5da3767c0a 3 #include "mbed.h"
latexinfo 0:2b5da3767c0a 4 #include "TCPSocket.h"
latexinfo 0:2b5da3767c0a 5 #include "unity/unity.h"
latexinfo 0:2b5da3767c0a 6
latexinfo 0:2b5da3767c0a 7 #ifndef __CC_ARM
latexinfo 0:2b5da3767c0a 8 #ifdef __GNUC__
latexinfo 0:2b5da3767c0a 9 extern "C" caddr_t _sbrk(int incr);
latexinfo 0:2b5da3767c0a 10 #endif
latexinfo 0:2b5da3767c0a 11 #endif
latexinfo 0:2b5da3767c0a 12
latexinfo 0:2b5da3767c0a 13
latexinfo 0:2b5da3767c0a 14 //#define LOCAL_LAN
latexinfo 0:2b5da3767c0a 15
latexinfo 0:2b5da3767c0a 16 #define ETHERNET 1
latexinfo 0:2b5da3767c0a 17 #define WIFI 2
latexinfo 0:2b5da3767c0a 18 #define MESH_LOWPAN_ND 3
latexinfo 0:2b5da3767c0a 19 #define MESH_THREAD 4
latexinfo 0:2b5da3767c0a 20
latexinfo 0:2b5da3767c0a 21 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
latexinfo 0:2b5da3767c0a 22 #include "ESP8266Interface.h"
latexinfo 0:2b5da3767c0a 23 ESP8266Interface esp(D1, D0);
latexinfo 0:2b5da3767c0a 24 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
latexinfo 0:2b5da3767c0a 25 #include "EthernetInterface.h"
latexinfo 0:2b5da3767c0a 26 EthernetInterface eth;
latexinfo 0:2b5da3767c0a 27 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
latexinfo 0:2b5da3767c0a 28 #define MESH
latexinfo 0:2b5da3767c0a 29 #include "NanostackInterface.h"
latexinfo 0:2b5da3767c0a 30 LoWPANNDInterface mesh;
latexinfo 0:2b5da3767c0a 31 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
latexinfo 0:2b5da3767c0a 32 #define MESH
latexinfo 0:2b5da3767c0a 33 #include "NanostackInterface.h"
latexinfo 0:2b5da3767c0a 34 ThreadInterface mesh;
latexinfo 0:2b5da3767c0a 35 #endif
latexinfo 0:2b5da3767c0a 36
latexinfo 0:2b5da3767c0a 37 namespace {
latexinfo 0:2b5da3767c0a 38 // Test connection information
latexinfo 0:2b5da3767c0a 39 #ifndef LOCAL_LAN
latexinfo 0:2b5da3767c0a 40 const char *HTTP_SERVER_NAME = "os.mbed.com";
latexinfo 0:2b5da3767c0a 41 #else
latexinfo 0:2b5da3767c0a 42 const char *HTTP_SERVER_NAME = "pt22_winserver2.nuvoton.com";
latexinfo 0:2b5da3767c0a 43 #endif
latexinfo 0:2b5da3767c0a 44
latexinfo 0:2b5da3767c0a 45 #ifndef LOCAL_LAN
latexinfo 0:2b5da3767c0a 46 const char *HTTP_SERVER_FILE_PATH = "/media/uploads/mbed_official/hello.txt";
latexinfo 0:2b5da3767c0a 47 const int HTTP_SERVER_PORT = 80;
latexinfo 0:2b5da3767c0a 48 #else
latexinfo 0:2b5da3767c0a 49 const char *HTTP_SERVER_FILE_PATH = "/examples/arm_mbed/hello.txt";
latexinfo 0:2b5da3767c0a 50 const int HTTP_SERVER_PORT = 8080;
latexinfo 0:2b5da3767c0a 51 #endif
latexinfo 0:2b5da3767c0a 52
latexinfo 0:2b5da3767c0a 53
latexinfo 0:2b5da3767c0a 54 const int RECV_BUFFER_SIZE = 512;
latexinfo 0:2b5da3767c0a 55
latexinfo 0:2b5da3767c0a 56 // Test related data
latexinfo 0:2b5da3767c0a 57 const char *HTTP_OK_STR = "200 OK";
latexinfo 0:2b5da3767c0a 58 const char *HTTP_HELLO_STR = "Hello world!";
latexinfo 0:2b5da3767c0a 59
latexinfo 0:2b5da3767c0a 60 // Test buffers
latexinfo 0:2b5da3767c0a 61 char buffer[RECV_BUFFER_SIZE] = {0};
latexinfo 0:2b5da3767c0a 62 }
latexinfo 0:2b5da3767c0a 63
latexinfo 0:2b5da3767c0a 64 bool find_substring(const char *first, const char *last, const char *s_first, const char *s_last) {
latexinfo 0:2b5da3767c0a 65 const char *f = std::search(first, last, s_first, s_last);
latexinfo 0:2b5da3767c0a 66 return (f != last);
latexinfo 0:2b5da3767c0a 67 }
latexinfo 0:2b5da3767c0a 68
latexinfo 0:2b5da3767c0a 69
latexinfo 0:2b5da3767c0a 70 Serial output(USBTX, USBRX);
latexinfo 0:2b5da3767c0a 71
latexinfo 0:2b5da3767c0a 72 int main() {
latexinfo 0:2b5da3767c0a 73 // Sets the console baud-rate
latexinfo 0:2b5da3767c0a 74 output.baud(115200);
latexinfo 0:2b5da3767c0a 75 output.printf(" Start WiFi test \r\n");
latexinfo 0:2b5da3767c0a 76
latexinfo 0:2b5da3767c0a 77 bool result = true;
latexinfo 0:2b5da3767c0a 78 int rc = 0;
latexinfo 0:2b5da3767c0a 79
latexinfo 0:2b5da3767c0a 80 #ifndef __CC_ARM
latexinfo 0:2b5da3767c0a 81 #ifdef __GNUC__
latexinfo 0:2b5da3767c0a 82 output.printf("sbrk=%x:\r\n", (unsigned int)_sbrk(0));
latexinfo 0:2b5da3767c0a 83 #endif
latexinfo 0:2b5da3767c0a 84 #endif
latexinfo 0:2b5da3767c0a 85 output.printf(" Start Connection ... \r\n");
latexinfo 0:2b5da3767c0a 86
latexinfo 0:2b5da3767c0a 87
latexinfo 0:2b5da3767c0a 88 NetworkInterface *network_interface = 0;
latexinfo 0:2b5da3767c0a 89
latexinfo 0:2b5da3767c0a 90 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
latexinfo 0:2b5da3767c0a 91 output.printf("\n\rUsing WiFi \r\n");
latexinfo 0:2b5da3767c0a 92 output.printf("\n\rConnecting to WiFi..\r\n");
latexinfo 0:2b5da3767c0a 93 rc = esp.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
latexinfo 0:2b5da3767c0a 94 network_interface = &esp;
latexinfo 0:2b5da3767c0a 95 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
latexinfo 0:2b5da3767c0a 96 output.printf("Using Ethernet\r\n");
latexinfo 0:2b5da3767c0a 97 rc = eth.connect();
latexinfo 0:2b5da3767c0a 98 network_interface = &eth;
latexinfo 0:2b5da3767c0a 99 #endif
latexinfo 0:2b5da3767c0a 100 #ifdef MESH
latexinfo 0:2b5da3767c0a 101 output.printf("Using Mesh\r\n");
latexinfo 0:2b5da3767c0a 102 output.printf("\n\rConnecting to Mesh..\r\n");
latexinfo 0:2b5da3767c0a 103 rc = mesh.connect();
latexinfo 0:2b5da3767c0a 104 network_interface = &mesh;
latexinfo 0:2b5da3767c0a 105 #endif
latexinfo 0:2b5da3767c0a 106
latexinfo 0:2b5da3767c0a 107 if(rc == 0) {
latexinfo 0:2b5da3767c0a 108 output.printf("\n\rConnected to Network successfully\r\n");
latexinfo 0:2b5da3767c0a 109 } else {
latexinfo 0:2b5da3767c0a 110 output.printf("\n\rConnection to Network Failed %d! Exiting application....\r\n", rc);
latexinfo 0:2b5da3767c0a 111 return 0;
latexinfo 0:2b5da3767c0a 112 }
latexinfo 0:2b5da3767c0a 113
latexinfo 0:2b5da3767c0a 114 output.printf("TCP client IP Address is %s\r\n", network_interface->get_ip_address());
latexinfo 0:2b5da3767c0a 115
latexinfo 0:2b5da3767c0a 116 TCPSocket sock(network_interface);
latexinfo 0:2b5da3767c0a 117 output.printf(" HTTP Connection ... \r\n");
latexinfo 0:2b5da3767c0a 118 if (sock.connect(HTTP_SERVER_NAME, HTTP_SERVER_PORT) == 0) {
latexinfo 0:2b5da3767c0a 119 output.printf("HTTP: Connected to %s:%d\r\n", HTTP_SERVER_NAME, HTTP_SERVER_PORT);
latexinfo 0:2b5da3767c0a 120
latexinfo 0:2b5da3767c0a 121 // We are constructing GET command like this:
latexinfo 0:2b5da3767c0a 122 // GET http://developer.mbed.org/media/uploads/mbed_official/hello.txt HTTP/1.0\n\n
latexinfo 0:2b5da3767c0a 123 strcpy(buffer, "GET http://");
latexinfo 0:2b5da3767c0a 124 strcat(buffer, HTTP_SERVER_NAME);
latexinfo 0:2b5da3767c0a 125 strcat(buffer, HTTP_SERVER_FILE_PATH);
latexinfo 0:2b5da3767c0a 126 strcat(buffer, " HTTP/1.0\n\n");
latexinfo 0:2b5da3767c0a 127 // Send GET command
latexinfo 0:2b5da3767c0a 128 sock.send(buffer, strlen(buffer));
latexinfo 0:2b5da3767c0a 129
latexinfo 0:2b5da3767c0a 130 // Server will respond with HTTP GET's success code
latexinfo 0:2b5da3767c0a 131 const int ret = sock.recv(buffer, sizeof(buffer) - 1);
latexinfo 0:2b5da3767c0a 132 buffer[ret] = '\0';
latexinfo 0:2b5da3767c0a 133
latexinfo 0:2b5da3767c0a 134 // Find 200 OK HTTP status in reply
latexinfo 0:2b5da3767c0a 135 bool found_200_ok = find_substring(buffer, buffer + ret, HTTP_OK_STR, HTTP_OK_STR + strlen(HTTP_OK_STR));
latexinfo 0:2b5da3767c0a 136 // Find "Hello World!" string in reply
latexinfo 0:2b5da3767c0a 137 bool found_hello = find_substring(buffer, buffer + ret, HTTP_HELLO_STR, HTTP_HELLO_STR + strlen(HTTP_HELLO_STR));
latexinfo 0:2b5da3767c0a 138
latexinfo 0:2b5da3767c0a 139 if (!found_200_ok) result = false;
latexinfo 0:2b5da3767c0a 140 if (!found_hello) result = false;
latexinfo 0:2b5da3767c0a 141
latexinfo 0:2b5da3767c0a 142 output.printf("HTTP: Received %d chars from server\r\n", ret);
latexinfo 0:2b5da3767c0a 143 output.printf("HTTP: Received 200 OK status ... %s\r\n", found_200_ok ? "[OK]" : "[FAIL]");
latexinfo 0:2b5da3767c0a 144 output.printf("HTTP: Received '%s' status ... %s\r\n", HTTP_HELLO_STR, found_hello ? "[OK]" : "[FAIL]");
latexinfo 0:2b5da3767c0a 145 output.printf("HTTP: Received massage:\r\n\r\n");
latexinfo 0:2b5da3767c0a 146 output.printf("%s", buffer);
latexinfo 0:2b5da3767c0a 147 }
latexinfo 0:2b5da3767c0a 148
latexinfo 0:2b5da3767c0a 149 #ifndef __CC_ARM
latexinfo 0:2b5da3767c0a 150 #ifdef __GNUC__
latexinfo 0:2b5da3767c0a 151 output.printf("sbrk=%x:\r\n", (unsigned int)_sbrk(0));
latexinfo 0:2b5da3767c0a 152 #endif
latexinfo 0:2b5da3767c0a 153 #endif
latexinfo 0:2b5da3767c0a 154 output.printf(" Close socket & disconnect ... \r\n");
latexinfo 0:2b5da3767c0a 155 sock.close();
latexinfo 0:2b5da3767c0a 156
latexinfo 0:2b5da3767c0a 157 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
latexinfo 0:2b5da3767c0a 158 ((ESP8266Interface *)network_interface)->disconnect();
latexinfo 0:2b5da3767c0a 159 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
latexinfo 0:2b5da3767c0a 160 ((EthernetInterface *)network_interface)->disconnect();
latexinfo 0:2b5da3767c0a 161 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
latexinfo 0:2b5da3767c0a 162 ((LoWPANNDInterface *)network_interface)->disconnect();
latexinfo 0:2b5da3767c0a 163 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
latexinfo 0:2b5da3767c0a 164 ((ThreadInterface *)network_interface)->disconnect();
latexinfo 0:2b5da3767c0a 165 #endif
latexinfo 0:2b5da3767c0a 166 output.printf(" End \r\n");
latexinfo 0:2b5da3767c0a 167 }