diff espNode/desk/src/main.cpp @ 783:e4cf795d3677

support download/set/delete, but somehow enroll has broken
author drewp@bigasterisk.com
date Wed, 26 Aug 2020 03:06:07 -0700
parents 6c42c1f64f00
children 3ff074ba25f1
line wrap: on
line diff
--- a/espNode/desk/src/main.cpp	Mon Aug 24 01:35:28 2020 -0700
+++ b/espNode/desk/src/main.cpp	Wed Aug 26 03:06:07 2020 -0700
@@ -1,5 +1,7 @@
 #include <Arduino.h>
 
+#include <string>
+
 #include "display.h"
 #include "fingerprint.h"
 #include "mqtt.h"
@@ -23,20 +25,47 @@
   mqtt::Setup();
 }
 
+namespace {
+uint16_t LastComponentNumber(const std::string &s) {
+  return atoi(s.substr(s.rfind("/") + 1).c_str());
+}
+}  // namespace
+
 void loop() {
   Serial.println("--loop--");
+
   fingerprint::ExecuteAnyQueued();
+
   fingerprint::ScanLoop();
-  if (mqtt::HasPendingCommand()) {
-    std::string cmd = mqtt::PopPendingCommand();
-    if (cmd == "enroll") {
-      fingerprint::Enroll();
-    } else if (cmd == "show_success") {
-      fingerprint::BlinkSuccess();
-      while (!mqtt::HasPendingCommand()) yield();
-      cmd = mqtt::PopPendingCommand();
-      // hope it's "clear_success", but who cares
-      fingerprint::BlinkClearSuccess();
+
+  if (mqtt::HasPendingMessage()) {
+    std::pair<std::string, std::vector<byte>> msg = mqtt::PopPendingMessage();
+    const std::string &topic = msg.first;
+    const std::vector<byte> &payload = msg.second;
+    const std::string payload_string(payload.begin(), payload.end());
+
+    if (topic == "fingerprint/command") {
+      if (payload_string == "enroll") {
+        fingerprint::Enroll();
+      } else if (payload_string == "show_success") {
+        fingerprint::BlinkSuccess();
+        while (!mqtt::HasPendingMessage()) yield();
+        mqtt::PopPendingMessage();
+        // hope it's "clear_success", but who cares
+        fingerprint::BlinkClearSuccess();
+      } else if (payload_string == "delete_all") {
+        fingerprint::DeleteAll();
+      } else if (payload_string.rfind("delete/model/", 0) == 0) {
+        uint16_t fid = LastComponentNumber(payload_string);
+        fingerprint::DeleteModel(fid);
+      } else if (payload_string.rfind("download/model/", 0) == 0) {
+        uint16_t fid = LastComponentNumber(payload_string);
+        fingerprint::DownloadModel(fid);
+      }
+    } else if (topic.rfind("fingerprint/set/model/", 0) == 0) {
+      uint16_t fid = LastComponentNumber(topic);
+
+      fingerprint::SetModel(fid, payload);
     }
   }
 }