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:
Mon Aug 11 03:29:30 2014 -0700
Revision:
1:6ec9998427ad
Parent:
0:ea85c4bb5e1f
Child:
11:ea484e1b7fc4
fixed compiler warnings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 0:ea85c4bb5e1f 1 /*
dan_ackme 0:ea85c4bb5e1f 2 * Copyright 2014, ACKme Networks
dan_ackme 0:ea85c4bb5e1f 3 * All Rights Reserved.
dan_ackme 0:ea85c4bb5e1f 4 *
dan_ackme 0:ea85c4bb5e1f 5 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
dan_ackme 0:ea85c4bb5e1f 6 * the contents of this file may not be disclosed to third parties, copied
dan_ackme 0:ea85c4bb5e1f 7 * or duplicated in any form, in whole or in part, without the prior
dan_ackme 0:ea85c4bb5e1f 8 * written permission of ACKme Networks.
dan_ackme 0:ea85c4bb5e1f 9 */
dan_ackme 0:ea85c4bb5e1f 10
dan_ackme 0:ea85c4bb5e1f 11 #pragma once
dan_ackme 0:ea85c4bb5e1f 12
dan_ackme 0:ea85c4bb5e1f 13 #include <stdint.h>
dan_ackme 0:ea85c4bb5e1f 14 #include <stdarg.h>
dan_ackme 0:ea85c4bb5e1f 15
dan_ackme 0:ea85c4bb5e1f 16 #include "sdk.h"
dan_ackme 0:ea85c4bb5e1f 17
dan_ackme 0:ea85c4bb5e1f 18 namespace wiconnect {
dan_ackme 0:ea85c4bb5e1f 19
dan_ackme 0:ea85c4bb5e1f 20
dan_ackme 0:ea85c4bb5e1f 21 #ifndef MIN
dan_ackme 0:ea85c4bb5e1f 22 #define MIN(x,y) ((x) < (y) ? (x) : (y))
dan_ackme 0:ea85c4bb5e1f 23 #endif
dan_ackme 0:ea85c4bb5e1f 24 #ifndef MAX
dan_ackme 0:ea85c4bb5e1f 25 #define MAX(x,y) ((x) > (y) ? (x) : (y))
dan_ackme 0:ea85c4bb5e1f 26 #endif
dan_ackme 0:ea85c4bb5e1f 27 #define ALIGN_n(x, n) ((((uint32_t)x) + ((n)-1)) & ~((n)-1))
dan_ackme 0:ea85c4bb5e1f 28 #define ALIGN_8(x) ALIGN_n(x, 8)
dan_ackme 0:ea85c4bb5e1f 29 #define ALIGN_4(x) ALIGN_n(x, 4)
dan_ackme 0:ea85c4bb5e1f 30
dan_ackme 0:ea85c4bb5e1f 31 #ifndef OFFSETOF
dan_ackme 0:ea85c4bb5e1f 32 #define OFFSETOF(type, member) ((uintptr_t)&((type *)0)->member)
dan_ackme 0:ea85c4bb5e1f 33 #endif
dan_ackme 0:ea85c4bb5e1f 34
dan_ackme 0:ea85c4bb5e1f 35 #define ARRAY_COUNT(x) (sizeof (x) / sizeof *(x))
dan_ackme 0:ea85c4bb5e1f 36
dan_ackme 0:ea85c4bb5e1f 37
dan_ackme 0:ea85c4bb5e1f 38 #define WICONNECT_FAILED(result, func) ((int)(result = (func)) < (int)wiconnect::WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 39 #define WICONNECT_SUCCEEDED(result, func) ((result = (func)) == wiconnect::WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 40
dan_ackme 0:ea85c4bb5e1f 41 #define WICONNECT_NULL_RESPONSE_HANDLER WiconnectAsyncCallback()
dan_ackme 0:ea85c4bb5e1f 42
dan_ackme 0:ea85c4bb5e1f 43
dan_ackme 0:ea85c4bb5e1f 44 #define WICONNECT_MAX_CMD_SIZE 128
dan_ackme 0:ea85c4bb5e1f 45 #define WICONNECT_MAX_VERSION_SIZE 96
dan_ackme 0:ea85c4bb5e1f 46 #define WICONNECT_MAX_SOCKETS 8
dan_ackme 0:ea85c4bb5e1f 47
dan_ackme 0:ea85c4bb5e1f 48
dan_ackme 0:ea85c4bb5e1f 49 #define SOCKET_INVALID_HANDLE ((uint8_t)0xFF)
dan_ackme 0:ea85c4bb5e1f 50
dan_ackme 0:ea85c4bb5e1f 51
dan_ackme 0:ea85c4bb5e1f 52 typedef enum
dan_ackme 0:ea85c4bb5e1f 53 {
dan_ackme 0:ea85c4bb5e1f 54 WICONNECT_ABORTED = 3,
dan_ackme 0:ea85c4bb5e1f 55 WICONNECT_IDLE = 2,
dan_ackme 0:ea85c4bb5e1f 56 WICONNECT_PROCESSING = 1,
dan_ackme 0:ea85c4bb5e1f 57 WICONNECT_SUCCESS = 0,
dan_ackme 0:ea85c4bb5e1f 58 WICONNECT_ERROR = -1,
dan_ackme 0:ea85c4bb5e1f 59 WICONNECT_CMD_RESPONSE_ERROR = -2,
dan_ackme 0:ea85c4bb5e1f 60 WICONNECT_NULL_BUFFER = -3,
dan_ackme 0:ea85c4bb5e1f 61 WICONNECT_NOT_INITIALIZED = -4,
dan_ackme 0:ea85c4bb5e1f 62 WICONNECT_OVERFLOW = -5,
dan_ackme 0:ea85c4bb5e1f 63 WICONNECT_TIMEOUT = -6,
dan_ackme 0:ea85c4bb5e1f 64 WICONNECT_RESPONSE_HANDLER_NULL = -7,
dan_ackme 0:ea85c4bb5e1f 65 WICONNECT_RESPONSE_PARSE_ERROR = -8,
dan_ackme 0:ea85c4bb5e1f 66 WICONNECT_ANOTHER_CMD_EXECUTING = -9,
dan_ackme 0:ea85c4bb5e1f 67 WICONNECT_BAD_ARG = -10,
dan_ackme 0:ea85c4bb5e1f 68 WICONNECT_UNSUPPORTED = -11,
dan_ackme 0:ea85c4bb5e1f 69 WICONNECT_PINNAME_TO_GPIO_MAPPER_NULL = -12,
dan_ackme 0:ea85c4bb5e1f 70 WICONNECT_DUPLICATE = -13,
dan_ackme 0:ea85c4bb5e1f 71 WICONNECT_NOT_FOUND = -14,
dan_ackme 0:ea85c4bb5e1f 72 WICONNECT_PINNAME_TO_GPIO_NO_MAPPING = -15,
dan_ackme 0:ea85c4bb5e1f 73 WICONNECT_NOT_CONNECTED = -16,
dan_ackme 0:ea85c4bb5e1f 74 WICONNECT_UNDERFLOW = -17,
dan_ackme 0:ea85c4bb5e1f 75 WICONNECT_MONITOR_NOT_AVAILABLE = -18,
dan_ackme 0:ea85c4bb5e1f 76 WICONNECT_NOT_OPENED_FOR_READING = -19,
dan_ackme 0:ea85c4bb5e1f 77 } WiconnectResult;
dan_ackme 0:ea85c4bb5e1f 78
dan_ackme 0:ea85c4bb5e1f 79
dan_ackme 0:ea85c4bb5e1f 80 typedef enum
dan_ackme 0:ea85c4bb5e1f 81 {
dan_ackme 0:ea85c4bb5e1f 82 NETWORK_STATUS_DOWN,
dan_ackme 0:ea85c4bb5e1f 83 NETWORK_STATUS_WIFI_ONLY,
dan_ackme 0:ea85c4bb5e1f 84 NETWORK_STATUS_UP
dan_ackme 0:ea85c4bb5e1f 85 } NetworkStatus;
dan_ackme 0:ea85c4bb5e1f 86
dan_ackme 0:ea85c4bb5e1f 87 typedef enum
dan_ackme 0:ea85c4bb5e1f 88 {
dan_ackme 0:ea85c4bb5e1f 89 NETWORK_RSSI_EXCELLENT = 0, ///< > -20 dBm
dan_ackme 0:ea85c4bb5e1f 90 NETWORK_RSSI_VERY_GOOD = 1, ///< > -35 dBm
dan_ackme 0:ea85c4bb5e1f 91 NETWORK_RSSI_GOOD = 2, ///< > -50 dBm
dan_ackme 0:ea85c4bb5e1f 92 NETWORK_RSSI_POOR = 3, ///< > -70 dBm
dan_ackme 0:ea85c4bb5e1f 93 NETWORK_RSSI_VERY_POOR = 4, ///< < -71 dBm
dan_ackme 0:ea85c4bb5e1f 94 NETWORK_RSSI_UNKNOWN = 5 ///< Not available
dan_ackme 0:ea85c4bb5e1f 95 } NetworkSignalStrength;
dan_ackme 0:ea85c4bb5e1f 96
dan_ackme 0:ea85c4bb5e1f 97 typedef enum
dan_ackme 0:ea85c4bb5e1f 98 {
dan_ackme 0:ea85c4bb5e1f 99 NETWORK_SECURITY_OPEN,
dan_ackme 0:ea85c4bb5e1f 100 NETWORK_SECURITY_WEP_PSK,
dan_ackme 0:ea85c4bb5e1f 101 NETWORK_SECURITY_WPA_AES_PSK,
dan_ackme 0:ea85c4bb5e1f 102 NETWORK_SECURITY_WPA_TKIP_PSK,
dan_ackme 0:ea85c4bb5e1f 103 NETWORK_SECURITY_WPA2_AES_PSK,
dan_ackme 0:ea85c4bb5e1f 104 NETWORK_SECURITY_WPA2_MIXED_PSK,
dan_ackme 0:ea85c4bb5e1f 105 NETWORK_SECURITY_WPA2_TKIP_PSK,
dan_ackme 0:ea85c4bb5e1f 106 NETWORK_SECURITY_UNKNOWN
dan_ackme 0:ea85c4bb5e1f 107 } NetworkSecurity;
dan_ackme 0:ea85c4bb5e1f 108
dan_ackme 0:ea85c4bb5e1f 109 typedef struct
dan_ackme 0:ea85c4bb5e1f 110 {
dan_ackme 0:ea85c4bb5e1f 111 uint8_t val[32];
dan_ackme 0:ea85c4bb5e1f 112 uint8_t len;
dan_ackme 0:ea85c4bb5e1f 113 } Ssid;
dan_ackme 0:ea85c4bb5e1f 114
dan_ackme 0:ea85c4bb5e1f 115 typedef struct
dan_ackme 0:ea85c4bb5e1f 116 {
dan_ackme 0:ea85c4bb5e1f 117 uint8_t octet[6];
dan_ackme 0:ea85c4bb5e1f 118 } MacAddress;
dan_ackme 0:ea85c4bb5e1f 119 typedef char MacAddressStrBuffer[18];
dan_ackme 0:ea85c4bb5e1f 120 typedef char SsidStrBuffer[129];
dan_ackme 0:ea85c4bb5e1f 121 typedef char IpStrBuffer[18];
dan_ackme 0:ea85c4bb5e1f 122
dan_ackme 0:ea85c4bb5e1f 123
dan_ackme 0:ea85c4bb5e1f 124 typedef enum
dan_ackme 0:ea85c4bb5e1f 125 {
dan_ackme 0:ea85c4bb5e1f 126 SOCKET_TYPE_UNKNOWN,
dan_ackme 0:ea85c4bb5e1f 127 SOCKET_TYPE_TCP,
dan_ackme 0:ea85c4bb5e1f 128 SOCKET_TYPE_TLS,
dan_ackme 0:ea85c4bb5e1f 129 SOCKET_TYPE_UDP,
dan_ackme 0:ea85c4bb5e1f 130 SOCKET_TYPE_HTTP,
dan_ackme 0:ea85c4bb5e1f 131 } SocketType;
dan_ackme 0:ea85c4bb5e1f 132
dan_ackme 0:ea85c4bb5e1f 133 typedef enum
dan_ackme 0:ea85c4bb5e1f 134 {
dan_ackme 0:ea85c4bb5e1f 135 SOCKET_HTTP_GET,
dan_ackme 0:ea85c4bb5e1f 136 SOCKET_HTTP_POST,
dan_ackme 0:ea85c4bb5e1f 137 SOCKET_HTTP_HEAD,
dan_ackme 0:ea85c4bb5e1f 138 } HttpSocketType;
dan_ackme 0:ea85c4bb5e1f 139
dan_ackme 0:ea85c4bb5e1f 140 typedef struct
dan_ackme 0:ea85c4bb5e1f 141 {
dan_ackme 0:ea85c4bb5e1f 142 const char *contextType;
dan_ackme 0:ea85c4bb5e1f 143 const char *certName;
dan_ackme 0:ea85c4bb5e1f 144 bool openOnly;
dan_ackme 0:ea85c4bb5e1f 145 HttpSocketType type;
dan_ackme 0:ea85c4bb5e1f 146 } HttpSocketArgs;
dan_ackme 0:ea85c4bb5e1f 147
dan_ackme 0:ea85c4bb5e1f 148 typedef int8_t (*PinToGpioMapper)(Pin pin);
dan_ackme 0:ea85c4bb5e1f 149
dan_ackme 0:ea85c4bb5e1f 150
dan_ackme 0:ea85c4bb5e1f 151 typedef enum
dan_ackme 0:ea85c4bb5e1f 152 {
dan_ackme 0:ea85c4bb5e1f 153 FILE_FLAG_NONE = 0,
dan_ackme 0:ea85c4bb5e1f 154
dan_ackme 0:ea85c4bb5e1f 155 FILE_FLAG_VALID = (1 << 0),
dan_ackme 0:ea85c4bb5e1f 156 FILE_FLAG_EXECUTABLE = (1 << 1),
dan_ackme 0:ea85c4bb5e1f 157 FILE_FLAG_ENCRYPTED = (1 << 2),
dan_ackme 0:ea85c4bb5e1f 158 FILE_FLAG_INTERNAL = (1 << 3),
dan_ackme 0:ea85c4bb5e1f 159 FILE_FLAG_BOOTABLE = (1 << 4),
dan_ackme 0:ea85c4bb5e1f 160 FILE_FLAG_USER = (1 << 5),
dan_ackme 0:ea85c4bb5e1f 161 FILE_FLAG_ESSENTIAL = (1 << 6),
dan_ackme 0:ea85c4bb5e1f 162 FILE_FLAG_BACKUP = (1 << 7),
dan_ackme 0:ea85c4bb5e1f 163
dan_ackme 0:ea85c4bb5e1f 164 FILE_FLAG_FORCE_COPY = (1 << 15),
dan_ackme 0:ea85c4bb5e1f 165
dan_ackme 0:ea85c4bb5e1f 166 FILE_FLAG_INVALID = 0xFFFF
dan_ackme 0:ea85c4bb5e1f 167 } FileFlags;
dan_ackme 0:ea85c4bb5e1f 168
dan_ackme 0:ea85c4bb5e1f 169 typedef enum
dan_ackme 0:ea85c4bb5e1f 170 {
dan_ackme 0:ea85c4bb5e1f 171 FILE_TYPE_UPGRADE_APP = 0x00,
dan_ackme 0:ea85c4bb5e1f 172 FILE_TYPE_WIFI_FW = 0x01,
dan_ackme 0:ea85c4bb5e1f 173 FILE_TYPE_SHARED_LIB = 0x02,
dan_ackme 0:ea85c4bb5e1f 174 FILE_TYPE_TLS_CERT = 0x03,
dan_ackme 0:ea85c4bb5e1f 175 FILE_TYPE_TXT_LOG = 0x04,
dan_ackme 0:ea85c4bb5e1f 176 FILE_TYPE_DCT = 0x05,
dan_ackme 0:ea85c4bb5e1f 177
dan_ackme 0:ea85c4bb5e1f 178 FILE_TYPE_MISC_APP = 0x80,
dan_ackme 0:ea85c4bb5e1f 179 FILE_TYPE_REGULAR_APP = 0x81,
dan_ackme 0:ea85c4bb5e1f 180
dan_ackme 0:ea85c4bb5e1f 181 FILE_TYPE_USER_RANGE_START = 150,
dan_ackme 0:ea85c4bb5e1f 182 FILE_TYPE_USER_RANGE_END = 199,
dan_ackme 0:ea85c4bb5e1f 183
dan_ackme 0:ea85c4bb5e1f 184 FILE_TYPE_TEMPORY = 0xF9,
dan_ackme 0:ea85c4bb5e1f 185 FILE_TYPE_GPIO_CONFIG = 0xFA,
dan_ackme 0:ea85c4bb5e1f 186 FILE_TYPE_COMMAND_HELP = 0xFB,
dan_ackme 0:ea85c4bb5e1f 187 FILE_TYPE_SDC_CAPS = 0xFC,
dan_ackme 0:ea85c4bb5e1f 188 FILE_TYPE_SETUP_SCRIPT = 0xFD,
dan_ackme 0:ea85c4bb5e1f 189 FILE_TYPE_MISC_FIX_LEN = 0xFE,
dan_ackme 0:ea85c4bb5e1f 190 FILE_TYPE_UNKNOWN = 0xFF,
dan_ackme 0:ea85c4bb5e1f 191 FILE_TYPE_ANY = FILE_TYPE_UNKNOWN
dan_ackme 0:ea85c4bb5e1f 192 } FileType;
dan_ackme 0:ea85c4bb5e1f 193
dan_ackme 0:ea85c4bb5e1f 194 typedef struct
dan_ackme 0:ea85c4bb5e1f 195 {
dan_ackme 0:ea85c4bb5e1f 196 int size;
dan_ackme 0:ea85c4bb5e1f 197 uint8_t *buffer;
dan_ackme 0:ea85c4bb5e1f 198 uint8_t *ptr;
dan_ackme 0:ea85c4bb5e1f 199 int bytesPending;
dan_ackme 0:ea85c4bb5e1f 200 bool allocated;
dan_ackme 0:ea85c4bb5e1f 201 } Buffer;
dan_ackme 0:ea85c4bb5e1f 202
dan_ackme 0:ea85c4bb5e1f 203
dan_ackme 0:ea85c4bb5e1f 204 class Wiconnect;
dan_ackme 0:ea85c4bb5e1f 205 class TimeoutTimer;
dan_ackme 0:ea85c4bb5e1f 206 class PeriodicTimer;
dan_ackme 0:ea85c4bb5e1f 207 class QueuedCommand;
dan_ackme 0:ea85c4bb5e1f 208 class CommandQueue;
dan_ackme 0:ea85c4bb5e1f 209 class LogFunc;
dan_ackme 0:ea85c4bb5e1f 210 class ReaderFunc;
dan_ackme 0:ea85c4bb5e1f 211 class Callback;
dan_ackme 0:ea85c4bb5e1f 212 class ScanResult;
dan_ackme 0:ea85c4bb5e1f 213 class ScanResultList;
dan_ackme 0:ea85c4bb5e1f 214 class Socket;
dan_ackme 0:ea85c4bb5e1f 215 class WiconnectSerial;
dan_ackme 0:ea85c4bb5e1f 216 class File;
dan_ackme 0:ea85c4bb5e1f 217 class FileList;
dan_ackme 0:ea85c4bb5e1f 218 class Gpio;
dan_ackme 0:ea85c4bb5e1f 219 class SocketIrqHandlerMap;
dan_ackme 0:ea85c4bb5e1f 220
dan_ackme 0:ea85c4bb5e1f 221 }