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 09:58:24 2014 +0000
Revision:
0:ea85c4bb5e1f
Child:
1:6ec9998427ad
initial check-in

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
dan_ackme 0:ea85c4bb5e1f 12 #include "CommandCommon.h"
dan_ackme 0:ea85c4bb5e1f 13
dan_ackme 0:ea85c4bb5e1f 14
dan_ackme 0:ea85c4bb5e1f 15
dan_ackme 0:ea85c4bb5e1f 16 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 17 WiconnectResult Wiconnect::checkCurrentCommand()
dan_ackme 0:ea85c4bb5e1f 18 {
dan_ackme 0:ea85c4bb5e1f 19 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 20
dan_ackme 0:ea85c4bb5e1f 21 start:
dan_ackme 0:ea85c4bb5e1f 22 CHECK_INITIALIZED();
dan_ackme 0:ea85c4bb5e1f 23 if(!commandExecuting)
dan_ackme 0:ea85c4bb5e1f 24 {
dan_ackme 0:ea85c4bb5e1f 25 return WICONNECT_IDLE;
dan_ackme 0:ea85c4bb5e1f 26 }
dan_ackme 0:ea85c4bb5e1f 27
dan_ackme 0:ea85c4bb5e1f 28 CommandContext *context = (CommandContext*)commandContext;
dan_ackme 0:ea85c4bb5e1f 29
dan_ackme 0:ea85c4bb5e1f 30 if(context->commandLen > 0)
dan_ackme 0:ea85c4bb5e1f 31 {
dan_ackme 0:ea85c4bb5e1f 32 const int timeout = context->nonBlocking ? 0 : timeoutTimer.remainingMs(context->timeoutMs);
dan_ackme 0:ea85c4bb5e1f 33 const int bytesToWrite = context->commandLen;
dan_ackme 0:ea85c4bb5e1f 34 const int bytesWritten = serial.write(context->commandPtr, bytesToWrite, timeout);
dan_ackme 0:ea85c4bb5e1f 35 context->commandPtr += bytesWritten;
dan_ackme 0:ea85c4bb5e1f 36 context->commandLen -= bytesWritten;
dan_ackme 0:ea85c4bb5e1f 37 if(bytesToWrite != bytesWritten)
dan_ackme 0:ea85c4bb5e1f 38 {
dan_ackme 0:ea85c4bb5e1f 39 if(timeoutTimer.timedOut(context->timeoutMs))
dan_ackme 0:ea85c4bb5e1f 40 {
dan_ackme 0:ea85c4bb5e1f 41 issueCommandCallback(WICONNECT_TIMEOUT);
dan_ackme 0:ea85c4bb5e1f 42 return WICONNECT_TIMEOUT;
dan_ackme 0:ea85c4bb5e1f 43 }
dan_ackme 0:ea85c4bb5e1f 44 else
dan_ackme 0:ea85c4bb5e1f 45 {
dan_ackme 0:ea85c4bb5e1f 46 return WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 47 }
dan_ackme 0:ea85c4bb5e1f 48 }
dan_ackme 0:ea85c4bb5e1f 49 }
dan_ackme 0:ea85c4bb5e1f 50
dan_ackme 0:ea85c4bb5e1f 51 while(context->reader.isValid())
dan_ackme 0:ea85c4bb5e1f 52 {
dan_ackme 0:ea85c4bb5e1f 53 if(context->bytesToWrite == 0)
dan_ackme 0:ea85c4bb5e1f 54 {
dan_ackme 0:ea85c4bb5e1f 55 context->responseBufferPtr = context->responseBuffer;
dan_ackme 0:ea85c4bb5e1f 56 if(WICONNECT_FAILED(result, context->reader.call(context->user, context->responseBuffer, context->responseBufferLen, &context->bytesToWrite)))
dan_ackme 0:ea85c4bb5e1f 57 {
dan_ackme 0:ea85c4bb5e1f 58 issueCommandCallback(result);
dan_ackme 0:ea85c4bb5e1f 59 return result;
dan_ackme 0:ea85c4bb5e1f 60 }
dan_ackme 0:ea85c4bb5e1f 61 else if(context->bytesToWrite == EOF)
dan_ackme 0:ea85c4bb5e1f 62 {
dan_ackme 0:ea85c4bb5e1f 63 context->reader.setInvalid();
dan_ackme 0:ea85c4bb5e1f 64 context->bytesToWrite = 0;
dan_ackme 0:ea85c4bb5e1f 65 context->responseBufferPtr = context->responseBuffer;
dan_ackme 0:ea85c4bb5e1f 66 break;
dan_ackme 0:ea85c4bb5e1f 67 }
dan_ackme 0:ea85c4bb5e1f 68 else
dan_ackme 0:ea85c4bb5e1f 69 {
dan_ackme 0:ea85c4bb5e1f 70 timeoutTimer.reset();
dan_ackme 0:ea85c4bb5e1f 71 }
dan_ackme 0:ea85c4bb5e1f 72 }
dan_ackme 0:ea85c4bb5e1f 73 if(context->bytesToWrite > 0)
dan_ackme 0:ea85c4bb5e1f 74 {
dan_ackme 0:ea85c4bb5e1f 75 const int timeout = context->nonBlocking ? 0 : timeoutTimer.remainingMs(context->timeoutMs);
dan_ackme 0:ea85c4bb5e1f 76 const int bytesToWrite = context->bytesToWrite;
dan_ackme 0:ea85c4bb5e1f 77 const int bytesWritten = serial.write(context->responseBufferPtr, bytesToWrite, timeout);
dan_ackme 0:ea85c4bb5e1f 78 context->responseBufferPtr += bytesWritten;
dan_ackme 0:ea85c4bb5e1f 79 context->bytesToWrite -= bytesWritten;
dan_ackme 0:ea85c4bb5e1f 80 if(bytesToWrite != bytesWritten)
dan_ackme 0:ea85c4bb5e1f 81 {
dan_ackme 0:ea85c4bb5e1f 82 if(timeoutTimer.timedOut(context->timeoutMs))
dan_ackme 0:ea85c4bb5e1f 83 {
dan_ackme 0:ea85c4bb5e1f 84 issueCommandCallback(WICONNECT_TIMEOUT);
dan_ackme 0:ea85c4bb5e1f 85 return WICONNECT_TIMEOUT;
dan_ackme 0:ea85c4bb5e1f 86 }
dan_ackme 0:ea85c4bb5e1f 87 else
dan_ackme 0:ea85c4bb5e1f 88 {
dan_ackme 0:ea85c4bb5e1f 89 return WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 90 }
dan_ackme 0:ea85c4bb5e1f 91 }
dan_ackme 0:ea85c4bb5e1f 92 }
dan_ackme 0:ea85c4bb5e1f 93 }
dan_ackme 0:ea85c4bb5e1f 94
dan_ackme 0:ea85c4bb5e1f 95 result = receiveResponse();
dan_ackme 0:ea85c4bb5e1f 96 if(result == WICONNECT_PROCESSING && !context->nonBlocking)
dan_ackme 0:ea85c4bb5e1f 97 {
dan_ackme 0:ea85c4bb5e1f 98 goto start;
dan_ackme 0:ea85c4bb5e1f 99 }
dan_ackme 0:ea85c4bb5e1f 100 return result;
dan_ackme 0:ea85c4bb5e1f 101 }
dan_ackme 0:ea85c4bb5e1f 102
dan_ackme 0:ea85c4bb5e1f 103 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 104 WiconnectResult Wiconnect::receiveResponse()
dan_ackme 0:ea85c4bb5e1f 105 {
dan_ackme 0:ea85c4bb5e1f 106 for(;;)
dan_ackme 0:ea85c4bb5e1f 107 {
dan_ackme 0:ea85c4bb5e1f 108 WiconnectResult result = receivePacket();
dan_ackme 0:ea85c4bb5e1f 109
dan_ackme 0:ea85c4bb5e1f 110 if(result == WICONNECT_PROCESSING)
dan_ackme 0:ea85c4bb5e1f 111 {
dan_ackme 0:ea85c4bb5e1f 112 return WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 113 }
dan_ackme 0:ea85c4bb5e1f 114 else if(result == WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 115 {
dan_ackme 0:ea85c4bb5e1f 116 CommandHeader *header = (CommandHeader*)commandHeaderBuffer;
dan_ackme 0:ea85c4bb5e1f 117 CommandContext *context = (CommandContext*)commandContext;
dan_ackme 0:ea85c4bb5e1f 118
dan_ackme 0:ea85c4bb5e1f 119 // TODO: need to notify safemode
dan_ackme 0:ea85c4bb5e1f 120
dan_ackme 0:ea85c4bb5e1f 121 if(header->response_type == WICONNECT_CMD_TYPE_REPLY || header->response_type == WICONNECT_CMD_TYPE_SAFEMODE)
dan_ackme 0:ea85c4bb5e1f 122 {
dan_ackme 0:ea85c4bb5e1f 123 if(header->response_code != WICONNECT_CMD_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 124 {
dan_ackme 0:ea85c4bb5e1f 125 DEBUG_CMD_ERROR(header->response_code);
dan_ackme 0:ea85c4bb5e1f 126 flush();
dan_ackme 0:ea85c4bb5e1f 127 issueCommandCallback(WICONNECT_CMD_RESPONSE_ERROR);
dan_ackme 0:ea85c4bb5e1f 128 return WICONNECT_CMD_RESPONSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 129 }
dan_ackme 0:ea85c4bb5e1f 130 else if(header->response_len > 0)
dan_ackme 0:ea85c4bb5e1f 131 {
dan_ackme 0:ea85c4bb5e1f 132 DEBUG_CMD_RESPONSE(context->responseBuffer);
dan_ackme 0:ea85c4bb5e1f 133 header->response_len -= 2;
dan_ackme 0:ea85c4bb5e1f 134 context->responseBuffer[header->response_len] = 0;
dan_ackme 0:ea85c4bb5e1f 135 }
dan_ackme 0:ea85c4bb5e1f 136 else
dan_ackme 0:ea85c4bb5e1f 137 {
dan_ackme 0:ea85c4bb5e1f 138 *context->responseBuffer = 0;
dan_ackme 0:ea85c4bb5e1f 139 }
dan_ackme 0:ea85c4bb5e1f 140
dan_ackme 0:ea85c4bb5e1f 141 issueCommandCallback(WICONNECT_SUCCESS);
dan_ackme 0:ea85c4bb5e1f 142
dan_ackme 0:ea85c4bb5e1f 143 return WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 144 }
dan_ackme 0:ea85c4bb5e1f 145 else
dan_ackme 0:ea85c4bb5e1f 146 {
dan_ackme 0:ea85c4bb5e1f 147 DEBUG_CMD_LOG(context->responseBuffer);
dan_ackme 0:ea85c4bb5e1f 148 RESET_CMD_HEADER(header);
dan_ackme 0:ea85c4bb5e1f 149 context->responseBufferPtr = context->responseBuffer;
dan_ackme 0:ea85c4bb5e1f 150 }
dan_ackme 0:ea85c4bb5e1f 151 }
dan_ackme 0:ea85c4bb5e1f 152 else
dan_ackme 0:ea85c4bb5e1f 153 {
dan_ackme 0:ea85c4bb5e1f 154 issueCommandCallback(result);
dan_ackme 0:ea85c4bb5e1f 155 return result;
dan_ackme 0:ea85c4bb5e1f 156 }
dan_ackme 0:ea85c4bb5e1f 157 }
dan_ackme 0:ea85c4bb5e1f 158
dan_ackme 0:ea85c4bb5e1f 159 // shouldn't get here...
dan_ackme 0:ea85c4bb5e1f 160 return WICONNECT_ERROR;
dan_ackme 0:ea85c4bb5e1f 161 }
dan_ackme 0:ea85c4bb5e1f 162
dan_ackme 0:ea85c4bb5e1f 163 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 164 WiconnectResult Wiconnect::receivePacket()
dan_ackme 0:ea85c4bb5e1f 165 {
dan_ackme 0:ea85c4bb5e1f 166 CommandHeader *header = (CommandHeader*)commandHeaderBuffer;
dan_ackme 0:ea85c4bb5e1f 167 CommandContext *context = (CommandContext*)commandContext;
dan_ackme 0:ea85c4bb5e1f 168
dan_ackme 0:ea85c4bb5e1f 169 if(header->bytes_remaining > 0)
dan_ackme 0:ea85c4bb5e1f 170 {
dan_ackme 0:ea85c4bb5e1f 171 uint16_t bytesReceived;
dan_ackme 0:ea85c4bb5e1f 172 uint8_t buffer[WICONNECT_HEADER_LENGTH];
dan_ackme 0:ea85c4bb5e1f 173
dan_ackme 0:ea85c4bb5e1f 174 while(header->bytes_remaining > 0)
dan_ackme 0:ea85c4bb5e1f 175 {
dan_ackme 0:ea85c4bb5e1f 176 const int timeout = context->nonBlocking ? 0 : timeoutTimer.remainingMs(context->timeoutMs);
dan_ackme 0:ea85c4bb5e1f 177 bytesReceived = serial.read((char*)buffer, header->bytes_remaining, timeout);
dan_ackme 0:ea85c4bb5e1f 178 if(bytesReceived == 0)
dan_ackme 0:ea85c4bb5e1f 179 {
dan_ackme 0:ea85c4bb5e1f 180 return timeoutTimer.timedOut(context->timeoutMs) ? WICONNECT_TIMEOUT : WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 181 }
dan_ackme 0:ea85c4bb5e1f 182
dan_ackme 0:ea85c4bb5e1f 183 for(uint8_t *ptr = buffer; bytesReceived > 0; ++ptr)
dan_ackme 0:ea85c4bb5e1f 184 {
dan_ackme 0:ea85c4bb5e1f 185 if(header->response_type == WICONNECT_CMD_TYPE_NULL)
dan_ackme 0:ea85c4bb5e1f 186 {
dan_ackme 0:ea85c4bb5e1f 187 if( *ptr == WICONNECT_CMD_TYPE_REPLY ||
dan_ackme 0:ea85c4bb5e1f 188 *ptr == WICONNECT_CMD_TYPE_LOG ||
dan_ackme 0:ea85c4bb5e1f 189 *ptr == WICONNECT_CMD_TYPE_SAFEMODE)
dan_ackme 0:ea85c4bb5e1f 190 {
dan_ackme 0:ea85c4bb5e1f 191 header->response_type = (ResponseType)*ptr;
dan_ackme 0:ea85c4bb5e1f 192 -- header->bytes_remaining;
dan_ackme 0:ea85c4bb5e1f 193 }
dan_ackme 0:ea85c4bb5e1f 194 --bytesReceived;
dan_ackme 0:ea85c4bb5e1f 195 }
dan_ackme 0:ea85c4bb5e1f 196 else if(header->response_code == WICONNECT_CMD_CODE_NULL)
dan_ackme 0:ea85c4bb5e1f 197 {
dan_ackme 0:ea85c4bb5e1f 198 if(*ptr >= '0' && *ptr <= '7')
dan_ackme 0:ea85c4bb5e1f 199 {
dan_ackme 0:ea85c4bb5e1f 200 header->response_code = (ResponseCode)(*ptr - '0' + 1);
dan_ackme 0:ea85c4bb5e1f 201 --header->bytes_remaining;
dan_ackme 0:ea85c4bb5e1f 202 header->len_buffer_ptr = header->len_buffer;
dan_ackme 0:ea85c4bb5e1f 203 }
dan_ackme 0:ea85c4bb5e1f 204 else
dan_ackme 0:ea85c4bb5e1f 205 {
dan_ackme 0:ea85c4bb5e1f 206 RESET_CMD_HEADER(header);
dan_ackme 0:ea85c4bb5e1f 207 }
dan_ackme 0:ea85c4bb5e1f 208 --bytesReceived;
dan_ackme 0:ea85c4bb5e1f 209 }
dan_ackme 0:ea85c4bb5e1f 210 else if(header->bytes_remaining > 2)
dan_ackme 0:ea85c4bb5e1f 211 {
dan_ackme 0:ea85c4bb5e1f 212 uint8_t len_chars = MIN((int)bytesReceived, (int)(header->bytes_remaining-2));
dan_ackme 0:ea85c4bb5e1f 213 header->bytes_remaining -= len_chars;
dan_ackme 0:ea85c4bb5e1f 214 bytesReceived -= len_chars;
dan_ackme 0:ea85c4bb5e1f 215 while(len_chars-- > 0)
dan_ackme 0:ea85c4bb5e1f 216 {
dan_ackme 0:ea85c4bb5e1f 217 *header->len_buffer_ptr++ = *ptr++;
dan_ackme 0:ea85c4bb5e1f 218 }
dan_ackme 0:ea85c4bb5e1f 219 --ptr; // need to decrement since the for loop increments
dan_ackme 0:ea85c4bb5e1f 220 if(header->bytes_remaining == 2)
dan_ackme 0:ea85c4bb5e1f 221 {
dan_ackme 0:ea85c4bb5e1f 222 uint32_t packetLen;
dan_ackme 0:ea85c4bb5e1f 223 *header->len_buffer_ptr = 0;
dan_ackme 0:ea85c4bb5e1f 224 if(!StringUtil::strToUint32((const char*)header->len_buffer, &packetLen))
dan_ackme 0:ea85c4bb5e1f 225 {
dan_ackme 0:ea85c4bb5e1f 226 RESET_CMD_HEADER(header);
dan_ackme 0:ea85c4bb5e1f 227 }
dan_ackme 0:ea85c4bb5e1f 228 else
dan_ackme 0:ea85c4bb5e1f 229 {
dan_ackme 0:ea85c4bb5e1f 230 if((int)packetLen > context->responseBufferLen)
dan_ackme 0:ea85c4bb5e1f 231 {
dan_ackme 0:ea85c4bb5e1f 232 DEBUG_ERROR("Packet larger than response buffer: %d > %d", packetLen, context->responseBufferLen);
dan_ackme 0:ea85c4bb5e1f 233 return WICONNECT_OVERFLOW;
dan_ackme 0:ea85c4bb5e1f 234 }
dan_ackme 0:ea85c4bb5e1f 235 header->response_len = (uint16_t)packetLen;
dan_ackme 0:ea85c4bb5e1f 236 context->bytesToRead = packetLen;
dan_ackme 0:ea85c4bb5e1f 237 }
dan_ackme 0:ea85c4bb5e1f 238 }
dan_ackme 0:ea85c4bb5e1f 239 }
dan_ackme 0:ea85c4bb5e1f 240 else if(header->bytes_remaining == 2)
dan_ackme 0:ea85c4bb5e1f 241 {
dan_ackme 0:ea85c4bb5e1f 242 --bytesReceived;
dan_ackme 0:ea85c4bb5e1f 243 if(*ptr == '\r')
dan_ackme 0:ea85c4bb5e1f 244 {
dan_ackme 0:ea85c4bb5e1f 245 header->bytes_remaining = 1;
dan_ackme 0:ea85c4bb5e1f 246 }
dan_ackme 0:ea85c4bb5e1f 247 else
dan_ackme 0:ea85c4bb5e1f 248 {
dan_ackme 0:ea85c4bb5e1f 249 RESET_CMD_HEADER(header);
dan_ackme 0:ea85c4bb5e1f 250 }
dan_ackme 0:ea85c4bb5e1f 251 }
dan_ackme 0:ea85c4bb5e1f 252 else
dan_ackme 0:ea85c4bb5e1f 253 {
dan_ackme 0:ea85c4bb5e1f 254 --bytesReceived;
dan_ackme 0:ea85c4bb5e1f 255 if(*ptr == '\n')
dan_ackme 0:ea85c4bb5e1f 256 {
dan_ackme 0:ea85c4bb5e1f 257 header->bytes_remaining = 0;
dan_ackme 0:ea85c4bb5e1f 258 break;
dan_ackme 0:ea85c4bb5e1f 259 }
dan_ackme 0:ea85c4bb5e1f 260 else
dan_ackme 0:ea85c4bb5e1f 261 {
dan_ackme 0:ea85c4bb5e1f 262 RESET_CMD_HEADER(header);
dan_ackme 0:ea85c4bb5e1f 263 }
dan_ackme 0:ea85c4bb5e1f 264 }
dan_ackme 0:ea85c4bb5e1f 265 }
dan_ackme 0:ea85c4bb5e1f 266 }
dan_ackme 0:ea85c4bb5e1f 267 }
dan_ackme 0:ea85c4bb5e1f 268
dan_ackme 0:ea85c4bb5e1f 269 while(context->bytesToRead > 0)
dan_ackme 0:ea85c4bb5e1f 270 {
dan_ackme 0:ea85c4bb5e1f 271 const int timeout = context->nonBlocking ? 0 : timeoutTimer.remainingMs(context->timeoutMs);
dan_ackme 0:ea85c4bb5e1f 272 const int bytesToRead = context->bytesToRead;
dan_ackme 0:ea85c4bb5e1f 273 const int bytesReceived = serial.read(context->responseBufferPtr, bytesToRead, timeout);
dan_ackme 0:ea85c4bb5e1f 274 context->responseBufferPtr += bytesReceived;
dan_ackme 0:ea85c4bb5e1f 275 context->bytesToRead -= bytesReceived;
dan_ackme 0:ea85c4bb5e1f 276
dan_ackme 0:ea85c4bb5e1f 277 if(bytesReceived != bytesToRead)
dan_ackme 0:ea85c4bb5e1f 278 {
dan_ackme 0:ea85c4bb5e1f 279 return timeoutTimer.timedOut(context->timeoutMs) ? WICONNECT_TIMEOUT : WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 280 }
dan_ackme 0:ea85c4bb5e1f 281 else if(context->bytesToRead == 0)
dan_ackme 0:ea85c4bb5e1f 282 {
dan_ackme 0:ea85c4bb5e1f 283 *context->responseBufferPtr = 0;
dan_ackme 0:ea85c4bb5e1f 284 }
dan_ackme 0:ea85c4bb5e1f 285 }
dan_ackme 0:ea85c4bb5e1f 286
dan_ackme 0:ea85c4bb5e1f 287 return (header->response_code != WICONNECT_CMD_CODE_NULL &&
dan_ackme 0:ea85c4bb5e1f 288 header->response_type != WICONNECT_CMD_TYPE_NULL &&
dan_ackme 0:ea85c4bb5e1f 289 context->bytesToRead == 0) ? WICONNECT_SUCCESS : WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 290 }
dan_ackme 0:ea85c4bb5e1f 291
dan_ackme 0:ea85c4bb5e1f 292 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 293 void Wiconnect::issueCommandCallback(WiconnectResult result)
dan_ackme 0:ea85c4bb5e1f 294 {
dan_ackme 0:ea85c4bb5e1f 295 CommandHeader *header = (CommandHeader*)commandHeaderBuffer;
dan_ackme 0:ea85c4bb5e1f 296 CommandContext *context = (CommandContext*)commandContext;
dan_ackme 0:ea85c4bb5e1f 297 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 298 void *returnPtr = (currentQueuedCommand != NULL) ? (void*)currentQueuedCommand : (void*)context->responseBuffer;
dan_ackme 0:ea85c4bb5e1f 299 currentQueuedCommand = NULL;
dan_ackme 0:ea85c4bb5e1f 300 commandProcessorTimer.stop();
dan_ackme 0:ea85c4bb5e1f 301 #else
dan_ackme 0:ea85c4bb5e1f 302 void *returnPtr = (void*)context->responseBuffer;
dan_ackme 0:ea85c4bb5e1f 303 #endif
dan_ackme 0:ea85c4bb5e1f 304 context->callback.call(result, returnPtr, (void*)(uint32_t)header->response_len);
dan_ackme 0:ea85c4bb5e1f 305 commandExecuting = false;
dan_ackme 0:ea85c4bb5e1f 306
dan_ackme 0:ea85c4bb5e1f 307 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 308 processNextQueuedCommand();
dan_ackme 0:ea85c4bb5e1f 309 #endif
dan_ackme 0:ea85c4bb5e1f 310 }
dan_ackme 0:ea85c4bb5e1f 311
dan_ackme 0:ea85c4bb5e1f 312 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 313 void Wiconnect::stopCurrentCommand()
dan_ackme 0:ea85c4bb5e1f 314 {
dan_ackme 0:ea85c4bb5e1f 315 internalProcessingState = 0;
dan_ackme 0:ea85c4bb5e1f 316 issueCommandCallback(WICONNECT_ABORTED);
dan_ackme 0:ea85c4bb5e1f 317 }
dan_ackme 0:ea85c4bb5e1f 318
dan_ackme 0:ea85c4bb5e1f 319