X10 Server - IOT device to leverage a collection of old X10 devices for home automation and lighting control.
Dependencies: IniManager mbed HTTPClient SWUpdate mbed-rtos Watchdog X10 SW_HTTPServer SW_String EthernetInterface TimeInterface SSDP
X10 Server
See the X10 Server Nodebook page
WebPages.cpp@2:ca5d12560ff7, 2018-07-10 (annotated)
- Committer:
- WiredHome
- Date:
- Tue Jul 10 03:09:19 2018 +0000
- Revision:
- 2:ca5d12560ff7
- Parent:
- 1:016d4400254b
- Child:
- 4:5da66fab599c
Improvements to be more reliable - make the SSDP detection more precise and make the socket i/f blocking to not overrun the transmit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:de1dfa2ab813 | 1 | |
WiredHome | 0:de1dfa2ab813 | 2 | #include "mbed.h" |
WiredHome | 0:de1dfa2ab813 | 3 | |
WiredHome | 0:de1dfa2ab813 | 4 | #include "EthernetInterface.h" |
WiredHome | 0:de1dfa2ab813 | 5 | #include "WebPages.h" |
WiredHome | 0:de1dfa2ab813 | 6 | |
WiredHome | 0:de1dfa2ab813 | 7 | extern EthernetInterface eth; |
WiredHome | 0:de1dfa2ab813 | 8 | extern const char * BUILD_DATE; |
WiredHome | 0:de1dfa2ab813 | 9 | extern const char * PROG_NAME; |
WiredHome | 0:de1dfa2ab813 | 10 | extern const char * My_Name; |
WiredHome | 0:de1dfa2ab813 | 11 | extern const char * My_SerialNum; |
WiredHome | 0:de1dfa2ab813 | 12 | const int Server_Port = 80; |
WiredHome | 0:de1dfa2ab813 | 13 | |
WiredHome | 0:de1dfa2ab813 | 14 | |
WiredHome | 0:de1dfa2ab813 | 15 | // ########################################## |
WiredHome | 0:de1dfa2ab813 | 16 | // This test version controls the LEDs |
WiredHome | 0:de1dfa2ab813 | 17 | // |
WiredHome | 0:de1dfa2ab813 | 18 | DigitalOut leds[4] = { LED1, LED2, LED3, LED4 }; |
WiredHome | 0:de1dfa2ab813 | 19 | |
WiredHome | 0:de1dfa2ab813 | 20 | |
WiredHome | 0:de1dfa2ab813 | 21 | static const char hdrTypeHTML_NoCache[] = |
WiredHome | 0:de1dfa2ab813 | 22 | "Content-Type: text/html\r\n" |
WiredHome | 0:de1dfa2ab813 | 23 | "Cache-Control: no-cache\r\n"; |
WiredHome | 0:de1dfa2ab813 | 24 | |
WiredHome | 0:de1dfa2ab813 | 25 | |
WiredHome | 0:de1dfa2ab813 | 26 | // sprintf(buf, ROOTPAGE, "NodeName", "NodeName", "BuildDate", |
WiredHome | 1:016d4400254b | 27 | static const char ROOTPAGE[] = |
WiredHome | 0:de1dfa2ab813 | 28 | "<!DOCTYPE html>\r\n" |
WiredHome | 0:de1dfa2ab813 | 29 | "<html><head><title>%s</title>\r\n" |
WiredHome | 0:de1dfa2ab813 | 30 | "</head>\r\n" |
WiredHome | 0:de1dfa2ab813 | 31 | "<body>\r\n" |
WiredHome | 0:de1dfa2ab813 | 32 | "<h1>%s</h1>" |
WiredHome | 0:de1dfa2ab813 | 33 | "This project demonstrates the Smartware web server and the Smartware SSDP discovery server.\n" |
WiredHome | 0:de1dfa2ab813 | 34 | "You should be able to scan the network (e.g. in Windows Explorer) and find this device.\n" |
WiredHome | 0:de1dfa2ab813 | 35 | "Then you can click on it to open this web page to interact with it.\n" |
WiredHome | 1:016d4400254b | 36 | "<br/><br/>Build %s<br/><br/>\n" |
WiredHome | 1:016d4400254b | 37 | "<font size='+5'>\n" |
WiredHome | 1:016d4400254b | 38 | "<table><tr>\n" |
WiredHome | 1:016d4400254b | 39 | "<td>" |
WiredHome | 1:016d4400254b | 40 | "<button onclick=\"window.location.href='/?LED=1&CMD=1'\">LED 1 On</button><br/>\n" |
WiredHome | 1:016d4400254b | 41 | "<button onclick=\"window.location.href='/?LED=1&CMD=0'\">LED 1 Off</button><br/>\n" |
WiredHome | 1:016d4400254b | 42 | "</td><td>" |
WiredHome | 1:016d4400254b | 43 | "<button onclick=\"window.location.href='/?LED=2&CMD=1'\">LED 2 On</button><br/>\n" |
WiredHome | 1:016d4400254b | 44 | "<button onclick=\"window.location.href='/?LED=2&CMD=0'\">LED 2 Off</button><br/>\n" |
WiredHome | 1:016d4400254b | 45 | "</td><td>" |
WiredHome | 1:016d4400254b | 46 | "<button onclick=\"window.location.href='/?LED=3&CMD=1'\">LED 3 On</button><br/>\n" |
WiredHome | 1:016d4400254b | 47 | "<button onclick=\"window.location.href='/?LED=3&CMD=0'\">LED 3 Off</button><br/>\n" |
WiredHome | 1:016d4400254b | 48 | "</td><td>" |
WiredHome | 1:016d4400254b | 49 | "<button onclick=\"window.location.href='/?LED=4&CMD=1'\">LED 4 On</button><br/>\n" |
WiredHome | 1:016d4400254b | 50 | "<button onclick=\"window.location.href='/?LED=4&CMD=0'\">LED 4 Off</button><br/>\n" |
WiredHome | 1:016d4400254b | 51 | "</td>" |
WiredHome | 1:016d4400254b | 52 | "</tr></table>\n" |
WiredHome | 1:016d4400254b | 53 | "</font>\n" |
WiredHome | 0:de1dfa2ab813 | 54 | "<form method='get'>\n" |
WiredHome | 0:de1dfa2ab813 | 55 | "<table>\n" |
WiredHome | 0:de1dfa2ab813 | 56 | "<tr><td>Set LED</td>\n" |
WiredHome | 0:de1dfa2ab813 | 57 | "<td><select name='LED'>\n" |
WiredHome | 0:de1dfa2ab813 | 58 | " <option value='1'>1</option>\n" |
WiredHome | 0:de1dfa2ab813 | 59 | " <option value='2'>2</option>\n" |
WiredHome | 0:de1dfa2ab813 | 60 | " <option value='3'>3</option>\n" |
WiredHome | 0:de1dfa2ab813 | 61 | " <option value='4'>4</option>\n" |
WiredHome | 0:de1dfa2ab813 | 62 | " </select>\n" |
WiredHome | 0:de1dfa2ab813 | 63 | " \n" |
WiredHome | 0:de1dfa2ab813 | 64 | " <select name='CMD'>\n" |
WiredHome | 0:de1dfa2ab813 | 65 | " <option value='0'>Off</option>\n" |
WiredHome | 0:de1dfa2ab813 | 66 | " <option value='1'>On</option>\n" |
WiredHome | 0:de1dfa2ab813 | 67 | " </select>\n" |
WiredHome | 0:de1dfa2ab813 | 68 | "</td></tr>\n" |
WiredHome | 0:de1dfa2ab813 | 69 | "<tr><td> </td><td><input type='submit' value='Apply'></td></tr>\n" |
WiredHome | 0:de1dfa2ab813 | 70 | "</table>\n" |
WiredHome | 0:de1dfa2ab813 | 71 | "</form>\n" |
WiredHome | 0:de1dfa2ab813 | 72 | "</body>\n" |
WiredHome | 0:de1dfa2ab813 | 73 | "</html>\n" |
WiredHome | 0:de1dfa2ab813 | 74 | ""; |
WiredHome | 0:de1dfa2ab813 | 75 | |
WiredHome | 0:de1dfa2ab813 | 76 | |
WiredHome | 0:de1dfa2ab813 | 77 | // The /setup.xml file |
WiredHome | 0:de1dfa2ab813 | 78 | // |
WiredHome | 0:de1dfa2ab813 | 79 | // sprintf(buf, SETUP_TEMPLATE, "FriendlyName", "udn_hexstring", "serialNum", "ip.ad.dr", portNum); |
WiredHome | 2:ca5d12560ff7 | 80 | static const char SETUP_TEMPLATE[] = |
WiredHome | 0:de1dfa2ab813 | 81 | "<?xml version=\"1.0\"?>\n" |
WiredHome | 0:de1dfa2ab813 | 82 | "<root xmlns=\"urn:Belkin:device-1-0\">\n" |
WiredHome | 0:de1dfa2ab813 | 83 | " <specVersion>\n" |
WiredHome | 0:de1dfa2ab813 | 84 | " <major>1</major>\n" |
WiredHome | 0:de1dfa2ab813 | 85 | " <minor>0</minor>\n" |
WiredHome | 0:de1dfa2ab813 | 86 | " </specVersion>\n" |
WiredHome | 0:de1dfa2ab813 | 87 | " <device>\n" |
WiredHome | 0:de1dfa2ab813 | 88 | " <deviceType>urn:Belkin:device:controllee:1</deviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 89 | " <friendlyName>%s</friendlyName>\n" |
WiredHome | 0:de1dfa2ab813 | 90 | " <manufacturer>Belkin International Inc.</manufacturer>\n" ///< must be "Belkin..." for Alexa discovery |
WiredHome | 0:de1dfa2ab813 | 91 | " <manufacturerURL>http://www.smart-family.net</manufacturerURL>\n" ///< |
WiredHome | 0:de1dfa2ab813 | 92 | " <modelDescription>Special thing</modelDescription>\n" ///< |
WiredHome | 0:de1dfa2ab813 | 93 | " <modelName>Smart Node</modelName>\n" ///< |
WiredHome | 0:de1dfa2ab813 | 94 | " <modelNumber>1.0.0</modelNumber>\n" |
WiredHome | 0:de1dfa2ab813 | 95 | #if 0 |
WiredHome | 0:de1dfa2ab813 | 96 | " <modelURL>http://www.smart-family.net</modelURL>\n" ///< This causes it to fail to send completely |
WiredHome | 0:de1dfa2ab813 | 97 | #endif |
WiredHome | 0:de1dfa2ab813 | 98 | " <UDN>uuid:Socket-1_0-%s</UDN>\n" |
WiredHome | 0:de1dfa2ab813 | 99 | " <serialNumber>%s</serialNumber>\n" |
WiredHome | 0:de1dfa2ab813 | 100 | " <iconList>\n" |
WiredHome | 0:de1dfa2ab813 | 101 | " <mimetype>jpg</mimetype>\n" |
WiredHome | 0:de1dfa2ab813 | 102 | " <width>100</width>\n" |
WiredHome | 0:de1dfa2ab813 | 103 | " <height>100</height>\n" |
WiredHome | 0:de1dfa2ab813 | 104 | " <depth>100</depth>\n" |
WiredHome | 0:de1dfa2ab813 | 105 | " <url>icon.jpg</url>\n" |
WiredHome | 0:de1dfa2ab813 | 106 | " </iconList>\n" |
WiredHome | 0:de1dfa2ab813 | 107 | " <presentationURL>http://%s:%d</presentationURL>\n" |
WiredHome | 0:de1dfa2ab813 | 108 | #if 0 |
WiredHome | 0:de1dfa2ab813 | 109 | " <serviceList>\n" |
WiredHome | 0:de1dfa2ab813 | 110 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 111 | " <serviceType>urn:Belkin:service:WiFiSetup:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 112 | " <serviceId>urn:Belkin:serviceId:WiFiSetup1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 113 | " <controlURL>/upnp/control/WiFiSetup1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 114 | " <eventSubURL>/upnp/event/WiFiSetup1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 115 | " <SCPDURL>/setupservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 116 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 117 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 118 | " <serviceType>urn:Belkin:service:timesync:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 119 | " <serviceId>urn:Belkin:serviceId:timesync1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 120 | " <controlURL>/upnp/control/timesync1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 121 | " <eventSubURL>/upnp/event/timesync1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 122 | " <SCPDURL>/timesyncservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 123 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 124 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 125 | " <serviceType>urn:Belkin:service:basicevent:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 126 | " <serviceId>urn:Belkin:serviceId:basicevent1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 127 | " <controlURL>/upnp/control/basicevent1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 128 | " <eventSubURL>/upnp/event/basicevent1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 129 | " <SCPDURL>/eventservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 130 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 131 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 132 | " <serviceType>urn:Belkin:service:firmwareupdate:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 133 | " <serviceId>urn:Belkin:serviceId:firmwareupdate1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 134 | " <controlURL>/upnp/control/firmwareupdate1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 135 | " <eventSubURL>/upnp/event/firmwareupdate1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 136 | " <SCPDURL>/firmwareupdate.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 137 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 138 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 139 | " <serviceType>urn:Belkin:service:rules:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 140 | " <serviceId>urn:Belkin:serviceId:rules1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 141 | " <controlURL>/upnp/control/rules1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 142 | " <eventSubURL>/upnp/event/rules1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 143 | " <SCPDURL>/rulesservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 144 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 145 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 146 | " <serviceType>urn:Belkin:service:metainfo:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 147 | " <serviceId>urn:Belkin:serviceId:metainfo1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 148 | " <controlURL>/upnp/control/metainfo1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 149 | " <eventSubURL>/upnp/event/metainfo1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 150 | " <SCPDURL>/metainfoservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 151 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 152 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 153 | " <serviceType>urn:Belkin:service:remoteaccess:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 154 | " <serviceId>urn:Belkin:serviceId:remoteaccess1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 155 | " <controlURL>/upnp/control/remoteaccess1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 156 | " <eventSubURL>/upnp/event/remoteaccess1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 157 | " <SCPDURL>/remoteaccess.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 158 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 159 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 160 | " <serviceType>urn:Belkin:service:deviceinfo:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 161 | " <serviceId>urn:Belkin:serviceId:deviceinfo1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 162 | " <controlURL>/upnp/control/deviceinfo1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 163 | " <eventSubURL>/upnp/event/deviceinfo1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 164 | " <SCPDURL>/deviceinfoservice.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 165 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 166 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 167 | " <serviceType>urn:Belkin:service:smartsetup:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 168 | " <serviceId>urn:Belkin:serviceId:smartsetup1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 169 | " <controlURL>/upnp/control/smartsetup1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 170 | " <eventSubURL>/upnp/event/smartsetup1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 171 | " <SCPDURL>/smartsetup.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 172 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 173 | " <service>\n" |
WiredHome | 0:de1dfa2ab813 | 174 | " <serviceType>urn:Belkin:service:manufacture:1</serviceType>\n" |
WiredHome | 0:de1dfa2ab813 | 175 | " <serviceId>urn:Belkin:serviceId:manufacture1</serviceId>\n" |
WiredHome | 0:de1dfa2ab813 | 176 | " <controlURL>/upnp/control/manufacture1</controlURL>\n" |
WiredHome | 0:de1dfa2ab813 | 177 | " <eventSubURL>/upnp/event/manufacture1</eventSubURL>\n" |
WiredHome | 0:de1dfa2ab813 | 178 | " <SCPDURL>/manufacture.xml</SCPDURL>\n" |
WiredHome | 0:de1dfa2ab813 | 179 | " </service>\n" |
WiredHome | 0:de1dfa2ab813 | 180 | " </serviceList>\n" |
WiredHome | 0:de1dfa2ab813 | 181 | #endif |
WiredHome | 0:de1dfa2ab813 | 182 | " </device>\n" |
WiredHome | 0:de1dfa2ab813 | 183 | "</root>\n"; |
WiredHome | 0:de1dfa2ab813 | 184 | |
WiredHome | 0:de1dfa2ab813 | 185 | |
WiredHome | 0:de1dfa2ab813 | 186 | HTTPServer::CallBackResults Setup_xml(HTTPServer *svr, HTTPServer::CallBackType type, char * path, |
WiredHome | 0:de1dfa2ab813 | 187 | const HTTPServer::namevalue *queryParams, int queryParamCount) |
WiredHome | 0:de1dfa2ab813 | 188 | { |
WiredHome | 2:ca5d12560ff7 | 189 | char BigBuffer[sizeof(SETUP_TEMPLATE) + 150]; |
WiredHome | 0:de1dfa2ab813 | 190 | HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR; |
WiredHome | 0:de1dfa2ab813 | 191 | printf("Setup.xml responder\n"); |
WiredHome | 0:de1dfa2ab813 | 192 | switch (type) { |
WiredHome | 0:de1dfa2ab813 | 193 | case HTTPServer::SEND_PAGE: |
WiredHome | 0:de1dfa2ab813 | 194 | svr->header(HTTPServer::OK, "OK", hdrTypeHTML_NoCache); |
WiredHome | 0:de1dfa2ab813 | 195 | sprintf(BigBuffer, SETUP_TEMPLATE, |
WiredHome | 0:de1dfa2ab813 | 196 | My_Name, eth.getMACAddress(), My_SerialNum, |
WiredHome | 0:de1dfa2ab813 | 197 | eth.getIPAddress(), Server_Port); |
WiredHome | 0:de1dfa2ab813 | 198 | svr->send(BigBuffer); |
WiredHome | 0:de1dfa2ab813 | 199 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 200 | break; |
WiredHome | 0:de1dfa2ab813 | 201 | case HTTPServer::CONTENT_LENGTH_REQUEST: |
WiredHome | 0:de1dfa2ab813 | 202 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 203 | break; |
WiredHome | 0:de1dfa2ab813 | 204 | case HTTPServer::DATA_TRANSFER: |
WiredHome | 0:de1dfa2ab813 | 205 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 206 | break; |
WiredHome | 0:de1dfa2ab813 | 207 | default: |
WiredHome | 0:de1dfa2ab813 | 208 | ret = HTTPServer::ACCEPT_ERROR; |
WiredHome | 0:de1dfa2ab813 | 209 | break; |
WiredHome | 0:de1dfa2ab813 | 210 | } |
WiredHome | 0:de1dfa2ab813 | 211 | return ret; |
WiredHome | 0:de1dfa2ab813 | 212 | } |
WiredHome | 0:de1dfa2ab813 | 213 | |
WiredHome | 0:de1dfa2ab813 | 214 | |
WiredHome | 0:de1dfa2ab813 | 215 | |
WiredHome | 0:de1dfa2ab813 | 216 | HTTPServer::CallBackResults RootPage(HTTPServer *svr, HTTPServer::CallBackType type, char * path, |
WiredHome | 0:de1dfa2ab813 | 217 | const HTTPServer::namevalue *queryParams, int queryParamCount) |
WiredHome | 0:de1dfa2ab813 | 218 | { |
WiredHome | 1:016d4400254b | 219 | #define bufSize (sizeof(ROOTPAGE) + 100) |
WiredHome | 1:016d4400254b | 220 | char * BigBuffer = (char *)malloc(bufSize); |
WiredHome | 0:de1dfa2ab813 | 221 | HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR; |
WiredHome | 0:de1dfa2ab813 | 222 | printf("RootPage responder\n"); |
WiredHome | 1:016d4400254b | 223 | if (!BigBuffer) { |
WiredHome | 1:016d4400254b | 224 | printf("cannot allocate %d bytes\n", bufSize); |
WiredHome | 1:016d4400254b | 225 | return ret; |
WiredHome | 1:016d4400254b | 226 | } |
WiredHome | 0:de1dfa2ab813 | 227 | |
WiredHome | 0:de1dfa2ab813 | 228 | int led, cmd; |
WiredHome | 0:de1dfa2ab813 | 229 | int mask = 0; |
WiredHome | 0:de1dfa2ab813 | 230 | for (int i=0; i<queryParamCount; i++) { |
WiredHome | 0:de1dfa2ab813 | 231 | if (strcmp(queryParams[i].name, "LED") == 0) { |
WiredHome | 0:de1dfa2ab813 | 232 | led = atoi(queryParams[i].value); |
WiredHome | 0:de1dfa2ab813 | 233 | mask |= 1; |
WiredHome | 0:de1dfa2ab813 | 234 | } else if (strcmp(queryParams[i].name, "CMD") == 0) { |
WiredHome | 0:de1dfa2ab813 | 235 | cmd = atoi(queryParams[i].value); |
WiredHome | 0:de1dfa2ab813 | 236 | mask |= 2; |
WiredHome | 0:de1dfa2ab813 | 237 | } |
WiredHome | 0:de1dfa2ab813 | 238 | } |
WiredHome | 0:de1dfa2ab813 | 239 | if (mask == 3) { |
WiredHome | 0:de1dfa2ab813 | 240 | switch (led) { |
WiredHome | 0:de1dfa2ab813 | 241 | case 1: |
WiredHome | 0:de1dfa2ab813 | 242 | case 2: |
WiredHome | 0:de1dfa2ab813 | 243 | case 3: |
WiredHome | 0:de1dfa2ab813 | 244 | case 4: |
WiredHome | 0:de1dfa2ab813 | 245 | leds[led - 1] = cmd; |
WiredHome | 0:de1dfa2ab813 | 246 | break; |
WiredHome | 0:de1dfa2ab813 | 247 | default: |
WiredHome | 0:de1dfa2ab813 | 248 | break; |
WiredHome | 0:de1dfa2ab813 | 249 | } |
WiredHome | 0:de1dfa2ab813 | 250 | } |
WiredHome | 0:de1dfa2ab813 | 251 | |
WiredHome | 0:de1dfa2ab813 | 252 | switch (type) { |
WiredHome | 0:de1dfa2ab813 | 253 | case HTTPServer::SEND_PAGE: |
WiredHome | 0:de1dfa2ab813 | 254 | svr->header(HTTPServer::OK, "OK", hdrTypeHTML_NoCache); |
WiredHome | 1:016d4400254b | 255 | snprintf(BigBuffer, bufSize, ROOTPAGE, PROG_NAME, PROG_NAME, BUILD_DATE); |
WiredHome | 0:de1dfa2ab813 | 256 | svr->send(BigBuffer); |
WiredHome | 0:de1dfa2ab813 | 257 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 258 | break; |
WiredHome | 0:de1dfa2ab813 | 259 | case HTTPServer::CONTENT_LENGTH_REQUEST: |
WiredHome | 0:de1dfa2ab813 | 260 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 261 | break; |
WiredHome | 0:de1dfa2ab813 | 262 | case HTTPServer::DATA_TRANSFER: |
WiredHome | 0:de1dfa2ab813 | 263 | ret = HTTPServer::ACCEPT_COMPLETE; |
WiredHome | 0:de1dfa2ab813 | 264 | break; |
WiredHome | 0:de1dfa2ab813 | 265 | default: |
WiredHome | 0:de1dfa2ab813 | 266 | ret = HTTPServer::ACCEPT_ERROR; |
WiredHome | 0:de1dfa2ab813 | 267 | break; |
WiredHome | 0:de1dfa2ab813 | 268 | } |
WiredHome | 1:016d4400254b | 269 | if (BigBuffer) |
WiredHome | 1:016d4400254b | 270 | free(BigBuffer); |
WiredHome | 0:de1dfa2ab813 | 271 | return ret; |
WiredHome | 0:de1dfa2ab813 | 272 | } |