Skip to content

Commit

Permalink
Allow to disable switching LEDs on during startup (hyperion-project#1443
Browse files Browse the repository at this point in the history
)
  • Loading branch information
Lord-Grey committed Mar 16, 2022
1 parent c75c98e commit 62829d9
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 14 deletions.
2 changes: 2 additions & 0 deletions assets/webconfig/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
20 changes: 12 additions & 8 deletions assets/webconfig/js/content_leds.js
Original file line number Diff line number Diff line change
Expand Up @@ -820,23 +820,23 @@ $(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;
colorOrderDefault = "rgb";
break;

case "yeelight":
conf_editor.getEditor("root.generalOptions").disable();
disableAutoResolvedGeneralOptions();

var lights = conf_editor.getEditor("root.specificOptions.lights").getValue();
hwLedCountDefault = lights.length;
colorOrderDefault = "rgb";
break;

case "atmoorb":
conf_editor.getEditor("root.generalOptions").disable();
disableAutoResolvedGeneralOptions();

var configruedOrbIds = conf_editor.getEditor("root.specificOptions.orbIds").getValue().trim();
if (configruedOrbIds.length !== 0) {
Expand All @@ -848,7 +848,7 @@ $(document).ready(function () {
break;

case "razer":
conf_editor.getEditor("root.generalOptions").disable();
disableAutoResolvedGeneralOptions();
hwLedCountDefault = 1;
colorOrderDefault = "bgr";

Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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();
}
1 change: 1 addition & 0 deletions config/hyperion.config.json.default
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
{
"type" : "file",
"hardwareLedCount" : 1,
"autoStart" : true,
"output" : "/dev/null",
"colorOrder" : "rgb",
"latchTime" : 0,
Expand Down
5 changes: 4 additions & 1 deletion include/leddevice/LedDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,10 @@ protected slots:
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"
Expand Down
12 changes: 12 additions & 0 deletions libsrc/hyperion/schema/schema-device.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
31 changes: 26 additions & 5 deletions libsrc/leddevice/LedDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@
#include <sstream>
#include <iomanip>

// 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)
Expand All @@ -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();
}
Expand Down Expand Up @@ -64,7 +81,10 @@ void LedDevice::start()
{
// Everything is OK -> enable device
_isDeviceInitialised = true;
this->enable();
if (_isAutoStart)
{
this->enable();
}
}
}

Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 62829d9

Please sign in to comment.