CC3000HostDriver for device TI CC3000 some changes were made due to mbed compiler and the use of void*
netapp.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 | * netapp.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 | #include <string.h> |
dflet | 0:9cb694f00b7b | 36 | #include "netapp.h" |
dflet | 0:9cb694f00b7b | 37 | #include "hci.h" |
dflet | 0:9cb694f00b7b | 38 | #include "socket.h" |
dflet | 0:9cb694f00b7b | 39 | #include "evnt_handler.h" |
dflet | 0:9cb694f00b7b | 40 | #include "nvmem.h" |
dflet | 0:9cb694f00b7b | 41 | |
dflet | 0:9cb694f00b7b | 42 | #define MIN_TIMER_VAL_SECONDS 20 |
dflet | 0:9cb694f00b7b | 43 | #define MIN_TIMER_SET(t) if ((0 != t) && (t < MIN_TIMER_VAL_SECONDS)) \ |
dflet | 0:9cb694f00b7b | 44 | { \ |
dflet | 0:9cb694f00b7b | 45 | t = MIN_TIMER_VAL_SECONDS; \ |
dflet | 0:9cb694f00b7b | 46 | } |
dflet | 0:9cb694f00b7b | 47 | |
dflet | 0:9cb694f00b7b | 48 | |
dflet | 0:9cb694f00b7b | 49 | #define NETAPP_DHCP_PARAMS_LEN (20) |
dflet | 0:9cb694f00b7b | 50 | #define NETAPP_SET_TIMER_PARAMS_LEN (20) |
dflet | 0:9cb694f00b7b | 51 | #define NETAPP_SET_DEBUG_LEVEL_PARAMS_LEN (4) |
dflet | 0:9cb694f00b7b | 52 | #define NETAPP_PING_SEND_PARAMS_LEN (16) |
dflet | 0:9cb694f00b7b | 53 | |
dflet | 0:9cb694f00b7b | 54 | |
dflet | 0:9cb694f00b7b | 55 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 56 | // |
dflet | 0:9cb694f00b7b | 57 | //! netapp_config_mac_adrress |
dflet | 0:9cb694f00b7b | 58 | //! |
dflet | 0:9cb694f00b7b | 59 | //! @param mac device mac address, 6 bytes. Saved: yes |
dflet | 0:9cb694f00b7b | 60 | //! |
dflet | 0:9cb694f00b7b | 61 | //! @return return on success 0, otherwise error. |
dflet | 0:9cb694f00b7b | 62 | //! |
dflet | 0:9cb694f00b7b | 63 | //! @brief Configure device MAC address and store it in NVMEM. |
dflet | 0:9cb694f00b7b | 64 | //! The value of the MAC address configured through the API will |
dflet | 0:9cb694f00b7b | 65 | //! be stored in CC3000 non volatile memory, thus preserved |
dflet | 0:9cb694f00b7b | 66 | //! over resets. |
dflet | 0:9cb694f00b7b | 67 | // |
dflet | 0:9cb694f00b7b | 68 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 69 | long netapp_config_mac_adrress(unsigned char * mac) |
dflet | 0:9cb694f00b7b | 70 | { |
dflet | 0:9cb694f00b7b | 71 | return nvmem_set_mac_address(mac); |
dflet | 0:9cb694f00b7b | 72 | } |
dflet | 0:9cb694f00b7b | 73 | |
dflet | 0:9cb694f00b7b | 74 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 75 | // |
dflet | 0:9cb694f00b7b | 76 | //! netapp_dhcp |
dflet | 0:9cb694f00b7b | 77 | //! |
dflet | 0:9cb694f00b7b | 78 | //! @param aucIP device mac address, 6 bytes. Saved: yes |
dflet | 0:9cb694f00b7b | 79 | //! @param aucSubnetMask device mac address, 6 bytes. Saved: yes |
dflet | 0:9cb694f00b7b | 80 | //! @param aucDefaultGateway device mac address, 6 bytes. Saved: yes |
dflet | 0:9cb694f00b7b | 81 | //! @param aucDNSServer device mac address, 6 bytes. Saved: yes |
dflet | 0:9cb694f00b7b | 82 | //! |
dflet | 0:9cb694f00b7b | 83 | //! @return return on success 0, otherwise error. |
dflet | 0:9cb694f00b7b | 84 | //! |
dflet | 0:9cb694f00b7b | 85 | //! @brief netapp_dhcp is used to configure the network interface, |
dflet | 0:9cb694f00b7b | 86 | //! static or dynamic (DHCP).\n In order to activate DHCP mode, |
dflet | 0:9cb694f00b7b | 87 | //! aucIP, aucSubnetMask, aucDefaultGateway must be 0. |
dflet | 0:9cb694f00b7b | 88 | //! The default mode of CC3000 is DHCP mode. |
dflet | 0:9cb694f00b7b | 89 | //! Note that the configuration is saved in non volatile memory |
dflet | 0:9cb694f00b7b | 90 | //! and thus preserved over resets. |
dflet | 0:9cb694f00b7b | 91 | //! |
dflet | 0:9cb694f00b7b | 92 | //! @note If the mode is altered a reset of CC3000 device is required |
dflet | 0:9cb694f00b7b | 93 | //! in order to apply changes.\nAlso note that asynchronous event |
dflet | 0:9cb694f00b7b | 94 | //! of DHCP_EVENT, which is generated when an IP address is |
dflet | 0:9cb694f00b7b | 95 | //! allocated either by the DHCP server or due to static |
dflet | 0:9cb694f00b7b | 96 | //! allocation is generated only upon a connection to the |
dflet | 0:9cb694f00b7b | 97 | //! AP was established. |
dflet | 0:9cb694f00b7b | 98 | //! |
dflet | 0:9cb694f00b7b | 99 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 100 | long netapp_dhcp(unsigned long *aucIP, unsigned long *aucSubnetMask,unsigned long *aucDefaultGateway, unsigned long *aucDNSServer) |
dflet | 0:9cb694f00b7b | 101 | { |
dflet | 0:9cb694f00b7b | 102 | signed char scRet; |
dflet | 0:9cb694f00b7b | 103 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 104 | unsigned char *args; |
dflet | 0:9cb694f00b7b | 105 | |
dflet | 0:9cb694f00b7b | 106 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 107 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 108 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 109 | |
dflet | 0:9cb694f00b7b | 110 | // Fill in temporary command buffer |
dflet | 0:9cb694f00b7b | 111 | ARRAY_TO_STREAM(args,aucIP,4); |
dflet | 0:9cb694f00b7b | 112 | ARRAY_TO_STREAM(args,aucSubnetMask,4); |
dflet | 0:9cb694f00b7b | 113 | ARRAY_TO_STREAM(args,aucDefaultGateway,4); |
dflet | 0:9cb694f00b7b | 114 | args = UINT32_TO_STREAM(args, 0); |
dflet | 0:9cb694f00b7b | 115 | ARRAY_TO_STREAM(args,aucDNSServer,4); |
dflet | 0:9cb694f00b7b | 116 | |
dflet | 0:9cb694f00b7b | 117 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 118 | hci_command_send(HCI_NETAPP_DHCP, ptr, NETAPP_DHCP_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 119 | |
dflet | 0:9cb694f00b7b | 120 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 121 | SimpleLinkWaitEvent(HCI_NETAPP_DHCP, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 122 | |
dflet | 0:9cb694f00b7b | 123 | return(scRet); |
dflet | 0:9cb694f00b7b | 124 | } |
dflet | 0:9cb694f00b7b | 125 | |
dflet | 0:9cb694f00b7b | 126 | |
dflet | 0:9cb694f00b7b | 127 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 128 | // |
dflet | 0:9cb694f00b7b | 129 | //! netapp_timeout_values |
dflet | 0:9cb694f00b7b | 130 | //! |
dflet | 0:9cb694f00b7b | 131 | //! @param aucDHCP DHCP lease time request, also impact |
dflet | 0:9cb694f00b7b | 132 | //! the DHCP renew timeout. Range: [0-0xffffffff] seconds, |
dflet | 0:9cb694f00b7b | 133 | //! 0 or 0xffffffff == infinity lease timeout. |
dflet | 0:9cb694f00b7b | 134 | //! Resolution:10 seconds. Influence: only after |
dflet | 0:9cb694f00b7b | 135 | //! reconnecting to the AP. |
dflet | 0:9cb694f00b7b | 136 | //! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds. |
dflet | 0:9cb694f00b7b | 137 | //! The parameter is saved into the CC3000 NVMEM. |
dflet | 0:9cb694f00b7b | 138 | //! The default value on CC3000 is 14400 seconds. |
dflet | 0:9cb694f00b7b | 139 | //! |
dflet | 0:9cb694f00b7b | 140 | //! @param aucARP ARP refresh timeout, if ARP entry is not updated by |
dflet | 0:9cb694f00b7b | 141 | //! incoming packet, the ARP entry will be deleted by |
dflet | 0:9cb694f00b7b | 142 | //! the end of the timeout. |
dflet | 0:9cb694f00b7b | 143 | //! Range: [0-0xffffffff] seconds, 0 == infinity ARP timeout |
dflet | 0:9cb694f00b7b | 144 | //! Resolution: 10 seconds. Influence: on runtime. |
dflet | 0:9cb694f00b7b | 145 | //! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds |
dflet | 0:9cb694f00b7b | 146 | //! The parameter is saved into the CC3000 NVMEM. |
dflet | 0:9cb694f00b7b | 147 | //! The default value on CC3000 is 3600 seconds. |
dflet | 0:9cb694f00b7b | 148 | //! |
dflet | 0:9cb694f00b7b | 149 | //! @param aucKeepalive Keepalive event sent by the end of keepalive timeout |
dflet | 0:9cb694f00b7b | 150 | //! Range: [0-0xffffffff] seconds, 0 == infinity timeout |
dflet | 0:9cb694f00b7b | 151 | //! Resolution: 10 seconds. |
dflet | 0:9cb694f00b7b | 152 | //! Influence: on runtime. |
dflet | 0:9cb694f00b7b | 153 | //! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec |
dflet | 0:9cb694f00b7b | 154 | //! The parameter is saved into the CC3000 NVMEM. |
dflet | 0:9cb694f00b7b | 155 | //! The default value on CC3000 is 10 seconds. |
dflet | 0:9cb694f00b7b | 156 | //! |
dflet | 0:9cb694f00b7b | 157 | //! @param aucInactivity Socket inactivity timeout, socket timeout is |
dflet | 0:9cb694f00b7b | 158 | //! refreshed by incoming or outgoing packet, by the |
dflet | 0:9cb694f00b7b | 159 | //! end of the socket timeout the socket will be closed |
dflet | 0:9cb694f00b7b | 160 | //! Range: [0-0xffffffff] sec, 0 == infinity timeout. |
dflet | 0:9cb694f00b7b | 161 | //! Resolution: 10 seconds. Influence: on runtime. |
dflet | 0:9cb694f00b7b | 162 | //! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec |
dflet | 0:9cb694f00b7b | 163 | //! The parameter is saved into the CC3000 NVMEM. |
dflet | 0:9cb694f00b7b | 164 | //! The default value on CC3000 is 60 seconds. |
dflet | 0:9cb694f00b7b | 165 | //! |
dflet | 0:9cb694f00b7b | 166 | //! @return return on success 0, otherwise error. |
dflet | 0:9cb694f00b7b | 167 | //! |
dflet | 0:9cb694f00b7b | 168 | //! @brief Set new timeout values. Function set new timeout values for: |
dflet | 0:9cb694f00b7b | 169 | //! DHCP lease timeout, ARP refresh timeout, keepalive event |
dflet | 0:9cb694f00b7b | 170 | //! timeout and socket inactivity timeout |
dflet | 0:9cb694f00b7b | 171 | //! |
dflet | 0:9cb694f00b7b | 172 | //! @note If a parameter set to non zero value which is less than 20s, |
dflet | 0:9cb694f00b7b | 173 | //! it will be set automatically to 20s. |
dflet | 0:9cb694f00b7b | 174 | //! |
dflet | 0:9cb694f00b7b | 175 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 176 | |
dflet | 0:9cb694f00b7b | 177 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 178 | long |
dflet | 0:9cb694f00b7b | 179 | netapp_timeout_values(unsigned long *aucDHCP, unsigned long *aucARP,unsigned long *aucKeepalive, unsigned long *aucInactivity) |
dflet | 0:9cb694f00b7b | 180 | { |
dflet | 0:9cb694f00b7b | 181 | signed char scRet; |
dflet | 0:9cb694f00b7b | 182 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 183 | unsigned char *args; |
dflet | 0:9cb694f00b7b | 184 | |
dflet | 0:9cb694f00b7b | 185 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 186 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 187 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 188 | |
dflet | 0:9cb694f00b7b | 189 | // Set minimal values of timers |
dflet | 0:9cb694f00b7b | 190 | MIN_TIMER_SET(*aucDHCP) |
dflet | 0:9cb694f00b7b | 191 | MIN_TIMER_SET(*aucARP) |
dflet | 0:9cb694f00b7b | 192 | MIN_TIMER_SET(*aucKeepalive) |
dflet | 0:9cb694f00b7b | 193 | MIN_TIMER_SET(*aucInactivity) |
dflet | 0:9cb694f00b7b | 194 | |
dflet | 0:9cb694f00b7b | 195 | // Fill in temporary command buffer |
dflet | 0:9cb694f00b7b | 196 | args = UINT32_TO_STREAM(args, *aucDHCP); |
dflet | 0:9cb694f00b7b | 197 | args = UINT32_TO_STREAM(args, *aucARP); |
dflet | 0:9cb694f00b7b | 198 | args = UINT32_TO_STREAM(args, *aucKeepalive); |
dflet | 0:9cb694f00b7b | 199 | args = UINT32_TO_STREAM(args, *aucInactivity); |
dflet | 0:9cb694f00b7b | 200 | |
dflet | 0:9cb694f00b7b | 201 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 202 | hci_command_send(HCI_NETAPP_SET_TIMERS, ptr, NETAPP_SET_TIMER_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 203 | |
dflet | 0:9cb694f00b7b | 204 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 205 | SimpleLinkWaitEvent(HCI_NETAPP_SET_TIMERS, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 206 | |
dflet | 0:9cb694f00b7b | 207 | return(scRet); |
dflet | 0:9cb694f00b7b | 208 | } |
dflet | 0:9cb694f00b7b | 209 | #endif |
dflet | 0:9cb694f00b7b | 210 | |
dflet | 0:9cb694f00b7b | 211 | |
dflet | 0:9cb694f00b7b | 212 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 213 | // |
dflet | 0:9cb694f00b7b | 214 | //! netapp_ping_send |
dflet | 0:9cb694f00b7b | 215 | //! |
dflet | 0:9cb694f00b7b | 216 | //! @param ip destination IP address |
dflet | 0:9cb694f00b7b | 217 | //! @param pingAttempts number of echo requests to send |
dflet | 0:9cb694f00b7b | 218 | //! @param pingSize send buffer size which may be up to 1400 bytes |
dflet | 0:9cb694f00b7b | 219 | //! @param pingTimeout Time to wait for a response,in milliseconds. |
dflet | 0:9cb694f00b7b | 220 | //! |
dflet | 0:9cb694f00b7b | 221 | //! @return return on success 0, otherwise error. |
dflet | 0:9cb694f00b7b | 222 | //! |
dflet | 0:9cb694f00b7b | 223 | //! @brief send ICMP ECHO_REQUEST to network hosts |
dflet | 0:9cb694f00b7b | 224 | //! |
dflet | 0:9cb694f00b7b | 225 | //! @note If an operation finished successfully asynchronous ping report |
dflet | 0:9cb694f00b7b | 226 | //! event will be generated. The report structure is as defined |
dflet | 0:9cb694f00b7b | 227 | //! by structure netapp_pingreport_args_t. |
dflet | 0:9cb694f00b7b | 228 | //! |
dflet | 0:9cb694f00b7b | 229 | //! @warning Calling this function while a previous Ping Requests are in |
dflet | 0:9cb694f00b7b | 230 | //! progress will stop the previous ping request. |
dflet | 0:9cb694f00b7b | 231 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 232 | |
dflet | 0:9cb694f00b7b | 233 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 234 | long |
dflet | 0:9cb694f00b7b | 235 | netapp_ping_send(unsigned long *ip, unsigned long ulPingAttempts, unsigned long ulPingSize, unsigned long ulPingTimeout) |
dflet | 0:9cb694f00b7b | 236 | { |
dflet | 0:9cb694f00b7b | 237 | signed char scRet; |
dflet | 0:9cb694f00b7b | 238 | unsigned char *ptr, *args; |
dflet | 0:9cb694f00b7b | 239 | |
dflet | 0:9cb694f00b7b | 240 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 241 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 242 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 243 | |
dflet | 0:9cb694f00b7b | 244 | // Fill in temporary command buffer |
dflet | 0:9cb694f00b7b | 245 | args = UINT32_TO_STREAM(args, *ip); |
dflet | 0:9cb694f00b7b | 246 | args = UINT32_TO_STREAM(args, ulPingAttempts); |
dflet | 0:9cb694f00b7b | 247 | args = UINT32_TO_STREAM(args, ulPingSize); |
dflet | 0:9cb694f00b7b | 248 | args = UINT32_TO_STREAM(args, ulPingTimeout); |
dflet | 0:9cb694f00b7b | 249 | |
dflet | 0:9cb694f00b7b | 250 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 251 | hci_command_send(HCI_NETAPP_PING_SEND, ptr, NETAPP_PING_SEND_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 252 | |
dflet | 0:9cb694f00b7b | 253 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 254 | SimpleLinkWaitEvent(HCI_NETAPP_PING_SEND, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 255 | |
dflet | 0:9cb694f00b7b | 256 | return(scRet); |
dflet | 0:9cb694f00b7b | 257 | } |
dflet | 0:9cb694f00b7b | 258 | #endif |
dflet | 0:9cb694f00b7b | 259 | |
dflet | 0:9cb694f00b7b | 260 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 261 | // |
dflet | 0:9cb694f00b7b | 262 | //! netapp_ping_report |
dflet | 0:9cb694f00b7b | 263 | //! |
dflet | 0:9cb694f00b7b | 264 | //! @param none |
dflet | 0:9cb694f00b7b | 265 | //! |
dflet | 0:9cb694f00b7b | 266 | //! @return none |
dflet | 0:9cb694f00b7b | 267 | //! |
dflet | 0:9cb694f00b7b | 268 | //! @brief Request for ping status. This API triggers the CC3000 to send |
dflet | 0:9cb694f00b7b | 269 | //! asynchronous events: HCI_EVNT_WLAN_ASYNC_PING_REPORT. |
dflet | 0:9cb694f00b7b | 270 | //! This event will carry the report structure: |
dflet | 0:9cb694f00b7b | 271 | //! netapp_pingreport_args_t. This structure is filled in with ping |
dflet | 0:9cb694f00b7b | 272 | //! results up till point of triggering API. |
dflet | 0:9cb694f00b7b | 273 | //! netapp_pingreport_args_t:\n packets_sent - echo sent, |
dflet | 0:9cb694f00b7b | 274 | //! packets_received - echo reply, min_round_time - minimum |
dflet | 0:9cb694f00b7b | 275 | //! round time, max_round_time - max round time, |
dflet | 0:9cb694f00b7b | 276 | //! avg_round_time - average round time |
dflet | 0:9cb694f00b7b | 277 | //! |
dflet | 0:9cb694f00b7b | 278 | //! @note When a ping operation is not active, the returned structure |
dflet | 0:9cb694f00b7b | 279 | //! fields are 0. |
dflet | 0:9cb694f00b7b | 280 | //! |
dflet | 0:9cb694f00b7b | 281 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 282 | |
dflet | 0:9cb694f00b7b | 283 | |
dflet | 0:9cb694f00b7b | 284 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 285 | void netapp_ping_report() |
dflet | 0:9cb694f00b7b | 286 | { |
dflet | 0:9cb694f00b7b | 287 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 288 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 289 | signed char scRet; |
dflet | 0:9cb694f00b7b | 290 | |
dflet | 0:9cb694f00b7b | 291 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 292 | |
dflet | 0:9cb694f00b7b | 293 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 294 | hci_command_send(HCI_NETAPP_PING_REPORT, ptr, 0); |
dflet | 0:9cb694f00b7b | 295 | |
dflet | 0:9cb694f00b7b | 296 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 297 | SimpleLinkWaitEvent(HCI_NETAPP_PING_REPORT, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 298 | } |
dflet | 0:9cb694f00b7b | 299 | #endif |
dflet | 0:9cb694f00b7b | 300 | |
dflet | 0:9cb694f00b7b | 301 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 302 | // |
dflet | 0:9cb694f00b7b | 303 | //! netapp_ping_stop |
dflet | 0:9cb694f00b7b | 304 | //! |
dflet | 0:9cb694f00b7b | 305 | //! @param none |
dflet | 0:9cb694f00b7b | 306 | //! |
dflet | 0:9cb694f00b7b | 307 | //! @return On success, zero is returned. On error, -1 is returned. |
dflet | 0:9cb694f00b7b | 308 | //! |
dflet | 0:9cb694f00b7b | 309 | //! @brief Stop any ping request. |
dflet | 0:9cb694f00b7b | 310 | //! |
dflet | 0:9cb694f00b7b | 311 | //! |
dflet | 0:9cb694f00b7b | 312 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 313 | |
dflet | 0:9cb694f00b7b | 314 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 315 | long netapp_ping_stop() |
dflet | 0:9cb694f00b7b | 316 | { |
dflet | 0:9cb694f00b7b | 317 | signed char scRet; |
dflet | 0:9cb694f00b7b | 318 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 319 | |
dflet | 0:9cb694f00b7b | 320 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 321 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 322 | |
dflet | 0:9cb694f00b7b | 323 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 324 | hci_command_send(HCI_NETAPP_PING_STOP, ptr, 0); |
dflet | 0:9cb694f00b7b | 325 | |
dflet | 0:9cb694f00b7b | 326 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 327 | SimpleLinkWaitEvent(HCI_NETAPP_PING_STOP, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 328 | |
dflet | 0:9cb694f00b7b | 329 | return(scRet); |
dflet | 0:9cb694f00b7b | 330 | } |
dflet | 0:9cb694f00b7b | 331 | #endif |
dflet | 0:9cb694f00b7b | 332 | |
dflet | 0:9cb694f00b7b | 333 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 334 | // |
dflet | 0:9cb694f00b7b | 335 | //! netapp_ipconfig |
dflet | 0:9cb694f00b7b | 336 | //! |
dflet | 0:9cb694f00b7b | 337 | //! @param[out] ipconfig This argument is a pointer to a |
dflet | 0:9cb694f00b7b | 338 | //! tNetappIpconfigRetArgs structure. This structure is |
dflet | 0:9cb694f00b7b | 339 | //! filled in with the network interface configuration. |
dflet | 0:9cb694f00b7b | 340 | //! tNetappIpconfigRetArgs:\n aucIP - ip address, |
dflet | 0:9cb694f00b7b | 341 | //! aucSubnetMask - mask, aucDefaultGateway - default |
dflet | 0:9cb694f00b7b | 342 | //! gateway address, aucDHCPServer - dhcp server address |
dflet | 0:9cb694f00b7b | 343 | //! aucDNSServer - dns server address, uaMacAddr - mac |
dflet | 0:9cb694f00b7b | 344 | //! address, uaSSID - connected AP ssid |
dflet | 0:9cb694f00b7b | 345 | //! |
dflet | 0:9cb694f00b7b | 346 | //! @return none |
dflet | 0:9cb694f00b7b | 347 | //! |
dflet | 0:9cb694f00b7b | 348 | //! @brief Obtain the CC3000 Network interface information. |
dflet | 0:9cb694f00b7b | 349 | //! Note that the information is available only after the WLAN |
dflet | 0:9cb694f00b7b | 350 | //! connection was established. Calling this function before |
dflet | 0:9cb694f00b7b | 351 | //! associated, will cause non-defined values to be returned. |
dflet | 0:9cb694f00b7b | 352 | //! |
dflet | 0:9cb694f00b7b | 353 | //! @note The function is useful for figuring out the IP Configuration of |
dflet | 0:9cb694f00b7b | 354 | //! the device when DHCP is used and for figuring out the SSID of |
dflet | 0:9cb694f00b7b | 355 | //! the Wireless network the device is associated with. |
dflet | 0:9cb694f00b7b | 356 | //! |
dflet | 0:9cb694f00b7b | 357 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 358 | |
dflet | 0:9cb694f00b7b | 359 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 360 | void netapp_ipconfig( tNetappIpconfigRetArgs * ipconfig ) |
dflet | 0:9cb694f00b7b | 361 | { |
dflet | 0:9cb694f00b7b | 362 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 363 | |
dflet | 0:9cb694f00b7b | 364 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 365 | |
dflet | 0:9cb694f00b7b | 366 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 367 | hci_command_send(HCI_NETAPP_IPCONFIG, ptr, 0); |
dflet | 0:9cb694f00b7b | 368 | |
dflet | 0:9cb694f00b7b | 369 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 370 | SimpleLinkWaitEvent(HCI_NETAPP_IPCONFIG, (long*)ipconfig ); |
dflet | 0:9cb694f00b7b | 371 | |
dflet | 0:9cb694f00b7b | 372 | } |
dflet | 0:9cb694f00b7b | 373 | #else |
dflet | 0:9cb694f00b7b | 374 | void netapp_ipconfig( tNetappIpconfigRetArgs * ipconfig ) |
dflet | 0:9cb694f00b7b | 375 | { |
dflet | 0:9cb694f00b7b | 376 | |
dflet | 0:9cb694f00b7b | 377 | } |
dflet | 0:9cb694f00b7b | 378 | #endif |
dflet | 0:9cb694f00b7b | 379 | |
dflet | 0:9cb694f00b7b | 380 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 381 | // |
dflet | 0:9cb694f00b7b | 382 | //! netapp_arp_flush |
dflet | 0:9cb694f00b7b | 383 | //! |
dflet | 0:9cb694f00b7b | 384 | //! @param none |
dflet | 0:9cb694f00b7b | 385 | //! |
dflet | 0:9cb694f00b7b | 386 | //! @return none |
dflet | 0:9cb694f00b7b | 387 | //! |
dflet | 0:9cb694f00b7b | 388 | //! @brief Flushes ARP table |
dflet | 0:9cb694f00b7b | 389 | //! |
dflet | 0:9cb694f00b7b | 390 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 391 | |
dflet | 0:9cb694f00b7b | 392 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 393 | long netapp_arp_flush(void) |
dflet | 0:9cb694f00b7b | 394 | { |
dflet | 0:9cb694f00b7b | 395 | signed char scRet; |
dflet | 0:9cb694f00b7b | 396 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 397 | |
dflet | 0:9cb694f00b7b | 398 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 399 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 400 | |
dflet | 0:9cb694f00b7b | 401 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 402 | hci_command_send(HCI_NETAPP_ARP_FLUSH, ptr, 0); |
dflet | 0:9cb694f00b7b | 403 | |
dflet | 0:9cb694f00b7b | 404 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 405 | SimpleLinkWaitEvent(HCI_NETAPP_ARP_FLUSH, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 406 | |
dflet | 0:9cb694f00b7b | 407 | return(scRet); |
dflet | 0:9cb694f00b7b | 408 | } |
dflet | 0:9cb694f00b7b | 409 | #endif |
dflet | 0:9cb694f00b7b | 410 | |
dflet | 0:9cb694f00b7b | 411 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 412 | // |
dflet | 0:9cb694f00b7b | 413 | //! netapp_set_debug_level |
dflet | 0:9cb694f00b7b | 414 | //! |
dflet | 0:9cb694f00b7b | 415 | //! @param[in] level debug level. Bitwise [0-8], |
dflet | 0:9cb694f00b7b | 416 | //! 0(disable)or 1(enable).\n Bitwise map: 0 - Critical |
dflet | 0:9cb694f00b7b | 417 | //! message, 1 information message, 2 - core messages, 3 - |
dflet | 0:9cb694f00b7b | 418 | //! HCI messages, 4 - Network stack messages, 5 - wlan |
dflet | 0:9cb694f00b7b | 419 | //! messages, 6 - wlan driver messages, 7 - epprom messages, |
dflet | 0:9cb694f00b7b | 420 | //! 8 - general messages. Default: 0x13f. Saved: no |
dflet | 0:9cb694f00b7b | 421 | //! |
dflet | 0:9cb694f00b7b | 422 | //! @return On success, zero is returned. On error, -1 is returned |
dflet | 0:9cb694f00b7b | 423 | //! |
dflet | 0:9cb694f00b7b | 424 | //! @brief Debug messages sent via the UART debug channel, this function |
dflet | 0:9cb694f00b7b | 425 | //! enable/disable the debug level |
dflet | 0:9cb694f00b7b | 426 | //! |
dflet | 0:9cb694f00b7b | 427 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 428 | |
dflet | 0:9cb694f00b7b | 429 | |
dflet | 0:9cb694f00b7b | 430 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 431 | long netapp_set_debug_level(unsigned long ulLevel) |
dflet | 0:9cb694f00b7b | 432 | { |
dflet | 0:9cb694f00b7b | 433 | signed char scRet; |
dflet | 0:9cb694f00b7b | 434 | unsigned char *ptr, *args; |
dflet | 0:9cb694f00b7b | 435 | |
dflet | 0:9cb694f00b7b | 436 | scRet = EFAIL; |
dflet | 0:9cb694f00b7b | 437 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 438 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 439 | |
dflet | 0:9cb694f00b7b | 440 | // |
dflet | 0:9cb694f00b7b | 441 | // Fill in temporary command buffer |
dflet | 0:9cb694f00b7b | 442 | // |
dflet | 0:9cb694f00b7b | 443 | args = UINT32_TO_STREAM(args, ulLevel); |
dflet | 0:9cb694f00b7b | 444 | |
dflet | 0:9cb694f00b7b | 445 | |
dflet | 0:9cb694f00b7b | 446 | // |
dflet | 0:9cb694f00b7b | 447 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 448 | // |
dflet | 0:9cb694f00b7b | 449 | hci_command_send(HCI_NETAPP_SET_DEBUG_LEVEL, ptr, NETAPP_SET_DEBUG_LEVEL_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 450 | |
dflet | 0:9cb694f00b7b | 451 | // |
dflet | 0:9cb694f00b7b | 452 | // Wait for command complete event |
dflet | 0:9cb694f00b7b | 453 | // |
dflet | 0:9cb694f00b7b | 454 | SimpleLinkWaitEvent(HCI_NETAPP_SET_DEBUG_LEVEL, (long*)&scRet); |
dflet | 0:9cb694f00b7b | 455 | |
dflet | 0:9cb694f00b7b | 456 | return(scRet); |
dflet | 0:9cb694f00b7b | 457 | |
dflet | 0:9cb694f00b7b | 458 | } |
dflet | 0:9cb694f00b7b | 459 | #endif |
dflet | 0:9cb694f00b7b | 460 |