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:
Tue Aug 12 02:34:46 2014 -0700
Revision:
11:ea484e1b7fc4
Parent:
8:1fad4ca6c6a4
Child:
13:2b51f5267c92
updated documnetation

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
dan_ackme 0:ea85c4bb5e1f 16 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 17 WiconnectResult NetworkInterface::startWebSetup(const char *ssid, const char *password, const Callback &completeHandler_)
dan_ackme 0:ea85c4bb5e1f 18 {
dan_ackme 5:8d91a87ebba2 19 WiconnectResult result = WICONNECT_ERROR;;
dan_ackme 0:ea85c4bb5e1f 20
dan_ackme 0:ea85c4bb5e1f 21 enum
dan_ackme 0:ea85c4bb5e1f 22 {
dan_ackme 0:ea85c4bb5e1f 23 FS_SET_SSID,
dan_ackme 0:ea85c4bb5e1f 24 FS_SET_PASSWORD,
dan_ackme 0:ea85c4bb5e1f 25 FS_NETWORK_UP
dan_ackme 0:ea85c4bb5e1f 26 };
dan_ackme 0:ea85c4bb5e1f 27
dan_ackme 0:ea85c4bb5e1f 28 CHECK_CALLBACK_AVAILABLE(completeHandler_);
dan_ackme 0:ea85c4bb5e1f 29 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 30
dan_ackme 0:ea85c4bb5e1f 31 if(wiconnect->internalProcessingState == FS_SET_SSID)
dan_ackme 0:ea85c4bb5e1f 32 {
dan_ackme 0:ea85c4bb5e1f 33 if(ssid == NULL ||
dan_ackme 0:ea85c4bb5e1f 34 WICONNECT_SUCCEEDED(result, wiconnect->sendCommand("set setup.web.ssid %s", ssid)))
dan_ackme 0:ea85c4bb5e1f 35 {
dan_ackme 0:ea85c4bb5e1f 36 wiconnect->internalProcessingState = FS_SET_PASSWORD;
dan_ackme 0:ea85c4bb5e1f 37 }
dan_ackme 0:ea85c4bb5e1f 38 }
dan_ackme 0:ea85c4bb5e1f 39
dan_ackme 0:ea85c4bb5e1f 40 if(wiconnect->internalProcessingState == FS_SET_PASSWORD)
dan_ackme 0:ea85c4bb5e1f 41 {
dan_ackme 0:ea85c4bb5e1f 42 if(password == NULL ||
dan_ackme 0:ea85c4bb5e1f 43 WICONNECT_SUCCEEDED(result, wiconnect->sendCommand("set setup.web.passkey %s", password)))
dan_ackme 0:ea85c4bb5e1f 44 {
dan_ackme 0:ea85c4bb5e1f 45 wiconnect->internalProcessingState = FS_NETWORK_UP;
dan_ackme 0:ea85c4bb5e1f 46 }
dan_ackme 0:ea85c4bb5e1f 47 }
dan_ackme 0:ea85c4bb5e1f 48
dan_ackme 0:ea85c4bb5e1f 49 if(wiconnect->internalProcessingState == FS_NETWORK_UP)
dan_ackme 0:ea85c4bb5e1f 50 {
dan_ackme 0:ea85c4bb5e1f 51 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand("setup web")))
dan_ackme 0:ea85c4bb5e1f 52 {
dan_ackme 0:ea85c4bb5e1f 53 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 54 if(completeHandler_.isValid())
dan_ackme 0:ea85c4bb5e1f 55 {
dan_ackme 11:ea484e1b7fc4 56 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 11:ea484e1b7fc4 57 monitorTimer.stop();
dan_ackme 11:ea484e1b7fc4 58 #endif
dan_ackme 11:ea484e1b7fc4 59 completeHandler = completeHandler_;
dan_ackme 11:ea484e1b7fc4 60 monitorTimer.start(this, &NetworkInterface::webSetupStatusMonitor, 1000);
dan_ackme 0:ea85c4bb5e1f 61 }
dan_ackme 0:ea85c4bb5e1f 62 #endif
dan_ackme 0:ea85c4bb5e1f 63 }
dan_ackme 0:ea85c4bb5e1f 64 }
dan_ackme 0:ea85c4bb5e1f 65
dan_ackme 0:ea85c4bb5e1f 66 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 67
dan_ackme 0:ea85c4bb5e1f 68 return result;
dan_ackme 0:ea85c4bb5e1f 69 }
dan_ackme 0:ea85c4bb5e1f 70
dan_ackme 0:ea85c4bb5e1f 71 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 72 WiconnectResult NetworkInterface::stopWebSetup()
dan_ackme 0:ea85c4bb5e1f 73 {
dan_ackme 0:ea85c4bb5e1f 74 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 75
dan_ackme 0:ea85c4bb5e1f 76 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 77
dan_ackme 0:ea85c4bb5e1f 78 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 79 monitorTimer.stop();
dan_ackme 0:ea85c4bb5e1f 80 #endif
dan_ackme 0:ea85c4bb5e1f 81 result = wiconnect->sendCommand("setup stop");
dan_ackme 0:ea85c4bb5e1f 82
dan_ackme 0:ea85c4bb5e1f 83 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 84
dan_ackme 0:ea85c4bb5e1f 85 return result;
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 WiconnectResult NetworkInterface::isWebSetupRunning(bool *isRunningPtr)
dan_ackme 0:ea85c4bb5e1f 91 {
dan_ackme 0:ea85c4bb5e1f 92 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 93
dan_ackme 0:ea85c4bb5e1f 94 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 95
dan_ackme 0:ea85c4bb5e1f 96 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand("setup status")))
dan_ackme 0:ea85c4bb5e1f 97 {
dan_ackme 0:ea85c4bb5e1f 98 int32_t status;
dan_ackme 0:ea85c4bb5e1f 99 if(!WICONNECT_FAILED(result, wiconnect->responseToInt32(&status)))
dan_ackme 0:ea85c4bb5e1f 100 {
dan_ackme 0:ea85c4bb5e1f 101 *isRunningPtr = (bool)status;
dan_ackme 0:ea85c4bb5e1f 102 }
dan_ackme 0:ea85c4bb5e1f 103 }
dan_ackme 0:ea85c4bb5e1f 104
dan_ackme 0:ea85c4bb5e1f 105 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 106
dan_ackme 0:ea85c4bb5e1f 107 return result;
dan_ackme 0:ea85c4bb5e1f 108 }
dan_ackme 0:ea85c4bb5e1f 109
dan_ackme 0:ea85c4bb5e1f 110
dan_ackme 0:ea85c4bb5e1f 111 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 112
dan_ackme 0:ea85c4bb5e1f 113 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 114 void NetworkInterface::webSetupStatusMonitor()
dan_ackme 0:ea85c4bb5e1f 115 {
dan_ackme 8:1fad4ca6c6a4 116 static char responseBuffer[4];
dan_ackme 8:1fad4ca6c6a4 117 static uint8_t cmdBuffer[sizeof(QueuedCommand)];
dan_ackme 8:1fad4ca6c6a4 118 QueuedCommand *cmd = (QueuedCommand*)cmdBuffer;
dan_ackme 6:8a87a59d0d21 119
dan_ackme 0:ea85c4bb5e1f 120 monitorTimer.stop();
dan_ackme 6:8a87a59d0d21 121
dan_ackme 8:1fad4ca6c6a4 122 *cmd = QueuedCommand(sizeof(responseBuffer), responseBuffer, "setup status");
dan_ackme 6:8a87a59d0d21 123
dan_ackme 6:8a87a59d0d21 124 wiconnect->enqueueCommand(cmd, Callback(this, &NetworkInterface::webSetupStatusCheckCallback));
dan_ackme 0:ea85c4bb5e1f 125 }
dan_ackme 0:ea85c4bb5e1f 126
dan_ackme 0:ea85c4bb5e1f 127 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 128 void NetworkInterface::webSetupStatusCheckCallback(WiconnectResult result, void *arg1, void *arg2)
dan_ackme 0:ea85c4bb5e1f 129 {
dan_ackme 0:ea85c4bb5e1f 130 bool isComplete = true;
dan_ackme 0:ea85c4bb5e1f 131
dan_ackme 0:ea85c4bb5e1f 132 QueuedCommand *cmd = (QueuedCommand*)arg1;
dan_ackme 0:ea85c4bb5e1f 133
dan_ackme 0:ea85c4bb5e1f 134 if(result == WICONNECT_SUCCESS)
dan_ackme 0:ea85c4bb5e1f 135 {
dan_ackme 0:ea85c4bb5e1f 136 int32_t status;
dan_ackme 0:ea85c4bb5e1f 137 if(!StringUtil::strToInt32(cmd->responseBuffer, &status))
dan_ackme 0:ea85c4bb5e1f 138 {
dan_ackme 0:ea85c4bb5e1f 139 result = WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 140 }
dan_ackme 0:ea85c4bb5e1f 141 else if(status > 0)
dan_ackme 0:ea85c4bb5e1f 142 {
dan_ackme 0:ea85c4bb5e1f 143 isComplete = false;
dan_ackme 0:ea85c4bb5e1f 144 }
dan_ackme 0:ea85c4bb5e1f 145 }
dan_ackme 0:ea85c4bb5e1f 146
dan_ackme 0:ea85c4bb5e1f 147 if(isComplete)
dan_ackme 0:ea85c4bb5e1f 148 {
dan_ackme 0:ea85c4bb5e1f 149 completeHandler.call(result, NULL, NULL);
dan_ackme 0:ea85c4bb5e1f 150 }
dan_ackme 0:ea85c4bb5e1f 151 else
dan_ackme 0:ea85c4bb5e1f 152 {
dan_ackme 0:ea85c4bb5e1f 153 monitorTimer.start(this, &NetworkInterface::webSetupStatusMonitor, 1000);
dan_ackme 0:ea85c4bb5e1f 154 }
dan_ackme 0:ea85c4bb5e1f 155 }
dan_ackme 0:ea85c4bb5e1f 156
dan_ackme 0:ea85c4bb5e1f 157 #endif