From f81c4bebda69b6339f47464eed406ebb18ec78d9 Mon Sep 17 00:00:00 2001
From: Tod Kurt <todbot@users.noreply.github.com>
Date: Sat, 16 Jul 2022 22:56:53 -0700
Subject: [PATCH] rework servertickle uri to be easier to use, #56. add "time"
 arg to response to match blink1control2 server

---
 server/blink1-tiny-server.c | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/server/blink1-tiny-server.c b/server/blink1-tiny-server.c
index 493d9929..5d22866e 100644
--- a/server/blink1-tiny-server.c
+++ b/server/blink1-tiny-server.c
@@ -78,7 +78,9 @@ static const url_info supported_urls[]
     {"/blink1/fadeToRGB",     "turn blink(1) specified RGB color by 'rgb' arg"},
     {"/blink1/blink",         "blink the blink(1) the specified RGB color"},
     {"/blink1/pattern/play",  "play color pattern specified by 'pattern' arg"},
-    {"/blink1/random",        "turn the blink(1) a random color"}
+    {"/blink1/random",        "turn the blink(1) a random color"},
+    {"/blink1/servertickle/on","Enable servertickle, uses 'millis' or 'time' arg"},
+    {"/blink1/servertickle/off","Disable servertickle"}
 };
 
 void usage()
@@ -116,9 +118,8 @@ void usage()
 "  /blink1/blue?bright=127 -- set blink1 blue, at half-intensity \n"
 "  /blink1/fadeToRGB?rgb=FF00FF&millis=500 -- fade to purple over 500ms\n"
 "  /blink1/pattern/play?pattern=3,00ffff,0.2,0,000000,0.2,0 -- blink cyan 3 times\n"
-
+"  /blink1/servertickle?on=1&millis=5000 -- turn servertickle on with 5 sec timer\n"
 "\n"
-
         );
 }
 
@@ -254,7 +255,6 @@ static void ev_handler(struct mg_connection *c, int ev, void *ev_data, void *fn_
     uint16_t millis = 0;
     rgb_t rgb = {0,0,0}; // for parsecolor
     uint8_t count = 0;
-    uint8_t st_on = 0;  // for servertickle
 
     DictionaryCallbacks resultsdictc = DictionaryStandardStringCallbacks();
     DictionaryRef resultsdict = DictionaryCreate( 100, &resultsdictc );
@@ -298,19 +298,7 @@ static void ev_handler(struct mg_connection *c, int ev, void *ev_data, void *fn_
     if( mg_http_get_var(querystr, "pname", tmpstr, sizeof(tmpstr)) > 0 ) {
         strcpy(pnamestr, tmpstr);
     }
-    if( mg_http_get_var(querystr, "on", tmpstr, sizeof(tmpstr)) > 0 ) {
-        st_on = strtod(tmpstr,NULL);
-    }
 
-    // parse URI requests
-    // if( mg_vcmp( uri, "/") == 0 && !serve_index ) {
-    //     sprintf(status, "Welcome to %s api server. "
-    //             "All URIs start with '/blink1'. \nSupported URIs:\n", blink1_server_name);
-    //     for( int i=0; i< sizeof(supported_urls)/sizeof(url_info); i++ ) {
-    //         sprintf(status+strlen(status), " %s - %s\n",
-    //                 supported_urls[i].url, supported_urls[i].desc);
-    //     } // FIXME: result is fixed length
-    // }
     if( mg_vcmp( uri, "/blink1") == 0 ||
              mg_vcmp( uri, "/blink1/") == 0  ) {
         sprintf(status, "blink1 status");
@@ -475,9 +463,12 @@ static void ev_handler(struct mg_connection *c, int ev, void *ev_data, void *fn_
         }
         cache_return(dev);
     }
-    else if( mg_vcmp( uri, "/blink1/servertickle") == 0 ) {
-        sprintf(status, "blink1 servertickle");
+    //else if( mg_http_match_uri(hm, "/blink1/servertickle/*")) { 
+    else if( mg_vcmp( uri, "/blink1/servertickle/on") == 0 ||
+             mg_vcmp( uri, "/blink1/servertickle/off") == 0 ) {
+        bool st_on = (mg_vcmp(uri, "/blink1/servertickle/on") == 0);
         if( millis==0 ) { millis = 2000; }
+        sprintf(status, "blink1 servertickle %s", st_on? "on":"off");
         uint8_t start_pos = 0;
         uint8_t end_pos = 0;
         uint8_t st_off_state = 0;
@@ -528,14 +519,17 @@ static void ev_handler(struct mg_connection *c, int ev, void *ev_data, void *fn_
 
         DictionaryPrintAsJsonMg(c, resultsdict);
 
+        // these aren't in the resultsdict because storing numbers is annoying
         mg_http_printf_chunk(c,
                              "\"millis\": %d,\n"
+                             "\"time\": %g,\n"
                              "\"rgb\": \"%s\",\n"
                              "\"ledn\": %d,\n"
                              "\"bright\": %d,\n"
                              "\"count\": %d,\n"
                              "\"status\":  \"%s\"\n",
                              millis,
+                            (millis/1000.0),
                              tmpstr,
                              ledn,
                              bright,
-- 
GitLab