
this is using the mbed os version 5-13-1
source/wifi_demo.cpp@74:f26e846adfe9, 2019-03-10 (annotated)
- Committer:
- ocomeni
- Date:
- Sun Mar 10 09:46:06 2019 +0000
- Revision:
- 74:f26e846adfe9
- Child:
- 90:ed0267eca7b5
ATCmdManager now instaltiates ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ocomeni | 74:f26e846adfe9 | 1 | |
ocomeni | 74:f26e846adfe9 | 2 | #include "wifi_demo.h" |
ocomeni | 74:f26e846adfe9 | 3 | #include "common_config.h" |
ocomeni | 74:f26e846adfe9 | 4 | // Wifi-demo |
ocomeni | 74:f26e846adfe9 | 5 | |
ocomeni | 74:f26e846adfe9 | 6 | RawSerial *device; // tx, rx |
ocomeni | 74:f26e846adfe9 | 7 | extern EventQueue eventQueue(/* event count */ 20 * EVENTS_EVENT_SIZE); |
ocomeni | 74:f26e846adfe9 | 8 | int chunkNum; |
ocomeni | 74:f26e846adfe9 | 9 | void dump_response(HttpResponse* res) { |
ocomeni | 74:f26e846adfe9 | 10 | device->printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str()); |
ocomeni | 74:f26e846adfe9 | 11 | |
ocomeni | 74:f26e846adfe9 | 12 | device->printf("Headers:\n"); |
ocomeni | 74:f26e846adfe9 | 13 | for (size_t ix = 0; ix < res->get_headers_length(); ix++) { |
ocomeni | 74:f26e846adfe9 | 14 | device->printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str()); |
ocomeni | 74:f26e846adfe9 | 15 | } |
ocomeni | 74:f26e846adfe9 | 16 | device->printf("\nBody (%lu bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); |
ocomeni | 74:f26e846adfe9 | 17 | } |
ocomeni | 74:f26e846adfe9 | 18 | |
ocomeni | 74:f26e846adfe9 | 19 | void completed(){ |
ocomeni | 74:f26e846adfe9 | 20 | } |
ocomeni | 74:f26e846adfe9 | 21 | void dump_chunked_response(const char *at, uint32_t length) { |
ocomeni | 74:f26e846adfe9 | 22 | device->printf("\n Chunked response: Chunk %d : Total Bytes = %d\n", chunkNum , length); |
ocomeni | 74:f26e846adfe9 | 23 | //device->printf("\n Try Print Header as string:\n\n "); |
ocomeni | 74:f26e846adfe9 | 24 | //device->printf("recv %d [%.*s]\n", length, strstr((char *)at, "\r\n")-(char *)at, (char *)at); |
ocomeni | 74:f26e846adfe9 | 25 | //if(false) |
ocomeni | 74:f26e846adfe9 | 26 | if(chunkNum < 2) |
ocomeni | 74:f26e846adfe9 | 27 | for(int i=0; i < length; i++){ |
ocomeni | 74:f26e846adfe9 | 28 | |
ocomeni | 74:f26e846adfe9 | 29 | while(device->writeable()) |
ocomeni | 74:f26e846adfe9 | 30 | { |
ocomeni | 74:f26e846adfe9 | 31 | device->putc((uint8_t)at[i]); |
ocomeni | 74:f26e846adfe9 | 32 | } |
ocomeni | 74:f26e846adfe9 | 33 | //int resp = write( (const uint8_t *)at, (int) length, &completed, SERIAL_EVENT_TX_COMPLETE); |
ocomeni | 74:f26e846adfe9 | 34 | } |
ocomeni | 74:f26e846adfe9 | 35 | if(false) |
ocomeni | 74:f26e846adfe9 | 36 | for (size_t ix = 0; ix < length; ix++) { |
ocomeni | 74:f26e846adfe9 | 37 | device->printf("%02X: ", at[ix]); |
ocomeni | 74:f26e846adfe9 | 38 | if((ix % 32) == 0 and ix) |
ocomeni | 74:f26e846adfe9 | 39 | device->printf("\n"); |
ocomeni | 74:f26e846adfe9 | 40 | } |
ocomeni | 74:f26e846adfe9 | 41 | device->printf("\n\n"); |
ocomeni | 74:f26e846adfe9 | 42 | chunkNum++; |
ocomeni | 74:f26e846adfe9 | 43 | //device->printf("\nBody (%lu bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); |
ocomeni | 74:f26e846adfe9 | 44 | } |
ocomeni | 74:f26e846adfe9 | 45 | |
ocomeni | 74:f26e846adfe9 | 46 | |
ocomeni | 74:f26e846adfe9 | 47 | int wifi_demo_func(NetworkInterface* network){ |
ocomeni | 74:f26e846adfe9 | 48 | device = new RawSerial(USBTX, USBRX, DEFAULT_BAUD_RATE); |
ocomeni | 74:f26e846adfe9 | 49 | if (!network) { |
ocomeni | 74:f26e846adfe9 | 50 | device->printf("Cannot connect to the network, see serial output\n"); |
ocomeni | 74:f26e846adfe9 | 51 | return 1; |
ocomeni | 74:f26e846adfe9 | 52 | } |
ocomeni | 74:f26e846adfe9 | 53 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 54 | |
ocomeni | 74:f26e846adfe9 | 55 | mbed_trace_init(); |
ocomeni | 74:f26e846adfe9 | 56 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 57 | |
ocomeni | 74:f26e846adfe9 | 58 | // GET request to os.mbed.com |
ocomeni | 74:f26e846adfe9 | 59 | { |
ocomeni | 74:f26e846adfe9 | 60 | chunkNum = 0; |
ocomeni | 74:f26e846adfe9 | 61 | device->printf("\n----- HTTPS GET request -----\n"); |
ocomeni | 74:f26e846adfe9 | 62 | |
ocomeni | 74:f26e846adfe9 | 63 | HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://os.mbed.com/media/uploads/mbed_official/hello.txt", &dump_chunked_response); |
ocomeni | 74:f26e846adfe9 | 64 | |
ocomeni | 74:f26e846adfe9 | 65 | HttpResponse* get_res = get_req->send(); |
ocomeni | 74:f26e846adfe9 | 66 | if (!get_res) { |
ocomeni | 74:f26e846adfe9 | 67 | device->printf("HttpRequest failed (error code %d)\n", get_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 68 | return 1; |
ocomeni | 74:f26e846adfe9 | 69 | } |
ocomeni | 74:f26e846adfe9 | 70 | device->printf("\n----- HTTPS GET response -----\n"); |
ocomeni | 74:f26e846adfe9 | 71 | dump_response(get_res); |
ocomeni | 74:f26e846adfe9 | 72 | delete get_req; |
ocomeni | 74:f26e846adfe9 | 73 | } |
ocomeni | 74:f26e846adfe9 | 74 | |
ocomeni | 74:f26e846adfe9 | 75 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 76 | |
ocomeni | 74:f26e846adfe9 | 77 | // Do a GET request to httpbin.org |
ocomeni | 74:f26e846adfe9 | 78 | { |
ocomeni | 74:f26e846adfe9 | 79 | chunkNum = 0; |
ocomeni | 74:f26e846adfe9 | 80 | device->printf("\n----- HTTP GET request to httpbin.org -----\n"); |
ocomeni | 74:f26e846adfe9 | 81 | |
ocomeni | 74:f26e846adfe9 | 82 | // By default the body is automatically parsed and stored in a buffer, this is memory heavy. |
ocomeni | 74:f26e846adfe9 | 83 | // To receive chunked response, pass in a callback as last parameter to the constructor. |
ocomeni | 74:f26e846adfe9 | 84 | HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://httpbin.org/status/418"); |
ocomeni | 74:f26e846adfe9 | 85 | |
ocomeni | 74:f26e846adfe9 | 86 | HttpResponse* get_res = get_req->send(); |
ocomeni | 74:f26e846adfe9 | 87 | if (!get_res) { |
ocomeni | 74:f26e846adfe9 | 88 | device->printf("HttpRequest failed (error code %d)\n", get_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 89 | return 1; |
ocomeni | 74:f26e846adfe9 | 90 | } |
ocomeni | 74:f26e846adfe9 | 91 | |
ocomeni | 74:f26e846adfe9 | 92 | device->printf("\n----- HTTP GET response from httpbin.org -----\n"); |
ocomeni | 74:f26e846adfe9 | 93 | dump_response(get_res); |
ocomeni | 74:f26e846adfe9 | 94 | |
ocomeni | 74:f26e846adfe9 | 95 | delete get_req; |
ocomeni | 74:f26e846adfe9 | 96 | } |
ocomeni | 74:f26e846adfe9 | 97 | |
ocomeni | 74:f26e846adfe9 | 98 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 99 | |
ocomeni | 74:f26e846adfe9 | 100 | |
ocomeni | 74:f26e846adfe9 | 101 | // Do a GET request to ovh.net |
ocomeni | 74:f26e846adfe9 | 102 | if(false) |
ocomeni | 74:f26e846adfe9 | 103 | { |
ocomeni | 74:f26e846adfe9 | 104 | chunkNum = 0; |
ocomeni | 74:f26e846adfe9 | 105 | device->printf("\n----- HTTP GET request to ovh.net (LARGE FILE) http://www.ovh.net/files/1Mio.dat -----\n"); |
ocomeni | 74:f26e846adfe9 | 106 | Timer t; |
ocomeni | 74:f26e846adfe9 | 107 | // By default the body is automatically parsed and stored in a buffer, this is memory heavy. |
ocomeni | 74:f26e846adfe9 | 108 | // To receive chunked response, pass in a callback as last parameter to the constructor. |
ocomeni | 74:f26e846adfe9 | 109 | t.start(); |
ocomeni | 74:f26e846adfe9 | 110 | HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://www.ovh.net/files/1Mio.dat", &dump_chunked_response); |
ocomeni | 74:f26e846adfe9 | 111 | |
ocomeni | 74:f26e846adfe9 | 112 | HttpResponse* get_res = get_req->send(); |
ocomeni | 74:f26e846adfe9 | 113 | if (!get_res) { |
ocomeni | 74:f26e846adfe9 | 114 | device->printf("HttpRequest failed (error code %d)\n", get_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 115 | return 1; |
ocomeni | 74:f26e846adfe9 | 116 | } |
ocomeni | 74:f26e846adfe9 | 117 | |
ocomeni | 74:f26e846adfe9 | 118 | device->printf("\n----- HTTP GET response from ovh.net -----\n"); |
ocomeni | 74:f26e846adfe9 | 119 | dump_response(get_res); |
ocomeni | 74:f26e846adfe9 | 120 | t.stop(); |
ocomeni | 74:f26e846adfe9 | 121 | device->printf("The time taken was %f seconds\n", t.read()); |
ocomeni | 74:f26e846adfe9 | 122 | |
ocomeni | 74:f26e846adfe9 | 123 | |
ocomeni | 74:f26e846adfe9 | 124 | delete get_req; |
ocomeni | 74:f26e846adfe9 | 125 | } |
ocomeni | 74:f26e846adfe9 | 126 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 127 | |
ocomeni | 74:f26e846adfe9 | 128 | { |
ocomeni | 74:f26e846adfe9 | 129 | device->printf("\n----- HTTPS GET request (small file!) -----\n"); |
ocomeni | 74:f26e846adfe9 | 130 | |
ocomeni | 74:f26e846adfe9 | 131 | HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://os.mbed.com/media/uploads/mbed_official/hello.txt"); |
ocomeni | 74:f26e846adfe9 | 132 | |
ocomeni | 74:f26e846adfe9 | 133 | HttpResponse* get_res = get_req->send(); |
ocomeni | 74:f26e846adfe9 | 134 | if (!get_res) { |
ocomeni | 74:f26e846adfe9 | 135 | device->printf("HttpRequest failed (error code %d)\n", get_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 136 | return 1; |
ocomeni | 74:f26e846adfe9 | 137 | } |
ocomeni | 74:f26e846adfe9 | 138 | /* |
ocomeni | 74:f26e846adfe9 | 139 | while (0 < (response = socket.recv(p, remaining))) { |
ocomeni | 74:f26e846adfe9 | 140 | p += response; |
ocomeni | 74:f26e846adfe9 | 141 | rcount += response; |
ocomeni | 74:f26e846adfe9 | 142 | remaining -= response; |
ocomeni | 74:f26e846adfe9 | 143 | } |
ocomeni | 74:f26e846adfe9 | 144 | */ |
ocomeni | 74:f26e846adfe9 | 145 | device->printf("\n----- HTTPS GET response -----\n"); |
ocomeni | 74:f26e846adfe9 | 146 | dump_response(get_res); |
ocomeni | 74:f26e846adfe9 | 147 | |
ocomeni | 74:f26e846adfe9 | 148 | |
ocomeni | 74:f26e846adfe9 | 149 | |
ocomeni | 74:f26e846adfe9 | 150 | delete get_req; |
ocomeni | 74:f26e846adfe9 | 151 | } |
ocomeni | 74:f26e846adfe9 | 152 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 153 | |
ocomeni | 74:f26e846adfe9 | 154 | // POST request to httpbin.org |
ocomeni | 74:f26e846adfe9 | 155 | { |
ocomeni | 74:f26e846adfe9 | 156 | device->printf("\n----- HTTPS POST request -----\n"); |
ocomeni | 74:f26e846adfe9 | 157 | |
ocomeni | 74:f26e846adfe9 | 158 | HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://httpbin.org/post"); |
ocomeni | 74:f26e846adfe9 | 159 | post_req->set_header("Content-Type", "application/json"); |
ocomeni | 74:f26e846adfe9 | 160 | |
ocomeni | 74:f26e846adfe9 | 161 | const char body[] = "{\"hello\":\"world\"}"; |
ocomeni | 74:f26e846adfe9 | 162 | |
ocomeni | 74:f26e846adfe9 | 163 | HttpResponse* post_res = post_req->send(body, strlen(body)); |
ocomeni | 74:f26e846adfe9 | 164 | if (!post_res) { |
ocomeni | 74:f26e846adfe9 | 165 | device->printf("HttpRequest failed (error code %d)\n", post_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 166 | return 1; |
ocomeni | 74:f26e846adfe9 | 167 | } |
ocomeni | 74:f26e846adfe9 | 168 | |
ocomeni | 74:f26e846adfe9 | 169 | device->printf("\n----- HTTPS POST response -----\n"); |
ocomeni | 74:f26e846adfe9 | 170 | dump_response(post_res); |
ocomeni | 74:f26e846adfe9 | 171 | |
ocomeni | 74:f26e846adfe9 | 172 | delete post_req; |
ocomeni | 74:f26e846adfe9 | 173 | } |
ocomeni | 74:f26e846adfe9 | 174 | |
ocomeni | 74:f26e846adfe9 | 175 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 176 | |
ocomeni | 74:f26e846adfe9 | 177 | // POST request to ws.dnanudge.io:80 |
ocomeni | 74:f26e846adfe9 | 178 | { |
ocomeni | 74:f26e846adfe9 | 179 | device->printf("\n----- HTTP POST request (http://ws.dnanudge.io/nudgebox/v1) -----\n"); |
ocomeni | 74:f26e846adfe9 | 180 | |
ocomeni | 74:f26e846adfe9 | 181 | HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://ws.dnanudge.io/nudgebox/v1"); |
ocomeni | 74:f26e846adfe9 | 182 | post_req->set_header("Host", "ws.dnanudge.io"); |
ocomeni | 74:f26e846adfe9 | 183 | post_req->set_header("Accept", "*/*"); |
ocomeni | 74:f26e846adfe9 | 184 | post_req->set_header("Content-Type", "application/octet-stream"); |
ocomeni | 74:f26e846adfe9 | 185 | post_req->set_header("Content-Length", "20"); |
ocomeni | 74:f26e846adfe9 | 186 | // 00 08 6a 48 f8 2d 8e 82 01 68 |
ocomeni | 74:f26e846adfe9 | 187 | const uint8_t body[] = {0x00, 0x08, 0x6a, 0x48, 0xf8, 0x2d, 0x8e, 0x82, 0x01, 0x68, |
ocomeni | 74:f26e846adfe9 | 188 | // 65 6c 6c 6f 00 00 67 c3 19 f8 |
ocomeni | 74:f26e846adfe9 | 189 | 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x67, 0xc3, 0x19, 0xf8}; |
ocomeni | 74:f26e846adfe9 | 190 | |
ocomeni | 74:f26e846adfe9 | 191 | HttpResponse* post_res = post_req->send(body, 20); |
ocomeni | 74:f26e846adfe9 | 192 | if (!post_res) { |
ocomeni | 74:f26e846adfe9 | 193 | device->printf("HttpRequest failed (error code %d)\n", post_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 194 | return 1; |
ocomeni | 74:f26e846adfe9 | 195 | } |
ocomeni | 74:f26e846adfe9 | 196 | |
ocomeni | 74:f26e846adfe9 | 197 | device->printf("\n----- HTTPS POST response -----\n"); |
ocomeni | 74:f26e846adfe9 | 198 | dump_response(post_res); |
ocomeni | 74:f26e846adfe9 | 199 | |
ocomeni | 74:f26e846adfe9 | 200 | delete post_req; |
ocomeni | 74:f26e846adfe9 | 201 | } |
ocomeni | 74:f26e846adfe9 | 202 | |
ocomeni | 74:f26e846adfe9 | 203 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 204 | |
ocomeni | 74:f26e846adfe9 | 205 | // POST request to httpbin.org |
ocomeni | 74:f26e846adfe9 | 206 | if(false) |
ocomeni | 74:f26e846adfe9 | 207 | { |
ocomeni | 74:f26e846adfe9 | 208 | device->printf("\n----- HTTPS POST request to AWS -----\n"); |
ocomeni | 74:f26e846adfe9 | 209 | |
ocomeni | 74:f26e846adfe9 | 210 | HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://q6bc0dxw7f.execute-api.eu-west-2.amazonaws.com/test/samples/v1"); |
ocomeni | 74:f26e846adfe9 | 211 | post_req->set_header("Content-Type", "application/json"); |
ocomeni | 74:f26e846adfe9 | 212 | |
ocomeni | 74:f26e846adfe9 | 213 | const char body[] = |
ocomeni | 74:f26e846adfe9 | 214 | "{" |
ocomeni | 74:f26e846adfe9 | 215 | "\"firstName\": \"Maria\", " |
ocomeni | 74:f26e846adfe9 | 216 | "\"lastName\": \"Huntera\", " |
ocomeni | 74:f26e846adfe9 | 217 | "\"dob\": \"1970-12-03\", " |
ocomeni | 74:f26e846adfe9 | 218 | "\"mobile\": \"07841887580\", " |
ocomeni | 74:f26e846adfe9 | 219 | "\"cartridgeId\": \"DN00000000RMPOE\", " |
ocomeni | 74:f26e846adfe9 | 220 | "\"labSampleId\": \"DYYAK\"" |
ocomeni | 74:f26e846adfe9 | 221 | "}"; |
ocomeni | 74:f26e846adfe9 | 222 | HttpResponse* post_res = post_req->send(body, strlen(body)); |
ocomeni | 74:f26e846adfe9 | 223 | if (!post_res) { |
ocomeni | 74:f26e846adfe9 | 224 | device->printf("HttpRequest failed (error code %d)\n", post_req->get_error()); |
ocomeni | 74:f26e846adfe9 | 225 | return 1; |
ocomeni | 74:f26e846adfe9 | 226 | } |
ocomeni | 74:f26e846adfe9 | 227 | |
ocomeni | 74:f26e846adfe9 | 228 | device->printf("\n----- HTTPS POST response from AWS -----\n"); |
ocomeni | 74:f26e846adfe9 | 229 | dump_response(post_res); |
ocomeni | 74:f26e846adfe9 | 230 | |
ocomeni | 74:f26e846adfe9 | 231 | delete post_req; |
ocomeni | 74:f26e846adfe9 | 232 | } |
ocomeni | 74:f26e846adfe9 | 233 | wait(1); // wait for 1 sec |
ocomeni | 74:f26e846adfe9 | 234 | delete device; |
ocomeni | 74:f26e846adfe9 | 235 | return 0; |
ocomeni | 74:f26e846adfe9 | 236 | } |