Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Committer:
dflet
Date:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
20:409ebd125b9c
Removed some debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 /*
dflet 0:50cedd586816 2 * - CC31xx/CC32xx Host Driver Implementation
dflet 0:50cedd586816 3 *
dflet 0:50cedd586816 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:50cedd586816 5 *
dflet 0:50cedd586816 6 *
dflet 0:50cedd586816 7 * Redistribution and use in source and binary forms, with or without
dflet 0:50cedd586816 8 * modification, are permitted provided that the following conditions
dflet 0:50cedd586816 9 * are met:
dflet 0:50cedd586816 10 *
dflet 0:50cedd586816 11 * Redistributions of source code must retain the above copyright
dflet 0:50cedd586816 12 * notice, this list of conditions and the following disclaimer.
dflet 0:50cedd586816 13 *
dflet 0:50cedd586816 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:50cedd586816 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:50cedd586816 16 * documentation and/or other materials provided with the
dflet 0:50cedd586816 17 * distribution.
dflet 0:50cedd586816 18 *
dflet 0:50cedd586816 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:50cedd586816 20 * its contributors may be used to endorse or promote products derived
dflet 0:50cedd586816 21 * from this software without specific prior written permission.
dflet 0:50cedd586816 22 *
dflet 0:50cedd586816 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:50cedd586816 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:50cedd586816 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:50cedd586816 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:50cedd586816 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:50cedd586816 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:50cedd586816 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:50cedd586816 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:50cedd586816 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:50cedd586816 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:50cedd586816 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:50cedd586816 34 *
dflet 0:50cedd586816 35 */
dflet 0:50cedd586816 36
dflet 0:50cedd586816 37 #include "simplelink/cc3100_simplelink.h"
dflet 0:50cedd586816 38
dflet 0:50cedd586816 39 #include "simplelink/cc3100.h"
dflet 0:50cedd586816 40 #include "simplelink/cc3100_driver.h"
dflet 0:50cedd586816 41 #include "simplelink/G_functions/fPtr_func.h"
dflet 0:50cedd586816 42 #include "simplelink/cc3100_nonos.h"
dflet 0:50cedd586816 43 #include "cli_uart.h"
dflet 0:50cedd586816 44 #include "Led_config.h"
dflet 0:50cedd586816 45
dflet 0:50cedd586816 46 #include "cc3100_trace.h"
dflet 0:50cedd586816 47 #include "myBoardInit.h"
dflet 0:50cedd586816 48
dflet 0:50cedd586816 49 using namespace mbed_cc3100;
dflet 19:3dd3e7f30f8b 50
dflet 20:409ebd125b9c 51 cc3100 _cc3100_(NC, NC, PD_12, PD_13, PD_11, SPI(PC_3, PC_2, PB_10));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck
dflet 0:50cedd586816 52
dflet 0:50cedd586816 53 #ifdef __cplusplus
dflet 0:50cedd586816 54 extern "C" {
dflet 0:50cedd586816 55 #endif
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57 unsigned char POST_token[] = "__SL_P_ULD";
dflet 0:50cedd586816 58 unsigned char GET_token[] = "__SL_G_ULD";
dflet 0:50cedd586816 59
dflet 0:50cedd586816 60
dflet 0:50cedd586816 61 #define PRINT_BUF_LEN 128
dflet 0:50cedd586816 62 extern int8_t print_buf[PRINT_BUF_LEN];
dflet 0:50cedd586816 63
dflet 0:50cedd586816 64 #define LED_STRING "LED"
dflet 0:50cedd586816 65 #define LED1_STRING "LED1_"
dflet 0:50cedd586816 66 #define LED2_STRING ",LED2_"
dflet 0:50cedd586816 67 #define LED_ON_STRING "ON"
dflet 0:50cedd586816 68 #define LED_OFF_STRING "OFF"
dflet 0:50cedd586816 69
dflet 0:50cedd586816 70 /* General Events handling*/
dflet 0:50cedd586816 71 #if defined (EXT_LIB_REGISTERED_GENERAL_EVENTS)
dflet 0:50cedd586816 72
dflet 0:50cedd586816 73 typedef _SlEventPropogationStatus_e (*general_callback) (SlDeviceEvent_t *);
dflet 0:50cedd586816 74
dflet 0:50cedd586816 75 static const general_callback general_callbacks[] =
dflet 0:50cedd586816 76 {
dflet 0:50cedd586816 77 #ifdef SlExtLib1GeneralEventHandler
dflet 0:50cedd586816 78 SlExtLib1GeneralEventHandler,
dflet 0:50cedd586816 79 #endif
dflet 0:50cedd586816 80
dflet 0:50cedd586816 81 #ifdef SlExtLib2GeneralEventHandler
dflet 0:50cedd586816 82 SlExtLib2GeneralEventHandler,
dflet 0:50cedd586816 83 #endif
dflet 0:50cedd586816 84
dflet 0:50cedd586816 85 #ifdef SlExtLib3GeneralEventHandler
dflet 0:50cedd586816 86 SlExtLib3GeneralEventHandler,
dflet 0:50cedd586816 87 #endif
dflet 0:50cedd586816 88
dflet 0:50cedd586816 89 #ifdef SlExtLib4GeneralEventHandler
dflet 0:50cedd586816 90 SlExtLib4GeneralEventHandler,
dflet 0:50cedd586816 91 #endif
dflet 0:50cedd586816 92
dflet 0:50cedd586816 93 #ifdef SlExtLib5GeneralEventHandler
dflet 0:50cedd586816 94 SlExtLib5GeneralEventHandler,
dflet 0:50cedd586816 95 #endif
dflet 0:50cedd586816 96 };
dflet 0:50cedd586816 97
dflet 0:50cedd586816 98 #undef _SlDrvHandleGeneralEvents
dflet 0:50cedd586816 99
dflet 0:50cedd586816 100 /********************************************************************
dflet 0:50cedd586816 101 _SlDrvHandleGeneralEvents
dflet 0:50cedd586816 102 Iterates through all the general(device) event handlers which are
dflet 0:50cedd586816 103 registered by the external libs/user application.
dflet 0:50cedd586816 104 *********************************************************************/
dflet 0:50cedd586816 105 void _SlDrvHandleGeneralEvents(SlDeviceEvent_t *slGeneralEvent)
dflet 0:50cedd586816 106 {
dflet 0:50cedd586816 107 uint8_t i;
dflet 0:50cedd586816 108
dflet 0:50cedd586816 109 /* Iterate over all the extenal libs handlers */
dflet 0:50cedd586816 110 for ( i = 0 ; i < sizeof(general_callbacks)/sizeof(general_callbacks[0]) ; i++ )
dflet 0:50cedd586816 111 {
dflet 0:50cedd586816 112 if (EVENT_PROPAGATION_BLOCK == general_callbacks[i](slGeneralEvent) )
dflet 0:50cedd586816 113 {
dflet 0:50cedd586816 114 /* exit immediately and do not call the user specific handler as well */
dflet 0:50cedd586816 115 return;
dflet 0:50cedd586816 116 }
dflet 0:50cedd586816 117 }
dflet 0:50cedd586816 118
dflet 0:50cedd586816 119 /* At last call the Application specific handler if registered */
dflet 0:50cedd586816 120 #ifdef sl_GeneralEvtHdlr
dflet 0:50cedd586816 121 sl_GeneralEvtHdlr(slGeneralEvent);
dflet 0:50cedd586816 122 #endif
dflet 0:50cedd586816 123
dflet 0:50cedd586816 124 }
dflet 0:50cedd586816 125 #endif
dflet 0:50cedd586816 126
dflet 0:50cedd586816 127
dflet 0:50cedd586816 128
dflet 0:50cedd586816 129 /* WLAN Events handling*/
dflet 0:50cedd586816 130
dflet 0:50cedd586816 131 #if defined (EXT_LIB_REGISTERED_WLAN_EVENTS)
dflet 0:50cedd586816 132
dflet 0:50cedd586816 133 typedef _SlEventPropogationStatus_e (*wlan_callback) (SlWlanEvent_t *);
dflet 0:50cedd586816 134
dflet 0:50cedd586816 135 static wlan_callback wlan_callbacks[] =
dflet 0:50cedd586816 136 {
dflet 0:50cedd586816 137 #ifdef SlExtLib1WlanEventHandler
dflet 0:50cedd586816 138 SlExtLib1WlanEventHandler,
dflet 0:50cedd586816 139 #endif
dflet 0:50cedd586816 140
dflet 0:50cedd586816 141 #ifdef SlExtLib2WlanEventHandler
dflet 0:50cedd586816 142 SlExtLib2WlanEventHandler,
dflet 0:50cedd586816 143 #endif
dflet 0:50cedd586816 144
dflet 0:50cedd586816 145 #ifdef SlExtLib3WlanEventHandler
dflet 0:50cedd586816 146 SlExtLib3WlanEventHandler,
dflet 0:50cedd586816 147 #endif
dflet 0:50cedd586816 148
dflet 0:50cedd586816 149 #ifdef SlExtLib4WlanEventHandler
dflet 0:50cedd586816 150 SlExtLib4WlanEventHandler,
dflet 0:50cedd586816 151 #endif
dflet 0:50cedd586816 152
dflet 0:50cedd586816 153 #ifdef SlExtLib5WlanEventHandler
dflet 0:50cedd586816 154 SlExtLib5WlanEventHandler,
dflet 0:50cedd586816 155 #endif
dflet 0:50cedd586816 156 };
dflet 0:50cedd586816 157
dflet 0:50cedd586816 158 #undef _SlDrvHandleWlanEvents
dflet 0:50cedd586816 159
dflet 0:50cedd586816 160 /***********************************************************
dflet 0:50cedd586816 161 _SlDrvHandleWlanEvents
dflet 0:50cedd586816 162 Iterates through all the wlan event handlers which are
dflet 0:50cedd586816 163 registered by the external libs/user application.
dflet 0:50cedd586816 164 ************************************************************/
dflet 0:50cedd586816 165 void _SlDrvHandleWlanEvents(SlWlanEvent_t *slWlanEvent)
dflet 0:50cedd586816 166 {
dflet 0:50cedd586816 167 uint8_t i;
dflet 0:50cedd586816 168
dflet 0:50cedd586816 169 /* Iterate over all the extenal libs handlers */
dflet 0:50cedd586816 170 for ( i = 0 ; i < sizeof(wlan_callbacks)/sizeof(wlan_callbacks[0]) ; i++ )
dflet 0:50cedd586816 171 {
dflet 0:50cedd586816 172 if ( EVENT_PROPAGATION_BLOCK == wlan_callbacks[i](slWlanEvent) )
dflet 0:50cedd586816 173 {
dflet 0:50cedd586816 174 /* exit immediately and do not call the user specific handler as well */
dflet 0:50cedd586816 175 return;
dflet 0:50cedd586816 176 }
dflet 0:50cedd586816 177 }
dflet 0:50cedd586816 178
dflet 0:50cedd586816 179 /* At last call the Application specific handler if registered */
dflet 0:50cedd586816 180 #ifdef sl_WlanEvtHdlr
dflet 0:50cedd586816 181 sl_WlanEvtHdlr(slWlanEvent);
dflet 0:50cedd586816 182 #endif
dflet 0:50cedd586816 183
dflet 0:50cedd586816 184 }
dflet 0:50cedd586816 185 #endif
dflet 0:50cedd586816 186
dflet 0:50cedd586816 187
dflet 0:50cedd586816 188 /* NetApp Events handling */
dflet 0:50cedd586816 189 #if defined (EXT_LIB_REGISTERED_NETAPP_EVENTS)
dflet 0:50cedd586816 190
dflet 0:50cedd586816 191 typedef _SlEventPropogationStatus_e (*netApp_callback) (SlNetAppEvent_t *);
dflet 0:50cedd586816 192
dflet 0:50cedd586816 193 static const netApp_callback netApp_callbacks[] =
dflet 0:50cedd586816 194 {
dflet 0:50cedd586816 195 #ifdef SlExtLib1NetAppEventHandler
dflet 0:50cedd586816 196 SlExtLib1NetAppEventHandler,
dflet 0:50cedd586816 197 #endif
dflet 0:50cedd586816 198
dflet 0:50cedd586816 199 #ifdef SlExtLib2NetAppEventHandler
dflet 0:50cedd586816 200 SlExtLib2NetAppEventHandler,
dflet 0:50cedd586816 201 #endif
dflet 0:50cedd586816 202
dflet 0:50cedd586816 203 #ifdef SlExtLib3NetAppEventHandler
dflet 0:50cedd586816 204 SlExtLib3NetAppEventHandler,
dflet 0:50cedd586816 205 #endif
dflet 0:50cedd586816 206
dflet 0:50cedd586816 207 #ifdef SlExtLib4NetAppEventHandler
dflet 0:50cedd586816 208 SlExtLib4NetAppEventHandler,
dflet 0:50cedd586816 209 #endif
dflet 0:50cedd586816 210
dflet 0:50cedd586816 211 #ifdef SlExtLib5NetAppEventHandler
dflet 0:50cedd586816 212 SlExtLib5NetAppEventHandler,
dflet 0:50cedd586816 213 #endif
dflet 0:50cedd586816 214 };
dflet 0:50cedd586816 215
dflet 0:50cedd586816 216 #undef _SlDrvHandleNetAppEvents
dflet 0:50cedd586816 217
dflet 0:50cedd586816 218 /************************************************************
dflet 0:50cedd586816 219 _SlDrvHandleNetAppEvents
dflet 0:50cedd586816 220 Iterates through all the net app event handlers which are
dflet 0:50cedd586816 221 registered by the external libs/user application.
dflet 0:50cedd586816 222 ************************************************************/
dflet 0:50cedd586816 223 void _SlDrvHandleNetAppEvents(SlNetAppEvent_t *slNetAppEvent)
dflet 0:50cedd586816 224 {
dflet 0:50cedd586816 225 uint8_t i;
dflet 0:50cedd586816 226
dflet 0:50cedd586816 227 /* Iterate over all the extenal libs handlers */
dflet 0:50cedd586816 228 for ( i = 0 ; i < sizeof(netApp_callbacks)/sizeof(netApp_callbacks[0]) ; i++ )
dflet 0:50cedd586816 229 {
dflet 0:50cedd586816 230 if (EVENT_PROPAGATION_BLOCK == netApp_callbacks[i](slNetAppEvent) )
dflet 0:50cedd586816 231 {
dflet 0:50cedd586816 232 /* exit immediately and do not call the user specific handler as well */
dflet 0:50cedd586816 233 return;
dflet 0:50cedd586816 234 }
dflet 0:50cedd586816 235 }
dflet 0:50cedd586816 236
dflet 0:50cedd586816 237 /* At last call the Application specific handler if registered */
dflet 0:50cedd586816 238 #ifdef sl_NetAppEvtHdlr
dflet 0:50cedd586816 239 sl_NetAppEvtHdlr(slNetAppEvent);
dflet 0:50cedd586816 240 #endif
dflet 0:50cedd586816 241
dflet 0:50cedd586816 242 }
dflet 0:50cedd586816 243 #endif
dflet 0:50cedd586816 244
dflet 0:50cedd586816 245
dflet 0:50cedd586816 246 /* Http Server Events handling */
dflet 0:50cedd586816 247 #if defined (EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
dflet 0:50cedd586816 248
dflet 0:50cedd586816 249 typedef _SlEventPropogationStatus_e (*httpServer_callback) (SlHttpServerEvent_t*, SlHttpServerResponse_t*);
dflet 0:50cedd586816 250
dflet 0:50cedd586816 251 static const httpServer_callback httpServer_callbacks[] =
dflet 0:50cedd586816 252 {
dflet 0:50cedd586816 253 #ifdef SlExtLib1HttpServerEventHandler
dflet 0:50cedd586816 254 SlExtLib1HttpServerEventHandler,
dflet 0:50cedd586816 255 #endif
dflet 0:50cedd586816 256
dflet 0:50cedd586816 257 #ifdef SlExtLib2HttpServerEventHandler
dflet 0:50cedd586816 258 SlExtLib2HttpServerEventHandler,
dflet 0:50cedd586816 259 #endif
dflet 0:50cedd586816 260
dflet 0:50cedd586816 261 #ifdef SlExtLib3HttpServerEventHandler
dflet 0:50cedd586816 262 SlExtLib3HttpServerEventHandler,
dflet 0:50cedd586816 263 #endif
dflet 0:50cedd586816 264
dflet 0:50cedd586816 265 #ifdef SlExtLib4HttpServerEventHandler
dflet 0:50cedd586816 266 SlExtLib4HttpServerEventHandler,
dflet 0:50cedd586816 267 #endif
dflet 0:50cedd586816 268
dflet 0:50cedd586816 269 #ifdef SlExtLib5HttpServerEventHandler
dflet 0:50cedd586816 270 SlExtLib5HttpServerEventHandler,
dflet 0:50cedd586816 271 #endif
dflet 0:50cedd586816 272 };
dflet 0:50cedd586816 273
dflet 0:50cedd586816 274 #undef _SlDrvHandleHttpServerEvents
dflet 0:50cedd586816 275
dflet 0:50cedd586816 276 /*******************************************************************
dflet 0:50cedd586816 277 _SlDrvHandleHttpServerEvents
dflet 0:50cedd586816 278 Iterates through all the http server event handlers which are
dflet 0:50cedd586816 279 registered by the external libs/user application.
dflet 0:50cedd586816 280 ********************************************************************/
dflet 0:50cedd586816 281 void _SlDrvHandleHttpServerEvents(SlHttpServerEvent_t *slHttpServerEvent, SlHttpServerResponse_t *slHttpServerResponse)
dflet 0:50cedd586816 282 {
dflet 0:50cedd586816 283 _u8 i;
dflet 0:50cedd586816 284
dflet 0:50cedd586816 285 /* Iterate over all the external libs handlers */
dflet 0:50cedd586816 286 for ( i = 0 ; i < sizeof(httpServer_callbacks)/sizeof(httpServer_callbacks[0]) ; i++ )
dflet 0:50cedd586816 287 {
dflet 0:50cedd586816 288 if ( EVENT_PROPAGATION_BLOCK == httpServer_callbacks[i](slHttpServerEvent, slHttpServerResponse) )
dflet 0:50cedd586816 289 {
dflet 0:50cedd586816 290 /* exit immediately and do not call the user specific handler as well */
dflet 0:50cedd586816 291 return;
dflet 0:50cedd586816 292 }
dflet 0:50cedd586816 293 }
dflet 0:50cedd586816 294
dflet 0:50cedd586816 295 /* At last call the Application specific handler if registered */
dflet 0:50cedd586816 296 #ifdef sl_HttpServerCallback
dflet 0:50cedd586816 297 sl_HttpServerCallback(slHttpServerEvent, slHttpServerResponse);
dflet 0:50cedd586816 298 #endif
dflet 0:50cedd586816 299
dflet 0:50cedd586816 300 }
dflet 0:50cedd586816 301 #endif
dflet 0:50cedd586816 302
dflet 0:50cedd586816 303
dflet 0:50cedd586816 304 /* Socket Events */
dflet 0:50cedd586816 305 #if defined (EXT_LIB_REGISTERED_SOCK_EVENTS)
dflet 0:50cedd586816 306
dflet 0:50cedd586816 307 typedef _SlEventPropogationStatus_e (*sock_callback) (SlSockEvent_t *);
dflet 0:50cedd586816 308
dflet 0:50cedd586816 309 static const sock_callback sock_callbacks[] =
dflet 0:50cedd586816 310 {
dflet 0:50cedd586816 311 #ifdef SlExtLib1SockEventHandler
dflet 0:50cedd586816 312 SlExtLib1SockEventHandler,
dflet 0:50cedd586816 313 #endif
dflet 0:50cedd586816 314
dflet 0:50cedd586816 315 #ifdef SlExtLib2SockEventHandler
dflet 0:50cedd586816 316 SlExtLib2SockEventHandler,
dflet 0:50cedd586816 317 #endif
dflet 0:50cedd586816 318
dflet 0:50cedd586816 319 #ifdef SlExtLib3SockEventHandler
dflet 0:50cedd586816 320 SlExtLib3SockEventHandler,
dflet 0:50cedd586816 321 #endif
dflet 0:50cedd586816 322
dflet 0:50cedd586816 323 #ifdef SlExtLib4SockEventHandler
dflet 0:50cedd586816 324 SlExtLib4SockEventHandler,
dflet 0:50cedd586816 325 #endif
dflet 0:50cedd586816 326
dflet 0:50cedd586816 327 #ifdef SlExtLib5SockEventHandler
dflet 0:50cedd586816 328 SlExtLib5SockEventHandler,
dflet 0:50cedd586816 329 #endif
dflet 0:50cedd586816 330 };
dflet 0:50cedd586816 331
dflet 0:50cedd586816 332 /*************************************************************
dflet 0:50cedd586816 333 _SlDrvHandleSockEvents
dflet 0:50cedd586816 334 Iterates through all the socket event handlers which are
dflet 0:50cedd586816 335 registered by the external libs/user application.
dflet 0:50cedd586816 336 **************************************************************/
dflet 0:50cedd586816 337 void _SlDrvHandleSockEvents(SlSockEvent_t *slSockEvent)
dflet 0:50cedd586816 338 {
dflet 0:50cedd586816 339 uint8_t i;
dflet 0:50cedd586816 340
dflet 0:50cedd586816 341 /* Iterate over all the external libs handlers */
dflet 0:50cedd586816 342 for ( i = 0 ; i < sizeof(sock_callbacks)/sizeof(sock_callbacks[0]) ; i++ )
dflet 0:50cedd586816 343 {
dflet 0:50cedd586816 344 if ( EVENT_PROPAGATION_BLOCK == sock_callbacks[i](slSockEvent) )
dflet 0:50cedd586816 345 {
dflet 0:50cedd586816 346 /* exit immediately and do not call the user specific handler as well */
dflet 0:50cedd586816 347 return;
dflet 0:50cedd586816 348 }
dflet 0:50cedd586816 349 }
dflet 0:50cedd586816 350
dflet 0:50cedd586816 351 /* At last call the Application specific handler if registered */
dflet 0:50cedd586816 352 #ifdef sl_SockEvtHdlr
dflet 0:50cedd586816 353 sl_SockEvtHdlr(slSockEvent);
dflet 0:50cedd586816 354 #endif
dflet 0:50cedd586816 355
dflet 0:50cedd586816 356 }
dflet 0:50cedd586816 357
dflet 0:50cedd586816 358 #endif
dflet 0:50cedd586816 359
dflet 0:50cedd586816 360 /*!
dflet 0:50cedd586816 361 \brief This function handles ping report events
dflet 0:50cedd586816 362
dflet 0:50cedd586816 363 \param[in] pPingReport holds the ping report statistics
dflet 0:50cedd586816 364
dflet 0:50cedd586816 365 \return None
dflet 0:50cedd586816 366
dflet 0:50cedd586816 367 \note
dflet 0:50cedd586816 368
dflet 0:50cedd586816 369 \warning
dflet 0:50cedd586816 370 */
dflet 0:50cedd586816 371 void SimpleLinkPingReport(SlPingReport_t *pPingReport)
dflet 0:50cedd586816 372 {
dflet 0:50cedd586816 373 _cc3100_.SET_STATUS_BIT(g_Status, STATUS_BIT_PING_DONE);
dflet 0:50cedd586816 374
dflet 0:50cedd586816 375 if(pPingReport == NULL)
dflet 0:50cedd586816 376 Uart_Write((uint8_t *)" [PING REPORT] NULL Pointer Error\r\n");
dflet 0:50cedd586816 377
dflet 0:50cedd586816 378 g_PingPacketsRecv = pPingReport->PacketsReceived;
dflet 0:50cedd586816 379 }
dflet 0:50cedd586816 380
dflet 0:50cedd586816 381
dflet 0:50cedd586816 382 /*******************************************************************************/
dflet 0:50cedd586816 383 /* _sl_HandleAsync_Accept */
dflet 0:50cedd586816 384 /*******************************************************************************/
dflet 0:50cedd586816 385 #ifndef SL_TINY_EXT
dflet 0:50cedd586816 386 void _sl_HandleAsync_Accept(void *pVoidBuf)
dflet 0:50cedd586816 387 {
dflet 0:50cedd586816 388 _SocketAddrResponse_u *pMsgArgs = (_SocketAddrResponse_u *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 389
dflet 0:50cedd586816 390 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 391
dflet 0:50cedd586816 392 VERIFY_PROTOCOL(( pMsgArgs->IpV4.sd & BSD_SOCKET_ID_MASK) <= SL_MAX_SOCKETS);
dflet 0:50cedd586816 393 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:50cedd586816 394
dflet 0:50cedd586816 395 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs,sizeof(_SocketAddrResponse_u));
dflet 0:50cedd586816 396 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 397
dflet 0:50cedd586816 398 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 399 return;
dflet 0:50cedd586816 400 }
dflet 0:50cedd586816 401
dflet 0:50cedd586816 402 /*******************************************************************************/
dflet 0:50cedd586816 403 /* _sl_HandleAsync_Connect */
dflet 0:50cedd586816 404 /*******************************************************************************/
dflet 0:50cedd586816 405 void _sl_HandleAsync_Connect(void *pVoidBuf)
dflet 0:50cedd586816 406 {
dflet 0:50cedd586816 407 _SocketResponse_t *pMsgArgs = (_SocketResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 408
dflet 0:50cedd586816 409 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 410
dflet 0:50cedd586816 411 VERIFY_PROTOCOL((pMsgArgs->sd & BSD_SOCKET_ID_MASK) <= SL_MAX_SOCKETS);
dflet 0:50cedd586816 412 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:50cedd586816 413
dflet 0:50cedd586816 414 ((_SocketResponse_t *)(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs))->sd = pMsgArgs->sd;
dflet 0:50cedd586816 415 ((_SocketResponse_t *)(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs))->statusOrLen = pMsgArgs->statusOrLen;
dflet 0:50cedd586816 416
dflet 0:50cedd586816 417 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 418 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 419 return;
dflet 0:50cedd586816 420 }
dflet 0:50cedd586816 421
dflet 0:50cedd586816 422 /*******************************************************************************/
dflet 0:50cedd586816 423 /* _sl_HandleAsync_Select */
dflet 0:50cedd586816 424 /*******************************************************************************/
dflet 0:50cedd586816 425 void _sl_HandleAsync_Select(void *pVoidBuf)
dflet 0:50cedd586816 426 {
dflet 0:50cedd586816 427 _SelectAsyncResponse_t *pMsgArgs = (_SelectAsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 428
dflet 0:50cedd586816 429 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 430
dflet 0:50cedd586816 431 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:50cedd586816 432
dflet 0:50cedd586816 433 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_SelectAsyncResponse_t));
dflet 0:50cedd586816 434
dflet 0:50cedd586816 435 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 436 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 437
dflet 0:50cedd586816 438 return;
dflet 0:50cedd586816 439 }
dflet 0:50cedd586816 440
dflet 0:50cedd586816 441 #endif
dflet 0:50cedd586816 442
dflet 0:50cedd586816 443 /******************************************************************************/
dflet 0:50cedd586816 444 /* _sl_HandleAsync_DnsGetHostByName */
dflet 0:50cedd586816 445 /******************************************************************************/
dflet 0:50cedd586816 446 void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf)
dflet 0:50cedd586816 447 {
dflet 0:50cedd586816 448 _GetHostByNameIPv4AsyncResponse_t *pMsgArgs = (_GetHostByNameIPv4AsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 449
dflet 0:50cedd586816 450 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 451
dflet 0:50cedd586816 452 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:50cedd586816 453
dflet 0:50cedd586816 454 /*IPv6 */
dflet 0:50cedd586816 455 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK) {
dflet 0:50cedd586816 456 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_GetHostByNameIPv6AsyncResponse_t));
dflet 0:50cedd586816 457 }
dflet 0:50cedd586816 458 /*IPv4 */
dflet 0:50cedd586816 459 else
dflet 0:50cedd586816 460 {
dflet 0:50cedd586816 461 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_GetHostByNameIPv4AsyncResponse_t));
dflet 0:50cedd586816 462 }
dflet 0:50cedd586816 463
dflet 0:50cedd586816 464 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 465 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 466
dflet 0:50cedd586816 467 return;
dflet 0:50cedd586816 468 }
dflet 0:50cedd586816 469
dflet 0:50cedd586816 470 /******************************************************************************/
dflet 0:50cedd586816 471
dflet 0:50cedd586816 472 /******************************************************************************
dflet 0:50cedd586816 473 _sl_HandleAsync_DnsGetHostByService
dflet 0:50cedd586816 474
dflet 0:50cedd586816 475 CALLER NWP - Async event on sl_DnsGetHostByService with IPv4 Family
dflet 0:50cedd586816 476
dflet 0:50cedd586816 477
dflet 0:50cedd586816 478 DESCRIPTION:
dflet 0:50cedd586816 479
dflet 0:50cedd586816 480 Async event on sl_DnsGetHostByService command with IPv4 Family.
dflet 0:50cedd586816 481 Return service attributes like IP address, port and text according to service name.
dflet 0:50cedd586816 482 The user sets a service name Full/Part (see example below), and should get the:
dflet 0:50cedd586816 483 1. IP of the service
dflet 0:50cedd586816 484 2. The port of service.
dflet 0:50cedd586816 485 3. The text of service.
dflet 0:50cedd586816 486
dflet 0:50cedd586816 487 Hence it can make a connection to the specific service and use it.
dflet 0:50cedd586816 488 It is similar to get host by name method.
dflet 0:50cedd586816 489
dflet 0:50cedd586816 490 It is done by a single shot query with PTR type on the service name.
dflet 0:50cedd586816 491
dflet 0:50cedd586816 492
dflet 0:50cedd586816 493
dflet 0:50cedd586816 494 Note:
dflet 0:50cedd586816 495 1. The return's attributes are belonged to first service that is found.
dflet 0:50cedd586816 496 It can be other services with the same service name will response to
dflet 0:50cedd586816 497 the query. The results of these responses are saved in the peer cache of the NWP, and
dflet 0:50cedd586816 498 should be read by another API.
dflet 0:50cedd586816 499
dflet 0:50cedd586816 500
dflet 0:50cedd586816 501 PARAMETERS:
dflet 0:50cedd586816 502
dflet 0:50cedd586816 503 pVoidBuf - is point to opcode of the event.
dflet 0:50cedd586816 504 it contains the outputs that are given to the user
dflet 0:50cedd586816 505
dflet 0:50cedd586816 506 outputs description:
dflet 0:50cedd586816 507
dflet 0:50cedd586816 508 1.out_pAddr[] - output: Contain the IP address of the service.
dflet 0:50cedd586816 509 2.out_pPort - output: Contain the port of the service.
dflet 0:50cedd586816 510 3.inout_TextLen - Input: Contain the max length of the text that the user wants to get.
dflet 0:50cedd586816 511 it means that if the test of service is bigger that its value than
dflet 0:50cedd586816 512 the text is cut to inout_TextLen value.
dflet 0:50cedd586816 513 Output: Contain the length of the text that is returned. Can be full text or part
dflet 0:50cedd586816 514 of the text (see above).
dflet 0:50cedd586816 515
dflet 0:50cedd586816 516 4.out_pText - Contain the text of the service (full or part see above- inout_TextLen description).
dflet 0:50cedd586816 517
dflet 0:50cedd586816 518 *
dflet 0:50cedd586816 519
dflet 0:50cedd586816 520
dflet 0:50cedd586816 521 RETURNS: success or fail.
dflet 0:50cedd586816 522
dflet 0:50cedd586816 523 ******************************************************************************/
dflet 0:50cedd586816 524 #ifndef SL_TINY_EXT
dflet 0:50cedd586816 525 void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf)
dflet 0:50cedd586816 526 {
dflet 0:50cedd586816 527 _GetHostByServiceAsyncResponse_t* Res;
dflet 0:50cedd586816 528 uint16_t TextLen;
dflet 0:50cedd586816 529 uint16_t UserTextLen;
dflet 0:50cedd586816 530
dflet 0:50cedd586816 531 /*pVoidBuf - is point to opcode of the event.*/
dflet 0:50cedd586816 532
dflet 0:50cedd586816 533 /*set pMsgArgs to point to the attribute of the event.*/
dflet 0:50cedd586816 534 _GetHostByServiceIPv4AsyncResponse_t *pMsgArgs = (_GetHostByServiceIPv4AsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 535
dflet 0:50cedd586816 536 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:50cedd586816 537
dflet 0:50cedd586816 538 /*IPv6*/
dflet 0:50cedd586816 539 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK) {
dflet 0:50cedd586816 540 return;
dflet 0:50cedd586816 541 }
dflet 0:50cedd586816 542 /*IPv4*/
dflet 0:50cedd586816 543 else {
dflet 0:50cedd586816 544 /*************************************************************************************************
dflet 0:50cedd586816 545
dflet 0:50cedd586816 546 1. Copy the attribute part of the evnt to the attribute part of the response
dflet 0:50cedd586816 547 memcpy(g_pCB->GetHostByServiceCB.pAsyncRsp, pMsgArgs, sizeof(_GetHostByServiceIPv4AsyncResponse_t));
dflet 0:50cedd586816 548
dflet 0:50cedd586816 549 set to TextLen the text length of the service.*/
dflet 0:50cedd586816 550 TextLen = pMsgArgs->TextLen;
dflet 0:50cedd586816 551
dflet 0:50cedd586816 552 /*Res pointed to mDNS global object struct */
dflet 0:50cedd586816 553 Res = (_GetHostByServiceAsyncResponse_t*)g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs;
dflet 0:50cedd586816 554
dflet 0:50cedd586816 555
dflet 0:50cedd586816 556
dflet 0:50cedd586816 557 /*It is 4 bytes so we avoid from memcpy*/
dflet 0:50cedd586816 558 Res->out_pAddr[0] = pMsgArgs->Address;
dflet 0:50cedd586816 559 Res->out_pPort[0] = pMsgArgs->Port;
dflet 0:50cedd586816 560 Res->Status = pMsgArgs->Status;
dflet 0:50cedd586816 561
dflet 0:50cedd586816 562 /*set to TextLen the text length of the user (input fromthe user).*/
dflet 0:50cedd586816 563 UserTextLen = Res->inout_TextLen[0];
dflet 0:50cedd586816 564
dflet 0:50cedd586816 565 /*Cut the service text if the user requested for smaller text.*/
dflet 0:50cedd586816 566 UserTextLen = (TextLen <= UserTextLen) ? TextLen : UserTextLen;
dflet 0:50cedd586816 567 Res->inout_TextLen[0] = UserTextLen ;
dflet 0:50cedd586816 568
dflet 0:50cedd586816 569 /**************************************************************************************************
dflet 0:50cedd586816 570
dflet 0:50cedd586816 571 2. Copy the payload part of the evnt (the text) to the payload part of the response
dflet 0:50cedd586816 572 the lenght of the copy is according to the text length in the attribute part. */
dflet 0:50cedd586816 573
dflet 0:50cedd586816 574
dflet 0:50cedd586816 575 memcpy(Res->out_pText,
dflet 0:50cedd586816 576 (int8_t *)(& pMsgArgs[1]), /* & pMsgArgs[1] -> 1st byte after the fixed header = 1st byte of variable text.*/
dflet 0:50cedd586816 577 UserTextLen);
dflet 0:50cedd586816 578
dflet 0:50cedd586816 579
dflet 0:50cedd586816 580 /**************************************************************************************************/
dflet 0:50cedd586816 581 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 582 return;
dflet 0:50cedd586816 583 }
dflet 0:50cedd586816 584 }
dflet 0:50cedd586816 585 #endif
dflet 0:50cedd586816 586
dflet 0:50cedd586816 587 /*****************************************************************************/
dflet 0:50cedd586816 588 /* _sl_HandleAsync_PingResponse */
dflet 0:50cedd586816 589 /*****************************************************************************/
dflet 0:50cedd586816 590 #ifndef SL_TINY_EXT
dflet 0:50cedd586816 591 void _sl_HandleAsync_PingResponse(void *pVoidBuf)
dflet 0:50cedd586816 592 {
dflet 0:50cedd586816 593 _PingReportResponse_t *pMsgArgs = (_PingReportResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 594 SlPingReport_t pingReport;
dflet 0:50cedd586816 595
dflet 0:50cedd586816 596 if(pPingCallBackFunc) {
dflet 0:50cedd586816 597 _cc3100_._netapp.CopyPingResultsToReport(pMsgArgs,&pingReport);
dflet 0:50cedd586816 598 pPingCallBackFunc(&pingReport);
dflet 0:50cedd586816 599 } else {
dflet 0:50cedd586816 600
dflet 0:50cedd586816 601 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 602 VERIFY_SOCKET_CB(NULL != g_pCB->PingCB.PingAsync.pAsyncRsp);
dflet 0:50cedd586816 603
dflet 0:50cedd586816 604 if (NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs) {
dflet 0:50cedd586816 605 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_PingReportResponse_t));
dflet 0:50cedd586816 606 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 607 }
dflet 0:50cedd586816 608 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 609 }
dflet 0:50cedd586816 610 return;
dflet 0:50cedd586816 611 }
dflet 0:50cedd586816 612 #endif
dflet 0:50cedd586816 613
dflet 0:50cedd586816 614 /* ******************************************************************************/
dflet 0:50cedd586816 615 /* _SlDrvMsgReadSpawnCtx */
dflet 0:50cedd586816 616 /* ******************************************************************************/
dflet 0:50cedd586816 617 _SlReturnVal_t _SlDrvMsgReadSpawnCtx(void *pValue)
dflet 0:50cedd586816 618 {
dflet 0:50cedd586816 619
dflet 0:50cedd586816 620 #ifdef SL_POLLING_MODE_USED
dflet 0:50cedd586816 621 int16_t retCode = OSI_OK;
dflet 0:50cedd586816 622 /* for polling based systems */
dflet 0:50cedd586816 623 do {
dflet 0:50cedd586816 624 retCode = _cc3100_._nonos.sl_LockObjLock(&g_pCB->GlobalLockObj, 0);
dflet 0:50cedd586816 625 if ( OSI_OK != retCode ) {
dflet 0:50cedd586816 626 if (TRUE == g_pCB->IsCmdRespWaited) {
dflet 0:50cedd586816 627 OSI_RET_OK_CHECK( _cc3100_._nonos.sl_SyncObjSignal(&g_pCB->CmdSyncObj) );
dflet 0:50cedd586816 628 return SL_RET_CODE_OK;
dflet 0:50cedd586816 629 }
dflet 0:50cedd586816 630 }
dflet 0:50cedd586816 631
dflet 0:50cedd586816 632 } while (OSI_OK != retCode);
dflet 0:50cedd586816 633
dflet 0:50cedd586816 634 #else
dflet 19:3dd3e7f30f8b 635 //#ifndef SL_PLATFORM_MULTI_THREADED
dflet 19:3dd3e7f30f8b 636 #if (!defined (SL_PLATFORM_MULTI_THREADED)) && (!defined (SL_PLATFORM_EXTERNAL_SPAWN))
dflet 0:50cedd586816 637 _cc3100_._driver._SlDrvObjLockWaitForever(&g_pCB->GlobalLockObj);
dflet 0:50cedd586816 638 #else
dflet 0:50cedd586816 639 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->GlobalLockObj, SL_OS_WAIT_FOREVER) );
dflet 0:50cedd586816 640 #endif
dflet 0:50cedd586816 641 #endif
dflet 0:50cedd586816 642 g_pCB->FunctionParams.AsyncExt.pAsyncBuf = NULL;/* buffer must be allocated by _SlDrvMsgRead */
dflet 0:50cedd586816 643 g_pCB->FunctionParams.AsyncExt.AsyncEvtHandler= NULL;
dflet 0:50cedd586816 644 g_pCB->FunctionParams.AsyncExt.RxMsgClass = CMD_RESP_CLASS;/* init to illegal value and verify it's overwritten with the valid one */
dflet 0:50cedd586816 645
dflet 0:50cedd586816 646 /* Messages might have been read by CmdResp context. Therefore after */
dflet 0:50cedd586816 647 /* getting LockObj, check again where the Pending Rx Msg is still present. */
dflet 0:50cedd586816 648 if(FALSE == (_cc3100_._driver._SL_PENDING_RX_MSG(g_pCB))) {
dflet 19:3dd3e7f30f8b 649 //#ifndef SL_PLATFORM_MULTI_THREADED
dflet 19:3dd3e7f30f8b 650 #if (!defined (SL_PLATFORM_MULTI_THREADED)) && (!defined (SL_PLATFORM_EXTERNAL_SPAWN))
dflet 0:50cedd586816 651 _cc3100_._driver._SlDrvObjUnLock(&g_pCB->GlobalLockObj);
dflet 0:50cedd586816 652 #else
dflet 0:50cedd586816 653 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->GlobalLockObj));
dflet 0:50cedd586816 654 #endif
dflet 0:50cedd586816 655 return SL_RET_CODE_OK;
dflet 0:50cedd586816 656 }
dflet 0:50cedd586816 657
dflet 0:50cedd586816 658 VERIFY_RET_OK(_cc3100_._driver._SlDrvMsgRead());
dflet 0:50cedd586816 659
dflet 0:50cedd586816 660 g_pCB->RxDoneCnt++;
dflet 0:50cedd586816 661
dflet 0:50cedd586816 662 switch(g_pCB->FunctionParams.AsyncExt.RxMsgClass) {
dflet 0:50cedd586816 663 case ASYNC_EVT_CLASS:
dflet 0:50cedd586816 664 /* If got here and protected by LockObj a message is waiting */
dflet 0:50cedd586816 665 /* to be read */
dflet 0:50cedd586816 666 VERIFY_PROTOCOL(NULL != g_pCB->FunctionParams.AsyncExt.pAsyncBuf);
dflet 0:50cedd586816 667
dflet 0:50cedd586816 668 _cc3100_._driver._SlAsyncEventGenericHandler();
dflet 0:50cedd586816 669
dflet 0:50cedd586816 670 #if (SL_MEMORY_MGMT == SL_MEMORY_MGMT_STATIC)
dflet 0:50cedd586816 671 g_pCB->FunctionParams.AsyncExt.pAsyncBuf = NULL;
dflet 0:50cedd586816 672 #else
dflet 0:50cedd586816 673 free(g_pCB->FunctionParams.AsyncExt.pAsyncBuf);
dflet 0:50cedd586816 674 #endif
dflet 0:50cedd586816 675 break;
dflet 0:50cedd586816 676 case DUMMY_MSG_CLASS:
dflet 0:50cedd586816 677 case RECV_RESP_CLASS:
dflet 0:50cedd586816 678 /* These types are legal in this context. Do nothing */
dflet 0:50cedd586816 679 break;
dflet 0:50cedd586816 680 case CMD_RESP_CLASS:
dflet 0:50cedd586816 681 /* Command response is illegal in this context. */
dflet 0:50cedd586816 682 /* No 'break' here: Assert! */
dflet 0:50cedd586816 683 default:
dflet 0:50cedd586816 684 VERIFY_PROTOCOL(0);
dflet 0:50cedd586816 685 }
dflet 19:3dd3e7f30f8b 686 //#ifndef SL_PLATFORM_MULTI_THREADED
dflet 19:3dd3e7f30f8b 687 #if (!defined (SL_PLATFORM_MULTI_THREADED)) && (!defined (SL_PLATFORM_EXTERNAL_SPAWN))
dflet 0:50cedd586816 688 _cc3100_._driver._SlDrvObjUnLock(&g_pCB->GlobalLockObj);
dflet 0:50cedd586816 689 // OSI_RET_OK_CHECK(_cc3100_._nonos.sl_LockObjUnlock(&g_pCB->GlobalLockObj));
dflet 0:50cedd586816 690 #else
dflet 0:50cedd586816 691 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->GlobalLockObj));
dflet 0:50cedd586816 692 #endif
dflet 0:50cedd586816 693 return(SL_RET_CODE_OK);
dflet 0:50cedd586816 694
dflet 0:50cedd586816 695 }
dflet 0:50cedd586816 696
dflet 0:50cedd586816 697 /***************************************************************************
dflet 0:50cedd586816 698 _sl_HandleAsync_Stop - handles stop signalling to
dflet 0:50cedd586816 699 a waiting object
dflet 0:50cedd586816 700 ****************************************************************************/
dflet 0:50cedd586816 701 void _sl_HandleAsync_Stop(void *pVoidBuf)
dflet 0:50cedd586816 702 {
dflet 0:50cedd586816 703 _BasicResponse_t *pMsgArgs = (_BasicResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:50cedd586816 704
dflet 0:50cedd586816 705 VERIFY_SOCKET_CB(NULL != g_pCB->StopCB.pAsyncRsp);
dflet 0:50cedd586816 706
dflet 0:50cedd586816 707 _cc3100_._driver._SlDrvProtectionObjLockWaitForever();
dflet 0:50cedd586816 708
dflet 0:50cedd586816 709 memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_BasicResponse_t));
dflet 0:50cedd586816 710 _cc3100_._driver._SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
dflet 0:50cedd586816 711 _cc3100_._driver._SlDrvProtectionObjUnLock();
dflet 0:50cedd586816 712 return;
dflet 0:50cedd586816 713 }
dflet 0:50cedd586816 714
dflet 0:50cedd586816 715 /******************************************************************************
dflet 0:50cedd586816 716 _SlDrvDeviceEventHandler - handles internally device async events
dflet 0:50cedd586816 717 ******************************************************************************/
dflet 0:50cedd586816 718 void _SlDrvDeviceEventHandler(void *pArgs)
dflet 0:50cedd586816 719 {
dflet 0:50cedd586816 720 _SlResponseHeader_t *pHdr = (_SlResponseHeader_t *)pArgs;
dflet 0:50cedd586816 721
dflet 0:50cedd586816 722 switch(pHdr->GenHeader.Opcode) {
dflet 0:50cedd586816 723 case SL_OPCODE_DEVICE_INITCOMPLETE:
dflet 0:50cedd586816 724 _cc3100_._sl_HandleAsync_InitComplete(pHdr);
dflet 0:50cedd586816 725
dflet 0:50cedd586816 726 break;
dflet 0:50cedd586816 727 case SL_OPCODE_DEVICE_STOP_ASYNC_RESPONSE:
dflet 0:50cedd586816 728 _sl_HandleAsync_Stop(pHdr);
dflet 0:50cedd586816 729
dflet 0:50cedd586816 730 break;
dflet 0:50cedd586816 731
dflet 0:50cedd586816 732
dflet 0:50cedd586816 733 case SL_OPCODE_DEVICE_ABORT:
dflet 0:50cedd586816 734 {
dflet 0:50cedd586816 735 #if defined (sl_GeneralEvtHdlr) || defined(EXT_LIB_REGISTERED_GENERAL_EVENTS)
dflet 0:50cedd586816 736 SlDeviceEvent_t devHandler;
dflet 0:50cedd586816 737 devHandler.Event = SL_DEVICE_ABORT_ERROR_EVENT;
dflet 0:50cedd586816 738 devHandler.EventData.deviceReport.AbortType = *((uint32_t*)pArgs + 2);
dflet 0:50cedd586816 739 devHandler.EventData.deviceReport.AbortData = *((uint32_t*)pArgs + 3);
dflet 0:50cedd586816 740 _SlDrvHandleGeneralEvents(&devHandler);
dflet 0:50cedd586816 741 #endif
dflet 0:50cedd586816 742 }
dflet 0:50cedd586816 743 break;
dflet 0:50cedd586816 744 case SL_OPCODE_DEVICE_DEVICEASYNCFATALERROR:
dflet 0:50cedd586816 745 #if defined (sl_GeneralEvtHdlr) || defined(EXT_LIB_REGISTERED_GENERAL_EVENTS)
dflet 0:50cedd586816 746 {
dflet 0:50cedd586816 747 _BasicResponse_t *pMsgArgs = (_BasicResponse_t *)_SL_RESP_ARGS_START(pHdr);
dflet 0:50cedd586816 748 SlDeviceEvent_t devHandler;
dflet 0:50cedd586816 749 devHandler.Event = SL_DEVICE_FATAL_ERROR_EVENT;
dflet 0:50cedd586816 750 devHandler.EventData.deviceEvent.status = pMsgArgs->status & 0xFF;
dflet 0:50cedd586816 751 devHandler.EventData.deviceEvent.sender = (SlErrorSender_e)((pMsgArgs->status >> 8) & 0xFF);
dflet 0:50cedd586816 752 _SlDrvHandleGeneralEvents(&devHandler);
dflet 0:50cedd586816 753 }
dflet 0:50cedd586816 754 #endif
dflet 0:50cedd586816 755 break;
dflet 0:50cedd586816 756 default:
dflet 0:50cedd586816 757 SL_ERROR_TRACE2(MSG_306, "ASSERT: _SlDrvDeviceEventHandler : invalid opcode = 0x%x = %i", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode);
dflet 0:50cedd586816 758 //printf("ASSERT: _SlDrvDeviceEventHandler : invalid opcode = 0x%x = %i", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode);
dflet 0:50cedd586816 759
dflet 0:50cedd586816 760 }
dflet 0:50cedd586816 761 }
dflet 0:50cedd586816 762
dflet 0:50cedd586816 763 /*****************************************************************************/
dflet 0:50cedd586816 764 /* _SlDrvNetAppEventHandler */
dflet 0:50cedd586816 765 /*****************************************************************************/
dflet 0:50cedd586816 766 void _SlDrvNetAppEventHandler(void *pArgs)
dflet 0:50cedd586816 767 {
dflet 0:50cedd586816 768 _SlResponseHeader_t *pHdr = (_SlResponseHeader_t *)pArgs;
dflet 0:50cedd586816 769 #if defined(sl_HttpServerCallback) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
dflet 0:50cedd586816 770 SlHttpServerEvent_t httpServerEvent;
dflet 0:50cedd586816 771 SlHttpServerResponse_t httpServerResponse;
dflet 0:50cedd586816 772 #endif
dflet 0:50cedd586816 773 switch(pHdr->GenHeader.Opcode) {
dflet 0:50cedd586816 774 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE:
dflet 0:50cedd586816 775 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE_V6:
dflet 0:50cedd586816 776 _sl_HandleAsync_DnsGetHostByName(pArgs);
dflet 0:50cedd586816 777 break;
dflet 0:50cedd586816 778 #ifndef SL_TINY_EXT
dflet 0:50cedd586816 779 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE:
dflet 0:50cedd586816 780 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE_V6:
dflet 0:50cedd586816 781 _sl_HandleAsync_DnsGetHostByService(pArgs);
dflet 0:50cedd586816 782 break;
dflet 0:50cedd586816 783 case SL_OPCODE_NETAPP_PINGREPORTREQUESTRESPONSE:
dflet 0:50cedd586816 784 _sl_HandleAsync_PingResponse(pArgs);
dflet 0:50cedd586816 785 break;
dflet 0:50cedd586816 786 #endif
dflet 0:50cedd586816 787
dflet 0:50cedd586816 788 #if defined(sl_HttpServerCallback) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
dflet 0:50cedd586816 789 case SL_OPCODE_NETAPP_HTTPGETTOKENVALUE: {
dflet 0:50cedd586816 790
dflet 0:50cedd586816 791 uint8_t *pTokenName;
dflet 0:50cedd586816 792 slHttpServerData_t Token_value;
dflet 0:50cedd586816 793 sl_NetAppHttpServerGetToken_t *httpGetToken = (sl_NetAppHttpServerGetToken_t *)_SL_RESP_ARGS_START(pHdr);
dflet 0:50cedd586816 794 pTokenName = (uint8_t *)((sl_NetAppHttpServerGetToken_t *)httpGetToken + 1);
dflet 0:50cedd586816 795
dflet 0:50cedd586816 796 httpServerResponse.Response = SL_NETAPP_HTTPSETTOKENVALUE;
dflet 0:50cedd586816 797 httpServerResponse.ResponseData.token_value.len = MAX_TOKEN_VALUE_LEN;
dflet 0:50cedd586816 798
dflet 0:50cedd586816 799 /* Reuse the async buffer for getting the token value response from the user */
dflet 0:50cedd586816 800 httpServerResponse.ResponseData.token_value.data = (uint8_t *)_SL_RESP_ARGS_START(pHdr) + MAX_TOKEN_NAME_LEN;
dflet 0:50cedd586816 801 httpServerEvent.Event = SL_NETAPP_HTTPGETTOKENVALUE_EVENT;
dflet 0:50cedd586816 802
dflet 0:50cedd586816 803 httpServerEvent.EventData.httpTokenName.len = httpGetToken->token_name_len;
dflet 0:50cedd586816 804 httpServerEvent.EventData.httpTokenName.data = pTokenName;
dflet 0:50cedd586816 805
dflet 0:50cedd586816 806 Token_value.token_name = pTokenName;
dflet 0:50cedd586816 807
dflet 0:50cedd586816 808 _SlDrvHandleHttpServerEvents (&httpServerEvent, &httpServerResponse);
dflet 0:50cedd586816 809
dflet 0:50cedd586816 810 Token_value.value_len = httpServerResponse.ResponseData.token_value.len;
dflet 0:50cedd586816 811 Token_value.name_len = httpServerEvent.EventData.httpTokenName.len;
dflet 0:50cedd586816 812
dflet 0:50cedd586816 813 Token_value.token_value = httpServerResponse.ResponseData.token_value.data;
dflet 0:50cedd586816 814
dflet 0:50cedd586816 815
dflet 0:50cedd586816 816 _cc3100_._netapp.sl_NetAppSendTokenValue(&Token_value);
dflet 0:50cedd586816 817 #endif
dflet 0:50cedd586816 818 }
dflet 0:50cedd586816 819 break;
dflet 0:50cedd586816 820
dflet 0:50cedd586816 821 case SL_OPCODE_NETAPP_HTTPPOSTTOKENVALUE: {
dflet 0:50cedd586816 822 #ifdef sl_HttpServerCallback
dflet 0:50cedd586816 823 uint8_t *pPostParams;
dflet 0:50cedd586816 824
dflet 0:50cedd586816 825 sl_NetAppHttpServerPostToken_t *httpPostTokenArgs = (sl_NetAppHttpServerPostToken_t *)_SL_RESP_ARGS_START(pHdr);
dflet 0:50cedd586816 826 pPostParams = (uint8_t *)((sl_NetAppHttpServerPostToken_t *)httpPostTokenArgs + 1);
dflet 0:50cedd586816 827
dflet 0:50cedd586816 828 httpServerEvent.Event = SL_NETAPP_HTTPPOSTTOKENVALUE_EVENT;
dflet 0:50cedd586816 829
dflet 0:50cedd586816 830 httpServerEvent.EventData.httpPostData.action.len = httpPostTokenArgs->post_action_len;
dflet 0:50cedd586816 831 httpServerEvent.EventData.httpPostData.action.data = pPostParams;
dflet 0:50cedd586816 832 pPostParams+=httpPostTokenArgs->post_action_len;
dflet 0:50cedd586816 833
dflet 0:50cedd586816 834 httpServerEvent.EventData.httpPostData.token_name.len = httpPostTokenArgs->token_name_len;
dflet 0:50cedd586816 835 httpServerEvent.EventData.httpPostData.token_name.data = pPostParams;
dflet 0:50cedd586816 836 pPostParams+=httpPostTokenArgs->token_name_len;
dflet 0:50cedd586816 837
dflet 0:50cedd586816 838 httpServerEvent.EventData.httpPostData.token_value.len = httpPostTokenArgs->token_value_len;
dflet 0:50cedd586816 839 httpServerEvent.EventData.httpPostData.token_value.data = pPostParams;
dflet 0:50cedd586816 840
dflet 0:50cedd586816 841 httpServerResponse.Response = SL_NETAPP_RESPONSE_NONE;
dflet 0:50cedd586816 842
dflet 0:50cedd586816 843
dflet 0:50cedd586816 844 _SlDrvHandleHttpServerEvents (&httpServerEvent, &httpServerResponse);
dflet 0:50cedd586816 845 }
dflet 0:50cedd586816 846 break;
dflet 0:50cedd586816 847 #endif
dflet 0:50cedd586816 848 default:
dflet 0:50cedd586816 849 SL_ERROR_TRACE2(MSG_305, "ASSERT: _SlDrvNetAppEventHandler : invalid opcode = 0x%x = %i", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode);
dflet 0:50cedd586816 850 VERIFY_PROTOCOL(0);
dflet 0:50cedd586816 851 }
dflet 0:50cedd586816 852 }
dflet 0:50cedd586816 853
dflet 0:50cedd586816 854 /*
dflet 0:50cedd586816 855 * ASYNCHRONOUS EVENT HANDLERS -- Start
dflet 0:50cedd586816 856 */
dflet 0:50cedd586816 857
dflet 0:50cedd586816 858 /*!
dflet 0:50cedd586816 859 \brief This function handles WLAN events
dflet 0:50cedd586816 860
dflet 0:50cedd586816 861 \param[in] pWlanEvent is the event passed to the handler
dflet 0:50cedd586816 862
dflet 0:50cedd586816 863 \return None
dflet 0:50cedd586816 864
dflet 0:50cedd586816 865 \note
dflet 0:50cedd586816 866
dflet 0:50cedd586816 867 \warning
dflet 0:50cedd586816 868 */
dflet 0:50cedd586816 869 #if (defined(sl_WlanEvtHdlr))
dflet 0:50cedd586816 870 void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
dflet 0:50cedd586816 871 {
dflet 0:50cedd586816 872 unsigned char g_ucConnectionSSID[32+1]; //Connection SSID
dflet 0:50cedd586816 873 unsigned char g_ucConnectionBSSID[6]; //Connection BSSID
dflet 0:50cedd586816 874
dflet 0:50cedd586816 875 if(pWlanEvent == NULL)
dflet 0:50cedd586816 876 Uart_Write((uint8_t *)" [WLAN EVENT] NULL Pointer Error \n\r");
dflet 0:50cedd586816 877
dflet 0:50cedd586816 878 switch(pWlanEvent->Event) {
dflet 0:50cedd586816 879 case SL_WLAN_CONNECT_EVENT: {
dflet 0:50cedd586816 880 _cc3100_.SET_STATUS_BIT(g_Status, STATUS_BIT_CONNECTION);
dflet 0:50cedd586816 881
dflet 0:50cedd586816 882 // Copy new connection SSID and BSSID to global parameters
dflet 0:50cedd586816 883 memcpy(g_ucConnectionSSID,pWlanEvent->EventData.
dflet 0:50cedd586816 884 STAandP2PModeWlanConnected.ssid_name,
dflet 0:50cedd586816 885 pWlanEvent->EventData.STAandP2PModeWlanConnected.ssid_len);
dflet 0:50cedd586816 886 memcpy(g_ucConnectionBSSID,
dflet 0:50cedd586816 887 pWlanEvent->EventData.STAandP2PModeWlanConnected.bssid,
dflet 0:50cedd586816 888 SL_BSSID_LENGTH);
dflet 0:50cedd586816 889 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 890 sprintf((char*) print_buf, "[WLAN EVENT] STA Connected to the AP: %s ,""BSSID: %x:%x:%x:%x:%x:%x\n\r",
dflet 0:50cedd586816 891 g_ucConnectionSSID,g_ucConnectionBSSID[0],
dflet 0:50cedd586816 892 g_ucConnectionBSSID[1],g_ucConnectionBSSID[2],
dflet 0:50cedd586816 893 g_ucConnectionBSSID[3],g_ucConnectionBSSID[4],
dflet 0:50cedd586816 894 g_ucConnectionBSSID[5]);
dflet 0:50cedd586816 895 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 896 /*
dflet 0:50cedd586816 897 * Information about the connected AP (like name, MAC etc) will be
dflet 0:50cedd586816 898 * available in 'slWlanConnectAsyncResponse_t' - Applications
dflet 0:50cedd586816 899 * can use it if required
dflet 0:50cedd586816 900 *
dflet 0:50cedd586816 901 * slWlanConnectAsyncResponse_t *pEventData = NULL;
dflet 0:50cedd586816 902 * pEventData = &pWlanEvent->EventData.STAandP2PModeWlanConnected;
dflet 0:50cedd586816 903 *
dflet 0:50cedd586816 904 */
dflet 0:50cedd586816 905 }
dflet 0:50cedd586816 906 break;
dflet 0:50cedd586816 907
dflet 0:50cedd586816 908 case SL_WLAN_DISCONNECT_EVENT: {
dflet 0:50cedd586816 909 slWlanConnectAsyncResponse_t* pEventData = NULL;
dflet 0:50cedd586816 910
dflet 0:50cedd586816 911 _cc3100_.CLR_STATUS_BIT(g_Status, STATUS_BIT_CONNECTION);
dflet 0:50cedd586816 912 _cc3100_.CLR_STATUS_BIT(g_Status, STATUS_BIT_IP_ACQUIRED);
dflet 0:50cedd586816 913
dflet 0:50cedd586816 914 pEventData = &pWlanEvent->EventData.STAandP2PModeDisconnected;
dflet 0:50cedd586816 915
dflet 0:50cedd586816 916 /* If the user has initiated 'Disconnect' request, 'reason_code' is SL_USER_INITIATED_DISCONNECTION */
dflet 0:50cedd586816 917 if(SL_USER_INITIATED_DISCONNECTION == pEventData->reason_code) {
dflet 0:50cedd586816 918 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 919 sprintf((char*) print_buf, "[WLAN EVENT]Device disconnected from the AP: %s,"
dflet 0:50cedd586816 920 "BSSID: %x:%x:%x:%x:%x:%x on application's request \n\r",
dflet 0:50cedd586816 921 g_ucConnectionSSID,g_ucConnectionBSSID[0],
dflet 0:50cedd586816 922 g_ucConnectionBSSID[1],g_ucConnectionBSSID[2],
dflet 0:50cedd586816 923 g_ucConnectionBSSID[3],g_ucConnectionBSSID[4],
dflet 0:50cedd586816 924 g_ucConnectionBSSID[5]);
dflet 0:50cedd586816 925 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 926 } else {
dflet 0:50cedd586816 927 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 928 sprintf((char*) print_buf, "[WLAN ERROR]Device disconnected from the AP AP: %s,"
dflet 0:50cedd586816 929 "BSSID: %x:%x:%x:%x:%x:%x on an ERROR..!! \n\r",
dflet 0:50cedd586816 930 g_ucConnectionSSID,g_ucConnectionBSSID[0],
dflet 0:50cedd586816 931 g_ucConnectionBSSID[1],g_ucConnectionBSSID[2],
dflet 0:50cedd586816 932 g_ucConnectionBSSID[3],g_ucConnectionBSSID[4],
dflet 0:50cedd586816 933 g_ucConnectionBSSID[5]);
dflet 0:50cedd586816 934 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 935 }
dflet 0:50cedd586816 936 memset(g_ucConnectionSSID,0,sizeof(g_ucConnectionSSID));
dflet 0:50cedd586816 937 memset(g_ucConnectionBSSID,0,sizeof(g_ucConnectionBSSID));
dflet 0:50cedd586816 938 }
dflet 0:50cedd586816 939 break;
dflet 0:50cedd586816 940
dflet 0:50cedd586816 941 case SL_WLAN_STA_CONNECTED_EVENT: {
dflet 0:50cedd586816 942 _cc3100_.SET_STATUS_BIT(g_Status, STATUS_BIT_STA_CONNECTED);
dflet 0:50cedd586816 943 }
dflet 0:50cedd586816 944 break;
dflet 0:50cedd586816 945
dflet 0:50cedd586816 946 case SL_WLAN_STA_DISCONNECTED_EVENT: {
dflet 0:50cedd586816 947 _cc3100_.CLR_STATUS_BIT(g_Status, STATUS_BIT_STA_CONNECTED);
dflet 0:50cedd586816 948 _cc3100_.CLR_STATUS_BIT(g_Status, STATUS_BIT_IP_LEASED);
dflet 0:50cedd586816 949 }
dflet 0:50cedd586816 950 break;
dflet 0:50cedd586816 951
dflet 0:50cedd586816 952 default: {
dflet 0:50cedd586816 953 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 954 sprintf((char*) print_buf, "[WLAN EVENT] Unexpected event [0x%x]\n\r",pWlanEvent->Event);
dflet 0:50cedd586816 955 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 956 }
dflet 0:50cedd586816 957 break;
dflet 0:50cedd586816 958 }
dflet 0:50cedd586816 959 }
dflet 0:50cedd586816 960 #endif
dflet 0:50cedd586816 961
dflet 0:50cedd586816 962 /*!
dflet 0:50cedd586816 963 \brief This function handles events for IP address acquisition via DHCP
dflet 0:50cedd586816 964 indication
dflet 0:50cedd586816 965
dflet 0:50cedd586816 966 \param[in] pNetAppEvent is the event passed to the handler
dflet 0:50cedd586816 967
dflet 0:50cedd586816 968 \return None
dflet 0:50cedd586816 969
dflet 0:50cedd586816 970 \note
dflet 0:50cedd586816 971
dflet 0:50cedd586816 972 \warning
dflet 0:50cedd586816 973 */
dflet 0:50cedd586816 974 #if (defined(sl_NetAppEvtHdlr))
dflet 0:50cedd586816 975 void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent)
dflet 0:50cedd586816 976 {
dflet 0:50cedd586816 977
dflet 0:50cedd586816 978 if(pNetAppEvent == NULL){
dflet 0:50cedd586816 979 Uart_Write((uint8_t *)" [NETAPP EVENT] NULL Pointer Error \n\r");
dflet 0:50cedd586816 980 }
dflet 0:50cedd586816 981
dflet 0:50cedd586816 982 switch(pNetAppEvent->Event) {
dflet 0:50cedd586816 983 case SL_NETAPP_IPV4_IPACQUIRED_EVENT: {
dflet 0:50cedd586816 984 SlIpV4AcquiredAsync_t *pEventData = NULL;
dflet 0:50cedd586816 985 _cc3100_.SET_STATUS_BIT(g_Status, STATUS_BIT_IP_ACQUIRED);
dflet 0:50cedd586816 986 pEventData = &pNetAppEvent->EventData.ipAcquiredV4;
dflet 0:50cedd586816 987 g_GatewayIP = pEventData->gateway;
dflet 0:50cedd586816 988
dflet 0:50cedd586816 989 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 990 sprintf((char*) print_buf, "[NETAPP EVENT] IP Acquired: IP=%d.%d.%d.%d , ""Gateway=%d.%d.%d.%d\n\r",
dflet 0:50cedd586816 991 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.ip,3),
dflet 0:50cedd586816 992 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.ip,2),
dflet 0:50cedd586816 993 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.ip,1),
dflet 0:50cedd586816 994 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.ip,0),
dflet 0:50cedd586816 995 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.gateway,3),
dflet 0:50cedd586816 996 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.gateway,2),
dflet 0:50cedd586816 997 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.gateway,1),
dflet 0:50cedd586816 998 _cc3100_._netcfg.SL_IPV4_BYTE(pNetAppEvent->EventData.ipAcquiredV4.gateway,0));
dflet 0:50cedd586816 999 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 1000 }
dflet 0:50cedd586816 1001 break;
dflet 0:50cedd586816 1002
dflet 0:50cedd586816 1003 case SL_NETAPP_IP_LEASED_EVENT: {
dflet 0:50cedd586816 1004 g_StationIP = pNetAppEvent->EventData.ipLeased.ip_address;
dflet 0:50cedd586816 1005 _cc3100_.SET_STATUS_BIT(g_Status, STATUS_BIT_IP_LEASED);
dflet 0:50cedd586816 1006
dflet 0:50cedd586816 1007 }
dflet 0:50cedd586816 1008 break;
dflet 0:50cedd586816 1009
dflet 0:50cedd586816 1010 default: {
dflet 0:50cedd586816 1011 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 1012 sprintf((char*) print_buf, "[NETAPP EVENT] Unexpected event [0x%x] \n\r",pNetAppEvent->Event);
dflet 0:50cedd586816 1013 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 1014 }
dflet 0:50cedd586816 1015 break;
dflet 0:50cedd586816 1016 }
dflet 0:50cedd586816 1017 }
dflet 0:50cedd586816 1018 #endif
dflet 0:50cedd586816 1019
dflet 0:50cedd586816 1020 /*!
dflet 0:50cedd586816 1021 \brief This function handles socket events indication
dflet 0:50cedd586816 1022
dflet 0:50cedd586816 1023 \param[in] pSock is the event passed to the handler
dflet 0:50cedd586816 1024
dflet 0:50cedd586816 1025 \return None
dflet 0:50cedd586816 1026 */
dflet 0:50cedd586816 1027 #if (defined(sl_SockEvtHdlr))
dflet 0:50cedd586816 1028 void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
dflet 0:50cedd586816 1029 {
dflet 0:50cedd586816 1030 if(pSock == NULL)
dflet 0:50cedd586816 1031 Uart_Write((uint8_t *)" [SOCK EVENT] NULL Pointer Error \n\r");
dflet 0:50cedd586816 1032
dflet 0:50cedd586816 1033 switch( pSock->Event )
dflet 0:50cedd586816 1034 {
dflet 0:50cedd586816 1035 case SL_SOCKET_TX_FAILED_EVENT:
dflet 0:50cedd586816 1036 /*
dflet 0:50cedd586816 1037 * TX Failed
dflet 0:50cedd586816 1038 *
dflet 0:50cedd586816 1039 * Information about the socket descriptor and status will be
dflet 0:50cedd586816 1040 * available in 'SlSockEventData_t' - Applications can use it if
dflet 0:50cedd586816 1041 * required
dflet 0:50cedd586816 1042 *
dflet 0:50cedd586816 1043 * SlSockEventData_t *pEventData = NULL;
dflet 0:50cedd586816 1044 * pEventData = & pSock->EventData;
dflet 0:50cedd586816 1045 */
dflet 0:50cedd586816 1046
dflet 0:50cedd586816 1047 switch( pSock->socketAsyncEvent.SockTxFailData.status )
dflet 0:50cedd586816 1048 {
dflet 0:50cedd586816 1049 case SL_ECLOSE:
dflet 0:50cedd586816 1050 Uart_Write((uint8_t *)" [SOCK EVENT] Close socket operation, failed to transmit all queued packets\n\r");
dflet 0:50cedd586816 1051 break;
dflet 0:50cedd586816 1052 default:
dflet 0:50cedd586816 1053 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 1054 sprintf((char*) print_buf, "[SOCK ERROR] - TX FAILED : socket %d , reason""(%d) \n\n", pSock->socketAsyncEvent.SockTxFailData.sd, pSock->socketAsyncEvent.SockTxFailData.status);
dflet 0:50cedd586816 1055 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 1056
dflet 0:50cedd586816 1057 break;
dflet 0:50cedd586816 1058 }
dflet 0:50cedd586816 1059 break;
dflet 0:50cedd586816 1060
dflet 0:50cedd586816 1061 default:
dflet 0:50cedd586816 1062 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 1063 sprintf((char*) print_buf, "[SOCK EVENT] - Unexpected Event [%x0x]\n\n",pSock->Event);
dflet 0:50cedd586816 1064 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 1065 break;
dflet 0:50cedd586816 1066 }
dflet 0:50cedd586816 1067 }
dflet 0:50cedd586816 1068 #endif
dflet 0:50cedd586816 1069
dflet 0:50cedd586816 1070 /*!
dflet 0:50cedd586816 1071 \brief This function handles callback for the HTTP server events
dflet 0:50cedd586816 1072
dflet 0:50cedd586816 1073 \param[in] pHttpEvent - Contains the relevant event information
dflet 0:50cedd586816 1074 \param[in] pHttpResponse - Should be filled by the user with the
dflet 0:50cedd586816 1075 relevant response information
dflet 0:50cedd586816 1076
dflet 0:50cedd586816 1077 \return None
dflet 0:50cedd586816 1078
dflet 0:50cedd586816 1079 \note
dflet 0:50cedd586816 1080
dflet 0:50cedd586816 1081 \warning
dflet 0:50cedd586816 1082 */
dflet 0:50cedd586816 1083 #if (defined(sl_HttpServerCallback))
dflet 0:50cedd586816 1084 void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pSlHttpServerEvent, SlHttpServerResponse_t *pSlHttpServerResponse)
dflet 0:50cedd586816 1085 {
dflet 0:50cedd586816 1086 unsigned char strLenVal = 0;
dflet 0:50cedd586816 1087
dflet 0:50cedd586816 1088 if(!pSlHttpServerEvent || !pSlHttpServerResponse)
dflet 0:50cedd586816 1089 {
dflet 0:50cedd586816 1090 return;
dflet 0:50cedd586816 1091 }
dflet 0:50cedd586816 1092
dflet 0:50cedd586816 1093 switch (pSlHttpServerEvent->Event)
dflet 0:50cedd586816 1094 {
dflet 0:50cedd586816 1095 case SL_NETAPP_HTTPGETTOKENVALUE_EVENT:
dflet 0:50cedd586816 1096 {
dflet 0:50cedd586816 1097 unsigned char status, *ptr;
dflet 0:50cedd586816 1098
dflet 0:50cedd586816 1099 ptr = pSlHttpServerResponse->ResponseData.token_value.data;
dflet 0:50cedd586816 1100 pSlHttpServerResponse->ResponseData.token_value.len = 0;
dflet 0:50cedd586816 1101 if(memcmp(pSlHttpServerEvent->EventData.httpTokenName.data, GET_token,
dflet 0:50cedd586816 1102 strlen((const char *)GET_token)) == 0)
dflet 0:50cedd586816 1103 {
dflet 0:50cedd586816 1104 status = GPIO_IF_LedStatus(MCU_RED_LED_GPIO);
dflet 0:50cedd586816 1105 strLenVal = strlen(LED1_STRING);
dflet 0:50cedd586816 1106 memcpy(ptr, LED1_STRING, strLenVal);
dflet 0:50cedd586816 1107 ptr += strLenVal;
dflet 0:50cedd586816 1108 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1109 if(status & 0x01)
dflet 0:50cedd586816 1110 {
dflet 0:50cedd586816 1111 strLenVal = strlen(LED_ON_STRING);
dflet 0:50cedd586816 1112 memcpy(ptr, LED_ON_STRING, strLenVal);
dflet 0:50cedd586816 1113 ptr += strLenVal;
dflet 0:50cedd586816 1114 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1115 }
dflet 0:50cedd586816 1116 else
dflet 0:50cedd586816 1117 {
dflet 0:50cedd586816 1118 strLenVal = strlen(LED_OFF_STRING);
dflet 0:50cedd586816 1119 memcpy(ptr, LED_OFF_STRING, strLenVal);
dflet 0:50cedd586816 1120 ptr += strLenVal;
dflet 0:50cedd586816 1121 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1122 }
dflet 0:50cedd586816 1123 status = GPIO_IF_LedStatus(MCU_GREEN_LED_GPIO);
dflet 0:50cedd586816 1124 strLenVal = strlen(LED2_STRING);
dflet 0:50cedd586816 1125 memcpy(ptr, LED2_STRING, strLenVal);
dflet 0:50cedd586816 1126 ptr += strLenVal;
dflet 0:50cedd586816 1127 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1128 if(status & 0x01)
dflet 0:50cedd586816 1129 {
dflet 0:50cedd586816 1130 strLenVal = strlen(LED_ON_STRING);
dflet 0:50cedd586816 1131 memcpy(ptr, LED_ON_STRING, strLenVal);
dflet 0:50cedd586816 1132 ptr += strLenVal;
dflet 0:50cedd586816 1133 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1134 }
dflet 0:50cedd586816 1135 else
dflet 0:50cedd586816 1136 {
dflet 0:50cedd586816 1137 strLenVal = strlen(LED_OFF_STRING);
dflet 0:50cedd586816 1138 memcpy(ptr, LED_OFF_STRING, strLenVal);
dflet 0:50cedd586816 1139 ptr += strLenVal;
dflet 0:50cedd586816 1140 pSlHttpServerResponse->ResponseData.token_value.len += strLenVal;
dflet 0:50cedd586816 1141 }
dflet 0:50cedd586816 1142 *ptr = '\0';
dflet 0:50cedd586816 1143 }
dflet 0:50cedd586816 1144
dflet 0:50cedd586816 1145 }
dflet 0:50cedd586816 1146 break;
dflet 0:50cedd586816 1147
dflet 0:50cedd586816 1148 case SL_NETAPP_HTTPPOSTTOKENVALUE_EVENT:
dflet 0:50cedd586816 1149 {
dflet 0:50cedd586816 1150 unsigned char led;
dflet 0:50cedd586816 1151 unsigned char *ptr = pSlHttpServerEvent->EventData.httpPostData.token_name.data;
dflet 0:50cedd586816 1152
dflet 0:50cedd586816 1153 if(memcmp(ptr, POST_token, strlen((const char *)POST_token)) == 0)
dflet 0:50cedd586816 1154 {
dflet 0:50cedd586816 1155 ptr = pSlHttpServerEvent->EventData.httpPostData.token_value.data;
dflet 0:50cedd586816 1156 strLenVal = strlen(LED_STRING);
dflet 0:50cedd586816 1157 if(memcmp(ptr, LED_STRING, strLenVal) != 0)
dflet 0:50cedd586816 1158 break;
dflet 0:50cedd586816 1159 ptr += strLenVal;
dflet 0:50cedd586816 1160 led = *ptr;
dflet 0:50cedd586816 1161 strLenVal = strlen(LED_ON_STRING);
dflet 0:50cedd586816 1162 ptr += strLenVal;
dflet 0:50cedd586816 1163 if(led == '1')
dflet 0:50cedd586816 1164 {
dflet 0:50cedd586816 1165 if(memcmp(ptr, LED_ON_STRING, strLenVal) == 0)
dflet 0:50cedd586816 1166 {
dflet 0:50cedd586816 1167 GPIO_IF_LedOn(MCU_RED_LED_GPIO);
dflet 0:50cedd586816 1168 }
dflet 0:50cedd586816 1169 else
dflet 0:50cedd586816 1170 {
dflet 0:50cedd586816 1171 GPIO_IF_LedOff(MCU_RED_LED_GPIO);
dflet 0:50cedd586816 1172 }
dflet 0:50cedd586816 1173 }
dflet 0:50cedd586816 1174 else if(led == '2')
dflet 0:50cedd586816 1175 {
dflet 0:50cedd586816 1176 if(memcmp(ptr, LED_ON_STRING, strLenVal) == 0)
dflet 0:50cedd586816 1177 {
dflet 0:50cedd586816 1178 GPIO_IF_LedOn(MCU_GREEN_LED_GPIO);
dflet 0:50cedd586816 1179 }
dflet 0:50cedd586816 1180 else
dflet 0:50cedd586816 1181 {
dflet 0:50cedd586816 1182 GPIO_IF_LedOff(MCU_GREEN_LED_GPIO);
dflet 0:50cedd586816 1183 }
dflet 0:50cedd586816 1184 }
dflet 0:50cedd586816 1185
dflet 0:50cedd586816 1186 }
dflet 0:50cedd586816 1187 }
dflet 0:50cedd586816 1188 break;
dflet 0:50cedd586816 1189 default:
dflet 0:50cedd586816 1190 break;
dflet 0:50cedd586816 1191 }
dflet 0:50cedd586816 1192 }
dflet 0:50cedd586816 1193 #endif
dflet 0:50cedd586816 1194 /*!
dflet 0:50cedd586816 1195 \brief This function handles general error events indication
dflet 0:50cedd586816 1196
dflet 0:50cedd586816 1197 \param[in] pDevEvent is the event passed to the handler
dflet 0:50cedd586816 1198
dflet 0:50cedd586816 1199 \return None
dflet 0:50cedd586816 1200 */
dflet 0:50cedd586816 1201 #if (defined(sl_GeneralEvtHdlr))
dflet 0:50cedd586816 1202 void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent)
dflet 0:50cedd586816 1203 {
dflet 0:50cedd586816 1204 /*
dflet 15:5433f9d94cd7 1205 * Most of the general errors are not FATAL and are to be handled
dflet 0:50cedd586816 1206 * appropriately by the application
dflet 0:50cedd586816 1207 */
dflet 0:50cedd586816 1208 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 1209 sprintf((char*) print_buf, "[GENERAL EVENT] - ID=[%d] Sender=[%d]\n\n", pDevEvent->EventData.deviceEvent.status, pDevEvent->EventData.deviceEvent.sender);
dflet 0:50cedd586816 1210 Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 1211 }
dflet 0:50cedd586816 1212 #endif
dflet 0:50cedd586816 1213
dflet 0:50cedd586816 1214 #ifdef __cplusplus
dflet 0:50cedd586816 1215 }
dflet 0:50cedd586816 1216 #endif /* __cplusplus */
dflet 0:50cedd586816 1217
dflet 0:50cedd586816 1218 //}//namespace