Host library for controlling a WiConnect enabled Wi-Fi module.

Dependents:   wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more

Committer:
dan_ackme
Date:
Wed Aug 13 04:41:04 2014 -0700
Revision:
16:7f1d6d359787
Parent:
13:2b51f5267c92
Child:
17:7268f365676b
updated documentation and copyright

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 16:7f1d6d359787 1 /**
dan_ackme 16:7f1d6d359787 2 * ACKme WiConnect Host Library is licensed under the BSD licence:
dan_ackme 16:7f1d6d359787 3 *
dan_ackme 16:7f1d6d359787 4 * Copyright (c)2014 ACKme Networks.
dan_ackme 16:7f1d6d359787 5 * All rights reserved.
dan_ackme 16:7f1d6d359787 6 *
dan_ackme 16:7f1d6d359787 7 * Redistribution and use in source and binary forms, with or without modification,
dan_ackme 16:7f1d6d359787 8 * are permitted provided that the following conditions are met:
dan_ackme 16:7f1d6d359787 9 *
dan_ackme 16:7f1d6d359787 10 * 1. Redistributions of source code must retain the above copyright notice,
dan_ackme 16:7f1d6d359787 11 * this list of conditions and the following disclaimer.
dan_ackme 16:7f1d6d359787 12 * 2. Redistributions in binary form must reproduce the above copyright notice,
dan_ackme 16:7f1d6d359787 13 * this list of conditions and the following disclaimer in the documentation
dan_ackme 16:7f1d6d359787 14 * and/or other materials provided with the distribution.
dan_ackme 16:7f1d6d359787 15 * 3. The name of the author may not be used to endorse or promote products
dan_ackme 16:7f1d6d359787 16 * derived from this software without specific prior written permission.
dan_ackme 16:7f1d6d359787 17 *
dan_ackme 16:7f1d6d359787 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED
dan_ackme 16:7f1d6d359787 19 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
dan_ackme 16:7f1d6d359787 20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
dan_ackme 16:7f1d6d359787 21 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
dan_ackme 16:7f1d6d359787 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
dan_ackme 16:7f1d6d359787 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
dan_ackme 16:7f1d6d359787 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
dan_ackme 16:7f1d6d359787 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
dan_ackme 16:7f1d6d359787 26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
dan_ackme 16:7f1d6d359787 27 * OF SUCH DAMAGE.
dan_ackme 0:ea85c4bb5e1f 28 */
dan_ackme 0:ea85c4bb5e1f 29 #pragma once
dan_ackme 0:ea85c4bb5e1f 30
dan_ackme 0:ea85c4bb5e1f 31 #include <stdint.h>
dan_ackme 0:ea85c4bb5e1f 32 #include <stdarg.h>
dan_ackme 0:ea85c4bb5e1f 33
dan_ackme 0:ea85c4bb5e1f 34 #include "sdk.h"
dan_ackme 0:ea85c4bb5e1f 35
dan_ackme 11:ea484e1b7fc4 36 /**
dan_ackme 11:ea484e1b7fc4 37 * @namespace wiconnect
dan_ackme 11:ea484e1b7fc4 38 *
dan_ackme 11:ea484e1b7fc4 39 * @brief The entire Wiconnect Library is contained within the 'wiconnect' namespace
dan_ackme 11:ea484e1b7fc4 40 */
dan_ackme 0:ea85c4bb5e1f 41 namespace wiconnect {
dan_ackme 0:ea85c4bb5e1f 42
dan_ackme 0:ea85c4bb5e1f 43
dan_ackme 0:ea85c4bb5e1f 44 #ifndef MIN
dan_ackme 11:ea484e1b7fc4 45 /**
dan_ackme 11:ea484e1b7fc4 46 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 47 * @def MIN(x,y)
dan_ackme 11:ea484e1b7fc4 48 * @brief Computes the minimum of \a x and \a y.
dan_ackme 11:ea484e1b7fc4 49 */
dan_ackme 0:ea85c4bb5e1f 50 #define MIN(x,y) ((x) < (y) ? (x) : (y))
dan_ackme 0:ea85c4bb5e1f 51 #endif
dan_ackme 0:ea85c4bb5e1f 52 #ifndef MAX
dan_ackme 11:ea484e1b7fc4 53 /**
dan_ackme 11:ea484e1b7fc4 54 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 55 * @def MAX(x,y)
dan_ackme 11:ea484e1b7fc4 56 * @brief Computes the maximum of \a x and \a y.
dan_ackme 11:ea484e1b7fc4 57 */
dan_ackme 0:ea85c4bb5e1f 58 #define MAX(x,y) ((x) > (y) ? (x) : (y))
dan_ackme 0:ea85c4bb5e1f 59 #endif
dan_ackme 11:ea484e1b7fc4 60 /**
dan_ackme 11:ea484e1b7fc4 61 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 62 * @def ALIGN_n(x, n)
dan_ackme 11:ea484e1b7fc4 63 * @brief Align \a x to \a n bytes (\a n must be power of 2)
dan_ackme 11:ea484e1b7fc4 64 */
dan_ackme 0:ea85c4bb5e1f 65 #define ALIGN_n(x, n) ((((uint32_t)x) + ((n)-1)) & ~((n)-1))
dan_ackme 11:ea484e1b7fc4 66 /**
dan_ackme 11:ea484e1b7fc4 67 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 68 * @def ALIGN_8(x)
dan_ackme 11:ea484e1b7fc4 69 * @brief Align \a x to 8 bytes
dan_ackme 11:ea484e1b7fc4 70 */
dan_ackme 0:ea85c4bb5e1f 71 #define ALIGN_8(x) ALIGN_n(x, 8)
dan_ackme 11:ea484e1b7fc4 72 /**
dan_ackme 11:ea484e1b7fc4 73 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 74 * @def ALIGN_4(x)
dan_ackme 11:ea484e1b7fc4 75 * @brief Align \a x to 4 bytes
dan_ackme 11:ea484e1b7fc4 76 */
dan_ackme 0:ea85c4bb5e1f 77 #define ALIGN_4(x) ALIGN_n(x, 4)
dan_ackme 11:ea484e1b7fc4 78 /**
dan_ackme 11:ea484e1b7fc4 79 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 80 * @def ARRAY_COUNT(x)
dan_ackme 11:ea484e1b7fc4 81 * @brief Return number of elements in static array \a x
dan_ackme 11:ea484e1b7fc4 82 */
dan_ackme 0:ea85c4bb5e1f 83 #define ARRAY_COUNT(x) (sizeof (x) / sizeof *(x))
dan_ackme 0:ea85c4bb5e1f 84
dan_ackme 0:ea85c4bb5e1f 85
dan_ackme 11:ea484e1b7fc4 86 /**
dan_ackme 11:ea484e1b7fc4 87 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 88 * @def WICONNECT_FAILED(result, func)
dan_ackme 11:ea484e1b7fc4 89 * @brief Populates \a result with return value from \a func, returns TRUE if return value contains error.
dan_ackme 11:ea484e1b7fc4 90 */
dan_ackme 0:ea85c4bb5e1f 91 #define WICONNECT_FAILED(result, func) ((int)(result = (func)) < (int)wiconnect::WICONNECT_SUCCESS)
dan_ackme 11:ea484e1b7fc4 92
dan_ackme 11:ea484e1b7fc4 93 /**
dan_ackme 11:ea484e1b7fc4 94 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 95 * @def WICONNECT_SUCCEEDED(result, func)
dan_ackme 11:ea484e1b7fc4 96 * @brief Populates \a result with return value from \a func, returns TRUE if return value is WICONNECT_SUCCESS.
dan_ackme 11:ea484e1b7fc4 97 */
dan_ackme 0:ea85c4bb5e1f 98 #define WICONNECT_SUCCEEDED(result, func) ((result = (func)) == wiconnect::WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 99
dan_ackme 0:ea85c4bb5e1f 100
dan_ackme 11:ea484e1b7fc4 101 /**
dan_ackme 11:ea484e1b7fc4 102 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 103 * @brief The maximum command size that may be sent to the WiConnect WiFi module
dan_ackme 11:ea484e1b7fc4 104 */
dan_ackme 0:ea85c4bb5e1f 105 #define WICONNECT_MAX_CMD_SIZE 128
dan_ackme 11:ea484e1b7fc4 106 /**
dan_ackme 11:ea484e1b7fc4 107 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 108 * @brief The maximum WiConnect WiFi module version string size
dan_ackme 11:ea484e1b7fc4 109 */
dan_ackme 0:ea85c4bb5e1f 110 #define WICONNECT_MAX_VERSION_SIZE 96
dan_ackme 11:ea484e1b7fc4 111 /**
dan_ackme 11:ea484e1b7fc4 112 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 113 * @brief The maximum number of simulanteous opened sockets
dan_ackme 11:ea484e1b7fc4 114 */
dan_ackme 0:ea85c4bb5e1f 115 #define WICONNECT_MAX_SOCKETS 8
dan_ackme 11:ea484e1b7fc4 116 /**
dan_ackme 11:ea484e1b7fc4 117 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 118 * @brief The maximum server string length
dan_ackme 11:ea484e1b7fc4 119 */
dan_ackme 11:ea484e1b7fc4 120 #define WICONNECT_MAX_HOST_SIZE 64
dan_ackme 11:ea484e1b7fc4 121 /**
dan_ackme 11:ea484e1b7fc4 122 * @ingroup api_core_macro
dan_ackme 11:ea484e1b7fc4 123 * @brief The maximum Wiconnect Module flash filesystem filename length
dan_ackme 11:ea484e1b7fc4 124 */
dan_ackme 11:ea484e1b7fc4 125 #define WICONNECT_MAX_FILENAME_SIZE 96
dan_ackme 0:ea85c4bb5e1f 126
dan_ackme 0:ea85c4bb5e1f 127
dan_ackme 11:ea484e1b7fc4 128
dan_ackme 11:ea484e1b7fc4 129 /**
dan_ackme 11:ea484e1b7fc4 130 * @ingroup api_socket_macro
dan_ackme 11:ea484e1b7fc4 131 * @brief Default which indicates to use the most optimal port
dan_ackme 11:ea484e1b7fc4 132 */
dan_ackme 11:ea484e1b7fc4 133 #define SOCKET_ANY_PORT (uint16_t)0
dan_ackme 11:ea484e1b7fc4 134 /**
dan_ackme 11:ea484e1b7fc4 135 * @ingroup api_socket_macro
dan_ackme 11:ea484e1b7fc4 136 * @brief Default which indicates to use the most optimal port
dan_ackme 11:ea484e1b7fc4 137 */
dan_ackme 0:ea85c4bb5e1f 138 #define SOCKET_INVALID_HANDLE ((uint8_t)0xFF)
dan_ackme 0:ea85c4bb5e1f 139
dan_ackme 0:ea85c4bb5e1f 140
dan_ackme 11:ea484e1b7fc4 141 /**
dan_ackme 13:2b51f5267c92 142 * @ingroup api_core_types
dan_ackme 11:ea484e1b7fc4 143 * @brief API Result code
dan_ackme 11:ea484e1b7fc4 144 */
dan_ackme 0:ea85c4bb5e1f 145 typedef enum
dan_ackme 0:ea85c4bb5e1f 146 {
dan_ackme 11:ea484e1b7fc4 147 // Status Codes
dan_ackme 11:ea484e1b7fc4 148 WICONNECT_ABORTED = 3, ///< Command was aborted
dan_ackme 11:ea484e1b7fc4 149 WICONNECT_IDLE = 2, ///< Library not processing any commands
dan_ackme 11:ea484e1b7fc4 150 WICONNECT_PROCESSING = 1, ///< Library processing current command
dan_ackme 11:ea484e1b7fc4 151 WICONNECT_SUCCESS = 0, ///< Command successfully completed
dan_ackme 11:ea484e1b7fc4 152
dan_ackme 11:ea484e1b7fc4 153 // Error codes
dan_ackme 11:ea484e1b7fc4 154 WICONNECT_ERROR = -1, ///< Generic error
dan_ackme 11:ea484e1b7fc4 155 WICONNECT_CMD_RESPONSE_ERROR = -2, ///< Module returned error code
dan_ackme 11:ea484e1b7fc4 156 WICONNECT_NULL_BUFFER = -3, ///< Null buffer supplied
dan_ackme 11:ea484e1b7fc4 157 WICONNECT_NOT_INITIALIZED = -4, ///< Library not initialed
dan_ackme 11:ea484e1b7fc4 158 WICONNECT_OVERFLOW = -5, ///< Buffer overflowed
dan_ackme 11:ea484e1b7fc4 159 WICONNECT_TIMEOUT = -6, ///< Command timed out
dan_ackme 11:ea484e1b7fc4 160 // WICONNECT_RESPONSE_HANDLER_NULL = -7, ///<
dan_ackme 11:ea484e1b7fc4 161 WICONNECT_RESPONSE_PARSE_ERROR = -8, ///< Failed to parse module response
dan_ackme 11:ea484e1b7fc4 162 WICONNECT_ANOTHER_CMD_EXECUTING = -9, ///< Currently executing another command
dan_ackme 11:ea484e1b7fc4 163 WICONNECT_BAD_ARG = -10, ///< Bad argument supplied
dan_ackme 11:ea484e1b7fc4 164 WICONNECT_UNSUPPORTED = -11, ///< Command / parameter not supported
dan_ackme 11:ea484e1b7fc4 165 WICONNECT_PINNAME_TO_GPIO_MAPPER_NULL = -12, ///< The pinToGpioMapper hasn't been set
dan_ackme 11:ea484e1b7fc4 166 WICONNECT_DUPLICATE = -13, ///< Duplicate value
dan_ackme 11:ea484e1b7fc4 167 WICONNECT_NOT_FOUND = -14, ///< Not found
dan_ackme 11:ea484e1b7fc4 168 WICONNECT_PINNAME_TO_GPIO_NO_MAPPING = -15, ///< No mapping found for given pin
dan_ackme 11:ea484e1b7fc4 169 WICONNECT_NOT_CONNECTED = -16, ///< Not connected
dan_ackme 11:ea484e1b7fc4 170 WICONNECT_UNDERFLOW = -17, ///< Data underflow
dan_ackme 11:ea484e1b7fc4 171 WICONNECT_MONITOR_NOT_AVAILABLE = -18, ///< Background processing monitor is not available (i.e in use)
dan_ackme 11:ea484e1b7fc4 172 WICONNECT_NOT_OPENED_FOR_READING = -19, ///< The file is not open for reading
dan_ackme 0:ea85c4bb5e1f 173 } WiconnectResult;
dan_ackme 0:ea85c4bb5e1f 174
dan_ackme 0:ea85c4bb5e1f 175
dan_ackme 11:ea484e1b7fc4 176 /**
dan_ackme 11:ea484e1b7fc4 177 * @ingroup types_core
dan_ackme 11:ea484e1b7fc4 178 * @brief Function pointer for mapping from a host pin to a WiConnect Module GPIO.
dan_ackme 11:ea484e1b7fc4 179 *
dan_ackme 11:ea484e1b7fc4 180 * @param[in] pin A host pin
dan_ackme 11:ea484e1b7fc4 181 * @return The corresponding WiConnect Module GPIO (which the given pin is physically connected).
dan_ackme 11:ea484e1b7fc4 182 * Return -1 if no mapping is available.
dan_ackme 11:ea484e1b7fc4 183 */
dan_ackme 11:ea484e1b7fc4 184 typedef int8_t (*PinToGpioMapper)(Pin pin);
dan_ackme 11:ea484e1b7fc4 185
dan_ackme 11:ea484e1b7fc4 186 /**
dan_ackme 11:ea484e1b7fc4 187 * @brief Generic buffer type
dan_ackme 13:2b51f5267c92 188 *
dan_ackme 13:2b51f5267c92 189 * @note Internal use only
dan_ackme 11:ea484e1b7fc4 190 */
dan_ackme 11:ea484e1b7fc4 191 typedef struct
dan_ackme 11:ea484e1b7fc4 192 {
dan_ackme 11:ea484e1b7fc4 193 int size;
dan_ackme 11:ea484e1b7fc4 194 uint8_t *buffer;
dan_ackme 11:ea484e1b7fc4 195 uint8_t *ptr;
dan_ackme 11:ea484e1b7fc4 196 int bytesPending;
dan_ackme 11:ea484e1b7fc4 197 bool allocated;
dan_ackme 11:ea484e1b7fc4 198 } Buffer;
dan_ackme 11:ea484e1b7fc4 199
dan_ackme 11:ea484e1b7fc4 200
dan_ackme 11:ea484e1b7fc4 201 // ----------------------------------------------------------------------------
dan_ackme 11:ea484e1b7fc4 202
dan_ackme 11:ea484e1b7fc4 203
dan_ackme 11:ea484e1b7fc4 204
dan_ackme 11:ea484e1b7fc4 205 /**
dan_ackme 13:2b51f5267c92 206 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 207 * @brief Network connection status
dan_ackme 11:ea484e1b7fc4 208 */
dan_ackme 0:ea85c4bb5e1f 209 typedef enum
dan_ackme 0:ea85c4bb5e1f 210 {
dan_ackme 11:ea484e1b7fc4 211 NETWORK_STATUS_DOWN, ///< Not connected to network
dan_ackme 11:ea484e1b7fc4 212 NETWORK_STATUS_WIFI_ONLY, ///< Connected to network but don't have IP address
dan_ackme 13:2b51f5267c92 213 NETWORK_STATUS_UP, ///< Conntected to network and have IP address
dan_ackme 13:2b51f5267c92 214 NETWORK_STATUS_JOINING ///< Joining a network
dan_ackme 0:ea85c4bb5e1f 215 } NetworkStatus;
dan_ackme 0:ea85c4bb5e1f 216
dan_ackme 11:ea484e1b7fc4 217 /**
dan_ackme 13:2b51f5267c92 218 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 219 * @brief Network RSSI signal level
dan_ackme 11:ea484e1b7fc4 220 */
dan_ackme 0:ea85c4bb5e1f 221 typedef enum
dan_ackme 0:ea85c4bb5e1f 222 {
dan_ackme 11:ea484e1b7fc4 223 NETWORK_RSSI_EXCELLENT = 0, ///< \> -20 dBm
dan_ackme 11:ea484e1b7fc4 224 NETWORK_RSSI_VERY_GOOD = 1, ///< \> -35 dBm
dan_ackme 11:ea484e1b7fc4 225 NETWORK_RSSI_GOOD = 2, ///< \> -50 dBm
dan_ackme 11:ea484e1b7fc4 226 NETWORK_RSSI_POOR = 3, ///< \> -70 dBm
dan_ackme 0:ea85c4bb5e1f 227 NETWORK_RSSI_VERY_POOR = 4, ///< < -71 dBm
dan_ackme 0:ea85c4bb5e1f 228 NETWORK_RSSI_UNKNOWN = 5 ///< Not available
dan_ackme 0:ea85c4bb5e1f 229 } NetworkSignalStrength;
dan_ackme 0:ea85c4bb5e1f 230
dan_ackme 11:ea484e1b7fc4 231 /**
dan_ackme 13:2b51f5267c92 232 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 233 * @brief Network security type
dan_ackme 11:ea484e1b7fc4 234 */
dan_ackme 0:ea85c4bb5e1f 235 typedef enum
dan_ackme 0:ea85c4bb5e1f 236 {
dan_ackme 0:ea85c4bb5e1f 237 NETWORK_SECURITY_OPEN,
dan_ackme 0:ea85c4bb5e1f 238 NETWORK_SECURITY_WEP_PSK,
dan_ackme 0:ea85c4bb5e1f 239 NETWORK_SECURITY_WPA_AES_PSK,
dan_ackme 0:ea85c4bb5e1f 240 NETWORK_SECURITY_WPA_TKIP_PSK,
dan_ackme 0:ea85c4bb5e1f 241 NETWORK_SECURITY_WPA2_AES_PSK,
dan_ackme 0:ea85c4bb5e1f 242 NETWORK_SECURITY_WPA2_MIXED_PSK,
dan_ackme 0:ea85c4bb5e1f 243 NETWORK_SECURITY_WPA2_TKIP_PSK,
dan_ackme 0:ea85c4bb5e1f 244 NETWORK_SECURITY_UNKNOWN
dan_ackme 0:ea85c4bb5e1f 245 } NetworkSecurity;
dan_ackme 0:ea85c4bb5e1f 246
dan_ackme 11:ea484e1b7fc4 247 /**
dan_ackme 13:2b51f5267c92 248 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 249 * @brief Network SSID type
dan_ackme 11:ea484e1b7fc4 250 */
dan_ackme 0:ea85c4bb5e1f 251 typedef struct
dan_ackme 0:ea85c4bb5e1f 252 {
dan_ackme 11:ea484e1b7fc4 253 uint8_t val[32]; ///< The raw data of the SSID (not necessarily a string)
dan_ackme 11:ea484e1b7fc4 254 uint8_t len; ///< The length in bytes of the SSID raw data
dan_ackme 0:ea85c4bb5e1f 255 } Ssid;
dan_ackme 0:ea85c4bb5e1f 256
dan_ackme 11:ea484e1b7fc4 257 /**
dan_ackme 13:2b51f5267c92 258 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 259 * @brief Network MAC Address type
dan_ackme 11:ea484e1b7fc4 260 */
dan_ackme 0:ea85c4bb5e1f 261 typedef struct
dan_ackme 0:ea85c4bb5e1f 262 {
dan_ackme 0:ea85c4bb5e1f 263 uint8_t octet[6];
dan_ackme 0:ea85c4bb5e1f 264 } MacAddress;
dan_ackme 11:ea484e1b7fc4 265
dan_ackme 11:ea484e1b7fc4 266 /**
dan_ackme 13:2b51f5267c92 267 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 268 * @brief Buffer to hold a MAC address string
dan_ackme 11:ea484e1b7fc4 269 */
dan_ackme 0:ea85c4bb5e1f 270 typedef char MacAddressStrBuffer[18];
dan_ackme 11:ea484e1b7fc4 271
dan_ackme 11:ea484e1b7fc4 272 /**
dan_ackme 13:2b51f5267c92 273 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 274 * @brief Buffer to hold a SSID string
dan_ackme 11:ea484e1b7fc4 275 */
dan_ackme 0:ea85c4bb5e1f 276 typedef char SsidStrBuffer[129];
dan_ackme 11:ea484e1b7fc4 277
dan_ackme 11:ea484e1b7fc4 278 /**
dan_ackme 13:2b51f5267c92 279 * @ingroup api_network_types
dan_ackme 11:ea484e1b7fc4 280 * @brief Buffer to hold an IP address string
dan_ackme 11:ea484e1b7fc4 281 */
dan_ackme 0:ea85c4bb5e1f 282 typedef char IpStrBuffer[18];
dan_ackme 0:ea85c4bb5e1f 283
dan_ackme 0:ea85c4bb5e1f 284
dan_ackme 11:ea484e1b7fc4 285 // ----------------------------------------------------------------------------
dan_ackme 11:ea484e1b7fc4 286
dan_ackme 0:ea85c4bb5e1f 287
dan_ackme 11:ea484e1b7fc4 288 /**
dan_ackme 13:2b51f5267c92 289 * @ingroup api_socket_types
dan_ackme 11:ea484e1b7fc4 290 * @brief Socket type
dan_ackme 11:ea484e1b7fc4 291 */
dan_ackme 0:ea85c4bb5e1f 292 typedef enum
dan_ackme 0:ea85c4bb5e1f 293 {
dan_ackme 11:ea484e1b7fc4 294 SOCKET_TYPE_UNKNOWN, ///< Socket type not known
dan_ackme 11:ea484e1b7fc4 295 SOCKET_TYPE_TCP, ///< TCP Socket type
dan_ackme 11:ea484e1b7fc4 296 SOCKET_TYPE_TLS, ///< TLS Socket type
dan_ackme 11:ea484e1b7fc4 297 SOCKET_TYPE_UDP, ///< UDP Socket type
dan_ackme 11:ea484e1b7fc4 298 SOCKET_TYPE_HTTP, ///< HTTP Socket type
dan_ackme 11:ea484e1b7fc4 299 } SocketType;
dan_ackme 0:ea85c4bb5e1f 300
dan_ackme 11:ea484e1b7fc4 301 /**
dan_ackme 13:2b51f5267c92 302 * @ingroup api_socket_types
dan_ackme 11:ea484e1b7fc4 303 * @brief HTTP Socket sub-type
dan_ackme 11:ea484e1b7fc4 304 */
dan_ackme 0:ea85c4bb5e1f 305 typedef enum
dan_ackme 0:ea85c4bb5e1f 306 {
dan_ackme 11:ea484e1b7fc4 307 SOCKET_HTTP_GET, ///< HTTP GET Request socket type
dan_ackme 11:ea484e1b7fc4 308 SOCKET_HTTP_POST, ///< HTTP POST Request socket type
dan_ackme 11:ea484e1b7fc4 309 SOCKET_HTTP_HEAD, ///< HTTP HEAD Request socket type
dan_ackme 11:ea484e1b7fc4 310 } HttpSocketType;
dan_ackme 0:ea85c4bb5e1f 311
dan_ackme 11:ea484e1b7fc4 312 /**
dan_ackme 13:2b51f5267c92 313 * @ingroup api_socket_types
dan_ackme 11:ea484e1b7fc4 314 * @brief Struct for hold HTTP socket configuration
dan_ackme 11:ea484e1b7fc4 315 */
dan_ackme 11:ea484e1b7fc4 316 typedef struct
dan_ackme 11:ea484e1b7fc4 317 {
dan_ackme 11:ea484e1b7fc4 318 const char *contextType; ///< A POST Request 'context-type' value
dan_ackme 11:ea484e1b7fc4 319 const char *certName; ///< TLS certificate filename on module flash file system
dan_ackme 11:ea484e1b7fc4 320 bool openOnly; ///< Only open the connection, don't issue the request yet
dan_ackme 11:ea484e1b7fc4 321 HttpSocketType type; ///< The type of HTTP connection
dan_ackme 11:ea484e1b7fc4 322 } HttpSocketArgs;
dan_ackme 0:ea85c4bb5e1f 323
dan_ackme 11:ea484e1b7fc4 324
dan_ackme 11:ea484e1b7fc4 325 // ----------------------------------------------------------------------------
dan_ackme 11:ea484e1b7fc4 326
dan_ackme 0:ea85c4bb5e1f 327
dan_ackme 11:ea484e1b7fc4 328 /**
dan_ackme 13:2b51f5267c92 329 * @ingroup api_file_types
dan_ackme 11:ea484e1b7fc4 330 * @brief File flags type
dan_ackme 11:ea484e1b7fc4 331 */
dan_ackme 0:ea85c4bb5e1f 332 typedef enum
dan_ackme 0:ea85c4bb5e1f 333 {
dan_ackme 11:ea484e1b7fc4 334 FILE_FLAG_NONE = 0, ///< No flags
dan_ackme 0:ea85c4bb5e1f 335
dan_ackme 11:ea484e1b7fc4 336 FILE_FLAG_VALID = (1 << 0), ///< File valid
dan_ackme 11:ea484e1b7fc4 337 FILE_FLAG_EXECUTABLE = (1 << 1), ///< File executable
dan_ackme 11:ea484e1b7fc4 338 FILE_FLAG_ENCRYPTED = (1 << 2), ///< File encrypted
dan_ackme 11:ea484e1b7fc4 339 FILE_FLAG_INTERNAL = (1 << 3), ///< File on internal module flash
dan_ackme 11:ea484e1b7fc4 340 FILE_FLAG_BOOTABLE = (1 << 4), ///< File bootable
dan_ackme 11:ea484e1b7fc4 341 FILE_FLAG_USER = (1 << 5), ///< File created by user
dan_ackme 11:ea484e1b7fc4 342 FILE_FLAG_ESSENTIAL = (1 << 6), ///< File is essential
dan_ackme 11:ea484e1b7fc4 343
dan_ackme 11:ea484e1b7fc4 344 FILE_FLAG_INVALID = 0xFFFF ///< File flags invalid
dan_ackme 11:ea484e1b7fc4 345 } FileFlags;
dan_ackme 0:ea85c4bb5e1f 346
dan_ackme 11:ea484e1b7fc4 347 /**
dan_ackme 13:2b51f5267c92 348 * @ingroup api_file_types
dan_ackme 11:ea484e1b7fc4 349 * @brief File type type
dan_ackme 11:ea484e1b7fc4 350 */
dan_ackme 11:ea484e1b7fc4 351 typedef enum
dan_ackme 11:ea484e1b7fc4 352 {
dan_ackme 11:ea484e1b7fc4 353 FILE_TYPE_UPGRADE_APP = 0x00, ///< Internal upgrade application
dan_ackme 11:ea484e1b7fc4 354 FILE_TYPE_WIFI_FW = 0x01, ///< Wifi firmware binary
dan_ackme 11:ea484e1b7fc4 355
dan_ackme 11:ea484e1b7fc4 356 FILE_TYPE_REGULAR_APP = 0x81, ///< Regular application
dan_ackme 0:ea85c4bb5e1f 357
dan_ackme 11:ea484e1b7fc4 358 FILE_TYPE_USER_RANGE_START = 150, ///< User type start index
dan_ackme 11:ea484e1b7fc4 359 FILE_TYPE_USER_RANGE_END = 199, ///< User type end index
dan_ackme 11:ea484e1b7fc4 360
dan_ackme 11:ea484e1b7fc4 361 FILE_TYPE_TEMPORY = 0xF9, ///< Temporary file
dan_ackme 11:ea484e1b7fc4 362 FILE_TYPE_GPIO_CONFIG = 0xFA, ///< GPIO configuration file
dan_ackme 11:ea484e1b7fc4 363 FILE_TYPE_COMMAND_HELP = 0xFB, ///< WiConnect command help file
dan_ackme 11:ea484e1b7fc4 364 FILE_TYPE_SDC_CAPS = 0xFC, ///< SDC / goHACK.me file
dan_ackme 11:ea484e1b7fc4 365 FILE_TYPE_SETUP_SCRIPT = 0xFD, ///< Setup script file
dan_ackme 11:ea484e1b7fc4 366 FILE_TYPE_MISC_FIX_LEN = 0xFE, ///< Miscellaneous fixed length file
dan_ackme 11:ea484e1b7fc4 367 FILE_TYPE_UNKNOWN = 0xFF, ///< Unknown file type
dan_ackme 0:ea85c4bb5e1f 368 FILE_TYPE_ANY = FILE_TYPE_UNKNOWN
dan_ackme 0:ea85c4bb5e1f 369 } FileType;
dan_ackme 0:ea85c4bb5e1f 370
dan_ackme 11:ea484e1b7fc4 371
dan_ackme 0:ea85c4bb5e1f 372
dan_ackme 0:ea85c4bb5e1f 373
dan_ackme 11:ea484e1b7fc4 374 // Forward declarations
dan_ackme 11:ea484e1b7fc4 375
dan_ackme 0:ea85c4bb5e1f 376 class Wiconnect;
dan_ackme 0:ea85c4bb5e1f 377 class TimeoutTimer;
dan_ackme 0:ea85c4bb5e1f 378 class PeriodicTimer;
dan_ackme 0:ea85c4bb5e1f 379 class QueuedCommand;
dan_ackme 0:ea85c4bb5e1f 380 class CommandQueue;
dan_ackme 0:ea85c4bb5e1f 381 class LogFunc;
dan_ackme 0:ea85c4bb5e1f 382 class ReaderFunc;
dan_ackme 0:ea85c4bb5e1f 383 class Callback;
dan_ackme 0:ea85c4bb5e1f 384 class ScanResult;
dan_ackme 0:ea85c4bb5e1f 385 class ScanResultList;
dan_ackme 0:ea85c4bb5e1f 386 class Socket;
dan_ackme 0:ea85c4bb5e1f 387 class WiconnectSerial;
dan_ackme 0:ea85c4bb5e1f 388 class File;
dan_ackme 0:ea85c4bb5e1f 389 class FileList;
dan_ackme 0:ea85c4bb5e1f 390 class Gpio;
dan_ackme 0:ea85c4bb5e1f 391 class SocketIrqHandlerMap;
dan_ackme 0:ea85c4bb5e1f 392
dan_ackme 0:ea85c4bb5e1f 393 }