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 Oct 27 13:42:26 2014 -0700
Revision:
29:b6af04b77a56
Child:
35:15725177aa60
refactored library layout

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
dan_ackme 29:b6af04b77a56 32 #define MBED_SDK
dan_ackme 29:b6af04b77a56 33
dan_ackme 29:b6af04b77a56 34 #include "mbed.h"
dan_ackme 29:b6af04b77a56 35
dan_ackme 29:b6af04b77a56 36
dan_ackme 29:b6af04b77a56 37
dan_ackme 29:b6af04b77a56 38
dan_ackme 29:b6af04b77a56 39 namespace wiconnect
dan_ackme 29:b6af04b77a56 40 {
dan_ackme 29:b6af04b77a56 41
dan_ackme 29:b6af04b77a56 42 /**
dan_ackme 29:b6af04b77a56 43 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 44 * @brief When defined enables asynchronous command processing
dan_ackme 29:b6af04b77a56 45 */
dan_ackme 29:b6af04b77a56 46 #define WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 29:b6af04b77a56 47 /**
dan_ackme 29:b6af04b77a56 48 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 49 * @brief When defined enables user supplied dynamic memory allocation
dan_ackme 29:b6af04b77a56 50 */
dan_ackme 29:b6af04b77a56 51 #define WICONNECT_ENABLE_MALLOC
dan_ackme 29:b6af04b77a56 52 /**
dan_ackme 29:b6af04b77a56 53 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 54 * @brief When defined enables Host<->Wiconnect Module serial RX buffering
dan_ackme 29:b6af04b77a56 55 */
dan_ackme 29:b6af04b77a56 56 #define WICONNECT_SERIAL_RX_BUFFER
dan_ackme 29:b6af04b77a56 57 /**
dan_ackme 29:b6af04b77a56 58 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 59 * @brief When defined enables certain conversion API functions to use a default buffer to store string
dan_ackme 29:b6af04b77a56 60 */
dan_ackme 29:b6af04b77a56 61 #define WICONNECT_USE_DEFAULT_STRING_BUFFERS
dan_ackme 29:b6af04b77a56 62
dan_ackme 29:b6af04b77a56 63 /**
dan_ackme 29:b6af04b77a56 64 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 65 * @brief When defined enables external interrupts on specified gpios
dan_ackme 29:b6af04b77a56 66 */
dan_ackme 29:b6af04b77a56 67 #define WICONNECT_GPIO_IRQ_ENABLED
dan_ackme 29:b6af04b77a56 68
dan_ackme 29:b6af04b77a56 69 /**
dan_ackme 29:b6af04b77a56 70 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 71 * @brief When WICONNECT_ENABLE_MALLOC defined, this is the default malloc function
dan_ackme 29:b6af04b77a56 72 */
dan_ackme 29:b6af04b77a56 73 #define WICONNECT_DEFAULT_MALLOC malloc
dan_ackme 29:b6af04b77a56 74 /**
dan_ackme 29:b6af04b77a56 75 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 76 * @brief When WICONNECT_ENABLE_MALLOC defined, this is the default free function
dan_ackme 29:b6af04b77a56 77 */
dan_ackme 29:b6af04b77a56 78 #define WICONNECT_DEFAULT_FREE free
dan_ackme 29:b6af04b77a56 79
dan_ackme 29:b6af04b77a56 80 /**
dan_ackme 29:b6af04b77a56 81 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 82 * @brief The default Host<->Wiconnect Module serial BAUD rate
dan_ackme 29:b6af04b77a56 83 */
dan_ackme 29:b6af04b77a56 84 #define WICONNECT_DEFAULT_BAUD 115200
dan_ackme 29:b6af04b77a56 85 /**
dan_ackme 29:b6af04b77a56 86 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 87 * @brief The default command timeout (i.e max command executing time)
dan_ackme 29:b6af04b77a56 88 */
dan_ackme 29:b6af04b77a56 89 #define WICONNECT_DEFAULT_TIMEOUT 3000 // ms
dan_ackme 29:b6af04b77a56 90 /**
dan_ackme 29:b6af04b77a56 91 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 92 * @brief When WICONNECT_ASYNC_TIMER_ENABLED, this specifies the max number of asynchronous commands that may be queued
dan_ackme 29:b6af04b77a56 93 */
dan_ackme 29:b6af04b77a56 94 #define WICONNECT_MAX_QUEUED_COMMANDS 8
dan_ackme 29:b6af04b77a56 95 /**
dan_ackme 29:b6af04b77a56 96 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 97 * @brief When WICONNECT_ASYNC_TIMER_ENABLED, this specifies the period in milliseconds commands should be processed
dan_ackme 29:b6af04b77a56 98 */
dan_ackme 29:b6af04b77a56 99 #define WICONNECT_DEFAULT_COMMAND_PROCESSING_PERIOD 50 // ms
dan_ackme 29:b6af04b77a56 100
dan_ackme 29:b6af04b77a56 101 /**
dan_ackme 29:b6af04b77a56 102 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 103 * @brief The default blocking mode of the Library.
dan_ackme 29:b6af04b77a56 104 */
dan_ackme 29:b6af04b77a56 105 #define WICONNECT_DEFAULT_NONBLOCKING false
dan_ackme 29:b6af04b77a56 106
dan_ackme 29:b6af04b77a56 107 /**
dan_ackme 29:b6af04b77a56 108 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 109 * @brief If defined, enables low-level debugging
dan_ackme 29:b6af04b77a56 110 */
dan_ackme 29:b6af04b77a56 111 #define WICONNECT_ENABLE_DEBUGGING
dan_ackme 29:b6af04b77a56 112
dan_ackme 29:b6af04b77a56 113
dan_ackme 29:b6af04b77a56 114 // ----------------------------------------------------------------------------
dan_ackme 29:b6af04b77a56 115
dan_ackme 29:b6af04b77a56 116 #define WICONNECT_GPIO_BASE_CLASS : DigitalOut
dan_ackme 29:b6af04b77a56 117 #define WICONNECT_SERIAL_BASE_CLASS : RawSerial
dan_ackme 29:b6af04b77a56 118 #define WICONNECT_PERIODIC_TIMER_BASE_CLASS : Ticker
dan_ackme 29:b6af04b77a56 119 #define WICONNECT_EXTERNAL_INTERRUPT_GPIO_BASE_CLASS : InterruptIn
dan_ackme 29:b6af04b77a56 120
dan_ackme 29:b6af04b77a56 121 #define WICONNECT_MAX_PIN_IRQ_HANDLERS 3
dan_ackme 29:b6af04b77a56 122
dan_ackme 29:b6af04b77a56 123
dan_ackme 29:b6af04b77a56 124 /**
dan_ackme 29:b6af04b77a56 125 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 126 * @brief Default value for a pin, Not connected
dan_ackme 29:b6af04b77a56 127 */
dan_ackme 29:b6af04b77a56 128 #define PIN_NC NC
dan_ackme 29:b6af04b77a56 129
dan_ackme 29:b6af04b77a56 130 /**
dan_ackme 29:b6af04b77a56 131 * @ingroup api_core_types
dan_ackme 29:b6af04b77a56 132 * @brief Pin name on HOST
dan_ackme 29:b6af04b77a56 133 */
dan_ackme 29:b6af04b77a56 134 typedef PinName Pin;
dan_ackme 29:b6af04b77a56 135
dan_ackme 29:b6af04b77a56 136 /**
dan_ackme 29:b6af04b77a56 137 * @ingroup api_core_types
dan_ackme 29:b6af04b77a56 138 * @brief Host<->Wiconnect Module serial configuration
dan_ackme 29:b6af04b77a56 139 */
dan_ackme 29:b6af04b77a56 140 class SerialConfig
dan_ackme 29:b6af04b77a56 141 {
dan_ackme 29:b6af04b77a56 142 public:
dan_ackme 29:b6af04b77a56 143 Pin rx;
dan_ackme 29:b6af04b77a56 144 Pin tx;
dan_ackme 29:b6af04b77a56 145 Pin cts;
dan_ackme 29:b6af04b77a56 146 Pin rts;
dan_ackme 29:b6af04b77a56 147 int baud;
dan_ackme 29:b6af04b77a56 148 void *serialRxBuffer;
dan_ackme 29:b6af04b77a56 149 int serialRxBufferSize;
dan_ackme 29:b6af04b77a56 150
dan_ackme 29:b6af04b77a56 151 SerialConfig(Pin rx, Pin tx, Pin cts, Pin rts, int baud, int serialRxBufferSize, void *serialRxBuffer = NULL)
dan_ackme 29:b6af04b77a56 152 {
dan_ackme 29:b6af04b77a56 153 this->rx =rx;
dan_ackme 29:b6af04b77a56 154 this->tx =tx;
dan_ackme 29:b6af04b77a56 155 this->cts =cts;
dan_ackme 29:b6af04b77a56 156 this->rts =rts;
dan_ackme 29:b6af04b77a56 157 this->baud = baud;
dan_ackme 29:b6af04b77a56 158 this->serialRxBuffer =serialRxBuffer;
dan_ackme 29:b6af04b77a56 159 this->serialRxBufferSize =serialRxBufferSize;
dan_ackme 29:b6af04b77a56 160 }
dan_ackme 29:b6af04b77a56 161
dan_ackme 29:b6af04b77a56 162 SerialConfig(Pin rx, Pin tx, int serialRxBufferSize, void *serialRxBuffer = NULL)
dan_ackme 29:b6af04b77a56 163 {
dan_ackme 29:b6af04b77a56 164 this->rx =rx;
dan_ackme 29:b6af04b77a56 165 this->tx =tx;
dan_ackme 29:b6af04b77a56 166 this->cts = PIN_NC;
dan_ackme 29:b6af04b77a56 167 this->rts = PIN_NC;
dan_ackme 29:b6af04b77a56 168 this->baud = WICONNECT_DEFAULT_BAUD;
dan_ackme 29:b6af04b77a56 169 this->serialRxBuffer =serialRxBuffer;
dan_ackme 29:b6af04b77a56 170 this->serialRxBufferSize =serialRxBufferSize;
dan_ackme 29:b6af04b77a56 171 }
dan_ackme 29:b6af04b77a56 172
dan_ackme 29:b6af04b77a56 173 SerialConfig(Pin rx, Pin tx)
dan_ackme 29:b6af04b77a56 174 {
dan_ackme 29:b6af04b77a56 175 this->rx =rx;
dan_ackme 29:b6af04b77a56 176 this->tx =tx;
dan_ackme 29:b6af04b77a56 177 this->cts =PIN_NC;
dan_ackme 29:b6af04b77a56 178 this->rts =PIN_NC;
dan_ackme 29:b6af04b77a56 179 this->baud = WICONNECT_DEFAULT_BAUD;
dan_ackme 29:b6af04b77a56 180 this->serialRxBuffer =NULL;
dan_ackme 29:b6af04b77a56 181 this->serialRxBufferSize =0;
dan_ackme 29:b6af04b77a56 182 }
dan_ackme 29:b6af04b77a56 183
dan_ackme 29:b6af04b77a56 184 };
dan_ackme 29:b6af04b77a56 185
dan_ackme 29:b6af04b77a56 186
dan_ackme 29:b6af04b77a56 187 /**
dan_ackme 29:b6af04b77a56 188 * @ingroup api_core_macro
dan_ackme 29:b6af04b77a56 189 * @brief Function to stop processor for specified number of milliseconds
dan_ackme 29:b6af04b77a56 190 */
dan_ackme 29:b6af04b77a56 191 #define delayMs(ms) wait_ms(ms)
dan_ackme 29:b6af04b77a56 192
dan_ackme 29:b6af04b77a56 193
dan_ackme 29:b6af04b77a56 194
dan_ackme 29:b6af04b77a56 195
dan_ackme 29:b6af04b77a56 196 }