Do not limit priorities for Boblight (#1269) (#1298)

* Do not limit priorities for Boblight (#1269)

* Boblight - Allow to exclude component from build

* Fix merge

* Amlogic - Correct Pixelformat reference

* Remove "wrong" Amlogic ifdef, which was not working before
This commit is contained in:
LordGrey
2021-09-15 10:32:19 +02:00
committed by GitHub
parent 8a785e70c8
commit da49f25b4e
14 changed files with 273 additions and 226 deletions

View File

@@ -21,11 +21,19 @@
#include "HyperionConfig.h"
#include <hyperion/Hyperion.h>
#include <utils/QStringUtils.h>
#include <hyperion/PriorityMuxer.h>
// project includes
#include "BoblightClientConnection.h"
BoblightClientConnection::BoblightClientConnection(Hyperion* hyperion, QTcpSocket *socket, int priority)
// Constants
namespace {
const int BOBLIGHT_DEFAULT_PRIORITY = 128;
const int BOBLIGHT_MIN_PRIORITY = PriorityMuxer::FG_PRIORITY+1;
const int BOBLIGHT_MAX_PRIORITY = PriorityMuxer::BG_PRIORITY-1;
} //End of constants
BoblightClientConnection::BoblightClientConnection(Hyperion* hyperion, QTcpSocket* socket, int priority)
: QObject()
, _locale(QLocale::C)
, _socket(socket)
@@ -47,8 +55,8 @@ BoblightClientConnection::BoblightClientConnection(Hyperion* hyperion, QTcpSocke
BoblightClientConnection::~BoblightClientConnection()
{
// clear the current channel
if (_priority != 0 && _priority >= 128 && _priority < 254)
// clear the current channel
if (_priority != 0 && _priority >= BOBLIGHT_MIN_PRIORITY && _priority <= BOBLIGHT_MAX_PRIORITY)
_hyperion->clear(_priority);
delete _socket;
@@ -59,7 +67,7 @@ void BoblightClientConnection::readData()
_receiveBuffer.append(_socket->readAll());
int bytes = _receiveBuffer.indexOf('\n') + 1;
while(bytes > 0)
while (bytes > 0)
{
// create message string (strip the newline)
const QString message = readMessage(_receiveBuffer.data(), bytes);
@@ -71,7 +79,7 @@ void BoblightClientConnection::readData()
_receiveBuffer.remove(0, bytes);
// drop messages if the buffer is too full
if (_receiveBuffer.size() > 100*1024)
if (_receiveBuffer.size() > 100 * 1024)
{
Debug(_log, "server drops messages (buffer full)");
_receiveBuffer.clear();
@@ -82,9 +90,9 @@ void BoblightClientConnection::readData()
}
}
QString BoblightClientConnection::readMessage(const char *data, const size_t size) const
QString BoblightClientConnection::readMessage(const char* data, const size_t size) const
{
char *end = (char *)data + size - 1;
char* end = (char*)data + size - 1;
// Trim left
while (data < end && std::isspace(*data))
@@ -100,7 +108,7 @@ QString BoblightClientConnection::readMessage(const char *data, const size_t siz
// create message string (strip the newline)
const int len = end - data + 1;
const QString message = QString::fromLatin1(data, len);
const QString message = QString::fromLatin1(data, len);
//std::cout << bytes << ": \"" << message.toUtf8().constData() << "\"" << std::endl;
@@ -109,15 +117,15 @@ QString BoblightClientConnection::readMessage(const char *data, const size_t siz
void BoblightClientConnection::socketClosed()
{
// clear the current channel
if (_priority >= 128 && _priority < 254)
// clear the current channel
if (_priority >= BOBLIGHT_MIN_PRIORITY && _priority <= BOBLIGHT_MAX_PRIORITY)
_hyperion->clear(_priority);
emit connectionClosed(this);
}
void BoblightClientConnection::handleMessage(const QString & message)
void BoblightClientConnection::handleMessage(const QString& message)
{
//std::cout << "boblight message: " << message.toStdString() << std::endl;
const QVector<QStringRef> messageParts = QStringUtils::splitRef(message, ' ', QStringUtils::SplitBehavior::SkipEmptyParts);
@@ -166,16 +174,16 @@ void BoblightClientConnection::handleMessage(const QString & message)
if (rc1 && rc2 && rc3)
{
ColorRgb & rgb = _ledColors[ledIndex];
ColorRgb& rgb = _ledColors[ledIndex];
rgb.red = red;
rgb.green = green;
rgb.blue = blue;
if (_priority == 0 || _priority < 128 || _priority >= 254)
if (_priority == 0 || _priority < BOBLIGHT_MIN_PRIORITY || _priority > BOBLIGHT_MAX_PRIORITY)
return;
// send current color values to hyperion if this is the last led assuming leds values are send in order of id
if (ledIndex == _ledColors.size() -1)
if (ledIndex == _ledColors.size() - 1)
{
_hyperion->setInput(_priority, _ledColors);
}
@@ -183,10 +191,10 @@ void BoblightClientConnection::handleMessage(const QString & message)
return;
}
}
else if(messageParts[3] == "speed" ||
messageParts[3] == "interpolation" ||
messageParts[3] == "use" ||
messageParts[3] == "singlechange")
else if (messageParts[3] == "speed" ||
messageParts[3] == "interpolation" ||
messageParts[3] == "use" ||
messageParts[3] == "singlechange")
{
// these message are ignored by Hyperion
return;
@@ -202,16 +210,17 @@ void BoblightClientConnection::handleMessage(const QString & message)
if (_priority != 0 && _hyperion->getPriorityInfo(_priority).componentId == hyperion::COMP_BOBLIGHTSERVER)
_hyperion->clear(_priority);
if (prio < 128 || prio >= 254)
if (prio < BOBLIGHT_MIN_PRIORITY || prio > BOBLIGHT_MAX_PRIORITY)
{
_priority = 128;
_priority = BOBLIGHT_DEFAULT_PRIORITY;
while (_hyperion->getActivePriorities().contains(_priority))
{
_priority += 1;
}
// warn against invalid priority
Warning(_log, "The priority %i is not in the priority range between 128 and 253. Priority %i is used instead.", prio, _priority);
Warning(_log, "The priority %i is not in the priority range of [%d-%d]. Priority %i is used instead.",
prio, BOBLIGHT_MIN_PRIORITY, BOBLIGHT_MAX_PRIORITY, _priority);
// register new priority (previously modified)
_hyperion->registerInput(_priority, hyperion::COMP_BOBLIGHTSERVER, QString("Boblight@%1").arg(_socket->peerAddress().toString()));
}
@@ -228,7 +237,7 @@ void BoblightClientConnection::handleMessage(const QString & message)
}
else if (messageParts[0] == "sync")
{
if ( _priority >= 128 && _priority < 254)
if (_priority >= BOBLIGHT_MIN_PRIORITY && _priority <= BOBLIGHT_MAX_PRIORITY)
_hyperion->setInput(_priority, _ledColors); // send current color values to hyperion
return;
@@ -248,9 +257,9 @@ const float ipows[] = {
1.0f / 100000.0f,
1.0f / 1000000.0f,
1.0f / 10000000.0f,
1.0f / 100000000.0f};
1.0f / 100000000.0f };
float BoblightClientConnection::parseFloat(const QStringRef& s, bool *ok) const
float BoblightClientConnection::parseFloat(const QStringRef& s, bool* ok) const
{
// We parse radix 10
const char MIN_DIGIT = '0';
@@ -331,7 +340,7 @@ float BoblightClientConnection::parseFloat(const QStringRef& s, bool *ok) const
return f;
}
unsigned BoblightClientConnection::parseUInt(const QStringRef& s, bool *ok) const
unsigned BoblightClientConnection::parseUInt(const QStringRef& s, bool* ok) const
{
// We parse radix 10
const char MIN_DIGIT = '0';
@@ -363,7 +372,7 @@ unsigned BoblightClientConnection::parseUInt(const QStringRef& s, bool *ok) cons
return n;
}
uint8_t BoblightClientConnection::parseByte(const QStringRef& s, bool *ok) const
uint8_t BoblightClientConnection::parseByte(const QStringRef& s, bool* ok) const
{
const int LO = 0;
const int HI = 255;
@@ -389,7 +398,7 @@ void BoblightClientConnection::sendLightMessage()
for (int i = 0; i < _hyperion->getLedCount(); ++i)
{
_imageProcessor->getScanParameters(i, h0, h1, v0, v1);
n = snprintf(buffer, sizeof(buffer), "light %03d scan %f %f %f %f\n", i, 100*v0, 100*v1, 100*h0, 100*h1);
n = snprintf(buffer, sizeof(buffer), "light %03d scan %f %f %f %f\n", i, 100 * v0, 100 * v1, 100 * h0, 100 * h1);
sendMessage(QByteArray(buffer, n));
}
}