From f269268def6fbd4b75e92e153199a7782b1b5a52 Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Thu, 30 Sep 2021 18:06:23 +0200 Subject: [PATCH] Fix LED Devices (Lightpack, Atmo/Karate, Hue) (#1337) * Fix that lighpack cores when lack of permissions * Atmo/Karate - Fix LedCount constraint handling * Hue updates - Have EntertainmentAPI as default, disable hardwareledcount as cacultated * Have Gamma per default 2.2 --- assets/webconfig/js/content_leds.js | 14 ++++++- config/hyperion.config.json.default | 6 +-- libsrc/hyperion/schema/schema-color.json | 6 +-- .../leddevice/dev_hid/LedDeviceLightpack.cpp | 37 +++++++++---------- .../leddevice/schemas/schema-philipshue.json | 2 +- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/assets/webconfig/js/content_leds.js b/assets/webconfig/js/content_leds.js index d10d487d..d7ab3937 100755 --- a/assets/webconfig/js/content_leds.js +++ b/assets/webconfig/js/content_leds.js @@ -750,6 +750,8 @@ $(document).ready(function () { break; case "philipshue": + conf_editor.getEditor("root.generalOptions").disable(); + var lights = conf_editor.getEditor("root.specificOptions.lightIds").getValue(); hwLedCountDefault = lights.length; colorOrderDefault = "rgb"; @@ -757,6 +759,7 @@ $(document).ready(function () { case "yeelight": conf_editor.getEditor("root.generalOptions").disable(); + var lights = conf_editor.getEditor("root.specificOptions.lights").getValue(); hwLedCountDefault = lights.length; colorOrderDefault = "rgb"; @@ -1070,6 +1073,13 @@ $(document).ready(function () { hwLedCount.setValue(lights.length); } }); + + //Handle Hardware Led Count constraint list + conf_editor.watch('root.generalOptions.hardwareLedCountList', () => { + var hwLedCountSelected = conf_editor.getEditor("root.generalOptions.hardwareLedCountList").getValue(); + conf_editor.getEditor("root.generalOptions.hardwareLedCount").setValue(Number(hwLedCountSelected)); + }); + }); //philipshueentertainment backward fix @@ -1648,7 +1658,9 @@ function updateElements(ledType, key) { if (ledProperties && ledProperties.ledCount) { if (ledProperties.ledCount.length > 0) { var configuredLedCount = window.serverConfig.device.hardwareLedCount; - updateJsonEditorSelection(conf_editor, 'root.generalOptions', "hardwareLedCount", {}, ledProperties.ledCount, [], configuredLedCount); + showInputOptionForItem(conf_editor, 'generalOptions', "hardwareLedCount", false); + updateJsonEditorSelection(conf_editor, 'root.generalOptions', "hardwareLedCountList", {"title": "edt_dev_general_hardwareLedCount_title"}, + ledProperties.ledCount.map(String), [], configuredLedCount); } } break; diff --git a/config/hyperion.config.json.default b/config/hyperion.config.json.default index fc7c1803..5461841f 100644 --- a/config/hyperion.config.json.default +++ b/config/hyperion.config.json.default @@ -37,9 +37,9 @@ "cyan" : [0,255,255], "magenta" : [255,0,255], "yellow" : [255,255,0], - "gammaRed" : 1.5, - "gammaGreen" : 1.5, - "gammaBlue" : 1.5, + "gammaRed" : 2.2, + "gammaGreen" : 2.2, + "gammaBlue" : 2.2, "backlightThreshold" : 0, "backlightColored" : false, "brightness" : 100, diff --git a/libsrc/hyperion/schema/schema-color.json b/libsrc/hyperion/schema/schema-color.json index ff632ed5..b899afb3 100644 --- a/libsrc/hyperion/schema/schema-color.json +++ b/libsrc/hyperion/schema/schema-color.json @@ -206,7 +206,7 @@ "required" : true, "minimum" : 0.1, "maximum": 100.0, - "default" : 1.5, + "default" : 2.2, "step" : 0.1, "propertyOrder" : 15 }, @@ -217,7 +217,7 @@ "required" : true, "minimum" : 0.1, "maximum": 100.0, - "default" : 1.5, + "default" : 2.2, "step" : 0.1, "propertyOrder" : 16 }, @@ -228,7 +228,7 @@ "required" : true, "minimum" : 0.1, "maximum": 100.0, - "default" : 1.5, + "default" : 2.2, "step" : 0.1, "propertyOrder" : 17 } diff --git a/libsrc/leddevice/dev_hid/LedDeviceLightpack.cpp b/libsrc/leddevice/dev_hid/LedDeviceLightpack.cpp index bf8c217b..88b9722b 100644 --- a/libsrc/leddevice/dev_hid/LedDeviceLightpack.cpp +++ b/libsrc/leddevice/dev_hid/LedDeviceLightpack.cpp @@ -118,11 +118,11 @@ bool LedDeviceLightpack::init(const QJsonObject &deviceConfig) QString errortext; if (_serialNumber.isEmpty()) { - errortext = QString ("No Lightpack devices were found"); + errortext = QString ("No working Lightpack devices were found"); } else { - errortext = QString ("No Lightpack device found with serial %1").arg( _serialNumber); + errortext = QString ("No working Lightpack device found with serial %1").arg( _serialNumber); } this->setInError( errortext ); } @@ -197,9 +197,6 @@ bool LedDeviceLightpack::searchDevice(libusb_device * device, const QString & re return false; } - #define UNO_VENDOR_ID 0x2341 - #define UNO_PRODUCT_ID 0x43 - if ((deviceDescriptor.idVendor == USB_VENDOR_ID && deviceDescriptor.idProduct == USB_PRODUCT_ID) || (deviceDescriptor.idVendor == USB_OLD_VENDOR_ID && deviceDescriptor.idProduct == USB_OLD_PRODUCT_ID)) { @@ -375,28 +372,30 @@ int LedDeviceLightpack::openDevice(libusb_device *device, libusb_device_handle * Error(_log, "unable to open device(%d): %s", error, libusb_error_name(error)); rc = -1; } - - // detach kernel driver if it is active - if (libusb_kernel_driver_active(handle, LIGHTPACK_INTERFACE) == 1) + else { - error = libusb_detach_kernel_driver(handle, LIGHTPACK_INTERFACE); + // detach kernel driver if it is active + if (libusb_kernel_driver_active(handle, LIGHTPACK_INTERFACE) == 1) + { + error = libusb_detach_kernel_driver(handle, LIGHTPACK_INTERFACE); + if (error != LIBUSB_SUCCESS) + { + Error(_log, "unable to detach kernel driver(%d): %s", error, libusb_error_name(error)); + libusb_close(handle); + rc = -1; + } + } + + error = libusb_claim_interface(handle, LIGHTPACK_INTERFACE); if (error != LIBUSB_SUCCESS) { - Error(_log, "unable to detach kernel driver(%d): %s", error, libusb_error_name(error)); + Error(_log, "unable to claim interface(%d): %s", error, libusb_error_name(error)); + libusb_attach_kernel_driver(handle, LIGHTPACK_INTERFACE); libusb_close(handle); rc = -1; } } - error = libusb_claim_interface(handle, LIGHTPACK_INTERFACE); - if (error != LIBUSB_SUCCESS) - { - Error(_log, "unable to claim interface(%d): %s", error, libusb_error_name(error)); - libusb_attach_kernel_driver(handle, LIGHTPACK_INTERFACE); - libusb_close(handle); - rc = -1; - } - *deviceHandle = handle; return rc; } diff --git a/libsrc/leddevice/schemas/schema-philipshue.json b/libsrc/leddevice/schemas/schema-philipshue.json index afd648ef..a6f509ec 100644 --- a/libsrc/leddevice/schemas/schema-philipshue.json +++ b/libsrc/leddevice/schemas/schema-philipshue.json @@ -28,7 +28,7 @@ "useEntertainmentAPI": { "type": "boolean", "title": "edt_dev_spec_useEntertainmentAPI_title", - "default": false, + "default": true, "propertyOrder": 4 }, "transitiontime": {