Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: UIPEthernet_GSOE
main.cpp@11:6c0b20227ca2, 2019-08-27 (annotated)
- Committer:
- hudakz
- Date:
- Tue Aug 27 22:10:13 2019 +0000
- Revision:
- 11:6c0b20227ca2
- Parent:
- 10:b47c7921346f
- Child:
- 12:7c46dcf6f7e2
Updated to use the latest UIPEthernet library.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| hudakz | 10:b47c7921346f | 1 | #include "mbed.h" |
| hudakz | 0:68a0003c4cb8 | 2 | #include <string> |
| hudakz | 10:b47c7921346f | 3 | #include "UipEthernet.h" |
| hudakz | 10:b47c7921346f | 4 | #include "TcpServer.h" |
| hudakz | 10:b47c7921346f | 5 | #include "TcpClient.h" |
| hudakz | 0:68a0003c4cb8 | 6 | |
| hudakz | 10:b47c7921346f | 7 | using namespace std; |
| hudakz | 4:d34811deedab | 8 | |
| hudakz | 11:6c0b20227ca2 | 9 | //#define DEBUG |
| hudakz | 11:6c0b20227ca2 | 10 | |
| hudakz | 11:6c0b20227ca2 | 11 | // To be used when a static IP is needed |
| hudakz | 10:b47c7921346f | 12 | #define IP "192.168.1.35" |
| hudakz | 10:b47c7921346f | 13 | #define GATEWAY "192.168.1.1" |
| hudakz | 10:b47c7921346f | 14 | #define NETMASK "255.255.255.0" |
| hudakz | 10:b47c7921346f | 15 | #define PORT 80 |
| hudakz | 0:68a0003c4cb8 | 16 | |
| hudakz | 10:b47c7921346f | 17 | // The ENC28J60 chip doesn't have a built-in MAC address. |
| hudakz | 10:b47c7921346f | 18 | // It's up to us to provide one which is unique within the connected network. |
| hudakz | 10:b47c7921346f | 19 | // So modify the one below accordingly. |
| hudakz | 11:6c0b20227ca2 | 20 | const uint8_t MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06 }; |
| hudakz | 11:6c0b20227ca2 | 21 | UipEthernet net(MAC, D11, D12, D13, D10); // mosi, miso, sck, cs |
| hudakz | 11:6c0b20227ca2 | 22 | TcpServer server; |
| hudakz | 11:6c0b20227ca2 | 23 | TcpClient* client; |
| hudakz | 11:6c0b20227ca2 | 24 | char receiveBuf[1024]; |
| hudakz | 10:b47c7921346f | 25 | const int OFF = 0; |
| hudakz | 10:b47c7921346f | 26 | const int ON = 1; |
| hudakz | 11:6c0b20227ca2 | 27 | DigitalOut output(D3); // A digital output to be switched on/off |
| hudakz | 11:6c0b20227ca2 | 28 | float roomTemp = 21.8; // A temperature sensor output |
| hudakz | 11:6c0b20227ca2 | 29 | const string PASSWORD = "secret"; // Change as you like |
| hudakz | 11:6c0b20227ca2 | 30 | string httpHeader; // HTTP header |
| hudakz | 11:6c0b20227ca2 | 31 | string httpContent; // HTTP content |
| hudakz | 0:68a0003c4cb8 | 32 | |
| hudakz | 10:b47c7921346f | 33 | /** |
| hudakz | 10:b47c7921346f | 34 | * @brief Analyses the received URL |
| hudakz | 10:b47c7921346f | 35 | * @note The string passed to this function will look like this: |
| hudakz | 10:b47c7921346f | 36 | * GET /HTTP/1..... |
| hudakz | 10:b47c7921346f | 37 | * GET /password HTTP/1..... |
| hudakz | 10:b47c7921346f | 38 | * GET /password/ HTTP/1..... |
| hudakz | 10:b47c7921346f | 39 | * GET /password/?sw=1 HTTP/1..... |
| hudakz | 10:b47c7921346f | 40 | * GET /password/?sw=0 HTTP/1..... |
| hudakz | 10:b47c7921346f | 41 | * @param url URL string |
| hudakz | 10:b47c7921346f | 42 | * @retval -3 just refresh page |
| hudakz | 10:b47c7921346f | 43 | * -2 no command given but password valid |
| hudakz | 10:b47c7921346f | 44 | * -1 invalid password |
| hudakz | 10:b47c7921346f | 45 | * 0 switch off |
| hudakz | 10:b47c7921346f | 46 | * 1 switch on |
| hudakz | 10:b47c7921346f | 47 | */ |
| hudakz | 10:b47c7921346f | 48 | int8_t analyseURL(string& url) |
| hudakz | 10:b47c7921346f | 49 | { |
| hudakz | 10:b47c7921346f | 50 | if (url.length() < 5 + PASSWORD.size() + 1) |
| hudakz | 10:b47c7921346f | 51 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 52 | |
| hudakz | 10:b47c7921346f | 53 | if (url.substr(5, PASSWORD.size()) != PASSWORD) |
| hudakz | 0:68a0003c4cb8 | 54 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 55 | |
| hudakz | 0:68a0003c4cb8 | 56 | uint8_t pos = 5 + PASSWORD.size(); |
| hudakz | 0:68a0003c4cb8 | 57 | |
| hudakz | 10:b47c7921346f | 58 | if (url.substr(pos, 1) != "/") |
| hudakz | 0:68a0003c4cb8 | 59 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 60 | |
| hudakz | 10:b47c7921346f | 61 | if (url.substr(pos++, 1) == " ") |
| hudakz | 10:b47c7921346f | 62 | return(-2); |
| hudakz | 0:68a0003c4cb8 | 63 | |
| hudakz | 10:b47c7921346f | 64 | string cmd(url.substr(pos, 5)); |
| hudakz | 0:68a0003c4cb8 | 65 | |
| hudakz | 10:b47c7921346f | 66 | if (cmd == "?sw=0") |
| hudakz | 0:68a0003c4cb8 | 67 | return(0); |
| hudakz | 0:68a0003c4cb8 | 68 | |
| hudakz | 10:b47c7921346f | 69 | if (cmd == "?sw=1") |
| hudakz | 0:68a0003c4cb8 | 70 | return(1); |
| hudakz | 0:68a0003c4cb8 | 71 | |
| hudakz | 0:68a0003c4cb8 | 72 | return(-3); |
| hudakz | 0:68a0003c4cb8 | 73 | } |
| hudakz | 0:68a0003c4cb8 | 74 | |
| hudakz | 5:0ab8292e37da | 75 | /** |
| hudakz | 5:0ab8292e37da | 76 | * @brief |
| hudakz | 5:0ab8292e37da | 77 | * @note |
| hudakz | 5:0ab8292e37da | 78 | * @param |
| hudakz | 5:0ab8292e37da | 79 | * @retval |
| hudakz | 5:0ab8292e37da | 80 | */ |
| hudakz | 10:b47c7921346f | 81 | string& movedPermanently(uint8_t flag) |
| hudakz | 10:b47c7921346f | 82 | { |
| hudakz | 10:b47c7921346f | 83 | if (flag == 1) |
| hudakz | 5:0ab8292e37da | 84 | httpContent = "/" + PASSWORD + "/"; |
| hudakz | 0:68a0003c4cb8 | 85 | else |
| hudakz | 0:68a0003c4cb8 | 86 | httpContent = ""; |
| hudakz | 0:68a0003c4cb8 | 87 | |
| hudakz | 0:68a0003c4cb8 | 88 | httpContent += "<h1>301 Moved Permanently</h1>\r\n"; |
| hudakz | 0:68a0003c4cb8 | 89 | |
| hudakz | 5:0ab8292e37da | 90 | return(httpContent); |
| hudakz | 0:68a0003c4cb8 | 91 | } |
| hudakz | 0:68a0003c4cb8 | 92 | |
| hudakz | 5:0ab8292e37da | 93 | /** |
| hudakz | 5:0ab8292e37da | 94 | * @brief |
| hudakz | 5:0ab8292e37da | 95 | * @note |
| hudakz | 5:0ab8292e37da | 96 | * @param |
| hudakz | 5:0ab8292e37da | 97 | * @retval |
| hudakz | 5:0ab8292e37da | 98 | */ |
| hudakz | 10:b47c7921346f | 99 | string& showWebPage(int status) |
| hudakz | 10:b47c7921346f | 100 | { |
| hudakz | 10:b47c7921346f | 101 | char roomTempStr[5]; |
| hudakz | 10:b47c7921346f | 102 | |
| hudakz | 10:b47c7921346f | 103 | //roomTemp = ds1820.read(); |
| hudakz | 10:b47c7921346f | 104 | sprintf(roomTempStr, "%3.1f", roomTemp); |
| hudakz | 0:68a0003c4cb8 | 105 | |
| hudakz | 10:b47c7921346f | 106 | /*$off*/ |
| hudakz | 10:b47c7921346f | 107 | httpContent = |
| hudakz | 10:b47c7921346f | 108 | "<head>" |
| hudakz | 10:b47c7921346f | 109 | "<meta charset=\"utf-8\">" |
| hudakz | 10:b47c7921346f | 110 | "<meta name=\"viewport\" content=\" initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;\"/>" |
| hudakz | 10:b47c7921346f | 111 | "<title>Smart Home</title>" |
| hudakz | 10:b47c7921346f | 112 | "<link href='http://fonts.googleapis.com/css?family=Droid+Sans&v1' rel='stylesheet' type='text/css'>" |
| hudakz | 10:b47c7921346f | 113 | "<style>" |
| hudakz | 10:b47c7921346f | 114 | ".switch {" |
| hudakz | 10:b47c7921346f | 115 | "position: relative;" |
| hudakz | 10:b47c7921346f | 116 | "display: inline-block;" |
| hudakz | 10:b47c7921346f | 117 | "width: 60px;" |
| hudakz | 10:b47c7921346f | 118 | "height: 34px;" |
| hudakz | 10:b47c7921346f | 119 | "}" |
| hudakz | 10:b47c7921346f | 120 | ".switch input {display:none;}" |
| hudakz | 10:b47c7921346f | 121 | ".slider {" |
| hudakz | 10:b47c7921346f | 122 | "position: absolute;" |
| hudakz | 10:b47c7921346f | 123 | "cursor: pointer;" |
| hudakz | 10:b47c7921346f | 124 | "top: 0;" |
| hudakz | 10:b47c7921346f | 125 | "left: 0;" |
| hudakz | 10:b47c7921346f | 126 | "right: 0;" |
| hudakz | 10:b47c7921346f | 127 | "bottom: 0;" |
| hudakz | 10:b47c7921346f | 128 | "border-radius: 34px;" |
| hudakz | 10:b47c7921346f | 129 | "background-color: #ccc;" |
| hudakz | 10:b47c7921346f | 130 | "-webkit-transition: .4s;" |
| hudakz | 10:b47c7921346f | 131 | "transition: .4s;" |
| hudakz | 10:b47c7921346f | 132 | "}" |
| hudakz | 10:b47c7921346f | 133 | ".slider:before {" |
| hudakz | 10:b47c7921346f | 134 | "position: absolute;" |
| hudakz | 10:b47c7921346f | 135 | "content: \"\";" |
| hudakz | 10:b47c7921346f | 136 | "height: 26px;" |
| hudakz | 10:b47c7921346f | 137 | "width: 26px;" |
| hudakz | 10:b47c7921346f | 138 | "left: 4px;" |
| hudakz | 10:b47c7921346f | 139 | "bottom: 4px;" |
| hudakz | 10:b47c7921346f | 140 | "border-radius: 50%;" |
| hudakz | 10:b47c7921346f | 141 | "background-color: white;" |
| hudakz | 10:b47c7921346f | 142 | "-webkit-transition: .4s;" |
| hudakz | 10:b47c7921346f | 143 | "transition: .4s;" |
| hudakz | 10:b47c7921346f | 144 | "}" |
| hudakz | 10:b47c7921346f | 145 | "input:checked + .slider {" |
| hudakz | 10:b47c7921346f | 146 | "background-color: #8ce196;" |
| hudakz | 10:b47c7921346f | 147 | "}" |
| hudakz | 10:b47c7921346f | 148 | "input:focus + .slider {" |
| hudakz | 10:b47c7921346f | 149 | "box-shadow: 0 0 1px #8ce196;" |
| hudakz | 10:b47c7921346f | 150 | "}" |
| hudakz | 10:b47c7921346f | 151 | "input:checked + .slider:before {" |
| hudakz | 10:b47c7921346f | 152 | "-webkit-transform: translateX(26px);" |
| hudakz | 10:b47c7921346f | 153 | "-ms-transform: translateX(26px);" |
| hudakz | 10:b47c7921346f | 154 | "transform: translateX(26px);" |
| hudakz | 10:b47c7921346f | 155 | "}" |
| hudakz | 10:b47c7921346f | 156 | "</style>" |
| hudakz | 10:b47c7921346f | 157 | "</head>" |
| hudakz | 10:b47c7921346f | 158 | |
| hudakz | 10:b47c7921346f | 159 | "<body>" |
| hudakz | 10:b47c7921346f | 160 | "<h2><a href=\".\" title=\"Click to refresh the page\">Smart Home</a></h2>" |
| hudakz | 10:b47c7921346f | 161 | "<pre>Temperature:\t" + string(roomTempStr) + "°C</pre>" |
| hudakz | 10:b47c7921346f | 162 | "<pre>Heating:\t"; |
| hudakz | 10:b47c7921346f | 163 | |
| hudakz | 10:b47c7921346f | 164 | if(status == ON) { |
| hudakz | 10:b47c7921346f | 165 | httpContent += |
| hudakz | 10:b47c7921346f | 166 | "<a href=\"./?sw=0\" class=\"switch\"> " |
| hudakz | 10:b47c7921346f | 167 | "<input type=\"checkbox\" checked>"; |
| hudakz | 5:0ab8292e37da | 168 | } |
| hudakz | 5:0ab8292e37da | 169 | else { |
| hudakz | 10:b47c7921346f | 170 | httpContent += |
| hudakz | 10:b47c7921346f | 171 | "<a href=\"./?sw=1\" class=\"switch\"> " |
| hudakz | 10:b47c7921346f | 172 | "<input type=\"checkbox\">"; |
| hudakz | 0:68a0003c4cb8 | 173 | } |
| hudakz | 0:68a0003c4cb8 | 174 | |
| hudakz | 10:b47c7921346f | 175 | httpContent += |
| hudakz | 10:b47c7921346f | 176 | "<div class=\"slider\"></div>" |
| hudakz | 10:b47c7921346f | 177 | "</a>" |
| hudakz | 10:b47c7921346f | 178 | "</pre>" |
| hudakz | 10:b47c7921346f | 179 | "<hr>" |
| hudakz | 10:b47c7921346f | 180 | "<pre>2017 ARMmbed</pre>" |
| hudakz | 10:b47c7921346f | 181 | "</body>"; |
| hudakz | 0:68a0003c4cb8 | 182 | |
| hudakz | 10:b47c7921346f | 183 | return httpContent; |
| hudakz | 10:b47c7921346f | 184 | /*$on*/ |
| hudakz | 0:68a0003c4cb8 | 185 | } |
| hudakz | 0:68a0003c4cb8 | 186 | |
| hudakz | 5:0ab8292e37da | 187 | /** |
| hudakz | 5:0ab8292e37da | 188 | * @brief |
| hudakz | 5:0ab8292e37da | 189 | * @note |
| hudakz | 5:0ab8292e37da | 190 | * @param |
| hudakz | 5:0ab8292e37da | 191 | * @retval |
| hudakz | 5:0ab8292e37da | 192 | */ |
| hudakz | 10:b47c7921346f | 193 | void sendHTTP(TcpClient& client, string& header, string& content) |
| hudakz | 10:b47c7921346f | 194 | { |
| hudakz | 10:b47c7921346f | 195 | /*$off*/ |
| hudakz | 10:b47c7921346f | 196 | char content_length[5] = { }; |
| hudakz | 10:b47c7921346f | 197 | |
| hudakz | 10:b47c7921346f | 198 | header += |
| hudakz | 10:b47c7921346f | 199 | "\r\nContent-Type: text/html\r\n" |
| hudakz | 10:b47c7921346f | 200 | "Content-Length: "; |
| hudakz | 10:b47c7921346f | 201 | sprintf(content_length, "%d", content.length()); |
| hudakz | 10:b47c7921346f | 202 | header += |
| hudakz | 10:b47c7921346f | 203 | string(content_length) + "\r\n" |
| hudakz | 10:b47c7921346f | 204 | "Pragma: no-cache\r\n" |
| hudakz | 10:b47c7921346f | 205 | "Connection: About to close\r\n\r\n"; |
| hudakz | 10:b47c7921346f | 206 | |
| hudakz | 10:b47c7921346f | 207 | string webpage = header + content; |
| hudakz | 11:6c0b20227ca2 | 208 | client.send((uint8_t*)webpage.c_str(), webpage.length()); |
| hudakz | 10:b47c7921346f | 209 | /*$on*/ |
| hudakz | 10:b47c7921346f | 210 | } |
| hudakz | 10:b47c7921346f | 211 | |
| hudakz | 10:b47c7921346f | 212 | /** |
| hudakz | 10:b47c7921346f | 213 | * @brief |
| hudakz | 10:b47c7921346f | 214 | * @note |
| hudakz | 10:b47c7921346f | 215 | * @param |
| hudakz | 10:b47c7921346f | 216 | * @retval |
| hudakz | 10:b47c7921346f | 217 | */ |
| hudakz | 10:b47c7921346f | 218 | int main(void) |
| hudakz | 10:b47c7921346f | 219 | { |
| hudakz | 10:b47c7921346f | 220 | printf("Starting ...\r\n"); |
| hudakz | 10:b47c7921346f | 221 | |
| hudakz | 10:b47c7921346f | 222 | // IP address must be unique and compatible with your network. |
| hudakz | 10:b47c7921346f | 223 | //net->set_network(IP, NETMASK, GATEWAY); // include this for using static IP address |
| hudakz | 10:b47c7921346f | 224 | net.connect(); |
| hudakz | 10:b47c7921346f | 225 | |
| hudakz | 10:b47c7921346f | 226 | // Show the network address |
| hudakz | 10:b47c7921346f | 227 | const char* ip = net.get_ip_address(); |
| hudakz | 10:b47c7921346f | 228 | const char* netmask = net.get_netmask(); |
| hudakz | 10:b47c7921346f | 229 | const char* gateway = net.get_gateway(); |
| hudakz | 10:b47c7921346f | 230 | |
| hudakz | 10:b47c7921346f | 231 | printf("IP address: %s\r\n", ip ? ip : "None"); |
| hudakz | 10:b47c7921346f | 232 | printf("Netmask: %s\r\n", netmask ? netmask : "None"); |
| hudakz | 10:b47c7921346f | 233 | printf("Gateway: %s\r\n\r\n", gateway ? gateway : "None"); |
| hudakz | 10:b47c7921346f | 234 | printf("------------------------------------------------------\r\n"); |
| hudakz | 11:6c0b20227ca2 | 235 | printf("Usage: Type %s/%s/ into your web browser and hit ENTER\r\n", net.get_ip_address(), PASSWORD.c_str()); |
| hudakz | 10:b47c7921346f | 236 | printf("------------------------------------------------------\r\n"); |
| hudakz | 10:b47c7921346f | 237 | |
| hudakz | 10:b47c7921346f | 238 | /* Open the server on ethernet stack */ |
| hudakz | 10:b47c7921346f | 239 | server.open(&net); |
| hudakz | 10:b47c7921346f | 240 | |
| hudakz | 10:b47c7921346f | 241 | /* Bind the HTTP port (TCP 80) to the server */ |
| hudakz | 10:b47c7921346f | 242 | server.bind(PORT); |
| hudakz | 10:b47c7921346f | 243 | |
| hudakz | 10:b47c7921346f | 244 | /* Can handle 5 simultaneous connections */ |
| hudakz | 10:b47c7921346f | 245 | server.listen(5); |
| hudakz | 10:b47c7921346f | 246 | |
| hudakz | 11:6c0b20227ca2 | 247 | while (true) { |
| hudakz | 10:b47c7921346f | 248 | client = server.accept(); |
| hudakz | 10:b47c7921346f | 249 | |
| hudakz | 10:b47c7921346f | 250 | if (client) { |
| hudakz | 11:6c0b20227ca2 | 251 | client->recv((uint8_t*)receiveBuf, client->available()); |
| hudakz | 11:6c0b20227ca2 | 252 | #ifdef DEBUG |
| hudakz | 11:6c0b20227ca2 | 253 | printf("Client with IP address %s connected.\r\n\r\n", client->getpeername()); |
| hudakz | 11:6c0b20227ca2 | 254 | printf("Data received:\r\n%s\n\r", receiveBuf); |
| hudakz | 11:6c0b20227ca2 | 255 | #endif |
| hudakz | 11:6c0b20227ca2 | 256 | string received(receiveBuf); |
| hudakz | 10:b47c7921346f | 257 | |
| hudakz | 11:6c0b20227ca2 | 258 | if (received.substr(0, 3) != "GET") { |
| hudakz | 11:6c0b20227ca2 | 259 | httpHeader = "HTTP/1.0 200 OK"; |
| hudakz | 11:6c0b20227ca2 | 260 | httpContent = "<h1>200 OK</h1>"; |
| hudakz | 11:6c0b20227ca2 | 261 | sendHTTP(*client, httpHeader, httpContent); |
| hudakz | 11:6c0b20227ca2 | 262 | client->close(); |
| hudakz | 11:6c0b20227ca2 | 263 | continue; |
| hudakz | 11:6c0b20227ca2 | 264 | } |
| hudakz | 0:68a0003c4cb8 | 265 | |
| hudakz | 11:6c0b20227ca2 | 266 | if (received.substr(0, 6) == "GET / ") { |
| hudakz | 11:6c0b20227ca2 | 267 | httpHeader = "HTTP/1.0 200 OK"; |
| hudakz | 11:6c0b20227ca2 | 268 | httpContent = "<p>Usage: http://host_or_ip/password</p>\r\n"; |
| hudakz | 11:6c0b20227ca2 | 269 | sendHTTP(*client, httpHeader, httpContent); |
| hudakz | 11:6c0b20227ca2 | 270 | client->close(); |
| hudakz | 11:6c0b20227ca2 | 271 | continue; |
| hudakz | 11:6c0b20227ca2 | 272 | } |
| hudakz | 0:68a0003c4cb8 | 273 | |
| hudakz | 11:6c0b20227ca2 | 274 | int cmd = analyseURL(received); |
| hudakz | 10:b47c7921346f | 275 | |
| hudakz | 11:6c0b20227ca2 | 276 | switch (cmd) { |
| hudakz | 11:6c0b20227ca2 | 277 | case -3: |
| hudakz | 11:6c0b20227ca2 | 278 | // update webpage |
| hudakz | 11:6c0b20227ca2 | 279 | httpHeader = "HTTP/1.0 200 OK"; |
| hudakz | 11:6c0b20227ca2 | 280 | sendHTTP(*client, httpHeader, showWebPage(output)); |
| hudakz | 11:6c0b20227ca2 | 281 | break; |
| hudakz | 10:b47c7921346f | 282 | |
| hudakz | 11:6c0b20227ca2 | 283 | case -2: |
| hudakz | 11:6c0b20227ca2 | 284 | // redirect to the right base url |
| hudakz | 11:6c0b20227ca2 | 285 | httpHeader = "HTTP/1.0 301 Moved Permanently\r\nLocation: "; |
| hudakz | 11:6c0b20227ca2 | 286 | sendHTTP(*client, httpHeader, movedPermanently(1)); |
| hudakz | 11:6c0b20227ca2 | 287 | break; |
| hudakz | 0:68a0003c4cb8 | 288 | |
| hudakz | 11:6c0b20227ca2 | 289 | case -1: |
| hudakz | 11:6c0b20227ca2 | 290 | httpHeader = "HTTP/1.0 401 Unauthorized"; |
| hudakz | 11:6c0b20227ca2 | 291 | httpContent = "<h1>401 Unauthorized</h1>"; |
| hudakz | 11:6c0b20227ca2 | 292 | sendHTTP(*client, httpHeader, httpContent); |
| hudakz | 11:6c0b20227ca2 | 293 | break; |
| hudakz | 0:68a0003c4cb8 | 294 | |
| hudakz | 11:6c0b20227ca2 | 295 | case 0: |
| hudakz | 11:6c0b20227ca2 | 296 | output = OFF; // output off |
| hudakz | 11:6c0b20227ca2 | 297 | httpHeader = "HTTP/1.0 200 OK"; |
| hudakz | 11:6c0b20227ca2 | 298 | sendHTTP(*client, httpHeader, showWebPage(output)); |
| hudakz | 11:6c0b20227ca2 | 299 | break; |
| hudakz | 0:68a0003c4cb8 | 300 | |
| hudakz | 11:6c0b20227ca2 | 301 | case 1: |
| hudakz | 11:6c0b20227ca2 | 302 | output = ON; // output on |
| hudakz | 11:6c0b20227ca2 | 303 | httpHeader = "HTTP/1.0 200 OK"; |
| hudakz | 11:6c0b20227ca2 | 304 | sendHTTP(*client, httpHeader, showWebPage(output)); |
| hudakz | 11:6c0b20227ca2 | 305 | break; |
| hudakz | 0:68a0003c4cb8 | 306 | } |
| hudakz | 11:6c0b20227ca2 | 307 | |
| hudakz | 10:b47c7921346f | 308 | client->close(); |
| hudakz | 0:68a0003c4cb8 | 309 | } |
| hudakz | 0:68a0003c4cb8 | 310 | } |
| hudakz | 0:68a0003c4cb8 | 311 | } |