From 6b1cf112d3c45e3ff4b5f07ac7a6c823d3c56339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Kov=C3=A1cs?= Date: Sun, 8 Oct 2017 20:34:56 +0100 Subject: [PATCH] Make BrighntessBus suppport ClearTo (#181) * Make BrighntessBus suppport ClearTo * Match the coding style --- src/NeoPixelBrightnessBus.h | 69 ++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/src/NeoPixelBrightnessBus.h b/src/NeoPixelBrightnessBus.h index 2a86ee9..a48d1f5 100644 --- a/src/NeoPixelBrightnessBus.h +++ b/src/NeoPixelBrightnessBus.h @@ -31,6 +31,37 @@ License along with NeoPixel. If not, see template class NeoPixelBrightnessBus : public NeoPixelBus { +private: + void ConvertColor(typename T_COLOR_FEATURE::ColorObject* color) + { + if (_brightness) + { + uint8_t* ptr = (uint8_t*) color; + uint8_t* ptrEnd = ptr + T_COLOR_FEATURE::PixelSize; + + while (ptr != ptrEnd) + { + uint16_t value = *ptr; + *ptr++ = (value * _brightness) >> 8; + } + } + } + + void RecoverColor(typename T_COLOR_FEATURE::ColorObject* color) + { + if (_brightness) + { + uint8_t* ptr = (uint8_t*) color; + uint8_t* ptrEnd = ptr + T_COLOR_FEATURE::PixelSize; + + while (ptr != ptrEnd) + { + uint16_t value = *ptr; + *ptr++ = (value << 8) / _brightness; + } + } + } + public: NeoPixelBrightnessBus(uint16_t countPixels, uint8_t pin) : NeoPixelBus(countPixels, pin), @@ -99,38 +130,30 @@ public: void SetPixelColor(uint16_t indexPixel, typename T_COLOR_FEATURE::ColorObject color) { - if (_brightness) - { - uint8_t* ptr = (uint8_t*)&color; - uint8_t* ptrEnd = ptr + T_COLOR_FEATURE::PixelSize; - - while (ptr != ptrEnd) - { - uint16_t value = *ptr; - *ptr++ = (value * _brightness) >> 8; - } - } + ConvertColor(&color); NeoPixelBus::SetPixelColor(indexPixel, color); } typename T_COLOR_FEATURE::ColorObject GetPixelColor(uint16_t indexPixel) const { typename T_COLOR_FEATURE::ColorObject color = NeoPixelBus::GetPixelColor(indexPixel); - - if (_brightness) - { - uint8_t* ptr = (uint8_t*)&color; - uint8_t* ptrEnd = ptr + T_COLOR_FEATURE::PixelSize; - - while (ptr != ptrEnd) - { - uint16_t value = *ptr; - *ptr++ = (value << 8) / _brightness; - } - } + RecoverColor(&color); return color; } + void ClearTo(typename T_COLOR_FEATURE::ColorObject color) + { + ConvertColor(&color); + NeoPixelBus::ClearTo(color); + }; + + void ClearTo(typename T_COLOR_FEATURE::ColorObject color, uint16_t first, uint16_t last) + { + ConvertColor(&color); + NeoPixelBus::ClearTo(color, first, last); + } + + protected: uint8_t _brightness; };