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:
Sat Oct 12 22:10:17 2013 +0000
Revision:
5:506f580e7ead
Parent:
4:4e5e094a81c0
Tweaks for robustness

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