Small demo to purely test UDP, depends on the module already being configured to auto connect to an access point

Dependencies:   USBDevice cc3000_hostdriver_mbedsocket mbed

Fork of WifiDipCortex-UDPDemo by Carl - SolderSplash Labs

Wifi-DipCortex - Test application that shows you how to listen for UDP message on one port while sending messages on another

- Listens on UDP_LISTEN_PORT, upon data being recvied it can be found in UDP_RecvBuffer - Transmits UDP_TX_Buffer on UDP_TARGET_PORT to UDP_TARGET_IP

Committer:
SolderSplashLabs
Date:
Thu Aug 07 00:40:04 2014 +0000
Revision:
3:3fd4a328c7cf
Parent:
2:6813713a64e1
Added Smartconfig; Added disconnection detection; Re-connection after disconnection, not functioning; PC app here to exercise the UDP connection : https://github.com/SolderSplashLabs/PC-UDP-Example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 1:5fa4efb214e7 1 /* ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 2 SolderSplash Labs - Wifi-DipCortex
SolderSplashLabs 1:5fa4efb214e7 3 Test application that shows you how to listen for UDP message on one port while sending messages on another
SolderSplashLabs 1:5fa4efb214e7 4
SolderSplashLabs 1:5fa4efb214e7 5 - Listens on UDP_LISTEN_PORT, upon data being recvied it can be found in UDP_RecvBuffer
SolderSplashLabs 1:5fa4efb214e7 6 - Transmits UDP_TX_Buffer on UDP_TARGET_PORT to UDP_TARGET_IP
SolderSplashLabs 1:5fa4efb214e7 7
SolderSplashLabs 1:5fa4efb214e7 8 Note : V1.28 firmware has an issue sending UDP data to 224.0.0.251
SolderSplashLabs 1:5fa4efb214e7 9 http://forum.soldersplash.co.uk/viewtopic.php?f=15&t=97
SolderSplashLabs 1:5fa4efb214e7 10 ----------------------------------------------------------------------------------------------------------- */
SolderSplashLabs 1:5fa4efb214e7 11
SolderSplashLabs 0:ff40ad3448c5 12 #include "mbed.h"
SolderSplashLabs 0:ff40ad3448c5 13 #include "cc3000.h"
SolderSplashLabs 0:ff40ad3448c5 14 #include "wifi.h"
SolderSplashLabs 0:ff40ad3448c5 15 #include "UDPSocket.h"
SolderSplashLabs 0:ff40ad3448c5 16 #include "USBSerial.h"
SolderSplashLabs 0:ff40ad3448c5 17
SolderSplashLabs 0:ff40ad3448c5 18 using namespace mbed_cc3000;
SolderSplashLabs 0:ff40ad3448c5 19
SolderSplashLabs 1:5fa4efb214e7 20 #define SERIAL_BAUD_RATE 115200
SolderSplashLabs 1:5fa4efb214e7 21 #define SOCKOPT_RECV_NONBLOCK 0
SolderSplashLabs 0:ff40ad3448c5 22
SolderSplashLabs 0:ff40ad3448c5 23 cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37));
SolderSplashLabs 0:ff40ad3448c5 24 Serial uart(p19, p20);
SolderSplashLabs 0:ff40ad3448c5 25
SolderSplashLabs 3:3fd4a328c7cf 26 DigitalIn Button(P0_1);
SolderSplashLabs 3:3fd4a328c7cf 27
SolderSplashLabs 0:ff40ad3448c5 28 // USB CDC serial port
SolderSplashLabs 0:ff40ad3448c5 29 USBSerial pc;
SolderSplashLabs 0:ff40ad3448c5 30
SolderSplashLabs 2:6813713a64e1 31 char LOCALHOST[] = "localhost";
SolderSplashLabs 1:5fa4efb214e7 32 const char UDP_TX_Buffer[] = {0,0,0,0,0,1,0,0,0,0,0,0,6,0x61,0x61,0x61,0x61,0x61,0x61,5,0x6c,0x6f,0x63,0x61,0x6c,0,0,1,0,1};
SolderSplashLabs 1:5fa4efb214e7 33
SolderSplashLabs 1:5fa4efb214e7 34 // Multicast address - this causes issues with firmware version 1.28
SolderSplashLabs 2:6813713a64e1 35 const char* UDP_TARGET_IP = "224.0.0.251";
SolderSplashLabs 1:5fa4efb214e7 36
SolderSplashLabs 1:5fa4efb214e7 37 // This is the broadcast address for the subnet 192.168.0.x
SolderSplashLabs 2:6813713a64e1 38 //const char* UDP_TARGET_IP = "192.168.0.255";
SolderSplashLabs 1:5fa4efb214e7 39
SolderSplashLabs 3:3fd4a328c7cf 40 const int UDP_TARGET_PORT = 1900;
SolderSplashLabs 1:5fa4efb214e7 41 UDPSocket UDP_TransmitSocket;
SolderSplashLabs 1:5fa4efb214e7 42
SolderSplashLabs 3:3fd4a328c7cf 43 const int UDP_LISTEN_PORT = 1900;
SolderSplashLabs 1:5fa4efb214e7 44 UDPSocket UDP_RecvSocket;
SolderSplashLabs 1:5fa4efb214e7 45
SolderSplashLabs 3:3fd4a328c7cf 46 #define UDP_RECV_BUF_LEN 1400
SolderSplashLabs 1:5fa4efb214e7 47 uint8_t UDP_RecvBuffer[ UDP_RECV_BUF_LEN ];
SolderSplashLabs 1:5fa4efb214e7 48
SolderSplashLabs 3:3fd4a328c7cf 49
SolderSplashLabs 3:3fd4a328c7cf 50 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 3:3fd4a328c7cf 51 /*!
SolderSplashLabs 3:3fd4a328c7cf 52 @brief WaitForConnection
SolderSplashLabs 3:3fd4a328c7cf 53 */
SolderSplashLabs 3:3fd4a328c7cf 54 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 3:3fd4a328c7cf 55 void SmartConfig ( void )
SolderSplashLabs 3:3fd4a328c7cf 56 {
SolderSplashLabs 3:3fd4a328c7cf 57 pc.printf("\r\nStarting Smart config, waiting for message from smartphone app ....\r\n");
SolderSplashLabs 3:3fd4a328c7cf 58
SolderSplashLabs 3:3fd4a328c7cf 59 // We dont want to auto reconnect to an access point
SolderSplashLabs 3:3fd4a328c7cf 60 wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
SolderSplashLabs 3:3fd4a328c7cf 61
SolderSplashLabs 3:3fd4a328c7cf 62 // start smart config will disconnect, set the prefix
SolderSplashLabs 3:3fd4a328c7cf 63 // wait for a message via a SmartConfig app, store it to the profile list
SolderSplashLabs 3:3fd4a328c7cf 64 // finally it will reenable auto connection, triggering the module to connect to the new access point
SolderSplashLabs 3:3fd4a328c7cf 65 wifi.start_smart_config(0);
SolderSplashLabs 3:3fd4a328c7cf 66
SolderSplashLabs 3:3fd4a328c7cf 67 pc.printf("\r\nSmartConfig complete\r\n");
SolderSplashLabs 3:3fd4a328c7cf 68
SolderSplashLabs 3:3fd4a328c7cf 69 while (! Button )
SolderSplashLabs 3:3fd4a328c7cf 70 {
SolderSplashLabs 3:3fd4a328c7cf 71 // Wait for release
SolderSplashLabs 3:3fd4a328c7cf 72 pc.printf("Release the button\r\n");
SolderSplashLabs 3:3fd4a328c7cf 73 wait(1);
SolderSplashLabs 3:3fd4a328c7cf 74 }
SolderSplashLabs 3:3fd4a328c7cf 75
SolderSplashLabs 3:3fd4a328c7cf 76 // NOTE : normal once connected using SmartConfig you would enable the mdns server to tell the app your connected
SolderSplashLabs 3:3fd4a328c7cf 77 // but that would interfere with this example using the mdns port
SolderSplashLabs 3:3fd4a328c7cf 78 }
SolderSplashLabs 3:3fd4a328c7cf 79
SolderSplashLabs 0:ff40ad3448c5 80 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 81 /*!
SolderSplashLabs 0:ff40ad3448c5 82 @brief WaitForConnection
SolderSplashLabs 0:ff40ad3448c5 83 */
SolderSplashLabs 0:ff40ad3448c5 84 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 85 void WaitForConnection ( void )
SolderSplashLabs 0:ff40ad3448c5 86 {
SolderSplashLabs 3:3fd4a328c7cf 87 uint8_t buffer[8];
SolderSplashLabs 0:ff40ad3448c5 88 tNetappIpconfigRetArgs ipinfo;
SolderSplashLabs 0:ff40ad3448c5 89
SolderSplashLabs 2:6813713a64e1 90 while (! ( wifi.is_connected() ) )
SolderSplashLabs 0:ff40ad3448c5 91 {
SolderSplashLabs 0:ff40ad3448c5 92 // Still not connected
SolderSplashLabs 3:3fd4a328c7cf 93 pc.printf("No Connection - hold button for smartconfig\r\n");
SolderSplashLabs 0:ff40ad3448c5 94 wait(1);
SolderSplashLabs 3:3fd4a328c7cf 95
SolderSplashLabs 3:3fd4a328c7cf 96 if (! Button )
SolderSplashLabs 3:3fd4a328c7cf 97 {
SolderSplashLabs 3:3fd4a328c7cf 98 // Button has been pressed
SolderSplashLabs 3:3fd4a328c7cf 99 SmartConfig();
SolderSplashLabs 3:3fd4a328c7cf 100 }
SolderSplashLabs 0:ff40ad3448c5 101 }
SolderSplashLabs 0:ff40ad3448c5 102
SolderSplashLabs 0:ff40ad3448c5 103 if (( wifi.is_enabled() ) && ( wifi.is_dhcp_configured() ))
SolderSplashLabs 0:ff40ad3448c5 104 {
SolderSplashLabs 0:ff40ad3448c5 105 wifi.get_ip_config(&ipinfo);
SolderSplashLabs 0:ff40ad3448c5 106 }
SolderSplashLabs 0:ff40ad3448c5 107
SolderSplashLabs 0:ff40ad3448c5 108 pc.printf("Connected to (%s) %s \r\n", ipinfo.uaSSID, wifi.getIPAddress());
SolderSplashLabs 3:3fd4a328c7cf 109
SolderSplashLabs 3:3fd4a328c7cf 110 wifi.get_mac_address(buffer);
SolderSplashLabs 3:3fd4a328c7cf 111 pc.printf(" MAC address : %02x:%02x:%02x:%02x:%02x:%02x\r\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5]);
SolderSplashLabs 3:3fd4a328c7cf 112
SolderSplashLabs 3:3fd4a328c7cf 113 if (! wifi._nvmem.read_sp_version( (unsigned char*)&buffer[0] ) )
SolderSplashLabs 3:3fd4a328c7cf 114 {
SolderSplashLabs 3:3fd4a328c7cf 115 pc.printf(" CC3000 Firmware Version : %u.%u \r\n", buffer[0], buffer[1]);
SolderSplashLabs 3:3fd4a328c7cf 116 }
SolderSplashLabs 0:ff40ad3448c5 117
SolderSplashLabs 0:ff40ad3448c5 118 }
SolderSplashLabs 0:ff40ad3448c5 119
SolderSplashLabs 0:ff40ad3448c5 120 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 121 /*!
SolderSplashLabs 0:ff40ad3448c5 122 @brief WaitForUser
SolderSplashLabs 0:ff40ad3448c5 123 */
SolderSplashLabs 0:ff40ad3448c5 124 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 125 void WaitForUser ( void )
SolderSplashLabs 0:ff40ad3448c5 126 {
SolderSplashLabs 0:ff40ad3448c5 127 char charIn;
SolderSplashLabs 0:ff40ad3448c5 128
SolderSplashLabs 0:ff40ad3448c5 129 pc.printf("Press Enter to Continue\r\n");
SolderSplashLabs 0:ff40ad3448c5 130
SolderSplashLabs 0:ff40ad3448c5 131 while (1)
SolderSplashLabs 0:ff40ad3448c5 132 {
SolderSplashLabs 0:ff40ad3448c5 133 charIn = pc.getc();
SolderSplashLabs 0:ff40ad3448c5 134
SolderSplashLabs 0:ff40ad3448c5 135 pc.printf("%c", charIn);
SolderSplashLabs 0:ff40ad3448c5 136 if ((charIn == '\n') || (charIn == '\r'))
SolderSplashLabs 0:ff40ad3448c5 137 {
SolderSplashLabs 0:ff40ad3448c5 138 break;
SolderSplashLabs 0:ff40ad3448c5 139 }
SolderSplashLabs 0:ff40ad3448c5 140 }
SolderSplashLabs 0:ff40ad3448c5 141 }
SolderSplashLabs 0:ff40ad3448c5 142
SolderSplashLabs 1:5fa4efb214e7 143 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 144 /*!
SolderSplashLabs 1:5fa4efb214e7 145 @brief UdpTx_Init
SolderSplashLabs 1:5fa4efb214e7 146 */
SolderSplashLabs 1:5fa4efb214e7 147 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 148 void UdpTx_Init ( void )
SolderSplashLabs 1:5fa4efb214e7 149 {
SolderSplashLabs 1:5fa4efb214e7 150 // Creating the socket once and then re-using it is quicker than creating it everytime
SolderSplashLabs 1:5fa4efb214e7 151 // but it does tie up a 1 of the 4 sockets
SolderSplashLabs 1:5fa4efb214e7 152 UDP_TransmitSocket.init();
SolderSplashLabs 1:5fa4efb214e7 153 }
SolderSplashLabs 0:ff40ad3448c5 154
SolderSplashLabs 0:ff40ad3448c5 155 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 156 /*!
SolderSplashLabs 0:ff40ad3448c5 157 @brief UdpTx
SolderSplashLabs 0:ff40ad3448c5 158 */
SolderSplashLabs 0:ff40ad3448c5 159 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 160 void UdpTx ( void )
SolderSplashLabs 0:ff40ad3448c5 161 {
SolderSplashLabs 0:ff40ad3448c5 162 Endpoint target;
SolderSplashLabs 1:5fa4efb214e7 163 int returnVal;
SolderSplashLabs 1:5fa4efb214e7 164
SolderSplashLabs 1:5fa4efb214e7 165
SolderSplashLabs 0:ff40ad3448c5 166 target.set_address(UDP_TARGET_IP, UDP_TARGET_PORT);
SolderSplashLabs 0:ff40ad3448c5 167
SolderSplashLabs 3:3fd4a328c7cf 168 pc.printf("Sending UDP Message to port (%i)..\r\n", UDP_TARGET_PORT);
SolderSplashLabs 1:5fa4efb214e7 169
SolderSplashLabs 1:5fa4efb214e7 170 returnVal = UDP_TransmitSocket.sendTo(target, (char *)UDP_TX_Buffer, sizeof(UDP_TX_Buffer));
SolderSplashLabs 1:5fa4efb214e7 171
SolderSplashLabs 1:5fa4efb214e7 172 if ( returnVal < 0 )
SolderSplashLabs 1:5fa4efb214e7 173 {
SolderSplashLabs 1:5fa4efb214e7 174 pc.printf("UdpTx : failed to send UDP message ReturnVal : %i\r\n", returnVal);
SolderSplashLabs 1:5fa4efb214e7 175 }
SolderSplashLabs 1:5fa4efb214e7 176 else
SolderSplashLabs 1:5fa4efb214e7 177 {
SolderSplashLabs 1:5fa4efb214e7 178 pc.printf("UDP Message Sent (%i)..\r\n", returnVal);
SolderSplashLabs 1:5fa4efb214e7 179 }
SolderSplashLabs 1:5fa4efb214e7 180 }
SolderSplashLabs 1:5fa4efb214e7 181
SolderSplashLabs 1:5fa4efb214e7 182 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 183 /*!
SolderSplashLabs 1:5fa4efb214e7 184 @brief UdpRxTx_Init - Set up a non blocking UDP port for incoming messages
SolderSplashLabs 1:5fa4efb214e7 185 */
SolderSplashLabs 1:5fa4efb214e7 186 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 187 void UdpRx_Init ( void )
SolderSplashLabs 1:5fa4efb214e7 188 {
SolderSplashLabs 1:5fa4efb214e7 189 long optvalue_block = 0;
SolderSplashLabs 1:5fa4efb214e7 190
SolderSplashLabs 1:5fa4efb214e7 191 // Note : This seems wrong but .. we are using a socket option that stops the cc3000 blocking
SolderSplashLabs 1:5fa4efb214e7 192 // this lets us call recvfrom and not wait for a message, if it has any data it returns with it, if theres no data it returns immediately
SolderSplashLabs 1:5fa4efb214e7 193 UDP_RecvSocket.set_blocking(true, 0);
SolderSplashLabs 1:5fa4efb214e7 194
SolderSplashLabs 1:5fa4efb214e7 195 if ( 0 == UDP_RecvSocket.bind(UDP_LISTEN_PORT) )
SolderSplashLabs 1:5fa4efb214e7 196 {
SolderSplashLabs 1:5fa4efb214e7 197 // Socket bound to the port
SolderSplashLabs 1:5fa4efb214e7 198 // Configure the module to not block when checking for UDP data
SolderSplashLabs 1:5fa4efb214e7 199 UDP_RecvSocket.set_option(SOL_SOCKET, SOCKOPT_RECV_NONBLOCK, &optvalue_block, 1);
SolderSplashLabs 1:5fa4efb214e7 200 pc.printf("UDP Socket open and listening\r\n");
SolderSplashLabs 1:5fa4efb214e7 201 }
SolderSplashLabs 1:5fa4efb214e7 202 else
SolderSplashLabs 1:5fa4efb214e7 203 {
SolderSplashLabs 1:5fa4efb214e7 204 pc.printf("Failed to bind to UDP port\r\n");
SolderSplashLabs 1:5fa4efb214e7 205 }
SolderSplashLabs 1:5fa4efb214e7 206 }
SolderSplashLabs 1:5fa4efb214e7 207
SolderSplashLabs 1:5fa4efb214e7 208 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 209 /*!
SolderSplashLabs 1:5fa4efb214e7 210 @brief UdpRx
SolderSplashLabs 1:5fa4efb214e7 211 */
SolderSplashLabs 1:5fa4efb214e7 212 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 1:5fa4efb214e7 213 void UdpRx ( void )
SolderSplashLabs 1:5fa4efb214e7 214 {
SolderSplashLabs 1:5fa4efb214e7 215 Endpoint client;
SolderSplashLabs 1:5fa4efb214e7 216 int returnVal = 0;
SolderSplashLabs 3:3fd4a328c7cf 217
SolderSplashLabs 3:3fd4a328c7cf 218 do
SolderSplashLabs 1:5fa4efb214e7 219 {
SolderSplashLabs 3:3fd4a328c7cf 220 returnVal = UDP_RecvSocket.receiveFrom(client, (char *)UDP_RecvBuffer, UDP_RECV_BUF_LEN);
SolderSplashLabs 3:3fd4a328c7cf 221
SolderSplashLabs 3:3fd4a328c7cf 222 if ( returnVal > 0 )
SolderSplashLabs 3:3fd4a328c7cf 223 {
SolderSplashLabs 3:3fd4a328c7cf 224 pc.printf("UDP Message Recv'd %i bytes from : %s \r\n", returnVal, client.get_address());
SolderSplashLabs 1:5fa4efb214e7 225
SolderSplashLabs 3:3fd4a328c7cf 226 // TODO : Process your UDP message here
SolderSplashLabs 3:3fd4a328c7cf 227 // NOTE : a message larger than your CC3000 SPI buffer and the UDP_RECV_BUF_LEN will be split up into multiple receiveFrom calls
SolderSplashLabs 3:3fd4a328c7cf 228 // NOTE : multiple messages on a UDP port seem to get merged.
SolderSplashLabs 3:3fd4a328c7cf 229 }
SolderSplashLabs 3:3fd4a328c7cf 230
SolderSplashLabs 3:3fd4a328c7cf 231 } while ( returnVal > 0 );
SolderSplashLabs 0:ff40ad3448c5 232 }
SolderSplashLabs 0:ff40ad3448c5 233
SolderSplashLabs 0:ff40ad3448c5 234 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 235 /*!
SolderSplashLabs 0:ff40ad3448c5 236 @brief Init
SolderSplashLabs 0:ff40ad3448c5 237 */
SolderSplashLabs 0:ff40ad3448c5 238 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 239 void init()
SolderSplashLabs 0:ff40ad3448c5 240 {
SolderSplashLabs 0:ff40ad3448c5 241 NVIC_SetPriority(SSP1_IRQn, 0x0);
SolderSplashLabs 0:ff40ad3448c5 242 NVIC_SetPriority(PIN_INT0_IRQn, 0x1);
SolderSplashLabs 0:ff40ad3448c5 243
SolderSplashLabs 0:ff40ad3448c5 244 // SysTick set to lower priority than Wi-Fi SPI bus interrupt
SolderSplashLabs 0:ff40ad3448c5 245 NVIC_SetPriority(SysTick_IRQn, 0x2);
SolderSplashLabs 0:ff40ad3448c5 246
SolderSplashLabs 0:ff40ad3448c5 247 // Enable RAM1
SolderSplashLabs 0:ff40ad3448c5 248 LPC_SYSCON->SYSAHBCLKCTRL |= (0x1 << 26);
SolderSplashLabs 0:ff40ad3448c5 249
SolderSplashLabs 0:ff40ad3448c5 250 uart.baud(SERIAL_BAUD_RATE);
SolderSplashLabs 0:ff40ad3448c5 251
SolderSplashLabs 3:3fd4a328c7cf 252 Button.mode(PullUp);
SolderSplashLabs 3:3fd4a328c7cf 253
SolderSplashLabs 0:ff40ad3448c5 254 wait(1);
SolderSplashLabs 0:ff40ad3448c5 255 }
SolderSplashLabs 0:ff40ad3448c5 256
SolderSplashLabs 0:ff40ad3448c5 257 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 258 /*!
SolderSplashLabs 2:6813713a64e1 259 @brief SetupSockets - Sets up the UDP sockets and resolves localhost to work around internal CC3000 issues
SolderSplashLabs 2:6813713a64e1 260 */
SolderSplashLabs 2:6813713a64e1 261 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 2:6813713a64e1 262 void SetupSockets ( void )
SolderSplashLabs 2:6813713a64e1 263 {
SolderSplashLabs 2:6813713a64e1 264 uint32_t ip;
SolderSplashLabs 2:6813713a64e1 265
SolderSplashLabs 2:6813713a64e1 266 // Connected, v1.28 firmware workaround, ask for localhost to be resolved
SolderSplashLabs 2:6813713a64e1 267 wifi._socket.gethostbyname((uint8_t *)LOCALHOST,strlen((const char *)LOCALHOST), &ip);
SolderSplashLabs 2:6813713a64e1 268
SolderSplashLabs 2:6813713a64e1 269 // Ignore the result, ask again
SolderSplashLabs 2:6813713a64e1 270 wifi._socket.gethostbyname((uint8_t *)LOCALHOST,strlen((const char *)LOCALHOST), &ip);
SolderSplashLabs 2:6813713a64e1 271
SolderSplashLabs 2:6813713a64e1 272 // Ignore the result
SolderSplashLabs 2:6813713a64e1 273
SolderSplashLabs 2:6813713a64e1 274 // set up a lisening socket
SolderSplashLabs 2:6813713a64e1 275 UdpRx_Init();
SolderSplashLabs 2:6813713a64e1 276 UdpTx_Init();
SolderSplashLabs 2:6813713a64e1 277
SolderSplashLabs 2:6813713a64e1 278 }
SolderSplashLabs 2:6813713a64e1 279
SolderSplashLabs 2:6813713a64e1 280 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 2:6813713a64e1 281 /*!
SolderSplashLabs 0:ff40ad3448c5 282 @brief main loop
SolderSplashLabs 0:ff40ad3448c5 283 */
SolderSplashLabs 0:ff40ad3448c5 284 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 0:ff40ad3448c5 285 int main( void )
SolderSplashLabs 0:ff40ad3448c5 286 {
SolderSplashLabs 1:5fa4efb214e7 287 int tickCnt = 0;
SolderSplashLabs 1:5fa4efb214e7 288
SolderSplashLabs 0:ff40ad3448c5 289 // Initalise the WiFi Module
SolderSplashLabs 0:ff40ad3448c5 290 init();
SolderSplashLabs 0:ff40ad3448c5 291
SolderSplashLabs 0:ff40ad3448c5 292 WaitForUser();
SolderSplashLabs 0:ff40ad3448c5 293
SolderSplashLabs 1:5fa4efb214e7 294 pc.printf("Starting CC3000 module\r\n");
SolderSplashLabs 1:5fa4efb214e7 295
SolderSplashLabs 0:ff40ad3448c5 296 wifi.start(0);
SolderSplashLabs 0:ff40ad3448c5 297
SolderSplashLabs 0:ff40ad3448c5 298 WaitForConnection();
SolderSplashLabs 0:ff40ad3448c5 299
SolderSplashLabs 2:6813713a64e1 300 SetupSockets();
SolderSplashLabs 1:5fa4efb214e7 301
SolderSplashLabs 0:ff40ad3448c5 302 while (1)
SolderSplashLabs 1:5fa4efb214e7 303 {
SolderSplashLabs 2:6813713a64e1 304
SolderSplashLabs 2:6813713a64e1 305 if ( wifi.is_connected() )
SolderSplashLabs 2:6813713a64e1 306 {
SolderSplashLabs 2:6813713a64e1 307 // Check for UDP coms, non blocking
SolderSplashLabs 2:6813713a64e1 308 UdpRx();
SolderSplashLabs 2:6813713a64e1 309
SolderSplashLabs 2:6813713a64e1 310 if ( tickCnt > 100 )
SolderSplashLabs 2:6813713a64e1 311 {
SolderSplashLabs 2:6813713a64e1 312 tickCnt = 0;
SolderSplashLabs 2:6813713a64e1 313 // And then send a UDP message
SolderSplashLabs 2:6813713a64e1 314 UdpTx();
SolderSplashLabs 2:6813713a64e1 315 }
SolderSplashLabs 2:6813713a64e1 316
SolderSplashLabs 2:6813713a64e1 317 tickCnt ++;
SolderSplashLabs 2:6813713a64e1 318 }
SolderSplashLabs 2:6813713a64e1 319 else
SolderSplashLabs 2:6813713a64e1 320 {
SolderSplashLabs 2:6813713a64e1 321 // We have lost connection, tell the objects to close the sockets
SolderSplashLabs 2:6813713a64e1 322 // this clears down the socket handles
SolderSplashLabs 2:6813713a64e1 323 UDP_RecvSocket.close();
SolderSplashLabs 2:6813713a64e1 324 UDP_TransmitSocket.close();
SolderSplashLabs 2:6813713a64e1 325
SolderSplashLabs 2:6813713a64e1 326 wifi.restart(0);
SolderSplashLabs 2:6813713a64e1 327
SolderSplashLabs 3:3fd4a328c7cf 328 wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
SolderSplashLabs 3:3fd4a328c7cf 329
SolderSplashLabs 2:6813713a64e1 330 // Block and wait for re-connection
SolderSplashLabs 2:6813713a64e1 331 WaitForConnection();
SolderSplashLabs 2:6813713a64e1 332
SolderSplashLabs 2:6813713a64e1 333 // set up a lisening and transmit socket
SolderSplashLabs 2:6813713a64e1 334 SetupSockets();
SolderSplashLabs 2:6813713a64e1 335 }
SolderSplashLabs 1:5fa4efb214e7 336
SolderSplashLabs 1:5fa4efb214e7 337 // TODO : Do other things, like service sensors etc..
SolderSplashLabs 1:5fa4efb214e7 338 // For now lets simulate a task that lasts for 100ms
SolderSplashLabs 1:5fa4efb214e7 339 wait(0.1);
SolderSplashLabs 1:5fa4efb214e7 340 pc.printf(".");
SolderSplashLabs 3:3fd4a328c7cf 341
SolderSplashLabs 3:3fd4a328c7cf 342 // If the user presses the button, send a message
SolderSplashLabs 3:3fd4a328c7cf 343 if (! Button )
SolderSplashLabs 3:3fd4a328c7cf 344 {
SolderSplashLabs 3:3fd4a328c7cf 345 UdpTx();
SolderSplashLabs 3:3fd4a328c7cf 346 }
SolderSplashLabs 0:ff40ad3448c5 347 }
SolderSplashLabs 1:5fa4efb214e7 348
SolderSplashLabs 0:ff40ad3448c5 349 }