Add functions / arguments to adjust LED's

This commit is contained in:
kevin 2019-06-23 12:36:27 -04:00
parent 02fc46794f
commit d39d4a687c
6 changed files with 239 additions and 25 deletions

View File

@ -4,7 +4,7 @@ project(Hyperion_Grabber_X11_QT VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_BUILD_TYPE Debug) set(CMAKE_BUILD_TYPE Desktop)
find_package(Qt5Core REQUIRED) find_package(Qt5Core REQUIRED)
find_package(Qt5Network REQUIRED) find_package(Qt5Network REQUIRED)

View File

@ -2,13 +2,35 @@
// public // public
hgx11::hgx11(QString addr, QString port, QString scale, QString frameskip, QString inactiveTime) hgx11::hgx11(QHash<QString, QString> opts)
{ {
_addr_m = (addr.isEmpty() || addr.isNull()) ? "localhost" : addr; QHashIterator<QString, QString> i(opts);
_port_m = (port.toInt() > 65535 || port.toInt() < 1) ? "19444" : port; while (i.hasNext()) {
_scale_m = (scale.toInt() < 1 || scale.toInt() > 1000) ? "4" : scale; i.next();
_frameskip_m = (frameskip.toInt() > 0 && frameskip.toInt() < 256) ? frameskip : "0"; if ((i.key() == "a" || i.key() == "address") && !(i.value().isNull() && i.value().isEmpty())) {
_inactiveTime_m = (inactiveTime.toInt() > 0 ? QString::number(inactiveTime.toInt() * 1000) : "0"); _addr_m = i.value();
} else if ((i.key() == "p" || i.key() == "port") && (i.value().toInt() > 0 && i.value().toInt() < 65536)) {
_port_m = i.value();
} else if ((i.key() == "s" || i.key() == "scale") && (i.value().toInt() > 0 && i.value().toInt() < 1001)) {
_scale_m = i.value();
} else if ((i.key() == "f" || i.key() == "frameskip") && (i.value().toInt() > 0 && i.value().toInt() < 256)) {
_frameskip_m = i.value();
} else if ((i.key() == "i" || i.key() == "inactive") && (i.value().toInt() > 0)) {
_inactiveTime_m = QString::number(i.value().toInt() * 1000);
} else if (i.key() == "r" || i.key() == "redadjust") {
_redAdjust_m = _parseColorArr(i.value(), 1);
} else if (i.key() == "g" || i.key() == "greenadjust") {
_greenAdjust_m = _parseColorArr(i.value(), 1);
} else if (i.key() == "b" || i.key() == "blueadjust") {
_blueAdjust_m = _parseColorArr(i.value(), 1);
} else if (i.key() == "t" || i.key() == "temperature") {
_temperature_m = _parseColorArr(i.value(), 1);
} else if (i.key() == "d" || i.key() == "threshold") {
_threshold_m = _parseColorArr(i.value(), 0);
}else if ((i.key() == "l" || i.key() == "transform") && _parseColorArr(i.value(), 0) != "") {
_transform_m = i.value();
}
}
_grabber_p = new hgx11grab(_scale_m.toInt(), _frameskip_m.toUShort()); _grabber_p = new hgx11grab(_scale_m.toInt(), _frameskip_m.toUShort());
_hclient_p = new hgx11net(_addr_m, _port_m.toUShort()); _hclient_p = new hgx11net(_addr_m, _port_m.toUShort());
@ -16,6 +38,7 @@ hgx11::hgx11(QString addr, QString port, QString scale, QString frameskip, QStri
_hclient_p->imgWidth = QString::number(_grabber_p->getDest_width()); _hclient_p->imgWidth = QString::number(_grabber_p->getDest_width());
_hclient_p->imgHeight = QString::number(_grabber_p->getDest_height()); _hclient_p->imgHeight = QString::number(_grabber_p->getDest_height());
_hclient_p->ledAdjustments(_redAdjust_m, _greenAdjust_m, _blueAdjust_m, _temperature_m, _threshold_m, _transform_m);
_damage_p->start(); _damage_p->start();
@ -43,6 +66,30 @@ hgx11::~hgx11()
_grabber_p = nullptr; _grabber_p = nullptr;
} }
// private
QString hgx11::_parseColorArr(QString value, bool isInt)
{
QStringList values = value.split(',');
if (values.size() != 3) {
return "";
}
QString retVal = "[";
for (int i = 0; i < 3; i++) {
if (isInt && (values.at(i).toInt() < 0 || values.at(i).toInt() > 255)) {
return "";
}
if (!isInt && (values.at(i).toDouble() < 0.0 || values.at(i).toDouble() > 1.0)) {
return "";
}
retVal.append(values.at(i));
retVal.append(",");
}
retVal.chop(1);
retVal.append("]");
return retVal;
}
// private slots // private slots
void hgx11::_sendImage() void hgx11::_sendImage()

20
hgx11.h
View File

@ -13,7 +13,7 @@ class hgx11 : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
hgx11(QString, QString, QString, QString, QString); hgx11(QHash<QString, QString>);
~hgx11(); ~hgx11();
private: private:
@ -22,14 +22,22 @@ private:
hgx11net *_hclient_p; hgx11net *_hclient_p;
QTimer *_timer_p; QTimer *_timer_p;
QString _addr_m; QString _addr_m = "localhost";
QString _port_m; QString _port_m = "19444";
QString _scale_m; QString _scale_m = "8";
QString _frameskip_m; QString _frameskip_m = "0";
QString _inactiveTime_m; QString _inactiveTime_m = "0";
QString _redAdjust_m = "";
QString _greenAdjust_m = "";
QString _blueAdjust_m = "";
QString _temperature_m = "";
QString _threshold_m = "";
QString _transform_m = "";
QString _destWidth_m; QString _destWidth_m;
QString _destHeight_m; QString _destHeight_m;
QString _parseColorArr(QString, bool);
private slots: private slots:
void _sendImage(); void _sendImage();
void _inActivity(); void _inActivity();

View File

@ -21,17 +21,13 @@ hgx11net::~hgx11net()
void hgx11net::clearLeds() void hgx11net::clearLeds()
{ {
if (!_isConnected()) { _cmd_m.clear();
return; _cmd_m.append("{\"command\": \"clearall\"}\n");
} _sendCommand();
_sock_p->write("{\"command\": \"clearall\"}\n");
} }
void hgx11net::setLedColor(quint8 R, quint8 G, quint8 B) void hgx11net::setLedColor(quint8 R, quint8 G, quint8 B)
{ {
if (!_isConnected()) {
return;
}
_cmd_m.clear(); _cmd_m.clear();
_cmd_m.append("{\"color\":["); _cmd_m.append("{\"color\":[");
_cmd_m.append(QString::number(R)); _cmd_m.append(QString::number(R));
@ -39,8 +35,19 @@ void hgx11net::setLedColor(quint8 R, quint8 G, quint8 B)
_cmd_m.append(QString::number(G)); _cmd_m.append(QString::number(G));
_cmd_m.append(","); _cmd_m.append(",");
_cmd_m.append(QString::number(B)); _cmd_m.append(QString::number(B));
_cmd_m.append("],\"command\":\"color\",\"priority\":100}}\n"); _cmd_m.append("],\"command\":\"color\",\"priority\":100}\n");
_sock_p->write(_cmd_m); _sendCommand();
}
void hgx11net::ledAdjustments(QString red, QString green, QString blue, QString temp, QString thres, QString trans)
{
_redAdjust_m = red;
_greenAdjust_m = green;
_blueAdjust_m = blue;
_temperature_m = temp;
_threshold_m = thres;
_transform_m = trans;
_ledAdjustments();
} }
// private // private
@ -52,6 +59,7 @@ bool hgx11net::_isConnected()
_sock_p->reset(); _sock_p->reset();
_connectHost(); _connectHost();
connected = (_sock_p->state() == QAbstractSocket::ConnectedState); connected = (_sock_p->state() == QAbstractSocket::ConnectedState);
_ledAdjustments();
} }
return connected; return connected;
} }
@ -65,6 +73,99 @@ void hgx11net::_connectHost()
} }
} }
void hgx11net::_sendCommand()
{
if (!_isConnected()) {
return;
}
_sock_p->write(_cmd_m);
}
void hgx11net::_ledAdjustments()
{
_colorAdjustmentType_m = 0;
if (_redAdjust_m != "") {
_colorAdjustmentType_m |= REDADJUST;
}
if (_greenAdjust_m != "") {
_colorAdjustmentType_m |= GREENADJUST;
}
if (_blueAdjust_m != "") {
_colorAdjustmentType_m |= BLUEADJUST;
}
_colorAdjustment();
_thresholdAdjustment();
_transformdAdjustment();
}
void hgx11net::_colorAdjustment()
{
if (!_colorAdjustmentType_m) {
return;
}
_cmd_m.clear();
_cmd_m.append("{\"adjustment\":{");
if (_colorAdjustmentType_m & REDADJUST) {
_cmd_m.append("\"redAdjust\":");
_cmd_m.append(_redAdjust_m);
_cmd_m.append(",");
}
if (_colorAdjustmentType_m & GREENADJUST) {
_cmd_m.append("\"greenAdjust\":");
_cmd_m.append(_greenAdjust_m);
_cmd_m.append(",");
}
if (_colorAdjustmentType_m & BLUEADJUST) {
_cmd_m.append("\"blueAdjust\":");
_cmd_m.append(_blueAdjust_m);
_cmd_m.append(",");
}
_cmd_m.chop(1); // remove trailing ,
_cmd_m.append("},\"command\":\"adjustment\"}\n");
_sendCommand();
}
void hgx11net::_thresholdAdjustment()
{
if (_threshold_m == "") {
return;
}
_cmd_m.clear();
_cmd_m.append("{\"command\":\"transform\",\"transform\":{\"threshold\":");
_cmd_m.append(_threshold_m);
_cmd_m.append("}}\n");
_sendCommand();
}
void hgx11net::_transformdAdjustment()
{
if (_transform_m == "") {
return;
}
QStringList values = _transform_m.split(',');
_cmd_m.clear();
_cmd_m.append("{\"command\":\"transform\",\"transform\":{\"luminanceGain\":");
_cmd_m.append(values.at(0));
_cmd_m.append(",\"luminanceMinimum\":");
_cmd_m.append(values.at(1));
_cmd_m.append(",\"saturationGain\":");
_cmd_m.append(values.at(2));
_cmd_m.append("}}\n");
_sendCommand();
}
void hgx11net::_temperatureAdjustment()
{
if (_temperature_m == "") {
return;
}
_cmd_m.clear();
_cmd_m.append("{\"command\":\"temperature\",\"temperature\":{\"correctionValues\":");
_cmd_m.append(_temperature_m);
_cmd_m.append("}}\n");
_sendCommand();
}
// public slots // public slots
void hgx11net::sendImage(QByteArray *imgdata) void hgx11net::sendImage(QByteArray *imgdata)
@ -80,5 +181,5 @@ void hgx11net::sendImage(QByteArray *imgdata)
_cmd_m.append(",\"imagewidth\":"); _cmd_m.append(",\"imagewidth\":");
_cmd_m.append(imgWidth); _cmd_m.append(imgWidth);
_cmd_m.append(",\"priority\":100}\n"); _cmd_m.append(",\"priority\":100}\n");
_sock_p->write(_cmd_m); _sendCommand();
} }

View File

@ -11,6 +11,11 @@ class hgx11net : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
enum {
REDADJUST = 0x01,
BLUEADJUST = 0x02,
GREENADJUST = 0x04,
};
QString imgWidth; QString imgWidth;
QString imgHeight; QString imgHeight;
@ -19,15 +24,29 @@ public:
void clearLeds(); void clearLeds();
void setLedColor(quint8, quint8, quint8); void setLedColor(quint8, quint8, quint8);
void ledAdjustments(QString, QString, QString, QString, QString, QString);
private: private:
QTcpSocket *_sock_p; QTcpSocket *_sock_p;
QByteArray _cmd_m; QByteArray _cmd_m;
QString _host_m; QString _host_m;
quint16 _port_m; quint16 _port_m;
QString _redAdjust_m = "";
QString _greenAdjust_m = "";
QString _blueAdjust_m = "";
QString _temperature_m = "";
QString _threshold_m = "";
QString _transform_m = "";
int _colorAdjustmentType_m = 0;
void _sendCommand();
void _connectHost(); void _connectHost();
bool _isConnected(); bool _isConnected();
void _ledAdjustments();
void _colorAdjustment();
void _thresholdAdjustment();
void _transformdAdjustment();
void _temperatureAdjustment();
public slots: public slots:
void sendImage(QByteArray *); void sendImage(QByteArray *);

View File

@ -8,7 +8,9 @@ static QCoreApplication *qapp;
static void quit(int sig) static void quit(int sig)
{ {
grab->~hgx11(); if (grab != nullptr) {
grab->~hgx11();
}
qapp->exit(sig); qapp->exit(sig);
} }
@ -49,6 +51,36 @@ int main(int argc, char *argv[])
QCoreApplication::translate("main", "seconds before turning off LEDs") QCoreApplication::translate("main", "seconds before turning off LEDs")
); );
parser.addOption(inactiveTime); parser.addOption(inactiveTime);
QCommandLineOption redAdjust(QStringList() << "r" << "redadjust",
QCoreApplication::translate("main", "Adjustment of the red color (requires 3 space seperated values between 0 and 255) (ex. \"255,10,0\")"),
QCoreApplication::translate("main", "adjusts red color of LEDs")
);
parser.addOption(redAdjust);
QCommandLineOption greenAdjust(QStringList() << "g" << "greenadjust",
QCoreApplication::translate("main", "Adjustment of the green color (requires 3 space seperated values between 0 and 255) (ex. \"75,210,0\")"),
QCoreApplication::translate("main", "adjusts green color of LEDs")
);
parser.addOption(greenAdjust);
QCommandLineOption blueAdjust(QStringList() << "b" << "blueadjust",
QCoreApplication::translate("main", "Adjustment of the blue color (requires 3 space seperated values between 0 and 255) (ex. \"0,10,160\")"),
QCoreApplication::translate("main", "adjusts blue color of LEDs")
);
parser.addOption(blueAdjust);
QCommandLineOption temperature(QStringList() << "t" << "temperature",
QCoreApplication::translate("main", "Adjustment of the LED color temperature (requires 3 space seperated values between 0 and 255) (ex. \"255,255,250\")"),
QCoreApplication::translate("main", "adjusts LED color temperature")
);
parser.addOption(temperature);
QCommandLineOption threshold(QStringList() << "d" << "threshold",
QCoreApplication::translate("main", "Set the threshold of the leds (requires 3 space seperated values between 0.0 and 1.0) (ex. \"0.0025,0.005,0.01\")"),
QCoreApplication::translate("main", "adjusts LED threshold")
);
parser.addOption(threshold);
QCommandLineOption transform(QStringList() << "l" << "transform",
QCoreApplication::translate("main", "Adjusts the luminance / saturation of the leds values are in this order: luminanceGain, luminanceMin, saturationL (requires 3 space seperated values between 0.0 and 1.0) (ex. \"1.0,0.01,1.0\")"),
QCoreApplication::translate("main", "adjusts luminance / saturation")
);
parser.addOption(transform);
parser.process(*qapp); parser.process(*qapp);
if (!parser.isSet("address")) { if (!parser.isSet("address")) {
@ -61,7 +93,14 @@ int main(int argc, char *argv[])
parser.showHelp(); parser.showHelp();
} }
grab = new hgx11(parser.value("address"), parser.value("port"), parser.value("scale"), parser.value("frameskip"), parser.value("inactive")); QHash<QString, QString> opts;
QString optName;
for (int i = 0; i < parser.optionNames().size(); i++) {
optName = parser.optionNames().at(i);
opts.insert(optName, parser.value(optName));
}
grab = new hgx11(opts);
return qapp->exec(); return qapp->exec();
} }