11#include < led-drivers/spi/DriverSpiSk6812SPI.h>
22#include < infinite-color-engine/ColorSpace.h>
33
4+ namespace {
5+ constexpr int SPI_FRAME_END_LATCH_BYTES = 150 ;
6+ }
7+
48DriverSpiSk6812SPI::DriverSpiSk6812SPI (const QJsonObject& deviceConfig)
59 : ProviderSpi(deviceConfig)
610 , _whiteAlgorithm(RGBW::WhiteAlgorithm::HYPERSERIAL_COLD_WHITE)
@@ -23,7 +27,7 @@ DriverSpiSk6812SPI::DriverSpiSk6812SPI(const QJsonObject& deviceConfig)
2327
2428bool DriverSpiSk6812SPI::init (QJsonObject deviceConfig)
2529{
26- deviceConfig[" rate" ] = 3000000 ;
30+ deviceConfig[" rate" ] = 3200000 ;
2731
2832 bool isInitOK = false ;
2933
@@ -71,10 +75,9 @@ bool DriverSpiSk6812SPI::init(QJsonObject deviceConfig)
7175
7276 auto rateHz = getRate ();
7377
74- WarningIf ((rateHz < 2050000 || rateHz > 4000000 ), _log, " SPI rate {:d} outside recommended range (2050000 -> 4000000 )" , rateHz);
78+ WarningIf ((rateHz < 3100000 || rateHz > 3300000 ), _log, " SPI rate {:d} outside recommended range (3200000 )" , rateHz);
7579
76- const int SPI_FRAME_END_LATCH_BYTES = 3 ;
77- _ledBuffer.resize (_ledRGBWCount * SPI_BYTES_PER_COLOUR + SPI_FRAME_END_LATCH_BYTES, 0x00 );
80+ _ledBuffer.assign (_ledRGBWCount * SPI_BYTES_PER_COLOUR + SPI_FRAME_END_LATCH_BYTES, 0x00 );
7881
7982 isInitOK = true ;
8083 }
@@ -92,9 +95,7 @@ int DriverSpiSk6812SPI::writeFiniteColors(const std::vector<ColorRgb>& ledValues
9295 Warning (_log, " Sk6812SPI led's number has changed (old: {:d}, new: {:d}). Rebuilding buffer." , _ledCount, ledValues.size ());
9396 _ledCount = static_cast <uint>(ledValues.size ());
9497
95- const int SPI_FRAME_END_LATCH_BYTES = 3 ;
96- _ledBuffer.resize (0 , 0x00 );
97- _ledBuffer.resize (_ledRGBWCount * SPI_BYTES_PER_COLOUR + SPI_FRAME_END_LATCH_BYTES, 0x00 );
98+ _ledBuffer.assign (SPI_BYTES_PER_LED * _ledCount + SPI_FRAME_END_LATCH_BYTES, 0x00 );
9899 }
99100
100101 for (const ColorRgb& color : ledValues)
@@ -138,9 +139,7 @@ std::pair<bool, int> DriverSpiSk6812SPI::writeInfiniteColors(SharedOutputColors
138139 Warning (_log, " Sk6812SPI led's number has changed (old: {:d}, new: {:d}). Rebuilding buffer." , _ledCount, nonlinearRgbColors->size ());
139140 _ledCount = static_cast <uint>(nonlinearRgbColors->size ());
140141
141- const int SPI_FRAME_END_LATCH_BYTES = 3 ;
142- _ledBuffer.resize (0 , 0x00 );
143- _ledBuffer.resize (_ledRGBWCount * SPI_BYTES_PER_COLOUR + SPI_FRAME_END_LATCH_BYTES, 0x00 );
142+ _ledBuffer.assign (SPI_BYTES_PER_LED * _ledCount + SPI_FRAME_END_LATCH_BYTES, 0x00 );
144143 }
145144
146145 // //////////////////////////////////////////////////////////////////////////
0 commit comments