diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c28f264 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +CMakeFiles/ +Hyperion_Grabber_X11_QT_autogen/ +cmake_install.cmake +CMakeCache.txt +Makefile +Hyperion_Grabber_X11_QT +CMakeLists.txt.user +.cmake/ diff --git a/hgx11.cpp b/hgx11.cpp index 952e729..5921f5b 100644 --- a/hgx11.cpp +++ b/hgx11.cpp @@ -8,6 +8,7 @@ hgx11::hgx11(QHash opts) unsigned short port = 19444; unsigned short scale = 8; unsigned short frameskip = 0; + unsigned short priority = 100; const char * filter = FilterNearest; QString redAdjust = "", greenAdjust = "", blueAdjust = ""; QString temperature = "", threshold = "", transform = ""; @@ -18,6 +19,8 @@ hgx11::hgx11(QHash opts) addr = i.value(); } else if ((i.key() == "p" || i.key() == "port") && i.value().toUShort()) { port = i.value().toUShort(); + } else if ((i.key() == "c" || i.key() == "priority") && (i.value().toUShort() && i.value().toUShort() <= 255)) { + priority = i.value().toUShort(); } else if ((i.key() == "s" || i.key() == "scale") && i.value().toUShort()) { scale = i.value().toUShort(); } else if ((i.key() == "f" || i.key() == "frameskip") && (i.value().toUShort() && i.value().toUShort() <= 255)) { @@ -56,6 +59,8 @@ hgx11::hgx11(QHash opts) } } + _hyperionPriority_m = QString("\"priority\":").append(QString::number(priority)); + _display_p = XOpenDisplay(nullptr); if(_display_p == nullptr){ qCritical() << "Failed to open X11 display"; @@ -63,7 +68,7 @@ hgx11::hgx11(QHash opts) } _grabber_p = new hgx11grab(_display_p, scale, filter); - _hclient_p = new hgx11net(addr, port); + _hclient_p = new hgx11net(addr, port, _hyperionPriority_m); _damage_p = new hgx11damage(&_grabbed_m, frameskip); if (_inactiveXss_m) { _screensaver_p = new hgx11screensaver(_display_p); @@ -170,7 +175,7 @@ void hgx11::_activity() void hgx11::_setImgSize() { _hclient_p->imgCmdBuf.clear(); - _hclient_p->imgCmdBuf.append("{\"command\":\"image\",\"priority\":100,\"imageheight\":"); + _hclient_p->imgCmdBuf.append("{\"command\":\"image\",").append(_hyperionPriority_m.toUtf8()).append(",\"imageheight\":"); _hclient_p->imgCmdBuf.append(QString::number(_grabber_p->getDest_height()).toUtf8()); _hclient_p->imgCmdBuf.append(",\"imagewidth\":"); _hclient_p->imgCmdBuf.append(QString::number(_grabber_p->getDest_width()).toUtf8()); diff --git a/hgx11.h b/hgx11.h index d892ddf..e652426 100644 --- a/hgx11.h +++ b/hgx11.h @@ -28,6 +28,7 @@ private: int _inactiveTime_m = 0; unsigned long _inactiveTimeXss_m = 0; + QString _hyperionPriority_m; bool _inactiveXss_m = false; bool _grabActive_m; diff --git a/hgx11net.cpp b/hgx11net.cpp index 0c797d6..5bdd29c 100644 --- a/hgx11net.cpp +++ b/hgx11net.cpp @@ -2,12 +2,13 @@ // public -hgx11net::hgx11net(QString host, ushort port) +hgx11net::hgx11net(QString host, ushort port, QString priority) { _sock_p = new QTcpSocket(this); _sock_p->setReadBufferSize(1); _host_m = host; _port_m = port; + _priority_m = priority; _connectHost(); } @@ -24,7 +25,7 @@ hgx11net::~hgx11net() void hgx11net::clearLeds() { _cmd_m.clear(); - _cmd_m.append("{\"command\": \"clearall\"}\n"); + _cmd_m.append("{\"command\": \"clearall\",").append(_priority_m.toUtf8()).append("}\n"); _sendCommand(); } @@ -37,7 +38,7 @@ void hgx11net::setLedColor(quint8 R, quint8 G, quint8 B) _cmd_m.append(QString::number(G).toUtf8()); _cmd_m.append(","); _cmd_m.append(QString::number(B).toUtf8()); - _cmd_m.append("],\"command\":\"color\",\"priority\":100}\n"); + _cmd_m.append("],\"command\":\"color\",").append(_priority_m.toUtf8()).append("}\n"); _sendCommand(); } @@ -126,7 +127,7 @@ void hgx11net::_colorAdjustment() _cmd_m.append(","); } _cmd_m.chop(1); // remove trailing , - _cmd_m.append("},\"command\":\"adjustment\"}\n"); + _cmd_m.append("},\"command\":\"adjustment\",").append(_priority_m.toUtf8()).append("}\n"); _sendCommand(); } @@ -136,7 +137,7 @@ void hgx11net::_thresholdAdjustment() return; } _cmd_m.clear(); - _cmd_m.append("{\"command\":\"transform\",\"transform\":{\"threshold\":"); + _cmd_m.append("{\"command\":\"transform\",").append(_priority_m.toUtf8()).append(",\"transform\":{\"threshold\":"); _cmd_m.append(_threshold_m.toUtf8()); _cmd_m.append("}}\n"); _sendCommand(); @@ -149,7 +150,7 @@ void hgx11net::_transformdAdjustment() } QStringList values = _transform_m.split(','); _cmd_m.clear(); - _cmd_m.append("{\"command\":\"transform\",\"transform\":{\"luminanceGain\":"); + _cmd_m.append("{\"command\":\"transform\",").append(_priority_m.toUtf8()).append(",\"transform\":{\"luminanceGain\":"); _cmd_m.append(values.at(0).toUtf8()); _cmd_m.append(",\"luminanceMinimum\":"); _cmd_m.append(values.at(1).toUtf8()); @@ -165,7 +166,7 @@ void hgx11net::_temperatureAdjustment() return; } _cmd_m.clear(); - _cmd_m.append("{\"command\":\"temperature\",\"temperature\":{\"correctionValues\":"); + _cmd_m.append("{\"command\":\"temperature\",").append(_priority_m.toUtf8()).append(",\"temperature\":{\"correctionValues\":"); _cmd_m.append(_temperature_m.toUtf8()); _cmd_m.append("}}\n"); _sendCommand(); diff --git a/hgx11net.h b/hgx11net.h index 1bb7233..d974881 100644 --- a/hgx11net.h +++ b/hgx11net.h @@ -14,7 +14,7 @@ public: }; QByteArray imgCmdBuf; - hgx11net(QString, ushort); + hgx11net(QString, ushort, QString); ~hgx11net(); void clearLeds(); @@ -26,6 +26,7 @@ private: QByteArray _cmd_m; QString _host_m; quint16 _port_m; + QString _priority_m; QString _redAdjust_m = ""; QString _greenAdjust_m = ""; QString _blueAdjust_m = ""; diff --git a/main.cpp b/main.cpp index 85df865..ee26e7f 100644 --- a/main.cpp +++ b/main.cpp @@ -28,6 +28,7 @@ int main(int argc, char *argv[]) parser.addVersionOption(); parser.addOption({{"a", "address"}, "Address to the hyperion json server. (ex. 127.0.0.1)", "address"}); parser.addOption({{"p", "port"}, "Port for the hyperion json server. (ex. 19444)", "port"}); + parser.addOption({{"c", "priority"}, "Priority to send to Hyperion, lower number means higher priority, defaults to 100. Range 0-255", "number"}); parser.addOption({{"s", "scale"}, "Divisor used to scale your screen resolution (ex. 8 ; if your screen is 1920x1080, the result image sent to hyperion is 240x135", "scale"}); parser.addOption({{"f", "frameskip"}, "How many X11 frames to skip over. (ex. 4 ; 1 frame will be scaled and sent to hyperion and 4 will be ignored)", "frames"}); parser.addOption({{"i", "inactive"}, "How many seconds after the screen is inactive to turn off the LED's. Set to 0 to disable.", "seonds"});