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

Revision:
0:ea85c4bb5e1f
Child:
1:6ec9998427ad
--- /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);
+}
+
+