diff --git a/libsrc/leddevice/LedDeviceAPA102.cpp b/libsrc/leddevice/LedDeviceAPA102.cpp index 2af01acf..26a21f72 100644 --- a/libsrc/leddevice/LedDeviceAPA102.cpp +++ b/libsrc/leddevice/LedDeviceAPA102.cpp @@ -3,6 +3,7 @@ #include #include #include +#include // Linux includes #include @@ -21,14 +22,18 @@ LedDeviceAPA102::LedDeviceAPA102(const std::string& outputDevice, const unsigned int LedDeviceAPA102::write(const std::vector &ledValues) { const unsigned int startFrameSize = 4; - const unsigned int endFrameSize = (ledValues.size() + 63) / 64 * 4; + const unsigned int endFrameSize = std::max(((ledValues.size() + 15) / 16), 4); const unsigned int mLedCount = (ledValues.size() * 4) + startFrameSize + endFrameSize; if(_ledBuffer.size() != mLedCount){ - _ledBuffer.resize(mLedCount, 0x00); + _ledBuffer.resize(mLedCount, 0xFF); + _ledBuffer[0] = 0x00; + _ledBuffer[1] = 0x00; + _ledBuffer[2] = 0x00; + _ledBuffer[3] = 0x00; } - + for (unsigned iLed=1; iLed<=ledValues.size(); ++iLed) { - const ColorRgb& rgb = ledValues[iLed]; + const ColorRgb& rgb = ledValues[iLed-1]; _ledBuffer[iLed*4] = 0xFF; _ledBuffer[iLed*4+1] = rgb.red; _ledBuffer[iLed*4+2] = rgb.green; diff --git a/libsrc/leddevice/LedDeviceAdalightApa102.cpp b/libsrc/leddevice/LedDeviceAdalightApa102.cpp index 172e76de..07732080 100644 --- a/libsrc/leddevice/LedDeviceAdalightApa102.cpp +++ b/libsrc/leddevice/LedDeviceAdalightApa102.cpp @@ -3,6 +3,7 @@ #include #include #include +#include // Linux includes #include @@ -23,10 +24,10 @@ LedDeviceAdalightApa102::LedDeviceAdalightApa102(const std::string& outputDevice int LedDeviceAdalightApa102::write(const std::vector & ledValues) { const unsigned int startFrameSize = 4; - const unsigned int endFrameSize = (ledValues.size() + 63) / 64 * 4; + const unsigned int endFrameSize = std::max(((ledValues.size() + 15) / 16), 4); const unsigned int mLedCount = (ledValues.size() * 4) + startFrameSize + endFrameSize; if(_ledBuffer.size() != mLedCount){ - _ledBuffer.resize(mLedCount, 0x00); + _ledBuffer.resize(mLedCount, 0xFF); _ledBuffer[0] = 'A'; _ledBuffer[1] = 'd'; _ledBuffer[2] = 'a'; @@ -36,7 +37,7 @@ int LedDeviceAdalightApa102::write(const std::vector & ledValues) } for (unsigned iLed=1; iLed<=ledValues.size(); iLed++) { - const ColorRgb& rgb = ledValues[iLed]; + const ColorRgb& rgb = ledValues[iLed-1]; _ledBuffer[iLed*4+6] = 0xFF; _ledBuffer[iLed*4+1+6] = rgb.red; _ledBuffer[iLed*4+2+6] = rgb.green;