Mercurial > code > home > repos > homeauto
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); } } }