LeeT WiFiLamp code and test

Dependencies:   ESP8266_WebServer mbed

Fork of WiFiLamp by Sebastian Schocke

Revision:
26:ea5e0ff46492
Parent:
25:841fc9daffa5
diff -r 841fc9daffa5 -r ea5e0ff46492 main.cpp
--- a/main.cpp	Tue Jan 06 18:44:43 2015 +0000
+++ b/main.cpp	Wed Jan 07 21:36:45 2015 +0000
@@ -52,6 +52,34 @@
     ledStrip.write(colors, LED_COUNT);
 }
 
+void setDiscoColor( )
+{
+    for ( int c = 0; c < LED_COUNT; c++ )
+    {
+        colors[c].red = rand()%255;
+        colors[c].green = rand()%255;
+        colors[c].blue = rand()%255;
+    }
+    
+    ledStrip.write(colors, LED_COUNT);
+}
+
+Timer DiscoTimer;
+#define DiscoDelay 100
+
+int lampMode = 0;
+
+unsigned long heapSize()
+{
+    char   stackVariable;
+    void   *heap;
+    unsigned long result;
+    heap  = malloc(4);
+    result  = (uint8_t*)&stackVariable - (uint8_t*)heap;
+    free(heap);
+    return result;
+}
+
 void sendConfigJSONReply(int linkID, const char* result) {
     sprintf(temp, jsonConfigReply, opMode, stationIP.c_str(), ssid.c_str(), result);
     server.SendReply(linkID, temp, mimeJSON, 0);
@@ -63,7 +91,7 @@
     pc.attach(&pcrxint);
 #endif
     
-    pc.printf("WiFi Lamp - %s...\r\n", VERSION);    
+    pc.printf("\r\nWiFi Lamp - %s...\r\n", VERSION);    
     
     setColor( 25, 0, 0);
     
@@ -73,6 +101,7 @@
     wifiSerial.attach(&rxint);
 #ifdef DEBUG_WIFI
     server.debugSerial = &pc;
+    pc.printf("Debug WiFi Enabled!\r\n");
 #endif
     wait_ms(1000);
     
@@ -84,7 +113,6 @@
     server.ResetModule();
     wifiOn = 1;
     
-    
     std::string fwVer = server.GetFirmwareVersion();
     pc.printf("ESP Firmware Version: %s\r\n", fwVer.c_str());
     
@@ -112,6 +140,9 @@
     wait_ms(500);
     setColor( 0, 0, 0);
     
+    pc.printf("Heap Memory %d", heapSize());
+    DiscoTimer.start();
+                    
     std::string httpReply;
     while(true) {
         ESP8266_WebRequest* request = server.GetRequest();
@@ -120,7 +151,7 @@
             for( std::map<std::string,std::string>::iterator it = request->Parameters.begin(); it!=request->Parameters.end(); ++it ) {
                 pc.printf("HTTP Parameter %s = %s\r\n", it->first.c_str(), it->second.c_str());
             }
-            if( request->URI == "/" ) {
+            if( request->URI == "/" || request->URI == "/index.html" ) {
                 httpReply = htmlHead;
                 httpReply += "<table><tr><td align='right'><a href='config'><img src='config.gif' /></a></td></tr>";
                 httpReply += "<tr><td align='center'>";
@@ -185,11 +216,21 @@
             } else if( request->URI == "/wifilamp.css" ) {
                 server.SendReply(request->LinkID, css, strlen(css), mimeCSS);
             } else if( request->URI == "/colormap.gif" ) {
-                server.SendReply(request->LinkID, (char*)colormap, sizeof(colormap), mimeGIF);
+                server.SendReply(request->LinkID, (char*)colorMap, sizeof(colorMap), mimeGIF);
             } else if( request->URI == "/config.gif" ) {
                 server.SendReply(request->LinkID, (char*)configIcon, sizeof(configIcon), mimeGIF);
+           } else if( request->URI == "/robtos.txt" ) {
+                server.SendReply(request->LinkID, robotsTxt, strlen(robotsTxt), mimeText);
+            } else if( request->URI == "/favicon.ico" ) {
+                server.SendReply(request->LinkID, (char*)favIcon, sizeof(favIcon), "image/x-icon");
+            } else if( request->URI == "/disco" ) {
+                lampMode = 2; // All colours
+                DiscoTimer.reset();
+                server.SendReply(request->LinkID, "OK", mimeText, 0);
             } else if( request->URI == "/setcolour" || request->URI == "/setcolor" ) {
                 int r=0, g=0, b=0;
+
+                lampMode = 1; // All LED 1 colour                
                 
                 if(request->Parameters.count("r") > 0) r=atoi(request->Parameters["r"].c_str());
                 if(request->Parameters.count("g") > 0) g=atoi(request->Parameters["g"].c_str());
@@ -206,5 +247,20 @@
             pc.printf("\r\nHTTP Reply Sent\r\n");
             delete request;
         }
+        if( lampMode == 2 && DiscoTimer.read_ms() > DiscoDelay ) {
+            setDiscoColor();
+            // Delay random colour change, else it just looks white
+            DiscoTimer.reset();
+        }
+/*
+        if( lampMode == 3 ) {
+            // strobe
+        }
+
+        if( lampMode == 4 ) {
+            // fade
+        }
+
+*/
     }
 }
\ No newline at end of file