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:
29:b6af04b77a56
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
dan_ackme 29:b6af04b77a56 30 #include "Wiconnect.h"
dan_ackme 29:b6af04b77a56 31 #include "internal/common.h"
dan_ackme 29:b6af04b77a56 32 #include "api/StringUtil.h"
dan_ackme 29:b6af04b77a56 33
dan_ackme 29:b6af04b77a56 34
dan_ackme 29:b6af04b77a56 35 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 36 GhmInterface::GhmInterface(Wiconnect *wiconnect_)
dan_ackme 29:b6af04b77a56 37 {
dan_ackme 29:b6af04b77a56 38 wiconnect = wiconnect_;
dan_ackme 29:b6af04b77a56 39 }
dan_ackme 29:b6af04b77a56 40
dan_ackme 29:b6af04b77a56 41 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 42 WiconnectResult GhmInterface::ghmDownloadCapabilities(const char *capsNameOrCustomUrl, uint32_t version)
dan_ackme 29:b6af04b77a56 43 {
dan_ackme 29:b6af04b77a56 44 WiconnectResult result;
dan_ackme 29:b6af04b77a56 45 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 46
dan_ackme 29:b6af04b77a56 47 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 48 {
dan_ackme 29:b6af04b77a56 49 strcpy(cmdBuffer, "gca download ");
dan_ackme 29:b6af04b77a56 50 if(capsNameOrCustomUrl != NULL)
dan_ackme 29:b6af04b77a56 51 {
dan_ackme 29:b6af04b77a56 52 strcat(cmdBuffer, capsNameOrCustomUrl);
dan_ackme 29:b6af04b77a56 53 if(version > 0)
dan_ackme 29:b6af04b77a56 54 {
dan_ackme 29:b6af04b77a56 55 char temp[16];
dan_ackme 29:b6af04b77a56 56 char *ptr = cmdBuffer + strlen(cmdBuffer);
dan_ackme 29:b6af04b77a56 57 *ptr++ = ' ';
dan_ackme 29:b6af04b77a56 58 sprintf(ptr, "%s", Wiconnect::fileVersionIntToStr(version, true, temp));
dan_ackme 29:b6af04b77a56 59 }
dan_ackme 29:b6af04b77a56 60 }
dan_ackme 29:b6af04b77a56 61 }
dan_ackme 29:b6af04b77a56 62
dan_ackme 29:b6af04b77a56 63 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 64
dan_ackme 29:b6af04b77a56 65 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 66
dan_ackme 29:b6af04b77a56 67 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 68
dan_ackme 29:b6af04b77a56 69 return result;
dan_ackme 29:b6af04b77a56 70 }
dan_ackme 29:b6af04b77a56 71
dan_ackme 29:b6af04b77a56 72 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 73 WiconnectResult GhmInterface::ghmActivate(const char *userName, const char *password, const char *capsFilename)
dan_ackme 29:b6af04b77a56 74 {
dan_ackme 29:b6af04b77a56 75 WiconnectResult result;
dan_ackme 29:b6af04b77a56 76 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 77
dan_ackme 29:b6af04b77a56 78 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 79 {
dan_ackme 29:b6af04b77a56 80 sprintf(cmdBuffer, "gac %s %s %s", userName, password, (capsFilename == NULL) ? "" : capsFilename);
dan_ackme 29:b6af04b77a56 81 }
dan_ackme 29:b6af04b77a56 82
dan_ackme 29:b6af04b77a56 83 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 84
dan_ackme 29:b6af04b77a56 85 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 86
dan_ackme 29:b6af04b77a56 87 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 88
dan_ackme 29:b6af04b77a56 89 return result;
dan_ackme 29:b6af04b77a56 90 }
dan_ackme 29:b6af04b77a56 91
dan_ackme 29:b6af04b77a56 92 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 93 WiconnectResult GhmInterface::ghmDeactivate(const char *userName, const char *password)
dan_ackme 29:b6af04b77a56 94 {
dan_ackme 29:b6af04b77a56 95 WiconnectResult result;
dan_ackme 29:b6af04b77a56 96 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 97
dan_ackme 29:b6af04b77a56 98 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 99 {
dan_ackme 29:b6af04b77a56 100 sprintf(cmdBuffer, "gac %s %s", userName, password);
dan_ackme 29:b6af04b77a56 101 }
dan_ackme 29:b6af04b77a56 102
dan_ackme 29:b6af04b77a56 103 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 104
dan_ackme 29:b6af04b77a56 105 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 106
dan_ackme 29:b6af04b77a56 107 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 108
dan_ackme 29:b6af04b77a56 109 return result;
dan_ackme 29:b6af04b77a56 110 }
dan_ackme 29:b6af04b77a56 111
dan_ackme 29:b6af04b77a56 112 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 113 WiconnectResult GhmInterface::ghmIsActivated(bool *statusPtr)
dan_ackme 29:b6af04b77a56 114 {
dan_ackme 29:b6af04b77a56 115 WiconnectResult result;
dan_ackme 29:b6af04b77a56 116 uint32_t status;
dan_ackme 29:b6af04b77a56 117
dan_ackme 29:b6af04b77a56 118 if(WICONNECT_SUCCEEDED(result, wiconnect->getSetting("ghm.status", &status)))
dan_ackme 29:b6af04b77a56 119 {
dan_ackme 29:b6af04b77a56 120 *statusPtr = (bool)status;
dan_ackme 29:b6af04b77a56 121 }
dan_ackme 29:b6af04b77a56 122
dan_ackme 29:b6af04b77a56 123 return result;
dan_ackme 29:b6af04b77a56 124 }
dan_ackme 29:b6af04b77a56 125
dan_ackme 29:b6af04b77a56 126
dan_ackme 29:b6af04b77a56 127 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 128 WiconnectResult GhmInterface::ghmRead(const char *controlName, const char **valueStrPtr)
dan_ackme 29:b6af04b77a56 129 {
dan_ackme 29:b6af04b77a56 130 WiconnectResult result;
dan_ackme 29:b6af04b77a56 131 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 132
dan_ackme 29:b6af04b77a56 133 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 134 {
dan_ackme 29:b6af04b77a56 135 sprintf(cmdBuffer, "gre %s", controlName);
dan_ackme 29:b6af04b77a56 136 }
dan_ackme 29:b6af04b77a56 137
dan_ackme 29:b6af04b77a56 138 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 139
dan_ackme 29:b6af04b77a56 140 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand(cmdBuffer)))
dan_ackme 29:b6af04b77a56 141 {
dan_ackme 29:b6af04b77a56 142 *valueStrPtr = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 143 }
dan_ackme 29:b6af04b77a56 144
dan_ackme 29:b6af04b77a56 145 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 146
dan_ackme 29:b6af04b77a56 147 return result;
dan_ackme 29:b6af04b77a56 148 }
dan_ackme 29:b6af04b77a56 149
dan_ackme 29:b6af04b77a56 150 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 151 WiconnectResult GhmInterface::ghmRead(const char *controlName, uint32_t *valueIntPtr)
dan_ackme 29:b6af04b77a56 152 {
dan_ackme 29:b6af04b77a56 153 WiconnectResult result;
dan_ackme 29:b6af04b77a56 154 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 155
dan_ackme 29:b6af04b77a56 156 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 157 {
dan_ackme 29:b6af04b77a56 158 sprintf(cmdBuffer, "gre %s", controlName);
dan_ackme 29:b6af04b77a56 159 }
dan_ackme 29:b6af04b77a56 160
dan_ackme 29:b6af04b77a56 161 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 162
dan_ackme 29:b6af04b77a56 163 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand(cmdBuffer)))
dan_ackme 29:b6af04b77a56 164 {
dan_ackme 29:b6af04b77a56 165 result = wiconnect->responseToUint32(valueIntPtr);
dan_ackme 29:b6af04b77a56 166 }
dan_ackme 29:b6af04b77a56 167
dan_ackme 29:b6af04b77a56 168 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 169
dan_ackme 29:b6af04b77a56 170 return result;
dan_ackme 29:b6af04b77a56 171 }
dan_ackme 29:b6af04b77a56 172
dan_ackme 29:b6af04b77a56 173 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 174 WiconnectResult GhmInterface::ghmRead(const char *controlName, char *valueBuffer, uint16_t valueBufferLen)
dan_ackme 29:b6af04b77a56 175 {
dan_ackme 29:b6af04b77a56 176 WiconnectResult result;
dan_ackme 29:b6af04b77a56 177 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 178
dan_ackme 29:b6af04b77a56 179 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 180 {
dan_ackme 29:b6af04b77a56 181 sprintf(cmdBuffer, "gre %s", controlName);
dan_ackme 29:b6af04b77a56 182 }
dan_ackme 29:b6af04b77a56 183
dan_ackme 29:b6af04b77a56 184 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 185
dan_ackme 29:b6af04b77a56 186 result = wiconnect->sendCommand(valueBuffer, valueBufferLen, cmdBuffer);
dan_ackme 29:b6af04b77a56 187
dan_ackme 29:b6af04b77a56 188 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 189
dan_ackme 29:b6af04b77a56 190 return result;
dan_ackme 29:b6af04b77a56 191 }
dan_ackme 29:b6af04b77a56 192
dan_ackme 29:b6af04b77a56 193 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 194 WiconnectResult GhmInterface::ghmWrite(const char *elementName, const char *strValue)
dan_ackme 29:b6af04b77a56 195 {
dan_ackme 29:b6af04b77a56 196 WiconnectResult result;
dan_ackme 29:b6af04b77a56 197 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 198
dan_ackme 29:b6af04b77a56 199 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 200 {
dan_ackme 29:b6af04b77a56 201 sprintf(cmdBuffer, "gwr %s %s", elementName, strValue);
dan_ackme 29:b6af04b77a56 202 }
dan_ackme 29:b6af04b77a56 203
dan_ackme 29:b6af04b77a56 204 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 205
dan_ackme 29:b6af04b77a56 206 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 207
dan_ackme 29:b6af04b77a56 208 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 209
dan_ackme 29:b6af04b77a56 210 return result;
dan_ackme 29:b6af04b77a56 211 }
dan_ackme 29:b6af04b77a56 212
dan_ackme 29:b6af04b77a56 213 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 214 WiconnectResult GhmInterface::ghmWrite(const char *elementName, uint32_t uintValue)
dan_ackme 29:b6af04b77a56 215 {
dan_ackme 29:b6af04b77a56 216 WiconnectResult result;
dan_ackme 29:b6af04b77a56 217 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 218
dan_ackme 29:b6af04b77a56 219 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 220 {
dan_ackme 29:b6af04b77a56 221 sprintf(cmdBuffer, "gwr %s %lu", elementName, uintValue);
dan_ackme 29:b6af04b77a56 222 }
dan_ackme 29:b6af04b77a56 223
dan_ackme 29:b6af04b77a56 224 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 225
dan_ackme 29:b6af04b77a56 226 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 227
dan_ackme 29:b6af04b77a56 228 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 229
dan_ackme 29:b6af04b77a56 230 return result;
dan_ackme 29:b6af04b77a56 231 }
dan_ackme 29:b6af04b77a56 232
dan_ackme 29:b6af04b77a56 233 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 234 WiconnectResult GhmInterface::ghmWrite(const char *elementName, int32_t intValue)
dan_ackme 29:b6af04b77a56 235 {
dan_ackme 29:b6af04b77a56 236 WiconnectResult result;
dan_ackme 29:b6af04b77a56 237 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 238
dan_ackme 29:b6af04b77a56 239 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 240 {
dan_ackme 29:b6af04b77a56 241 sprintf(cmdBuffer, "gwr %s %ld", elementName, intValue);
dan_ackme 29:b6af04b77a56 242 }
dan_ackme 29:b6af04b77a56 243
dan_ackme 29:b6af04b77a56 244 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 245
dan_ackme 29:b6af04b77a56 246 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 247
dan_ackme 29:b6af04b77a56 248 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 249
dan_ackme 29:b6af04b77a56 250 return result;
dan_ackme 29:b6af04b77a56 251 }
dan_ackme 29:b6af04b77a56 252
dan_ackme 29:b6af04b77a56 253 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 254 WiconnectResult GhmInterface::ghmWrite(const GhmElementArray *elementArray)
dan_ackme 29:b6af04b77a56 255 {
dan_ackme 29:b6af04b77a56 256 WiconnectResult result;
dan_ackme 29:b6af04b77a56 257 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 258
dan_ackme 29:b6af04b77a56 259 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 260 {
dan_ackme 29:b6af04b77a56 261 char *ptr = &cmdBuffer[4];
dan_ackme 29:b6af04b77a56 262 sprintf(cmdBuffer, "gwr ");
dan_ackme 29:b6af04b77a56 263
dan_ackme 29:b6af04b77a56 264 const GhmElement *elEnd = &elementArray->elements[elementArray->count];
dan_ackme 29:b6af04b77a56 265 for(const GhmElement *el = &elementArray->elements[0]; el < elEnd; ++el)
dan_ackme 29:b6af04b77a56 266 {
dan_ackme 29:b6af04b77a56 267 if(el-> type == GHM_VALUE_INT)
dan_ackme 29:b6af04b77a56 268 {
dan_ackme 29:b6af04b77a56 269 ptr += sprintf(ptr, "%s,%lu|", el->elementName, el->u.intValue);
dan_ackme 29:b6af04b77a56 270 }
dan_ackme 29:b6af04b77a56 271 else
dan_ackme 29:b6af04b77a56 272 {
dan_ackme 29:b6af04b77a56 273 ptr += sprintf(ptr, "%s,%s|", el->elementName, el->u.strValue);
dan_ackme 29:b6af04b77a56 274 }
dan_ackme 29:b6af04b77a56 275 }
dan_ackme 29:b6af04b77a56 276 *(ptr-1) = 0;
dan_ackme 29:b6af04b77a56 277 }
dan_ackme 29:b6af04b77a56 278
dan_ackme 29:b6af04b77a56 279 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 280
dan_ackme 29:b6af04b77a56 281 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 282
dan_ackme 29:b6af04b77a56 283 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 284
dan_ackme 29:b6af04b77a56 285 return result;
dan_ackme 29:b6af04b77a56 286 }
dan_ackme 29:b6af04b77a56 287
dan_ackme 29:b6af04b77a56 288 /*************************************************************************************************/
dan_ackme 29:b6af04b77a56 289 WiconnectResult GhmInterface::ghmSynchronize(GhmSyncType type)
dan_ackme 29:b6af04b77a56 290 {
dan_ackme 29:b6af04b77a56 291 WiconnectResult result;
dan_ackme 29:b6af04b77a56 292 char *cmdBuffer = wiconnect->internalBuffer;
dan_ackme 29:b6af04b77a56 293
dan_ackme 29:b6af04b77a56 294 if(WICONNECT_IS_IDLE())
dan_ackme 29:b6af04b77a56 295 {
dan_ackme 29:b6af04b77a56 296 sprintf(cmdBuffer, "gsy %s", (type == GHM_SYNC_PUSH_ONLY) ? "push" :
dan_ackme 29:b6af04b77a56 297 (type == GHM_SYNC_PULL_ONLY) ? "pull" : "");
dan_ackme 29:b6af04b77a56 298 }
dan_ackme 29:b6af04b77a56 299
dan_ackme 29:b6af04b77a56 300 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 29:b6af04b77a56 301
dan_ackme 29:b6af04b77a56 302 result = wiconnect->sendCommand(cmdBuffer);
dan_ackme 29:b6af04b77a56 303
dan_ackme 29:b6af04b77a56 304 CHECK_CLEANUP_COMMAND();
dan_ackme 29:b6af04b77a56 305
dan_ackme 29:b6af04b77a56 306 return result;
dan_ackme 29:b6af04b77a56 307 }