Introduced virtual interface to try out all methods at runtime

This commit is contained in:
2021-03-22 14:23:34 +01:00
parent 47c3bd30c0
commit 8c01d045de
2 changed files with 30 additions and 15 deletions

View File

@@ -28,11 +28,18 @@ License along with NeoPixel. If not, see
#include "NeoPixelBus.h" #include "NeoPixelBus.h"
class NeoPixelBrightnessBusInterface
{
public:
virtual ~NeoPixelBrightnessBusInterface() = default;
virtual void SetBrightness(uint8_t brightness) = 0;
};
template<typename T_COLOR_FEATURE, typename T_METHOD> class NeoPixelBrightnessBus : template<typename T_COLOR_FEATURE, typename T_METHOD> class NeoPixelBrightnessBus :
public NeoPixelBus<T_COLOR_FEATURE, T_METHOD> public NeoPixelBus<T_COLOR_FEATURE, T_METHOD>, public NeoPixelBrightnessBusInterface
{ {
private: private:
void ScaleColor(uint16_t scale, typename T_COLOR_FEATURE::ColorObject* color) void ScaleColor(uint16_t scale, typename T_COLOR_FEATURE::ColorObject* color)
{ {
uint8_t* ptr = (uint8_t*)color; uint8_t* ptr = (uint8_t*)color;
@@ -83,7 +90,7 @@ public:
{ {
} }
void SetBrightness(uint8_t brightness) void SetBrightness(uint8_t brightness) override
{ {
// Only update if there is a change // Only update if there is a change
if (brightness != _brightness) if (brightness != _brightness)
@@ -109,13 +116,13 @@ public:
return _brightness; return _brightness;
} }
void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) override
{ {
ConvertColor(&color); ConvertColor(&color);
NeoPixelBus<T_COLOR_FEATURE, T_METHOD>::SetPixelColor(indexPixel, color); NeoPixelBus<T_COLOR_FEATURE, T_METHOD>::SetPixelColor(indexPixel, color);
} }
typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const override
{ {
typename T_COLOR_FEATURE::ColorObject color = NeoPixelBus<T_COLOR_FEATURE, T_METHOD>::GetPixelColor(indexPixel); typename T_COLOR_FEATURE::ColorObject color = NeoPixelBus<T_COLOR_FEATURE, T_METHOD>::GetPixelColor(indexPixel);
RecoverColor(&color); RecoverColor(&color);

View File

@@ -110,10 +110,20 @@ License along with NeoPixel. If not, see
#error "Platform Currently Not Supported, please add an Issue at Github/Makuna/NeoPixelBus" #error "Platform Currently Not Supported, please add an Issue at Github/Makuna/NeoPixelBus"
#endif #endif
template<typename T_COLOR_FEATURE>
class NeoPixelBusInterface
{
public:
virtual ~NeoPixelBusInterface() = default;
virtual void Begin() = 0;
virtual void Show(bool maintainBufferConsistency = true) = 0;
virtual bool CanShow() const = 0;
virtual void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) = 0;
virtual typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const = 0;
};
template<typename T_COLOR_FEATURE, typename T_METHOD> class NeoPixelBus : public NeoPixelBusInterface<T_COLOR_FEATURE>
template<typename T_COLOR_FEATURE, typename T_METHOD> class NeoPixelBus
{ {
public: public:
// Constructor: number of LEDs, pin number // Constructor: number of LEDs, pin number
@@ -140,9 +150,7 @@ public:
{ {
} }
~NeoPixelBus() ~NeoPixelBus() override = default;
{
}
operator NeoBufferContext<T_COLOR_FEATURE>() operator NeoBufferContext<T_COLOR_FEATURE>()
{ {
@@ -150,7 +158,7 @@ public:
return NeoBufferContext<T_COLOR_FEATURE>(_pixels(), PixelsSize()); return NeoBufferContext<T_COLOR_FEATURE>(_pixels(), PixelsSize());
} }
void Begin() void Begin() override
{ {
_method.Initialize(); _method.Initialize();
Dirty(); Dirty();
@@ -163,7 +171,7 @@ public:
Dirty(); Dirty();
} }
void Show(bool maintainBufferConsistency = true) void Show(bool maintainBufferConsistency = true) override
{ {
if (!IsDirty()) if (!IsDirty())
{ {
@@ -175,7 +183,7 @@ public:
ResetDirty(); ResetDirty();
} }
inline bool CanShow() const inline bool CanShow() const override
{ {
return _method.IsReadyToUpdate(); return _method.IsReadyToUpdate();
}; };
@@ -215,7 +223,7 @@ public:
return _countPixels; return _countPixels;
}; };
void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) override
{ {
if (indexPixel < _countPixels) if (indexPixel < _countPixels)
{ {
@@ -224,7 +232,7 @@ public:
} }
}; };
typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const override
{ {
if (indexPixel < _countPixels) if (indexPixel < _countPixels)
{ {