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:
aymangrais
Date:
Mon Sep 28 03:38:43 2015 +0000
Revision:
42:8ffb253b09e7
Parent:
34:2616445d0823
increase ota timeout to be 5 seconds (instead of 1.5 sec)

Who changed what in which revision?

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