Maxim Integrated / Mbed OS MAXREFDES155#

Dependencies:   MaximInterface

Committer:
IanBenzMaxim
Date:
Fri Mar 03 13:54:45 2017 -0600
Revision:
5:d2c852569e9d
Parent:
3:d2799d8497c0
Child:
7:66c5dedc750b
Set WiFi connection information to match quick start guide.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 0:33d4e66780c0 1 /*******************************************************************************
IanBenzMaxim 0:33d4e66780c0 2 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
IanBenzMaxim 0:33d4e66780c0 3 *
IanBenzMaxim 0:33d4e66780c0 4 * Permission is hereby granted, free of charge, to any person obtaining a
IanBenzMaxim 0:33d4e66780c0 5 * copy of this software and associated documentation files (the "Software"),
IanBenzMaxim 0:33d4e66780c0 6 * to deal in the Software without restriction, including without limitation
IanBenzMaxim 0:33d4e66780c0 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
IanBenzMaxim 0:33d4e66780c0 8 * and/or sell copies of the Software, and to permit persons to whom the
IanBenzMaxim 0:33d4e66780c0 9 * Software is furnished to do so, subject to the following conditions:
IanBenzMaxim 0:33d4e66780c0 10 *
IanBenzMaxim 0:33d4e66780c0 11 * The above copyright notice and this permission notice shall be included
IanBenzMaxim 0:33d4e66780c0 12 * in all copies or substantial portions of the Software.
IanBenzMaxim 0:33d4e66780c0 13 *
IanBenzMaxim 0:33d4e66780c0 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
IanBenzMaxim 0:33d4e66780c0 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
IanBenzMaxim 0:33d4e66780c0 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IanBenzMaxim 0:33d4e66780c0 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
IanBenzMaxim 0:33d4e66780c0 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
IanBenzMaxim 0:33d4e66780c0 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
IanBenzMaxim 0:33d4e66780c0 20 * OTHER DEALINGS IN THE SOFTWARE.
IanBenzMaxim 0:33d4e66780c0 21 *
IanBenzMaxim 0:33d4e66780c0 22 * Except as contained in this notice, the name of Maxim Integrated
IanBenzMaxim 0:33d4e66780c0 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
IanBenzMaxim 0:33d4e66780c0 24 * Products, Inc. Branding Policy.
IanBenzMaxim 0:33d4e66780c0 25 *
IanBenzMaxim 0:33d4e66780c0 26 * The mere transfer of this software does not imply any licenses
IanBenzMaxim 0:33d4e66780c0 27 * of trade secrets, proprietary technology, copyrights, patents,
IanBenzMaxim 0:33d4e66780c0 28 * trademarks, maskwork rights, or any other form of intellectual
IanBenzMaxim 0:33d4e66780c0 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
IanBenzMaxim 0:33d4e66780c0 30 * ownership rights.
IanBenzMaxim 0:33d4e66780c0 31 *******************************************************************************/
IanBenzMaxim 0:33d4e66780c0 32
IanBenzMaxim 0:33d4e66780c0 33 #include <memory>
IanBenzMaxim 0:33d4e66780c0 34 #include <wait_api.h>
IanBenzMaxim 0:33d4e66780c0 35 #include <TCPSocket.h>
IanBenzMaxim 0:33d4e66780c0 36 #include "CC3100.hpp"
IanBenzMaxim 0:33d4e66780c0 37 #include "WindowManager.hpp"
IanBenzMaxim 0:33d4e66780c0 38 #include "DisplayIdWindow.hpp"
IanBenzMaxim 0:33d4e66780c0 39 #include "NormalOperationWindow.hpp"
IanBenzMaxim 0:33d4e66780c0 40 #include "ErrorWindow.hpp"
IanBenzMaxim 0:33d4e66780c0 41 #include "WifiConnectWindow.hpp"
IanBenzMaxim 0:33d4e66780c0 42
IanBenzMaxim 5:d2c852569e9d 43 static const char wifiSsid[] = "MAXREFDES155";
IanBenzMaxim 5:d2c852569e9d 44 static const char wifiPassword[] = "maxim1234";
IanBenzMaxim 0:33d4e66780c0 45 static const char serverAddress[] = "www.maxim-security.com";
IanBenzMaxim 0:33d4e66780c0 46 static const uint16_t serverPort = 3900;
IanBenzMaxim 0:33d4e66780c0 47
IanBenzMaxim 0:33d4e66780c0 48 WifiConnectWindow::WifiConnectWindow(Graphic * parent) : Window(parent), m_state(NotStarted),
IanBenzMaxim 5:d2c852569e9d 49 m_description("WiFi SSID: " + std::string(wifiSsid) + "\nWiFi Password: " + std::string(wifiPassword), this),
IanBenzMaxim 0:33d4e66780c0 50 m_backButton("Back", this), m_continueButton("Connect to WiFi", this)
IanBenzMaxim 0:33d4e66780c0 51 {
IanBenzMaxim 0:33d4e66780c0 52 m_description.setWordWrap(true);
IanBenzMaxim 0:33d4e66780c0 53 m_backButton.setClickedHandler(Button::EventHandler(this, &WifiConnectWindow::backButtonClicked));
IanBenzMaxim 0:33d4e66780c0 54 m_continueButton.setClickedHandler(Button::EventHandler(this, &WifiConnectWindow::continueButtonClicked));
IanBenzMaxim 0:33d4e66780c0 55 m_continueButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 56 }
IanBenzMaxim 0:33d4e66780c0 57
IanBenzMaxim 0:33d4e66780c0 58 void WifiConnectWindow::doPostLayout()
IanBenzMaxim 0:33d4e66780c0 59 {
IanBenzMaxim 0:33d4e66780c0 60 switch (m_state)
IanBenzMaxim 0:33d4e66780c0 61 {
IanBenzMaxim 3:d2799d8497c0 62 case NotStarted:
IanBenzMaxim 3:d2799d8497c0 63 break;
IanBenzMaxim 3:d2799d8497c0 64
IanBenzMaxim 0:33d4e66780c0 65 case PreConnect:
IanBenzMaxim 0:33d4e66780c0 66 m_backButton.setParent(NULL);
IanBenzMaxim 0:33d4e66780c0 67 m_continueButton.setParent(NULL);
IanBenzMaxim 0:33d4e66780c0 68 m_description.setText("Connecting to WiFi network...");
IanBenzMaxim 0:33d4e66780c0 69 m_state = WiFiConnect;
IanBenzMaxim 0:33d4e66780c0 70 break;
IanBenzMaxim 0:33d4e66780c0 71
IanBenzMaxim 0:33d4e66780c0 72 case WiFiConnect:
IanBenzMaxim 0:33d4e66780c0 73 {
IanBenzMaxim 0:33d4e66780c0 74 // Connect to AP.
IanBenzMaxim 0:33d4e66780c0 75 int result = CC3100::instance().connect(wifiSsid, wifiPassword, NSAPI_SECURITY_WPA2);
IanBenzMaxim 0:33d4e66780c0 76 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 77 {
IanBenzMaxim 0:33d4e66780c0 78 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 79 {
IanBenzMaxim 0:33d4e66780c0 80 windowManager()->pop();
IanBenzMaxim 0:33d4e66780c0 81 windowManager()->push(new ErrorWindow("WiFi connect failed"));
IanBenzMaxim 0:33d4e66780c0 82 }
IanBenzMaxim 0:33d4e66780c0 83 break;
IanBenzMaxim 0:33d4e66780c0 84 }
IanBenzMaxim 0:33d4e66780c0 85
IanBenzMaxim 0:33d4e66780c0 86 m_description.setText("Connecting to server...");
IanBenzMaxim 0:33d4e66780c0 87 m_state = ServerConnect;
IanBenzMaxim 0:33d4e66780c0 88 }
IanBenzMaxim 0:33d4e66780c0 89 break;
IanBenzMaxim 0:33d4e66780c0 90
IanBenzMaxim 0:33d4e66780c0 91 case ServerConnect:
IanBenzMaxim 0:33d4e66780c0 92 {
IanBenzMaxim 0:33d4e66780c0 93 // Get IP address from DNS lookup.
IanBenzMaxim 0:33d4e66780c0 94 SocketAddress socketAddress;
IanBenzMaxim 0:33d4e66780c0 95 int result = CC3100::instance().gethostbyname(serverAddress, &socketAddress);
IanBenzMaxim 0:33d4e66780c0 96 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 97 {
IanBenzMaxim 0:33d4e66780c0 98 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 99 {
IanBenzMaxim 0:33d4e66780c0 100 windowManager()->pop();
IanBenzMaxim 0:33d4e66780c0 101 windowManager()->push(new ErrorWindow("Hostname lookup failed"));
IanBenzMaxim 0:33d4e66780c0 102 }
IanBenzMaxim 0:33d4e66780c0 103 break;
IanBenzMaxim 0:33d4e66780c0 104 }
IanBenzMaxim 0:33d4e66780c0 105
IanBenzMaxim 0:33d4e66780c0 106 // Open socket connection.
IanBenzMaxim 0:33d4e66780c0 107 std::auto_ptr<TCPSocket> socket(new TCPSocket(&CC3100::instance()));
IanBenzMaxim 0:33d4e66780c0 108 socket->set_blocking(false);
IanBenzMaxim 0:33d4e66780c0 109 socketAddress.set_port(serverPort);
IanBenzMaxim 0:33d4e66780c0 110 result = socket->connect(socketAddress);
IanBenzMaxim 0:33d4e66780c0 111 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 112 {
IanBenzMaxim 0:33d4e66780c0 113 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 114 {
IanBenzMaxim 0:33d4e66780c0 115 windowManager()->pop();
IanBenzMaxim 0:33d4e66780c0 116 windowManager()->push(new ErrorWindow("Socket connect failed"));
IanBenzMaxim 0:33d4e66780c0 117 }
IanBenzMaxim 0:33d4e66780c0 118 break;
IanBenzMaxim 0:33d4e66780c0 119 }
IanBenzMaxim 0:33d4e66780c0 120
IanBenzMaxim 0:33d4e66780c0 121 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 122 {
IanBenzMaxim 0:33d4e66780c0 123 windowManager()->pop();
IanBenzMaxim 0:33d4e66780c0 124 windowManager()->push(new NormalOperationWindow(socket.release()));
IanBenzMaxim 0:33d4e66780c0 125 }
IanBenzMaxim 0:33d4e66780c0 126 }
IanBenzMaxim 0:33d4e66780c0 127 break;
IanBenzMaxim 0:33d4e66780c0 128 }
IanBenzMaxim 0:33d4e66780c0 129 }
IanBenzMaxim 0:33d4e66780c0 130
IanBenzMaxim 0:33d4e66780c0 131 void WifiConnectWindow::doLayout()
IanBenzMaxim 0:33d4e66780c0 132 {
IanBenzMaxim 0:33d4e66780c0 133 m_backButton.setX(0);
IanBenzMaxim 0:33d4e66780c0 134 m_backButton.setY(height() - m_backButton.height());
IanBenzMaxim 0:33d4e66780c0 135 m_continueButton.setX(width() - m_continueButton.width());
IanBenzMaxim 0:33d4e66780c0 136 m_continueButton.setY(height() - m_continueButton.height());
IanBenzMaxim 0:33d4e66780c0 137 m_description.setWidth(width());
IanBenzMaxim 0:33d4e66780c0 138 m_description.setHeight(std::min(m_backButton.y(), m_continueButton.y()));
IanBenzMaxim 0:33d4e66780c0 139 }
IanBenzMaxim 0:33d4e66780c0 140
IanBenzMaxim 0:33d4e66780c0 141 bool WifiConnectWindow::doProcessKey(Key key)
IanBenzMaxim 0:33d4e66780c0 142 {
IanBenzMaxim 0:33d4e66780c0 143 bool handled;
IanBenzMaxim 0:33d4e66780c0 144 switch (key)
IanBenzMaxim 0:33d4e66780c0 145 {
IanBenzMaxim 0:33d4e66780c0 146 case LeftKey:
IanBenzMaxim 0:33d4e66780c0 147 m_backButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 148 handled = true;
IanBenzMaxim 0:33d4e66780c0 149 break;
IanBenzMaxim 0:33d4e66780c0 150
IanBenzMaxim 0:33d4e66780c0 151 case RightKey:
IanBenzMaxim 0:33d4e66780c0 152 m_continueButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 153 handled = true;
IanBenzMaxim 0:33d4e66780c0 154 break;
IanBenzMaxim 0:33d4e66780c0 155
IanBenzMaxim 0:33d4e66780c0 156 default:
IanBenzMaxim 0:33d4e66780c0 157 handled = false;
IanBenzMaxim 0:33d4e66780c0 158 break;
IanBenzMaxim 0:33d4e66780c0 159 }
IanBenzMaxim 0:33d4e66780c0 160 return handled;
IanBenzMaxim 0:33d4e66780c0 161 }
IanBenzMaxim 0:33d4e66780c0 162
IanBenzMaxim 0:33d4e66780c0 163 void WifiConnectWindow::continueButtonClicked()
IanBenzMaxim 0:33d4e66780c0 164 {
IanBenzMaxim 0:33d4e66780c0 165 if (m_state == NotStarted)
IanBenzMaxim 0:33d4e66780c0 166 {
IanBenzMaxim 0:33d4e66780c0 167 m_state = PreConnect;
IanBenzMaxim 0:33d4e66780c0 168 }
IanBenzMaxim 0:33d4e66780c0 169 }
IanBenzMaxim 0:33d4e66780c0 170
IanBenzMaxim 0:33d4e66780c0 171 void WifiConnectWindow::backButtonClicked()
IanBenzMaxim 0:33d4e66780c0 172 {
IanBenzMaxim 0:33d4e66780c0 173 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 174 {
IanBenzMaxim 0:33d4e66780c0 175 windowManager()->pop();
IanBenzMaxim 0:33d4e66780c0 176 windowManager()->push(new DisplayIdWindow(DisplayIdWindow::PreConnectMode));
IanBenzMaxim 0:33d4e66780c0 177 }
IanBenzMaxim 0:33d4e66780c0 178 }