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