WiFi DipCortex / CC3000 Demo - Contains a menu driven set of tests to initalise and control the CC3000 radio. Also allowing you to test various TCP and UDP connections.

Dependencies:   NTPClient WebSocketClient cc3000_hostdriver_mbedsocket mbed HTTPClient

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

Please Note, this example uses the serial port so you will need an external RS232 TTL to USB adapter.

Committer:
SolderSplashLabs
Date:
Mon Oct 07 21:18:18 2013 +0000
Revision:
0:039d229f3d6b
Child:
2:3adf4a0475d7
First commit, work in progress

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 0:039d229f3d6b 1
SolderSplashLabs 0:039d229f3d6b 2 #include "mbed.h"
SolderSplashLabs 0:039d229f3d6b 3 #include "cc3000.h"
SolderSplashLabs 0:039d229f3d6b 4
SolderSplashLabs 0:039d229f3d6b 5 #include "Websocket.h"
SolderSplashLabs 0:039d229f3d6b 6 #include "wifi.h"
SolderSplashLabs 0:039d229f3d6b 7
SolderSplashLabs 0:039d229f3d6b 8 #include "TCPSocketConnection.h"
SolderSplashLabs 0:039d229f3d6b 9 #include "TCPSocketServer.h"
SolderSplashLabs 0:039d229f3d6b 10
SolderSplashLabs 0:039d229f3d6b 11 #include "UDPSocket.h"
SolderSplashLabs 0:039d229f3d6b 12
SolderSplashLabs 0:039d229f3d6b 13 #include "NTPClient.h"
SolderSplashLabs 0:039d229f3d6b 14 #include "main.h"
SolderSplashLabs 0:039d229f3d6b 15
SolderSplashLabs 0:039d229f3d6b 16 using namespace mbed_cc3000;
SolderSplashLabs 0:039d229f3d6b 17
SolderSplashLabs 0:039d229f3d6b 18 // TODO : List internal varibles & CC3000 buffers
SolderSplashLabs 0:039d229f3d6b 19 // AP point scanning
SolderSplashLabs 0:039d229f3d6b 20 // List open sockets
SolderSplashLabs 0:039d229f3d6b 21 // Overkill mode 2 TCP 2 UDP echo ports?
SolderSplashLabs 0:039d229f3d6b 22
SolderSplashLabs 0:039d229f3d6b 23 #define SERIAL_BAUD_RATE 115200
SolderSplashLabs 0:039d229f3d6b 24 Serial pc(p19, p20);
SolderSplashLabs 0:039d229f3d6b 25 extern cc3000 wifi;
SolderSplashLabs 0:039d229f3d6b 26 //Serial pc(USBTX, USBRX);
SolderSplashLabs 0:039d229f3d6b 27
SolderSplashLabs 0:039d229f3d6b 28 const char* ECHO_SERVER_ADDRESS = "192.168.0.10";
SolderSplashLabs 0:039d229f3d6b 29 const int ECHO_SERVER_PORT_TCP = 80;
SolderSplashLabs 0:039d229f3d6b 30 const int ECHO_SERVER_PORT_UDP = 81;
SolderSplashLabs 0:039d229f3d6b 31 uint8_t *HostToPing = (uint8_t *)"google.com";
SolderSplashLabs 0:039d229f3d6b 32 char hello[] = "Hello World\r\n";
SolderSplashLabs 0:039d229f3d6b 33 const char WEB_SOCKET_URL[] = {"ws://sockets.mbed.org/ws/SolderSplashLabs/wo"};
SolderSplashLabs 0:039d229f3d6b 34
SolderSplashLabs 0:039d229f3d6b 35 typedef enum MENU_LEVEL
SolderSplashLabs 0:039d229f3d6b 36 {
SolderSplashLabs 0:039d229f3d6b 37 MENU_TOP = 0,
SolderSplashLabs 0:039d229f3d6b 38 MENU_CONNECTION,
SolderSplashLabs 0:039d229f3d6b 39 MENU_TCP,
SolderSplashLabs 0:039d229f3d6b 40 MENU_UDP
SolderSplashLabs 0:039d229f3d6b 41 } MENU_LEVEL;
SolderSplashLabs 0:039d229f3d6b 42
SolderSplashLabs 0:039d229f3d6b 43 MENU_LEVEL currentMenu = MENU_TOP;
SolderSplashLabs 0:039d229f3d6b 44
SolderSplashLabs 0:039d229f3d6b 45 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 46 /*!
SolderSplashLabs 0:039d229f3d6b 47 @brief Resolve a hostname and ping it
SolderSplashLabs 0:039d229f3d6b 48 */
SolderSplashLabs 0:039d229f3d6b 49 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 50 void PingTest ( void )
SolderSplashLabs 0:039d229f3d6b 51 {
SolderSplashLabs 0:039d229f3d6b 52 uint32_t ip;
SolderSplashLabs 0:039d229f3d6b 53 int32_t resolveRetCode = 0;
SolderSplashLabs 0:039d229f3d6b 54
SolderSplashLabs 0:039d229f3d6b 55 printf("Get an IP address for %s\r\n",HostToPing);
SolderSplashLabs 0:039d229f3d6b 56 resolveRetCode = wifi._socket.gethostbyname(HostToPing,strlen((const char *)HostToPing), &ip);
SolderSplashLabs 0:039d229f3d6b 57 printf("gethostbyname Returned code : %i \r\n", resolveRetCode);
SolderSplashLabs 0:039d229f3d6b 58
SolderSplashLabs 0:039d229f3d6b 59 if (resolveRetCode > -1)
SolderSplashLabs 0:039d229f3d6b 60 {
SolderSplashLabs 0:039d229f3d6b 61 uint8_t add0 = (ip >> 24);
SolderSplashLabs 0:039d229f3d6b 62 uint8_t add1 = (ip >> 16);
SolderSplashLabs 0:039d229f3d6b 63 uint8_t add2 = (ip >> 8);
SolderSplashLabs 0:039d229f3d6b 64 uint8_t add3 = (ip >> 0);
SolderSplashLabs 0:039d229f3d6b 65 printf("IP address of %s: %d.%d.%d.%d \r\n", HostToPing, add0, add1, add2, add3);
SolderSplashLabs 0:039d229f3d6b 66
SolderSplashLabs 0:039d229f3d6b 67 printf("Sending ping\r\n");
SolderSplashLabs 0:039d229f3d6b 68 uint32_t reply_count = wifi.ping(ip, 5, 500, 32);
SolderSplashLabs 0:039d229f3d6b 69 printf("Received %d replies\r\n", reply_count);
SolderSplashLabs 0:039d229f3d6b 70 printf("Ping complete.\r\n");
SolderSplashLabs 0:039d229f3d6b 71 }
SolderSplashLabs 0:039d229f3d6b 72 else
SolderSplashLabs 0:039d229f3d6b 73 {
SolderSplashLabs 0:039d229f3d6b 74 printf("Failed to resolve\r\n");
SolderSplashLabs 0:039d229f3d6b 75 }
SolderSplashLabs 0:039d229f3d6b 76 }
SolderSplashLabs 0:039d229f3d6b 77
SolderSplashLabs 0:039d229f3d6b 78 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 79 /*!
SolderSplashLabs 0:039d229f3d6b 80 @brief Test the NTP library
SolderSplashLabs 0:039d229f3d6b 81 */
SolderSplashLabs 0:039d229f3d6b 82 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 83 void NtpTest ( void )
SolderSplashLabs 0:039d229f3d6b 84 {
SolderSplashLabs 0:039d229f3d6b 85 NTPClient ntp;
SolderSplashLabs 0:039d229f3d6b 86
SolderSplashLabs 0:039d229f3d6b 87 if (ntp.setTime("0.pool.ntp.org",123,10000) == 0)
SolderSplashLabs 0:039d229f3d6b 88 {
SolderSplashLabs 0:039d229f3d6b 89 printf("Set time successfully\r\n");
SolderSplashLabs 0:039d229f3d6b 90 time_t ctTime;
SolderSplashLabs 0:039d229f3d6b 91 ctTime = time(NULL);
SolderSplashLabs 0:039d229f3d6b 92 printf("Time is set to (UTC): %s\r\n", ctime(&ctTime));
SolderSplashLabs 0:039d229f3d6b 93 }
SolderSplashLabs 0:039d229f3d6b 94 else
SolderSplashLabs 0:039d229f3d6b 95 {
SolderSplashLabs 0:039d229f3d6b 96 printf("NTP Update Failed\r\n");
SolderSplashLabs 0:039d229f3d6b 97 }
SolderSplashLabs 0:039d229f3d6b 98 }
SolderSplashLabs 0:039d229f3d6b 99
SolderSplashLabs 0:039d229f3d6b 100 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 101 /*!
SolderSplashLabs 0:039d229f3d6b 102 @brief Open a WebSocket, send string a string
SolderSplashLabs 0:039d229f3d6b 103 */
SolderSplashLabs 0:039d229f3d6b 104 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 105 void WebSocketTest ( void )
SolderSplashLabs 0:039d229f3d6b 106 {
SolderSplashLabs 0:039d229f3d6b 107 int res = 0;
SolderSplashLabs 0:039d229f3d6b 108 uint32_t counter = 0;
SolderSplashLabs 0:039d229f3d6b 109
SolderSplashLabs 0:039d229f3d6b 110 Websocket ws((char *)WEB_SOCKET_URL);
SolderSplashLabs 0:039d229f3d6b 111 if ( ws.connect() )
SolderSplashLabs 0:039d229f3d6b 112 {
SolderSplashLabs 0:039d229f3d6b 113 printf("Connected to websocket server.\r\n");
SolderSplashLabs 0:039d229f3d6b 114
SolderSplashLabs 0:039d229f3d6b 115 printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 0:039d229f3d6b 116 while (1)
SolderSplashLabs 0:039d229f3d6b 117 {
SolderSplashLabs 0:039d229f3d6b 118 counter ++;
SolderSplashLabs 0:039d229f3d6b 119 res = ws.send("WiFi DipCortex / CC3000 - Says Hello");
SolderSplashLabs 0:039d229f3d6b 120 printf("%05d : Websocket send returned : %d.\r\n", counter, res);
SolderSplashLabs 0:039d229f3d6b 121
SolderSplashLabs 0:039d229f3d6b 122 if ( -1 == res ) break;
SolderSplashLabs 0:039d229f3d6b 123
SolderSplashLabs 0:039d229f3d6b 124 wait_ms(1000);
SolderSplashLabs 0:039d229f3d6b 125
SolderSplashLabs 0:039d229f3d6b 126 if ( pc.readable() )
SolderSplashLabs 0:039d229f3d6b 127 {
SolderSplashLabs 0:039d229f3d6b 128 pc.getc();
SolderSplashLabs 0:039d229f3d6b 129 break;
SolderSplashLabs 0:039d229f3d6b 130 }
SolderSplashLabs 0:039d229f3d6b 131 }
SolderSplashLabs 0:039d229f3d6b 132
SolderSplashLabs 0:039d229f3d6b 133 ws.close();
SolderSplashLabs 0:039d229f3d6b 134 printf("Websocket Closed \r\n");
SolderSplashLabs 0:039d229f3d6b 135 }
SolderSplashLabs 0:039d229f3d6b 136 }
SolderSplashLabs 0:039d229f3d6b 137
SolderSplashLabs 0:039d229f3d6b 138 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 139 /*!
SolderSplashLabs 0:039d229f3d6b 140 @brief Open a TCP port send a string and wait for a reply
SolderSplashLabs 0:039d229f3d6b 141 */
SolderSplashLabs 0:039d229f3d6b 142 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 143 void TcpClientTest ( void )
SolderSplashLabs 0:039d229f3d6b 144 {
SolderSplashLabs 0:039d229f3d6b 145 uint16_t counter = 0;
SolderSplashLabs 0:039d229f3d6b 146 TCPSocketConnection socket;
SolderSplashLabs 0:039d229f3d6b 147 char buf[256];
SolderSplashLabs 0:039d229f3d6b 148 int n = 0;
SolderSplashLabs 0:039d229f3d6b 149
SolderSplashLabs 0:039d229f3d6b 150 if (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP) < 0)
SolderSplashLabs 0:039d229f3d6b 151 {
SolderSplashLabs 0:039d229f3d6b 152 printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP);
SolderSplashLabs 0:039d229f3d6b 153 }
SolderSplashLabs 0:039d229f3d6b 154 else
SolderSplashLabs 0:039d229f3d6b 155 {
SolderSplashLabs 0:039d229f3d6b 156 // Block for 1 second
SolderSplashLabs 0:039d229f3d6b 157 socket.set_blocking( true, 1000 );
SolderSplashLabs 0:039d229f3d6b 158
SolderSplashLabs 0:039d229f3d6b 159 printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 0:039d229f3d6b 160 while (1)
SolderSplashLabs 0:039d229f3d6b 161 {
SolderSplashLabs 0:039d229f3d6b 162 counter ++;
SolderSplashLabs 0:039d229f3d6b 163
SolderSplashLabs 0:039d229f3d6b 164 n = socket.send_all(hello, sizeof(hello) - 1);
SolderSplashLabs 0:039d229f3d6b 165
SolderSplashLabs 0:039d229f3d6b 166 if ( n > 0 )
SolderSplashLabs 0:039d229f3d6b 167 {
SolderSplashLabs 0:039d229f3d6b 168 printf("%05d : TCP Socket Sent : Hello World\r\n", counter);
SolderSplashLabs 0:039d229f3d6b 169 }
SolderSplashLabs 0:039d229f3d6b 170 else
SolderSplashLabs 0:039d229f3d6b 171 {
SolderSplashLabs 0:039d229f3d6b 172 printf("Failed to send\r\n");
SolderSplashLabs 0:039d229f3d6b 173 break;
SolderSplashLabs 0:039d229f3d6b 174 }
SolderSplashLabs 0:039d229f3d6b 175
SolderSplashLabs 0:039d229f3d6b 176 n = socket.receive(buf, 256);
SolderSplashLabs 0:039d229f3d6b 177
SolderSplashLabs 0:039d229f3d6b 178 if ( n > 0 )
SolderSplashLabs 0:039d229f3d6b 179 {
SolderSplashLabs 0:039d229f3d6b 180 printf("TCP Socket Recv'd : %s \r\n", buf);
SolderSplashLabs 0:039d229f3d6b 181 buf[n] = '\0';
SolderSplashLabs 0:039d229f3d6b 182 }
SolderSplashLabs 0:039d229f3d6b 183 else
SolderSplashLabs 0:039d229f3d6b 184 {
SolderSplashLabs 0:039d229f3d6b 185 buf[0] = '\0';
SolderSplashLabs 0:039d229f3d6b 186 printf("Failed to Recv\r\n");
SolderSplashLabs 0:039d229f3d6b 187 break;
SolderSplashLabs 0:039d229f3d6b 188 }
SolderSplashLabs 0:039d229f3d6b 189
SolderSplashLabs 0:039d229f3d6b 190 wait_ms(250);
SolderSplashLabs 0:039d229f3d6b 191
SolderSplashLabs 0:039d229f3d6b 192 // Should we stop?
SolderSplashLabs 0:039d229f3d6b 193 if ( pc.readable() )
SolderSplashLabs 0:039d229f3d6b 194 {
SolderSplashLabs 0:039d229f3d6b 195 pc.getc();
SolderSplashLabs 0:039d229f3d6b 196 break;
SolderSplashLabs 0:039d229f3d6b 197 }
SolderSplashLabs 0:039d229f3d6b 198 }
SolderSplashLabs 0:039d229f3d6b 199 socket.close();
SolderSplashLabs 0:039d229f3d6b 200 printf("Completed.\r\n");
SolderSplashLabs 0:039d229f3d6b 201 }
SolderSplashLabs 0:039d229f3d6b 202 }
SolderSplashLabs 0:039d229f3d6b 203
SolderSplashLabs 0:039d229f3d6b 204 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 205 /*!
SolderSplashLabs 0:039d229f3d6b 206 @brief Opens a sockets to listen for connections
SolderSplashLabs 0:039d229f3d6b 207 */
SolderSplashLabs 0:039d229f3d6b 208 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 209 void TcpServerTest ( void )
SolderSplashLabs 0:039d229f3d6b 210 {
SolderSplashLabs 0:039d229f3d6b 211 int32_t status;
SolderSplashLabs 0:039d229f3d6b 212 char buffer[256];
SolderSplashLabs 0:039d229f3d6b 213 TCPSocketServer server;
SolderSplashLabs 0:039d229f3d6b 214 TCPSocketConnection client;
SolderSplashLabs 0:039d229f3d6b 215
SolderSplashLabs 0:039d229f3d6b 216 server.bind(15000);
SolderSplashLabs 0:039d229f3d6b 217 server.listen();
SolderSplashLabs 0:039d229f3d6b 218 while (1)
SolderSplashLabs 0:039d229f3d6b 219 {
SolderSplashLabs 0:039d229f3d6b 220 status = server.accept(client);
SolderSplashLabs 0:039d229f3d6b 221 if (status >= 0)
SolderSplashLabs 0:039d229f3d6b 222 {
SolderSplashLabs 0:039d229f3d6b 223 client.set_blocking(false, 1500); // Timeout after (1.5)s
SolderSplashLabs 0:039d229f3d6b 224 printf("Connection from: %s \r\n", client.get_address());
SolderSplashLabs 0:039d229f3d6b 225 char buffer[256];
SolderSplashLabs 0:039d229f3d6b 226 //client.receive(buffer, sizeof(buffer));
SolderSplashLabs 0:039d229f3d6b 227 //printf("Received: %s \r\n",buffer);
SolderSplashLabs 0:039d229f3d6b 228 printf("Sending the message to the server. \r\n");
SolderSplashLabs 0:039d229f3d6b 229 client.send_all(hello, sizeof(hello));
SolderSplashLabs 0:039d229f3d6b 230 client.close();
SolderSplashLabs 0:039d229f3d6b 231 }
SolderSplashLabs 0:039d229f3d6b 232
SolderSplashLabs 0:039d229f3d6b 233 // Should we stop?
SolderSplashLabs 0:039d229f3d6b 234 if ( pc.readable() )
SolderSplashLabs 0:039d229f3d6b 235 {
SolderSplashLabs 0:039d229f3d6b 236 pc.getc();
SolderSplashLabs 0:039d229f3d6b 237 break;
SolderSplashLabs 0:039d229f3d6b 238 }
SolderSplashLabs 0:039d229f3d6b 239 }
SolderSplashLabs 0:039d229f3d6b 240 }
SolderSplashLabs 0:039d229f3d6b 241
SolderSplashLabs 0:039d229f3d6b 242 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 243 /*!
SolderSplashLabs 0:039d229f3d6b 244 @brief Send a UDP Packet, wait for response
SolderSplashLabs 0:039d229f3d6b 245 */
SolderSplashLabs 0:039d229f3d6b 246 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 247 void UdpClientTest ( void )
SolderSplashLabs 0:039d229f3d6b 248 {
SolderSplashLabs 0:039d229f3d6b 249 UDPSocket socket;
SolderSplashLabs 0:039d229f3d6b 250 char buf[256];
SolderSplashLabs 0:039d229f3d6b 251 int n = 0;
SolderSplashLabs 0:039d229f3d6b 252 Endpoint outEndpoint;
SolderSplashLabs 0:039d229f3d6b 253 Endpoint inEndpoint;
SolderSplashLabs 0:039d229f3d6b 254
SolderSplashLabs 0:039d229f3d6b 255 if (0 == socket.bind(ECHO_SERVER_PORT_UDP) )
SolderSplashLabs 0:039d229f3d6b 256 {
SolderSplashLabs 0:039d229f3d6b 257
SolderSplashLabs 0:039d229f3d6b 258 // 2 second timeout
SolderSplashLabs 0:039d229f3d6b 259 socket.set_blocking(false, 2000);
SolderSplashLabs 0:039d229f3d6b 260
SolderSplashLabs 0:039d229f3d6b 261 while (1)
SolderSplashLabs 0:039d229f3d6b 262 {
SolderSplashLabs 0:039d229f3d6b 263 if( outEndpoint.set_address(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_UDP) < 0 )
SolderSplashLabs 0:039d229f3d6b 264 {
SolderSplashLabs 0:039d229f3d6b 265 printf("Failed to set endpoint address.\r\n");
SolderSplashLabs 0:039d229f3d6b 266 break;
SolderSplashLabs 0:039d229f3d6b 267 }
SolderSplashLabs 0:039d229f3d6b 268 else if ( socket.sendTo( outEndpoint, hello, sizeof(hello) ) < 0 )
SolderSplashLabs 0:039d229f3d6b 269 {
SolderSplashLabs 0:039d229f3d6b 270 printf("Failed to send the packet.\r\n");
SolderSplashLabs 0:039d229f3d6b 271 }
SolderSplashLabs 0:039d229f3d6b 272 else
SolderSplashLabs 0:039d229f3d6b 273 {
SolderSplashLabs 0:039d229f3d6b 274 // Message sent, recv reply
SolderSplashLabs 0:039d229f3d6b 275 printf("UDP Socket Sent : %s \r\n", hello);
SolderSplashLabs 0:039d229f3d6b 276 n = socket.receiveFrom( inEndpoint, buf, sizeof(buf) );
SolderSplashLabs 0:039d229f3d6b 277 if ( n < 0 )
SolderSplashLabs 0:039d229f3d6b 278 {
SolderSplashLabs 0:039d229f3d6b 279 printf("Failed to recv the UDP packet.\r\n");
SolderSplashLabs 0:039d229f3d6b 280 }
SolderSplashLabs 0:039d229f3d6b 281 else
SolderSplashLabs 0:039d229f3d6b 282 {
SolderSplashLabs 0:039d229f3d6b 283 buf[n] = '\0';
SolderSplashLabs 0:039d229f3d6b 284 printf("UDP Socket Recv'd : %s \r\n", buf);
SolderSplashLabs 0:039d229f3d6b 285 }
SolderSplashLabs 0:039d229f3d6b 286 }
SolderSplashLabs 0:039d229f3d6b 287
SolderSplashLabs 0:039d229f3d6b 288 // Should we stop?
SolderSplashLabs 0:039d229f3d6b 289 if ( pc.readable() )
SolderSplashLabs 0:039d229f3d6b 290 {
SolderSplashLabs 0:039d229f3d6b 291 pc.getc();
SolderSplashLabs 0:039d229f3d6b 292 break;
SolderSplashLabs 0:039d229f3d6b 293 }
SolderSplashLabs 0:039d229f3d6b 294 }
SolderSplashLabs 0:039d229f3d6b 295
SolderSplashLabs 0:039d229f3d6b 296 socket.close();
SolderSplashLabs 0:039d229f3d6b 297 }
SolderSplashLabs 0:039d229f3d6b 298 else
SolderSplashLabs 0:039d229f3d6b 299 {
SolderSplashLabs 0:039d229f3d6b 300 // Failed to bind to the socket
SolderSplashLabs 0:039d229f3d6b 301 }
SolderSplashLabs 0:039d229f3d6b 302 }
SolderSplashLabs 0:039d229f3d6b 303
SolderSplashLabs 0:039d229f3d6b 304 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 305 /*!
SolderSplashLabs 0:039d229f3d6b 306 @brief Listen on a UDP port for messages
SolderSplashLabs 0:039d229f3d6b 307 */
SolderSplashLabs 0:039d229f3d6b 308 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 309 void UdpServerTest ( void )
SolderSplashLabs 0:039d229f3d6b 310 {
SolderSplashLabs 0:039d229f3d6b 311 UDPSocket socket;
SolderSplashLabs 0:039d229f3d6b 312 Endpoint client;
SolderSplashLabs 0:039d229f3d6b 313 char buffer[256];
SolderSplashLabs 0:039d229f3d6b 314 int n = 0;
SolderSplashLabs 0:039d229f3d6b 315
SolderSplashLabs 0:039d229f3d6b 316 if (0 == socket.bind(ECHO_SERVER_PORT_UDP) )
SolderSplashLabs 0:039d229f3d6b 317 {
SolderSplashLabs 0:039d229f3d6b 318 while (true)
SolderSplashLabs 0:039d229f3d6b 319 {
SolderSplashLabs 0:039d229f3d6b 320 printf("Waiting for packet...\r\n");
SolderSplashLabs 0:039d229f3d6b 321 n = socket.receiveFrom(client, buffer, sizeof(buffer));
SolderSplashLabs 0:039d229f3d6b 322
SolderSplashLabs 0:039d229f3d6b 323 printf("Received packet from: %s\n", client.get_address());
SolderSplashLabs 0:039d229f3d6b 324 socket.sendTo(client, buffer, n);
SolderSplashLabs 0:039d229f3d6b 325
SolderSplashLabs 0:039d229f3d6b 326 // Should we stop?
SolderSplashLabs 0:039d229f3d6b 327 if ( pc.readable() )
SolderSplashLabs 0:039d229f3d6b 328 {
SolderSplashLabs 0:039d229f3d6b 329 pc.getc();
SolderSplashLabs 0:039d229f3d6b 330 break;
SolderSplashLabs 0:039d229f3d6b 331 }
SolderSplashLabs 0:039d229f3d6b 332 }
SolderSplashLabs 0:039d229f3d6b 333 }
SolderSplashLabs 0:039d229f3d6b 334 }
SolderSplashLabs 0:039d229f3d6b 335
SolderSplashLabs 0:039d229f3d6b 336 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 337 /*!
SolderSplashLabs 0:039d229f3d6b 338 @brief Print menu header
SolderSplashLabs 0:039d229f3d6b 339 */
SolderSplashLabs 0:039d229f3d6b 340 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 341 void Menu_PrintHeader ( void )
SolderSplashLabs 0:039d229f3d6b 342 {
SolderSplashLabs 0:039d229f3d6b 343 tNetappIpconfigRetArgs ipinfo;
SolderSplashLabs 0:039d229f3d6b 344
SolderSplashLabs 0:039d229f3d6b 345 if ( wifi.is_dhcp_configured() )
SolderSplashLabs 0:039d229f3d6b 346 {
SolderSplashLabs 0:039d229f3d6b 347 wifi.get_ip_config(&ipinfo);
SolderSplashLabs 0:039d229f3d6b 348 }
SolderSplashLabs 0:039d229f3d6b 349
SolderSplashLabs 0:039d229f3d6b 350 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 351 printf("+-------------------------------------------+\r\n");
SolderSplashLabs 0:039d229f3d6b 352 printf("| WiFi DipCortex / CC3000 Kitchen Sink |\r\n");
SolderSplashLabs 0:039d229f3d6b 353 printf("+-------------------------------------------+\r\n");
SolderSplashLabs 0:039d229f3d6b 354 if ( wifi.is_dhcp_configured() )
SolderSplashLabs 0:039d229f3d6b 355 {
SolderSplashLabs 0:039d229f3d6b 356 printf("| SSID : %-33s|\r\n", ipinfo.uaSSID);
SolderSplashLabs 0:039d229f3d6b 357 printf("| IP : %d.%d.%d.%d |\r\n", ipinfo.aucIP[3], ipinfo.aucIP[2], ipinfo.aucIP[1], ipinfo.aucIP[0]);
SolderSplashLabs 0:039d229f3d6b 358 }
SolderSplashLabs 0:039d229f3d6b 359 else
SolderSplashLabs 0:039d229f3d6b 360 {
SolderSplashLabs 0:039d229f3d6b 361 printf("| Not Connected |\r\n");
SolderSplashLabs 0:039d229f3d6b 362 }
SolderSplashLabs 0:039d229f3d6b 363 printf("+-------------------------------------------+\r\n");
SolderSplashLabs 0:039d229f3d6b 364 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 365 }
SolderSplashLabs 0:039d229f3d6b 366
SolderSplashLabs 0:039d229f3d6b 367 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 368 /*!
SolderSplashLabs 0:039d229f3d6b 369 @brief Control the wifi connection
SolderSplashLabs 0:039d229f3d6b 370 */
SolderSplashLabs 0:039d229f3d6b 371 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 372 char WaitForSerialCommand ( void )
SolderSplashLabs 0:039d229f3d6b 373 {
SolderSplashLabs 0:039d229f3d6b 374 char charIn = 0;
SolderSplashLabs 0:039d229f3d6b 375 char prevCharIn;
SolderSplashLabs 0:039d229f3d6b 376
SolderSplashLabs 0:039d229f3d6b 377 while (1)
SolderSplashLabs 0:039d229f3d6b 378 {
SolderSplashLabs 0:039d229f3d6b 379 prevCharIn = charIn;
SolderSplashLabs 0:039d229f3d6b 380 charIn = pc.getc();
SolderSplashLabs 0:039d229f3d6b 381 printf("%c", charIn);
SolderSplashLabs 0:039d229f3d6b 382 if ((charIn == '\n') || (charIn == '\r'))
SolderSplashLabs 0:039d229f3d6b 383 {
SolderSplashLabs 0:039d229f3d6b 384 break;
SolderSplashLabs 0:039d229f3d6b 385 }
SolderSplashLabs 0:039d229f3d6b 386 }
SolderSplashLabs 0:039d229f3d6b 387
SolderSplashLabs 0:039d229f3d6b 388 return ( prevCharIn );
SolderSplashLabs 0:039d229f3d6b 389 }
SolderSplashLabs 0:039d229f3d6b 390
SolderSplashLabs 0:039d229f3d6b 391 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 392 /*!
SolderSplashLabs 0:039d229f3d6b 393 @brief Control the wifi connection
SolderSplashLabs 0:039d229f3d6b 394 */
SolderSplashLabs 0:039d229f3d6b 395 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 396 void Menu_ConnectionControl ( void )
SolderSplashLabs 0:039d229f3d6b 397 {
SolderSplashLabs 0:039d229f3d6b 398 Menu_PrintHeader();
SolderSplashLabs 0:039d229f3d6b 399 printf(" 1 - Enable auto connect to any previous access point\r\n");
SolderSplashLabs 0:039d229f3d6b 400 printf(" 2 - Disable auto connect \r\n");
SolderSplashLabs 0:039d229f3d6b 401 printf(" 3 - Connect to %s \r\n", SSID);
SolderSplashLabs 0:039d229f3d6b 402 printf(" 4 - Disconnect \r\n");
SolderSplashLabs 0:039d229f3d6b 403 printf(" 5 - Get Status \r\n");
SolderSplashLabs 0:039d229f3d6b 404 printf(" x - Top Menu \r\n");
SolderSplashLabs 0:039d229f3d6b 405
SolderSplashLabs 0:039d229f3d6b 406 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 407 printf("Enter command character : ");
SolderSplashLabs 0:039d229f3d6b 408
SolderSplashLabs 0:039d229f3d6b 409 switch(WaitForSerialCommand())
SolderSplashLabs 0:039d229f3d6b 410 {
SolderSplashLabs 0:039d229f3d6b 411 case '1':
SolderSplashLabs 0:039d229f3d6b 412 wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
SolderSplashLabs 0:039d229f3d6b 413 break;
SolderSplashLabs 0:039d229f3d6b 414
SolderSplashLabs 0:039d229f3d6b 415 case '2':
SolderSplashLabs 0:039d229f3d6b 416 wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
SolderSplashLabs 0:039d229f3d6b 417 break;
SolderSplashLabs 0:039d229f3d6b 418
SolderSplashLabs 0:039d229f3d6b 419 case '3':
SolderSplashLabs 0:039d229f3d6b 420 if ( AP_SECURITY == NONE )
SolderSplashLabs 0:039d229f3d6b 421 {
SolderSplashLabs 0:039d229f3d6b 422 connect_to_ssid((uint8_t *)SSID);
SolderSplashLabs 0:039d229f3d6b 423 }
SolderSplashLabs 0:039d229f3d6b 424 else
SolderSplashLabs 0:039d229f3d6b 425 {
SolderSplashLabs 0:039d229f3d6b 426 connect_to_ssid(SSID,AP_KEY,AP_SECURITY);
SolderSplashLabs 0:039d229f3d6b 427 }
SolderSplashLabs 0:039d229f3d6b 428 break;
SolderSplashLabs 0:039d229f3d6b 429
SolderSplashLabs 0:039d229f3d6b 430 case '4' :
SolderSplashLabs 0:039d229f3d6b 431 wifi.disconnect();
SolderSplashLabs 0:039d229f3d6b 432 break;
SolderSplashLabs 0:039d229f3d6b 433
SolderSplashLabs 0:039d229f3d6b 434 case '5' :
SolderSplashLabs 0:039d229f3d6b 435 print_cc3000_info();
SolderSplashLabs 0:039d229f3d6b 436 break;
SolderSplashLabs 0:039d229f3d6b 437
SolderSplashLabs 0:039d229f3d6b 438 case 'x':
SolderSplashLabs 0:039d229f3d6b 439 currentMenu = MENU_TOP;
SolderSplashLabs 0:039d229f3d6b 440 break;
SolderSplashLabs 0:039d229f3d6b 441 }
SolderSplashLabs 0:039d229f3d6b 442 }
SolderSplashLabs 0:039d229f3d6b 443
SolderSplashLabs 0:039d229f3d6b 444 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 445 /*!
SolderSplashLabs 0:039d229f3d6b 446 @brief
SolderSplashLabs 0:039d229f3d6b 447 */
SolderSplashLabs 0:039d229f3d6b 448 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 449 void Menu_UdpControl ( void )
SolderSplashLabs 0:039d229f3d6b 450 {
SolderSplashLabs 0:039d229f3d6b 451 Menu_PrintHeader();
SolderSplashLabs 0:039d229f3d6b 452
SolderSplashLabs 0:039d229f3d6b 453 printf(" 1 - UDP Client, Connect to %s:%d\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_UDP);
SolderSplashLabs 0:039d229f3d6b 454 printf(" 2 - UDP Server \r\n");
SolderSplashLabs 0:039d229f3d6b 455 printf(" 3 - NTP Client \r\n");
SolderSplashLabs 0:039d229f3d6b 456 printf(" x - Exit to top menu \r\n");
SolderSplashLabs 0:039d229f3d6b 457
SolderSplashLabs 0:039d229f3d6b 458 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 459 printf("Enter command character : ");
SolderSplashLabs 0:039d229f3d6b 460
SolderSplashLabs 0:039d229f3d6b 461 switch(WaitForSerialCommand())
SolderSplashLabs 0:039d229f3d6b 462 {
SolderSplashLabs 0:039d229f3d6b 463 case '1':
SolderSplashLabs 0:039d229f3d6b 464 UdpClientTest();
SolderSplashLabs 0:039d229f3d6b 465 break;
SolderSplashLabs 0:039d229f3d6b 466 case '2':
SolderSplashLabs 0:039d229f3d6b 467 UdpServerTest();
SolderSplashLabs 0:039d229f3d6b 468 break;
SolderSplashLabs 0:039d229f3d6b 469 case '3':
SolderSplashLabs 0:039d229f3d6b 470 NtpTest();
SolderSplashLabs 0:039d229f3d6b 471 break;
SolderSplashLabs 0:039d229f3d6b 472 case 'x':
SolderSplashLabs 0:039d229f3d6b 473 currentMenu = MENU_TOP;
SolderSplashLabs 0:039d229f3d6b 474 break;
SolderSplashLabs 0:039d229f3d6b 475 }
SolderSplashLabs 0:039d229f3d6b 476 }
SolderSplashLabs 0:039d229f3d6b 477
SolderSplashLabs 0:039d229f3d6b 478 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 479 /*!
SolderSplashLabs 0:039d229f3d6b 480 @brief
SolderSplashLabs 0:039d229f3d6b 481 */
SolderSplashLabs 0:039d229f3d6b 482 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 483 void Menu_TcpControl ( void )
SolderSplashLabs 0:039d229f3d6b 484 {
SolderSplashLabs 0:039d229f3d6b 485 Menu_PrintHeader();
SolderSplashLabs 0:039d229f3d6b 486
SolderSplashLabs 0:039d229f3d6b 487 printf(" 1 - TCP Client, Connect to %s:%d\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP);
SolderSplashLabs 0:039d229f3d6b 488 printf(" 2 - TCP Server, listen on port\r\n", ECHO_SERVER_PORT_TCP);
SolderSplashLabs 0:039d229f3d6b 489 printf(" 3 - Web Socket Write \r\n");
SolderSplashLabs 0:039d229f3d6b 490 printf(" 4 - Web Socket Read \r\n");
SolderSplashLabs 0:039d229f3d6b 491 printf(" x - Exit to top menu ");
SolderSplashLabs 0:039d229f3d6b 492 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 493 printf("Enter command character : ");
SolderSplashLabs 0:039d229f3d6b 494
SolderSplashLabs 0:039d229f3d6b 495 switch(WaitForSerialCommand())
SolderSplashLabs 0:039d229f3d6b 496 {
SolderSplashLabs 0:039d229f3d6b 497 case '1':
SolderSplashLabs 0:039d229f3d6b 498 TcpClientTest();
SolderSplashLabs 0:039d229f3d6b 499 break;
SolderSplashLabs 0:039d229f3d6b 500 case '2':
SolderSplashLabs 0:039d229f3d6b 501 TcpServerTest();
SolderSplashLabs 0:039d229f3d6b 502 break;
SolderSplashLabs 0:039d229f3d6b 503 case '3':
SolderSplashLabs 0:039d229f3d6b 504 WebSocketTest();
SolderSplashLabs 0:039d229f3d6b 505 break;
SolderSplashLabs 0:039d229f3d6b 506 case 'x':
SolderSplashLabs 0:039d229f3d6b 507 currentMenu = MENU_TOP;
SolderSplashLabs 0:039d229f3d6b 508 break;
SolderSplashLabs 0:039d229f3d6b 509 }
SolderSplashLabs 0:039d229f3d6b 510 }
SolderSplashLabs 0:039d229f3d6b 511
SolderSplashLabs 0:039d229f3d6b 512
SolderSplashLabs 0:039d229f3d6b 513 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 514 /*!
SolderSplashLabs 0:039d229f3d6b 515 @brief Display a menu to the user
SolderSplashLabs 0:039d229f3d6b 516 */
SolderSplashLabs 0:039d229f3d6b 517 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 518 void Menu_Top ( void )
SolderSplashLabs 0:039d229f3d6b 519 {
SolderSplashLabs 0:039d229f3d6b 520 Menu_PrintHeader();
SolderSplashLabs 0:039d229f3d6b 521
SolderSplashLabs 0:039d229f3d6b 522 printf(" 1 - Connection control menu \r\n" );
SolderSplashLabs 0:039d229f3d6b 523 printf(" 2 - TCP test menu \r\n" );
SolderSplashLabs 0:039d229f3d6b 524 printf(" 3 - UDP test menu \r\n" );
SolderSplashLabs 0:039d229f3d6b 525 printf(" 4 - Connection status \r\n");
SolderSplashLabs 0:039d229f3d6b 526 printf(" 5 - Ping - %s \r\n", HostToPing);
SolderSplashLabs 0:039d229f3d6b 527
SolderSplashLabs 0:039d229f3d6b 528 printf("\r\n");
SolderSplashLabs 0:039d229f3d6b 529 printf("Enter command character : ");
SolderSplashLabs 0:039d229f3d6b 530
SolderSplashLabs 0:039d229f3d6b 531 switch(WaitForSerialCommand())
SolderSplashLabs 0:039d229f3d6b 532 {
SolderSplashLabs 0:039d229f3d6b 533 case '1':
SolderSplashLabs 0:039d229f3d6b 534 currentMenu = MENU_CONNECTION;
SolderSplashLabs 0:039d229f3d6b 535 break;
SolderSplashLabs 0:039d229f3d6b 536 case '2':
SolderSplashLabs 0:039d229f3d6b 537 currentMenu = MENU_TCP;
SolderSplashLabs 0:039d229f3d6b 538 break;
SolderSplashLabs 0:039d229f3d6b 539 case '3':
SolderSplashLabs 0:039d229f3d6b 540 currentMenu = MENU_UDP;
SolderSplashLabs 0:039d229f3d6b 541 break;
SolderSplashLabs 0:039d229f3d6b 542 case '4':
SolderSplashLabs 0:039d229f3d6b 543 print_cc3000_info();
SolderSplashLabs 0:039d229f3d6b 544 break;
SolderSplashLabs 0:039d229f3d6b 545 case '5':
SolderSplashLabs 0:039d229f3d6b 546 PingTest();
SolderSplashLabs 0:039d229f3d6b 547 break;
SolderSplashLabs 0:039d229f3d6b 548 case 'x':
SolderSplashLabs 0:039d229f3d6b 549 currentMenu = MENU_TOP;
SolderSplashLabs 0:039d229f3d6b 550 break;
SolderSplashLabs 0:039d229f3d6b 551 }
SolderSplashLabs 0:039d229f3d6b 552 }
SolderSplashLabs 0:039d229f3d6b 553
SolderSplashLabs 0:039d229f3d6b 554 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 555 /*!
SolderSplashLabs 0:039d229f3d6b 556 @brief Pick which menu to display
SolderSplashLabs 0:039d229f3d6b 557 */
SolderSplashLabs 0:039d229f3d6b 558 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 559 void MenuSwitch ( void )
SolderSplashLabs 0:039d229f3d6b 560 {
SolderSplashLabs 0:039d229f3d6b 561 bool connected = false;
SolderSplashLabs 0:039d229f3d6b 562
SolderSplashLabs 0:039d229f3d6b 563 if ( wifi.is_dhcp_configured() )
SolderSplashLabs 0:039d229f3d6b 564 {
SolderSplashLabs 0:039d229f3d6b 565 connected = true;
SolderSplashLabs 0:039d229f3d6b 566 }
SolderSplashLabs 0:039d229f3d6b 567
SolderSplashLabs 0:039d229f3d6b 568 switch ( currentMenu )
SolderSplashLabs 0:039d229f3d6b 569 {
SolderSplashLabs 0:039d229f3d6b 570 case MENU_TOP :
SolderSplashLabs 0:039d229f3d6b 571 if (connected) Menu_Top();
SolderSplashLabs 0:039d229f3d6b 572 break;
SolderSplashLabs 0:039d229f3d6b 573
SolderSplashLabs 0:039d229f3d6b 574 case MENU_CONNECTION :
SolderSplashLabs 0:039d229f3d6b 575 Menu_ConnectionControl();
SolderSplashLabs 0:039d229f3d6b 576 break;
SolderSplashLabs 0:039d229f3d6b 577
SolderSplashLabs 0:039d229f3d6b 578 case MENU_TCP :
SolderSplashLabs 0:039d229f3d6b 579 if (connected) Menu_TcpControl();
SolderSplashLabs 0:039d229f3d6b 580 break;
SolderSplashLabs 0:039d229f3d6b 581
SolderSplashLabs 0:039d229f3d6b 582 case MENU_UDP :
SolderSplashLabs 0:039d229f3d6b 583 if (connected) Menu_UdpControl();
SolderSplashLabs 0:039d229f3d6b 584 break;
SolderSplashLabs 0:039d229f3d6b 585
SolderSplashLabs 0:039d229f3d6b 586 default :
SolderSplashLabs 0:039d229f3d6b 587 printf("Unknown command\r\n");
SolderSplashLabs 0:039d229f3d6b 588 break;
SolderSplashLabs 0:039d229f3d6b 589 }
SolderSplashLabs 0:039d229f3d6b 590 }
SolderSplashLabs 0:039d229f3d6b 591
SolderSplashLabs 0:039d229f3d6b 592 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 593 /*!
SolderSplashLabs 0:039d229f3d6b 594 @brief main loop
SolderSplashLabs 0:039d229f3d6b 595 */
SolderSplashLabs 0:039d229f3d6b 596 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:039d229f3d6b 597 int main( void )
SolderSplashLabs 0:039d229f3d6b 598 {
SolderSplashLabs 0:039d229f3d6b 599 // Initalise the WiFi Module
SolderSplashLabs 0:039d229f3d6b 600 init();
SolderSplashLabs 0:039d229f3d6b 601 pc.baud(SERIAL_BAUD_RATE);
SolderSplashLabs 0:039d229f3d6b 602
SolderSplashLabs 0:039d229f3d6b 603 wifi.start(0);
SolderSplashLabs 0:039d229f3d6b 604
SolderSplashLabs 0:039d229f3d6b 605 while (1)
SolderSplashLabs 0:039d229f3d6b 606 {
SolderSplashLabs 0:039d229f3d6b 607 MenuSwitch();
SolderSplashLabs 0:039d229f3d6b 608 }
SolderSplashLabs 0:039d229f3d6b 609 }