From 8548b438fab4c5b3b8f78cc8c3a69f851705aa84 Mon Sep 17 00:00:00 2001
From: SciLor <bh44l@gmx.de>
Date: Sun, 4 Dec 2016 20:10:17 +0100
Subject: [PATCH] Fix effect speed (again)

---
 HyperionRGB/HyperionRGB.ino       | 16 +++++++++-------
 HyperionRGB/WrapperJsonServer.cpp | 12 +++++++-----
 HyperionRGB/WrapperJsonServer.h   |  6 +++---
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/HyperionRGB/HyperionRGB.ino b/HyperionRGB/HyperionRGB.ino
index 5a72d2d..6f5d9e9 100644
--- a/HyperionRGB/HyperionRGB.ino
+++ b/HyperionRGB/HyperionRGB.ino
@@ -61,7 +61,7 @@ void animationStep() {
   }
 }
 
-void changeMode(Mode newMode, double interval = 0.0d) {
+void changeMode(Mode newMode, int interval = 0) {
   if (newMode != activeMode) {
     Log.info("Mode changed to %i", newMode);
     activeMode = newMode;
@@ -76,19 +76,21 @@ void changeMode(Mode newMode, double interval = 0.0d) {
       case STATIC_COLOR:
         break;
       case RAINBOW:
-        if (interval == 0.0d)
-          interval = 0.5d;
-        animationThread.setInterval(interval / 1000);
+        if (interval == 0)
+          interval = 500;
+        animationThread.setInterval(interval);
         break;
       case FIRE2012:
-        if (interval == 0.0d)
-          interval = 0.016d;
-        animationThread.setInterval(interval / 1000);
+        if (interval == 0)
+          interval = 16;
+        animationThread.setInterval(interval);
         break;
       case HYPERION_UDP:
         if (!autoswitch)
           udpLed.begin();
     }
+    if (interval > 0)
+      Log.debug("Interval set to %ims", interval);
   }
 }
 
diff --git a/HyperionRGB/WrapperJsonServer.cpp b/HyperionRGB/WrapperJsonServer.cpp
index 9211268..bec2a47 100644
--- a/HyperionRGB/WrapperJsonServer.cpp
+++ b/HyperionRGB/WrapperJsonServer.cpp
@@ -65,9 +65,11 @@ void WrapperJsonServer::readData(void) {
       _tcpClient.println("{\"success\":true}");
     } else if (command.equals("effect")) {
       String effect = root["effect"]["name"].asString();
-      double speed = root["effect"]["speed"];
-      double interval = 1 / speed;
-      int duration = root["duration"];
+      double effectSpeed = root["effect"]["args"]["speed"];
+      int interval = 0;
+      if (effectSpeed > 0) {
+        interval = (int)(1000.0 / effectSpeed);
+      }
       
       if (effect.equals("Hyperion UDP")) {
         effectChange(HYPERION_UDP);
@@ -103,10 +105,10 @@ void WrapperJsonServer::clearCmd(void) {
   }
 }
 
-void WrapperJsonServer::onEffectChange(void(* function) (Mode, double)) {
+void WrapperJsonServer::onEffectChange(void(* function) (Mode, int)) {
   effectChangePointer = function;
 }
-void WrapperJsonServer::effectChange(Mode effect, double interval/* = 1.0d*/) {
+void WrapperJsonServer::effectChange(Mode effect, int interval/* = 0*/) {
   if (effectChangePointer) {
     effectChangePointer(effect, interval);
   }
diff --git a/HyperionRGB/WrapperJsonServer.h b/HyperionRGB/WrapperJsonServer.h
index af17be5..62c808d 100644
--- a/HyperionRGB/WrapperJsonServer.h
+++ b/HyperionRGB/WrapperJsonServer.h
@@ -20,7 +20,7 @@ class WrapperJsonServer {
     void
       onLedColorWipe(void(* function) (byte, byte, byte)),
       onClearCmd(void(* function) (void)),
-      onEffectChange(void(* function) (Mode, double));
+      onEffectChange(void(* function) (Mode, int));
   private:
     void
       handleConnection(boolean newClient),
@@ -33,8 +33,8 @@ class WrapperJsonServer {
       clearCmd(void),
       (* clearCmdPointer) (void);
     void 
-      effectChange(Mode effect, double interval = 1.0d),
-      (* effectChangePointer) (Mode, double);
+      effectChange(Mode effect, int interval = 0),
+      (* effectChangePointer) (Mode, int);
   
     WiFiServer _tcpServer;
     WiFiClient _tcpClient;