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
internal/wiconnect/SendCommand.cpp
- Committer:
- dan_ackme
- Date:
- 2014-08-11
- Revision:
- 1:6ec9998427ad
- Parent:
- 0:ea85c4bb5e1f
- Child:
- 16:7f1d6d359787
File content as of revision 1:6ec9998427ad:
/* * 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); }