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

Committer:
dan_ackme
Date:
Mon Aug 11 03:29:30 2014 -0700
Revision:
1:6ec9998427ad
Parent:
0:ea85c4bb5e1f
Child:
16:7f1d6d359787
fixed compiler warnings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 0:ea85c4bb5e1f 1 /*
dan_ackme 0:ea85c4bb5e1f 2 * Copyright 2014, ACKme Networks
dan_ackme 0:ea85c4bb5e1f 3 * All Rights Reserved.
dan_ackme 0:ea85c4bb5e1f 4 *
dan_ackme 0:ea85c4bb5e1f 5 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
dan_ackme 0:ea85c4bb5e1f 6 * the contents of this file may not be disclosed to third parties, copied
dan_ackme 0:ea85c4bb5e1f 7 * or duplicated in any form, in whole or in part, without the prior
dan_ackme 0:ea85c4bb5e1f 8 * written permission of ACKme Networks.
dan_ackme 0:ea85c4bb5e1f 9 */
dan_ackme 0:ea85c4bb5e1f 10
dan_ackme 0:ea85c4bb5e1f 11 #include "Wiconnect.h"
dan_ackme 0:ea85c4bb5e1f 12 #include "internal/common.h"
dan_ackme 0:ea85c4bb5e1f 13
dan_ackme 0:ea85c4bb5e1f 14
dan_ackme 0:ea85c4bb5e1f 15 #define SCAN_TIMEOUT 15000
dan_ackme 0:ea85c4bb5e1f 16
dan_ackme 0:ea85c4bb5e1f 17
dan_ackme 0:ea85c4bb5e1f 18
dan_ackme 0:ea85c4bb5e1f 19
dan_ackme 0:ea85c4bb5e1f 20 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 21 WiconnectResult NetworkInterface::scan(ScanResultList &resultList, const uint8_t *channelList, const char* ssid)
dan_ackme 0:ea85c4bb5e1f 22 {
dan_ackme 0:ea85c4bb5e1f 23 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 24 char cmdBuffer[WICONNECT_MAX_CMD_SIZE];
dan_ackme 0:ea85c4bb5e1f 25
dan_ackme 0:ea85c4bb5e1f 26 CHECK_CALLBACK_AVAILABLE(completeHandler_);
dan_ackme 0:ea85c4bb5e1f 27
dan_ackme 0:ea85c4bb5e1f 28 if(WICONNECT_IS_IDLE())
dan_ackme 0:ea85c4bb5e1f 29 {
dan_ackme 0:ea85c4bb5e1f 30 #define SCAN_CMD "scan -v "
dan_ackme 0:ea85c4bb5e1f 31 char *cmdBufferPtr = cmdBuffer + sizeof(SCAN_CMD)-1;
dan_ackme 0:ea85c4bb5e1f 32
dan_ackme 0:ea85c4bb5e1f 33 strcpy(cmdBuffer, SCAN_CMD);
dan_ackme 0:ea85c4bb5e1f 34
dan_ackme 0:ea85c4bb5e1f 35 if(channelList != NULL)
dan_ackme 0:ea85c4bb5e1f 36 {
dan_ackme 0:ea85c4bb5e1f 37 for(const uint8_t *ch = (const uint8_t *)channelList; *ch != 0; ++ch)
dan_ackme 0:ea85c4bb5e1f 38 {
dan_ackme 0:ea85c4bb5e1f 39 cmdBufferPtr += sprintf(cmdBufferPtr, "%d,", *ch);
dan_ackme 0:ea85c4bb5e1f 40 }
dan_ackme 0:ea85c4bb5e1f 41 *(cmdBufferPtr-1) = ' ';
dan_ackme 0:ea85c4bb5e1f 42 }
dan_ackme 0:ea85c4bb5e1f 43 else
dan_ackme 0:ea85c4bb5e1f 44 {
dan_ackme 0:ea85c4bb5e1f 45 strcat(cmdBufferPtr, "all ");
dan_ackme 0:ea85c4bb5e1f 46 cmdBufferPtr += 4;
dan_ackme 0:ea85c4bb5e1f 47 }
dan_ackme 0:ea85c4bb5e1f 48
dan_ackme 0:ea85c4bb5e1f 49 if(ssid != NULL)
dan_ackme 0:ea85c4bb5e1f 50 {
dan_ackme 0:ea85c4bb5e1f 51 strcpy(cmdBufferPtr, ssid);
dan_ackme 0:ea85c4bb5e1f 52 }
dan_ackme 0:ea85c4bb5e1f 53 }
dan_ackme 0:ea85c4bb5e1f 54
dan_ackme 0:ea85c4bb5e1f 55 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 56
dan_ackme 0:ea85c4bb5e1f 57 //if(!completeHandler_.isValid())
dan_ackme 0:ea85c4bb5e1f 58 {
dan_ackme 0:ea85c4bb5e1f 59 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand(SCAN_TIMEOUT, cmdBuffer)))
dan_ackme 0:ea85c4bb5e1f 60 {
dan_ackme 0:ea85c4bb5e1f 61 result = processScanResults(wiconnect->internalBuffer, resultList);
dan_ackme 0:ea85c4bb5e1f 62 }
dan_ackme 0:ea85c4bb5e1f 63 }
dan_ackme 0:ea85c4bb5e1f 64 //#ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 65 // else
dan_ackme 0:ea85c4bb5e1f 66 // {
dan_ackme 0:ea85c4bb5e1f 67 // QueuedCommand *cmd = new QueuedCommand(NULL, 4096, SCAN_TIMEOUT, cmdBuffer);
dan_ackme 0:ea85c4bb5e1f 68 // cmd->userData = (void*)resultList;
dan_ackme 0:ea85c4bb5e1f 69 // completeHandler = completeHandler_;
dan_ackme 0:ea85c4bb5e1f 70 // if(WICONNECT_FAILED(result, wiconnect->enqueueCommand(cmd, Callback(this, &NetworkInterface::scanCompleteCallback))))
dan_ackme 0:ea85c4bb5e1f 71 // {
dan_ackme 0:ea85c4bb5e1f 72 // delete cmd;
dan_ackme 0:ea85c4bb5e1f 73 // }
dan_ackme 0:ea85c4bb5e1f 74 // else
dan_ackme 0:ea85c4bb5e1f 75 // {
dan_ackme 0:ea85c4bb5e1f 76 // result = WICONNECT_PROCESSING;
dan_ackme 0:ea85c4bb5e1f 77 // }
dan_ackme 0:ea85c4bb5e1f 78 // }
dan_ackme 0:ea85c4bb5e1f 79 //#endif
dan_ackme 0:ea85c4bb5e1f 80
dan_ackme 0:ea85c4bb5e1f 81 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 82
dan_ackme 0:ea85c4bb5e1f 83 return result;
dan_ackme 0:ea85c4bb5e1f 84 }
dan_ackme 0:ea85c4bb5e1f 85
dan_ackme 0:ea85c4bb5e1f 86
dan_ackme 0:ea85c4bb5e1f 87
dan_ackme 0:ea85c4bb5e1f 88
dan_ackme 0:ea85c4bb5e1f 89
dan_ackme 0:ea85c4bb5e1f 90 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 91 WiconnectResult NetworkInterface::processScanResults(char *resultStr, ScanResultList &resultList)
dan_ackme 0:ea85c4bb5e1f 92 {
dan_ackme 0:ea85c4bb5e1f 93 WiconnectResult result = WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 94 char *line, *savedLine;
dan_ackme 0:ea85c4bb5e1f 95
dan_ackme 0:ea85c4bb5e1f 96 for(savedLine = resultStr; (line = StringUtil::strtok_r(savedLine, "\r\n", &savedLine)) != NULL;)
dan_ackme 0:ea85c4bb5e1f 97 {
dan_ackme 0:ea85c4bb5e1f 98 char *toks[9], *savedTok;
dan_ackme 0:ea85c4bb5e1f 99
dan_ackme 0:ea85c4bb5e1f 100 if(*line != '#')
dan_ackme 0:ea85c4bb5e1f 101 {
dan_ackme 0:ea85c4bb5e1f 102 continue;
dan_ackme 0:ea85c4bb5e1f 103 }
dan_ackme 0:ea85c4bb5e1f 104 savedTok = line + 2;
dan_ackme 0:ea85c4bb5e1f 105
dan_ackme 0:ea85c4bb5e1f 106 for(int i = 0; i < 8 && (toks[i] = StringUtil::strtok_r(savedTok, " ", &savedTok)) != NULL; ++i)
dan_ackme 0:ea85c4bb5e1f 107 {
dan_ackme 0:ea85c4bb5e1f 108 if(toks[i] == NULL)
dan_ackme 0:ea85c4bb5e1f 109 {
dan_ackme 0:ea85c4bb5e1f 110 result = WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 111 goto exit;
dan_ackme 0:ea85c4bb5e1f 112 }
dan_ackme 0:ea85c4bb5e1f 113 }
dan_ackme 0:ea85c4bb5e1f 114
dan_ackme 0:ea85c4bb5e1f 115 if(WICONNECT_FAILED(result, resultList.add(toks[1], toks[2], toks[3], toks[4], toks[5], savedTok)))
dan_ackme 0:ea85c4bb5e1f 116 {
dan_ackme 0:ea85c4bb5e1f 117 goto exit;
dan_ackme 0:ea85c4bb5e1f 118 }
dan_ackme 0:ea85c4bb5e1f 119 }
dan_ackme 0:ea85c4bb5e1f 120
dan_ackme 0:ea85c4bb5e1f 121 exit:
dan_ackme 0:ea85c4bb5e1f 122 return result;
dan_ackme 0:ea85c4bb5e1f 123 }
dan_ackme 0:ea85c4bb5e1f 124
dan_ackme 0:ea85c4bb5e1f 125 //#ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 126 //
dan_ackme 0:ea85c4bb5e1f 127 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 128 //void NetworkInterface::scanCompleteCallback(WiconnectResult result, void *arg1, void *arg2)
dan_ackme 0:ea85c4bb5e1f 129 //{
dan_ackme 0:ea85c4bb5e1f 130 // QueuedCommand *cmd = (QueuedCommand*)arg1;
dan_ackme 0:ea85c4bb5e1f 131 // ScanResultList *listPtr = (ScanResultList*)cmd->userData;
dan_ackme 0:ea85c4bb5e1f 132 //
dan_ackme 0:ea85c4bb5e1f 133 // if(result == WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 134 // {
dan_ackme 0:ea85c4bb5e1f 135 // result = processScanResults(cmd->responseBuffer, listPtr);
dan_ackme 0:ea85c4bb5e1f 136 // }
dan_ackme 0:ea85c4bb5e1f 137 // delete cmd;
dan_ackme 0:ea85c4bb5e1f 138 //
dan_ackme 0:ea85c4bb5e1f 139 // completeHandler.call(result, listPtr, NULL);
dan_ackme 0:ea85c4bb5e1f 140 //}
dan_ackme 0:ea85c4bb5e1f 141 //
dan_ackme 0:ea85c4bb5e1f 142 //#endif