CC3000HostDriver for device TI CC3000 some changes were made due to mbed compiler and the use of void*
evnt_handler.cpp@0:9cb694f00b7b, 2013-08-02 (annotated)
- Committer:
- dflet
- Date:
- Fri Aug 02 15:06:15 2013 +0000
- Revision:
- 0:9cb694f00b7b
First commit TI CC3000HostDriver library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dflet | 0:9cb694f00b7b | 1 | /***************************************************************************** |
dflet | 0:9cb694f00b7b | 2 | * |
dflet | 0:9cb694f00b7b | 3 | * evnt_handler.c - CC3000 Host Driver Implementation. |
dflet | 0:9cb694f00b7b | 4 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ |
dflet | 0:9cb694f00b7b | 5 | * |
dflet | 0:9cb694f00b7b | 6 | * Redistribution and use in source and binary forms, with or without |
dflet | 0:9cb694f00b7b | 7 | * modification, are permitted provided that the following conditions |
dflet | 0:9cb694f00b7b | 8 | * are met: |
dflet | 0:9cb694f00b7b | 9 | * |
dflet | 0:9cb694f00b7b | 10 | * Redistributions of source code must retain the above copyright |
dflet | 0:9cb694f00b7b | 11 | * notice, this list of conditions and the following disclaimer. |
dflet | 0:9cb694f00b7b | 12 | * |
dflet | 0:9cb694f00b7b | 13 | * Redistributions in binary form must reproduce the above copyright |
dflet | 0:9cb694f00b7b | 14 | * notice, this list of conditions and the following disclaimer in the |
dflet | 0:9cb694f00b7b | 15 | * documentation and/or other materials provided with the |
dflet | 0:9cb694f00b7b | 16 | * distribution. |
dflet | 0:9cb694f00b7b | 17 | * |
dflet | 0:9cb694f00b7b | 18 | * Neither the name of Texas Instruments Incorporated nor the names of |
dflet | 0:9cb694f00b7b | 19 | * its contributors may be used to endorse or promote products derived |
dflet | 0:9cb694f00b7b | 20 | * from this software without specific prior written permission. |
dflet | 0:9cb694f00b7b | 21 | * |
dflet | 0:9cb694f00b7b | 22 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
dflet | 0:9cb694f00b7b | 23 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
dflet | 0:9cb694f00b7b | 24 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
dflet | 0:9cb694f00b7b | 25 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
dflet | 0:9cb694f00b7b | 26 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
dflet | 0:9cb694f00b7b | 27 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
dflet | 0:9cb694f00b7b | 28 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
dflet | 0:9cb694f00b7b | 29 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
dflet | 0:9cb694f00b7b | 30 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
dflet | 0:9cb694f00b7b | 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
dflet | 0:9cb694f00b7b | 32 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
dflet | 0:9cb694f00b7b | 33 | * |
dflet | 0:9cb694f00b7b | 34 | *****************************************************************************/ |
dflet | 0:9cb694f00b7b | 35 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 36 | // |
dflet | 0:9cb694f00b7b | 37 | //! \addtogroup evnt_handler_api |
dflet | 0:9cb694f00b7b | 38 | //! @{ |
dflet | 0:9cb694f00b7b | 39 | // |
dflet | 0:9cb694f00b7b | 40 | //****************************************************************************** |
dflet | 0:9cb694f00b7b | 41 | |
dflet | 0:9cb694f00b7b | 42 | //****************************************************************************** |
dflet | 0:9cb694f00b7b | 43 | // INCLUDE FILES |
dflet | 0:9cb694f00b7b | 44 | //****************************************************************************** |
dflet | 0:9cb694f00b7b | 45 | |
dflet | 0:9cb694f00b7b | 46 | #include "cc3000_common.h" |
dflet | 0:9cb694f00b7b | 47 | #include "string.h" |
dflet | 0:9cb694f00b7b | 48 | #include "hci.h" |
dflet | 0:9cb694f00b7b | 49 | #include "evnt_handler.h" |
dflet | 0:9cb694f00b7b | 50 | #include "wlan.h" |
dflet | 0:9cb694f00b7b | 51 | #include "socket.h" |
dflet | 0:9cb694f00b7b | 52 | #include "netapp.h" |
dflet | 0:9cb694f00b7b | 53 | #include "mbed.h" |
dflet | 0:9cb694f00b7b | 54 | #include "spi.h" |
dflet | 0:9cb694f00b7b | 55 | |
dflet | 0:9cb694f00b7b | 56 | |
dflet | 0:9cb694f00b7b | 57 | |
dflet | 0:9cb694f00b7b | 58 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 59 | // COMMON DEFINES |
dflet | 0:9cb694f00b7b | 60 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 61 | |
dflet | 0:9cb694f00b7b | 62 | #define FLOW_CONTROL_EVENT_HANDLE_OFFSET (0) |
dflet | 0:9cb694f00b7b | 63 | #define FLOW_CONTROL_EVENT_BLOCK_MODE_OFFSET (1) |
dflet | 0:9cb694f00b7b | 64 | #define FLOW_CONTROL_EVENT_FREE_BUFFS_OFFSET (2) |
dflet | 0:9cb694f00b7b | 65 | #define FLOW_CONTROL_EVENT_SIZE (4) |
dflet | 0:9cb694f00b7b | 66 | |
dflet | 0:9cb694f00b7b | 67 | #define BSD_RSP_PARAMS_SOCKET_OFFSET (0) |
dflet | 0:9cb694f00b7b | 68 | #define BSD_RSP_PARAMS_STATUS_OFFSET (4) |
dflet | 0:9cb694f00b7b | 69 | |
dflet | 0:9cb694f00b7b | 70 | #define GET_HOST_BY_NAME_RETVAL_OFFSET (0) |
dflet | 0:9cb694f00b7b | 71 | #define GET_HOST_BY_NAME_ADDR_OFFSET (4) |
dflet | 0:9cb694f00b7b | 72 | |
dflet | 0:9cb694f00b7b | 73 | #define ACCEPT_SD_OFFSET (0) |
dflet | 0:9cb694f00b7b | 74 | #define ACCEPT_RETURN_STATUS_OFFSET (4) |
dflet | 0:9cb694f00b7b | 75 | #define ACCEPT_ADDRESS__OFFSET (8) |
dflet | 0:9cb694f00b7b | 76 | |
dflet | 0:9cb694f00b7b | 77 | #define SL_RECEIVE_SD_OFFSET (0) |
dflet | 0:9cb694f00b7b | 78 | #define SL_RECEIVE_NUM_BYTES_OFFSET (4) |
dflet | 0:9cb694f00b7b | 79 | #define SL_RECEIVE__FLAGS__OFFSET (8) |
dflet | 0:9cb694f00b7b | 80 | |
dflet | 0:9cb694f00b7b | 81 | |
dflet | 0:9cb694f00b7b | 82 | #define SELECT_STATUS_OFFSET (0) |
dflet | 0:9cb694f00b7b | 83 | #define SELECT_READFD_OFFSET (4) |
dflet | 0:9cb694f00b7b | 84 | #define SELECT_WRITEFD_OFFSET (8) |
dflet | 0:9cb694f00b7b | 85 | #define SELECT_EXFD_OFFSET (12) |
dflet | 0:9cb694f00b7b | 86 | |
dflet | 0:9cb694f00b7b | 87 | |
dflet | 0:9cb694f00b7b | 88 | #define NETAPP_IPCONFIG_IP_OFFSET (0) |
dflet | 0:9cb694f00b7b | 89 | #define NETAPP_IPCONFIG_SUBNET_OFFSET (4) |
dflet | 0:9cb694f00b7b | 90 | #define NETAPP_IPCONFIG_GW_OFFSET (8) |
dflet | 0:9cb694f00b7b | 91 | #define NETAPP_IPCONFIG_DHCP_OFFSET (12) |
dflet | 0:9cb694f00b7b | 92 | #define NETAPP_IPCONFIG_DNS_OFFSET (16) |
dflet | 0:9cb694f00b7b | 93 | #define NETAPP_IPCONFIG_MAC_OFFSET (20) |
dflet | 0:9cb694f00b7b | 94 | #define NETAPP_IPCONFIG_SSID_OFFSET (26) |
dflet | 0:9cb694f00b7b | 95 | |
dflet | 0:9cb694f00b7b | 96 | #define NETAPP_IPCONFIG_IP_LENGTH (4) |
dflet | 0:9cb694f00b7b | 97 | #define NETAPP_IPCONFIG_MAC_LENGTH (6) |
dflet | 0:9cb694f00b7b | 98 | #define NETAPP_IPCONFIG_SSID_LENGTH (32) |
dflet | 0:9cb694f00b7b | 99 | |
dflet | 0:9cb694f00b7b | 100 | |
dflet | 0:9cb694f00b7b | 101 | #define NETAPP_PING_PACKETS_SENT_OFFSET (0) |
dflet | 0:9cb694f00b7b | 102 | #define NETAPP_PING_PACKETS_RCVD_OFFSET (4) |
dflet | 0:9cb694f00b7b | 103 | #define NETAPP_PING_MIN_RTT_OFFSET (8) |
dflet | 0:9cb694f00b7b | 104 | #define NETAPP_PING_MAX_RTT_OFFSET (12) |
dflet | 0:9cb694f00b7b | 105 | #define NETAPP_PING_AVG_RTT_OFFSET (16) |
dflet | 0:9cb694f00b7b | 106 | |
dflet | 0:9cb694f00b7b | 107 | #define GET_SCAN_RESULTS_TABlE_COUNT_OFFSET (0) |
dflet | 0:9cb694f00b7b | 108 | #define GET_SCAN_RESULTS_SCANRESULT_STATUS_OFFSET (4) |
dflet | 0:9cb694f00b7b | 109 | #define GET_SCAN_RESULTS_ISVALID_TO_SSIDLEN_OFFSET (8) |
dflet | 0:9cb694f00b7b | 110 | #define GET_SCAN_RESULTS_FRAME_TIME_OFFSET (10) |
dflet | 0:9cb694f00b7b | 111 | #define GET_SCAN_RESULTS_SSID_MAC_LENGTH (38) |
dflet | 0:9cb694f00b7b | 112 | |
dflet | 0:9cb694f00b7b | 113 | |
dflet | 0:9cb694f00b7b | 114 | |
dflet | 0:9cb694f00b7b | 115 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 116 | // GLOBAL VARAIABLES |
dflet | 0:9cb694f00b7b | 117 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 118 | |
dflet | 0:9cb694f00b7b | 119 | unsigned long socket_active_status = SOCKET_STATUS_INIT_VAL; |
dflet | 0:9cb694f00b7b | 120 | |
dflet | 0:9cb694f00b7b | 121 | |
dflet | 0:9cb694f00b7b | 122 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 123 | // Prototypes for the static functions |
dflet | 0:9cb694f00b7b | 124 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 125 | |
dflet | 0:9cb694f00b7b | 126 | static long hci_event_unsol_flowcontrol_handler(char *pEvent); |
dflet | 0:9cb694f00b7b | 127 | |
dflet | 0:9cb694f00b7b | 128 | static void update_socket_active_status(char *resp_params); |
dflet | 0:9cb694f00b7b | 129 | |
dflet | 0:9cb694f00b7b | 130 | |
dflet | 0:9cb694f00b7b | 131 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 132 | // |
dflet | 0:9cb694f00b7b | 133 | //! hci_unsol_handle_patch_request |
dflet | 0:9cb694f00b7b | 134 | //! |
dflet | 0:9cb694f00b7b | 135 | //! @param event_hdr event header |
dflet | 0:9cb694f00b7b | 136 | //! |
dflet | 0:9cb694f00b7b | 137 | //! @return none |
dflet | 0:9cb694f00b7b | 138 | //! |
dflet | 0:9cb694f00b7b | 139 | //! @brief Handle unsolicited event from type patch request |
dflet | 0:9cb694f00b7b | 140 | // |
dflet | 0:9cb694f00b7b | 141 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 142 | void hci_unsol_handle_patch_request(char *event_hdr) |
dflet | 0:9cb694f00b7b | 143 | { |
dflet | 0:9cb694f00b7b | 144 | char *params = (char *)(event_hdr) + HCI_EVENT_HEADER_SIZE; |
dflet | 0:9cb694f00b7b | 145 | unsigned long ucLength = 0; |
dflet | 0:9cb694f00b7b | 146 | char *patch; |
dflet | 0:9cb694f00b7b | 147 | |
dflet | 0:9cb694f00b7b | 148 | switch (*params) |
dflet | 0:9cb694f00b7b | 149 | { |
dflet | 0:9cb694f00b7b | 150 | case HCI_EVENT_PATCHES_DRV_REQ: |
dflet | 0:9cb694f00b7b | 151 | |
dflet | 0:9cb694f00b7b | 152 | if (tSLInformation.sDriverPatches) |
dflet | 0:9cb694f00b7b | 153 | { |
dflet | 0:9cb694f00b7b | 154 | patch = tSLInformation.sDriverPatches(&ucLength); |
dflet | 0:9cb694f00b7b | 155 | |
dflet | 0:9cb694f00b7b | 156 | if (patch) |
dflet | 0:9cb694f00b7b | 157 | { |
dflet | 0:9cb694f00b7b | 158 | hci_patch_send(HCI_EVENT_PATCHES_DRV_REQ, tSLInformation.pucTxCommandBuffer, patch, ucLength); |
dflet | 0:9cb694f00b7b | 159 | return; |
dflet | 0:9cb694f00b7b | 160 | } |
dflet | 0:9cb694f00b7b | 161 | } |
dflet | 0:9cb694f00b7b | 162 | |
dflet | 0:9cb694f00b7b | 163 | // Send 0 length Patches response event |
dflet | 0:9cb694f00b7b | 164 | hci_patch_send(HCI_EVENT_PATCHES_DRV_REQ, tSLInformation.pucTxCommandBuffer, 0, 0); |
dflet | 0:9cb694f00b7b | 165 | break; |
dflet | 0:9cb694f00b7b | 166 | |
dflet | 0:9cb694f00b7b | 167 | case HCI_EVENT_PATCHES_FW_REQ: |
dflet | 0:9cb694f00b7b | 168 | |
dflet | 0:9cb694f00b7b | 169 | if (tSLInformation.sFWPatches) |
dflet | 0:9cb694f00b7b | 170 | { |
dflet | 0:9cb694f00b7b | 171 | patch = tSLInformation.sFWPatches(&ucLength); |
dflet | 0:9cb694f00b7b | 172 | |
dflet | 0:9cb694f00b7b | 173 | // Build and send a patch |
dflet | 0:9cb694f00b7b | 174 | if (patch) |
dflet | 0:9cb694f00b7b | 175 | { |
dflet | 0:9cb694f00b7b | 176 | hci_patch_send(HCI_EVENT_PATCHES_FW_REQ, tSLInformation.pucTxCommandBuffer, patch, ucLength); |
dflet | 0:9cb694f00b7b | 177 | return; |
dflet | 0:9cb694f00b7b | 178 | } |
dflet | 0:9cb694f00b7b | 179 | } |
dflet | 0:9cb694f00b7b | 180 | |
dflet | 0:9cb694f00b7b | 181 | // Send 0 length Patches response event |
dflet | 0:9cb694f00b7b | 182 | hci_patch_send(HCI_EVENT_PATCHES_FW_REQ, tSLInformation.pucTxCommandBuffer, 0, 0); |
dflet | 0:9cb694f00b7b | 183 | break; |
dflet | 0:9cb694f00b7b | 184 | |
dflet | 0:9cb694f00b7b | 185 | case HCI_EVENT_PATCHES_BOOTLOAD_REQ: |
dflet | 0:9cb694f00b7b | 186 | |
dflet | 0:9cb694f00b7b | 187 | if (tSLInformation.sBootLoaderPatches) |
dflet | 0:9cb694f00b7b | 188 | { |
dflet | 0:9cb694f00b7b | 189 | patch = tSLInformation.sBootLoaderPatches(&ucLength); |
dflet | 0:9cb694f00b7b | 190 | |
dflet | 0:9cb694f00b7b | 191 | if (patch) |
dflet | 0:9cb694f00b7b | 192 | { |
dflet | 0:9cb694f00b7b | 193 | hci_patch_send(HCI_EVENT_PATCHES_BOOTLOAD_REQ, tSLInformation.pucTxCommandBuffer, patch, ucLength); |
dflet | 0:9cb694f00b7b | 194 | return; |
dflet | 0:9cb694f00b7b | 195 | } |
dflet | 0:9cb694f00b7b | 196 | } |
dflet | 0:9cb694f00b7b | 197 | |
dflet | 0:9cb694f00b7b | 198 | // Send 0 length Patches response event |
dflet | 0:9cb694f00b7b | 199 | hci_patch_send(HCI_EVENT_PATCHES_BOOTLOAD_REQ, tSLInformation.pucTxCommandBuffer, 0, 0); |
dflet | 0:9cb694f00b7b | 200 | break; |
dflet | 0:9cb694f00b7b | 201 | } |
dflet | 0:9cb694f00b7b | 202 | } |
dflet | 0:9cb694f00b7b | 203 | |
dflet | 0:9cb694f00b7b | 204 | |
dflet | 0:9cb694f00b7b | 205 | |
dflet | 0:9cb694f00b7b | 206 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 207 | // |
dflet | 0:9cb694f00b7b | 208 | //! hci_event_handler |
dflet | 0:9cb694f00b7b | 209 | //! |
dflet | 0:9cb694f00b7b | 210 | //! @param pRetParams incoming data buffer |
dflet | 0:9cb694f00b7b | 211 | //! @param from from information (in case of data received) |
dflet | 0:9cb694f00b7b | 212 | //! @param fromlen from information length (in case of data received) |
dflet | 0:9cb694f00b7b | 213 | //! |
dflet | 0:9cb694f00b7b | 214 | //! @return none |
dflet | 0:9cb694f00b7b | 215 | //! |
dflet | 0:9cb694f00b7b | 216 | //! @brief Parse the incoming events packets and issues corresponding |
dflet | 0:9cb694f00b7b | 217 | //! event handler from global array of handlers pointers |
dflet | 0:9cb694f00b7b | 218 | // |
dflet | 0:9cb694f00b7b | 219 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 220 | |
dflet | 0:9cb694f00b7b | 221 | //unsigned char * hci_event_handler(void *pRetParams, unsigned char *from, unsigned char *fromlen) |
dflet | 0:9cb694f00b7b | 222 | unsigned char * |
dflet | 0:9cb694f00b7b | 223 | hci_event_handler(char *pRetParams, unsigned char *from, unsigned char *fromlen) |
dflet | 0:9cb694f00b7b | 224 | { |
dflet | 0:9cb694f00b7b | 225 | unsigned char *pucReceivedData, ucArgsize; |
dflet | 0:9cb694f00b7b | 226 | unsigned short usLength = 0; |
dflet | 0:9cb694f00b7b | 227 | unsigned char *pucReceivedParams; |
dflet | 0:9cb694f00b7b | 228 | unsigned short usReceivedEventOpcode = 0; |
dflet | 0:9cb694f00b7b | 229 | unsigned long retValue32; |
dflet | 0:9cb694f00b7b | 230 | unsigned char * RecvParams; |
dflet | 0:9cb694f00b7b | 231 | char *RetParams; |
dflet | 0:9cb694f00b7b | 232 | |
dflet | 0:9cb694f00b7b | 233 | |
dflet | 0:9cb694f00b7b | 234 | while (1) |
dflet | 0:9cb694f00b7b | 235 | { |
dflet | 0:9cb694f00b7b | 236 | |
dflet | 0:9cb694f00b7b | 237 | if (tSLInformation.usEventOrDataReceived != 0) |
dflet | 0:9cb694f00b7b | 238 | { |
dflet | 0:9cb694f00b7b | 239 | |
dflet | 0:9cb694f00b7b | 240 | pucReceivedData = (tSLInformation.pucReceivedData); |
dflet | 0:9cb694f00b7b | 241 | |
dflet | 0:9cb694f00b7b | 242 | |
dflet | 0:9cb694f00b7b | 243 | if (*pucReceivedData == HCI_TYPE_EVNT) |
dflet | 0:9cb694f00b7b | 244 | { |
dflet | 0:9cb694f00b7b | 245 | |
dflet | 0:9cb694f00b7b | 246 | // Event Received |
dflet | 0:9cb694f00b7b | 247 | STREAM_TO_UINT16((char *)pucReceivedData, HCI_EVENT_OPCODE_OFFSET, usReceivedEventOpcode); |
dflet | 0:9cb694f00b7b | 248 | pucReceivedParams = pucReceivedData + HCI_EVENT_HEADER_SIZE; |
dflet | 0:9cb694f00b7b | 249 | RecvParams = pucReceivedParams; |
dflet | 0:9cb694f00b7b | 250 | RetParams = pRetParams; |
dflet | 0:9cb694f00b7b | 251 | |
dflet | 0:9cb694f00b7b | 252 | // In case unsolicited event received - here the handling finished |
dflet | 0:9cb694f00b7b | 253 | |
dflet | 0:9cb694f00b7b | 254 | if (hci_unsol_event_handler((char *)pucReceivedData) == 0) |
dflet | 0:9cb694f00b7b | 255 | { |
dflet | 0:9cb694f00b7b | 256 | |
dflet | 0:9cb694f00b7b | 257 | STREAM_TO_UINT8(pucReceivedData, HCI_DATA_LENGTH_OFFSET, usLength); |
dflet | 0:9cb694f00b7b | 258 | |
dflet | 0:9cb694f00b7b | 259 | switch(usReceivedEventOpcode) |
dflet | 0:9cb694f00b7b | 260 | { |
dflet | 0:9cb694f00b7b | 261 | case HCI_CMND_READ_BUFFER_SIZE: |
dflet | 0:9cb694f00b7b | 262 | { |
dflet | 0:9cb694f00b7b | 263 | |
dflet | 0:9cb694f00b7b | 264 | STREAM_TO_UINT8((char *)pucReceivedParams, 0, |
dflet | 0:9cb694f00b7b | 265 | tSLInformation.usNumberOfFreeBuffers); |
dflet | 0:9cb694f00b7b | 266 | STREAM_TO_UINT16((char *)pucReceivedParams, 1, |
dflet | 0:9cb694f00b7b | 267 | tSLInformation.usSlBufferLength); |
dflet | 0:9cb694f00b7b | 268 | } |
dflet | 0:9cb694f00b7b | 269 | |
dflet | 0:9cb694f00b7b | 270 | break; |
dflet | 0:9cb694f00b7b | 271 | |
dflet | 0:9cb694f00b7b | 272 | case HCI_CMND_WLAN_CONFIGURE_PATCH: |
dflet | 0:9cb694f00b7b | 273 | case HCI_NETAPP_DHCP: |
dflet | 0:9cb694f00b7b | 274 | case HCI_NETAPP_PING_SEND: |
dflet | 0:9cb694f00b7b | 275 | case HCI_NETAPP_PING_STOP: |
dflet | 0:9cb694f00b7b | 276 | case HCI_NETAPP_ARP_FLUSH: |
dflet | 0:9cb694f00b7b | 277 | case HCI_NETAPP_SET_DEBUG_LEVEL: |
dflet | 0:9cb694f00b7b | 278 | case HCI_NETAPP_SET_TIMERS: |
dflet | 0:9cb694f00b7b | 279 | case HCI_EVNT_NVMEM_READ: |
dflet | 0:9cb694f00b7b | 280 | case HCI_EVNT_NVMEM_CREATE_ENTRY: |
dflet | 0:9cb694f00b7b | 281 | case HCI_CMND_NVMEM_WRITE_PATCH: |
dflet | 0:9cb694f00b7b | 282 | case HCI_NETAPP_PING_REPORT: |
dflet | 0:9cb694f00b7b | 283 | case HCI_EVNT_MDNS_ADVERTISE: |
dflet | 0:9cb694f00b7b | 284 | |
dflet | 0:9cb694f00b7b | 285 | STREAM_TO_UINT8(pucReceivedData, HCI_EVENT_STATUS_OFFSET, *(unsigned char *)pRetParams); |
dflet | 0:9cb694f00b7b | 286 | |
dflet | 0:9cb694f00b7b | 287 | break; |
dflet | 0:9cb694f00b7b | 288 | |
dflet | 0:9cb694f00b7b | 289 | case HCI_CMND_SETSOCKOPT: |
dflet | 0:9cb694f00b7b | 290 | case HCI_CMND_WLAN_CONNECT: |
dflet | 0:9cb694f00b7b | 291 | case HCI_CMND_WLAN_IOCTL_STATUSGET: |
dflet | 0:9cb694f00b7b | 292 | case HCI_EVNT_WLAN_IOCTL_ADD_PROFILE: |
dflet | 0:9cb694f00b7b | 293 | case HCI_CMND_WLAN_IOCTL_DEL_PROFILE: |
dflet | 0:9cb694f00b7b | 294 | case HCI_CMND_WLAN_IOCTL_SET_CONNECTION_POLICY: |
dflet | 0:9cb694f00b7b | 295 | case HCI_CMND_WLAN_IOCTL_SET_SCANPARAM: |
dflet | 0:9cb694f00b7b | 296 | case HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_START: |
dflet | 0:9cb694f00b7b | 297 | case HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_STOP: |
dflet | 0:9cb694f00b7b | 298 | case HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_SET_PREFIX: |
dflet | 0:9cb694f00b7b | 299 | case HCI_CMND_EVENT_MASK: |
dflet | 0:9cb694f00b7b | 300 | case HCI_EVNT_WLAN_DISCONNECT: |
dflet | 0:9cb694f00b7b | 301 | case HCI_EVNT_SOCKET: |
dflet | 0:9cb694f00b7b | 302 | case HCI_EVNT_BIND: |
dflet | 0:9cb694f00b7b | 303 | case HCI_CMND_LISTEN: |
dflet | 0:9cb694f00b7b | 304 | case HCI_EVNT_CLOSE_SOCKET: |
dflet | 0:9cb694f00b7b | 305 | case HCI_EVNT_CONNECT: |
dflet | 0:9cb694f00b7b | 306 | case HCI_EVNT_NVMEM_WRITE: |
dflet | 0:9cb694f00b7b | 307 | |
dflet | 0:9cb694f00b7b | 308 | STREAM_TO_UINT32((char *)pucReceivedParams, 0, *(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 309 | |
dflet | 0:9cb694f00b7b | 310 | break; |
dflet | 0:9cb694f00b7b | 311 | |
dflet | 0:9cb694f00b7b | 312 | case HCI_EVNT_READ_SP_VERSION: |
dflet | 0:9cb694f00b7b | 313 | |
dflet | 0:9cb694f00b7b | 314 | STREAM_TO_UINT8(pucReceivedData, HCI_EVENT_STATUS_OFFSET, *(unsigned char *)pRetParams); |
dflet | 0:9cb694f00b7b | 315 | pRetParams = ((char *)pRetParams) + 1; |
dflet | 0:9cb694f00b7b | 316 | STREAM_TO_UINT32((char *)pucReceivedParams, 0, retValue32); |
dflet | 0:9cb694f00b7b | 317 | UINT32_TO_STREAM((unsigned char *)pRetParams, retValue32); |
dflet | 0:9cb694f00b7b | 318 | |
dflet | 0:9cb694f00b7b | 319 | break; |
dflet | 0:9cb694f00b7b | 320 | |
dflet | 0:9cb694f00b7b | 321 | case HCI_EVNT_BSD_GETHOSTBYNAME: |
dflet | 0:9cb694f00b7b | 322 | |
dflet | 0:9cb694f00b7b | 323 | STREAM_TO_UINT32((char *)pucReceivedParams, GET_HOST_BY_NAME_RETVAL_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 324 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 325 | STREAM_TO_UINT32((char *)pucReceivedParams, GET_HOST_BY_NAME_ADDR_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 326 | |
dflet | 0:9cb694f00b7b | 327 | break; |
dflet | 0:9cb694f00b7b | 328 | |
dflet | 0:9cb694f00b7b | 329 | case HCI_EVNT_ACCEPT: |
dflet | 0:9cb694f00b7b | 330 | { |
dflet | 0:9cb694f00b7b | 331 | STREAM_TO_UINT32((char *)pucReceivedParams,ACCEPT_SD_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 332 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 333 | STREAM_TO_UINT32((char *)pucReceivedParams,ACCEPT_RETURN_STATUS_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 334 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 335 | |
dflet | 0:9cb694f00b7b | 336 | //This argument returns in network order |
dflet | 0:9cb694f00b7b | 337 | memcpy((unsigned char *)pRetParams, pucReceivedParams + ACCEPT_ADDRESS__OFFSET, sizeof(sockaddr)); |
dflet | 0:9cb694f00b7b | 338 | |
dflet | 0:9cb694f00b7b | 339 | break; |
dflet | 0:9cb694f00b7b | 340 | } |
dflet | 0:9cb694f00b7b | 341 | |
dflet | 0:9cb694f00b7b | 342 | case HCI_EVNT_RECV: |
dflet | 0:9cb694f00b7b | 343 | case HCI_EVNT_RECVFROM: |
dflet | 0:9cb694f00b7b | 344 | { |
dflet | 0:9cb694f00b7b | 345 | STREAM_TO_UINT32((char *)pucReceivedParams,SL_RECEIVE_SD_OFFSET ,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 346 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 347 | STREAM_TO_UINT32((char *)pucReceivedParams,SL_RECEIVE_NUM_BYTES_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 348 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 349 | STREAM_TO_UINT32((char *)pucReceivedParams,SL_RECEIVE__FLAGS__OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 350 | |
dflet | 0:9cb694f00b7b | 351 | if(((tBsdReadReturnParams *)pRetParams)->iNumberOfBytes == ERROR_SOCKET_INACTIVE) |
dflet | 0:9cb694f00b7b | 352 | { |
dflet | 0:9cb694f00b7b | 353 | |
dflet | 0:9cb694f00b7b | 354 | set_socket_active_status(((tBsdReadReturnParams *)pRetParams)->iSocketDescriptor,SOCKET_STATUS_INACTIVE); |
dflet | 0:9cb694f00b7b | 355 | |
dflet | 0:9cb694f00b7b | 356 | } |
dflet | 0:9cb694f00b7b | 357 | |
dflet | 0:9cb694f00b7b | 358 | break; |
dflet | 0:9cb694f00b7b | 359 | } |
dflet | 0:9cb694f00b7b | 360 | |
dflet | 0:9cb694f00b7b | 361 | case HCI_EVNT_SEND: |
dflet | 0:9cb694f00b7b | 362 | case HCI_EVNT_SENDTO: |
dflet | 0:9cb694f00b7b | 363 | { |
dflet | 0:9cb694f00b7b | 364 | STREAM_TO_UINT32((char *)pucReceivedParams,SL_RECEIVE_SD_OFFSET ,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 365 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 366 | STREAM_TO_UINT32((char *)pucReceivedParams,SL_RECEIVE_NUM_BYTES_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 367 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 368 | |
dflet | 0:9cb694f00b7b | 369 | break; |
dflet | 0:9cb694f00b7b | 370 | } |
dflet | 0:9cb694f00b7b | 371 | |
dflet | 0:9cb694f00b7b | 372 | case HCI_EVNT_SELECT: |
dflet | 0:9cb694f00b7b | 373 | { |
dflet | 0:9cb694f00b7b | 374 | STREAM_TO_UINT32((char *)pucReceivedParams,SELECT_STATUS_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 375 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 376 | STREAM_TO_UINT32((char *)pucReceivedParams,SELECT_READFD_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 377 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 378 | STREAM_TO_UINT32((char *)pucReceivedParams,SELECT_WRITEFD_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 379 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 380 | STREAM_TO_UINT32((char *)pucReceivedParams,SELECT_EXFD_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 381 | |
dflet | 0:9cb694f00b7b | 382 | break; |
dflet | 0:9cb694f00b7b | 383 | } |
dflet | 0:9cb694f00b7b | 384 | |
dflet | 0:9cb694f00b7b | 385 | case HCI_CMND_GETSOCKOPT: |
dflet | 0:9cb694f00b7b | 386 | |
dflet | 0:9cb694f00b7b | 387 | STREAM_TO_UINT8(pucReceivedData, HCI_EVENT_STATUS_OFFSET,((tBsdGetSockOptReturnParams *)pRetParams)->iStatus); |
dflet | 0:9cb694f00b7b | 388 | //This argument returns in network order |
dflet | 0:9cb694f00b7b | 389 | memcpy((unsigned char *)pRetParams, pucReceivedParams, 4); |
dflet | 0:9cb694f00b7b | 390 | |
dflet | 0:9cb694f00b7b | 391 | break; |
dflet | 0:9cb694f00b7b | 392 | |
dflet | 0:9cb694f00b7b | 393 | case HCI_CMND_WLAN_IOCTL_GET_SCAN_RESULTS: |
dflet | 0:9cb694f00b7b | 394 | |
dflet | 0:9cb694f00b7b | 395 | STREAM_TO_UINT32((char *)pucReceivedParams,GET_SCAN_RESULTS_TABlE_COUNT_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 396 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 397 | STREAM_TO_UINT32((char *)pucReceivedParams,GET_SCAN_RESULTS_SCANRESULT_STATUS_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 398 | pRetParams = ((char *)pRetParams) + 4; |
dflet | 0:9cb694f00b7b | 399 | STREAM_TO_UINT16((char *)pucReceivedParams,GET_SCAN_RESULTS_ISVALID_TO_SSIDLEN_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 400 | pRetParams = ((char *)pRetParams) + 2; |
dflet | 0:9cb694f00b7b | 401 | STREAM_TO_UINT16((char *)pucReceivedParams,GET_SCAN_RESULTS_FRAME_TIME_OFFSET,*(unsigned long *)pRetParams); |
dflet | 0:9cb694f00b7b | 402 | pRetParams = ((char *)pRetParams) + 2; |
dflet | 0:9cb694f00b7b | 403 | memcpy((unsigned char *)pRetParams, (char *)(pucReceivedParams + GET_SCAN_RESULTS_FRAME_TIME_OFFSET + 2), GET_SCAN_RESULTS_SSID_MAC_LENGTH); |
dflet | 0:9cb694f00b7b | 404 | |
dflet | 0:9cb694f00b7b | 405 | break; |
dflet | 0:9cb694f00b7b | 406 | |
dflet | 0:9cb694f00b7b | 407 | case HCI_CMND_SIMPLE_LINK_START: |
dflet | 0:9cb694f00b7b | 408 | |
dflet | 0:9cb694f00b7b | 409 | break; |
dflet | 0:9cb694f00b7b | 410 | |
dflet | 0:9cb694f00b7b | 411 | case HCI_NETAPP_IPCONFIG: |
dflet | 0:9cb694f00b7b | 412 | |
dflet | 0:9cb694f00b7b | 413 | //Read IP address |
dflet | 0:9cb694f00b7b | 414 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 415 | RecvParams += 4; |
dflet | 0:9cb694f00b7b | 416 | |
dflet | 0:9cb694f00b7b | 417 | //Read subnet |
dflet | 0:9cb694f00b7b | 418 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 419 | RecvParams += 4; |
dflet | 0:9cb694f00b7b | 420 | |
dflet | 0:9cb694f00b7b | 421 | //Read default GW |
dflet | 0:9cb694f00b7b | 422 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 423 | RecvParams += 4; |
dflet | 0:9cb694f00b7b | 424 | |
dflet | 0:9cb694f00b7b | 425 | //Read DHCP server |
dflet | 0:9cb694f00b7b | 426 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 427 | RecvParams += 4; |
dflet | 0:9cb694f00b7b | 428 | |
dflet | 0:9cb694f00b7b | 429 | //Read DNS server |
dflet | 0:9cb694f00b7b | 430 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 431 | RecvParams += 4; |
dflet | 0:9cb694f00b7b | 432 | |
dflet | 0:9cb694f00b7b | 433 | //Read Mac address |
dflet | 0:9cb694f00b7b | 434 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_MAC_LENGTH); |
dflet | 0:9cb694f00b7b | 435 | RecvParams += 6; |
dflet | 0:9cb694f00b7b | 436 | |
dflet | 0:9cb694f00b7b | 437 | //Read SSID |
dflet | 0:9cb694f00b7b | 438 | STREAM_TO_STREAM(RecvParams,RetParams,NETAPP_IPCONFIG_SSID_LENGTH); |
dflet | 0:9cb694f00b7b | 439 | |
dflet | 0:9cb694f00b7b | 440 | } |
dflet | 0:9cb694f00b7b | 441 | } |
dflet | 0:9cb694f00b7b | 442 | |
dflet | 0:9cb694f00b7b | 443 | if (usReceivedEventOpcode == tSLInformation.usRxEventOpcode) |
dflet | 0:9cb694f00b7b | 444 | |
dflet | 0:9cb694f00b7b | 445 | { |
dflet | 0:9cb694f00b7b | 446 | tSLInformation.usRxEventOpcode = 0; |
dflet | 0:9cb694f00b7b | 447 | } |
dflet | 0:9cb694f00b7b | 448 | } |
dflet | 0:9cb694f00b7b | 449 | else |
dflet | 0:9cb694f00b7b | 450 | { |
dflet | 0:9cb694f00b7b | 451 | |
dflet | 0:9cb694f00b7b | 452 | pucReceivedParams = pucReceivedData; |
dflet | 0:9cb694f00b7b | 453 | STREAM_TO_UINT8((char *)pucReceivedData, HCI_PACKET_ARGSIZE_OFFSET, ucArgsize); |
dflet | 0:9cb694f00b7b | 454 | |
dflet | 0:9cb694f00b7b | 455 | STREAM_TO_UINT16((char *)pucReceivedData, HCI_PACKET_LENGTH_OFFSET, usLength); |
dflet | 0:9cb694f00b7b | 456 | |
dflet | 0:9cb694f00b7b | 457 | // Data received: note that the only case where from and from length |
dflet | 0:9cb694f00b7b | 458 | // are not null is in recv from, so fill the args accordingly |
dflet | 0:9cb694f00b7b | 459 | if (from) |
dflet | 0:9cb694f00b7b | 460 | { |
dflet | 0:9cb694f00b7b | 461 | |
dflet | 0:9cb694f00b7b | 462 | STREAM_TO_UINT32((char *)(pucReceivedData + HCI_DATA_HEADER_SIZE), BSD_RECV_FROM_FROMLEN_OFFSET, *(unsigned long *)fromlen); |
dflet | 0:9cb694f00b7b | 463 | |
dflet | 0:9cb694f00b7b | 464 | memcpy(from, (pucReceivedData + HCI_DATA_HEADER_SIZE + BSD_RECV_FROM_FROM_OFFSET) ,*fromlen); |
dflet | 0:9cb694f00b7b | 465 | } |
dflet | 0:9cb694f00b7b | 466 | |
dflet | 0:9cb694f00b7b | 467 | |
dflet | 0:9cb694f00b7b | 468 | |
dflet | 0:9cb694f00b7b | 469 | memcpy(pRetParams, pucReceivedParams + HCI_DATA_HEADER_SIZE + ucArgsize, usLength - ucArgsize); |
dflet | 0:9cb694f00b7b | 470 | |
dflet | 0:9cb694f00b7b | 471 | tSLInformation.usRxDataPending = 0; |
dflet | 0:9cb694f00b7b | 472 | |
dflet | 0:9cb694f00b7b | 473 | } |
dflet | 0:9cb694f00b7b | 474 | |
dflet | 0:9cb694f00b7b | 475 | tSLInformation.usEventOrDataReceived = 0; |
dflet | 0:9cb694f00b7b | 476 | |
dflet | 0:9cb694f00b7b | 477 | SpiResumeSpi(); |
dflet | 0:9cb694f00b7b | 478 | |
dflet | 0:9cb694f00b7b | 479 | // Since we are going to TX - we need to handle this event after the |
dflet | 0:9cb694f00b7b | 480 | // ResumeSPi since we need interrupts |
dflet | 0:9cb694f00b7b | 481 | if ((*pucReceivedData == HCI_TYPE_EVNT) && (usReceivedEventOpcode == HCI_EVNT_PATCHES_REQ)) |
dflet | 0:9cb694f00b7b | 482 | { |
dflet | 0:9cb694f00b7b | 483 | hci_unsol_handle_patch_request((char *)pucReceivedData); |
dflet | 0:9cb694f00b7b | 484 | |
dflet | 0:9cb694f00b7b | 485 | } |
dflet | 0:9cb694f00b7b | 486 | |
dflet | 0:9cb694f00b7b | 487 | if ((tSLInformation.usRxEventOpcode == 0) && (tSLInformation.usRxDataPending == 0)) |
dflet | 0:9cb694f00b7b | 488 | { |
dflet | 0:9cb694f00b7b | 489 | |
dflet | 0:9cb694f00b7b | 490 | return NULL; |
dflet | 0:9cb694f00b7b | 491 | } |
dflet | 0:9cb694f00b7b | 492 | } |
dflet | 0:9cb694f00b7b | 493 | } |
dflet | 0:9cb694f00b7b | 494 | |
dflet | 0:9cb694f00b7b | 495 | } |
dflet | 0:9cb694f00b7b | 496 | |
dflet | 0:9cb694f00b7b | 497 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 498 | // |
dflet | 0:9cb694f00b7b | 499 | //! hci_unsol_event_handler |
dflet | 0:9cb694f00b7b | 500 | //! |
dflet | 0:9cb694f00b7b | 501 | //! @param event_hdr event header |
dflet | 0:9cb694f00b7b | 502 | //! |
dflet | 0:9cb694f00b7b | 503 | //! @return 1 if event supported and handled |
dflet | 0:9cb694f00b7b | 504 | //! 0 if event is not supported |
dflet | 0:9cb694f00b7b | 505 | //! |
dflet | 0:9cb694f00b7b | 506 | //! @brief Handle unsolicited events |
dflet | 0:9cb694f00b7b | 507 | // |
dflet | 0:9cb694f00b7b | 508 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 509 | long |
dflet | 0:9cb694f00b7b | 510 | hci_unsol_event_handler(char *event_hdr) |
dflet | 0:9cb694f00b7b | 511 | { |
dflet | 0:9cb694f00b7b | 512 | char * data = NULL; |
dflet | 0:9cb694f00b7b | 513 | long event_type; |
dflet | 0:9cb694f00b7b | 514 | unsigned long NumberOfReleasedPackets; |
dflet | 0:9cb694f00b7b | 515 | unsigned long NumberOfSentPackets; |
dflet | 0:9cb694f00b7b | 516 | |
dflet | 0:9cb694f00b7b | 517 | STREAM_TO_UINT16(event_hdr, HCI_EVENT_OPCODE_OFFSET,event_type); |
dflet | 0:9cb694f00b7b | 518 | |
dflet | 0:9cb694f00b7b | 519 | if (event_type & HCI_EVNT_UNSOL_BASE) |
dflet | 0:9cb694f00b7b | 520 | { |
dflet | 0:9cb694f00b7b | 521 | |
dflet | 0:9cb694f00b7b | 522 | switch(event_type) |
dflet | 0:9cb694f00b7b | 523 | { |
dflet | 0:9cb694f00b7b | 524 | |
dflet | 0:9cb694f00b7b | 525 | case HCI_EVNT_DATA_UNSOL_FREE_BUFF: |
dflet | 0:9cb694f00b7b | 526 | { |
dflet | 0:9cb694f00b7b | 527 | hci_event_unsol_flowcontrol_handler(event_hdr); |
dflet | 0:9cb694f00b7b | 528 | |
dflet | 0:9cb694f00b7b | 529 | NumberOfReleasedPackets = tSLInformation.NumberOfReleasedPackets; |
dflet | 0:9cb694f00b7b | 530 | NumberOfSentPackets = tSLInformation.NumberOfSentPackets; |
dflet | 0:9cb694f00b7b | 531 | |
dflet | 0:9cb694f00b7b | 532 | if (NumberOfReleasedPackets == NumberOfSentPackets) |
dflet | 0:9cb694f00b7b | 533 | { |
dflet | 0:9cb694f00b7b | 534 | if (tSLInformation.InformHostOnTxComplete) |
dflet | 0:9cb694f00b7b | 535 | { |
dflet | 0:9cb694f00b7b | 536 | tSLInformation.sWlanCB(HCI_EVENT_CC3000_CAN_SHUT_DOWN, NULL, 0); |
dflet | 0:9cb694f00b7b | 537 | } |
dflet | 0:9cb694f00b7b | 538 | } |
dflet | 0:9cb694f00b7b | 539 | return 1; |
dflet | 0:9cb694f00b7b | 540 | |
dflet | 0:9cb694f00b7b | 541 | } |
dflet | 0:9cb694f00b7b | 542 | } |
dflet | 0:9cb694f00b7b | 543 | } |
dflet | 0:9cb694f00b7b | 544 | |
dflet | 0:9cb694f00b7b | 545 | if(event_type & HCI_EVNT_WLAN_UNSOL_BASE) |
dflet | 0:9cb694f00b7b | 546 | { |
dflet | 0:9cb694f00b7b | 547 | switch(event_type) |
dflet | 0:9cb694f00b7b | 548 | { |
dflet | 0:9cb694f00b7b | 549 | case HCI_EVNT_WLAN_KEEPALIVE: |
dflet | 0:9cb694f00b7b | 550 | case HCI_EVNT_WLAN_UNSOL_CONNECT: |
dflet | 0:9cb694f00b7b | 551 | case HCI_EVNT_WLAN_UNSOL_DISCONNECT: |
dflet | 0:9cb694f00b7b | 552 | case HCI_EVNT_WLAN_UNSOL_INIT: |
dflet | 0:9cb694f00b7b | 553 | case HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE: |
dflet | 0:9cb694f00b7b | 554 | |
dflet | 0:9cb694f00b7b | 555 | if( tSLInformation.sWlanCB ) |
dflet | 0:9cb694f00b7b | 556 | { |
dflet | 0:9cb694f00b7b | 557 | tSLInformation.sWlanCB(event_type, 0, 0); |
dflet | 0:9cb694f00b7b | 558 | } |
dflet | 0:9cb694f00b7b | 559 | break; |
dflet | 0:9cb694f00b7b | 560 | |
dflet | 0:9cb694f00b7b | 561 | case HCI_EVNT_WLAN_UNSOL_DHCP: |
dflet | 0:9cb694f00b7b | 562 | { |
dflet | 0:9cb694f00b7b | 563 | unsigned char params[NETAPP_IPCONFIG_MAC_OFFSET + 1]; // extra byte is for the status |
dflet | 0:9cb694f00b7b | 564 | unsigned char *recParams = params; |
dflet | 0:9cb694f00b7b | 565 | |
dflet | 0:9cb694f00b7b | 566 | data = (char*)(event_hdr) + HCI_EVENT_HEADER_SIZE; |
dflet | 0:9cb694f00b7b | 567 | |
dflet | 0:9cb694f00b7b | 568 | //Read IP address |
dflet | 0:9cb694f00b7b | 569 | STREAM_TO_STREAM(data,recParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 570 | data += 4; |
dflet | 0:9cb694f00b7b | 571 | //Read subnet |
dflet | 0:9cb694f00b7b | 572 | STREAM_TO_STREAM(data,recParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 573 | data += 4; |
dflet | 0:9cb694f00b7b | 574 | //Read default GW |
dflet | 0:9cb694f00b7b | 575 | STREAM_TO_STREAM(data,recParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 576 | data += 4; |
dflet | 0:9cb694f00b7b | 577 | //Read DHCP server |
dflet | 0:9cb694f00b7b | 578 | STREAM_TO_STREAM(data,recParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 579 | data += 4; |
dflet | 0:9cb694f00b7b | 580 | //Read DNS server |
dflet | 0:9cb694f00b7b | 581 | STREAM_TO_STREAM(data,recParams,NETAPP_IPCONFIG_IP_LENGTH); |
dflet | 0:9cb694f00b7b | 582 | // read the status |
dflet | 0:9cb694f00b7b | 583 | STREAM_TO_UINT8(event_hdr, HCI_EVENT_STATUS_OFFSET, *recParams); |
dflet | 0:9cb694f00b7b | 584 | |
dflet | 0:9cb694f00b7b | 585 | |
dflet | 0:9cb694f00b7b | 586 | if( tSLInformation.sWlanCB ) |
dflet | 0:9cb694f00b7b | 587 | { |
dflet | 0:9cb694f00b7b | 588 | tSLInformation.sWlanCB(event_type, (char *)params, sizeof(params)); |
dflet | 0:9cb694f00b7b | 589 | } |
dflet | 0:9cb694f00b7b | 590 | } |
dflet | 0:9cb694f00b7b | 591 | break; |
dflet | 0:9cb694f00b7b | 592 | |
dflet | 0:9cb694f00b7b | 593 | case HCI_EVNT_WLAN_ASYNC_PING_REPORT: |
dflet | 0:9cb694f00b7b | 594 | { |
dflet | 0:9cb694f00b7b | 595 | netapp_pingreport_args_t params; |
dflet | 0:9cb694f00b7b | 596 | data = (char*)(event_hdr) + HCI_EVENT_HEADER_SIZE; |
dflet | 0:9cb694f00b7b | 597 | STREAM_TO_UINT32(data, NETAPP_PING_PACKETS_SENT_OFFSET, params.packets_sent); |
dflet | 0:9cb694f00b7b | 598 | STREAM_TO_UINT32(data, NETAPP_PING_PACKETS_RCVD_OFFSET, params.packets_received); |
dflet | 0:9cb694f00b7b | 599 | STREAM_TO_UINT32(data, NETAPP_PING_MIN_RTT_OFFSET, params.min_round_time); |
dflet | 0:9cb694f00b7b | 600 | STREAM_TO_UINT32(data, NETAPP_PING_MAX_RTT_OFFSET, params.max_round_time); |
dflet | 0:9cb694f00b7b | 601 | STREAM_TO_UINT32(data, NETAPP_PING_AVG_RTT_OFFSET, params.avg_round_time); |
dflet | 0:9cb694f00b7b | 602 | |
dflet | 0:9cb694f00b7b | 603 | if( tSLInformation.sWlanCB ) |
dflet | 0:9cb694f00b7b | 604 | { |
dflet | 0:9cb694f00b7b | 605 | tSLInformation.sWlanCB(event_type, (char *)¶ms, sizeof(params)); |
dflet | 0:9cb694f00b7b | 606 | } |
dflet | 0:9cb694f00b7b | 607 | } |
dflet | 0:9cb694f00b7b | 608 | break; |
dflet | 0:9cb694f00b7b | 609 | case HCI_EVNT_BSD_TCP_CLOSE_WAIT: |
dflet | 0:9cb694f00b7b | 610 | { |
dflet | 0:9cb694f00b7b | 611 | data = (char *)(event_hdr) + HCI_EVENT_HEADER_SIZE; |
dflet | 0:9cb694f00b7b | 612 | if( tSLInformation.sWlanCB ) |
dflet | 0:9cb694f00b7b | 613 | { |
dflet | 0:9cb694f00b7b | 614 | tSLInformation.sWlanCB(event_type, data, 0); |
dflet | 0:9cb694f00b7b | 615 | } |
dflet | 0:9cb694f00b7b | 616 | } |
dflet | 0:9cb694f00b7b | 617 | break; |
dflet | 0:9cb694f00b7b | 618 | |
dflet | 0:9cb694f00b7b | 619 | //'default' case which means "event not supported" |
dflet | 0:9cb694f00b7b | 620 | default: |
dflet | 0:9cb694f00b7b | 621 | return (0); |
dflet | 0:9cb694f00b7b | 622 | } |
dflet | 0:9cb694f00b7b | 623 | return(1); |
dflet | 0:9cb694f00b7b | 624 | } |
dflet | 0:9cb694f00b7b | 625 | |
dflet | 0:9cb694f00b7b | 626 | if ((event_type == HCI_EVNT_SEND) || (event_type == HCI_EVNT_SENDTO) || (event_type == HCI_EVNT_WRITE)) |
dflet | 0:9cb694f00b7b | 627 | { |
dflet | 0:9cb694f00b7b | 628 | char *pArg; |
dflet | 0:9cb694f00b7b | 629 | long status; |
dflet | 0:9cb694f00b7b | 630 | |
dflet | 0:9cb694f00b7b | 631 | pArg = M_BSD_RESP_PARAMS_OFFSET(event_hdr); |
dflet | 0:9cb694f00b7b | 632 | STREAM_TO_UINT32(pArg, BSD_RSP_PARAMS_STATUS_OFFSET,status); |
dflet | 0:9cb694f00b7b | 633 | |
dflet | 0:9cb694f00b7b | 634 | if (ERROR_SOCKET_INACTIVE == status) |
dflet | 0:9cb694f00b7b | 635 | { |
dflet | 0:9cb694f00b7b | 636 | // The only synchronous event that can come from SL device in form of |
dflet | 0:9cb694f00b7b | 637 | // command complete is "Command Complete" on data sent, in case SL device |
dflet | 0:9cb694f00b7b | 638 | // was unable to transmit |
dflet | 0:9cb694f00b7b | 639 | STREAM_TO_UINT8(event_hdr, HCI_EVENT_STATUS_OFFSET, tSLInformation.slTransmitDataError); |
dflet | 0:9cb694f00b7b | 640 | update_socket_active_status(M_BSD_RESP_PARAMS_OFFSET(event_hdr)); |
dflet | 0:9cb694f00b7b | 641 | |
dflet | 0:9cb694f00b7b | 642 | return (1); |
dflet | 0:9cb694f00b7b | 643 | } |
dflet | 0:9cb694f00b7b | 644 | else |
dflet | 0:9cb694f00b7b | 645 | return (0); |
dflet | 0:9cb694f00b7b | 646 | } |
dflet | 0:9cb694f00b7b | 647 | |
dflet | 0:9cb694f00b7b | 648 | return(0); |
dflet | 0:9cb694f00b7b | 649 | } |
dflet | 0:9cb694f00b7b | 650 | |
dflet | 0:9cb694f00b7b | 651 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 652 | // |
dflet | 0:9cb694f00b7b | 653 | //! hci_unsolicited_event_handler |
dflet | 0:9cb694f00b7b | 654 | //! |
dflet | 0:9cb694f00b7b | 655 | //! @param None |
dflet | 0:9cb694f00b7b | 656 | //! |
dflet | 0:9cb694f00b7b | 657 | //! @return ESUCCESS if successful, EFAIL if an error occurred |
dflet | 0:9cb694f00b7b | 658 | //! |
dflet | 0:9cb694f00b7b | 659 | //! @brief Parse the incoming unsolicited event packets and issues |
dflet | 0:9cb694f00b7b | 660 | //! corresponding event handler. |
dflet | 0:9cb694f00b7b | 661 | // |
dflet | 0:9cb694f00b7b | 662 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 663 | long |
dflet | 0:9cb694f00b7b | 664 | hci_unsolicited_event_handler(void) |
dflet | 0:9cb694f00b7b | 665 | { |
dflet | 0:9cb694f00b7b | 666 | unsigned long res = 0; |
dflet | 0:9cb694f00b7b | 667 | unsigned char *pucReceivedData; |
dflet | 0:9cb694f00b7b | 668 | |
dflet | 0:9cb694f00b7b | 669 | if (tSLInformation.usEventOrDataReceived != 0) |
dflet | 0:9cb694f00b7b | 670 | { |
dflet | 0:9cb694f00b7b | 671 | pucReceivedData = (tSLInformation.pucReceivedData); |
dflet | 0:9cb694f00b7b | 672 | |
dflet | 0:9cb694f00b7b | 673 | if (*pucReceivedData == HCI_TYPE_EVNT) |
dflet | 0:9cb694f00b7b | 674 | { |
dflet | 0:9cb694f00b7b | 675 | |
dflet | 0:9cb694f00b7b | 676 | // In case unsolicited event received - here the handling finished |
dflet | 0:9cb694f00b7b | 677 | if (hci_unsol_event_handler((char *)pucReceivedData) == 1) |
dflet | 0:9cb694f00b7b | 678 | { |
dflet | 0:9cb694f00b7b | 679 | |
dflet | 0:9cb694f00b7b | 680 | // There was an unsolicited event received - we can release the buffer |
dflet | 0:9cb694f00b7b | 681 | // and clean the event received |
dflet | 0:9cb694f00b7b | 682 | tSLInformation.usEventOrDataReceived = 0; |
dflet | 0:9cb694f00b7b | 683 | |
dflet | 0:9cb694f00b7b | 684 | res = 1; |
dflet | 0:9cb694f00b7b | 685 | SpiResumeSpi(); |
dflet | 0:9cb694f00b7b | 686 | } |
dflet | 0:9cb694f00b7b | 687 | } |
dflet | 0:9cb694f00b7b | 688 | } |
dflet | 0:9cb694f00b7b | 689 | |
dflet | 0:9cb694f00b7b | 690 | return res; |
dflet | 0:9cb694f00b7b | 691 | } |
dflet | 0:9cb694f00b7b | 692 | |
dflet | 0:9cb694f00b7b | 693 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 694 | // |
dflet | 0:9cb694f00b7b | 695 | //! set_socket_active_status |
dflet | 0:9cb694f00b7b | 696 | //! |
dflet | 0:9cb694f00b7b | 697 | //! @param Sd |
dflet | 0:9cb694f00b7b | 698 | //! @param Status |
dflet | 0:9cb694f00b7b | 699 | //! @return none |
dflet | 0:9cb694f00b7b | 700 | //! |
dflet | 0:9cb694f00b7b | 701 | //! @brief Check if the socket ID and status are valid and set |
dflet | 0:9cb694f00b7b | 702 | //! accordingly the global socket status |
dflet | 0:9cb694f00b7b | 703 | // |
dflet | 0:9cb694f00b7b | 704 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 705 | void set_socket_active_status(long Sd, long Status) |
dflet | 0:9cb694f00b7b | 706 | { |
dflet | 0:9cb694f00b7b | 707 | if(M_IS_VALID_SD(Sd) && M_IS_VALID_STATUS(Status)) |
dflet | 0:9cb694f00b7b | 708 | { |
dflet | 0:9cb694f00b7b | 709 | socket_active_status &= ~(1 << Sd); /* clean socket's mask */ |
dflet | 0:9cb694f00b7b | 710 | socket_active_status |= (Status << Sd); /* set new socket's mask */ |
dflet | 0:9cb694f00b7b | 711 | } |
dflet | 0:9cb694f00b7b | 712 | } |
dflet | 0:9cb694f00b7b | 713 | |
dflet | 0:9cb694f00b7b | 714 | |
dflet | 0:9cb694f00b7b | 715 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 716 | // |
dflet | 0:9cb694f00b7b | 717 | //! hci_event_unsol_flowcontrol_handler |
dflet | 0:9cb694f00b7b | 718 | //! |
dflet | 0:9cb694f00b7b | 719 | //! @param pEvent pointer to the string contains parameters for IPERF |
dflet | 0:9cb694f00b7b | 720 | //! @return ESUCCESS if successful, EFAIL if an error occurred |
dflet | 0:9cb694f00b7b | 721 | //! |
dflet | 0:9cb694f00b7b | 722 | //! @brief Called in case unsolicited event from type |
dflet | 0:9cb694f00b7b | 723 | //! HCI_EVNT_DATA_UNSOL_FREE_BUFF has received. |
dflet | 0:9cb694f00b7b | 724 | //! Keep track on the number of packets transmitted and update the |
dflet | 0:9cb694f00b7b | 725 | //! number of free buffer in the SL device. |
dflet | 0:9cb694f00b7b | 726 | // |
dflet | 0:9cb694f00b7b | 727 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 728 | long |
dflet | 0:9cb694f00b7b | 729 | hci_event_unsol_flowcontrol_handler(char *pEvent) |
dflet | 0:9cb694f00b7b | 730 | { |
dflet | 0:9cb694f00b7b | 731 | |
dflet | 0:9cb694f00b7b | 732 | long temp, value; |
dflet | 0:9cb694f00b7b | 733 | unsigned short i; |
dflet | 0:9cb694f00b7b | 734 | unsigned short pusNumberOfHandles=0; |
dflet | 0:9cb694f00b7b | 735 | char *pReadPayload; |
dflet | 0:9cb694f00b7b | 736 | |
dflet | 0:9cb694f00b7b | 737 | STREAM_TO_UINT16((char *)pEvent,HCI_EVENT_HEADER_SIZE,pusNumberOfHandles); |
dflet | 0:9cb694f00b7b | 738 | pReadPayload = ((char *)pEvent + HCI_EVENT_HEADER_SIZE + sizeof(pusNumberOfHandles)); |
dflet | 0:9cb694f00b7b | 739 | temp = 0; |
dflet | 0:9cb694f00b7b | 740 | |
dflet | 0:9cb694f00b7b | 741 | for(i = 0; i < pusNumberOfHandles ; i++) |
dflet | 0:9cb694f00b7b | 742 | { |
dflet | 0:9cb694f00b7b | 743 | STREAM_TO_UINT16(pReadPayload, FLOW_CONTROL_EVENT_FREE_BUFFS_OFFSET, value); |
dflet | 0:9cb694f00b7b | 744 | temp += value; |
dflet | 0:9cb694f00b7b | 745 | pReadPayload += FLOW_CONTROL_EVENT_SIZE; |
dflet | 0:9cb694f00b7b | 746 | } |
dflet | 0:9cb694f00b7b | 747 | |
dflet | 0:9cb694f00b7b | 748 | tSLInformation.usNumberOfFreeBuffers += temp; |
dflet | 0:9cb694f00b7b | 749 | tSLInformation.NumberOfReleasedPackets += temp; |
dflet | 0:9cb694f00b7b | 750 | |
dflet | 0:9cb694f00b7b | 751 | return(ESUCCESS); |
dflet | 0:9cb694f00b7b | 752 | } |
dflet | 0:9cb694f00b7b | 753 | |
dflet | 0:9cb694f00b7b | 754 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 755 | // |
dflet | 0:9cb694f00b7b | 756 | //! get_socket_active_status |
dflet | 0:9cb694f00b7b | 757 | //! |
dflet | 0:9cb694f00b7b | 758 | //! @param Sd Socket IS |
dflet | 0:9cb694f00b7b | 759 | //! @return Current status of the socket. |
dflet | 0:9cb694f00b7b | 760 | //! |
dflet | 0:9cb694f00b7b | 761 | //! @brief Retrieve socket status |
dflet | 0:9cb694f00b7b | 762 | // |
dflet | 0:9cb694f00b7b | 763 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 764 | |
dflet | 0:9cb694f00b7b | 765 | long |
dflet | 0:9cb694f00b7b | 766 | get_socket_active_status(long Sd) |
dflet | 0:9cb694f00b7b | 767 | { |
dflet | 0:9cb694f00b7b | 768 | if(M_IS_VALID_SD(Sd)) |
dflet | 0:9cb694f00b7b | 769 | { |
dflet | 0:9cb694f00b7b | 770 | return (socket_active_status & (1 << Sd)) ? SOCKET_STATUS_INACTIVE : SOCKET_STATUS_ACTIVE; |
dflet | 0:9cb694f00b7b | 771 | } |
dflet | 0:9cb694f00b7b | 772 | return SOCKET_STATUS_INACTIVE; |
dflet | 0:9cb694f00b7b | 773 | } |
dflet | 0:9cb694f00b7b | 774 | |
dflet | 0:9cb694f00b7b | 775 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 776 | // |
dflet | 0:9cb694f00b7b | 777 | //! update_socket_active_status |
dflet | 0:9cb694f00b7b | 778 | //! |
dflet | 0:9cb694f00b7b | 779 | //! @param resp_params Socket IS |
dflet | 0:9cb694f00b7b | 780 | //! @return Current status of the socket. |
dflet | 0:9cb694f00b7b | 781 | //! |
dflet | 0:9cb694f00b7b | 782 | //! @brief Retrieve socket status |
dflet | 0:9cb694f00b7b | 783 | // |
dflet | 0:9cb694f00b7b | 784 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 785 | void |
dflet | 0:9cb694f00b7b | 786 | update_socket_active_status(char *resp_params) |
dflet | 0:9cb694f00b7b | 787 | { |
dflet | 0:9cb694f00b7b | 788 | long status, sd; |
dflet | 0:9cb694f00b7b | 789 | |
dflet | 0:9cb694f00b7b | 790 | STREAM_TO_UINT32(resp_params, BSD_RSP_PARAMS_SOCKET_OFFSET,sd); |
dflet | 0:9cb694f00b7b | 791 | STREAM_TO_UINT32(resp_params, BSD_RSP_PARAMS_STATUS_OFFSET,status); |
dflet | 0:9cb694f00b7b | 792 | |
dflet | 0:9cb694f00b7b | 793 | if(ERROR_SOCKET_INACTIVE == status) |
dflet | 0:9cb694f00b7b | 794 | { |
dflet | 0:9cb694f00b7b | 795 | set_socket_active_status(sd, SOCKET_STATUS_INACTIVE); |
dflet | 0:9cb694f00b7b | 796 | } |
dflet | 0:9cb694f00b7b | 797 | } |
dflet | 0:9cb694f00b7b | 798 | |
dflet | 0:9cb694f00b7b | 799 | |
dflet | 0:9cb694f00b7b | 800 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 801 | // |
dflet | 0:9cb694f00b7b | 802 | //! SimpleLinkWaitEvent |
dflet | 0:9cb694f00b7b | 803 | //! |
dflet | 0:9cb694f00b7b | 804 | //! @param usOpcode command operation code |
dflet | 0:9cb694f00b7b | 805 | //! @param pRetParams command return parameters |
dflet | 0:9cb694f00b7b | 806 | //! |
dflet | 0:9cb694f00b7b | 807 | //! @return none |
dflet | 0:9cb694f00b7b | 808 | //! |
dflet | 0:9cb694f00b7b | 809 | //! @brief Wait for event, pass it to the hci_event_handler and |
dflet | 0:9cb694f00b7b | 810 | //! update the event opcode in a global variable. |
dflet | 0:9cb694f00b7b | 811 | // |
dflet | 0:9cb694f00b7b | 812 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 813 | |
dflet | 0:9cb694f00b7b | 814 | void |
dflet | 0:9cb694f00b7b | 815 | SimpleLinkWaitEvent(unsigned short usOpcode, long* pRetParams) |
dflet | 0:9cb694f00b7b | 816 | { |
dflet | 0:9cb694f00b7b | 817 | // In the blocking implementation the control to caller will be returned only |
dflet | 0:9cb694f00b7b | 818 | // after the end of current transaction |
dflet | 0:9cb694f00b7b | 819 | tSLInformation.usRxEventOpcode = usOpcode; |
dflet | 0:9cb694f00b7b | 820 | |
dflet | 0:9cb694f00b7b | 821 | hci_event_handler((char*)pRetParams, 0, 0); |
dflet | 0:9cb694f00b7b | 822 | |
dflet | 0:9cb694f00b7b | 823 | } |
dflet | 0:9cb694f00b7b | 824 | |
dflet | 0:9cb694f00b7b | 825 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 826 | // |
dflet | 0:9cb694f00b7b | 827 | //! SimpleLinkWaitData |
dflet | 0:9cb694f00b7b | 828 | //! |
dflet | 0:9cb694f00b7b | 829 | //! @param pBuf data buffer |
dflet | 0:9cb694f00b7b | 830 | //! @param from from information |
dflet | 0:9cb694f00b7b | 831 | //! @param fromlen from information length |
dflet | 0:9cb694f00b7b | 832 | //! |
dflet | 0:9cb694f00b7b | 833 | //! @return none |
dflet | 0:9cb694f00b7b | 834 | //! |
dflet | 0:9cb694f00b7b | 835 | //! @brief Wait for data, pass it to the hci_event_handler |
dflet | 0:9cb694f00b7b | 836 | //! and update in a global variable that there is |
dflet | 0:9cb694f00b7b | 837 | //! data to read. |
dflet | 0:9cb694f00b7b | 838 | // |
dflet | 0:9cb694f00b7b | 839 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 840 | |
dflet | 0:9cb694f00b7b | 841 | void |
dflet | 0:9cb694f00b7b | 842 | SimpleLinkWaitData(unsigned char *pBuf, unsigned char *from, |
dflet | 0:9cb694f00b7b | 843 | unsigned char *fromlen) |
dflet | 0:9cb694f00b7b | 844 | { |
dflet | 0:9cb694f00b7b | 845 | // In the blocking implementation the control to caller will be returned only |
dflet | 0:9cb694f00b7b | 846 | // after the end of current transaction, i.e. only after data will be received |
dflet | 0:9cb694f00b7b | 847 | tSLInformation.usRxDataPending = 1; |
dflet | 0:9cb694f00b7b | 848 | hci_event_handler((char*)pBuf, from, fromlen); |
dflet | 0:9cb694f00b7b | 849 | } |
dflet | 0:9cb694f00b7b | 850 | |
dflet | 0:9cb694f00b7b | 851 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 852 | // |
dflet | 0:9cb694f00b7b | 853 | // Close the Doxygen group. |
dflet | 0:9cb694f00b7b | 854 | //! @} |
dflet | 0:9cb694f00b7b | 855 | // |
dflet | 0:9cb694f00b7b | 856 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 857 |