diff --git a/CLC-qthing/SiliconTorch/FxCyanRGB8.cpp b/CLC-qthing/SiliconTorch/FxCyanRGB8.cpp index 4351d6ba1060908e4e60e87313ea893f7c92d12a..e951d1ebe4f7e73eff3af84751054d6fb71e1cbb 100644 --- a/CLC-qthing/SiliconTorch/FxCyanRGB8.cpp +++ b/CLC-qthing/SiliconTorch/FxCyanRGB8.cpp @@ -11,9 +11,9 @@ // #include "freertos/queue.h" // project specific +#include <Types.hpp> #include "FxVSync.hpp" #include "CyanBus.hpp" -#include "SpiderLib/NumberTypes.hpp" // qthing stuff // #include "" @@ -148,5 +148,31 @@ namespace SiliconTorch { buffer1[px].b = 0; } } + + + str colorOrder2String(ColorOrder co) { + switch (co) { + case ColorOrder::RGB: return "RGB"; + case ColorOrder::RBG: return "RBG"; + case ColorOrder::GRB: return "GRB"; + case ColorOrder::GBR: return "GBR"; + case ColorOrder::BRG: return "BRG"; + case ColorOrder::BGR: return "BGR"; + } + + return "RGB"; + } + + ColorOrder string2ColorOrder(str co) { + if (co.compare("RGB") == 0) return RGB; + else if (co.compare("RBG") == 0) return RBG; + else if (co.compare("GRB") == 0) return GRB; + else if (co.compare("GBR") == 0) return GBR; + else if (co.compare("BRG") == 0) return BRG; + else if (co.compare("BGR") == 0) return BGR; + + return ColorOrder::RGB; + } + } } diff --git a/CLC-qthing/SiliconTorch/FxCyanRGB8.hpp b/CLC-qthing/SiliconTorch/FxCyanRGB8.hpp index 769543bdfc6bd0bcaf8b79d73332af2f7832f556..d38e1c55f2a84e02adcc7d296c226df11c9fe10d 100644 --- a/CLC-qthing/SiliconTorch/FxCyanRGB8.hpp +++ b/CLC-qthing/SiliconTorch/FxCyanRGB8.hpp @@ -10,7 +10,7 @@ // project specific #include "CyanBus.hpp" -#include "SpiderLib/NumberTypes.hpp" +#include "SpiderLib/Types.hpp" // qthing stuff #include <qthing> @@ -27,8 +27,21 @@ namespace SiliconTorch { u8 b; } Pixel; + extern const std::string HEADER; + + enum ColorOrder { + RGB, RBG, + GRB, GBR, + BRG, BGR + }; + + str colorOrder2String(ColorOrder co); + ColorOrder string2ColorOrder(str co); + + + class FxCyanRGB8 : public qthing::Animation<qthing::RGB> { public: FxCyanRGB8(u16 leds, u16 startIdx = 0); diff --git a/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp b/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp index db4cd4b056b6b5e15c164babe7ee065dfcb270cc..2bcf285a4c92365ffa557da67c26858a72ae787f 100644 --- a/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp +++ b/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp @@ -60,8 +60,13 @@ namespace SiliconTorch { if (!info.valid) break; - ESP_LOGI(getName().c_str(), "Configuring: FxCyanRGB8{ info[ %d ] gpio[ %d ] leds[ %d ] startIdx[ %d ] }", idx, info.gpio, info.leds, info.startIdx); - + ESP_LOGI(getName().c_str(), "Configuring: FxCyanRGB8{ info[ %d ] gpio[ %d ] leds[ %d ] startIdx[ %d ] colorOrder[ %s ] }", + idx, + info.gpio, + info.leds, + info.startIdx, + FxCyanRGB8::colorOrder2String(info.colorOrder).c_str() + ); ChannelDriver channel = { .info = info, @@ -109,6 +114,10 @@ namespace SiliconTorch { std::snprintf(tmp, sizeof(tmp), "ch%d_startIdx", channel); ch.startIdx = nvs.getUnsignedInt(getNameSpace(), std::string(tmp), 0); + std::snprintf(tmp, sizeof(tmp), "ch%d_colorOrder", channel); + str _colorOrder = nvs.getString(getNameSpace(), std::string(tmp), "RGB"); + ch.colorOrder = FxCyanRGB8::string2ColorOrder(_colorOrder); + ch.valid = ch.gpio < 0xFF && ch.leds > 0; return ch; diff --git a/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp b/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp index ba69c00a60ee835a1f5c4d5a3702df7cfcfd0e79..c2f6e6fe88b9b62349857a4a6289f0b56ea41bde 100644 --- a/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp +++ b/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp @@ -29,10 +29,11 @@ namespace SiliconTorch { typedef struct { - u8 gpio = 0; - u16 leds = 0; - u16 startIdx = 0; - bool valid = false; + u8 gpio = 0; + u16 leds = 0; + u16 startIdx = 0; + FxCyanRGB8::ColorOrder colorOrder = FxCyanRGB8::ColorOrder::RGB; + bool valid = false; } ChannelInfo;