WiFi DipCortex USB CDC

Dependencies:   HTTPClient NTPClient USBDevice WebSocketClient cc3000_hostdriver_mbedsocket mbed

Fork of WiFiDip-UsbKitchenSink by Carl - SolderSplash Labs

http://www.soldersplash.co.uk/products/wifi-dipcortex/

Demo shows you how to implement the CC3000 library with the WiFi DipCortex.

The demo shows :

  • USB CDC ( Serial ) Menu system allow control of the module and starting each example
  • Smart Connect
  • Manual connect
  • Connection status
  • Ping
  • TCP Client
  • TCP Server
  • Web Socket read/write to sockets.mbed.org
  • HTTP Client test Post, Put, Delete
  • Posting ADC data to Xively every 1 second
  • UDP Client
  • UDP Server
  • NTP Example, contacts time server to get the current time

You will need a Driver for the USB CDC port which can be found here : http://www.soldersplash.co.uk/docs/DipCortex-USB-CDC.zip

Please refer to : http://mbed.org/users/SolderSplashLabs/notebook/dipcortex---getting-started-with-mbed/ as well as the SolderSplash Forum for support http://forum.soldersplash.co.uk/viewforum.php?f=15

Committer:
SolderSplashLabs
Date:
Mon Nov 04 22:18:14 2013 +0000
Revision:
1:6f4eaec531c4
Parent:
0:0bce3a738bcb
Child:
2:8f5776c287c5
Comment changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 0:0bce3a738bcb 1 #include "mbed.h"
SolderSplashLabs 0:0bce3a738bcb 2 #include "cc3000.h"
SolderSplashLabs 0:0bce3a738bcb 3 #include "USBSerial.h"
SolderSplashLabs 0:0bce3a738bcb 4
SolderSplashLabs 0:0bce3a738bcb 5 #include "TCPSocketConnection.h"
SolderSplashLabs 0:0bce3a738bcb 6 #include "TCPSocketServer.h"
SolderSplashLabs 0:0bce3a738bcb 7 #include "HTTPClient.h"
SolderSplashLabs 0:0bce3a738bcb 8 #include "Websocket.h"
SolderSplashLabs 0:0bce3a738bcb 9
SolderSplashLabs 0:0bce3a738bcb 10 using namespace mbed_cc3000;
SolderSplashLabs 0:0bce3a738bcb 11
SolderSplashLabs 0:0bce3a738bcb 12
SolderSplashLabs 0:0bce3a738bcb 13 extern cc3000 wifi;
SolderSplashLabs 0:0bce3a738bcb 14 extern USBSerial pc;
SolderSplashLabs 0:0bce3a738bcb 15
SolderSplashLabs 0:0bce3a738bcb 16 HTTPClient http;
SolderSplashLabs 0:0bce3a738bcb 17
SolderSplashLabs 0:0bce3a738bcb 18 // Goto the viewier page here : http://sockets.mbed.org/SolderSplashLabs/viewer to see the websocket writes
SolderSplashLabs 0:0bce3a738bcb 19 const char WEB_SOCKET_URL[] = {"ws://sockets.mbed.org/ws/SolderSplashLabs/wo"};
SolderSplashLabs 0:0bce3a738bcb 20 const char* ECHO_SERVER_ADDRESS = "192.168.0.10";
SolderSplashLabs 0:0bce3a738bcb 21 const int ECHO_SERVER_PORT_TCP = 80;
SolderSplashLabs 0:0bce3a738bcb 22 char hello[] = "Hello World\r\n";
SolderSplashLabs 0:0bce3a738bcb 23 char tmpBuffer[512];
SolderSplashLabs 0:0bce3a738bcb 24
SolderSplashLabs 0:0bce3a738bcb 25
SolderSplashLabs 0:0bce3a738bcb 26 //char XivelyUrl[] = "http://api.xively.com/v2/feeds/1197891669";
SolderSplashLabs 0:0bce3a738bcb 27 char XivelyHostname[] = "api.xively.com";
SolderSplashLabs 1:6f4eaec531c4 28 char XivelyPath[] = "/v2/feeds/YOUR-FEED-ID-HERE";
SolderSplashLabs 1:6f4eaec531c4 29 char XivelyApiKey[] = "YOUR-API-KEY-HERE";
SolderSplashLabs 0:0bce3a738bcb 30
SolderSplashLabs 0:0bce3a738bcb 31 AnalogIn adc0(P0_11); //P2
SolderSplashLabs 0:0bce3a738bcb 32 AnalogIn adc1(P0_12); //P3
SolderSplashLabs 0:0bce3a738bcb 33 AnalogIn adc2(P0_13); //P4
SolderSplashLabs 0:0bce3a738bcb 34 AnalogIn adc3(P0_14); //P5
SolderSplashLabs 0:0bce3a738bcb 35 AnalogIn adc5(P0_16); //P8
SolderSplashLabs 0:0bce3a738bcb 36 AnalogIn adc6(P0_22); //P9
SolderSplashLabs 0:0bce3a738bcb 37 AnalogIn adc7(P0_23); //P10
SolderSplashLabs 0:0bce3a738bcb 38
SolderSplashLabs 0:0bce3a738bcb 39 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 40 /*!
SolderSplashLabs 1:6f4eaec531c4 41 @brief Post all analog inputs to xively every second
SolderSplashLabs 0:0bce3a738bcb 42 */
SolderSplashLabs 0:0bce3a738bcb 43 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 44 void XivelySimpleTest ( void )
SolderSplashLabs 0:0bce3a738bcb 45 {
SolderSplashLabs 0:0bce3a738bcb 46 TCPSocketConnection socket;
SolderSplashLabs 0:0bce3a738bcb 47 int res = 0;
SolderSplashLabs 0:0bce3a738bcb 48 uint16_t counter = 0;
SolderSplashLabs 0:0bce3a738bcb 49 int httpCmdLen = 0;
SolderSplashLabs 0:0bce3a738bcb 50
SolderSplashLabs 0:0bce3a738bcb 51 //if ( wifi.is_connected() )
SolderSplashLabs 0:0bce3a738bcb 52
SolderSplashLabs 0:0bce3a738bcb 53 while (1)
SolderSplashLabs 0:0bce3a738bcb 54 {
SolderSplashLabs 0:0bce3a738bcb 55 if (socket.connect(XivelyHostname, 80) < 0)
SolderSplashLabs 0:0bce3a738bcb 56 {
SolderSplashLabs 0:0bce3a738bcb 57 pc.printf("\r\nUnable to connect to (%s) on port (%d)\r\n", XivelyHostname, 80);
SolderSplashLabs 0:0bce3a738bcb 58 socket.close();
SolderSplashLabs 0:0bce3a738bcb 59 }
SolderSplashLabs 0:0bce3a738bcb 60 else
SolderSplashLabs 0:0bce3a738bcb 61 {
SolderSplashLabs 0:0bce3a738bcb 62 // Block for 1 second
SolderSplashLabs 0:0bce3a738bcb 63 socket.set_blocking( true, 1000 );
SolderSplashLabs 0:0bce3a738bcb 64 counter ++;
SolderSplashLabs 0:0bce3a738bcb 65
SolderSplashLabs 0:0bce3a738bcb 66 // Build the header
SolderSplashLabs 0:0bce3a738bcb 67 httpCmdLen = sprintf(&tmpBuffer[0], "PUT %s.csv HTTP/1.1\r\n", XivelyPath );
SolderSplashLabs 0:0bce3a738bcb 68 httpCmdLen += sprintf(&tmpBuffer[httpCmdLen], "Host: %s\r\nUser-Agent: WiFi-DipCortex\r\n", XivelyHostname);
SolderSplashLabs 0:0bce3a738bcb 69 httpCmdLen += sprintf(&tmpBuffer[httpCmdLen], "X-ApiKey: %s\r\n", XivelyApiKey);
SolderSplashLabs 1:6f4eaec531c4 70 // TODO : hardcoded data length of 91, using printf with padding to fix the string length
SolderSplashLabs 0:0bce3a738bcb 71 httpCmdLen += sprintf(&tmpBuffer[httpCmdLen], "Content-Type: text/csv\r\nContent-Length: 91\r\n");
SolderSplashLabs 0:0bce3a738bcb 72 httpCmdLen += sprintf(&tmpBuffer[httpCmdLen], "Connection: close\r\n\r\n");
SolderSplashLabs 0:0bce3a738bcb 73
SolderSplashLabs 0:0bce3a738bcb 74 // add the data
SolderSplashLabs 0:0bce3a738bcb 75 httpCmdLen += sprintf(&tmpBuffer[httpCmdLen], "ADC0, %05d\r\nADC1, %05d\r\nADC2, %05d\r\nADC3, %05d\r\nADC5, %05d\r\nADC6, %05d\r\nADC7, %05d\r\n\0",
SolderSplashLabs 0:0bce3a738bcb 76 adc0.read_u16(), adc1.read_u16(), adc2.read_u16(), adc3.read_u16(), adc5.read_u16(), adc6.read_u16(), adc7.read_u16());
SolderSplashLabs 0:0bce3a738bcb 77
SolderSplashLabs 0:0bce3a738bcb 78 pc.printf("Data to be sent : \r\n %s", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 79
SolderSplashLabs 0:0bce3a738bcb 80 pc.printf("Posting ADC's to Xively \r\n");
SolderSplashLabs 0:0bce3a738bcb 81 res = socket.send_all(tmpBuffer, httpCmdLen);
SolderSplashLabs 0:0bce3a738bcb 82
SolderSplashLabs 0:0bce3a738bcb 83 if ( res > 0 )
SolderSplashLabs 0:0bce3a738bcb 84 {
SolderSplashLabs 0:0bce3a738bcb 85 pc.printf("%05d : Data Sent \r\n", counter);
SolderSplashLabs 0:0bce3a738bcb 86 }
SolderSplashLabs 0:0bce3a738bcb 87 else
SolderSplashLabs 0:0bce3a738bcb 88 {
SolderSplashLabs 0:0bce3a738bcb 89 pc.printf("Failed to send\r\n");
SolderSplashLabs 0:0bce3a738bcb 90 break;
SolderSplashLabs 0:0bce3a738bcb 91 }
SolderSplashLabs 0:0bce3a738bcb 92
SolderSplashLabs 0:0bce3a738bcb 93 res = socket.receive(tmpBuffer, 512);
SolderSplashLabs 0:0bce3a738bcb 94
SolderSplashLabs 0:0bce3a738bcb 95 if ( res > 0 )
SolderSplashLabs 0:0bce3a738bcb 96 {
SolderSplashLabs 0:0bce3a738bcb 97 pc.printf("TCP Socket Recv'd : \r\n %s", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 98 tmpBuffer[res] = '\0';
SolderSplashLabs 0:0bce3a738bcb 99 }
SolderSplashLabs 0:0bce3a738bcb 100 else
SolderSplashLabs 0:0bce3a738bcb 101 {
SolderSplashLabs 0:0bce3a738bcb 102 tmpBuffer[0] = '\0';
SolderSplashLabs 0:0bce3a738bcb 103 pc.printf("TCP : Failed to Recv\r\n");
SolderSplashLabs 0:0bce3a738bcb 104 break;
SolderSplashLabs 0:0bce3a738bcb 105 }
SolderSplashLabs 0:0bce3a738bcb 106
SolderSplashLabs 0:0bce3a738bcb 107 socket.close();
SolderSplashLabs 0:0bce3a738bcb 108 }
SolderSplashLabs 0:0bce3a738bcb 109
SolderSplashLabs 0:0bce3a738bcb 110 wait_ms(1000);
SolderSplashLabs 0:0bce3a738bcb 111
SolderSplashLabs 0:0bce3a738bcb 112 if ( pc.readable() )
SolderSplashLabs 0:0bce3a738bcb 113 {
SolderSplashLabs 0:0bce3a738bcb 114 pc.printf("Ending Xively Post \r\n");
SolderSplashLabs 0:0bce3a738bcb 115 pc.getc();
SolderSplashLabs 0:0bce3a738bcb 116 break;
SolderSplashLabs 0:0bce3a738bcb 117 }
SolderSplashLabs 0:0bce3a738bcb 118 }
SolderSplashLabs 0:0bce3a738bcb 119 }
SolderSplashLabs 0:0bce3a738bcb 120
SolderSplashLabs 0:0bce3a738bcb 121 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 122 /*!
SolderSplashLabs 0:0bce3a738bcb 123 @brief Exercise the HTTP Client library
SolderSplashLabs 0:0bce3a738bcb 124 */
SolderSplashLabs 0:0bce3a738bcb 125 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 126 void HttpClientTest ( void )
SolderSplashLabs 0:0bce3a738bcb 127 {
SolderSplashLabs 0:0bce3a738bcb 128
SolderSplashLabs 0:0bce3a738bcb 129 //GET data
SolderSplashLabs 0:0bce3a738bcb 130 pc.printf("\r\nTrying to fetch page... \r\n");
SolderSplashLabs 0:0bce3a738bcb 131 int ret = http.get("http://mbed.org/media/uploads/donatien/hello.txt", tmpBuffer, 128);
SolderSplashLabs 0:0bce3a738bcb 132 if (!ret)
SolderSplashLabs 0:0bce3a738bcb 133 {
SolderSplashLabs 0:0bce3a738bcb 134 pc.printf("Page fetched successfully - read %d characters \r\n", strlen(tmpBuffer));
SolderSplashLabs 0:0bce3a738bcb 135 pc.printf("Result: %s \r\n", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 136 }
SolderSplashLabs 0:0bce3a738bcb 137 else
SolderSplashLabs 0:0bce3a738bcb 138 {
SolderSplashLabs 0:0bce3a738bcb 139 pc.printf("Error - ret = %d - HTTP return code = %d \r\n", tmpBuffer, http.getHTTPResponseCode());
SolderSplashLabs 0:0bce3a738bcb 140 }
SolderSplashLabs 0:0bce3a738bcb 141
SolderSplashLabs 0:0bce3a738bcb 142 //POST data
SolderSplashLabs 0:0bce3a738bcb 143 HTTPMap map;
SolderSplashLabs 0:0bce3a738bcb 144 HTTPText inText(tmpBuffer, 512);
SolderSplashLabs 0:0bce3a738bcb 145 map.put("Hello", "World");
SolderSplashLabs 0:0bce3a738bcb 146 map.put("test", "1234");
SolderSplashLabs 0:0bce3a738bcb 147 pc.printf(" \r\nTrying to post data... \r\n");
SolderSplashLabs 0:0bce3a738bcb 148 ret = http.post("http://httpbin.org/post", map, &inText);
SolderSplashLabs 0:0bce3a738bcb 149 if (!ret)
SolderSplashLabs 0:0bce3a738bcb 150 {
SolderSplashLabs 0:0bce3a738bcb 151 pc.printf("Executed POST successfully - read %d characters \r\n", strlen(tmpBuffer));
SolderSplashLabs 0:0bce3a738bcb 152 pc.printf("Result: %s \r\n", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 153 }
SolderSplashLabs 0:0bce3a738bcb 154 else
SolderSplashLabs 0:0bce3a738bcb 155 {
SolderSplashLabs 0:0bce3a738bcb 156 pc.printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 0:0bce3a738bcb 157 }
SolderSplashLabs 0:0bce3a738bcb 158
SolderSplashLabs 0:0bce3a738bcb 159 //PUT data
SolderSplashLabs 0:0bce3a738bcb 160 strcpy(tmpBuffer, "This is a PUT test!");
SolderSplashLabs 0:0bce3a738bcb 161 HTTPText outText(tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 162 //HTTPText inText(tmpBuffer, 512);
SolderSplashLabs 0:0bce3a738bcb 163 pc.printf(" \r\nTrying to put resource... \r\n");
SolderSplashLabs 0:0bce3a738bcb 164 ret = http.put("http://httpbin.org/put", outText, &inText);
SolderSplashLabs 0:0bce3a738bcb 165 if (!ret)
SolderSplashLabs 0:0bce3a738bcb 166 {
SolderSplashLabs 0:0bce3a738bcb 167 pc.printf("Executed PUT successfully - read %d characters \r\n", strlen(tmpBuffer));
SolderSplashLabs 0:0bce3a738bcb 168 pc.printf("Result: %s \r\n", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 169 }
SolderSplashLabs 0:0bce3a738bcb 170 else
SolderSplashLabs 0:0bce3a738bcb 171 {
SolderSplashLabs 0:0bce3a738bcb 172 pc.printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 0:0bce3a738bcb 173 }
SolderSplashLabs 0:0bce3a738bcb 174
SolderSplashLabs 0:0bce3a738bcb 175 //DELETE data
SolderSplashLabs 0:0bce3a738bcb 176 //HTTPText inText(tmpBuffer, 512);
SolderSplashLabs 0:0bce3a738bcb 177 pc.printf(" \r\nTrying to delete resource... \r\n");
SolderSplashLabs 0:0bce3a738bcb 178 ret = http.del("http://httpbin.org/delete", &inText);
SolderSplashLabs 0:0bce3a738bcb 179 if (!ret)
SolderSplashLabs 0:0bce3a738bcb 180 {
SolderSplashLabs 0:0bce3a738bcb 181 pc.printf("Executed DELETE successfully - read %d characters \r\n", strlen(tmpBuffer));
SolderSplashLabs 0:0bce3a738bcb 182 pc.printf("Result: %s \r\n", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 183 }
SolderSplashLabs 0:0bce3a738bcb 184 else
SolderSplashLabs 0:0bce3a738bcb 185 {
SolderSplashLabs 0:0bce3a738bcb 186 pc.printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 0:0bce3a738bcb 187 }
SolderSplashLabs 0:0bce3a738bcb 188 }
SolderSplashLabs 0:0bce3a738bcb 189
SolderSplashLabs 0:0bce3a738bcb 190 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 191 /*!
SolderSplashLabs 0:0bce3a738bcb 192 @brief Open a WebSocket, send a string
SolderSplashLabs 0:0bce3a738bcb 193 */
SolderSplashLabs 0:0bce3a738bcb 194 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 195 void WebSocketTest ( void )
SolderSplashLabs 0:0bce3a738bcb 196 {
SolderSplashLabs 0:0bce3a738bcb 197
SolderSplashLabs 0:0bce3a738bcb 198 int res = 0;
SolderSplashLabs 0:0bce3a738bcb 199 uint16_t counter = 0;
SolderSplashLabs 0:0bce3a738bcb 200 uint16_t reconnects = 0;
SolderSplashLabs 0:0bce3a738bcb 201 uint8_t myMAC[8];
SolderSplashLabs 0:0bce3a738bcb 202
SolderSplashLabs 0:0bce3a738bcb 203 wifi.get_mac_address(myMAC);
SolderSplashLabs 0:0bce3a738bcb 204
SolderSplashLabs 0:0bce3a738bcb 205 Websocket ws((char *)WEB_SOCKET_URL);
SolderSplashLabs 0:0bce3a738bcb 206 if ( ws.connect() )
SolderSplashLabs 0:0bce3a738bcb 207 {
SolderSplashLabs 0:0bce3a738bcb 208 pc.printf("Connected to websocket server.\r\n");
SolderSplashLabs 0:0bce3a738bcb 209
SolderSplashLabs 0:0bce3a738bcb 210 pc.printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 0:0bce3a738bcb 211 while (1)
SolderSplashLabs 0:0bce3a738bcb 212 {
SolderSplashLabs 0:0bce3a738bcb 213 counter ++;
SolderSplashLabs 0:0bce3a738bcb 214 sprintf(tmpBuffer, "WiFi DipCortex / CC3000 - %05d - %02x:%02x:%02x:%02x:%02x:%02x\r\n", counter, myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
SolderSplashLabs 0:0bce3a738bcb 215
SolderSplashLabs 0:0bce3a738bcb 216 if ( wifi.is_connected() )
SolderSplashLabs 0:0bce3a738bcb 217 {
SolderSplashLabs 0:0bce3a738bcb 218 res = ws.send(tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 219 pc.printf("Reconnects : %05d, Messages Sent : %05d, Websocket send returned : %d.\r\n", reconnects, counter, res);
SolderSplashLabs 0:0bce3a738bcb 220
SolderSplashLabs 0:0bce3a738bcb 221 if ( -1 == res )
SolderSplashLabs 0:0bce3a738bcb 222 {
SolderSplashLabs 0:0bce3a738bcb 223 pc.printf("Websocket Failure, reconnecting .... \r\n");
SolderSplashLabs 0:0bce3a738bcb 224 ws.close();
SolderSplashLabs 0:0bce3a738bcb 225 if ( ws.connect() )
SolderSplashLabs 0:0bce3a738bcb 226 {
SolderSplashLabs 0:0bce3a738bcb 227 // Reconnected
SolderSplashLabs 0:0bce3a738bcb 228 reconnects ++;
SolderSplashLabs 0:0bce3a738bcb 229 }
SolderSplashLabs 0:0bce3a738bcb 230 else
SolderSplashLabs 0:0bce3a738bcb 231 {
SolderSplashLabs 0:0bce3a738bcb 232 // Failure!
SolderSplashLabs 0:0bce3a738bcb 233 break;
SolderSplashLabs 0:0bce3a738bcb 234 }
SolderSplashLabs 0:0bce3a738bcb 235 }
SolderSplashLabs 0:0bce3a738bcb 236
SolderSplashLabs 0:0bce3a738bcb 237 wait_ms(1000);
SolderSplashLabs 0:0bce3a738bcb 238 }
SolderSplashLabs 0:0bce3a738bcb 239 else
SolderSplashLabs 0:0bce3a738bcb 240 {
SolderSplashLabs 0:0bce3a738bcb 241 pc.printf("WiFi Connection Lost .... \r\n");
SolderSplashLabs 0:0bce3a738bcb 242 }
SolderSplashLabs 0:0bce3a738bcb 243
SolderSplashLabs 0:0bce3a738bcb 244 if ( pc.readable() )
SolderSplashLabs 0:0bce3a738bcb 245 {
SolderSplashLabs 0:0bce3a738bcb 246 pc.printf("Closing Socket \r\n");
SolderSplashLabs 0:0bce3a738bcb 247 pc.getc();
SolderSplashLabs 0:0bce3a738bcb 248 break;
SolderSplashLabs 0:0bce3a738bcb 249 }
SolderSplashLabs 0:0bce3a738bcb 250 }
SolderSplashLabs 0:0bce3a738bcb 251
SolderSplashLabs 0:0bce3a738bcb 252 ws.close();
SolderSplashLabs 0:0bce3a738bcb 253 pc.printf("Websocket Closed \r\n");
SolderSplashLabs 0:0bce3a738bcb 254 }
SolderSplashLabs 0:0bce3a738bcb 255 }
SolderSplashLabs 0:0bce3a738bcb 256
SolderSplashLabs 0:0bce3a738bcb 257 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 258 /*!
SolderSplashLabs 0:0bce3a738bcb 259 @brief Open a TCP port send a string and wait for a reply
SolderSplashLabs 0:0bce3a738bcb 260 */
SolderSplashLabs 0:0bce3a738bcb 261 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 262 void TcpClientTest ( void )
SolderSplashLabs 0:0bce3a738bcb 263 {
SolderSplashLabs 0:0bce3a738bcb 264 uint16_t counter = 0;
SolderSplashLabs 0:0bce3a738bcb 265 TCPSocketConnection socket;
SolderSplashLabs 0:0bce3a738bcb 266 int n = 0;
SolderSplashLabs 0:0bce3a738bcb 267
SolderSplashLabs 0:0bce3a738bcb 268 if (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP) < 0)
SolderSplashLabs 0:0bce3a738bcb 269 {
SolderSplashLabs 0:0bce3a738bcb 270 pc.printf("\r\nUnable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP);
SolderSplashLabs 0:0bce3a738bcb 271 }
SolderSplashLabs 0:0bce3a738bcb 272 else
SolderSplashLabs 0:0bce3a738bcb 273 {
SolderSplashLabs 0:0bce3a738bcb 274 // Block for 1 second
SolderSplashLabs 0:0bce3a738bcb 275 socket.set_blocking( true, 1000 );
SolderSplashLabs 0:0bce3a738bcb 276
SolderSplashLabs 0:0bce3a738bcb 277 pc.printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 0:0bce3a738bcb 278 while (1)
SolderSplashLabs 0:0bce3a738bcb 279 {
SolderSplashLabs 0:0bce3a738bcb 280 counter ++;
SolderSplashLabs 0:0bce3a738bcb 281
SolderSplashLabs 0:0bce3a738bcb 282 n = socket.send_all(hello, sizeof(hello) - 1);
SolderSplashLabs 0:0bce3a738bcb 283
SolderSplashLabs 0:0bce3a738bcb 284 if ( n > 0 )
SolderSplashLabs 0:0bce3a738bcb 285 {
SolderSplashLabs 0:0bce3a738bcb 286 pc.printf("%05d : TCP Socket Sent : Hello World\r\n", counter);
SolderSplashLabs 0:0bce3a738bcb 287 }
SolderSplashLabs 0:0bce3a738bcb 288 else
SolderSplashLabs 0:0bce3a738bcb 289 {
SolderSplashLabs 0:0bce3a738bcb 290 pc.printf("Failed to send\r\n");
SolderSplashLabs 0:0bce3a738bcb 291 break;
SolderSplashLabs 0:0bce3a738bcb 292 }
SolderSplashLabs 0:0bce3a738bcb 293
SolderSplashLabs 0:0bce3a738bcb 294 n = socket.receive(tmpBuffer, 256);
SolderSplashLabs 0:0bce3a738bcb 295
SolderSplashLabs 0:0bce3a738bcb 296 if ( n > 0 )
SolderSplashLabs 0:0bce3a738bcb 297 {
SolderSplashLabs 0:0bce3a738bcb 298 pc.printf("TCP Socket Recv'd : %s \r\n", tmpBuffer);
SolderSplashLabs 0:0bce3a738bcb 299 tmpBuffer[n] = '\0';
SolderSplashLabs 0:0bce3a738bcb 300 }
SolderSplashLabs 0:0bce3a738bcb 301 else
SolderSplashLabs 0:0bce3a738bcb 302 {
SolderSplashLabs 0:0bce3a738bcb 303 tmpBuffer[0] = '\0';
SolderSplashLabs 0:0bce3a738bcb 304 pc.printf("TCP : Failed to Recv\r\n");
SolderSplashLabs 0:0bce3a738bcb 305 break;
SolderSplashLabs 0:0bce3a738bcb 306 }
SolderSplashLabs 0:0bce3a738bcb 307
SolderSplashLabs 0:0bce3a738bcb 308 wait_ms(50);
SolderSplashLabs 0:0bce3a738bcb 309
SolderSplashLabs 0:0bce3a738bcb 310 // Should we stop?
SolderSplashLabs 0:0bce3a738bcb 311 if ( pc.readable() )
SolderSplashLabs 0:0bce3a738bcb 312 {
SolderSplashLabs 0:0bce3a738bcb 313 pc.printf("Closing Socket \r\n");
SolderSplashLabs 0:0bce3a738bcb 314 pc.getc();
SolderSplashLabs 0:0bce3a738bcb 315 break;
SolderSplashLabs 0:0bce3a738bcb 316 }
SolderSplashLabs 0:0bce3a738bcb 317 }
SolderSplashLabs 0:0bce3a738bcb 318 if ( wifi.is_connected() )
SolderSplashLabs 0:0bce3a738bcb 319 {
SolderSplashLabs 0:0bce3a738bcb 320 socket.close();
SolderSplashLabs 0:0bce3a738bcb 321 }
SolderSplashLabs 0:0bce3a738bcb 322 pc.printf("Completed.\r\n");
SolderSplashLabs 0:0bce3a738bcb 323 }
SolderSplashLabs 0:0bce3a738bcb 324 }
SolderSplashLabs 0:0bce3a738bcb 325
SolderSplashLabs 0:0bce3a738bcb 326
SolderSplashLabs 0:0bce3a738bcb 327 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 328 /*!
SolderSplashLabs 0:0bce3a738bcb 329 @brief Opens a sockets to listen for connections, upon connection a message is sent and the
SolderSplashLabs 0:0bce3a738bcb 330 client disconnected
SolderSplashLabs 0:0bce3a738bcb 331 */
SolderSplashLabs 0:0bce3a738bcb 332 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:0bce3a738bcb 333 void TcpServerTest ( void )
SolderSplashLabs 0:0bce3a738bcb 334 {
SolderSplashLabs 0:0bce3a738bcb 335 int32_t status;
SolderSplashLabs 0:0bce3a738bcb 336 TCPSocketServer server;
SolderSplashLabs 0:0bce3a738bcb 337 TCPSocketConnection client;
SolderSplashLabs 0:0bce3a738bcb 338
SolderSplashLabs 0:0bce3a738bcb 339 server.bind(80);
SolderSplashLabs 0:0bce3a738bcb 340 server.listen();
SolderSplashLabs 0:0bce3a738bcb 341 pc.printf("\r\n!! Press any key to stop listening !!\r\n\r\n");
SolderSplashLabs 0:0bce3a738bcb 342 while (1)
SolderSplashLabs 0:0bce3a738bcb 343 {
SolderSplashLabs 0:0bce3a738bcb 344 status = server.accept(client);
SolderSplashLabs 0:0bce3a738bcb 345 if (status >= 0)
SolderSplashLabs 0:0bce3a738bcb 346 {
SolderSplashLabs 0:0bce3a738bcb 347 client.set_blocking(false, 1500); // Timeout after (1.5)s
SolderSplashLabs 0:0bce3a738bcb 348 pc.printf("Connection from: %s \r\n", client.get_address());
SolderSplashLabs 0:0bce3a738bcb 349 //client.receive(buffer, sizeof(buffer));
SolderSplashLabs 0:0bce3a738bcb 350 //pc.printf("Received: %s \r\n",buffer);
SolderSplashLabs 0:0bce3a738bcb 351 pc.printf("Sending the message to the server. \r\n");
SolderSplashLabs 0:0bce3a738bcb 352 client.send_all(hello, sizeof(hello));
SolderSplashLabs 0:0bce3a738bcb 353 client.close();
SolderSplashLabs 0:0bce3a738bcb 354 }
SolderSplashLabs 0:0bce3a738bcb 355
SolderSplashLabs 0:0bce3a738bcb 356 // Should we stop?
SolderSplashLabs 0:0bce3a738bcb 357 if ( pc.readable() )
SolderSplashLabs 0:0bce3a738bcb 358 {
SolderSplashLabs 0:0bce3a738bcb 359 pc.printf("Closing Socket \r\n");
SolderSplashLabs 0:0bce3a738bcb 360 pc.getc();
SolderSplashLabs 0:0bce3a738bcb 361 break;
SolderSplashLabs 0:0bce3a738bcb 362 }
SolderSplashLabs 0:0bce3a738bcb 363
SolderSplashLabs 0:0bce3a738bcb 364 if (! wifi.is_connected() )
SolderSplashLabs 0:0bce3a738bcb 365 {
SolderSplashLabs 0:0bce3a738bcb 366 pc.printf("WiFi Connection lost \r\n");
SolderSplashLabs 0:0bce3a738bcb 367 break;
SolderSplashLabs 0:0bce3a738bcb 368 }
SolderSplashLabs 0:0bce3a738bcb 369 }
SolderSplashLabs 0:0bce3a738bcb 370
SolderSplashLabs 0:0bce3a738bcb 371 if ( wifi.is_connected() )
SolderSplashLabs 0:0bce3a738bcb 372 {
SolderSplashLabs 0:0bce3a738bcb 373 server.close();
SolderSplashLabs 0:0bce3a738bcb 374 }
SolderSplashLabs 0:0bce3a738bcb 375 }