diff --git a/README.md b/README.md index cedac7c..cbb2592 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ To run the grabber, set the following environment variables and then execute the export HYPERION_GRABBER_WLED_ADDRESS="" # UDP port of your WLED device for Realtime data (default: 21324) export HYPERION_GRABBER_WLED_PORT="21324" +# Color order of your WLED device (e.g., RGB, GRB, BGR) (default: GRB) +export HYPERION_GRABBER_WLED_COLOR_ORDER="GRB" # --- Grabber Settings --- # Divisor used to scale your screen resolution (e.g., 8) diff --git a/wledclient.cpp b/wledclient.cpp index 01eeb25..e11b309 100644 --- a/wledclient.cpp +++ b/wledclient.cpp @@ -28,6 +28,23 @@ WledClient::~WledClient() qDebug() << "WledClient destroyed."; } +void WledClient::appendColor(QByteArray &datagram, const QColor &color) +{ + if (_colorOrder == "GRB") { + datagram.append(color.green()); + datagram.append(color.red()); + datagram.append(color.blue()); + } else if (_colorOrder == "BGR") { + datagram.append(color.blue()); + datagram.append(color.green()); + datagram.append(color.red()); + } else { // Default to RGB + datagram.append(color.red()); + datagram.append(color.green()); + datagram.append(color.blue()); + } +} + void WledClient::sendImage(const QImage &image) { if (image.isNull()) { @@ -67,10 +84,7 @@ void WledClient::sendImage(const QImage &image) int y = pixelIndex / rgbImage.width(); QRgb pixel = rgbImage.pixel(x, y); - // Swap R and G for GRB order - datagram.append(qRed(pixel)); - datagram.append(qGreen(pixel)); - datagram.append(qBlue(pixel)); + appendColor(datagram, QColor(pixel)); } qint64 bytesSent = _udpSocket->writeDatagram(datagram, _wledHost, _wledPort); @@ -114,10 +128,7 @@ void WledClient::setLedsColor(const QVector &colors, int timeout) for (int j = 0; j < currentLedsInPacket; ++j) { const QColor &color = colors.at(i + j); - // Swap R and G for GRB order - datagram.append(color.red()); - datagram.append(color.green()); - datagram.append(color.blue()); + appendColor(datagram, color); } qint64 bytesSent = _udpSocket->writeDatagram(datagram, _wledHost, _wledPort); @@ -159,10 +170,7 @@ void WledClient::flashLeds(int startIndex, int count, QColor color) int currentLedsInPacket = qMin(ledsPerPacket, count - i); for (int j = 0; j < currentLedsInPacket; ++j) { - // Swap R and G for GRB order - datagram.append(color.red()); - datagram.append(color.green()); - datagram.append(color.blue()); + appendColor(datagram, color); } qDebug() << "WledClient: Sending flashLeds datagram (hex):" << datagram.toHex(); diff --git a/wledclient.h b/wledclient.h index 85ea55f..00ef16d 100644 --- a/wledclient.h +++ b/wledclient.h @@ -19,6 +19,8 @@ public: void flashLeds(int startIndex, int count, QColor color); private: + void appendColor(QByteArray &datagram, const QColor &color); + QUdpSocket *_udpSocket; QHostAddress _wledHost; ushort _wledPort;