From 932bd2c555be629de45f67288fae5907d84f6e63 Mon Sep 17 00:00:00 2001
From: Jochen Vothknecht <jochen3120@gmail.com>
Date: Tue, 26 Apr 2022 00:16:33 +0200
Subject: [PATCH] Incorporating CallbackMap

---
 CLC-qthing/SiliconTorch/CyanBus.cpp  |  4 +++-
 CLC-qthing/SiliconTorch/CyanBus.hpp  |  8 +++-----
 CLC-qthing/SpiderLib/CallbackMap.hpp |  3 ++-
 CLC-qthing/device_main.cpp           | 23 +++++------------------
 4 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/CLC-qthing/SiliconTorch/CyanBus.cpp b/CLC-qthing/SiliconTorch/CyanBus.cpp
index dd8162a..3da1109 100644
--- a/CLC-qthing/SiliconTorch/CyanBus.cpp
+++ b/CLC-qthing/SiliconTorch/CyanBus.cpp
@@ -17,6 +17,8 @@
 // project specific
 #include "CyanBusCRC.hpp"
 #include "LambdaTask.hpp"
+#include "SpiderLib/Callback.hpp"
+#include "SpiderLib/CallbackMap.hpp"
 
 // qthing stuff
 // #include ""
@@ -284,7 +286,7 @@ namespace SiliconTorch {
             .payloadLEN = payloadLEN
           };
 
-          if (crcOK) packetCallback(packet);
+          if (crcOK) packetCallback(buffer+2, payloadLEN, packet);
           metricsCallback(metrics);
         }
       }
diff --git a/CLC-qthing/SiliconTorch/CyanBus.hpp b/CLC-qthing/SiliconTorch/CyanBus.hpp
index ad1e9f8..a0e8232 100644
--- a/CLC-qthing/SiliconTorch/CyanBus.hpp
+++ b/CLC-qthing/SiliconTorch/CyanBus.hpp
@@ -10,8 +10,9 @@
 #include "freertos/queue.h"
 
 // project specific
-#include "SpiderLib/Callback.hpp"
 #include "LambdaTask.hpp"
+#include "SpiderLib/Callback.hpp"
+#include "SpiderLib/CallbackMap.hpp"
 
 
 namespace SiliconTorch {
@@ -44,12 +45,9 @@ namespace SiliconTorch {
         uint32_t getBaudRate();
         void setBaudRate(uint32_t baudRate);
 
-        const SpiderLib::Callback<void(const PacketData&)>    packetCallback;
+        const SpiderLib::CallbackMap<void(const PacketData&)> packetCallback;
         const SpiderLib::Callback<void(const PacketMetrics&)> metricsCallback;
 
-        // void registerMetricsCallback(MetricsCallback callback);
-        // void registerPacketCallback(std::string& magicString, PacketCallback callback);
-
       private:
 
         QueueHandle_t uartEvQ;
diff --git a/CLC-qthing/SpiderLib/CallbackMap.hpp b/CLC-qthing/SpiderLib/CallbackMap.hpp
index ddcb538..ab5ddbd 100644
--- a/CLC-qthing/SpiderLib/CallbackMap.hpp
+++ b/CLC-qthing/SpiderLib/CallbackMap.hpp
@@ -31,11 +31,12 @@ namespace SpiderLib {
 
       CallbackMap(uint32_t maxPrefixLength = 16) : maxPrefixLength(maxPrefixLength) {};
 
+      // Doesn't work with zero-length prefixes (callback won't be called but no error occurs)
       void operator()(const uint8_t* const buffer, uint32_t length, Args&&... args) const {
 
         uint32_t _len = std::min(maxPrefixLength, length);
 
-        char* _prefix[_len + 1];
+        char _prefix[_len + 1];
         _prefix[_len] = 0x00;
         std::memcpy(_prefix, buffer, _len);
         std::string prefix(_prefix);
diff --git a/CLC-qthing/device_main.cpp b/CLC-qthing/device_main.cpp
index bdfacc1..f54126d 100644
--- a/CLC-qthing/device_main.cpp
+++ b/CLC-qthing/device_main.cpp
@@ -14,7 +14,7 @@
 #include <cstdlib>
 //#include "SpiderLib/SNTP.hpp"
 // #include "SpiderLib/Util.hpp"
-#include "SiliconTorch/CyanBusCRC.hpp"
+
 #include "SiliconTorch/CyanBus.hpp"
 
 
@@ -26,7 +26,7 @@
 // ###     END LIBS     ###
 
 
-#include "SpiderLib/CallbackMap.hpp"
+
 
 
 SiliconTorch::CyanBus::CyanBus* cyanBus = NULL;
@@ -46,19 +46,6 @@ void device_main() {
 
 
 
-  SpiderLib::CallbackMap<void(const int)> cbM;
-
-  std::string magic0("a");
-  cbM.add(magic0, [](const int x){ ESP_LOGE("_a_", "Got int[ %d ]", x); });
-
-
-
-
-
-
-
-
-
 
 
   cyanBus = new SiliconTorch::CyanBus::CyanBus(13, 14, 12, 15, 2000000);  // Pinout of CyanStripe
@@ -77,10 +64,10 @@ void device_main() {
 
 
 
-
-  cyanBus->packetCallback += [](const SiliconTorch::CyanBus::PacketData& data) {
+  std::string magic("fx");
+  cyanBus->packetCallback.add(magic, [](const SiliconTorch::CyanBus::PacketData& data) {
     ESP_LOGW("PacketDataTestCallback", "|buffer|[ %d ]   buffer[ %s ]", data.length, data.buffer);
-  };
+  });
 
   cyanBus->metricsCallback += [](const SiliconTorch::CyanBus::PacketMetrics& metrics) {
     ESP_LOGW("PacketMetricsTestCallback", "|buffer|[ %d ]   crc⏻[ %s ]", metrics.payloadLEN, metrics.crcOK ? "✔" : "✘");  // TODO: better use ✅ / ❌  ??
-- 
GitLab