From 62829d9bf80eef8730bfafe8281917ccf77926d0 Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Wed, 16 Mar 2022 09:27:37 +0100 Subject: [PATCH] Allow to disable switching LEDs on during startup (#1443) --- assets/webconfig/i18n/en.json | 2 ++ assets/webconfig/js/content_leds.js | 20 +++++++++------ config/hyperion.config.json.default | 1 + include/leddevice/LedDevice.h | 5 +++- libsrc/hyperion/schema/schema-device.json | 12 +++++++++ libsrc/leddevice/LedDevice.cpp | 31 +++++++++++++++++++---- 6 files changed, 57 insertions(+), 14 deletions(-) diff --git a/assets/webconfig/i18n/en.json b/assets/webconfig/i18n/en.json index 6e394e38..08aee947 100644 --- a/assets/webconfig/i18n/en.json +++ b/assets/webconfig/i18n/en.json @@ -504,6 +504,8 @@ "edt_dev_enum_sub_min_warm_adjust": "Subtract warm white", "edt_dev_enum_subtract_minimum": "Subtract minimum", "edt_dev_enum_white_off": "White off", + "edt_dev_general_autostart_title": "Autostart", + "edt_dev_general_autostart_title_info": "The LED device is switched-on during startup or not", "edt_dev_general_colorOrder_title": "RGB byte order", "edt_dev_general_colorOrder_title_info": "The device's color order", "edt_dev_general_hardwareLedCount_title": "Hardware LED count", diff --git a/assets/webconfig/js/content_leds.js b/assets/webconfig/js/content_leds.js index c2f1ae84..40170fc8 100755 --- a/assets/webconfig/js/content_leds.js +++ b/assets/webconfig/js/content_leds.js @@ -820,7 +820,7 @@ $(document).ready(function () { break; case "philipshue": - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var lights = conf_editor.getEditor("root.specificOptions.lightIds").getValue(); hwLedCountDefault = lights.length; @@ -828,7 +828,7 @@ $(document).ready(function () { break; case "yeelight": - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var lights = conf_editor.getEditor("root.specificOptions.lights").getValue(); hwLedCountDefault = lights.length; @@ -836,7 +836,7 @@ $(document).ready(function () { break; case "atmoorb": - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var configruedOrbIds = conf_editor.getEditor("root.specificOptions.orbIds").getValue().trim(); if (configruedOrbIds.length !== 0) { @@ -848,7 +848,7 @@ $(document).ready(function () { break; case "razer": - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); hwLedCountDefault = 1; colorOrderDefault = "bgr"; @@ -963,7 +963,7 @@ $(document).ready(function () { var specOptPath = 'root.specificOptions.'; //Disable General Options, as LED count will be resolved from device itself - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var hostList = conf_editor.getEditor("root.specificOptions.hostList"); if (hostList) { @@ -1130,7 +1130,7 @@ $(document).ready(function () { //Yeelight conf_editor.watch('root.specificOptions.lights', () => { //Disable General Options, as LED count will be resolved from number of lights configured - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var hwLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount") if (hwLedCount) { @@ -1142,7 +1142,7 @@ $(document).ready(function () { //Philips Hue conf_editor.watch('root.specificOptions.lightIds', () => { //Disable General Options, as LED count will be resolved from number of lights configured - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var hwLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount") if (hwLedCount) { @@ -1154,7 +1154,7 @@ $(document).ready(function () { //Atmo Orb conf_editor.watch('root.specificOptions.orbIds', () => { //Disable General Options, as LED count will be resolved from number of lights configured - conf_editor.getEditor("root.generalOptions").disable(); + disableAutoResolvedGeneralOptions(); var hwLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount") if (hwLedCount) { @@ -1780,3 +1780,7 @@ function showAllDeviceInputOptions(showForKey, state) { showInputOptionsForKey(conf_editor, "specificOptions", showForKey, state); } +function disableAutoResolvedGeneralOptions() { + conf_editor.getEditor("root.generalOptions.hardwareLedCount").disable(); + conf_editor.getEditor("root.generalOptions.colorOrder").disable(); +} diff --git a/config/hyperion.config.json.default b/config/hyperion.config.json.default index e6e6a2a5..489c9b66 100644 --- a/config/hyperion.config.json.default +++ b/config/hyperion.config.json.default @@ -16,6 +16,7 @@ { "type" : "file", "hardwareLedCount" : 1, + "autoStart" : true, "output" : "/dev/null", "colorOrder" : "rgb", "latchTime" : 0, diff --git a/include/leddevice/LedDevice.h b/include/leddevice/LedDevice.h index 76b885a9..eca58f2e 100644 --- a/include/leddevice/LedDevice.h +++ b/include/leddevice/LedDevice.h @@ -460,7 +460,10 @@ private: void stopRefreshTimer(); /// Is last write refreshing enabled? - bool _isRefreshEnabled; + bool _isRefreshEnabled; + + /// Is device to be enabled during start + bool _isAutoStart; /// Order of Colors supported by the device /// "RGB", "BGR", "RBG", "BRG", "GBR", "GRB" diff --git a/libsrc/hyperion/schema/schema-device.json b/libsrc/hyperion/schema/schema-device.json index e08bca96..397409ae 100644 --- a/libsrc/hyperion/schema/schema-device.json +++ b/libsrc/hyperion/schema/schema-device.json @@ -29,6 +29,18 @@ }, "access": "expert", "propertyOrder": 3 + }, + "autoStart": { + "type": "boolean", + "format": "checkbox", + "title": "edt_dev_general_autostart_title", + "default": true, + "required": true, + "options": { + "infoText": "edt_dev_general_autostart_title_info" + }, + "access": "advanced", + "propertyOrder": 4 } }, "dependencies": { diff --git a/libsrc/leddevice/LedDevice.cpp b/libsrc/leddevice/LedDevice.cpp index ce22f2ab..161c289a 100644 --- a/libsrc/leddevice/LedDevice.cpp +++ b/libsrc/leddevice/LedDevice.cpp @@ -16,6 +16,22 @@ #include #include +// Constants +namespace { + +// Configuration settings +const char CONFIG_CURRENT_LED_COUNT[] = "currentLedCount"; +const char CONFIG_COLOR_ORDER[] = "colorOrder"; +const char CONFIG_AUTOSTART[] = "autoStart"; +const char CONFIG_LATCH_TIME[] = "latchTime"; +const char CONFIG_REWRITE_TIME[] = "rewriteTime"; + +int DEFAULT_LED_COUNT = 1; +const char DEFAULT_COLOR_ORDER[] = "RGB"; +const bool DEFAULT_IS_AUTOSTART = true; + +} //End of constants + LedDevice::LedDevice(const QJsonObject& deviceConfig, QObject* parent) : QObject(parent) , _devConfig(deviceConfig) @@ -34,6 +50,7 @@ LedDevice::LedDevice(const QJsonObject& deviceConfig, QObject* parent) , _isInSwitchOff (false) , _lastWriteTime(QDateTime::currentDateTime()) , _isRefreshEnabled (false) + , _isAutoStart(true) { _activeDeviceType = deviceConfig["type"].toString("UNSPECIFIED").toLower(); } @@ -64,7 +81,10 @@ void LedDevice::start() { // Everything is OK -> enable device _isDeviceInitialised = true; - this->enable(); + if (_isAutoStart) + { + this->enable(); + } } } @@ -147,11 +167,12 @@ bool LedDevice::init(const QJsonObject &deviceConfig) { Debug(_log, "deviceConfig: [%s]", QString(QJsonDocument(_devConfig).toJson(QJsonDocument::Compact)).toUtf8().constData() ); - _colorOrder = deviceConfig["colorOrder"].toString("RGB"); + _colorOrder = deviceConfig[CONFIG_COLOR_ORDER].toString(DEFAULT_COLOR_ORDER); + _isAutoStart = deviceConfig[CONFIG_AUTOSTART].toBool(DEFAULT_IS_AUTOSTART); - setLedCount( deviceConfig["currentLedCount"].toInt(1) ); // property injected to reflect real led count - setLatchTime( deviceConfig["latchTime"].toInt( _latchTime_ms ) ); - setRewriteTime ( deviceConfig["rewriteTime"].toInt( _refreshTimerInterval_ms) ); + setLedCount( deviceConfig[CONFIG_CURRENT_LED_COUNT].toInt(DEFAULT_LED_COUNT) ); // property injected to reflect real led count + setLatchTime( deviceConfig[CONFIG_LATCH_TIME].toInt( _latchTime_ms ) ); + setRewriteTime ( deviceConfig[CONFIG_REWRITE_TIME].toInt( _refreshTimerInterval_ms) ); return true; }