diff --git a/CLC-qthing/SiliconTorch/CyanBus.cpp b/CLC-qthing/SiliconTorch/CyanBus.cpp index dd8162ac978d4dd209b0d05203d465d06b9afcad..3da1109243394683118972716875715e50d26327 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 ad1e9f8018c4270751af0fabf55f85cbf59e5004..a0e8232ef2c80043f6804c2abae7b247aeecc0db 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 ddcb538982aa2b4ab73eb8ca624f205353a9ff71..ab5ddbd1fadbb3136b9a064affebda8baf277df0 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 bdfacc15156e536225ff1f8755b4a119ac1ebcfc..f54126d65f3a1836c1e1602328652db28b5e39a7 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 ✅ / ⌠??