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