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
SendCommand.cpp
00001 /** 00002 * ACKme WiConnect Host Library is licensed under the BSD licence: 00003 * 00004 * Copyright (c)2014 ACKme Networks. 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without modification, 00008 * are permitted provided that the following conditions are met: 00009 * 00010 * 1. Redistributions of source code must retain the above copyright notice, 00011 * this list of conditions and the following disclaimer. 00012 * 2. Redistributions in binary form must reproduce the above copyright notice, 00013 * this list of conditions and the following disclaimer in the documentation 00014 * and/or other materials provided with the distribution. 00015 * 3. The name of the author may not be used to endorse or promote products 00016 * derived from this software without specific prior written permission. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED 00019 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00020 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 00021 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00022 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00023 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00026 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 00027 * OF SUCH DAMAGE. 00028 */ 00029 00030 #include "internal/CommandCommon.h" 00031 00032 00033 /*************************************************************************************************/ 00034 WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, char *responseBuffer, 00035 int responseBufferLen, TimerTimeout timeoutMs, const ReaderFunc &reader, void *user, 00036 const char *cmd, va_list vaList) 00037 { 00038 // preprocessor assertion 00039 ct_assert(sizeof(commandContext) >=sizeof(CommandContext)); 00040 CHECK_INITIALIZED(); 00041 CHECK_NULL_BUFFER(responseBuffer); 00042 if(commandExecuting) 00043 { 00044 return checkCurrentCommand(); 00045 } 00046 00047 CommandContext *context = (CommandContext*)commandContext; 00048 CommandHeader *header = (CommandHeader*)commandHeaderBuffer; 00049 00050 int len = vsnprintf(commandFormatBuffer, sizeof(commandFormatBuffer)-3, cmd, vaList); 00051 00052 if(len > (int)(sizeof(commandFormatBuffer)-3)) 00053 { 00054 DEBUG_ERROR("Command overflowed: %d > %d", len, sizeof(commandFormatBuffer)-3); 00055 return WICONNECT_OVERFLOW; 00056 } 00057 00058 commandFormatBuffer[len++] = '\r'; 00059 commandFormatBuffer[len++] = '\n'; 00060 commandFormatBuffer[len] = 0; 00061 00062 RESET_CMD_HEADER(header); 00063 00064 memset(context, 0, sizeof(CommandContext)); 00065 context->responseBuffer = responseBuffer; 00066 context->responseBufferPtr = context->responseBuffer; 00067 context->responseBufferLen = responseBufferLen; 00068 context->commandLen = len; 00069 context->commandPtr = commandFormatBuffer; 00070 context->reader = reader; 00071 context->user = user; 00072 context->timeoutMs = timeoutMs; 00073 context->callback = completeCallback; 00074 context->nonBlocking = nonBlocking; 00075 00076 DEBUG_CMD_SEND(commandFormatBuffer); 00077 00078 commandExecuting = true; 00079 flush(0); 00080 timeoutTimer.reset(); 00081 00082 return checkCurrentCommand(); 00083 } 00084 00085 00086 /*************************************************************************************************/ 00087 WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, TimerTimeout timeoutMs, 00088 const ReaderFunc &reader, void *user, const char *cmd, va_list vaList) 00089 { 00090 return sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, reader, user, cmd, vaList); 00091 } 00092 00093 /*************************************************************************************************/ 00094 WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, TimerTimeout timeoutMs, 00095 const ReaderFunc &reader, void *user, const char *cmd, ...) 00096 { 00097 WiconnectResult result; 00098 va_list args; 00099 va_start(args, cmd); 00100 result = sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, reader, user, cmd, args); 00101 va_end(args); 00102 return result; 00103 } 00104 00105 /*************************************************************************************************/ 00106 WiconnectResult Wiconnect::sendCommand(TimerTimeout timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, ...) 00107 { 00108 WiconnectResult result; 00109 va_list args; 00110 va_start(args, cmd); 00111 result = sendCommand(Callback(), internalBuffer, internalBufferSize, timeoutMs, reader, user, cmd, args); 00112 va_end(args); 00113 return result; 00114 } 00115 00116 /*************************************************************************************************/ 00117 WiconnectResult Wiconnect::sendCommand(const ReaderFunc &reader, void *user, const char *cmd, ...) 00118 { 00119 WiconnectResult result; 00120 va_list args; 00121 va_start(args, cmd); 00122 result = sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, reader, user, cmd, args); 00123 va_end(args); 00124 return result; 00125 } 00126 00127 /*************************************************************************************************/ 00128 WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, TimerTimeout timeoutMs, const char *cmd, ...) 00129 { 00130 WiconnectResult result; 00131 va_list args; 00132 va_start(args, cmd); 00133 result = sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, ReaderFunc(), NULL, cmd, args); 00134 va_end(args); 00135 return result; 00136 } 00137 00138 /*************************************************************************************************/ 00139 WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen, const char *cmd, ...) 00140 { 00141 WiconnectResult result; 00142 va_list args; 00143 va_start(args, cmd); 00144 result = sendCommand(completeCallback, responseBuffer, responseBufferLen, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); 00145 va_end(args); 00146 return result; 00147 } 00148 00149 /*************************************************************************************************/ 00150 WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, const char *cmd, ...) 00151 { 00152 WiconnectResult result; 00153 va_list args; 00154 va_start(args, cmd); 00155 result = sendCommand(Callback(), responseBuffer, responseBufferLen, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); 00156 va_end(args); 00157 return result; 00158 } 00159 00160 /*************************************************************************************************/ 00161 WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, const char *cmd, ...) 00162 { 00163 WiconnectResult result; 00164 va_list args; 00165 va_start(args, cmd); 00166 result = sendCommand(completeCallback, internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); 00167 va_end(args); 00168 return result; 00169 } 00170 00171 /*************************************************************************************************/ 00172 WiconnectResult Wiconnect::sendCommand(const char *cmd, ...) 00173 { 00174 WiconnectResult result; 00175 va_list args; 00176 va_start(args, cmd); 00177 result = sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); 00178 va_end(args); 00179 return result; 00180 } 00181 00182 /*************************************************************************************************/ 00183 WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, TimerTimeout timeoutMs, const char *cmd, ...) 00184 { 00185 WiconnectResult result; 00186 va_list args; 00187 va_start(args, cmd); 00188 result = sendCommand(completeCallback, internalBuffer, internalBufferSize, timeoutMs, ReaderFunc(), NULL, cmd, args); 00189 va_end(args); 00190 return result; 00191 } 00192 00193 /*************************************************************************************************/ 00194 WiconnectResult Wiconnect::sendCommand(TimerTimeout timeoutMs, const char *cmd, ...) 00195 { 00196 WiconnectResult result; 00197 va_list args; 00198 va_start(args, cmd); 00199 result = sendCommand(Callback(), internalBuffer, internalBufferSize, timeoutMs, ReaderFunc(), NULL, cmd, args); 00200 va_end(args); 00201 return result; 00202 } 00203 00204 /*************************************************************************************************/ 00205 WiconnectResult Wiconnect::sendCommand(const char *cmd, va_list vaList) 00206 { 00207 return sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, vaList); 00208 } 00209
Generated on Tue Jul 12 2022 17:35:58 by 1.7.2