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
Diff: internal/wiconnect/SendCommand.cpp
- Revision:
- 0:ea85c4bb5e1f
- Child:
- 1:6ec9998427ad
diff -r 000000000000 -r ea85c4bb5e1f internal/wiconnect/SendCommand.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internal/wiconnect/SendCommand.cpp Mon Aug 11 09:58:24 2014 +0000 @@ -0,0 +1,193 @@ +/* + * Copyright 2014, ACKme Networks + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks; + * the contents of this file may not be disclosed to third parties, copied + * or duplicated in any form, in whole or in part, without the prior + * written permission of ACKme Networks. + */ + + +#include "CommandCommon.h" + + + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, char *responseBuffer, + int responseBufferLen, int timeoutMs, const ReaderFunc &reader, void *user, + const char *cmd, va_list vaList) +{ + // preprocessor assertion + ct_assert(sizeof(commandContext) >=sizeof(CommandContext)); + CHECK_INITIALIZED(); + CHECK_NULL_BUFFER(responseBuffer); + if(commandExecuting) + { + return checkCurrentCommand(); + } + + CommandContext *context = (CommandContext*)commandContext; + CommandHeader *header = (CommandHeader*)commandHeaderBuffer; + + int len = vsnprintf(commandFormatBuffer, sizeof(commandFormatBuffer)-3, cmd, vaList); + + if(len > (int)(sizeof(commandFormatBuffer)-3)) + { + DEBUG_ERROR("Command overflowed: %d > %d", len, sizeof(commandFormatBuffer)-3); + return WICONNECT_OVERFLOW; + } + + commandFormatBuffer[len++] = '\r'; + commandFormatBuffer[len++] = '\n'; + commandFormatBuffer[len] = 0; + + RESET_CMD_HEADER(header); + + memset(context, 0, sizeof(CommandContext)); + context->responseBuffer = responseBuffer; + context->responseBufferPtr = context->responseBuffer; + context->responseBufferLen = responseBufferLen; + context->commandLen = len; + context->commandPtr = commandFormatBuffer; + context->reader = reader; + context->user = user; + context->timeoutMs = timeoutMs; + context->callback = completeCallback; + context->nonBlocking = nonBlocking; + + DEBUG_CMD_SEND(commandFormatBuffer); + + commandExecuting = true; + flush(0); + timeoutTimer.reset(); + + return checkCurrentCommand(); +} + + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, + const ReaderFunc &reader, void *user, const char *cmd, va_list vaList) +{ + return sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, reader, user, cmd, vaList); +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, + const ReaderFunc &reader, void *user, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, reader, user, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand( int timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), internalBuffer, internalBufferSize, timeoutMs, reader, user, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const ReaderFunc &reader, void *user, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, reader, user, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), responseBuffer, responseBufferLen, timeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(completeCallback, responseBuffer, responseBufferLen, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(char *responseBuffer, int responseBufferLen, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), responseBuffer, responseBufferLen, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(completeCallback, internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const Callback &completeCallback, int timeoutMs, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(completeCallback, internalBuffer, internalBufferSize, timeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(int timeoutMs, const char *cmd, ...) +{ + WiconnectResult result; + va_list args; + va_start(args, cmd); + result = sendCommand(Callback(), internalBuffer, internalBufferSize, timeoutMs, ReaderFunc(), NULL, cmd, args); + va_end(args); + return result; +} + +/*************************************************************************************************/ +WiconnectResult Wiconnect::sendCommand(const char *cmd, va_list vaList) +{ + return sendCommand(Callback(), internalBuffer, internalBufferSize, defaultTimeoutMs, ReaderFunc(), NULL, cmd, vaList); +} + +