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/network/NetworkScan.cpp	Mon Aug 11 09:58:24 2014 +0000
@@ -0,0 +1,143 @@
+/*
+ * 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 "Wiconnect.h"
+#include "internal/common.h"
+
+
+#define SCAN_TIMEOUT 15000
+
+
+
+
+/*************************************************************************************************/
+WiconnectResult NetworkInterface::scan(ScanResultList &resultList, const uint8_t *channelList, const char* ssid)
+{
+    WiconnectResult result;
+    char cmdBuffer[WICONNECT_MAX_CMD_SIZE];
+
+    CHECK_CALLBACK_AVAILABLE(completeHandler_);
+
+    if(WICONNECT_IS_IDLE())
+    {
+#define SCAN_CMD "scan -v "
+        char *cmdBufferPtr = cmdBuffer + sizeof(SCAN_CMD)-1;
+
+        strcpy(cmdBuffer, SCAN_CMD);
+
+        if(channelList != NULL)
+        {
+            for(const uint8_t *ch = (const uint8_t *)channelList; *ch != 0; ++ch)
+            {
+                cmdBufferPtr += sprintf(cmdBufferPtr, "%d,", *ch);
+            }
+            *(cmdBufferPtr-1) = ' ';
+        }
+        else
+        {
+            strcat(cmdBufferPtr, "all ");
+            cmdBufferPtr += 4;
+        }
+
+        if(ssid != NULL)
+        {
+            strcpy(cmdBufferPtr, ssid);
+        }
+    }
+
+    CHECK_OTHER_COMMAND_EXECUTING();
+
+    //if(!completeHandler_.isValid())
+    {
+        if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand(SCAN_TIMEOUT, cmdBuffer)))
+        {
+            result = processScanResults(wiconnect->internalBuffer, resultList);
+        }
+    }
+//#ifdef WICONNECT_ASYNC_TIMER_ENABLED
+//    else
+//    {
+//        QueuedCommand *cmd = new QueuedCommand(NULL, 4096, SCAN_TIMEOUT, cmdBuffer);
+//        cmd->userData = (void*)resultList;
+//        completeHandler = completeHandler_;
+//        if(WICONNECT_FAILED(result, wiconnect->enqueueCommand(cmd, Callback(this, &NetworkInterface::scanCompleteCallback))))
+//        {
+//            delete cmd;
+//        }
+//        else
+//        {
+//            result = WICONNECT_PROCESSING;
+//        }
+//    }
+//#endif
+
+    CHECK_CLEANUP_COMMAND();
+
+    return result;
+}
+
+
+
+
+
+/*************************************************************************************************/
+WiconnectResult NetworkInterface::processScanResults(char *resultStr, ScanResultList &resultList)
+{
+    WiconnectResult result = WICONNECT_SUCCESS;
+    char *line, *savedLine;
+
+    for(savedLine = resultStr; (line = StringUtil::strtok_r(savedLine, "\r\n", &savedLine)) != NULL;)
+    {
+        char *toks[9], *savedTok;
+
+        if(*line != '#')
+        {
+            continue;
+        }
+        savedTok = line + 2;
+
+        for(int i = 0; i < 8 && (toks[i] = StringUtil::strtok_r(savedTok, " ", &savedTok)) != NULL; ++i)
+        {
+            if(toks[i] == NULL)
+            {
+                result = WICONNECT_RESPONSE_PARSE_ERROR;
+                goto exit;
+            }
+        }
+
+        if(WICONNECT_FAILED(result, resultList.add(toks[1], toks[2], toks[3], toks[4], toks[5], savedTok)))
+        {
+            goto exit;
+        }
+    }
+
+    exit:
+    return result;
+}
+
+//#ifdef WICONNECT_ASYNC_TIMER_ENABLED
+//
+/*************************************************************************************************/
+//void NetworkInterface::scanCompleteCallback(WiconnectResult result, void *arg1, void *arg2)
+//{
+//    QueuedCommand *cmd = (QueuedCommand*)arg1;
+//    ScanResultList *listPtr = (ScanResultList*)cmd->userData;
+//
+//    if(result == WICONNECT_SUCCESS)
+//    {
+//        result = processScanResults(cmd->responseBuffer, listPtr);
+//    }
+//    delete cmd;
+//
+//    completeHandler.call(result, listPtr, NULL);
+//}
+//
+//#endif
+