Maxim Integrated / Mbed OS MAXREFDES155#

Dependencies:   MaximInterface

Committer:
IanBenzMaxim
Date:
Thu Apr 06 15:16:30 2017 -0500
Revision:
8:a0d75dff3c9b
Parent:
7:66c5dedc750b
Child:
13:6a6225690c2e
Simplified graphics system for better clarity and expandability.

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 8:a0d75dff3c9b 48 WifiConnectWindow::WifiConnectWindow() : m_state(NotStarted)
IanBenzMaxim 0:33d4e66780c0 49 {
IanBenzMaxim 8:a0d75dff3c9b 50 m_description.setParent(this);
IanBenzMaxim 8:a0d75dff3c9b 51 m_description.setText("WiFi SSID: " + std::string(wifiSsid) + "\nWiFi Password: " + std::string(wifiPassword));
IanBenzMaxim 0:33d4e66780c0 52 m_description.setWordWrap(true);
IanBenzMaxim 8:a0d75dff3c9b 53 m_backButton.setParent(this);
IanBenzMaxim 8:a0d75dff3c9b 54 m_backButton.setText("Back");
IanBenzMaxim 0:33d4e66780c0 55 m_backButton.setClickedHandler(Button::EventHandler(this, &WifiConnectWindow::backButtonClicked));
IanBenzMaxim 8:a0d75dff3c9b 56 m_continueButton.setParent(this);
IanBenzMaxim 8:a0d75dff3c9b 57 m_continueButton.setText("Connect to WiFi");
IanBenzMaxim 0:33d4e66780c0 58 m_continueButton.setClickedHandler(Button::EventHandler(this, &WifiConnectWindow::continueButtonClicked));
IanBenzMaxim 0:33d4e66780c0 59 m_continueButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 60 }
IanBenzMaxim 0:33d4e66780c0 61
IanBenzMaxim 8:a0d75dff3c9b 62 void WifiConnectWindow::updated()
IanBenzMaxim 0:33d4e66780c0 63 {
IanBenzMaxim 0:33d4e66780c0 64 switch (m_state)
IanBenzMaxim 0:33d4e66780c0 65 {
IanBenzMaxim 3:d2799d8497c0 66 case NotStarted:
IanBenzMaxim 3:d2799d8497c0 67 break;
IanBenzMaxim 3:d2799d8497c0 68
IanBenzMaxim 0:33d4e66780c0 69 case PreConnect:
IanBenzMaxim 0:33d4e66780c0 70 m_backButton.setParent(NULL);
IanBenzMaxim 0:33d4e66780c0 71 m_continueButton.setParent(NULL);
IanBenzMaxim 0:33d4e66780c0 72 m_description.setText("Connecting to WiFi network...");
IanBenzMaxim 0:33d4e66780c0 73 m_state = WiFiConnect;
IanBenzMaxim 0:33d4e66780c0 74 break;
IanBenzMaxim 0:33d4e66780c0 75
IanBenzMaxim 0:33d4e66780c0 76 case WiFiConnect:
IanBenzMaxim 0:33d4e66780c0 77 {
IanBenzMaxim 0:33d4e66780c0 78 // Connect to AP.
IanBenzMaxim 0:33d4e66780c0 79 int result = CC3100::instance().connect(wifiSsid, wifiPassword, NSAPI_SECURITY_WPA2);
IanBenzMaxim 0:33d4e66780c0 80 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 81 {
IanBenzMaxim 0:33d4e66780c0 82 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 83 {
IanBenzMaxim 0:33d4e66780c0 84 windowManager()->pop();
IanBenzMaxim 7:66c5dedc750b 85 std::auto_ptr<Window> window(new ErrorWindow("WiFi connect failed"));
IanBenzMaxim 7:66c5dedc750b 86 windowManager()->push(window);
IanBenzMaxim 0:33d4e66780c0 87 }
IanBenzMaxim 0:33d4e66780c0 88 break;
IanBenzMaxim 0:33d4e66780c0 89 }
IanBenzMaxim 0:33d4e66780c0 90
IanBenzMaxim 0:33d4e66780c0 91 m_description.setText("Connecting to server...");
IanBenzMaxim 0:33d4e66780c0 92 m_state = ServerConnect;
IanBenzMaxim 0:33d4e66780c0 93 }
IanBenzMaxim 0:33d4e66780c0 94 break;
IanBenzMaxim 0:33d4e66780c0 95
IanBenzMaxim 0:33d4e66780c0 96 case ServerConnect:
IanBenzMaxim 0:33d4e66780c0 97 {
IanBenzMaxim 0:33d4e66780c0 98 // Get IP address from DNS lookup.
IanBenzMaxim 0:33d4e66780c0 99 SocketAddress socketAddress;
IanBenzMaxim 0:33d4e66780c0 100 int result = CC3100::instance().gethostbyname(serverAddress, &socketAddress);
IanBenzMaxim 0:33d4e66780c0 101 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 102 {
IanBenzMaxim 0:33d4e66780c0 103 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 104 {
IanBenzMaxim 0:33d4e66780c0 105 windowManager()->pop();
IanBenzMaxim 7:66c5dedc750b 106 std::auto_ptr<Window> window(new ErrorWindow("Hostname lookup failed"));
IanBenzMaxim 7:66c5dedc750b 107 windowManager()->push(window);
IanBenzMaxim 0:33d4e66780c0 108 }
IanBenzMaxim 0:33d4e66780c0 109 break;
IanBenzMaxim 0:33d4e66780c0 110 }
IanBenzMaxim 0:33d4e66780c0 111
IanBenzMaxim 0:33d4e66780c0 112 // Open socket connection.
IanBenzMaxim 0:33d4e66780c0 113 std::auto_ptr<TCPSocket> socket(new TCPSocket(&CC3100::instance()));
IanBenzMaxim 0:33d4e66780c0 114 socket->set_blocking(false);
IanBenzMaxim 0:33d4e66780c0 115 socketAddress.set_port(serverPort);
IanBenzMaxim 0:33d4e66780c0 116 result = socket->connect(socketAddress);
IanBenzMaxim 0:33d4e66780c0 117 if (result != 0)
IanBenzMaxim 0:33d4e66780c0 118 {
IanBenzMaxim 0:33d4e66780c0 119 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 120 {
IanBenzMaxim 0:33d4e66780c0 121 windowManager()->pop();
IanBenzMaxim 7:66c5dedc750b 122 std::auto_ptr<Window> window(new ErrorWindow("Socket connect failed"));
IanBenzMaxim 7:66c5dedc750b 123 windowManager()->push(window);
IanBenzMaxim 0:33d4e66780c0 124 }
IanBenzMaxim 0:33d4e66780c0 125 break;
IanBenzMaxim 0:33d4e66780c0 126 }
IanBenzMaxim 0:33d4e66780c0 127
IanBenzMaxim 0:33d4e66780c0 128 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 129 {
IanBenzMaxim 0:33d4e66780c0 130 windowManager()->pop();
IanBenzMaxim 7:66c5dedc750b 131 std::auto_ptr<Window> window(new NormalOperationWindow(socket));
IanBenzMaxim 7:66c5dedc750b 132 windowManager()->push(window);
IanBenzMaxim 0:33d4e66780c0 133 }
IanBenzMaxim 0:33d4e66780c0 134 }
IanBenzMaxim 0:33d4e66780c0 135 break;
IanBenzMaxim 0:33d4e66780c0 136 }
IanBenzMaxim 0:33d4e66780c0 137 }
IanBenzMaxim 0:33d4e66780c0 138
IanBenzMaxim 8:a0d75dff3c9b 139 void WifiConnectWindow::resized()
IanBenzMaxim 0:33d4e66780c0 140 {
IanBenzMaxim 8:a0d75dff3c9b 141 m_backButton.resize(m_backButton.preferredWidth(), m_backButton.preferredHeight());
IanBenzMaxim 8:a0d75dff3c9b 142 m_backButton.move(0, height() - m_backButton.height());
IanBenzMaxim 8:a0d75dff3c9b 143 m_continueButton.resize(m_continueButton.preferredWidth(), m_continueButton.preferredHeight());
IanBenzMaxim 8:a0d75dff3c9b 144 m_continueButton.move(width() - m_continueButton.width(), height() - m_continueButton.height());
IanBenzMaxim 8:a0d75dff3c9b 145 m_description.resize(width(), std::min(m_backButton.y(), m_continueButton.y()));
IanBenzMaxim 0:33d4e66780c0 146 }
IanBenzMaxim 0:33d4e66780c0 147
IanBenzMaxim 0:33d4e66780c0 148 bool WifiConnectWindow::doProcessKey(Key key)
IanBenzMaxim 0:33d4e66780c0 149 {
IanBenzMaxim 0:33d4e66780c0 150 bool handled;
IanBenzMaxim 0:33d4e66780c0 151 switch (key)
IanBenzMaxim 0:33d4e66780c0 152 {
IanBenzMaxim 0:33d4e66780c0 153 case LeftKey:
IanBenzMaxim 0:33d4e66780c0 154 m_backButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 155 handled = true;
IanBenzMaxim 0:33d4e66780c0 156 break;
IanBenzMaxim 0:33d4e66780c0 157
IanBenzMaxim 0:33d4e66780c0 158 case RightKey:
IanBenzMaxim 0:33d4e66780c0 159 m_continueButton.setFocused();
IanBenzMaxim 0:33d4e66780c0 160 handled = true;
IanBenzMaxim 0:33d4e66780c0 161 break;
IanBenzMaxim 0:33d4e66780c0 162
IanBenzMaxim 0:33d4e66780c0 163 default:
IanBenzMaxim 0:33d4e66780c0 164 handled = false;
IanBenzMaxim 0:33d4e66780c0 165 break;
IanBenzMaxim 0:33d4e66780c0 166 }
IanBenzMaxim 0:33d4e66780c0 167 return handled;
IanBenzMaxim 0:33d4e66780c0 168 }
IanBenzMaxim 0:33d4e66780c0 169
IanBenzMaxim 0:33d4e66780c0 170 void WifiConnectWindow::continueButtonClicked()
IanBenzMaxim 0:33d4e66780c0 171 {
IanBenzMaxim 0:33d4e66780c0 172 if (m_state == NotStarted)
IanBenzMaxim 0:33d4e66780c0 173 {
IanBenzMaxim 0:33d4e66780c0 174 m_state = PreConnect;
IanBenzMaxim 0:33d4e66780c0 175 }
IanBenzMaxim 0:33d4e66780c0 176 }
IanBenzMaxim 0:33d4e66780c0 177
IanBenzMaxim 0:33d4e66780c0 178 void WifiConnectWindow::backButtonClicked()
IanBenzMaxim 0:33d4e66780c0 179 {
IanBenzMaxim 0:33d4e66780c0 180 if (windowManager() != NULL)
IanBenzMaxim 0:33d4e66780c0 181 {
IanBenzMaxim 0:33d4e66780c0 182 windowManager()->pop();
IanBenzMaxim 7:66c5dedc750b 183 std::auto_ptr<Window> window(new DisplayIdWindow(DisplayIdWindow::PreConnectMode));
IanBenzMaxim 7:66c5dedc750b 184 windowManager()->push(window);
IanBenzMaxim 0:33d4e66780c0 185 }
IanBenzMaxim 0:33d4e66780c0 186 }