Compare commits

...

521 Commits

Author SHA1 Message Date
LordGrey cd22d4454d
Philips Hue APIv2 support (#1637)
* Support Philips Hue APIv2 and refactoring

* Fix MDNSBrower - if timeout during host resolvment occurs

* Hue API v2 - Migrate database

* Fix macOS build

* Handle network timeout before any other error

* Address CodeQL findings

* Clean-up and Fixes

* Only getProperties, if username is available

* Option to layout by entertainment area center

* Fix Wizard

---------

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2023-10-03 20:33:11 +02:00
dependabot[bot] 33722c9a09
Bump crazy-max/ghaction-import-gpg from 5.3.0 to 6.0.0 (#1644)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.3.0 to 6.0.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.3.0...v6.0.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:06:39 +02:00
dependabot[bot] 41bffecc0b
Bump peter-evans/repository-dispatch from 2.1.1 to 2.1.2 (#1645)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:04:26 +02:00
dependabot[bot] f49e1a2c0b
Bump actions/checkout from 3 to 4 (#1646)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:03:57 +02:00
LordGrey 08dc59c885
Fix #1630 - Audio Capture settings are ignored (#1640)
* Fix macOS build

* Update minimum cmake version

* Correct compile errorswith Qt6.7

* Update minimum cmake version (2)

* Use C++17

* Correct compile errors with Qt6.7

* Replace unsupported Lambda UniqueConnection

* Support UTF-8 Output on console

* Fix #1630
2023-10-01 21:56:53 +02:00
LordGrey 48cea4ad9b
Focus on relevant PRs 2023-09-30 18:00:38 +02:00
LordGrey 7909997398
Update install_pr.sh
Only run named  'Hyperion PR Build' have artifacts
2023-09-06 20:08:20 +02:00
LordGrey a5bb7e905b
Fix non image updates ignore blacklisted leds (#1635)
* Fix #1634

* Refactor to process blacklisted LEDs with less resources
2023-08-26 11:12:43 +02:00
LordGrey d1879c2e39
ws281x - Update logic to identify is user is admin (#1623) 2023-08-03 22:40:25 +02:00
LordGrey c0dc08b0c0
Update to Protobuf 23.4.0 (#1626)
* Update to protobuf v23.4.0

* Add defines for 3rd party sub-modules used by protobuf

* Check out sub-modules recursively
2023-07-29 19:28:51 +02:00
LordGrey 5bf25c98ad
Update mbedTLS to v3.4.0 (#1625) 2023-07-29 19:28:39 +02:00
LordGrey da275dd448
Update flatbuffers to v23.5.26 (#1624) 2023-07-29 19:28:28 +02:00
Paulchen-Panther 1257cfff70 Set OpenSSL to 1.1.1 (Windows) 2023-07-21 18:59:23 +00:00
LordGrey 42c98da470
Update platforms (#1617)
* Remove stretch, bionic, add lunar

* Fix CEC CMakeList for Ubuntu 23.04

* Fix git version identification when run in docker and local code

* Update SYSTEM_LIBS_SKIP list

* Updates after Ubuntu Server 20.04, latest PI OS Light and CoreElec 20

* Update year

* Skip List working with Fedora38 Server (x86) and libreElec 11 (x86)

* Update platform tag handling

* Show error, if ssl lib cannot be found

* Update supported platforms

* Script to install selected Pull Requests

* Fix misspelled explanation + improve description

* Correct run-id evaluation

* Support python3 and python2

* Support to copy existing config for PR testing
2023-07-21 16:45:37 +02:00
LordGrey 64642a4457
Fix WLED UI handling non supported segment streaming (#1610) 2023-07-10 20:39:35 +02:00
Christoph Pohl af1a31b842
Update dependencies for Debian Bookworm (#1613) 2023-06-25 10:34:47 +02:00
dependabot[bot] a7ce0f8a4c
Bump crazy-max/ghaction-import-gpg from 5.2.0 to 5.3.0 (#1608)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-11 20:42:35 +02:00
Paulchen-Panther 00ce3ff089
Update Discord Invite 2023-05-29 21:43:28 +02:00
Paulchen-Panther 54d03b8065 added workflow_dispatch
to allow the bot to create the APT repository itself
2023-05-14 16:29:57 +02:00
lsellens 2a17de37f1
fix for matrix effect (#1602) 2023-05-11 21:11:33 +02:00
LordGrey 5535b884bf
Fixes (#1605)
* Correct misleading Error messages

* Fix that Audio Capture is not shown when there is no screen nor video grabber

* Fix - Audio Capture enabled after reboot automatically (#1581)
2023-05-07 14:04:45 +02:00
Hyperion-Bot 79b31e16e0 Update submodule rpi_ws281x 2023-04-26 00:22:19 +00:00
dependabot[bot] e3496eb4dc
Bump SamKirkland/FTP-Deploy-Action from 4.3.3 to 4.3.4 (#1598)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.3...v4.3.4)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-05 17:25:49 +02:00
Paulchen-Panther 08e7c7d8c2 [HotFix] Supplement to the PR #1570 - Fix Issue #1596 2023-03-27 20:54:34 +02:00
Paulchen-Panther e0060eb406 cleanup 2023-03-26 15:22:06 +02:00
dependabot[bot] 2f09f9a0b8
Bump actions/upload-artifact from 2.2.0 to 3.1.2 (#1583)
GitHub Actions Update
2023-03-16 21:38:08 +01:00
Portisch 85eb62f314
Fix missing Include (#1585)
'std::numeric_limits' do need '#include <limits>'
2023-03-09 08:38:05 +01:00
Hyperion-Bot c73f8623b8 Update submodule rpi_ws281x 2023-03-07 00:26:14 +00:00
Harald e59e456b00
fix python version on Debian bookworm (fix #1579) (#1580)
the package wanted the dependency libpython3.9
but the executable expects libpython3.10
2023-02-27 17:04:34 +01:00
Rastafabisch a393f6211c
Update Info.plist.in (#1575)
Hide Hyperion from the Dock.
2023-02-21 17:39:18 +01:00
LordGrey b2fcea3bbd Rollover to 2.0.16-beta.1 2023-02-20 07:38:01 +01:00
LordGrey 24a00e3b0b
Prep Release 2.0.15 (#1571)
* Readd import Collections to show JSON validation failures details

* Editorial update

* Audiograbber - Remove config for not implemented feature

* Smoothing - Update defaults and range

* Version 2.0.15
2023-02-19 13:24:43 +01:00
Hyperion-Bot bfba0d6137 Update de.json (POEditor.com) 2023-02-19 11:41:47 +01:00
Hyperion-Bot fd82f58269 Update de.json (POEditor.com) 2023-02-19 11:05:25 +01:00
Michael Rochelle acdf733936
Audio Grabber Feature (#1570)
* Creating Audio Grabber

Creating Audio Grabber

Creating Audio Grabber.

Successfully began capturing audio in windows. Starting to implement a hard-coded UV Visualizer.

Got Windows DirectSound Implementation working.
Hardcoded basic VU Meter.

Begin working on linux audio grabber implementation.

Finished Linux Draft Implementation.
Minor Mods to windows implementation.

Windows:
 - Free memory used by device id.
 - Prevent starting audio if the grabber is disabled
 - More debug logging

Linux:
 - Prevent starting audio if the grabber is disabled

Added strings to english
Removed "custom" from device selection
Made hard-coded visualizer values configurable.
wrote values to imageData with BGR priority to enable configurable values to be set in RGB format.
created logic to support "Automatic" to enable the API to select the default device.

Add language key for audio in "Remote Control" section.
Removed audio configuration for number of channels. This was causing an error with some devices.

Fixed logic to update capture while its active.
Optimizing code .

UI Tweaks
Destructuring.

Fixed build error on linux.

Custom Effects - Clean-ups and Enhancements (#1163)

* Cleanup EffectFileHandler

* Support Custom Effect Schemas and align EffectFileHandler

* Change back to colon prefix for system effects

* WebSockets - Fix error in handling fragmented frames

* Correct missing colon updates

* Update json with image file location for custom gif effects

* Image effect deletion - considere full filename is stored in JSON

* Correct selection lists indentions

Creating Audio Grabber

Creating Audio Grabber

Creating Audio Grabber.

Successfully began capturing audio in windows. Starting to implement a hard-coded UV Visualizer.

Got Windows DirectSound Implementation working.
Hardcoded basic VU Meter.

Begin working on linux audio grabber implementation.

Finished Linux Draft Implementation.
Minor Mods to windows implementation.

Windows:
 - Free memory used by device id.
 - Prevent starting audio if the grabber is disabled
 - More debug logging

Linux:
 - Prevent starting audio if the grabber is disabled

Added strings to english
Removed "custom" from device selection
Made hard-coded visualizer values configurable.
wrote values to imageData with BGR priority to enable configurable values to be set in RGB format.
created logic to support "Automatic" to enable the API to select the default device.

Add language key for audio in "Remote Control" section.
Removed audio configuration for number of channels. This was causing an error with some devices.

Fixed logic to update capture while its active.
Optimizing code .

UI Tweaks
Destructuring.

Fixed build error on linux.

Commented setVideoMode from AudioGrabber.

Linux Threading changes.

Implementing new API

Continuing to implement audio into new APIs

Fixed Audio Grabber for DirectSound on Windows
Fixed UI for Audio Grabber Configuration
Default AUDIO to off unless specified.

fixed missing #ifdef for audio grabber.

Added logic to calculate a dynamic multiplier from the signal input.

Updating linux api for discovering devices.

Fixed HTML/JS issues with view.
Fixed NPE in Windows.
Disabled setting thread priority in linux.

updated the schema options check to pass through hidden states and commented the change.

Updated grabber start conditions
Updated Audio grabber to instantiate similar to video grabber

Updated windows grabber to set "started" flag to false when shutting down.
Removed "tryStart" to prevent enabling audio capture unnecessarily.

Fixing instance audio grabber device configuration

Added configurable resolution
Reduced tolerance to 5%
Fixed issue where grabber failed for additional instances when "start" was called multiple times.

Fixed resolution calculation

Change averaging algorithm to prevent overflowing the sum.

Updated logic to stop audio grabber when disabled.

Fix integer casting and rounding.

Restart grabber on configuration change.
Fix missing include/grabber/AudioGrabber.
Disable tolerance.

Added configurable tolerance.
Fixed tolerance algorithm.
reset multiplier on configuration change.

Line Endings

Proposed change and questions/request to fix

implementing more of LordGrey's suggestions.

Fix mode for snd_pcm_open. Latest ALSA uses SND_PCM_NONBLOCK instead of SND_PCM_OPEN_NONBLOCK
defaulted multiplier to 0 "auto"
defaulted tolerance to 20%

changed 100 to 100.0 for pixel value percentage calculation to fix value from being 0.

missed a 100 as a double so precision isn't lost during math operation.

Fix Windows grabber and further cleanups

Enable Audio grabbing in standard build

Remove empty methods

Fix audio capture priority setting

Remove unused code

Clean-up default config

Allow additional json-editor attributes

Allow multiple effects and resetting to defaults

Correct default values

Allow to build for Qt < 5.14

Update CodeQL build dependency

Update build dependencies

Remove effect1 placeholder

* Renamed uvMeter to VU Meter (Volume Unit)
- Fixed issues flagged by code scanning bot.

* Moved stop call into destructor of implementing class.

* Removed commented linux audio channel configuration logic.

---------

Co-authored-by: Michael Rochelle <michael@j2inn.com>
2023-02-19 09:36:39 +01:00
LordGrey a1bfa63343
Update schema-webConfig.json 2023-02-17 17:09:12 +01:00
Hyperion-Bot 21c5c6a122 Update de.json (POEditor.com) 2023-02-17 16:12:11 +01:00
LordGrey 1ae37d151e
Dominant Color support (#1569)
* Dominant Color and Mean Color Squared

* Workaround - Suppress empty LED updates

* Add missing text

* Dominant Colors advanced

* Test with fixed initial colors

* Test with fixed initial colors

* Support new processing values via API

* ImageToLED - Add reduced pixel processing, make dominant color advanced configurable

* Updates on Grabber fps setting

* ImageToLedMap - Remove maptype and update test

* Update dynamic cluster array allocation
2023-02-17 16:02:51 +01:00
Hyperion-Bot 093361d3e4 Update sv.json (POEditor.com) 2023-02-17 15:19:10 +01:00
Hyperion-Bot f4391a512b Update es.json (POEditor.com) 2023-02-17 15:19:09 +01:00
Hyperion-Bot f062aa71c5 Update ru.json (POEditor.com) 2023-02-17 15:19:07 +01:00
Hyperion-Bot 6251b58ff9 Update pl.json (POEditor.com) 2023-02-17 15:19:06 +01:00
Hyperion-Bot dea0a17df4 Update it.json (POEditor.com) 2023-02-17 15:19:04 +01:00
Hyperion-Bot 22fa008c4b Update fr.json (POEditor.com) 2023-02-17 15:19:03 +01:00
LordGrey bf418686e3
Fix WLED & Smoothing (#1567)
* WLED - Fix empty segment element in DB

* WLED - Fix to not overwrite on state when not isStayOnAfterStreaming

* Refactor ProviderRestApi, increase default timeout

* Fix Smoothing - Fix empty updates, consider smoothing configs for effects

* UI - Fix not removed priority

* Add missing header and code updates

* setRedirectPolicy was only introduced in Qt 5.9

* Adalight - Align to HyperSerial v9.0.0

* HyperSerial Hyperion with awa protocol v8.0.0

* Correct line-endings
2023-02-12 21:20:50 +01:00
LordGrey a57bcbc2b8
WLED segment streaming support (#1556)
* WLED segment streaming support

* Address CodeQL findings

* WLED - Remove that interim color is shown when WLED is powered off

* Allow LEDDevice to stay on after streaming

* Apply stayOn on segment streamed to

* Fix LED-Matrix Layout: Add Cabling direction selection element again
2023-02-07 08:15:22 +01:00
LordGrey ef7ceb0bbf
Update to Mbed TLS 3.3.0 (#1558)
* Convert mbedtls to subproject

* Align cmake to subproject and mbedtls 3.3.0

* mdebtls 3.3.0

* Add cxx_std_20 for Windows build
2023-02-05 15:19:25 +01:00
dependabot[bot] f327b5063e
Bump actions/download-artifact from 3.0.1 to 3.0.2 (#1562)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-02 19:15:29 +01:00
LordGrey fa7a5b6b56
Various Fixes/Updates (#1549)
* Update FindWindowsSDK.cmake

* cmake support libcec without version

* Ensure Light-Ids are strings

* Fix type - do not have dbus as requried

* Fixing #1544

* Cleanup

* CleanupFix #1551

* Consistently return instance number with JSON replies (#1504)

* hyperion-remote- Fix extracting reply for configGet request

* Qt 6.6 - Fix iterator finds

* Fix test_image2ledsmap

* Ensure window.currentHyperionInstanceName is set, cleanup system/log clipboard report

* Address protobuf cmake warning

* Update License

* Update ChangeLog

* Address CodeQL and clang findings
2023-01-16 12:01:28 +01:00
LordGrey f665f1e1b6
Update to Protocol Buffers 3.21.12 (#1557) 2023-01-15 22:25:39 +01:00
dependabot[bot] e3a82b2890
Bump peter-evans/repository-dispatch from 2.1.0 to 2.1.1 (#1553)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 11:26:58 +01:00
dependabot[bot] 09d1ef4883
Bump SamKirkland/FTP-Deploy-Action from 4.3.2 to 4.3.3 (#1552)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.2...4.3.3)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 11:26:47 +01:00
LordGrey 6fa7bab6f7
Add CodeQL for GitHub code scanning (#1548)
* Create codeql.yml

* Addressing codeql findings
2022-12-27 08:36:10 +01:00
LordGrey 1189f86c1a
Add Suspend/Resume support (#1535)
* Add Suspend/Resume support

* Support Suspend/Resume/Restart via API, UI and Systray

* Support screen lock/unlock scenario

* Handle idle scenario

* Align with fix for #1368

* Update Windows build

* Refactor SuspendHandler to maintain state

* Do not start BG-Effect, if system goes into suspend mode

* Correct Idle and Resume interaction
2022-12-22 12:40:39 +01:00
LordGrey 2217135336
Fixing outstanding issues (#1537)
* Correct stopEnableAttemptsTimer thread affinity

* Restart correctly, if running as service

* Add instance# in API response

* Qt6 updates

* Update fallthrough guide

* Update Compile warning
2022-12-19 14:04:35 +01:00
LordGrey 10b755b2ec
Refactor for Python 3.11 deprecated functions (#1538) 2022-12-19 13:14:35 +01:00
LordGrey c4e681f6b3
Rollover version 2022-12-03 22:22:24 +01:00
LordGrey b109703189 Version 2.0.14 2022-11-27 17:26:54 +01:00
LordGrey a2db590d2a
Fixes - Smoothing, Color-Calibration (#1532)
* Smoothing Remove ouputrate as duplicate to update frequency

* Serial LDEDDevices -Increase writeBlack to overcome issues on high baud rates

* Serial LED-Devices - Support device feedback, show statistics provided by HyperSerial

* Fix - Update Color Calibration on Remote Control when settings saved

* Serial LED-Devices - Support device feedback, show statistics provided by HyperSerial
2022-11-27 15:47:54 +01:00
Hyperion-Bot 46f996310d Update el.json (POEditor.com) 2022-11-26 17:30:36 +01:00
Hyperion-Bot dc8dc566e0 Update tr.json (POEditor.com) 2022-11-26 17:30:35 +01:00
Hyperion-Bot 4d0c3723de Update tr.json (POEditor.com) 2022-11-26 17:23:05 +01:00
Hyperion-Bot 29db3ba593 Update ca.json (POEditor.com) 2022-11-26 17:23:04 +01:00
Hyperion-Bot 6b17123259 Update tr.json (POEditor.com) 2022-11-26 17:23:03 +01:00
Hyperion-Bot 5098a7a11e Update sv.json (POEditor.com) 2022-11-26 17:23:01 +01:00
Hyperion-Bot 905515c46f Update es.json (POEditor.com) 2022-11-26 17:23:00 +01:00
Hyperion-Bot 1d12fe45ca Update de.json (POEditor.com) 2022-11-26 17:22:59 +01:00
Hyperion-Bot 1127087b52 Update fr.json (POEditor.com) 2022-11-26 17:22:58 +01:00
LordGrey 547a976000
New languages -Catalan & Greek (#1533) 2022-11-26 16:44:59 +01:00
xkns 7a31e2bb6d
Oklab: Fix rollover error (#1529)
* oklab: Removed unnecessary type conversions

* oklab: Fixed rollover error in color conversion
2022-11-24 18:15:10 +01:00
LordGrey 80aafa22ec Update for install-qt-action@v3 2022-11-07 22:00:58 +01:00
dependabot[bot] 1848744e6e
Bump peter-evans/repository-dispatch from 2.0.0 to 2.1.0 (#1523)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:12:08 +01:00
dependabot[bot] 97e5e01a27
Bump actions/download-artifact from 3.0.0 to 3.0.1 (#1524)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:54 +01:00
dependabot[bot] b1fe042a9f
Bump geekyeggo/delete-artifact from 1 to 2 (#1525)
Bumps [geekyeggo/delete-artifact](https://github.com/geekyeggo/delete-artifact) from 1 to 2.
- [Release notes](https://github.com/geekyeggo/delete-artifact/releases)
- [Commits](https://github.com/geekyeggo/delete-artifact/compare/v1...v2)

---
updated-dependencies:
- dependency-name: geekyeggo/delete-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:39 +01:00
dependabot[bot] 0ea1522000
Bump crazy-max/ghaction-import-gpg from 5.1.0 to 5.2.0 (#1526)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/v5.2.0/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:13 +01:00
LordGrey 06091b0786 Cleanup APT-builds 2022-11-07 16:57:08 +01:00
dependabot[bot] 49b83abcdf
Bump SamKirkland/FTP-Deploy-Action from 4.3.1 to 4.3.2 (#1517)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.1...4.3.2)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-05 23:01:21 +01:00
LordGrey 9df21b9ddd
Adalight - HyperSerial Support (#1515)
* HyperSerial support

* Migrate Adalight records to new structure

* Serial Devices - Select baud rate and allow providing a custom one
2022-09-30 17:02:40 +02:00
LordGrey e8fc8a9855
Add libjpeg-dev to test LIBJPEG_TURBO_VERSION_NUMBER (#1516) 2022-09-29 20:38:32 +02:00
LordGrey cb76afa4d9
Fix v4l2 MJPEG Processing (#1512)
* Fix MJPEG 3D and transform memory leak

* In 3D Crop only half to maintain ratio

* Support turbojpeg v1 and v2
2022-09-27 08:57:19 +02:00
LordGrey 9d23d9e2d6 Fix APT builds - Readd tarball 2022-09-07 08:12:13 +02:00
dependabot[bot] d219dac36c
Bump SamKirkland/FTP-Deploy-Action from 4.3.0 to 4.3.1 (#1508)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.0...4.3.1)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-06 14:03:20 +02:00
LordGrey 95e53b4720 Fix APT builds 2022-09-06 12:58:29 +02:00
LordGrey 9f6704118e
Fix - Logo should say "Lighting" not "Lightning" (#1510)
* Fix #1505 - Logo should say "Lighting" not "Lightning"

* Address LGTM findings

* Specify an image theme using html, as fragmented approach
2022-09-05 23:53:41 +02:00
Drzony 2008e2c3d7
Fix SEGFAULT in V4L2Grabber (#1503) 2022-08-19 10:22:10 +02:00
xkns 2fb2fc9dd7
Saturation & Brightness/Value Gain using Oklab color space (#1477)
* Imported Oklab reference implementation

* Add Okhsv conversions

* Fixed formatting error

* Add saturation and value gain to schemas

* Add english translation for saturation, value gain

* Created OkhsvTransform

* Make OkhsvTransform configurable

* Apply OkhvsTransform

* Clamped values during transform

* Precalculate isIdentity in OkhsvTransform

* Skip OkhsvTransform if it is the identity function

* Added changelog message

* Allow for full desaturation

* Imported recommended changes by LordGrey

* Fixed typo in constant

* Fixed anti-pattern in ok_color.h

* Correct indentions

* Correct remote-control

* Limited maximum gain settings to practical range

* Renane valueGain to brightnessGain for clarity and understanding

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
2022-08-17 23:26:19 +02:00
LordGrey a2266b177f
Improve Led Device on/off and background effect (#1502)
* Queue On-Off calls

* Do not switch-off LED-device when Background effect is enabled

* Fix LGTM Warnings

* Address LGTM findings
2022-08-14 23:02:30 +02:00
dependabot[bot] e17ce6cd4e
Bump crazy-max/ghaction-import-gpg from 5.0.0 to 5.1.0 (#1501)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:34 +02:00
dependabot[bot] cef70af78d
Bump actions/upload-artifact from 2 to 3 (#1500)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:24 +02:00
dependabot[bot] ec553985b9
Bump actions/checkout from 2 to 3 (#1499)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:13 +02:00
LordGrey c7a1fc6b32
Fix Smoothing configuration (#1476)
* Fix Smoothing out of sync when saving

* Only force Smoothing for new devices

* Re-Add Max/Min Brightness titles

* UI - Fix: Correctly lookup current Instance Name in case instance IDs are not in order

* Fix/Update AtmoOrb Firmware images
2022-07-30 17:32:12 +02:00
LordGrey 8000c3e8b7 Align inputs names to crazy-max/ghaction-import-gpg v5 2022-07-25 07:44:10 +02:00
tuxuser abde114dc4
dependencies: Pin mbedtls to tagged version v3.1.0 (#1494)
* dependencies: Pin mbedtls to tagged version v3.1.0

* Update CMakeLists.txt

Remove extra space

Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2022-07-24 21:54:58 +02:00
dependabot[bot] c47a3054d2
Bump SamKirkland/FTP-Deploy-Action from 4.1.0 to 4.3.0 (#1492)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.1.0 to 4.3.0.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.1.0...4.3.0)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:44 +02:00
dependabot[bot] 19711f71fa
Bump crazy-max/ghaction-import-gpg from 3.1.0 to 5.0.0 (#1491)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 3.1.0 to 5.0.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v3.1.0...v5.0.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:38 +02:00
dependabot[bot] 6946794680
Bump actions/download-artifact from 2.0.10 to 3.0.0 (#1490)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2.0.10 to 3.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2.0.10...v3.0.0)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:29 +02:00
dependabot[bot] 975f5cc309
Bump actions/cache from 2 to 3 (#1489)
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:22 +02:00
dependabot[bot] e25d0a61a6
Bump peter-evans/repository-dispatch from 1.1.3 to 2.0.0 (#1488)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 1.1.3 to 2.0.0.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v1.1.3...v2.0.0)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:12 +02:00
James de41f014ec
Autoupdate github action (#1486)
This will keep stuff like `- uses: actions/checkout@v2` updated (v3 is latest) in Github Actions
2022-07-18 21:43:14 +02:00
Hyperion-Bot a608c336dc Update submodule rpi_ws281x 2022-06-28 02:05:32 +00:00
LordGrey 359618a4ee
Update Ubuntu Builds -2 2022-06-01 08:10:05 +02:00
LordGrey 400fa78679
Update Ubuntu Builds (#1474)
* Update builds for Ubuntu
* Update Compile HowTo
2022-05-31 12:29:49 +02:00
LordGrey ec496ed457
Allow forwarding of flat-/proto buffer input (#1471)
* Typo

* Address compiler Warnings

* Allow forwarding of flat-/proto buffer input
2022-05-29 17:47:08 +02:00
tuxuser 7c76322215 CMake: build-time test - backwards compatibility with older glibc (#1467) 2022-05-25 12:46:46 +02:00
LordGrey fdab2586a5 Rollover version and change-log after release 2022-05-23 11:21:16 +02:00
LordGrey 5dc696b8dc
Update version to 2.0.13 2022-05-22 13:18:53 +02:00
Hyperion-Bot 858e2bbff0 Update sv.json (POEditor.com) 2022-05-22 13:18:02 +02:00
Hyperion-Bot f0c0262dec Update ru.json (POEditor.com) 2022-05-22 13:18:01 +02:00
LordGrey ec71772f98
Fix OSX Bundling (#1465)
* Fix OSX Bundling

* Fix OSX Bundling - Refined

* editorial updates

* Update change log

* Update version references

* Update Link

* Test

* Pass ENABLE_EFFECTENGINE to install code, correct output messages
2022-05-22 08:01:49 +02:00
Hyperion-Bot 2ac8f30bb1 Update sv.json (POEditor.com) 2022-05-19 22:26:57 +02:00
Hyperion-Bot 62990974f5 Update hu.json (POEditor.com) 2022-05-19 22:26:56 +02:00
LordGrey 8f65f34247
Fix #1430 (#1464)
* Fix #1430 - ensure all config and sysinfo response are there before reloading the page

* Fix printout

* fix typo

* PriorityMuxer: Remove emit out of QMutableMapIteratorion

* Test - Build aarch64
2022-05-10 22:29:22 +02:00
imgbot[bot] 988ea97346
[ImgBot] Optimize images (#1463)
*Total -- 476.82kb -> 271.59kb (43.04%)

/doc/development/LedDevice_Flows.png -- 411.85kb -> 213.78kb (48.09%)
/resources/icons/restart.svg -- 0.60kb -> 0.47kb (22.17%)
/cmake/osxbundle/Background.png -- 64.36kb -> 57.34kb (10.92%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>

Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2022-05-10 22:28:44 +02:00
Hyperion-Bot a4b7490ed1 Update sv.json (POEditor.com) 2022-05-09 15:32:16 +02:00
Hyperion-Bot 3dc81e1a0c Update es.json (POEditor.com) 2022-05-09 15:32:15 +02:00
Hyperion-Bot 1311dc9d87 Update pt-br.json (POEditor.com) 2022-05-09 15:32:13 +02:00
Hyperion-Bot 3a15f35740 Update pl.json (POEditor.com) 2022-05-09 15:32:12 +02:00
Hyperion-Bot c7afa35127 Update hu.json (POEditor.com) 2022-05-09 15:32:10 +02:00
Hyperion-Bot 83c5b7fb4a Update da.json (POEditor.com) 2022-05-09 15:32:09 +02:00
Hyperion-Bot d5e796208b Update zh-CN.json (POEditor.com) 2022-05-09 15:32:08 +02:00
Hyperion-Bot e055fb9e15 Update de.json (POEditor.com) 2022-05-01 21:13:37 +02:00
LordGrey e9936e131b
mDNS Support (#1452)
* Allow build, if no grabbers are enabled

* Align available functions to right Qt version

* Update to next development version

* Align available functions to right Qt version

* fix workflows (apt/nightly)

* Disable QNetworkConfigurationManager deprecation warnings

* Initial go on Smart Pointers

* Add Deallocation

* Correct QT_WARNING_DISABLE_DEPRECATED (available since 5.9)

* Cluster Build Variables

* Hyperion Light

* Address build warnings

* Hyperion Light - UI

* Update Protobuf to latest master

* Removed compiler warnings

* Added restart ability to systray

* Correct Protobuf

* Ignore 'no-return' warning on protobuf build

* hyperion-remote: Fix auto discovery of hyperion server

* Fix Qt version override

* Update changelog

* Remove Grabber Components, if no Grabber exists

* Standalone Grabber - Fix fps default

* Remote Control - Have Source Selction accrosswhole screen

* Enable Blackborder detection only, if relevant input sources available

* Enable Blackborder detection only, if relevant input sources available

* Remote UI - rearrange containers

* Checkout

* Fix compilation on windows

* Re-added qmdnsengine template cmake

* chrono added for linux

* Removed existing AVAHI/Bonjour, allow to enable/disable mDNS

* hyperiond macos typo fix

* Fix macOS Bundle build

* Fix macOS bundle info details

* Correct CMake files

* Removed existing AVAHI/Bonjour (2)

* Share hyperion's services via mDNS

* Add mDNS Browser and mDNS for LED-Devices

* Support mDNS discovery for standalone grabbers

* Remove ZLib Dependency & Cleanup

* mDNS - hanle 2.local2 an ".local." domains equally

* Hue - Link discovery to bridge class, workaround port 443 for mDNS discovery

* Fix save button state when switching between devices

* Removed sessions (of other hyperions)

* mDNS Publisher - Simplify service naming

* mDNS refactoring & Forwarder discovery

* mDNS Updates to use device service name

* Consistency of standalone grabbers with mDNS Service Registry

* Merge branch 'hyperion-project:master' into mDNS

* Start JSON and WebServers only after Instance 0 is available

* Remove bespoke qDebug Output again

* MDNS updates and refactor Forwarder

* Minor updates

* Upgrade to CMake 3.1

* typo

* macOS fix

* Correct merge

* - Remove dynamic linker flag from standalone dispmanX Grabber
- Added ability to use system qmdns libs

* Cec handler library will load at runtime

* typo fix

* protobuf changes

* mDNS changes for Windows/macOS

* test window build qmdnsengine

* absolute path to protobuf cmake dir

* Rework Hue Wizard supporting mDNS

* LED-Devices - Retry support + Refactoring (excl. Hue)

* LED-Devices - Refactoring/Retry support Hue + additional alignments

* Address LGTM findings

* Fix CI-Build, revert test changes

* Build Windows in Release mode to avoid python problem

* Correct that WebServerObject is available earlier

* Ensure that instance name in logs for one instance are presented

* Update content LEDs

* Rework mDNS Address lookup

* Fix LED UI

* Fix for non mDNS Services (ignore default port)

* Disbale device when now input is available

* Revert back some updates, ensure last color is updated when switched on

* Handle reopening case and changed IP, port for API-calls

* Add UPD-DDP Device

* WLED support for DDP

* Fix printout

* LEDDevice - Allow more retries, udapte defaults

* LED-Net Devices - Select Custom device, if configured

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-05-01 19:42:47 +02:00
LordGrey 3ef4ebc1a4
New language: Japanese (#1462)
* New language: Japanese

* About - Add new libaries used
2022-05-01 19:17:53 +02:00
Paulchen-Panther f27010088d
WebUI fixes & Draggable LEDs (#1444)
* WebUI fixes & Draggable LEDs

* Correct some keystone issues

* Fix lgtm warnings (thx @Lord-Grey)

* Change of LGTM badge (code quality)

* Log output and LED preview window can be maximized

* Rework

* z-index of the corners corrected

* migrated to animate.css v4.1.1

* Fix collapsing & add gap constraints

* Address LGTM findings

* design refactor

* Typo fix (thx @Lord-Grey)

* Avoid overlap during keystone correction

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2022-04-30 22:20:58 +02:00
Aaron Godfrey f721240e58
Fixed documentation link (#1461) 2022-04-30 20:30:04 +02:00
ShalokShalom 613ae7c922
add hardware support (#1457) 2022-04-27 17:46:36 +02:00
Hyperion-Bot 7f174b2872 Update submodule rpi_ws281x 2022-04-12 01:45:33 +00:00
LordGrey 2388044a93
Fix Iterator issue on Windows (#1450) 2022-04-11 08:54:09 +02:00
Markus addff6f7ef
Dynamic loading of the Dispmanx Grabber (#1440)
* BCM dynamic loading

* cleanup

* better handle start of dispmanx

* set GrabberWrapper pointer to null on exit

* Update DispmanxFrameGrabber.cpp
2022-03-20 14:42:21 +01:00
LordGrey f32db90c12
Fix Effects and refactor Smoothing (#1442) 2022-03-16 09:28:00 +01:00
LordGrey 62829d9bf8
Allow to disable switching LEDs on during startup (#1443) 2022-03-16 09:27:37 +01:00
Paulchen Panther c75c98e252 Update flatbuffers submodule 2022-03-15 20:41:28 +01:00
LordGrey 3e8c6f3b25
Update UI JS Libraries (#1441)
* Update Gijgo to 1.9.13

* Update DOMPurify 2.3.6

* Update Marked 4.0.12

* Update metismenu 3.0.7

* Issue Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)

* Add Yeelight W3 MultiColor

* Update to jquery 3.6.0
2022-03-13 16:38:28 +01:00
Paulchen Panther f9a5772aa5 Correction of the flatbuffer submodule
Automatic update only of submodule rpi_ws281x
2022-03-09 17:43:45 +01:00
Hyperion-Bot 4c472d50ca Update submodules 2022-03-09 01:23:58 +00:00
Paulchen Panther 15015a4257 Update submodules automatically at midnight 2022-03-08 20:19:01 +01:00
LordGrey 320ec00108
Quick Fix - SPI Device is excluded from build 2022-03-06 08:14:13 +01:00
LordGrey 5cd3881067
Hyperion Light updates (#1434)
* Hyperion Light - Allow hyperion remote as component

* Fix missing guard

* NSIS installation via Choco removed because already installed on windows server 2022

* Correct CMAKEList defaults

* Align package creation with build rules for components

* Fix Copy/Paste issue

Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-03-05 15:18:01 +01:00
tuxuser 14b6a114bb
libsrc/utils: Do not catch SIGILL signal (#1435)
libcrypto performs cpu feature checks on ARM platforms, by calling `OPENSSL_cpuid_setup`.
In there, it tries to call various instructions and traps `illegal instructions` aka. non-existing instructions itself.

However, as hyperion.ng also tries to trap all signals, the call inside libcrypto is propagated and hyperiond gets killed by itself.

This patch lets execution proceed, even when `SIGILL` occurs.

References:
- libcrypto OPENSSL_cpuid_setup: 954f45ba4c/crypto/armcap.c (L183)
2022-03-02 19:56:12 +01:00
LordGrey 160c5d0b3a
UI and Web updates (#1421)
* Stop Web-Capture when priority changes

* Remote control UI: Treat duration=0 as endless

* Stop Web-Capture on non-Image events changes

* LED Matrix Layout - Support vertical cabling direction

* Additional Yeelight models

* Treat http headers case insensitive

* Update change log

* Treat http headers case insensitive (consider Qt version)

* API - Consider provided format when setImage

* UI - Support Boblight configuration per LED instance

* Support multiple Boblight clients with different priorities

* Update changelog

* Simplify isGUI rules allowing for QT only builds

* Sysinfo: Fix indents

* LED-Devices: Show warning, if get properties failed

* Qt-Grabber: Fixed position handling of multiple monitors

* LED layout: Remove indention limitations

* Yeelight: Test YLTD003

* hyperion-remote: Provide image filename to muxer/UI

* Refactor PriorityMuxer and related

* Temp: Build under Windows 2019

* Yeelight: Remove YLTD003 as it is not working without additional changes

* Test Windows-latest with out removing redistributables/new MSVC

* correct workflows

* correct CI script

* Build Windows with Qt 5.15.2

* Priority Muxer: Updates after testing

* Fix Typo

* Update BGHandler

* QTGrabber - Reactivate windows code to avoid cursor issues

* Emit prioritiesChanged when autoselect was changed by user

Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-02-22 20:58:59 +01:00
Hyperion-Bot 0a3df596cf Update hu.json (POEditor.com) 2022-02-20 10:49:04 +01:00
Hyperion-Bot 51a1044787 Update sv.json (POEditor.com) 2022-02-15 20:58:16 +01:00
Hyperion-Bot f2d0857798 Update es.json (POEditor.com) 2022-02-15 20:58:15 +01:00
Hyperion-Bot 518e15a129 Update ru.json (POEditor.com) 2022-02-15 20:58:14 +01:00
Hyperion-Bot a14d9d1af5 Update pt-br.json (POEditor.com) 2022-02-15 20:58:12 +01:00
Hyperion-Bot 7651c71b63 Update pl.json (POEditor.com) 2022-02-15 20:58:10 +01:00
LordGrey 5078688dc8
Hyperion Light 2 (#1428)
* Hyperion Light - Have EffectEngine as component

* Hyperion light - Build switches for LED Devices (Serial, Network)

* Fix file uri generation

* Fix missing guard for Windows

* Fix file uri generation

* Update jsonschema and checkschema

* Allow to provide cmake build args to docker build
2022-02-11 20:36:15 +01:00
Paulchen Panther 9e4b58d5c6 Update submodule rpi_ws281x 2022-02-09 19:45:36 +01:00
Paulchen Panther da64ab58d5 update license and add privacy police 2022-02-08 17:23:54 +01:00
Markus a8342b4a6a
Reference reusable workflow locally 2022-01-27 21:14:04 +01:00
LordGrey 2efc03b612
Logging enhancement / fixes (#1419)
* Instance in logging output

* Fix: Trigger that previous log lines are shown in the Log UI
2022-01-22 17:48:03 +01:00
Markus 98654e48f6
Flatbuffer/Protobuf now able to receive rgba data (#1399)
* Flatbuffer/Protobuf now able to receive rgba data

* Proto/Flat schema comment added

* Prevent diveded by zero

* Address LGTM findings

* Fix EncoderThread & cleanup

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
2022-01-09 17:23:50 +01:00
LordGrey 2f573a117f
Hyperion "Light", Build improvements and minor fixes (#1400)
* Allow build, if no grabbers are enabled

* Align available functions to right Qt version

* Update to next development version

* Align available functions to right Qt version

* fix workflows (apt/nightly)

* Disable QNetworkConfigurationManager deprecation warnings

* Initial go on Smart Pointers

* Add Deallocation

* Correct QT_WARNING_DISABLE_DEPRECATED (available since 5.9)

* Cluster Build Variables

* Hyperion Light

* Address build warnings

* Hyperion Light - UI

* Update Protobuf to latest master

* Removed compiler warnings

* Added restart ability to systray

* Correct Protobuf

* Ignore 'no-return' warning on protobuf build

* hyperion-remote: Fix auto discovery of hyperion server

* Fix Qt version override

* Update changelog

* Remove Grabber Components, if no Grabber exists

* Standalone Grabber - Fix fps default

* Remote Control - Have Source Selction accrosswhole screen

* Enable Blackborder detection only, if relevant input sources available

* Enable Blackborder detection only, if relevant input sources available

* Remote UI - rearrange containers

* - QT5/6 path for arm64 added
- Remove ZLib Dependency
- Fix macOS bundle info details
- Cleanup

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-01-07 14:47:51 +01:00
Jamie Burchell c38ec60208
Use direct URL of GIF file rather than HTML page (#1392) 2021-12-14 07:57:11 +01:00
LordGrey fcd0fb0c52
Fix #967 (#1378)
* Fix #967

* Start Smoothing in pause mode to avoid resource usage, if hyperion is started without active priority

* Update Changelog
2021-12-14 07:55:34 +01:00
LordGrey 442fab9c59
Fix/Workaround set-music error when music is already off (#1379)
* Fix/Workaround set-music error when music is already off

* Do not ignore error when setting music mode
2021-12-14 07:54:53 +01:00
Paulchen Panther a0d4efc10d fix workflows (apt/nightly) 2021-12-13 20:07:45 +01:00
LordGrey 17582ac38a
Correct isGUIApp tests 2021-12-04 18:00:20 +01:00
Markus 7840317cc0 Readme slightly improved 2021-12-03 12:17:43 +00:00
LordGrey e3b494428a
Fix standalone grabbers (#1384)
* Fix too much copy/paste
* Fix typo
* Commandlineoptions: Additional error details for Int and Double ranges
* Standalone grabbers: Show fps range on error, fix default host address
2021-11-29 18:51:03 +01:00
Markus 926a58de9c README dark/light mode 2021-11-24 18:32:02 +00:00
Markus df149583d3 Release 2.0.12 2021-11-21 13:26:17 +00:00
LordGrey 72d99a1121
Prep 2.0.12 Release (#1377)
* APA102 - Migrate ColorOrder to align with fix
* Address LGTM findings
* Updated Changelog with updates since last release
2021-11-20 16:20:01 +01:00
LordGrey 7311c3e424
Support MBEDTLS 3 (#1374)
* Support MBEDTLS 3

* mbedTLS 2 & 3 support (incl. System libs)

Co-authored-by: Markus <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-18 21:58:56 +01:00
Hyperion-Bot f156f52123 Update de.json (POEditor.com) 2021-11-18 21:53:51 +01:00
Hyperion-Bot c7e91c8c6d Update hu.json (POEditor.com) 2021-11-18 21:51:25 +01:00
Hyperion-Bot a5f970b975 Update da.json (POEditor.com) 2021-11-18 21:51:24 +01:00
LordGrey d395e0a3b1
New languages - Danish & Hungarian (#1376)
* New languages, Danish and Hungarian

* Yeelight Wizard - Ensure correct hostname
2021-11-18 21:48:11 +01:00
Hyperion-Bot ac941aebe1 Update de.json (POEditor.com) 2021-11-18 20:54:00 +01:00
Hyperion-Bot 06d72adbca Update sv.json (POEditor.com) 2021-11-18 20:42:03 +01:00
Hyperion-Bot 6181360785 Update es.json (POEditor.com) 2021-11-18 20:42:02 +01:00
Hyperion-Bot d8cb6b5479 Update ru.json (POEditor.com) 2021-11-18 20:42:00 +01:00
Hyperion-Bot fbf6886dfe Update pl.json (POEditor.com) 2021-11-18 20:41:59 +01:00
Hyperion-Bot 4c7ce6e509 Update nb.json (POEditor.com) 2021-11-18 20:41:58 +01:00
Hyperion-Bot 7d33d93b32 Update de.json (POEditor.com) 2021-11-18 20:41:57 +01:00
Hyperion-Bot 3c361cb2a2 Update fr.json (POEditor.com) 2021-11-18 20:41:55 +01:00
Markus dd3229d582
Nightly build fix 2021-11-18 17:18:34 +01:00
LordGrey 80ec037832
SettingsManager - Fix Migration Scenario 2021-11-17 22:38:15 +01:00
LordGrey ad293b2fb6
IPv6 support (#1369)
* hyperion-remote - Support IPv6

* LEDDevices - Remove IPv6 limitations

* Separate JsonEditorHostValidation

* Standalone grabbers & JSON/Flatbuffer forwarder: IPv6 support

* remote: Fix setting multiple colors via Hex, add standard logging

* IPv6 Updates -Add db migration activities

* Addressing non-Windows compile issues

* Code cleanup, address clang feedback

* Update address (hostname, IPv4/IPv6) help text

* Apply migration steps to "old" configurations imported

* Show user the UI-Url, if hyperion is already running, address clang findings

* Windows Cmake OpenSLL output

* Minor Text update
2021-11-17 21:30:43 +01:00
Markus b33466d392
APT update / Submodule updates / added updateHyperionUser script again (#1366)
* Test new APT builds

* test build

* final changes for bookworm and jammy

* - Include updateHyperionUser script again
- Update package dependencies for APT builds

* Installation guide updated

* Removed alpha notes and added arm64 APT builds

* update docker-compile script

* Overwrite CMAKE_SYSTEM_PROCESSOR on Windows builds
2021-11-17 20:35:28 +01:00
LordGrey 67280b8566
Razor Chroma Support - Initial version (#1054)
* Razor Chroma Support - Initial version

* Address clang and lgtm findings

* Razer Fixes

* Merge branch 'master' into Razer_Chroma_Support

# Conflicts:
#	assets/webconfig/i18n/en.json
#	assets/webconfig/js/content_leds.js
#	libsrc/leddevice/dev_net/ProviderRestApi.cpp
#	libsrc/leddevice/dev_net/ProviderRestApi.h

* Corrections

* Set default config for Razer

* Simplify

* Razer - Support individual LEDs and have default layout per device type

* Differentiate between HWLEDCount and LayoutLEDCount

* Revert "Differentiate between HWLEDCount and LayoutLEDCount"

This reverts commit b147b215a5.

* Correct LGTM finding

* Disable verbose mode
2021-11-17 20:34:49 +01:00
LordGrey 25d79a9f3f
Qt6 support (#1363)
* Initial Qt6 config

* Change Package order to reingfence missing packages

* Update to QT 6.2.0

* Qt 6.2.0 updates

* macOS fix

* Simplify handling QT5 & Qt6 in parallel

* Updates for Windows

* Fix macos build

* macOS linker fix

* General support of QTDIR, update docu

* MaxOS add default qt directories

* Fix merge typo

* Update default CMakeSettings.json with installation path options

* Add additional libs required by Qt6 to CompileHowTo

* Fix Qt5 items

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-16 18:12:56 +01:00
LordGrey 3b1ca20b10
Update restart.html 2021-11-07 18:11:17 +01:00
LordGrey b8bb1adbba
Update docker-compile.sh 2021-11-07 17:47:01 +01:00
LordGrey b0c529c05d
EffectModule - Fix 2021-11-04 09:40:12 +01:00
LordGrey 954112a88e
APA102 protocol fix (#1352) (#1361)
* Fix APA102 protocoll

* Minor clean-ups

* Revert updates
2021-10-28 19:54:54 +02:00
Markus ba32b875ab nightly build fix 2021-10-26 17:55:33 +00:00
LordGrey e51a42dc14
Update content_index.js (#1360) 2021-10-20 21:21:25 +02:00
Markus 8b1267d059
Fixed 3rd Party License on About Page 2021-10-17 21:44:05 +02:00
Markus 3761ff47d2 Alpha phase is completed. New version 2.0.12 2021-10-17 11:29:20 +00:00
Markus a1dee08195
Drag'n Drop for macOS / Fix #1109 / ... (#1353) 2021-10-16 14:07:36 +02:00
LordGrey c9a7258160
Fix API Subscription initialisation (#1354)
* Fix #1352,#1351

* Fix/Add details on client address
2021-10-16 13:55:23 +02:00
LordGrey 532ac7e330
Fix Database migration version handling (#1356) 2021-10-16 13:54:18 +02:00
Markus ac1dad77e3
Run nightly build not on forks 2021-10-10 12:24:03 +02:00
Markus 23470ac90a Commit check for nightly build workflow 2021-10-09 11:31:07 +00:00
Markus 084e28f0ca Commit check for nightly builds 2021-10-09 11:10:55 +00:00
Markus 788e843846 Changed workflow process
Added nightly build workflow for APT
Debian prerm script corrected
2021-10-08 20:29:58 +00:00
LordGrey 4db8afda87
Update CHANGELOG.md 2021-10-06 09:38:57 +02:00
Markus 2c79656b4a [HotFix] Release 2.0.0-alpha.11 2021-10-05 21:22:19 +00:00
Markus 672354fb5c
Added sponsor button to Repository 2021-10-03 14:46:26 +02:00
LordGrey a6b63d8e91
Update CHANGELOG.md 2021-10-03 11:57:32 +02:00
Paulchen-Panther 17e8c6bca0 Release 2.0.0-alpha.10.1 2021-10-03 11:30:02 +02:00
LordGrey d5a71f21fe
Update CHANGELOG.md 2021-10-03 10:39:48 +02:00
Hyperion-Bot ef375886e1 Update de.json (POEditor.com) 2021-10-03 09:07:24 +02:00
hissingshark 9e8740b6df
Fix libqt5sql5-sqlite packaging dependency. (#1307) 2021-10-02 23:06:36 +02:00
Markus eb96553975
Systemd changes | root script | URL support for gif effects (#1319)
* Systemd changes and URL option for Gif Effects
* Add grayscale to gif effect
* WebUI adjustments
* Rename version to .version
* Copy runHyperionAsRoot.sh to rpi packages
* Pack script into all unix packages
* Start hyperion only after network is available
* Snap builds removed due to poor server connection
* Flexible updateHyperionUser.sh
* updateHyperionUser script entered in the package
* Print help on none sudo execute
* Corrected embedded Python location
* Replacement for the QWindowsScreen grabWindow function
* Updated to latest 2.x mbedtls version 2.27

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
2021-10-02 18:02:52 +02:00
LordGrey f269268def
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
2021-09-30 18:06:23 +02:00
Hyperion-Bot af24e6d623 Update pl.json (POEditor.com) 2021-09-30 13:13:23 +02:00
Hyperion-Bot 785ad10c01 Update pl.json (POEditor.com) 2021-09-30 13:12:46 +02:00
Hyperion-Bot 90e8765910 Update ru.json (POEditor.com) 2021-09-30 11:21:38 +02:00
Hyperion-Bot e6a3396085 Update zh-CN.json (POEditor.com) 2021-09-30 11:21:37 +02:00
Hyperion-Bot d0b40b629a Update es.json (POEditor.com) 2021-09-29 23:20:27 +02:00
LordGrey 2a10ef955d
Limit maximum LEDs number for WLED and UDP-Raw (#1334)
* Have maximum 490 LEDs configured for WLED and UDP-Raw

* Add additional Warning
2021-09-20 09:36:59 +02:00
LordGrey 8134917c51
Correct PR1312 and LEDSim fixes (#1336)
* Revert Refactor/Optimization of PR1312

* LED Layout - Only update preview image when visible

* Revert Debug updates

* Correct Refactor/Optimization of PR1312

* LedSim: Do not stream LED data when not required, LedS-im/Layout: Sync on video streaming

* Remove initial switch to instance 0 during API init
2021-09-20 08:44:09 +02:00
LordGrey da49f25b4e
Do not limit priorities for Boblight (#1269) (#1298)
* Do not limit priorities for Boblight (#1269)

* Boblight - Allow to exclude component from build

* Fix merge

* Amlogic - Correct Pixelformat reference

* Remove "wrong" Amlogic ifdef, which was not working before
2021-09-15 10:32:19 +02:00
LordGrey 8a785e70c8
LED-Device updates (#1315)
* SPI Fix - Free allocated memory in case of invert

* Remove development statement

* UI updates

* Minor corrections

* Tpm2net Fix - Free allocated memory

* LGTM Finding

* Add config directory and user type to SysInfo

* WS281x - Ensure that device runs with root priviliges

* WS281x - Update DMA defauls as per rpi_ws281x recommendation

* Support Sysinfo for Qt < 5.10

* Address LGTM finding
2021-09-15 10:31:56 +02:00
Markus 8fb3d76b9c
[Hotfix] reuse local SSDP address (Issue #1324) 2021-09-07 17:50:51 +02:00
LordGrey b9d5178e55
Update content_leds.js
Add missing set value for given host
2021-09-02 16:41:52 +02:00
LordGrey 1dfcd4d8ec
Delete 20210820_LoadInstanceConfig.zip 2021-08-31 22:58:09 +02:00
Hyperion-Bot 5fe1dbb67c Update es.json (POEditor.com) 2021-08-31 11:57:29 +02:00
Hyperion-Bot 9c830b22a6 Update pl.json (POEditor.com) 2021-08-31 11:57:28 +02:00
Hyperion-Bot 87d73bd040 Update cs.json (POEditor.com) 2021-08-31 11:57:27 +02:00
LordGrey 22a39f1b47
Update Bootstrap libraries (#1313)
* Fix - Priorities do not clear with Colorpicker open

* Update bootstrap-select
2021-08-31 10:56:50 +02:00
LordGrey 1ef3a106f1
Smoothing Fixes, Optimizations (#1295)
* Fix #1098, Removed Continuous Output as being obsolete

* Pause output processing when no input source is available

* Only show configurable options for Linear smoothing
2021-08-31 10:56:06 +02:00
LordGrey f0bd38d473
Nanoleaf Updates (#1299)
* Discover additional Nanoleaf devices

* Fix Nanoleaf not turning on

* Added LGTM configuration file

* Allow to pass QJsonObject as payload for put

* Nanoleaf - Support Restore State & Overwrite Brightness

* Removed because this is already included

Co-authored-by: Markus <16664240+Paulchen-Panther@users.noreply.github.com>
2021-08-31 10:55:49 +02:00
LordGrey 12cdd1d58a
Streamline API calls from UI (incl. Fix #1311, #1314) (#1312)
* JSONeditor: Disable watchers when updating selections dynamically

* Refactor - Load last instance config when loading UI page

* LED Devices - Notify getproperties watchers for configured hostname

* Remove unused variable

* Fix #1314 - Additional classic & matrix configuration items were not saved
2021-08-31 10:55:32 +02:00
Hyperion-Bot 42e7f85864
LGTM configuration for c++ added 2021-08-30 18:13:00 +02:00
Serhan S 5c233bc8ec
Update Installation.md
another typo, thx to @Paulchen-Panther
2021-08-25 18:17:19 +02:00
Markus dfb4766f95
Hi-Res Mockup uploaded 2021-08-22 15:17:23 +02:00
Serhan S a30e3237cc
Update Installation.md
Typo fix
2021-08-20 18:04:04 +02:00
Serhan S ce368aa84c
Update Installation.md
Updated apt instructions
2021-08-20 13:13:12 +02:00
LordGrey bd3e12d3ac
Fix 1292 - Avoid XSS (#1297)
* Fix 1292 - Avoid XSS

* Fix XSS on EffectConfiguration
2021-08-19 08:52:17 +02:00
Markus 0227694d20
Mockup update (thanks again to @mkcologne) 2021-08-09 16:41:51 +02:00
Markus fa957aeeda
Mockup updated (thanks to @mkcologne) 2021-08-07 18:55:46 +02:00
LordGrey d3a912f014
Fix #1276 (#1279) 2021-07-31 20:57:08 +02:00
LordGrey d3c8e6da4e
Amlogic updates (#1285)
* Limit Amlogic grabber to 30fps

* Exclude FB Grabber on Amlogic platform, as FB is included in Amlogic Grabber

* Amlogic Grabber - Have continuous feed even when paused. Have no delay when pausing/unpausing

* Revert back to CAP_FLAG_AT_END capture method

* Clarification on Capture Frequency
2021-07-31 20:56:45 +02:00
Markus 5ef8c23ba0
typo in installation.md 2021-07-18 19:23:22 +02:00
LordGrey 76cdfd3638
Update CHANGELOG.md 2021-07-18 13:13:21 +02:00
Markus 9cb01dc49b
Update CHANGELOG.md 2021-07-18 01:02:44 +02:00
Paulchen-Panther 4f3c853263 Release 2.0.0-alpha.10 2021-07-17 22:39:22 +02:00
Hyperion-Bot 3476409ed4 Update es.json (POEditor.com) 2021-07-17 20:57:44 +02:00
Hyperion-Bot e523b6ef8d Update de.json (POEditor.com) 2021-07-17 20:57:43 +02:00
LordGrey 10b6317777
Prepare for Alpha.10 (#1272)
* Update Changelog for Alpha.10

* Address lgtm findings

* Correct some texts

* Improve Password handling

* search for turbojpeg only if MF is enabled

* Chnagelog updates

* Fix LED layout overwrite for previously save LEDs

* LED Device- Fix default selection for selected network devices

* Sreengrabber - Select default fps

* Update database migration steps

Co-authored-by: Markus <16664240+Paulchen-Panther@users.noreply.github.com>
2021-07-17 20:55:16 +02:00
LordGrey a25f0698d7
Update LICENSE 2021-07-17 09:26:14 +02:00
Markus 22a3e3fb20 Updated rpi_ws281x submodule to latest upstream 2021-07-16 19:16:01 +00:00
Hyperion-Bot 9968c0f3e3 Update vi.json (POEditor.com) 2021-07-15 13:19:37 +02:00
Hyperion-Bot 4bc16c2348 Update tr.json (POEditor.com) 2021-07-15 13:19:35 +02:00
Hyperion-Bot 30a1dc7ed5 Update sv.json (POEditor.com) 2021-07-15 13:19:34 +02:00
Hyperion-Bot 5a334d9c56 Update es.json (POEditor.com) 2021-07-15 13:19:33 +02:00
Hyperion-Bot f08170c074 Update ro.json (POEditor.com) 2021-07-15 13:19:32 +02:00
Hyperion-Bot 0beca22cb8 Update pt-br.json (POEditor.com) 2021-07-15 13:19:31 +02:00
Hyperion-Bot 5005c2b998 Update pt.json (POEditor.com) 2021-07-15 13:19:29 +02:00
Hyperion-Bot a7846396fd Update pl.json (POEditor.com) 2021-07-15 13:19:28 +02:00
Hyperion-Bot 9ce989cea8 Update nb.json (POEditor.com) 2021-07-15 13:19:27 +02:00
Hyperion-Bot c4cd5d8f08 Update it.json (POEditor.com) 2021-07-15 13:19:26 +02:00
Hyperion-Bot a488a68f51 Update de.json (POEditor.com) 2021-07-15 13:19:24 +02:00
Hyperion-Bot 790999e349 Update fr.json (POEditor.com) 2021-07-15 13:19:23 +02:00
Hyperion-Bot 56194f6fb4 Update nl.json (POEditor.com) 2021-07-15 13:19:21 +02:00
Hyperion-Bot 2e60657479 Update cs.json (POEditor.com) 2021-07-15 13:19:20 +02:00
imgbot[bot] 888848a1e7
[ImgBot] Optimize images (#1271) 2021-07-14 21:01:00 +02:00
Markus c135d91986
Media Foundation/V4L2 grabber ... (#1119)
* - New Media Foundation grabber
- JsonAPI available grabber fix
- commented json config removed

* Added libjpeg-turbo to dependencies

* Fix OSX build
Removed Azure Pipelines from build scripts

* Remove Platform from Dashboard

* Correct Grabber Namings

* Grabber UI improvements, generic JSONEditor Selection Update

* Active grabber fix

* Stop Framebuffer grabber on failure

* - Image format NV12 and I420 added
- Flip mode
- Scaling factor for MJPEG
- VSCode (compile before run)
- CI (push) dependency libjpeg-turbo added

* Refactor MediaFoundation (Part 1)

* Remove QDebug output

* Added image flipping ability to MF Grabber

* fix issue 1160

* -Reload MF Grabber only once per WebUI update
- Cleanup

* Improvements

* - Set 'Software Frame Decimation' begin to 0
- Removed grabber specific device name from Log
- Keep pixel format when switching resolution
- Display 'Flip mode' correct in Log
- BGR24 images always flipped

* Refactor MediaFoundation (Part 2)

* Refactor V4L2 grabber (part 1) (#62)

* Media Foundation grabber adapted to V4L2 change

* Enable Media Foundation grabber on windows

* Have fps as int, fix height typo

* Added video standards to JsonAPI output

* Error handling in source reader improved

* Fix "Frame to small" error

* Discovery VideoSources and Dynamically Update Editor

* Hide all element when no video grabber discovered, upate naming

* Do not show unsupported grabbers

* Copy Log to Clipboard

* Update Grabber schema and Defaults

* Update access levels and validate crop ranges

* Height and width in Qt grabber corrected

* Correct formatting

* Untabify

* Global component states across instances

* Components divided on the dashboard

* refactor

* Fix Merge-issues

* Database migration aligning with updated grabber model

* Align Grabber.js with new utility functions

* Allow editor-validation for enum-lists

* Handle "Show Explainations scenario" correctly

* Grabber - Ensure save is only possible on valid content

* Dashboard update + fix GlobalSignal connection

* Ensure default database is populated with current release

* Correct grabber4L2 access level

* Display Signal detection area in preview

* Write Hyperion version into default config on compiling.

* Create defaultconfig.json dynamically

* WebUI changes

* Correct grabber config look-ups

* Refactor i18n language loading

* Fix en.json

* Split global capture from instance capture config

* Update grabber default values

* Standalone grabber: Add --debug switch

* Enhance showInputOptionsForKey for multiple keys

* Add grabber instance link to system grabber config

* Only show signal detection area, if grabber is enabled

* Always show Active element on grabber page

* Remote control - Only display gabber status, if global grabber is enabled

* WebUI optimization (thx to @mkcologne)
Start Grabber only when global settings are enabled
Fixed an issue in the WebUI preview

* V4L2/MF changes

* Jsoneditor, Correct translation for default values

* Refactor LED-Device handling in UI and make element naming consistent

* MF Discovery extended

* Fix LGTM finding

* Support Grabber Bri, Hue, Sat and Con in UI, plus their defaults

* Concider Access level for item filtering

* Concider Access level for item filtering

* Revert "Concider Access level for item filtering"

This reverts commit 5b0ce3c0f2.

* Disable fpsSoftwareDecimation for framegrabber, as not supported yet

* JSON-Editor- Add updated schema for validation on dynamic elements

* added V4L2 color IDs

* LGTM findings fix

* destroy SR callback only on exit

* Grabber.js - Hide elements not supported by platform

* Fixed freezing start effect

* Grabber UI - Hardware controls - Show current values and allow to reset to defaults

* Grabber - Discovery - Add current values to properties

* Small things

* Clean-up Effects and have ENDLESS consistently defined

* Fix on/off/on priority during startup, by initializing _prevVisComp in line with background priority

* Add missing translation mappings

* DirectX Grabber reactivated/ QT Grabber size decimation fixed

* typo in push-master workflow

* Use PreciseTimer for Grabber to ensure stable FPS timing

* Set default Screencapture rate consistently

* Fix libjpeg-turbo download

* Remove Zero character from file

* docker-compile Add PLATFORM parameter, only copy output file after successful compile

* Framebuffer, Dispmanx, OSX, AML Grabber discovery, various clean-up and consistencies across grabbers

* Fix merge problem - on docker-compile Add PLATFORM parameter, only copy output file after successful compile

* Fix definition

* OSXFRameGrabber - Revert cast

* Clean-ups nach Feedback

* Disable certain libraries when building armlogic via standard stretch image as developer

* Add CEC availability to ServerInfo to have it platform independent

* Grabber UI - Fix problem that crop values are not populated when refining editor rage

* Preserve value when updating json-editor range

* LEDVisualisation - Clear image when source changes

* Fix - Preserve value when updating json-editor range

* LEDVisualisation - Clear image when no component is active

* Allow to have password handled by Password-Manager (#1263)

* Update default signal detection area to green assuming rainbow grabber

* LED Visualisation - Handle empty priority update

* Fix yuv420 in v4l2 grabber

* V4L2-Grabber discovery - Only report grabbers with valid video input information

* Grabber - Update static variables to have them working in release build

* LED Visualisation - ClearImage when no priorities

* LED Visualisation - Fix Logo resizing issue

* LED Visualisation - Have nearly black background and negative logo

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2021-07-14 20:48:33 +02:00
Markus b0e1510a78
websocket crashes fixed (#1258) 2021-07-14 20:22:13 +02:00
Markus 8dc4ff9a34
Debian/Ubuntu APT (#1265)
* APT repository

* Run workflows on any branch

* Switched to Hyperion GHCR

* Fix typo

* Rewrite installation steps

* Spelling fixed

* Typo fix

* OSX Icon changed
2021-07-14 20:21:29 +02:00
LordGrey f98938020a
Add Supported Platforms documention (#1257)
* Add Supported Platforms docu

* Update SupportedPlatforms.md

* Update SupportedPlatforms.md

* Rearrange development related documentation
2021-07-13 21:07:48 +02:00
Jumper78 a777620d2f
Add British flags to the Flag effect (#1264)
* add britisch flags to flag.py

adding the flags of England, Scotland and the United Kingdom to flag.py

* adding British flags to flag.schema.json

adding the flag of Great Britain (gb), England (gb-eng) and Scotland (gb-sct) to the GUI

* added flag updates to CHANGELOG.md

mentioning the Britisch flags as well as Cameroon and Russia
2021-07-13 21:07:30 +02:00
LordGrey 6d004240de
Only copy packages, if packages are build 2021-06-14 20:48:48 +02:00
LordGrey a9fb5fa359
Fix Build & Deploy Path
Have build and deploy paths consistently under the source directory, regardless of remote or local build
2021-06-14 20:22:13 +02:00
LordGrey 4c2806f966
Serial-Devices - Add udev support (#1246) 2021-05-23 19:11:05 +02:00
LordGrey 9199aa8216
Fix #1216 (#1250) 2021-05-20 19:40:05 +02:00
Paulchen Panther 0d826570bd Update external dependency rpi_ws281x to master 2021-05-19 20:07:34 +02:00
Hyperion-Bot 599d70243c Update en.json (POEditor.com) 2021-05-16 18:36:19 +02:00
LordGrey feec395756
Minor Updates (#1241) 2021-05-16 18:33:24 +02:00
imaprogrammer 016855898a
WebUI English grammar improvement (#1244)
Made the capitalization of "LED" more consistent
2021-05-16 18:33:07 +02:00
Hyperion-Bot 03afc0db8f Update vi.json (POEditor.com) 2021-05-02 15:23:11 +02:00
Hyperion-Bot 43159a9373 Update tr.json (POEditor.com) 2021-05-02 15:23:10 +02:00
Hyperion-Bot cbe309f5b8 Update sv.json (POEditor.com) 2021-05-02 15:23:08 +02:00
Hyperion-Bot 0b27e8c963 Update es.json (POEditor.com) 2021-05-02 15:23:07 +02:00
Hyperion-Bot a60e18d12b Update ro.json (POEditor.com) 2021-05-02 15:23:06 +02:00
Hyperion-Bot 4c5b506ace Update pt-br.json (POEditor.com) 2021-05-02 15:23:05 +02:00
Hyperion-Bot eb09d680b6 Update pt.json (POEditor.com) 2021-05-02 15:23:04 +02:00
Hyperion-Bot a34d5d609f Update pl.json (POEditor.com) 2021-05-02 15:23:03 +02:00
Hyperion-Bot bf4b951f55 Update nb.json (POEditor.com) 2021-05-02 15:23:02 +02:00
Hyperion-Bot dafd168b6a Update it.json (POEditor.com) 2021-05-02 15:23:00 +02:00
Hyperion-Bot 53fa0a6d63 Update de.json (POEditor.com) 2021-05-02 15:22:59 +02:00
Hyperion-Bot 91d52ca8ba Update fr.json (POEditor.com) 2021-05-02 15:22:58 +02:00
Hyperion-Bot a3b3e50eb9 Update en.json (POEditor.com) 2021-05-02 15:22:57 +02:00
Hyperion-Bot 802dc56382 Update nl.json (POEditor.com) 2021-05-02 15:22:56 +02:00
Hyperion-Bot f662da589e Update cs.json (POEditor.com) 2021-05-02 15:22:55 +02:00
Hyperion-Bot 6e3179ae90 Update vi.json (POEditor.com) 2021-05-02 13:34:35 +02:00
Hyperion-Bot adb11437e1 Update tr.json (POEditor.com) 2021-05-02 13:34:34 +02:00
Hyperion-Bot 247f1c4505 Update sv.json (POEditor.com) 2021-05-02 13:34:33 +02:00
Hyperion-Bot dc8629251a Update es.json (POEditor.com) 2021-05-02 13:34:32 +02:00
Hyperion-Bot 07cc9bc74f Update ro.json (POEditor.com) 2021-05-02 13:34:30 +02:00
Hyperion-Bot 9ed12929d2 Update pt-br.json (POEditor.com) 2021-05-02 13:34:29 +02:00
Hyperion-Bot 7e71dc93b0 Update pt.json (POEditor.com) 2021-05-02 13:34:28 +02:00
Hyperion-Bot dc7bef79b0 Update pl.json (POEditor.com) 2021-05-02 13:34:27 +02:00
Hyperion-Bot ffa072ae3a Update nb.json (POEditor.com) 2021-05-02 13:34:26 +02:00
Hyperion-Bot cc98def67e Update it.json (POEditor.com) 2021-05-02 13:34:25 +02:00
Hyperion-Bot 8705936707 Update de.json (POEditor.com) 2021-05-02 13:34:24 +02:00
Hyperion-Bot 2c5c3db42b Update fr.json (POEditor.com) 2021-05-02 13:34:22 +02:00
Hyperion-Bot 05ebac1d47 Update en.json (POEditor.com) 2021-05-02 13:34:21 +02:00
Hyperion-Bot 2286c009da Update nl.json (POEditor.com) 2021-05-02 13:34:20 +02:00
Hyperion-Bot c8eb44f28e Update cs.json (POEditor.com) 2021-05-02 13:34:19 +02:00
Hyperion-Bot 5b9ec04d32 Update pt-br.json (POEditor.com) 2021-05-01 20:05:01 +02:00
Hyperion-Bot fc4ac645f0 Update pt.json (POEditor.com) 2021-05-01 20:05:00 +02:00
Hyperion-Bot eb451cd0c2 Update nb.json (POEditor.com) 2021-05-01 20:04:59 +02:00
Hyperion-Bot 831cc39bbc Update de.json (POEditor.com) 2021-05-01 18:58:05 +02:00
Hyperion-Bot 99bab35e34 Update vi.json (POEditor.com) 2021-05-01 18:47:13 +02:00
Hyperion-Bot 739052f03d Update tr.json (POEditor.com) 2021-05-01 18:47:11 +02:00
Hyperion-Bot 0ad77f2d5b Update sv.json (POEditor.com) 2021-05-01 18:47:10 +02:00
Hyperion-Bot cd2b8a596f Update es.json (POEditor.com) 2021-05-01 18:47:09 +02:00
Hyperion-Bot 6ec0208fb7 Update ro.json (POEditor.com) 2021-05-01 18:47:08 +02:00
Hyperion-Bot 21931cbf13 Update pl.json (POEditor.com) 2021-05-01 18:47:07 +02:00
Hyperion-Bot 1d54811e85 Update it.json (POEditor.com) 2021-05-01 18:47:06 +02:00
Hyperion-Bot 14e8357c53 Update de.json (POEditor.com) 2021-05-01 18:47:04 +02:00
Hyperion-Bot c58bf9c680 Update fr.json (POEditor.com) 2021-05-01 18:47:03 +02:00
Hyperion-Bot 4409bcef8b Update nl.json (POEditor.com) 2021-05-01 18:47:02 +02:00
Hyperion-Bot f990562514 Update cs.json (POEditor.com) 2021-05-01 18:47:00 +02:00
LordGrey a8def65764
Fix pt-br.json 2021-05-01 18:43:49 +02:00
LordGrey 9b427b9397
Fix en.json 2021-05-01 18:42:46 +02:00
LordGrey cf084265fc
New languages - Portuguese (Std/Brazil) & Norwegian (Bokmål) (#1236)
* Update jquery.i18n to 1.07, add extended plurals support

* Add additional languages - Portuguese, Portuguese (Brazil), Norwegian (Bokmål)
2021-05-01 18:05:45 +02:00
Paulchen Panther 17d4406deb
Refactor PR #957 (#1234) 2021-05-01 17:00:44 +02:00
Paulchen Panther aec24e9246
Snap (Linux x86_64) (#1232) 2021-05-01 17:00:15 +02:00
LordGrey 71e34a6a55
UI System Log - Fixes and enhancements (#1223) 2021-04-25 17:22:59 +02:00
Daniel Schwierzeck 724d90bfdb
Initial support for Hue Play Gradient Lightstrip (#1187)
Model ID is LCX001. Add as Gamut C device.
2021-04-25 17:22:16 +02:00
LordGrey 35ffeb740f
Stop background effect, when it gets out of scope (#1226) 2021-04-25 16:50:27 +02:00
Portisch aede77b7ca
AmlogicGrabber: set and decrease frame grab timeout to 500ms (#1225)
This prevent an internal timeout when no frame is delivered like on playback pause.
2021-04-25 16:49:42 +02:00
LordGrey 7eeb740177
Dynamic Device Selection/Configuration (#1164) 2021-04-24 19:37:29 +02:00
TheGroundZero a4d98fd916
Fixes: #1229 (#1230)
* Fix "LED Test" effect colour order (#1229)
2021-04-14 16:25:51 +02:00
LordGrey 6f0ccdbe25 "temporarily reset mbedtls to version 2.25 #1214" 2021-04-10 17:19:47 +02:00
LordGrey a3c8fba7a3 Revert "temporarily reset mbedtls to version 2.25 #1214"
This reverts commit dc0e953c40.
2021-04-08 09:26:10 +02:00
Paulchen-Panther dc0e953c40 temporarily reset mbedtls to version 2.25 #1214 2021-03-27 13:46:44 +00:00
LordGrey f870096a66
Docker Compile for local code (#1211)
* Docker Compile for local code

* Fine Tuning

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2021-03-19 22:53:14 +01:00
LordGrey 94d9b02734
Fix 1181 - Effects were not started from tray (#1199)
* Fix 1181, add constants and defaults

* Include #1195 changes
2021-03-19 22:52:41 +01:00
LordGrey 41af5c1b9e
LEDDevices - WLED enhancements and minor fixes (#1204)
* Yeelight minor updates

* Add Timeout to REST API

* LEDDevice - Correct storeState

* Add WaitTime function

* Always show HW-LEDCount for configuration

* WLED - New features ("live" support, storing state and identification)

* Yeelight - Refactoring

* Cololight - Refactoring

* Karate - getProperties Support

* Atmo - getProperties Support

* AtmoOrb - refactoring

* Nanoleaf - Refactoring, New "Shapes" considerations

* PhilipHue - Minor corrections

* Update Changelog
2021-03-19 22:52:04 +01:00
Serhan S 956edf9e78
Update en.json
Changed wiki to Documentation
2021-03-16 17:17:22 +01:00
Serhan S 675e9b9e21
Update support.html
Updated URLs
2021-03-16 17:15:47 +01:00
Paulchen-Panther 709728aa81 docs moved to https://github.com/hyperion-project/hyperion.docs 2021-03-15 20:04:47 +01:00
dependabot[bot] 48240bbd21
build(deps): bump elliptic from 6.5.3 to 6.5.4 in /docs (#1210)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-10 21:45:29 +01:00
dependabot[bot] 1b09504b26
build(deps): bump prismjs from 1.21.0 to 1.23.0 in /docs (#1194)
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.21.0 to 1.23.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.21.0...v1.23.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-10 21:45:18 +01:00
Paulchen Panther 36385acc9a
removed donation links 2021-03-05 20:13:45 +01:00
Dermot Duffy 28164c7b80
Add link to Hyperion-py (#1122)
* Add link to Hyperion-py

* Update changelog.

Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2021-02-23 20:44:27 +01:00
mlaurijsse 68d06f14fe
Correct total packet count in tpm2net implementation (fix #1127) (#1128)
* Fixed calculation for _tpm2TotalPackets
2021-02-23 20:42:54 +01:00
LordGrey 3ae9bc998b
Fix LED Num for non analogue output (#1139) 2021-02-23 20:41:46 +01:00
Gerion Entrup 6a4aabd5e9
webserver/Cmake: fix out-of-tree build (#1147)
Related: #834
2021-02-23 20:41:14 +01:00
Gerion Entrup 74a6795991
Extend logging and error reporting (#1149)
- ProviderRs232: Be more verbose about correct device in error case
Rearrange Debug Information and additionalclean-ups

- Webconfig: better error description, if Kodi is not found
2021-02-23 20:40:20 +01:00
Calvin 2b66754997
Update Documentation (#1162)
* Add information on WLED to documentation

Add information how to force max brightness in WLED. See Issue #1101

* Translated Installation.md to german

Translation and added short instructions to WIN 10 installation.

* Removed Typo

* Added Windows 10 instructions

* Update Installation.md
2021-02-23 20:39:18 +01:00
LordGrey 90d05e6c54
Custom Effects - Clean-ups and Enhancements (#1163)
* Cleanup EffectFileHandler

* Support Custom Effect Schemas and align EffectFileHandler

* Change back to colon prefix for system effects

* WebSockets - Fix error in handling fragmented frames

* Correct missing colon updates

* Update json with image file location for custom gif effects

* Image effect deletion - considere full filename is stored in JSON

* Correct selection lists indentions
2021-02-23 20:38:54 +01:00
Vincent Tavernier 9475b93d9f
Interrupt effect on timeout (#1181)
Fixes #1013
2021-02-23 20:38:26 +01:00
Paulchen Panther 45bd23ca5c
DirectX9 display change (#1191)
* Fix issue #1190

* Correct output image with size decimation used

* Correct image format (BGR -> RGB)

* Another approach
2021-02-23 20:37:59 +01:00
Gerion Entrup 6ed9553ca3
Proto*: fix Error macro conflict (#1146)
Fixes: #882
2021-02-23 14:25:32 +01:00
Chris Browet f843b5a046
FIX: [hue] XY == 0 => bri = 0 (#1124) 2021-02-23 13:59:40 +01:00
LordGrey 9e281b2347
Fix #1186 & UI last instance error (#1188)
* Handle Arrays & Objects differently

* Fix UI error, if "last instance used" does not longer exist
2021-02-17 12:29:53 +01:00
LordGrey 77262adf3b
Fix #1131 - Global (Grabber) setting are not correctly read by non-default instances (#1186) 2021-02-11 19:45:22 +01:00
Paulchen Panther ac88fdd80f [HotFix] DirectX 9 grabber is now optional
The DirectX SDK from Microsoft is officially no longer offered.
2021-01-30 12:39:53 +01:00
Paulchen Panther 4ff9e52ba7
[HotFix] https://git.io/Jt8S6 2021-01-29 20:17:01 +01:00
LordGrey 86ab15d18c
Cololight Improvements (#1120)
* Avoid issue with long running identify calls
* Strip provides number of LEDs now
* Consider that Strip was cut by user
2021-01-23 17:26:59 +01:00
Cosmicbase 4f85ac1c4b
Update Flag Effect (#1154)
* Update Flags Effect (add RU)
2021-01-20 18:42:58 +01:00
LordGrey be894c821d
Update CompileHowto.md 2021-01-14 21:05:47 +01:00
ChR-iSz 8a028328ce
Add spidev1.0 and spidev1.1 device for Raspberry Pi WS2801 schema (#1112) 2020-12-23 23:47:06 +01:00
Panagiotis Koutsias c17727beb0
Updated rpi_ws281x submodule to latest upstream (#1111) 2020-12-23 23:46:11 +01:00
thosoo c253b820b3
Change libcec dependency for rpm (#1108) 2020-12-23 23:44:46 +01:00
Paulchen Panther 0f2563235d
Reduced package size (#1114) 2020-12-23 23:42:51 +01:00
Paulchen Panther 2bc8bf7ecb
Deploy Qt DLLs (#1115) 2020-12-23 23:42:22 +01:00
FlouHappy a31f995959
Update flag.py (#1121)
Added Cameroon’s flag
2020-12-23 23:39:16 +01:00
Paulchen Panther fbd10e8865
[Hotfix] MacOS CI build 2020-12-20 13:59:49 +01:00
dependabot[bot] b345b9e657
build(deps): bump ini from 1.3.5 to 1.3.8 in /docs (#1118) 2020-12-13 10:25:02 +01:00
Paulchen Panther a42aae44d1 Codespace updated
Debian pre/post scripts modified for HyperBian
2020-11-24 21:28:02 +00:00
Paulchen Panther 0cbb276631 added libcec6 to deb dependency list 2020-11-22 13:43:45 +01:00
Paulchen Panther ef6526212a CHANGELOG update 2020-11-21 18:57:02 +00:00
Paulchen Panther 83338dc394 Release 2.0.0-alpha.9
Signed-off-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2020-11-18 21:57:21 +01:00
Florent Benoist c4e15dba00
Fix/no signal detection (#1087) 2020-11-18 19:25:43 +01:00
LordGrey a0311bd8b5
Update schema-philipshue.json
Allow to switchOffOnBlack for Classic and Entertainment-API
2020-11-17 17:51:13 +01:00
Hyperion-Bot 83543f10b2 Update vi.json (POEditor.com) 2020-11-17 15:16:28 +01:00
Hyperion-Bot 0367257a41 Update tr.json (POEditor.com) 2020-11-17 15:16:25 +01:00
Hyperion-Bot cbcbf72d1a Update sv.json (POEditor.com) 2020-11-17 15:16:24 +01:00
Hyperion-Bot ec16ed1932 Update es.json (POEditor.com) 2020-11-17 15:16:22 +01:00
Hyperion-Bot 05bb622702 Update ro.json (POEditor.com) 2020-11-17 15:16:20 +01:00
Hyperion-Bot 41a8399767 Update pl.json (POEditor.com) 2020-11-17 15:16:18 +01:00
Hyperion-Bot 93cd8f6560 Update it.json (POEditor.com) 2020-11-17 15:16:16 +01:00
Hyperion-Bot 2c598db887 Update de.json (POEditor.com) 2020-11-17 15:16:14 +01:00
Hyperion-Bot ab444e5987 Update fr.json (POEditor.com) 2020-11-17 15:16:12 +01:00
Hyperion-Bot af6ea4d77a Update en.json (POEditor.com) 2020-11-17 15:16:10 +01:00
Hyperion-Bot 38b7965190 Update nl.json (POEditor.com) 2020-11-17 15:16:08 +01:00
Hyperion-Bot b5b21b58c7 Update cs.json (POEditor.com) 2020-11-17 15:16:06 +01:00
Paulchen Panther 38e9d8aef0 Issue template Completeness Check 2020-11-15 16:18:55 +00:00
Paulchen Panther 9ae0f4cfc4 - Added custom codespace configuration
- Removed unnecessary extensions
- Start Hyperion in VS Code (Codespace) by default in debug mode
2020-11-15 13:09:31 +00:00
LordGrey efc2046ab5
Various Cleanups (#1075)
* LedDevice - Address clang findings

* Fix Windows Warnings

* Ensure newInput is initialised

* Clean-up unused elements for Plaform Capture

* Fix initialization problem and spellings

* Address clang findings and spelling corrections

* LedDevice clean-ups

* Cleanups

* Align that getLedCount is int

* Have "display" as default for Grabbers

* Fix config during start-up for missing elements

* Framegrabber Clean-up - Remove non supported grabbers from selection, filter valid options

* Typo

* Framegrabber.json - Fix property numbering

* Preselect active Grabbertype

* Sort Grabbernames

* Align options with selected element

* Fix deletion of pointer to incomplete type 'BonjourBrowserWrapper'

* Address macOS compile warnings

* Have default layout = 1 LED only to avoid errors as in #673

* Address lgtm findings

* Address finding that params passed to LedDevice discovery were not considered

* Cleanups after merging with latest master

* Update Changelog

* Address lgtm findings

* Fix comment

* Test Fix

* Fix Python Warning

* Handle Dummy Device assignment correctly

* Address delete called on non-final 'commandline::Option' that has virtual functions but non-virtual destructor

* Correct that QTimer.start accepts only int

* Have Release Python GIL & reset threat state chnage downward compatible

* Correct format specifier

* LedDevice - add assertions

* Readonly DB - Fix merge issue

* Smoothing - Fix wrong defaults

* LedDevice - correct assertion

* Show smoothing config set# in debug and related values.

* Suppress error on windows, if default file is "/dev/null"

* CMAKE - Allow to define QT_BASE_DIR dynamically via environment-variable

* Ignore Visual Studio specific files

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2020-11-14 17:58:56 +01:00
LordGrey d28540a7fe
Fix, if db-file is readonly (#1082) 2020-11-14 17:40:15 +01:00
LordGrey 56f45a4930
Fix hostname/domain split (#1079) 2020-11-14 16:35:55 +01:00
LordGrey d5a1e7d19d
Add additional system info (#1078) 2020-11-14 16:34:31 +01:00
LordGrey 758d9a70c5
Improve Platform Grabber UI (#1073) 2020-11-14 16:22:21 +01:00
Dermot Duffy e2c8735fde
Localize/stylize/freshen the en JSON API docs (#1074) 2020-11-09 18:41:27 +01:00
LordGrey 36c05142a3
Update wizard.js
Fix issue after master merge
2020-11-04 21:04:00 +01:00
The-Master777 0dd8e45364
Feature: Temporal Color Smoothing with variable decay-rate for long period average windows (#1043)
* Feature: Weighted Moving Average Smoothing with Decay

* fix assign

* try fix MSVC error related to always inline on static

* use proper imports for windows

* crossplatform inline declaration
2020-11-02 07:52:33 +01:00
LordGrey 83455441fa
New LED Device - Cololight (#1070) 2020-11-01 21:56:19 +01:00
LordGrey bb652ade36
Read-Only Configuration-Database support (#1046) 2020-11-01 19:47:30 +01:00
Peter Eskdale 85a55de28c
Implement letterbox-only blackbar detection mode (#1063) 2020-11-01 19:20:27 +01:00
Paulchen Panther 958975975c
Fix reopened issue 993 (#1062) 2020-11-01 19:15:22 +01:00
Chris Browet f7ccf9d0da
FIX: [hue] proper save state (#1014) 2020-11-01 19:14:09 +01:00
Awawa 9e4c7af5e9
Fix for sk9822 frame sufix (#1042) 2020-11-01 19:12:25 +01:00
Serhan S 0cddc06844
Update CHANGELOG.md 2020-11-01 18:28:51 +01:00
Serhan S d1d1789a5f
Update CHANGELOG.md 2020-11-01 18:25:31 +01:00
Paulchen Panther 4928117e8e
[HOTFIX] Release Python GIL & reset threat state 2020-11-01 09:38:55 +01:00
Serhan S 1d6664d4f0
Update CHANGELOG.md 2020-10-29 13:48:19 +01:00
Serhan S 0647faadb8
Merge pull request #1067 from pattyland/master
Change links from http to https
2020-10-28 12:41:54 -07:00
Paulchen Panther 69eec61de8 Hide Systray on exit & Install DirectX Redistributable 2020-10-28 18:48:46 +01:00
Paulchen Panther f3dc25891d
Added DirectX SDK to CompileHowto 2020-10-27 17:18:03 +01:00
Paulchen Panther 1d35338b83
DirectX9 Grabber (#1039) 2020-10-26 21:13:13 +01:00
Sören 1ae522237c Change links from http to https 2020-10-26 01:21:09 +01:00
LordGrey 65a036dfc0
Update LICENSE 2020-10-25 10:06:59 +01:00
Paulchen Panther 1910d359bc cleanup packages.cmake & extend NSIS plugin directory 2020-10-24 18:58:02 +02:00
Paulchen Panther 4d37409d62
Updated Windows Dependencies 2020-10-23 21:44:36 +02:00
imgbot[bot] 669b108aaa
[ImgBot] Optimize images (#1058) 2020-10-22 17:32:18 +02:00
LordGrey a8492d6586
Additional information on system used (#1045)
* Allow --version, even if hyperion is already running

* Add CPU-Model to SysInfo

* Add additional CPUInfos

* Use fileUtils & RegEx on CPU-Info

* Add CPU - Hardware info

* Update changelog

* Suppress empty CPU info elements
2020-10-20 20:18:51 +02:00
Paulchen Panther da8a216587
Systray icons added - Issue #925 (#1040) 2020-10-20 17:41:20 +02:00
LordGrey 7e370b3d8b
Fix typos (#1051)
* Fix typo in handlePriorityChangedLedDevice

* Typo

* Correct description

* Correct LedDeviceTemplate
2020-10-19 10:54:41 +02:00
LordGrey 3bf1089763
Fix color calibration for Kodi 18 (Fixes #771) (#1044) 2020-10-18 19:09:20 +02:00
LordGrey db1dae45d2
Fix #1015 - Fix Lightpack / Remove Multi-Lightpack (#1049) 2020-10-18 19:08:54 +02:00
LordGrey 83b8a800d8
Fix issue #909, Have ratio correction first and then scale (#1047) 2020-10-18 19:08:27 +02:00
Demian Kellermann 8f991001c1
Allow 8-LED configuration for KarateLight (#1037) 2020-10-18 18:04:57 +02:00
Paulchen Panther 84607b4063
[Windows] Installer/Uninstaller notification when Hyperion is running. (#1033) 2020-10-18 17:19:35 +02:00
Denrage 02d0ab68f6
FIX: display argument in hyperion-qt (#1027) 2020-10-18 17:18:30 +02:00
The-Master777 c09061e5d8
boblight: reduce cpu time spent on memcopy and parsing rgb values (#1016) 2020-10-18 17:16:27 +02:00
Paulchen Panther aa465c018c
Fix issues #1022, #1019, #997, #993, #992, #976, #969, #964, #980 (#1036) 2020-10-18 17:05:07 +02:00
Paulchen-Panther 9d2e442d42 New language support: Russian and Chinese (simplified) 2020-09-29 18:13:02 +02:00
LordGrey 5d5b24979d
Fix #1007 - LED's retain last state after clearing a source (#1008)
* Save BLACK as lastLedColor during writeBlack

* Remove debug statement overhead

* Re-Add typecasting to ensure readable output

* Revert "New language support: Russian and Chinese (simplified)"

This reverts commit 5c95fab894.

* Ignore TemporaryError
2020-09-25 20:33:11 +02:00
LordGrey 730b5d5681
Merge pull request #1005 from Lord-Grey/master
New language support: Russian and Chinese (simplified)
2020-09-25 20:08:26 +02:00
LordGrey 28cbec1009
Merge branch 'master' into master 2020-09-25 19:46:22 +02:00
LordGrey f72a1d7737 Merge new elements with latest master version 2020-09-25 19:42:34 +02:00
The-Master777 6c68454bea
Support SK9822 type LEDs with adaptive brightness control via SPI (#1017)
* Support SK9822 type LEDs with adaptive brightness control via SPI

* SK9822 - minor refactorings
2020-09-25 19:34:00 +02:00
TPmodding f11885fd8b
lgtm fixes (#1020) 2020-09-25 17:43:46 +02:00
Hyperion-Bot 28c12a86a8 Update de.json (POEditor.com) 2020-09-17 18:08:02 +02:00
Murat Seker c711d62354
Merge pull request #996 from m-seker/bugfix/995
ENABLE_AVAHI is not included in WebServer
2020-09-16 17:05:20 +02:00
Hyperion-Bot e53760bcad Update en.json (POEditor.com) 2020-09-15 23:02:28 +02:00
Hyperion-Bot 90a29145cf Update en.json (POEditor.com) 2020-09-15 22:16:24 +02:00
Paulchen Panther 510af27e76
added libcec to deb/rpm dependency list 2020-09-15 20:49:54 +02:00
LordGrey 5c95fab894 New language support: Russian and Chinese (simplified) 2020-09-14 22:48:59 +02:00
Paulchen-Panther 08909b8a25 Release 2.0.0-alpha.8 2020-09-14 22:27:17 +02:00
TPmodding 70b7e11e67
Update CHANGELOG.md 2020-09-14 22:17:33 +02:00
TPmodding ee4238a108
Update CHANGELOG.md 2020-09-14 22:04:10 +02:00
Hyperion-Bot a0722df741 Update vi.json (POEditor.com) 2020-09-14 21:20:49 +02:00
Hyperion-Bot 8181575198 Update tr.json (POEditor.com) 2020-09-14 21:20:47 +02:00
Hyperion-Bot c03c7c3698 Update sv.json (POEditor.com) 2020-09-14 21:20:46 +02:00
Hyperion-Bot 828d4b5a9a Update es.json (POEditor.com) 2020-09-14 21:20:44 +02:00
Hyperion-Bot fb177c1526 Update ro.json (POEditor.com) 2020-09-14 21:20:42 +02:00
Hyperion-Bot e29de52f76 Update pl.json (POEditor.com) 2020-09-14 21:20:40 +02:00
Hyperion-Bot a0b293f9ec Update it.json (POEditor.com) 2020-09-14 21:20:39 +02:00
Hyperion-Bot ce979dd66b Update de.json (POEditor.com) 2020-09-14 21:20:37 +02:00
Hyperion-Bot d9be4094f2 Update fr.json (POEditor.com) 2020-09-14 21:20:35 +02:00
Hyperion-Bot bdc5e226a1 Update nl.json (POEditor.com) 2020-09-14 21:20:33 +02:00
Hyperion-Bot bae64abc66 Update cs.json (POEditor.com) 2020-09-14 21:20:31 +02:00
Hyperion-Bot c4b1d12ec1 Update de.json (POEditor.com) 2020-09-14 21:17:10 +02:00
Paulchen Panther b804f28132
Update CHANGELOG.md 2020-09-14 20:45:30 +02:00
Murat Seker 5e922be4d3
Fix OSX build (#952) 2020-09-14 20:37:48 +02:00
Paulchen Panther 9b729f8913
Update CHANGELOG.md 2020-09-14 20:12:11 +02:00
Murat Seker be0bccea59
Return tan to API requests whenever possible (#1002)
* Return tan to API requests whenever possible

* Set default tan to value 0

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2020-09-14 20:09:21 +02:00
dependabot[bot] 11d98fddb9
build(deps): bump http-proxy from 1.18.0 to 1.18.1 in /docs (#1004)
Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.18.0 to 1.18.1.
- [Release notes](https://github.com/http-party/node-http-proxy/releases)
- [Changelog](https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/http-party/node-http-proxy/compare/1.18.0...1.18.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 17:22:32 +02:00
dependabot[bot] feecd67397
build(deps): bump prismjs from 1.17.1 to 1.21.0 in /docs (#1003)
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.17.1 to 1.21.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.17.1...v1.21.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 17:22:10 +02:00
LordGrey 7a685185f4
AtmoOrb Fix (#988)
* AtmoOrb UdpSocket-Bind Fix

* Cleanup and update defaults (to work via PowerLan)

* Cleanup and update defaults (to work via PowerLan)

* AtmoOrb identification support, small updates

* AtmoOrb discovery & identification support, fixes and stability updates

* Small clean-ups

* Type fix

* Add missing include

* Adalight - Update default config and levels

* Update Atmoorb sketch

* Yeelight - Update default value
2020-09-14 17:20:00 +02:00
LordGrey 4aabe175cd
Differentiate between LED-Device Enable/Disable and Switch On/Off (#960)
* Switch Off devices, when no input source

* Realign Enable/SwitchOn, Disable/SwitchOff

* Align to updated LedDevice-Flow

* Remove debug statements slipped in

* Send last color update after enabling again

* Fix WLED getProperties API call

* Remove unused signals

* LedDevice process flow documentation

* LedDevice process flow documentation

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2020-09-14 17:19:14 +02:00
TPmodding fbd8167458
Update CHANGELOG.md
update changelog for alpha release 8
2020-09-13 21:28:12 +02:00
Murat 9204f8a313 ENABLE_AVAHI is not included in WebServer 2020-09-08 20:39:28 +02:00
Jeff Rescignano 8bb5833250
Update URLs in CrossCompilingHowTo (#989) 2020-09-07 17:01:36 +02:00
Murat Seker 120a563ca0
Merge pull request #987 from m-seker/refactor/cleanup
Cleanup
2020-09-07 14:38:47 +02:00
Paulchen-Panther 6cd7fc60b3 Azure CI is being removed because it was a temporary solution 2020-09-06 20:20:20 +02:00
Paulchen-Panther 50e9084d2f Moved from Docker Hub to GitHub Container Registry for Docker compilations 2020-09-06 19:39:46 +02:00
LordGrey 8b2ebf355d
Update CHANGELOG.md 2020-09-05 15:15:36 +02:00
LordGrey 31b5be39b5
Merge pull request #961 from Lord-Grey/Improve_errohandling
Improve UDP-Device Error handling
2020-09-05 15:14:22 +02:00
LordGrey ca02649330
Update CHANGELOG.md 2020-09-05 15:13:27 +02:00
LordGrey 24b861d3b5
Merge pull request #991 from Lord-Grey/Fix_#903
Fix #903 - Adalight
2020-09-05 15:11:23 +02:00
Murat Seker 35ea94e639
Merge pull request #990 from JeffResc/cc2
Install libqt5x11extras5-dev while cross compiling
2020-09-03 22:39:32 +02:00
LordGrey 7f676a8a4a Fix #903 - Adalight 2020-09-03 19:24:05 +02:00
Jeff Rescignano ba13eec863 Install libqt5x11extras5-dev while cross compiling 2020-09-03 01:06:54 -04:00
Murat Seker 6e039a0d83
Merge pull request #945 from m-seker/improvement/xcb
Use query interface for void returning X requests
2020-09-02 15:44:44 +02:00
Murat 0a2961a3b4 Cleanup 2020-08-31 22:07:12 +02:00
Murat Seker fda061bc87
Merge pull request #972 from m-seker/bugfix/971
Fix #971 Build without any grabber
2020-08-31 21:11:17 +02:00
Murat Seker 71dbd77708
Merge pull request #946 from m-seker/refactor/python
Move Python related code to Python module
2020-08-31 21:10:07 +02:00
Paulchen-Panther 3e4d106580 SSH docu picture for HyperBian replaced 2020-08-31 18:29:58 +02:00
Mirko Vogt 5a684e2056
Fix buid against flat-+/protobuf system libs (#934) 2020-08-30 14:47:12 +02:00
Paulchen Panther 4971a07f26
Removed libraries.io badges 2020-08-29 20:16:20 +02:00
Murat Seker ff47f9ce7b
Merge pull request #958 from m-seker/refactor/led_device
General tidy up
2020-08-26 14:38:48 +02:00
Murat Seker bc57a45089
Merge branch 'master' into refactor/led_device 2020-08-23 21:02:25 +02:00
Murat Seker bae39f667d
Merge pull request #959 from m-seker/refactor/const_correctness
Const correctness, override keyword, a bunch of stuff..
2020-08-23 21:00:45 +02:00
Murat 0383dec836 Fix build without any grabber 2020-08-17 17:50:30 +02:00
Raymond Mouthaan 838092e2e6
Added docker pull to docker-compile.sh - solves #937 (#938)
* Added docker pull to make sure always the latest image gets pulled from Docker Hub before starting the compile process
* new cross compile option for armv6/7 buster

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2020-08-12 20:42:57 +02:00
Paulchen Panther b00b38791d
Update CompileHowto.md 2020-08-11 17:53:09 +02:00
LordGrey 16353a5906 Improve UDP-Error handling 2020-08-09 17:43:23 +02:00
Murat 4a688b932a Const correctness, override keyword, a bunch of stuff.. 2020-08-08 23:12:43 +02:00
Murat Seker 4099d12d9a
Force remove build/deploy folder in create_all_releases script (#956) 2020-08-08 16:51:23 +02:00
Murat Seker a18ccb8b48
Refactor color utils (#955)
Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2020-08-08 13:22:37 +02:00
Murat Seker 63d95a5a2a
Add libcec license (#950) 2020-08-08 13:18:43 +02:00
Murat Seker c00d8e62fb
Pass primitive types by value (#935) 2020-08-08 13:09:15 +02:00
Murat Seker 5758b19cbc
Fix some LGTM warnings (#949) 2020-08-08 12:59:40 +02:00
Murat Seker 1df0e9ce17
Fix typos in documentation (#948) 2020-08-08 12:58:44 +02:00
Murat Seker f3f07e0c82
Get rid of unnecessary computation in ImageResampler (#947) 2020-08-08 12:57:15 +02:00
Murat Seker be329fb7bb
Fix compiler warnings (#942) 2020-08-08 12:54:30 +02:00
Murat Seker 29ee5e2c41
Fix auto generated file path (#940) 2020-08-08 12:52:49 +02:00
Murat dd2d5e4b40 General tidy up 2020-08-08 00:21:19 +02:00
Murat 6ad511881e Move Python related code to Python module 2020-08-04 19:30:16 +02:00
Murat 54ee71a46a Use query interface for void returning X requests 2020-08-04 18:29:12 +02:00
Murat Seker 13205a9d11
Feature/xcb grabber (#912)
* Add Xcb grabber

* update compile instruction

Signed-off-by: Paulchen Panther <Paulchen-Panter@protonmail.com>

* Fix problem on resolution change + Make XCB default if X11 is not avaialable

* Fix decimation problem

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2020-08-03 12:31:39 +02:00
LordGrey 11d7614591
feat: Updates on language elements (#916)
* Fix "Timers cannot be stopped from another thread" during shutdown

* Fix Language settings typo and add sorting

* Additional DE Translations

* Sort DE language file to compare with POEditor version

* Merge DE translation from git with POEditor one
2020-08-03 09:52:26 +02:00
Murat Seker b7a9a10223
refactor: Several random fixes + Experimental playground (#917) 2020-08-02 22:37:52 +02:00
Murat Seker d183c630c8
refactor: Resolve some clang warnings (#915) 2020-08-02 22:35:09 +02:00
Murat Seker 031b9a6b7c
refactor: Modernize Qt connections (#914) 2020-08-02 22:32:00 +02:00
m33ts4k0z d1a2b77ce3
fix(webui): works now with https port 443 (#924)
* Websocket fix for SSL reverse proxies

* docs: add changelog

Co-authored-by: Sersch <edeltraud70@gmx.de>
2020-08-02 22:18:42 +02:00
brindosch 94c23653de
feat(win): Add binary meta (#932) 2020-08-02 22:05:53 +02:00
Murat Seker 8824e69986
Fix some more threading errors (#911) 2020-08-02 10:44:42 +02:00
dependabot[bot] d9e33885a0
build(deps): bump elliptic from 6.5.1 to 6.5.3 in /docs (#929)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.1 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.1...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-02 07:51:30 +02:00
LordGrey 85cbf630f6
Update create_all_releases.sh 2020-08-01 22:10:40 +02:00
Mathijs Groothuis fcac80d3d5
Update en.json (#926)
Fix typo
2020-08-01 19:48:54 +02:00
Paulchen Panther 7550a93e59
NSIS/Systray option to launch Hyperion on Windows start [HKCU] (#887)
* NSIS/Systray option to launch Hyperion on Windows start
* corrected file path in registry
2020-08-01 17:50:20 +02:00
Murat Seker d4b4158cb7
Fix logger and led colors (#906) 2020-07-27 20:00:36 +02:00
Paulchen Panther 773b47bf53
set zlib back to system ignore list/revert pr #871 (#904)
* set zlib to system ignore list
* undo pr #871
* exclude libcec if Dispmanx available
2020-07-27 19:10:32 +02:00
SJunkies 374945346a
Fix: -DUSE_SYSTEM_MBEDTLS_LIBS=ON - undefined reference (#898) 2020-07-27 17:53:19 +02:00
Mathijs Groothuis cedd1e81c9
Update nl.json (#900)
Replaced Google Translated entries to more proper Dutch
2020-07-27 17:45:40 +02:00
Sersch 67e0371cf5 fix(ci): Trigger HyperBian build after release 2020-07-26 16:21:51 +02:00
LordGrey a9ad9d920f
Update bug_report.md 2020-07-26 11:32:10 +02:00
Serhan a2809046b5
Update CHANGELOG.md 2020-07-24 01:53:29 +02:00
Paulchen Panther cce6980982
Update CHANGELOG.md 2020-07-23 18:17:30 +02:00
867 changed files with 84877 additions and 55199 deletions

View File

@ -1,114 +0,0 @@
jobs:
######################
###### Linux #########
######################
- job: Linux
timeoutInMinutes: 120
pool:
vmImage: 'ubuntu-16.04'
strategy:
matrix:
AMD64 (x64):
dockerTag: 'amd64'
dockerName: 'Debian Stretch (AMD64)'
platform: 'x11'
ARMv6hf (Raspberry Pi v1 & ZERO):
dockerTag: 'armv6hf'
dockerName: 'Debian Stretch (Raspberry Pi v1 & ZERO)'
platform: 'rpi'
ARMv7hf (Raspberry Pi 2 & 3):
dockerTag: 'armv7hf'
dockerName: 'Debian Stretch (Raspberry Pi 2 & 3)'
platform: 'rpi'
ARMv8 (Generic AARCH64):
dockerTag: 'aarch64'
dockerName: 'ARMv8 (Generic AARCH64)'
platform: 'amlogic'
steps:
- checkout: self # represents the repo where the initial Pipelines YAML file was found
submodules: recursive # set to 'recursive' to get submodules of submodules
# build process
- bash: ./.ci/ci_build.sh
displayName: 'Build $(dockerName) packages'
env:
DOCKER_TAG: $(dockerTag)
DOCKER_NAME: $(dockerName)
PLATFORM: $(platform)
######################
###### macOS #########
######################
- job: macOS
timeoutInMinutes: 120
pool:
vmImage: 'macOS-10.14'
steps:
- checkout: self # represents the repo where the initial Pipelines YAML file was found
submodules: recursive # set to 'recursive' to get submodules of submodules
# install dependencies
- bash: ./.ci/ci_install.sh
displayName: 'Install dependencies'
# build process
- bash: ./.ci/ci_build.sh
env:
PLATFORM: 'osx'
condition: succeeded()
displayName: 'Build macOS 10.13 packages'
######################
###### windows #######
######################
- job: windows
timeoutInMinutes: 120
pool:
vmImage: 'windows-latest'
variables:
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
steps:
- checkout: self # represents the repo where the initial Pipelines YAML file was found
submodules: recursive # set to 'recursive' to get submodules of submodules
# install qt 5.15 via aqtinstall
- script: |
cd $(Build.SourcesDirectory)
python -m pip install aqtinstall
python -m aqt install -O c:\Qt 5.15.0 windows desktop win64_msvc2019_64
displayName: 'Install Qt'
# use Python 3.x from the tool cache
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
addToPath: true
architecture: 'x64'
displayName: 'Install Python'
# install nsis via chocolatey
- powershell: choco install --no-progress nsis -y
displayName: 'Install NSIS'
# install openssl via chocolatey
- powershell: choco install --no-progress openssl -y
displayName: 'Install OpenSSL'
# register x64 architecture environment
- script: |
call "%VCINSTALLDIR%\Auxiliary\Build\vcvars64.bat"
displayName: 'Set up x64 build architecture environment'
# build process
- bash: ./.ci/ci_build.sh
env:
PLATFORM: 'windows'
condition: succeeded()
displayName: 'Build windows packages'

View File

@ -1,12 +1,7 @@
#!/bin/bash
# detect CI
if [ "$SYSTEM_COLLECTIONID" != "" ]; then
# Azure Pipelines
echo "Azure detected"
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
elif [ "$HOME" != "" ]; then
if [ "$HOME" != "" ]; then
# GitHub Actions
echo "Github Actions detected"
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
@ -26,8 +21,11 @@ else
PLATFORM=${PLATFORM}-dev
fi
echo "Platform: ${PLATFORM}, build type: ${BUILD_TYPE}, CI_NAME: $CI_NAME, docker image: ${DOCKER_IMAGE}, docker type: ${DOCKER_TAG}"
# Build the package on osx or linux
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
echo "Compile Hyperion on OSX or Darwin"
# compile prepare
mkdir build || exit 1
cd build
@ -37,16 +35,19 @@ if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ $CI_NAME == *"mingw64_nt"* || "$CI_NAME" == 'windows_nt' ]]; then
echo "Compile Hyperion on Windows"
# compile prepare
echo "Number of Cores $NUMBER_OF_PROCESSORS"
mkdir build || exit 1
cd build
cmake -G "Visual Studio 16 2019" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2
cmake --build . --target package --config Release -- -nologo -v:m -maxcpucount || exit 3
cmake -G "Visual Studio 17 2022" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE="Release" ../ || exit 2
cmake --build . --target package --config "Release" -- -nologo -v:m -maxcpucount || exit 3
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ "$CI_NAME" == 'linux' ]]; then
echo "Compile Hyperion with DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
echo "Compile Hyperion with DOCKER_IMAGE = ${DOCKER_IMAGE}, DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
# set GitHub Container Registry url
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
# take ownership of deploy dir
mkdir ${CI_BUILD_DIR}/deploy
@ -54,7 +55,7 @@ elif [[ "$CI_NAME" == 'linux' ]]; then
docker run --rm \
-v "${CI_BUILD_DIR}/deploy:/deploy" \
-v "${CI_BUILD_DIR}:/source:ro" \
hyperionproject/hyperion-ci:$DOCKER_TAG \
$REGISTRY_URL:$DOCKER_TAG \
/bin/bash -c "mkdir hyperion && cp -r source/. /hyperion &&
cd /hyperion && mkdir build && cd build &&
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2 &&

View File

@ -1,11 +1,7 @@
#!/bin/bash
# detect CI
if [ "$SYSTEM_COLLECTIONID" != "" ]; then
# Azure Pipelines
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
elif [ "$HOME" != "" ]; then
if [ "$HOME" != "" ]; then
# GitHub Actions
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$GITHUB_WORKSPACE"
@ -19,12 +15,15 @@ function installAndUpgrade()
arr=("$@")
for i in "${arr[@]}";
do
list_output=`brew list | grep $i`
list_output=`brew list --formula | grep $i`
outdated_output=`brew outdated | grep $i`
if [[ ! -z "$list_output" ]]; then
if [[ ! -z "$outdated_output" ]]; then
echo "Outdated package: ${outdated_output}"
brew unlink ${outdated_output}
brew upgrade $i
brew link --overwrite $i
fi
else
brew install $i
@ -38,12 +37,4 @@ if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then
brew update
dependencies=("qt5" "python" "libusb" "cmake" "doxygen")
installAndUpgrade "${dependencies[@]}"
# github actions uname -> windows-2019 -> mingw64_nt-10.0-17763
# TODO: Azure uname windows?
elif [[ $CI_NAME == *"mingw64_nt"* ]]; then
echo "Yes, we are Windows: $CI_NAME"
# Windows has no dependency manager
elif [[ $CI_NAME != 'linux' ]]; then
echo "Unsupported platform: $CI_NAME"
exit 5
fi

View File

@ -1,76 +0,0 @@
# Hyperion.NG .codedocs Configuration File
#---------------------------------------------------------------------------
# CodeDocs Configuration
#---------------------------------------------------------------------------
# Include the Doxygen configuration from another file.
# The file must be a relative path with respect to the root of the repository.
DOXYFILE =
# Specify external repository to link documentation with.
# This is similar to Doxygen's TAGFILES option, but will automatically link to
# tags of other repositories already using CodeDocs. List each repository to
# link with by giving its location in the form of owner/repository.
# For example:
# TAGLINKS = doxygen/doxygen CodeDocs/osg
# Note: these repositories must already be built on CodeDocs.
TAGLINKS =
#---------------------------------------------------------------------------
# Doxygen Configuration
#---------------------------------------------------------------------------
# Doxygen configuration may also be placed in this file.
# Currently, the following Doxygen configuration options are available. Refer
# to http://doxygen.org/manual/config.html for detailed explanation of the
# options. To request support for more options, contact support@codedocs.xyz.
#
# ABBREVIATE_BRIEF =
# ALIASES =
# ALPHABETICAL_INDEX =
# ALWAYS_DETAILED_SEC =
# CASE_SENSE_NAMES =
# CLASS_DIAGRAMS =
# DISABLE_INDEX =
# DISTRIBUTE_GROUP_DOC =
# EXAMPLE_PATH =
EXCLUDE = .ci/ \
assets/ \
bin/
config/ \
effects/ \
test/ \
# EXCLUDE_PATTERNS =
# EXCLUDE_SYMBOLS =
# EXTENSION_MAPPING =
# EXTRACT_LOCAL_CLASSES =
# FILE_PATTERNS =
# GENERATE_TAGFILE =
# GENERATE_TREEVIEW =
# HIDE_COMPOUND_REFERENCE =
# HIDE_SCOPE_NAMES =
# HIDE_UNDOC_CLASSES =
# HIDE_UNDOC_MEMBERS =
# HTML_TIMESTAMP =
# INLINE_GROUPED_CLASSES =
# INPUT_ENCODING =
# INTERNAL_DOCS =
# OPTIMIZE_OUTPUT_FOR_C =
PROJECT_BRIEF = "The successor to Hyperion aka Hyperion Next Generation"
PROJECT_NAME = "Hyperion.NG"
# PROJECT_NUMBER =
# SHORT_NAMES =
# SHOW_FILES =
# SHOW_INCLUDE_FILES =
# SHOW_NAMESPACES =
# SORT_BRIEF_DOCS =
# SORT_BY_SCOPE_NAME =
# SORT_MEMBER_DOCS =
# STRICT_PROTO_MATCHING =
# TYPEDEF_HIDES_STRUCT =
USE_MDFILE_AS_MAINPAGE = README.md
# VERBATIM_HEADERS =
#

20
.devcontainer.json Normal file
View File

@ -0,0 +1,20 @@
{
"name": "Hyperion.ng Linux",
"extensions": [
"twxs.cmake",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"spmeesseman.vscode-taskexplorer",
"yzhang.markdown-all-in-one",
"CoenraadS.bracket-pair-colorizer",
"vscode-icons-team.vscode-icons",
"editorconfig.editorconfig"
],
"settings": {
"editor.formatOnSave": false,
"cmake.environment": {
},
},
"forwardPorts": [8090, 8092],
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev"
}

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
custom: "https://www.paypal.me/HyperionAmbi"

View File

@ -1,7 +1,7 @@
---
name: Bug report
about: Create a report to help us improving Hyperion
labels: bug
labels: Waiting For Review
---
<!-- Please don't delete this template or we'll close your issue -->

1
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1 @@
blank_issues_enabled: false

4
.github/config/codeql.yml vendored Normal file
View File

@ -0,0 +1,4 @@
name: "CodeQL config"
paths-ignore:
- 'dependencies/external/'
- 'assets/webconfig/js/lib'

7
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

12
.github/issues.yml vendored Normal file
View File

@ -0,0 +1,12 @@
Issues:
opened: |
Hello @$AUTHOR
We make use of an **[ISSUE TEMPLATE](https://github.com/$REPO_FULL_NAME/issues/new/choose)** to capture relevant information to support you best. Unfortunately, **you ignored or deleted** the given sections. Please take care that all information requested is provided.
This issue will be automatically closed by our bot, please do not take it personally. We would like asking you to open a new issue following the **[ISSUE TEMPLATE](https://github.com/$REPO_FULL_NAME/issues/new/choose)**.
Thanks for your continuous support!
Best regards,
Hyperion-Project

View File

@ -1,17 +1,20 @@
PullRequest:
opened: |
Hello @$AUTHOR :wave:
Hello @$AUTHOR :wave:
I'm your friendly neighborhood bot and would like to say thank you for
submitting a pull request to Hyperion!
I'm the Hyperion Project Bot and I want to thank you for
contributing to Hyperion with your pull requests!
So that you and other users can test your changes more quickly,
you can find your workflow artifacts [here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID).
To help you and other users test your pull requests faster,
I'll create a link for you to your workflow artifacts.
If you make changes to your PR, i create a new link to your workflow artifacts.
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID
Of course, if you make changes to your PR, I will create a new link.
Best regards,
Hyperion-Project
Hyperion Project
synchronize: |
[Here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID) is your new link to your workflow artifacts.
Hey @$AUTHOR I created a new link to your workflow artifacts:
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID

154
.github/workflows/apt.yml vendored Normal file
View File

@ -0,0 +1,154 @@
name: Hyperion APT Build
on:
workflow_call:
inputs:
head_sha:
type: string
description: The branch, tag or SHA to checkout
required: true
secrets:
APT_GPG:
required: true
APT_USER:
required: true
APT_PASSWORD:
required: true
APT_DRAFT:
required: true
workflow_dispatch:
inputs:
head_sha:
type: string
description: The branch, tag or SHA to checkout
required: true
secrets:
APT_GPG:
required: true
APT_USER:
required: true
APT_PASSWORD:
required: true
APT_DRAFT:
required: true
jobs:
setup:
name: Setup APT build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set APT matrix
id: apt-ppa
run: |
APT=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "apt=$APT" >> $GITHUB_OUTPUT
outputs:
apt-matrix: ${{ steps.apt-ppa.outputs.apt }}
build:
name: ${{ matrix.description }}
needs: [setup]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.apt-matrix) }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
submodules: true
- name: Generate environment variables
run: |
tr -d '\n' < .version > temp && mv temp .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish APT packages
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
needs: [setup, build]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6.0.0
with:
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
- name: Make build folders, export public GPG key and copy distributions file
run: |
mkdir -p apt/{conf,dists,db}
gpg --armor --output apt/hyperion.pub.key --export 'admin@hyperion-project.org'
cp debian/distributions apt/conf/distributions
- name: Create initial structure/packages files and symbolic links
run: |
reprepro -Vb apt createsymlinks
reprepro -Vb apt export
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/hyperion_*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
reprepro -Vb apt/ includedeb "$dist" "$file"
fi
done
- name: Upload packages to APT server (DRAFT)
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: apt.hyperion-project.org
username: ${{ secrets.APT_USER }}
password: ${{ secrets.APT_PASSWORD }}
local-dir: "./apt/"
server-dir: ${{ secrets.APT_DRAFT }}
dangerous-clean-slate: true

58
.github/workflows/apt/amd64.json vendored Normal file
View File

@ -0,0 +1,58 @@
[
{
"distribution": "Focal",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (amd64)"
},
{
"distribution": "Jammy",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (amd64)"
},
{
"distribution": "Kinetic",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (amd64)"
},
{
"distribution": "Lunar",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 23.04 (Lunar Lobster) (amd64)"
},
{
"distribution": "Buster",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (amd64)"
},
{
"distribution": "Bullseye",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (amd64)"
},
{
"distribution": "Bookworm",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (amd64)"
}
]

51
.github/workflows/apt/arm64.json vendored Normal file
View File

@ -0,0 +1,51 @@
[
{
"distribution": "Focal",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (arm64)"
},
{
"distribution": "Jammy",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (arm64)"
},
{
"distribution": "Kinetic",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (arm64)"
},
{
"distribution": "Buster",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (arm64)"
},
{
"distribution": "Bullseye",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (arm64)"
},
{
"distribution": "Bookworm",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (arm64)",
"exclude" : true
}
]

51
.github/workflows/apt/armhf.json vendored Normal file
View File

@ -0,0 +1,51 @@
[
{
"distribution": "Focal",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (armhf)"
},
{
"distribution": "Jammy",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (armhf)"
},
{
"distribution": "Kinetic",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (armhf)"
},
{
"distribution": "Buster",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl1.0-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (armhf)"
},
{
"distribution": "Bullseye",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (armhf)"
},
{
"distribution": "Bookworm",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (armhf)",
"exclude" : true
}
]

View File

@ -1,5 +1,6 @@
name: Clean artifacts
# Run cleanup workflow at the end of every day
on:
schedule:
- cron: '0 0 * * *'

76
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,76 @@
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: "36 18 * * 4"
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ python, javascript, cpp ]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Packages (cpp)
if: ${{ matrix.language == 'cpp' }}
run: |
sudo apt-get update
sudo apt-get install --yes git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
config-file: ./.github/config/codeql.yml
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{ matrix.language }}"
upload: False
output: sarif-results
- name: Filter SARIF
uses: advanced-security/filter-sarif@v1
with:
patterns: |
-**/dependencies/**
-**/moc_*.cpp
-**/libsrc/flatbufserver/hyperion_request_generated.h
-**/libsrc/protoserver/message.pb.cc
-**/libsrc/protoserver/message.pb.h
input: sarif-results/${{ matrix.language }}.sarif
output: sarif-results/${{ matrix.language }}.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: sarif-results/${{ matrix.language }}.sarif
- name: Upload loc as a Build Artifact
uses: actions/upload-artifact@v3
with:
name: sarif-results
path: sarif-results
retention-days: 1

187
.github/workflows/nightly.yml vendored Normal file
View File

@ -0,0 +1,187 @@
name: Nightly build
# Create nightly builds at the end of every day
on:
schedule:
- cron: '0 0 * * *'
repository_dispatch:
types: [hyperion_nightly_push]
jobs:
update:
name: Update Submodule rpi_ws281x
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
submodules: recursive
- name: Update Submodule rpi_ws281x
id: update
run: git submodule update --remote --recursive dependencies/external/rpi_ws281x
- name: Check git status
id: status
run: echo "status=$(git status -s)" >> $GITHUB_OUTPUT
- name: Add and commit changes
if: ${{ steps.status.outputs.status }}
run: |
git config --local user.email "20935312+Hyperion-Bot@users.noreply.github.com"
git config --local user.name "Hyperion-Bot"
git config --local diff.ignoreSubmodules dirty
git commit -am "Update submodule rpi_ws281x"
- name: Push changes
if: ${{ steps.status.outputs.status }}
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.HYPERION_BOT_TOKEN }}
branch: ${{ github.ref }}
check:
name: Compare local <-> nightly
needs: [update]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check if commit has changed
id: build-necessary
run: |
if wget --spider "https://nightly.apt.hyperion-project.org/$(git rev-parse --short HEAD)" 2>/dev/null; then
echo "commit-has-changed=false" >> $GITHUB_OUTPUT
else
echo "commit-has-changed=true" >> $GITHUB_OUTPUT
fi
outputs:
build-nightly: ${{ steps.build-necessary.outputs.commit-has-changed }}
setup:
name: Setup nightly build
needs: [check]
if: ${{ needs.check.outputs.build-nightly == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set nightly matrix
id: nightly-ppa
run: |
NIGHTLY=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "nightly=$NIGHTLY" >> $GITHUB_OUTPUT
outputs:
nightly-matrix: ${{ steps.nightly-ppa.outputs.nightly }}
build:
name: ${{ matrix.description }}
needs: [setup]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.nightly-matrix) }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Generate environment variables
run: |
echo "$(tr -d '\n' < .version)+nightly$(date '+%Y%m%d')$(git rev-parse --short HEAD)" > .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish nightly packages
needs: [setup, build]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6.0.0
with:
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
- name: Make build folders, export public GPG key, copy distributions file and create short sha file for nightly build check
run: |
mkdir -p nightly/{conf,dists,db}
gpg --armor --output nightly/hyperion.pub.key --export 'admin@hyperion-project.org'
cp debian/distributions nightly/conf/distributions
touch "nightly/$(git rev-parse --short HEAD)"
- name: Create initial structure/packages files and symbolic links
run: |
reprepro -Vb nightly createsymlinks
reprepro -Vb nightly export
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
reprepro -Vb nightly/ includedeb "$dist" "$file"
fi
done
- name: Upload packages to nightly server
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: nightly.apt.hyperion-project.org
username: ${{ secrets.NIGHTLY_USER }}
password: ${{ secrets.NIGHTLY_PASSWORD }}
local-dir: "./nightly/"
server-dir: "./"
dangerous-clean-slate: true
- name: Remove intermediate artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: artifact
failOnError: false

View File

@ -15,38 +15,39 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ]
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerTag: amd64
dockerName: Debian Stretch (AMD64)
- dockerImage: x86_64
dockerName: Debian Buster (x86_64)
platform: x11
- dockerTag: armv6hf
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
- dockerImage: armv6l
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerTag: armv7hf
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
- dockerImage: armv7l
dockerName: Debian Buster (Raspberry Pi 2 & 3)
platform: rpi
- dockerTag: aarch64
dockerName: Debian Stretch (Generic AARCH64)
- dockerImage: aarch64
dockerName: Debian Buster (Generic AARCH64)
platform: amlogic
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to version
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < version > temp && mv temp version
echo -n -PR#${{ github.event.pull_request.number }} >> version
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
# Build packages
- name: Build packages
env:
DOCKER_TAG: ${{ matrix.dockerTag }}
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: buster
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
@ -56,17 +57,15 @@ jobs:
- name: Collecting deployable artifacts
shell: bash
run: |
mkdir -p ${{ matrix.dockerTag }}
mv deploy/*.tar.gz ${{ matrix.dockerTag }}
if: matrix.dockerTag != 'aarch64'
mkdir -p ${{ matrix.dockerImage }}
mv deploy/*.tar.gz ${{ matrix.dockerImage }}
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.dockerTag }}
path: ${{ matrix.dockerTag }}
if: matrix.dockerTag != 'aarch64'
name: ${{ matrix.dockerImage }}
path: ${{ matrix.dockerImage }}
######################
###### macOS #########
@ -77,16 +76,16 @@ jobs:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to version
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < version > temp && mv temp version
echo -n "-PR#${{ github.event.pull_request.number }}" >> version
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
# Install dependencies
- name: Install dependencies
@ -105,11 +104,11 @@ jobs:
shell: bash
run: |
mkdir -p macOS
mv build/*.tar.gz macOS
mv build/*.dmg macOS
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v3
with:
name: macOS
path: macOS
@ -120,39 +119,53 @@ jobs:
windows:
name: Windows
runs-on: windows-latest
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to version
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < version > temp && mv temp version
echo -n "-PR#${{ github.event.pull_request.number }}" >> version
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
- name: Install Qt
uses: jurplel/install-qt-action@v2
uses: jurplel/install-qt-action@v3
with:
version: '5.15.0'
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Install Python
uses: actions/setup-python@v1
- name: Cache Chocolatey downloads
uses: actions/cache@v3
with:
python-version: '3.x'
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
- name: Install NSIS
run: choco install --no-progress nsis -y
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install OpenSSL
run: choco install --no-progress openssl -y
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress openssl --version=1.1.1.2100 -y
choco install --no-progress directx-sdk -y
- name: Install libjpeg-turbo
run: |
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
.\libjpeg-turbo /S
- name: Set up x64 build architecture environment
shell: cmd
@ -170,38 +183,11 @@ jobs:
shell: bash
run: |
mkdir -p windows
mv build/*.zip windows
mv build/*.exe windows
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v3
with:
name: windows
path: windows
######################
#### Documentation ###
######################
docs:
name: Documentation
runs-on: ubuntu-latest
defaults:
run:
working-directory: docs
steps:
- name: Checkout
uses: actions/checkout@v2
# Install dependencies
- name: Setup node 12
uses: actions/setup-node@v1
with:
node-version: '12'
# Build Docs
- name: Build docs
run: |
npm install -g yarn
yarn install
yarn docs:build

View File

@ -1,122 +1,136 @@
name: Hyperion CI Build
on:
push:
branches-ignore:
- 'gh-pages'
- 'docker-ci'
branches:
- '**'
tags:
- '*'
jobs:
######################
###### Linux #########
######################
###################
###### Linux ######
###################
Linux:
name: ${{ matrix.dockerName }}
runs-on: ubuntu-latest
strategy:
matrix:
dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ]
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerTag: amd64
dockerName: Debian Stretch (AMD64)
- dockerImage: x86_64
dockerName: Debian Buster (x86_64)
platform: x11
- dockerTag: armv6hf
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
- dockerImage: armv6l
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerTag: armv7hf
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
- dockerImage: armv7l
dockerName: Debian Buster (Raspberry Pi 2 & 3)
platform: rpi
- dockerTag: aarch64
dockerName: Debian Stretch (Generic AARCH64)
- dockerImage: aarch64
dockerName: Debian Buster (Generic AARCH64)
platform: amlogic
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# build process
# Build process
- name: Build packages
env:
DOCKER_TAG: ${{ matrix.dockerTag }}
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: buster
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: deploy/Hyperion-*
######################
###### macOS #########
######################
###################
###### macOS ######
###################
macOS:
name: macOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# install dependencies
# Install dependencies
- name: Install dependencies
shell: bash
run: ./.ci/ci_install.sh
# build process
# Build process
- name: Build packages
env:
PLATFORM: osx
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
######################
###### Windows #######
######################
#####################
###### Windows ######
#####################
windows:
name: Windows
runs-on: windows-latest
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
- name: Install Qt
uses: jurplel/install-qt-action@v2
uses: jurplel/install-qt-action@v3
with:
version: '5.15.0'
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Install Python
uses: actions/setup-python@v1
- name: Cache Chocolatey downloads
uses: actions/cache@v3
with:
python-version: '3.x'
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
- name: Install NSIS
run: choco install --no-progress nsis -y
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install OpenSSL
run: choco install --no-progress openssl -y
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress openssl --version=1.1.1.2100 -y
choco install --no-progress directx-sdk -y
- name: Install libjpeg-turbo
run: |
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
.\libjpeg-turbo /S
- name: Set up x64 build architecture environment
shell: cmd
@ -129,82 +143,40 @@ jobs:
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
retention-days: 1
######################
#### Documentation ###
######################
#####################################
###### Publish GitHub Releases ######
#####################################
Docs:
name: Documentation
runs-on: ubuntu-latest
defaults:
run:
working-directory: docs
steps:
- name: Checkout
uses: actions/checkout@v2
# Install dependencies
- name: Setup node 12
uses: actions/setup-node@v1
with:
node-version: '12'
# Build Docs
- name: Build docs
run: |
cd docs
npm install -g yarn
yarn install
yarn docs:build
# Deploy to gh-pages (only on tagged commit)
- name: Deploy to gh-pages
if: startsWith(github.event.ref, 'refs/tags')
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/dist
cname: docs.hyperion-project.org
################################
###### Publish Releases ########
################################
publish:
name: Publish Releases
github_publish:
name: Publish GitHub Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [Linux, macOS, windows, Docs]
needs: [Linux, macOS, windows]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
# generate environment variables
- name: Generate environment variables from version and tag
# Generate environment variables
- name: Generate environment variables from .version and tag
run: |
echo ::set-env name=TAG::${GITHUB_REF/refs\/tags\//}
echo ::set-env name=VERSION::$(tr -d '\n' < version)
echo ::set-env name=preRelease::false
# If version contains alpha or beta, mark draft release as pre-release
- name: Mark release as pre-release
if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
run: echo ::set-env name=preRelease::true
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV
# Download artifacts from previous build process
- name: Download artifacts
uses: actions/download-artifact@v2
uses: actions/download-artifact@v3.0.2
with:
path: artifacts
# create draft release and upload artifacts
# Create draft release and upload artifacts
- name: Create draft release
uses: softprops/action-gh-release@v1
with:
@ -212,15 +184,18 @@ jobs:
tag_name: ${{ env.TAG }}
files: "artifacts/**"
draft: true
prerelease: ${{ env.preRelease }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Dispatch event to build new HyperBian image
- name: Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v1
if: ${{ github.repository_owner == 'hyperion-project'}}
with:
repository: hyperion-project/HyperBian
token: ${{ secrets.HYPERION_BOT_TOKEN }}
event-type: hyperion_push
##########################
###### APT workflow ######
##########################
apt_build:
name: APT Build GitHub Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [Linux, macOS, windows]
uses: ./.github/workflows/apt.yml
secrets: inherit
with:
head_sha: master

18
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,18 @@
name: Release Actions
on:
release:
types: [published]
jobs:
hyperbian:
name: Let HyperBian create
runs-on: ubuntu-latest
steps:
# Dispatch event to build new HyperBian image
- name: Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v2.1.2
if: ${{ github.repository_owner == 'hyperion-project'}}
with:
repository: hyperion-project/HyperBian
token: ${{ secrets.HYPERION_BOT_TOKEN }}
event-type: hyperion_push

22
.gitignore vendored
View File

@ -17,3 +17,25 @@ CMakeCache.txt
/lib
.directory
*.pyc
compile_commands.json
# Autogenerated by flatbuffers
libsrc/flatbufserver/hyperion_reply_generated.h
libsrc/flatbufserver/hyperion_request_generated.h
# Kdevelop project files
*.kdev*
# Visual Studio 2015/2017/2019 cache/options directory
# Ignore
.vs/*
CMakeSettings.json
/out
# Allow
!.vs/launch.vs.json
# LedDevice 'File' output
NULL
# Docker deploy folder
deploy/*

9
.gitmodules vendored
View File

@ -8,5 +8,10 @@
branch = master
[submodule "dependencies/external/protobuf"]
path = dependencies/external/protobuf
url = https://github.com/hyperion-project/protobuf.git
branch = master
url = https://github.com/protocolbuffers/protobuf
[submodule "dependencies/external/qmdnsengine"]
path = dependencies/external/qmdnsengine
url = https://github.com/nitroshare/qmdnsengine.git
[submodule "dependencies/external/mbedtls"]
path = dependencies/external/mbedtls
url = ../../Mbed-TLS/mbedtls.git

1
.version Normal file
View File

@ -0,0 +1 @@
2.0.16-beta.1

17
.vs/launch.vs.json Normal file
View File

@ -0,0 +1,17 @@
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "hyperiond.exe (bin\\hyperiond.exe)",
"name": "Run hyperion with debug option and external console",
"args": [
"-d",
"-c"
],
"externalConsole": true
}
]
}

View File

@ -16,9 +16,6 @@
"ms-vscode.cmake-tools",
"spmeesseman.vscode-taskexplorer",
"yzhang.markdown-all-in-one",
"formulahendry.auto-rename-tag",
"CoenraadS.bracket-pair-colorizer",
"eamodio.gitlens",
"vscode-icons-team.vscode-icons",
"editorconfig.editorconfig"
]

20
.vscode/launch.json vendored
View File

@ -9,7 +9,7 @@
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/hyperiond",
"args": [],
"args": ["-d"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
@ -27,12 +27,24 @@
"name": "(Windows) hyperiond",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/Debug/hyperiond.exe",
"args": [],
"program": "${command:cmake.launchTargetDirectory}/hyperiond",
"args": ["-d"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
"console": "internalConsole"
},
{
"name": "(macOS) Hyperion.app",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/Hyperion.app/Contents/MacOS/Hyperion",
"args": ["-d"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "internalConsole",
"MIMode": "lldb"
}
]
}

4
.vscode/tasks.json vendored
View File

@ -11,7 +11,7 @@
"windows": {
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
},
"group": "build",
"group": "build"
},
{
"label": "cmake:conf Debug",
@ -21,7 +21,7 @@
"windows": {
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
},
"group": "build",
"group": "build"
},
{
"label": "build:debug hyperiond",

View File

@ -458,6 +458,44 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
===========
Animate.css
===========
Animate.css Copyright 2021 Daniel Eden (“Licensor”)
Hippocratic License Version Number: 2.1.
Purpose. The purpose of this License is for the Licensor named above to permit the Licensee (as defined below) broad permission, if consistent with Human Rights Laws and Human Rights Principles (as each is defined below), to use and work with the Software (as defined below) within the full scope of Licensors copyright and patent rights, if any, in the Software, while ensuring attribution and protecting the Licensor from liability.
Permission and Conditions. The Licensor grants permission by this license (“License”), free of charge, to the extent of Licensors rights under applicable copyright and patent law, to any person or entity (the “Licensee”) obtaining a copy of this software and associated documentation files (the “Software”), to do everything with the Software that would otherwise infringe (i) the Licensors copyright in the Software or (ii) any patent claims to the Software that the Licensor can license or becomes able to license, subject to all of the following terms and conditions:
* Acceptance. This License is automatically offered to every person and entity subject to its terms and conditions. Licensee accepts this License and agrees to its terms and conditions by taking any action with the Software that, absent this License, would infringe any intellectual property right held by Licensor.
* Notice. Licensee must ensure that everyone who gets a copy of any part of this Software from Licensee, with or without changes, also receives the License and the above copyright notice (and if included by the Licensor, patent, trademark and attribution notice). Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. For clarity, although Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee with additional or different terms, the portion of the Software not modified must be distributed pursuant to this License. If anyone notifies Licensee in writing that Licensee has not complied with this Notice section, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice. If Licensee does not do so, Licensees License (and all rights licensed hereunder) shall end immediately.
* Compliance with Human Rights Principles and Human Rights Laws.
1. Human Rights Principles.
(a) Licensee is advised to consult the articles of the United Nations Universal Declaration of Human Rights and the United Nations Global Compact that define recognized principles of international human rights (the “Human Rights Principles”). Licensee shall use the Software in a manner consistent with Human Rights Principles.
(b) Unless the Licensor and Licensee agree otherwise, any dispute, controversy, or claim arising out of or relating to (i) Section 1(a) regarding Human Rights Principles, including the breach of Section 1(a), termination of this License for breach of the Human Rights Principles, or invalidity of Section 1(a) or (ii) a determination of whether any Law is consistent or in conflict with Human Rights Principles pursuant to Section 2, below, shall be settled by arbitration in accordance with the Hague Rules on Business and Human Rights Arbitration (the “Rules”); provided, however, that Licensee may elect not to participate in such arbitration, in which event this License (and all rights licensed hereunder) shall end immediately. The number of arbitrators shall be one unless the Rules require otherwise.
Unless both the Licensor and Licensee agree to the contrary: (1) All documents and information concerning the arbitration shall be public and may be disclosed by any party; (2) The repository referred to under Article 43 of the Rules shall make available to the public in a timely manner all documents concerning the arbitration which are communicated to it, including all submissions of the parties, all evidence admitted into the record of the proceedings, all transcripts or other recordings of hearings and all orders, decisions and awards of the arbitral tribunal, subject only to the arbitral tribunal's powers to take such measures as may be necessary to safeguard the integrity of the arbitral process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3) Article 26(6) of the Rules shall not apply.
2. Human Rights Laws. The Software shall not be used by any person or entity for any systems, activities, or other uses that violate any Human Rights Laws. “Human Rights Laws” means any applicable laws, regulations, or rules (collectively, “Laws”) that protect human, civil, labor, privacy, political, environmental, security, economic, due process, or similar rights; provided, however, that such Laws are consistent and not in conflict with Human Rights Principles (a dispute over the consistency or a conflict between Laws and Human Rights Principles shall be determined by arbitration as stated above). Where the Human Rights Laws of more than one jurisdiction are applicable or in conflict with respect to the use of the Software, the Human Rights Laws that are most protective of the individuals or groups harmed shall apply.
3. Indemnity. Licensee shall hold harmless and indemnify Licensor (and any other contributor) against all losses, damages, liabilities, deficiencies, claims, actions, judgments, settlements, interest, awards, penalties, fines, costs, or expenses of whatever kind, including Licensors reasonable attorneys fees, arising out of or relating to Licensees use of the Software in violation of Human Rights Laws or Human Rights Principles.
* Failure to Comply. Any failure of Licensee to act according to the terms and conditions of this License is both a breach of the License and an infringement of the intellectual property rights of the Licensor (subject to exceptions under Laws, e.g., fair use). In the event of a breach or infringement, the terms and conditions of this License may be enforced by Licensor under the Laws of any jurisdiction to which Licensee is subject. Licensee also agrees that the Licensor may enforce the terms and conditions of this License against Licensee through specific performance (or similar remedy under Laws) to the extent permitted by Laws. For clarity, except in the event of a breach of this License, infringement, or as otherwise stated in this License, Licensor may not terminate this License with Licensee.
* Enforceability and Interpretation. If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, then such invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction; provided, however, subject to a court modification pursuant to the immediately following sentence, if any term or provision of this License pertaining to Human Rights Laws or Human Rights Principles is deemed invalid, illegal, or unenforceable against Licensee by a court of competent jurisdiction, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee. Upon a determination that any term or provision is invalid, illegal, or unenforceable, to the extent permitted by Laws, the court may modify this License to affect the original purpose that the Software be used in compliance with Human Rights Principles and Human Rights Laws as closely as possible. The language in this License shall be interpreted as to its fair meaning and not strictly for or against any party.
* Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
This Hippocratic License is an Ethical Source license (https://ethicalsource.dev) and is offered for use by licensors and licensees at their own risk, on an “AS IS” basis, and with no warranties express or implied, to the maximum extent permitted by Laws.
===========
Flatbuffers
===========
@ -704,6 +742,64 @@ trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**
=====================
Material Design Icons
=====================
Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), with Reserved Font Name Material Design Icons.
Copyright (c) 2014, Google (http://www.google.com/design/) uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects,
to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves.
The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works.
The fonts and derivatives, however, cannot be released under any other type of license.
The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such.
This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version,
by changing formats or by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software,
to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software,
provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files,
human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder.
This restriction only applies to the primary font name as presented to the users.
The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote,
endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license.
The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION This license becomes null and void if any of the above conditions are not met.
DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
=====
Gijgo
=====
@ -730,6 +826,58 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
==============
PlainDraggable
==============
MIT License
Copyright (c) 2021 anseki
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
==========
LeaderLine
==========
MIT License
Copyright (c) 2021 anseki
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
======
HIDAPI
======
@ -739,11 +887,40 @@ HIDAPI
Copyright 2009, Alan Ott, Signal 11 Software.
All Rights Reserved.
This software may be used by anyone for any reason so
long as the copyright notice in the source files
remains intact.
========
HyperHDR
========
MIT License
Copyright (c) 2021 awawa-dev
Project homesite: https://github.com/awawa-dev/HyperHDR
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
===========
JSON-Editor
===========
@ -834,6 +1011,7 @@ all code is your original work. `</legalese>`
## Marked
Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
Permission is hereby granted, free of charge, to any person obtaining a copy
@ -856,8 +1034,8 @@ THE SOFTWARE.
## Markdown
Copyright © 2004, John Gruber
http://daringfireball.net/
Copyright © 2004, John Gruber
http://daringfireball.net/
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@ -874,7 +1052,7 @@ metismenu
The MIT License (MIT)
Copyright (c) 2014-2018 Osman Nuri Okumuş
Copyright (c) 2014-2021 Osman Nuri Okumuş
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
@ -1377,6 +1555,346 @@ tinkerforge
Copyright (C) 2012-2013 Matthias Bolte <matthias@tinkerforge.com>
Copyright (C) 2011 Olaf Lüke <olaf@tinkerforge.com>
Redistribution and use in source and binary forms of this file,
with or without modification, are permitted.
======
libcec
======
This file is part of the libCEC(R) library.
libCEC(R) is Copyright (C) 2011-2020 Pulse-Eight Limited. All rights reserved.
libCEC(R) is a original work, containing original code.
libCEC(R) is a trademark of Pulse-Eight Limited.
This program is dual-licensed; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Alternatively, you can license this library under a commercial license,
please contact Pulse-Eight Licensing for more information.
For more information contact:
Pulse-Eight Licensing <license@pulse-eight.com>
http://www.pulse-eight.com/
http://www.pulse-eight.net/
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
==========================================
Oklab Color Space Reference Implementation
==========================================
Copyright (c) 2021 Björn Ottosson
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -4,15 +4,471 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.6...HEAD)
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.15...HEAD)
### Breaking
### Added
### Changed
### Fixed
- Fixed missing Include limits in QJsonSchemaChecker
- Fixed dependencies for deb packages in Debian Bookworm
## Removed
## [2.0.15](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.15) - 2023-02
### Added
- Audio Grabber to add audio visualization support for both Windows and Linux.
- Support streaming to individual WLED segments (requires WLED 0.13.3+).
To allow segment streaming, enable "Realtime - Use main segment only" in WLED's Sync Interfaces setup screen
- Allow to keep WLED powered on after streaming and restoring state
- Allow to Disable / Enable all instances (#970) by
- Suspend/Resume support for Linux and Windows (#1493,#1282, #978).
Suspend/Resume/Restart is supported via API, UI, Systray and hyperion-remote
- Idle scenario via Screen Locking (Linux/Windows), Screensaver invokation (Linux), hyperion-remote or API
In Idle, all instances, components will be disabled besides the output processing (LED-Devices, smoothing).
The current priorities will be cleared and the background effect per instance will be executed, if enabled.
- Commands toogleSuspend and toggleIdle allow to flip between modes, e.g. might be used to trigger modes by a remote
- Reduced pixel processing to reduce resources on big assignment areas
- Support for squared mean color processing
- Support for dominant color processing on assigned LED areas (#1382). A simple and advanced way is provided. Advanced and high accuracy might be combined with reduced pixel processing to lower CPU usage.
- Add instance# in API response (#1504)
### Changed
- REST API - Increased default timeout to address "Operation cancelled" errors
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
- Renamed LED area assignment naming to provide clarity on the processing algorithms
### Fixed
- Effects/Smoothing: Effects with dedicated smoothing settings will now run with those settings (even if general smoothing is off)
- No interim color update after streaming and turning off WLED
- LED-Matrix Layout: Add Cabling direction selection element again (#1566)
- Restart correctly, if running as service (#1368)
- Hue-Wizard: In case auto discovery failed, port 80 was not used as default (#1544)
- Send only one reply per Start Instance request (#1551)
- Add instance# in JSON-API replies (aligning to Add instance in websocket response to a subscription #1504 behaviour)
- hyperion-remote: Extracting reply for a configGet request correctly (#1555)
- Grabber fps setting was not applied correctly
- Smoothing: No empty updates
### Technical
- Add CodeQL for GitHub code scanning
- Update to Protocol Buffers 3.21.12
- Update to Mbed TLS 3.3.0
- Qt6 alignments
- cmake support of libcec without version in lib-name
- Refactor for Python 3.11 deprecated functions
## Removed
## [2.0.14](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.14) - 2022-11
Hyperion's November release is not too big, but provides you with the latest updates and fixes. Many thanks to all contributors providing code (xkns, drzony) or translations.
### Added
- New color processing settings: Saturation gain and brightness/value gain. They allow compensating washed out HDR colors on LEDs (#822, #1092, #1142 partially).
- New languages: Catalan & Greek
- USB Capture: Support 3D processing for MJPEG
- Forwarding: Support flat-/proto buffer input
- Adalight: HyperSerial support (High speed protocol by awawa-dev) and support device feedback, show statistics provided by HyperSerial (modified by LordGrey) sketch
- AtmoOrb: Firmware image for Particle/Photon
### Changed
- Serial LED-devices: Ability to select standard Baud rates, as well as defining a custom one
- LED-devices: Do not switch-off device, if background effect is configured and will kick-in soon
### Fixed
- USB-Grabber: Fixed a SEGFAULT when compiled on Ubuntu Server 22.04
- USB Grabber: Fixed memory leak when transforming MJPEG
- ImageResampler: Apply only half crop for 3D to maintain crop ratio
- Remote Control: Update Color calibration values when calibration settings were saved
- Fixed Smoothing got out of sync when saving configuration
- Smoothing: Removed "outputrate" as duplicate to update frequency
- Queue LED-device on/off signals
- UI: Correctly lookup current Instance Name
- Fixed AtmoOrb firmware image
## [2.0.13](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.13) - 2022-05-22
### Added
- Allow to build a "light" version of Hyperion, i.e. no grabbers, or services like flat-/proto buffers, boblight, CEC
- Allow to restart Hyperion via Systray
- mDNS support for all platforms inkl. Windows (#740)
- Forwarder: mDNS discovery support and ease of configuration of other Hyperion instances
- Grabber: mDNS discovery for standalone grabbers
- Grabber: Dynamic loading of the Dispmanx Grabber (#1418)
- Flatbuffer/Protobuf are now able to receive RGBA data
- Added the instance number as part of the logline (#910). In the UI Log the instance is presented as a readable name.
- New language: Japanese
##### LED-Devices
- Support retry attempts enabling devices, e.g. to open devices after network or a device itself got available (#1302). Fixes that devices got "stuck", if initial open failed e.g. for WLED, Hue
- New UDP-DDP (Distributed Display Protocol) device to overcome the 490 LEDs limitation of UDP-RAW
- mDNS discovery support and ease of configuration (Cololight, Nanoleaf, Philips-Hue, WLED, Yeelight); removes the need to configure IP-Address, as address is resolved automatically.
- Allow to disable switching LEDs on during startup (#1390)
- Support additional Yeelight models
- Show warning, if get properties failed (Network devices: indication that network device is not reachable)
- LED Layout Classic: Support keystone correction via draggable corner LEDs
- LED Layout Matrix: Support vertical cabling direction (#1420)
### Changed
- Color Smoothing is started in pause mode to save resources, when Hyperion starts with no active source
- Boblight: Support multiple Boblight clients with different priorities
- UI: LED Preview has been given a touch of Ambilight.
- UI: Allow configuration of a Boblight server per LED-instance
- UI: LED Layout - Removed limitations on indention
- UI: Log output and LED preview window can be maximized
- mDNS Publisher: Aligned Hyperion mDNS names to general conventions and simplified naming
##### LED-Devices
- Refactored Philips Hue wizard and LED-Device
- WLED's default streaming protocol is now UDP-DDP. More than 490 LEDs are supported now (requires minimum WLED 0.11.0). UDP-RAW is still supported in parallel (via expert settings).
- Present all serial/TTY devices during discovery in expert mode; no filtering on existing vendor-identifier (Adalight serial USB does not show up in GUI #1458)
### Fixed
- UI: Ensure all configuration and system info response are there before reloading the page (#1430)
- UI: Show all previous log lines in the Log UI (was only working for Debug before)
- UI: Remote control: Treat duration=0 as endless
- UI: Stop Web-Browser capture when user triggers other activities
- Effects: Fix image URL in Matrix effect
- Effects: Fix that start effect is stuck on UI
- Effects: Fixed that effect specific smoothing setup was not applied when effect is started from available- or effects under configuration
- Qt-Grabber: Fixed position handling of multiple monitors (#1320, #1403)
- Standalone grabbers: Improved fps help/error text, fixed default address and port, fixed auto discovery of Hyperion server in hyperion-remote
- hyperion-remote: Show image filename in UI for images sent
- Reworked PriorityMuxer and Subscriptions
- PriorityMuxer: Fix crash when running fore- and background effect in parallel during start-up
- Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)
- Start JSON and WebServer only, if Hyperion's instance 0 is available
- Treat http headers case insensitive (RFC 2616)
- Fixed: Signal detection does not switch off all instances (#1281)
- Do not kill application on SIGILL-signal (#1435)
- Fixed Qt version override, e.g. set via QTDIR
- Update jsonschema and checkschema to allow checking hyperion.config.json.default on Windows
##### LED-Devices
- Fixes that the Led-Device output flow was interrupted, by an enabling API request on an already enabled device (#967)
- Yeelight - Workaround: Ignore error when setting music mode = off, but the music-mode is already off (#1372)
- Fixed: Hue Entertainment mode does not resume after no signal (#930)
## Removed
- UI: Removed sessions (of other Hyperions)
- Replaced existing AVAHI/Bonjour code by QMdnsEngine
## [2.0.12](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.12) - 2021-11-20
Hyperion's November release brings you some new features, removed IPv6 address related limitations, as well as fixing a couple of issues.
Hyperion packages can be installed now under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
Details about the installation can be found in the installation.md and at apt.hyperion-project.org.
### Added
- New LED-device type: Razor Chroma.
Note: Due to Chroma Razer API limitations, only one device can be configured.
- APA102 - Support setting maximum brightness level (1-31)
- New installation method (Drag'n Drop) for macOS.
- hyperion-remote & standalone grabbers: IPv6 support
- New languages: Danish & Hungarian
### Changed
- LED-Devices: Removed IPv6 limitations
- Philips-Hue Wizard optimizations
- JSON/Flatbuffer forwarder: Removed IPv6 limitations
- Allow to import configurations from previous versions
Note: Existing configurations are migrated to new structures automatically
### Fixed
- Fixed API Subscription (e.g. as used by HomeAssistant) (#1351)
- Fixed APA102 protocol aligning to the standard defined, removed Latch-Time as not required by APA102 protocol (#1352, #1132)
- Fixed hyperion-remote when sending multiple Hex-Colors with "Set Color" option
- UI: Fixed "Selected Hyperion instance isn't running" issue (#1357)
- Fixed Database migration version handling
- Fixed Python ModuleNotFoundError (#1109)
### Technical
- Added Qt6 support
- Migrated to MBEDTSL 3
## [2.0.0-alpha.11](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.11) - 2021-10-06
The release is primarily fixing issues introduced with alpha 10, but covering other findings too.
Thanks to everybody highlighting real problem areas, as well as to those proactively providing fixes for integration via pull requests.
Besides bug fixing, you will find some smaller enhancements which make everybodys life easier.
The fact that WS281x devices must run under root caused many headaches before in getting them running.
We did not weaken security, but provide you with an easy to use script to switch the user-id of hyperion going forward. Furthermore, device configuration is blocked, if the environment does not allow it.
### Added:
- Script to change the user Hyperion is executed with.
To run Hyperion with root privileges (e.g. for WS281x) execute <br> `sudo updateHyperionUser -u root`
- Gif effects can source Gifs via URLs in addition to local files as input
- System info screen: Added used config path and "is run under root/admin"
- LED-Device enhancements
- WS281x: Ensure that a device cannot be configured via the UI when Hyperion is not run with root privileges
- Nanoleaf: Support discovering additional Nanoleaf devices, e.g. Shapes
- Nanoleaf: Ability to restore state when Hyperion stops streaming<br>
Note: In case previous state was a dynamic/temporary effect, the state cannot be restored
- Nanoleaf: New Feature: allow to overwrite brightness by Hyperion
### Changed:
- The Systemd/Upstart/System-V-Init service registers Hyperion under the name hyperion instead of hyperiond, as this has caused confusion among users in the past.
- WLED and UDP-Raw: Limit maximum LEDs number to 490
- WS281x: Update DMA default as per rpi_ws281x recommendation
- Smoothing is paused when no input source is available (to save resources)
- Disable LED update streaming, if LED updates are not required, Sync. Video-Streaming between Layout and Simulation
- Load configuration of last instance used when loading the UI page, Streamline API requests to avoid unnecessary invocations (#1311)
- BobLight: Priorities are not limited any longer. BobLight can feed Priorities [2-253], default is still 128 (#1269)
- Amlogic grabber: Limit grabber to 30fps during discovery
- Amlogic grabber: Continuous image feed even when paused (to not have LEDs switched off), plus no delay when pausing/unpausing
### Fixed:
- Fixed that Smoothing with "Continuous Updates" disabled does not provides LED updates (#1068, #1240)
- Fixed Issue Blinking / flickering cursor with QT screen capture on Windows (#1328)
- Fixed Colour effect priority is not deleted when Colorpicker is open (double click on delete is required)
- Fixed reuse local SSDP address (#1324)
- Exclude FB Grabber on Amlogic platform, as FB is included in Amlogic Grabber
- Escape XSS payload to avoid execution (#1292)
- Include libqt5sql5-sqlite packaging dependency
- Fixed embedded Python location (#1109)
- LED-Devices
- Fixed Philips Hue wizard (#1276)
- Fixed AtmoOrb wizard
- Fixed that Lightpack device does not core when lack of permissions error (LIBUSB_ERROR_ACCESS)
- Fixed Atmo/Karate LED count constraint handling
- Fixed Hue, Disable LED general options (HW Led count & RGB Byte order) as calculated
- Fixed SPI, Tpm2.Net - Memory issues
- Fixed: Nanoleaf does not turn on
- Fixed LED layout - Additional parameters for classic layout were not saved (#1314)
- Fixed Network LED-Device UI: Trigger getProperties for the configured host, when no hosts were discovered
### Removed:
- Smoothing: Removed "Continuous Updates" flag as it is obsolete.
In case an LED-device requires continuous updates, use the LED-Device's "Rewrite Time" parameter.
## [2.0.0-alpha.10](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.10) - 2021-07-17
The focus of this release is on user experience.
We tried as much as possible supporting you in getting valid setup done, as well as providing enough room for expert users to tweak configurations here and there.
The reworked dashboard provides you now with the ability to control individual components, jump to key configuration items, as well as to switch between LED instances easily.
The refined color coding in the user-interfaces, helps you to quickly identify instance specific and global configuration items.
Of course, the release brings new features (e.g. USB Capture on Windows), as well as minor enhancements and a good number of fixes.
Note:
- **IMPORTANT:** Due to the rework of the grabbers, both screen- and video grabbers are disabled after the upgrade to the new version.
Please, re-enable the grabber of choice via the UI, validate the configuration and save the setup. The grabber should the restart.
- Hyperion packages can now be installed under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
Details about the installation can be found in the [installation.md](https://github.com/hyperion-project/hyperion.ng/blob/master/Installation.md) and at [apt.hyperion-project.org](apt.hyperion-project.org).
- Find here more details on [supported platforms and configuration sets](https://github.com/hyperion-project/hyperion.ng/blob/master/doc/development/SupportedPlatforms.md)
### Breaking
### Added
- The Dashboard is now a one-stop control element to control instances and link into configuration areas
- LED Instance independent configuration objects (e.g. capturing hardware) are now separated out in the menu
- New menu item "Sources" per LED instances configuration to enable/disable screen or usb grabber per instance
#### Grabbers
- Windows Media Foundation USB grabber (incl. Media Foundation transform/Turbo-JPEG scaling)
- Linux V4L2 Grabber now supports the following formats: NV12, YUV420
- Image flipping ability in ImageResampler/Turbo-JPEG
- UI: Simplified screens for non-expert usage, do only show elements relevant
- Discover available Grabbers (incl. their capabilities for selection), not supported grabbers are not presented. Note: Screen capturing on Wayland is not supported (given the Wayland security architecture)
- USB Grabber: New ability to configure hardware controls (brightness, contrast, saturation, hue), as well as populating defaults
- Configuration item ranges are automatically adopted based on grabber capabilities,
- Grabbers can only be saved with a valid configuration
- Standalone grabbers: Added consistent options/capabilities for standalone grabbers, debug logging support
- Screen grabbers: Allow to set capture frequency, size decimation and cropping across all grabber types
- Screen grabber: QT-Grabber allows to capture individual displays or all displays in a multi-display setup
- Display Signal Detection area in preview (expert users)
- UI: Only show CEC detection, if supported by platform
#### LED-Devices
- Select device from list of available devices (UI Optimization - Select device from list of available devices #1053) - Cololight, Nanoleaf, Serial Devices (e.g. Adalight), SPI-Device, Pi-Blaster
- Get device properties for automatic configuration of number of LEDs and initial layout (WLED, Cololight, Nanoleaf)
- Identify/Test device (WLED, Cololight, Nanoleaf, Adalight)
- For selected devices a default layout configuration is created, if the user chooses "Overwrite" (WLED, Cololight, Nanoleaf, all serial devices, all spi device, pi-blaster)
- Ensure Hardware LED count matches number of lights (Philips Hue, Yeelight, Atmo Orb)
- User is presented a warning/error, if there is a mismatch between configured LED number and available hardware LEDs
- Add udev support for Serial-Devices
- Allow to get properties for Atmo and Karatedevices to limit LED numbers configurable
- Philips Hue: Add basic support for the Play Gradient Lightstrip
- WLED: Support of ["live" property] (https://github.com/Aircoookie/WLED/issues/1308) (#1095)
- WLED: Brightness overwrite control by configuration
- WLED: Allow to disable WLED synchronization when streaming via hyperion
- WLED: Support storing/restoring state (#1101)
- Adalight: Fix LED Num for non analogue output in arduino firmware
- Allow to blacklist LEDs in layout via UI
- Live Video image to LedLayout preview (#1136)
#### Other
- Effects: Support Custom Effect Templates in UI for custom effect creation and configuration
- Effects: Custom effect separation in the systray menu
- New languages - Portuguese (Std/Brazil) & Norwegian (Bokmål)
- New Flags: Russia, Cameroon, Great Britain, England, Scotland
- Provide cross compilation on x86_64 for developers using docker. This includes the ability to use local code, as well as build incrementally
### Changed
- Grabbers use now precise timings for better timing accuracy
- Nanoleaf: Consider Nanoleaf-Shape Controllers
- LED-Devices: Show HW-Ledcount in all setting levels
- System Log Screen: Support to copy loglines, system info and status of the current instance to the clipboard (to share it for investigation)
- Updated dependency rpi_ws281x to latest upstream
- Fix High CPU load (RPI3B+) (#1013)
### Fixed
- Active grabbers are displayed correctly after updating the WebUI
- Issue Crop values are checked against decimated resolution (#1160)
- Framebuffer grabber is deactivated in case of error
- Fix/no signal detection (#1087)
- Fix that global settings were not correctly reflected across instances after updates in other non default instance (#1131,#1186,#1188)
- Fix UI: Handle error scenario properly, when last instance number used does not exist any longer.
- UI Allow to have password handled by Password-Manager (#1263)
- Fixed effect freezing during startup
- Effects were not started from tray (#1199)
- Interrupt effect on timeout (#1013)
- Fixed color and effect handling and duplicate priorities (#993,#1113,#1216)
- Stop background effect, when it gets out of scope (to not use resources unnecessarily)
- Custom Effect Templates (schemas) are now loaded
- Effects: Uploaded images were not found executing custom image effects
- "LED Test" effect description is in wrong order (#1229)
- LED-Devices: Only consider Hardware LED count (#673)
- LED-Devices: Correct total packet count in tpm2net implementation (#1127)
- LED-Hue: Proper black in Entertainment mode if min brightness is set
- LED-Hue: Minor fix of setColor command
- Nanoleaf: Fixed behaviour, if external control mode cannot be set
- System Log Screen: Fixed Auto-Scrolling, Update Look & Feel, Works across multiple Browser tabs/windows, as log stream is not stopped by a new UI
- Rename Instance and Change Password: Modal did not close
- Read-Only mode was not handled in the SysInfo function
- WebSockets: Handling of fragmented frames fixed
- Fixed libcec dependencies
- General language and grammar updates
### Removed
## [2.0.0-alpha.9](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.9) - 2020-11-18
### Added
- Grabber: DirectX9 support (#1039)
- New blackbar detection mode "Letterbox", that considers only bars at the top and bottom of picture
- LED-Devices: Cololight support (Cololight Plus & Strip) incl. configuration wizard
- LED-Devices: SK9822 support (#1005,#1017)
- UX: New language support: Russian and Chinese (simplified) (#1005)
- UX: Additional details on Hardware/CPU information (#1045)
- UX: Systray icons added - Issue #925 (#1040)
- Read-Only configuration database support
- Hide Window Systray icon on Hyperion exit & Install DirectX Redistributable
- Read-Only configuration database support
### Changed
- boblight: reduce cpu time spent on memcopy and parsing rgb values (#1016)
- Windows Installer/Uninstaller notification when Hyperion is running (#1033)
- Updated Windows Dependencies
- Documentation: Optimized images (#1058)
- UX: Default LED-layout is now one LED only to avoid errors as in #673
- UX: Change links from http to https (#1067)
- Change links from http to https (#1067)
- Cleanup packages.cmake & extend NSIS plugin directory
- Optimize images (#1058)
- Docs: Refreshed EN JSON API documentation
### Fixed
- Color calibration for Kodi 18 (#1044)
- LED-Devices: Karatelight, allow an 8-LED configuration (#1037)
- LED-Devices: Save Hue light state between sessions (#1014)
- LED-Devices: LED's retain last state after clearing a source (#1008)
- LED-Devices: Lightpack issue #1015 (#1049)
- Fix various JSON API issues (#1036)
- Fix issue #909, Have ratio correction first and then scale (#1047)
- Fix display argument in hyperion-qt (#1027)
- Fix Python reset thread state
- AVAHI included in Webserver (#996)
- Fix add libcec to deb/rpm dependency list
- Fix Hyperion configuration is corrected during start-up, if required
- Fix color comparison / Signal detection (#1087)
### Removed
- Replace Multi-Lightpack by multi-instance Lightpack configuration (#1049)
## [2.0.0-alpha.8](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.8) - 2020-09-14
### Added
- Add XCB grabber, a faster and safer alternative for X11 grabbing (#912)
- for Windows: Add binary meta (#932)
- Differentiate between LED-Device Enable/Disable and Switch On/Off (#960) (Fixes: #828)
- AtmoOrb discovery and identification support (#988)
- New AtmoOrb Wizard (#988)
- Added and updated some language files (#900, #926, #916) (DE, CS, NL, FR, IT, PL, RO, ES, SV, TR, VI)
### Changed
- Improved UDP-Device Error handling (#961)
- NSIS/Systray option to launch Hyperion on Windows start (HKCU) (#887)
- Updated some dependencies (#929, #1003, #1004)
- refactor: Modernize Qt connections (#914)
- refactor: Resolve some clang warnings (#915)
- refactor: Several random fixes + Experimental playground (#917)
- Use query interface for void returning X requests (#945)
- Move Python related code to Python module (#946)
- General tidy up (#958)
- AtmoOrb ESP8266 sketch to support device identification, plus small fix (#988)
### Fixed
- webui: Works now with HTTPS port 443 (#923 with #924)
- Adalight issue (#903 with #991)
- Fixed CI: Trigger HyperBian build after release
- Fixed: -DUSE_SYSTEM_MBEDTLS_LIBS=ON - undefined reference (#898)
- set zlib back to system ignore list/revert pr #871 (#904)
- Fixed: logger and led colors (#906)
- Fixed: some more threading errors (#911)
- Fix OSX build (#952)
- AtmoOrb Fix (#988)
- Return TAN to API requests whenever possible (#1002)
## [2.0.0-alpha.7](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.7) - 2020-07-23
### Added
- [HyperBian](https://github.com/hyperion-project/HyperBian/releases) - A Raspberry Pi OS Lite image with Hyperion pre installed. (#832)
- An option to reset (delete) the database for the commandline has been added (#820)
- Improve language selection usability (#812)
- readded V4L2 Input method from old Hyperion (#825)
- re-added V4L2 Input method from old Hyperion (#825)
- Windows: Start Hyperion with a console window `hyperiond -c` (Or new start menu entry) (#860)
- Get process IDs by iterating /proc (#843)
- Dump stack trace on crash (Implement #849) (#870)
@ -24,7 +480,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* discover, getProperties, identify, store/restore state and power-on/off available for Philips-Hue, Nanoleaf, Yeelight, partially for Rs232 / USB (Hid)
* New device capabilities are accessible via JSON-API
* New REST-API wrapper class in support of network devices, e.g. Philips Hue, Nanoleaf and WLED
* Flexible ssdp-Discovery incl. RegEx matching and filtering
* Flexible SSDP-Discovery incl. RegEx matching and filtering
- Documentation (#875)
* Process workflow for LED-Devices
* Documentation of device classes & methods
@ -67,7 +523,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fix resolution change event Fixes part of #620 (#867)
- some code improvements & cleanup (#861) (#872) (#880) (#876)
- some little things, as always (#863)
- AtomOrb: Buffer length fix and new configuration validations (#875)
- AtmoOrb: Buffer length fix and new configuration validations (#875)
- Added missing DMX SubTypes to configuration (#875)
- Fix logger (#885)
* Make logger thread safe
@ -75,12 +531,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* Make logs look a bit more cleaner
- Decrease compile time (#886)
- Fix some data synchronization error (#890)
- Fix Qt screenhot crash (#889)
- Fix Qt screenshot crash (#889)
- Fix crash on startup if no X server available (#892)
- Fix RPC restart of Hyperion (#894)
### Removed
## [2.0.0-alpha.6](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.6) - 2020-05-27
### Breaking
The release package names have been adjusted.\
@ -133,7 +587,7 @@ If you used a `.deb` package please uninstall it before you upgrade
- Resolve enable state for v4l and screen capture (#728)
- Enable/Disable loops for components
- Runs now on x86_64 LibreElec (missing libs) (#736)
- Brightness componsation is now visible for configuration (#746)
- Brightness compensation is now visible for configuration (#746)
- Prevent malformed image size for effects with specific led layouts (#746)
### Changed:
@ -163,7 +617,7 @@ If you used a `.deb` package please uninstall it before you upgrade
- Smoothing comp state on startup (#685)
- Azure GitHub release title (#686)
- SSL/Avahi problems in previous release (#689)
- WebUI Version Check to SemVer. Also addes "Alpha" Channel (#692)
- WebUI Version Check to SemVer. Also adds "Alpha" Channel (#692)
### Removed
- Travis CI tests (#684)
@ -171,3 +625,4 @@ If you used a `.deb` package please uninstall it before you upgrade
## [2.0.0-alpha.1](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.1) - 2020-02-16
### Added
- Initial Release

View File

@ -1,23 +1,36 @@
cmake_minimum_required(VERSION 3.0.0)
cmake_minimum_required(VERSION 3.5.0)
message( STATUS "CMake Version: ${CMAKE_VERSION}" )
macro(addIndent text)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(APPEND CMAKE_MESSAGE_INDENT ${text})
endif()
endmacro()
macro(removeIndent)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(POP_BACK CMAKE_MESSAGE_INDENT)
endif()
endmacro()
PROJECT(hyperion)
# Parse semantic version of version file
# Parse semantic version of version file and write version to config
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake)
file (STRINGS "version" HYPERION_VERSION)
file (STRINGS ".version" HYPERION_VERSION)
SetVersionNumber(HYPERION ${HYPERION_VERSION})
set(DEFAULT_JSON_CONFIG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/config/hyperion.config.json.default)
file(READ ${DEFAULT_JSON_CONFIG_FILE} DEFAULT_JSON_CONFIG_VAR)
string(REPLACE "configVersionValue" ${HYPERION_VERSION} DEFAULT_JSON_CONFIG_VAR "${DEFAULT_JSON_CONFIG_VAR}")
string(REPLACE "previousVersionValue" ${HYPERION_VERSION} DEFAULT_JSON_CONFIG_VAR "${DEFAULT_JSON_CONFIG_VAR}")
file(WRITE ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default "${DEFAULT_JSON_CONFIG_VAR}")
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# auto prepare .qrc files
set(CMAKE_AUTORCC ON)
if ( POLICY CMP0026 )
CMAKE_POLICY( SET CMP0026 OLD )
endif()
# Configure CCache if available
find_program(CCACHE_FOUND ccache)
if ( CCACHE_FOUND )
@ -25,48 +38,98 @@ if ( CCACHE_FOUND )
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
if (NOT CMAKE_VERSION VERSION_LESS "3.12")
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
if(Python_FOUND)
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
# enable C++17
if(APPLE)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("Werror=unguarded-availability" REQUIRED_UNGUARDED_AVAILABILITY)
if(REQUIRED_UNGUARDED_AVAILABILITY)
list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "Werror=unguarded-availability")
endif()
else()
set(Python_ADDITIONAL_VERSIONS 3.5)
find_package( PythonInterp 3.5 REQUIRED )
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set build variables
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_QT ON )
SET ( DEFAULT_WS281XPWM OFF )
SET ( DEFAULT_AVAHI ON )
SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON )
# Grabber
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_DX OFF )
SET ( DEFAULT_MF OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT ON )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO ON )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
# Input
SET ( DEFAULT_BOBLIGHT_SERVER ON )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER ON )
SET ( DEFAULT_PROTOBUF_SERVER ON )
# Output
SET ( DEFAULT_FORWARDER ON )
SET ( DEFAULT_FLATBUF_CONNECT ON )
# LED-Devices
SET ( DEFAULT_DEV_NETWORK ON )
SET ( DEFAULT_DEV_SERIAL ON )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_DEV_WS281XPWM OFF )
# Services
SET ( DEFAULT_EFFECTENGINE ON )
SET ( DEFAULT_EXPERIMENTAL OFF )
SET ( DEFAULT_MDNS ON )
SET ( DEFAULT_REMOTE_CTL ON )
# Build
SET ( DEFAULT_JSONCHECKS ON )
SET ( DEFAULT_DEPLOY_DEPENDENCIES ON )
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
SET ( DEFAULT_TESTS OFF )
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_QMDNS_LIBS OFF )
SET ( DEFAULT_TESTS OFF )
# Build Hyperion with a reduced set of functionality, overwrites other default values
SET ( DEFAULT_HYPERION_LIGHT OFF )
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
SET ( DEFAULT_V4L2 ON )
SET ( DEFAULT_SPIDEV ON )
SET ( DEFAULT_TINKERFORGE ON )
SET ( DEFAULT_FB ON )
SET ( DEFAULT_USB_HID ON )
SET ( DEFAULT_CEC ON )
SET ( DEFAULT_FB ON )
SET ( DEFAULT_V4L2 ON )
SET ( DEFAULT_DEV_SPI ON )
SET ( DEFAULT_DEV_TINKERFORGE ON )
SET ( DEFAULT_DEV_USB_HID ON )
SET ( DEFAULT_CEC ON )
ELSEIF ( WIN32 )
SET ( DEFAULT_DX ON )
SET ( DEFAULT_MF ON )
ELSE()
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_SPIDEV OFF )
SET ( DEFAULT_TINKERFORGE OFF )
SET ( DEFAULT_USB_HID OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_CEC OFF )
ENDIF()
if ( NOT DEFINED PLATFORM )
if ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86" )
if ( APPLE )
SET( PLATFORM "osx")
elseif ( WIN32 )
SET( PLATFORM "windows")
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86" )
SET( PLATFORM "x11")
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
SET( PLATFORM "rpi")
@ -77,10 +140,6 @@ if ( NOT DEFINED PLATFORM )
elseif ( ("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2" OR "${SYSTEM_CPUINFO}" MATCHES "vero4k") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
SET( PLATFORM "amlogic64" )
endif()
elseif ( APPLE )
SET( PLATFORM "osx")
elseif ( WIN32 )
SET( PLATFORM "windows")
endif()
if ( PLATFORM )
message( STATUS "PLATFORM is not defined, evaluated platform: ${PLATFORM}")
@ -96,43 +155,50 @@ MACRO(FIRSTSUBDIR result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist "${curdir}/${child}")
BREAK()
ENDIF()
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist "${curdir}/${child}")
BREAK()
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
ENDMACRO()
if ( "${PLATFORM}" MATCHES "osx" )
# specify the min version of the target platform
SET ( CMAKE_OSX_DEPLOYMENT_TARGET "10.15" )
# add specific prefix paths
FIRSTSUBDIR(SUBDIRQT "/usr/local/Cellar/qt5")
FIRSTSUBDIR(SUBDIRPY "/usr/local/opt/python3/Frameworks/Python.framework/Versions")
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRQT} ${SUBDIRPY} "/usr/local/opt/qt5" )
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRPY})
include_directories("/opt/X11/include/")
SET ( DEFAULT_OSX ON )
SET ( DEFAULT_USB_HID ON )
SET ( DEFAULT_OSX ON )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_DEV_USB_HID ON )
elseif ( "${PLATFORM}" MATCHES "rpi" )
SET ( DEFAULT_DISPMANX ON )
SET ( DEFAULT_WS281XPWM ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic64" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" MATCHES "x11" )
SET ( DEFAULT_DEV_WS281XPWM ON )
elseif ( "${PLATFORM}" MATCHES "^amlogic" )
SET ( DEFAULT_AMLOGIC ON )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_AMLOGIC ON )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_CEC OFF )
endif()
elseif ( "${PLATFORM}" MATCHES "^x11" )
SET ( DEFAULT_X11 ON )
if ( "${PLATFORM}" STREQUAL "x11-dev" )
SET ( DEFAULT_XCB ON )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_AMLOGIC ON)
SET ( DEFAULT_WS281XPWM ON )
SET ( DEFAULT_DEV_WS281XPWM ON )
endif()
elseif ( "${PLATFORM}" STREQUAL "imx6" )
SET ( DEFAULT_FB ON )
elseif (WIN32)
SET ( DEFAULT_AVAHI OFF)
endif()
# enable tests for -dev builds
if ( "${PLATFORM}" MATCHES "-dev" )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_TESTS ON )
endif()
@ -141,54 +207,187 @@ STRING( REPLACE "-DEV" "" PLATFORM_DEFINE "${PLATFORM_DEFINE}" )
ADD_DEFINITIONS( ${PLATFORM_DEFINE} )
# set the build options
option(HYPERION_LIGHT "Build Hyperion with a reduced set of functionality" ${DEFAULT_HYPERION_LIGHT} )
message(STATUS "HYPERION_LIGHT = ${HYPERION_LIGHT}")
if (HYPERION_LIGHT)
message(STATUS "HYPERION_LIGHT: Hyperion is build with a reduced set of functionality.")
# Disable Grabbers
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_DX OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_MF OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
# Disable Input Servers
SET ( DEFAULT_BOBLIGHT_SERVER OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER OFF )
SET ( DEFAULT_PROTOBUF_SERVER OFF )
# Disable Output Connectors
SET ( DEFAULT_FORWARDER OFF )
SET ( DEFAULT_FLATBUF_CONNECT OFF )
# Disable Services
SET ( DEFAULT_EFFECTENGINE OFF )
endif()
message(STATUS "Grabber options:")
addIndent(" - ")
option(ENABLE_AMLOGIC "Enable the AMLOGIC video grabber" ${DEFAULT_AMLOGIC} )
message(STATUS "ENABLE_AMLOGIC = ${ENABLE_AMLOGIC}")
option(ENABLE_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX} )
message(STATUS "ENABLE_DISPMANX = ${ENABLE_DISPMANX}")
option(ENABLE_DX "Enable the DirectX grabber" ${DEFAULT_DX})
message(STATUS "ENABLE_DX = ${ENABLE_DX}")
if (ENABLE_AMLOGIC)
SET(ENABLE_FB ON)
else()
option(ENABLE_FB "Enable the framebuffer grabber" ${DEFAULT_FB} )
option(ENABLE_FB " Enable the framebuffer grabber" ${DEFAULT_FB} )
endif()
message(STATUS "ENABLE_FB = ${ENABLE_FB}")
option(ENABLE_OSX "Enable the osx grabber" ${DEFAULT_OSX} )
option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF})
message(STATUS "ENABLE_MF = ${ENABLE_MF}")
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} )
message(STATUS "ENABLE_OSX = ${ENABLE_OSX}")
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
message(STATUS "ENABLE_SPIDEV = ${ENABLE_SPIDEV}")
option(ENABLE_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_TINKERFORGE})
message(STATUS "ENABLE_TINKERFORGE = ${ENABLE_TINKERFORGE}")
option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT})
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
option(ENABLE_V4L2 "Enable the V4L2 grabber" ${DEFAULT_V4L2})
message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}")
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
option(ENABLE_AUDIO "Enable the AUDIO grabber" ${DEFAULT_AUDIO})
message(STATUS "ENABLE_AUDIO = ${ENABLE_AUDIO}")
option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} )
message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}")
option(ENABLE_AVAHI "Enable Zeroconf" ${DEFAULT_AVAHI})
message(STATUS "ENABLE_AVAHI = " ${ENABLE_AVAHI})
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
option(ENABLE_USB_HID "Enable the libusb and hid devices" ${DEFAULT_USB_HID} )
message(STATUS "ENABLE_USB_HID = ${ENABLE_USB_HID}")
removeIndent()
message(STATUS "Input options:")
addIndent(" - ")
option(ENABLE_BOBLIGHT_SERVER "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT_SERVER} )
message(STATUS "ENABLE_BOBLIGHT_SERVER = ${ENABLE_BOBLIGHT_SERVER}")
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC} )
message(STATUS "ENABLE_CEC = ${ENABLE_CEC}")
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
option(ENABLE_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER} )
message(STATUS "ENABLE_FLATBUF_SERVER = ${ENABLE_FLATBUF_SERVER}")
option(ENABLE_QT "Enable the qt grabber" ${DEFAULT_QT})
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
option(ENABLE_PROTOBUF_SERVER "Enable Protocol Buffers server" ${DEFAULT_PROTOBUF_SERVER} )
message(STATUS "ENABLE_PROTOBUF_SERVER = ${ENABLE_PROTOBUF_SERVER}")
removeIndent()
message(STATUS "Output options:")
addIndent(" - ")
option(ENABLE_FORWARDER "Enable Hyperion forwarding" ${DEFAULT_FORWARDER} )
message(STATUS "ENABLE_FORWARDER = ${ENABLE_FORWARDER}")
if (ENABLE_FORWARDER)
SET(ENABLE_FLATBUF_CONNECT ON)
else()
option(ENABLE_FLATBUF_CONNECT "Enable Flatbuffers connecting remotely" ${DEFAULT_FLATBUF_CONNECT} )
endif()
message(STATUS "ENABLE_FLATBUF_CONNECT = ${ENABLE_FLATBUF_CONNECT}")
removeIndent()
message(STATUS "LED-Device options:")
addIndent(" - ")
option(ENABLE_DEV_NETWORK "Enable the Network devices" ${DEFAULT_DEV_NETWORK} )
message(STATUS "ENABLE_DEV_NETWORK = ${ENABLE_DEV_NETWORK}")
option(ENABLE_DEV_SERIAL "Enable the Serial devices" ${DEFAULT_DEV_SERIAL} )
message(STATUS "ENABLE_DEV_SERIAL = ${ENABLE_DEV_SERIAL}")
option(ENABLE_DEV_SPI "Enable the SPI device" ${DEFAULT_DEV_SPI} )
message(STATUS "ENABLE_DEV_SPI = ${ENABLE_DEV_SPI}")
option(ENABLE_DEV_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_DEV_TINKERFORGE})
message(STATUS "ENABLE_DEV_TINKERFORGE = ${ENABLE_DEV_TINKERFORGE}")
option(ENABLE_DEV_USB_HID "Enable the libusb and hid devices" ${DEFAULT_DEV_USB_HID} )
message(STATUS "ENABLE_DEV_USB_HID = ${ENABLE_DEV_USB_HID}")
option(ENABLE_DEV_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_DEV_WS281XPWM} )
message(STATUS "ENABLE_DEV_WS281XPWM = ${ENABLE_DEV_WS281XPWM}")
removeIndent()
message(STATUS "Services options:")
addIndent(" - ")
option(ENABLE_EFFECTENGINE "Enable Effect-Engine" ${DEFAULT_EFFECTENGINE})
message(STATUS "ENABLE_EFFECTENGINE = ${ENABLE_EFFECTENGINE}")
option(ENABLE_EXPERIMENTAL "Compile experimental features" ${DEFAULT_EXPERIMENTAL})
message(STATUS "ENABLE_EXPERIMENTAL = ${ENABLE_EXPERIMENTAL}")
option(ENABLE_MDNS "Enable mDNS (aka Zeroconf)" ${DEFAULT_MDNS})
message(STATUS "ENABLE_MDNS = ${ENABLE_MDNS}")
option(ENABLE_REMOTE_CTL "Enable Hyperion remote control" ${DEFAULT_REMOTE_CTL})
message(STATUS "ENABLE_REMOTE_CTL = ${ENABLE_REMOTE_CTL}")
removeIndent()
message(STATUS "Build options:")
addIndent(" - ")
option(ENABLE_JSONCHECKS "Validate json schema files" ${DEFAULT_JSONCHECKS})
message(STATUS "ENABLE_JSONCHECKS = ${ENABLE_JSONCHECKS}")
option(ENABLE_DEPLOY_DEPENDENCIES "Deploy with dependencies" ${DEFAULT_DEPLOY_DEPENDENCIES})
message(STATUS "ENABLE_DEPLOY_DEPENDENCIES = ${ENABLE_DEPLOY_DEPENDENCIES}")
if(ENABLE_FLATBUF_SERVER OR ENABLE_FLATBUF_CONNECT)
message(STATUS "DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS = ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS}")
endif()
if(ENABLE_PROTOBUF_SERVER)
message(STATUS "DEFAULT_USE_SYSTEM_PROTO_LIBS = ${DEFAULT_USE_SYSTEM_PROTO_LIBS}")
endif()
message(STATUS "DEFAULT_USE_SYSTEM_MBEDTLS_LIBS = ${DEFAULT_USE_SYSTEM_MBEDTLS_LIBS}")
if (ENABLE_MDNS)
message(STATUS "DEFAULT_USE_SYSTEM_QMDNS_LIBS = ${DEFAULT_USE_SYSTEM_QMDNS_LIBS}")
endif()
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
option(ENABLE_TESTS "Compile additional test applications" ${DEFAULT_TESTS})
message(STATUS "ENABLE_TESTS = ${ENABLE_TESTS}")
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
removeIndent()
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
@ -196,43 +395,53 @@ SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
SET ( PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto )
SET ( PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto )
# check all json files
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
SET( JSON_FILES
config/hyperion.config.json.default
${HYPERION_SCHEMAS}
)
if(ENABLE_JSONCHECKS OR ENABLE_EFFECTENGINE)
if ("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
set(Python_ADDITIONAL_VERSIONS 3.5)
find_package(PythonInterp 3.5 REQUIRED)
else()
find_package(Python3 3.5 COMPONENTS Interpreter Development REQUIRED)
if(Python3_FOUND)
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
endif()
endif()
endif()
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
if(ENABLE_JSONCHECKS)
# check all json files
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
# for python 3 the checkschema.py file must be rewritten
# TODO on windows it can't resolve the path inside the file (Das System kann den angegebenen Pfad nicht finden: '\\schema\\schema-general.json')
IF (NOT WIN32)
EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkschema.py config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
if(ENABLE_EFFECTENGINE)
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
endif()
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkschema.py ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_CONFIG_FAILED
)
ENDIF()
IF ( ${CHECK_CONFIG_FAILED} )
MESSAGE (FATAL_ERROR "check of json default config failed" )
ENDIF ()
IF ( ${CHECK_CONFIG_FAILED} )
MESSAGE (FATAL_ERROR "check of json default config failed" )
ENDIF ()
endif(ENABLE_JSONCHECKS)
# Add project specific cmake modules (find, etc)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@ -258,26 +467,6 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
# Prefer static linking over dynamic
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
# enable C++11; MSVC doesn't have c++11 feature switch
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
if (CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
endif()
endif()
# MSVC options
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
# Search for Windows SDK
@ -285,105 +474,98 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
message(STATUS "WINDOWS SDK: ${WINDOWSSDK_LATEST_DIR} ${WINDOWSSDK_LATEST_NAME}")
message(STATUS "MSVC VERSION: ${MSVC_VERSION}")
# Qt5 default install path with msvc2017 64bit component
# The Qt5_DIR should point to Qt5Config.cmake -> C:/Qt/5.xx/msvc2017_64/lib/cmake/Qt5
# The CMAKE_PREFIX_PATH should point to the install directory -> C:/Qt/5.xx/msvc2017_64
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${SUBDIRQT}/msvc2019_64")
if (NOT DEFINED ENV{Qt5_DIR})
message(STATUS "Set Qt5 module path: ${SUBDIRQT}")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${SUBDIRQT}/msvc2019_64/lib/cmake/Qt5")
endif()
endif()
# Search for DirectX9
if (ENABLE_DX)
find_package(DirectX9 REQUIRED)
endif(ENABLE_DX)
# Windows specific
if(WIN32)
# Path to .rc icon file for add_executable() calls
SET ( WIN_RC_ICON_FILE ${CMAKE_SOURCE_DIR}/cmake/nsis/icon.rc)
# Force gui app
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
# Use GNU gold linker if available
if (NOT WIN32)
if (NOT WIN32 AND NOT APPLE)
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
endif()
# Don't create new dynamic tags (RUNPATH)
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
# Don't create new dynamic tags (RUNPATH) and setup -rpath to search for shared libs in BINARY/../lib folder (only for Unix)
if (ENABLE_DEPLOY_DEPENDENCIES AND UNIX AND NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
endif()
# setup -rpath to search for shared libs in BINARY/../lib folder
if (UNIX AND NOT APPLE)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif ()
# add QT5 dependency
IF ( CMAKE_CROSSCOMPILING )
file(GLOB QT_BIN ${QT_BIN_PATH})
set(QT_MOC_EXECUTABLE ${QT_BIN}/moc)
add_executable(Qt5::moc IMPORTED)
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_MOC_EXECUTABLE})
set(QT_RCC_EXECUTABLE ${QT_BIN}/rcc)
add_executable(Qt5::rcc IMPORTED)
set_property(TARGET Qt5::rcc PROPERTY IMPORTED_LOCATION ${QT_RCC_EXECUTABLE})
message(STATUS "QT_BIN_PATH = ${QT_BIN}")
message(STATUS "QT_MOC_EXECUTABLE = ${QT_MOC_EXECUTABLE}")
message(STATUS "QT_RCC_EXECUTABLE = ${QT_RCC_EXECUTABLE}")
ENDIF()
SET(QT_MIN_VERSION "5.5.0")
find_package(Qt5 COMPONENTS Core Gui Network SerialPort Sql REQUIRED)
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
IF ( "${Qt5Core_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
ENDIF()
# Add libusb and pthreads
find_package(libusb-1.0 REQUIRED)
find_package(Threads REQUIRED)
add_definitions(${QT_DEFINITIONS})
# Add JPEG library
if (ENABLE_V4L2)
# Turbo JPEG
find_package(TurboJPEG)
if (TURBOJPEG_FOUND)
add_definitions(-DHAVE_TURBO_JPEG)
message( STATUS "Using Turbo JPEG library: ${TurboJPEG_LIBRARY}")
include_directories(${TurboJPEG_INCLUDE_DIRS})
else()
# System JPEG
find_package(JPEG)
if (JPEG_FOUND)
add_definitions(-DHAVE_JPEG)
message( STATUS "Using system JPEG library: ${JPEG_LIBRARIES}")
include_directories(${JPEG_INCLUDE_DIR})
else()
message( STATUS "JPEG library not found, MJPEG camera format won't work in V4L2 grabber.")
endif()
endif (TURBOJPEG_FOUND)
if (TURBOJPEG_FOUND OR JPEG_FOUND)
add_definitions(-DHAVE_JPEG_DECODER)
endif()
endif()
if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "-framework CoreGraphics")
endif()
find_package(Threads REQUIRED)
# Allow to overwrite QT base directory
# Either supply QTDIR as -DQTDIR=<path> to cmake or set and environment variable QTDIR pointing to the Qt installation
# For Windows and OSX, the default Qt installation path are tried to resolved automatically
if (NOT DEFINED QTDIR)
if (DEFINED ENV{QTDIR})
set(QTDIR $ENV{QTDIR})
else()
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
if (NOT ${SUBDIRQT} STREQUAL "")
set(QTDIR "${SUBDIRQT}/msvc2019_64")
endif()
elseif ( "${PLATFORM}" MATCHES "osx" )
# QT6 x86_64 location
if (EXISTS /usr/local/opt/qt6)
set(QTDIR "/usr/local/opt/qt6")
# QT6 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@6)
set(QTDIR "/opt/homebrew/opt/qt@6")
# QT5 x86_64 location
elseif (EXISTS /usr/local/opt/qt5)
set(QTDIR "/usr/local/opt/qt5")
# QT5 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@5)
set(QTDIR "/opt/homebrew/opt/qt@5")
endif()
endif()
endif()
endif()
if (DEFINED QTDIR)
message(STATUS "Add QTDIR: ${QTDIR} to CMAKE_PREFIX_PATH")
list(PREPEND CMAKE_PREFIX_PATH ${QTDIR} "${QTDIR}/lib")
endif()
if (CMAKE_PREFIX_PATH)
message( STATUS "CMAKE_PREFIX_PATH used: ${CMAKE_PREFIX_PATH}" )
endif()
# find QT libs
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Found Qt Version: ${QT_VERSION}" )
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6 )
SET(QT_MIN_VERSION "6.2.2")
else()
SET(QT_MIN_VERSION "5.5.0")
endif()
if ( "${QT_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
endif()
find_package(Qt${QT_VERSION_MAJOR} ${QT_VERSION} COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Qt version used: ${QT_VERSION}" )
if (APPLE AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6) )
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl)
endif()
# Add libusb and pthreads
find_package(libusb-1.0 REQUIRED)
add_definitions(${QT_DEFINITIONS})
# Add the source/lib directories
add_subdirectory(dependencies)
add_subdirectory(libsrc)
@ -397,10 +579,16 @@ add_subdirectory(resources)
# remove generated files on make cleaan too
LIST( APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/EffectEngine.qrc
${CMAKE_BINARY_DIR}/WebConfig.qrc
${CMAKE_BINARY_DIR}/HyperionConfig.h
)
if(ENABLE_EFFECTENGINE)
LIST( APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/EffectEngine.qrc
)
endif ()
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_QRC}" )
# uninstall target

46
CMakeSettings.json Normal file
View File

@ -0,0 +1,46 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\build-${name}",
"installRoot": "${projectDir}\\install-${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
// Replace path with your TurboJPEG installation path
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
],
"environments": [
// Replace path with your installation path
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
]
},
{
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "Release",
"buildRoot": "${projectDir}\\build-${name}",
"installRoot": "${projectDir}\\install-${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "package",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": [
// Replace path with your TurboJPEG installation path
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
],
"environments": [
// Replace path with your installation path
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
]
}
]
}

View File

@ -94,13 +94,13 @@ Error( log_main, "oh to crazy, aborting");
// quick logging, when only one message exists and want no typing overhead - or usage in static functions
Info( Logger::getInstance("LedDevice"), "Leddevice %s started", "PublicStreetLighting");
// a bit mor complex - with printf like format
// a bit more complex - with printf like format
Info( log_main, "hello %s, you have %d messages", "Dax", 25);
// conditional messages
WarningIf( (value>threshold), log_main, "Alert, your value is greater then %d", threshold );
```
The amount of "%" mus match with following arguments
The amount of "%" must match with following arguments
#### The Placeholders
- %s for strings (this are cstrings, when having std::string use myStdString.c_str() to convert)
@ -110,7 +110,7 @@ The amount of "%" mus match with following arguments
#### Log Level
* Debug - used when message is more or less for the developer or for trouble shooting
* Info - used for not absolutly developer stuff messages for what's going on
* Info - used for not absolutely developer stuff messages for what's going on
* Warning - warn if something is not as it should be, but didn't harm
* Error - used when an error occurs
@ -120,7 +120,7 @@ The amount of "%" mus match with following arguments
> TODO
## Visual Studio Code
**We assume that you sucessfully compiled Hyperion with the [Compile HowTo](CompileHowto.md) WITHOUT Docker** \
**We assume that you successfully compiled Hyperion with the [Compile HowTo](CompileHowto.md) WITHOUT Docker** \
If you want to use VSCode for development follow the steps.
- Install [VSCode](https://code.visualstudio.com/). On Ubuntu 16.04+ you can also use the [Snapcraft VSCode](https://snapcraft.io/code) package.

View File

@ -1,208 +0,0 @@
# With Docker
If you are using [Docker](https://www.docker.com/), you can compile Hyperion inside a docker container. This keeps your system clean and with a simple script it's easy to use. Supported is also cross compiling for Raspberry Pi (Debian Stretch or higher). To compile Hyperion just execute one of the following commands.
The compiled binaries and packages will be available at the deploy folder next to the script.<br/>
Note: call the script with `./docker-compile.sh -h` for more options
## Native compiling on Raspberry Pi
**Raspbian Stretch**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-stretch
```
**Raspbian Buster**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-buster
```
## Cross compiling on X64_86 for:
**X64:**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh
```
**i386:**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t i386
```
**Raspberry Pi v1 & ZERO**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv6hf
```
**Raspberry Pi 2 & 3**
```
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv7hf
```
# The usual way
## Debian/Ubuntu/Win10LinuxSubsystem
```
sudo apt-get update
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
```
**on RPI you need the videocore IV headers**
```
sudo apt-get install libraspberrypi-dev
```
**OSMC on Raspberry Pi**
```
sudo apt-get install rbp-userland-dev-osmc
```
**ATTENTION Win10LinuxSubsystem** we do not (/we can't) support using hyperion in linux subsystem of MS Windows 10, albeit some users tested it with success. Keep in mind to disable
all linux specific led and grabber hardware via cmake. Because we use QT as framework in hyperion, serialport leds and network driven devices could work.
## Arch
See [AUR](https://aur.archlinux.org/packages/?O=0&SeB=nd&K=hyperion&outdated=&SB=n&SO=a&PP=50&do_Search=Go) for PKGBUILDs on arch. If the PKGBUILD does not work ask questions there please.
## OSX
To install on OS X you either need Homebrew or Macport but Homebrew is the recommended way to install the packages. To use Homebrew XCode is required as well, use `brew doctor` to check your install.
First you need to install the dependencies:
```
brew install qt5
brew install python3
brew install cmake
brew install libusb
brew install doxygen
brew install zlib
```
## Windows (WIP)
We assume a 64bit Windows 7 or higher. Install the following
- [Git](https://git-scm.com/downloads) (Check: Add to PATH)
- [Python 3 (Windows x86-64 executable installer)](https://www.python.org/downloads/windows/) (Check: Add to PATH and Debug Symbols)
- Open a console window and execute `pip install aqtinstall`.
- Now we can download Qt to _C:\Qt_ `mkdir c:\Qt && aqt install -O c:\Qt 5.15.0 windows desktop win64_msvc2019_64`
- [CMake (Windows win64-x64 Installer)](https://cmake.org/download/) (Check: Add to PATH)
- [Win64 OpenSSL v1.1.1g](https://slproweb.com/products/Win32OpenSSL.html) ([direct link](https://slproweb.com/download/Win64OpenSSL-1_1_1g.exe))
- [Visual Studio 2019 Build Tools](https://go.microsoft.com/fwlink/?linkid=840931) ([direct link](https://aka.ms/vs/16/release/vs_buildtools.exe))
- Select C++ Buildtools
- On the right, just select `MSVC v142 VS 2019 C++ x64/x86-Buildtools` and latest `Windows 10 SDK`. Everything else is not needed.
# Compiling and installing Hyperion
### The general quick way (without big comments)
complete automated process for Mac/Linux:
```bash
wget -qO- https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/bin/compile.sh | sh
```
some more detailed way: (or more or less the content of the script above)
be sure you fulfill the prerequisites above.
```bash
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git hyperion
cd hyperion
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j $(nproc)
if this get stucked and dmseg says out of memory try:
make -j 2
# optional: install into your system
sudo make install/strip
# to uninstall (not very well tested, please keep that in mind)
sudo make uninstall
# ... or run it from compile directory
bin/hyperiond
# webui is located on localhost:8090 or 8091
```
### Download
Creates hyperion directory and checkout the code from github
```
export HYPERION_DIR="hyperion"
git clone --recursive --depth 1 https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
```
### Preparations
Change into hyperion folder and create a build folder
```
cd "$HYPERION_DIR"
mkdir build
cd build
```
### Generate the make files:
To generate make files with automatic platform detection and default settings:
This should fit to *RPI, x86, amlogic/wetek*
```
cmake -DCMAKE_BUILD_TYPE=Release ..
```
*Developers on x86* linux should use:
```
cmake -DPLATFORM=x11-dev -DCMAKE_BUILD_TYPE=Release ..
```
To use framebuffer instead of dispmanx (for example on the *cubox-i*):
```
cmake -DENABLE_FB=ON -DCMAKE_BUILD_TYPE=Release ..
```
To generate make files on OS X:
Platform should be auto detected and refer to osx, you can also force osx:
```
cmake -DPLATFORM=osx -DCMAKE_BUILD_TYPE=Release ..
```
To generate files on Windows (Release+Debug capable):
Platform should be auto detected and refer to windows, you can also force windows:
```sh
# You might need to setup MSVC env first
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
cmake -DPLATFORM=windows -G "Visual Studio 16 2019" ..
```
### Run make to build Hyperion
The `-j $(nproc)` specifies the amount of CPU cores to use.
```bash
make -j $(nproc)
```
On a mac you can use ``sysctl -n hw.ncpu`` to get the number of available CPU cores to use.
```bash
make -j $(sysctl -n hw.ncpu)
```
On Windows run
```bash
cmake --build . --config Release -- -maxcpucount
```
Maintainer: To build installer, install [NSIS](https://nsis.sourceforge.io/Main_Page) and set env `VCINSTALLDIR="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC"`
### Install hyperion into your system
Copy all necessary files to ``/usr/local/share/hyperion``
```bash
sudo make install/strip
```
If you want to install into another location call this before installing
```bash
cmake -DCMAKE_INSTALL_PREFIX=/home/pi/apps ..
```
This will install to ``/home/pi/apps/share/hyperion``
### Integrating hyperion into your system
... ToDo

View File

@ -1,92 +0,0 @@
# Cross-Compile Hyperion-NG
Leverage the power of a host environment (here Ubuntu) compiling for a target platform (here Raspberry Pi).
Use a clean Raspbian Stretch Lite (on target) and Ubuntu 18/19 (on host) to execute the steps outlined below.
## On the Target system (here Raspberry Pi)
Install required additional packages.
```
sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite aptitude qt5-default rsync libssl-dev zlib1g-dev
```
## On the Host system (here Ubuntu)
Update the Ubuntu environment to the latest stage and install required additional packages.
```
sudo apt-get update
sudo apt-get upgrade
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
```
Refine the target IP or hostname, plus userID as required and set-up cross-compilation environment:
```
export TARGET_IP=x.x.x.x
export TARGET_USER=pi
```
```
export CROSSROOT="$HOME/crosscompile"
export RASCROSS_DIR="$CROSSROOT/raspberrypi"
export ROOTFS_DIR="$RASCROSS_DIR/rootfs"
export TOOLCHAIN_DIR="$RASCROSS_DIR/tools"
export QT5_DIR="$CROSSROOT/Qt5"
export HYPERION_DIR="$HOME/hyperion.ng"
```
Get native files from target platform into the host-environment:
```
mkdir -p "$ROOTFS_DIR/lib"
mkdir -p "$ROOTFS_DIR/usr"
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/lib "$ROOTFS_DIR"
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/usr/include "$ROOTFS_DIR/usr"
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/usr/lib "$ROOTFS_DIR/usr"
```
### Raspberry Pi specific steps
Get Raspberry Pi firmware:
```
mkdir -p "$RASCROSS_DIR/firmware"
git clone --depth 1 https://github.com/raspberrypi/firmware.git "$RASCROSS_DIR/firmware"
ln -s "$RASCROSS_DIR/firmware/hardfp/opt" "$ROOTFS_DIR/opt"
```
Get toolchain files which allows to build ARM executables on x86 platforms:
```
mkdir -p "$TOOLCHAIN_DIR"
cd $TOOLCHAIN_DIR
wget -c https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz --no-check-certificate
tar -xvf gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
```
### Install the Qt5 framework
```
mkdir -p "$QT5_DIR"
cd "$QT5_DIR"
wget -c http://download.qt.io/archive/qt/5.7/5.7.1/qt-opensource-linux-x64-5.7.1.run
chmod +x $QT5_DIR/*.run
```
Display absolute installation directory to be used in Qt5 installer:
```
echo $HOME/crosscompile/Qt5
```
Start the Qt5 installation.
Follow the dialogs and install in absolute directory of ```$HOME/crosscompile/Qt5``` (copy from above)
```
./qt-opensource-linux-x64-5.7.1.run
```
### Get the Hyperion-NG source files
```
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
```
### Get required submodules for Hyperion
```
cd "$HYPERION_DIR"
git fetch --recurse-submodules -j2
```
### Compile Hyperion-NG
```
cd "$HYPERION_DIR"
chmod +x "$HYPERION_DIR/bin/"*.sh
./bin/create_all_releases.sh
```
### Transfer output packages to target platform and install Hyperion-NG
Output packages for target platform (.deb, .tar.gz, .sh) can be found here:
```
$HYPERION_DIR/deploy/rpi
```
# Install Hyperion-NG on target platform
t.b.d.

View File

@ -1,47 +1,96 @@
// Generated config file
// Define to enable the dispmanx grabber
#cmakedefine ENABLE_DISPMANX
// Define to enable the v4l2 grabber
#cmakedefine ENABLE_V4L2
// Define to enable the framebuffer grabber
#cmakedefine ENABLE_FB
// Define to enable the amlogic grabber
// Define to enable the AMLogic grabber
#cmakedefine ENABLE_AMLOGIC
// Define to enable the osx grabber
// Define to enable the DispmanX grabber
#cmakedefine ENABLE_DISPMANX
// Define to enable the DirectX grabber
#cmakedefine ENABLE_DX
// Define to enable the framebuffer grabber
// Define to enable the Audio grabber
#cmakedefine ENABLE_AUDIO
// Define to enable the Framebuffer grabber
#cmakedefine ENABLE_FB
// Define to enable the Media Foundation grabber
#cmakedefine ENABLE_MF
// Define to enable the OSX grabber
#cmakedefine ENABLE_OSX
// Define to enable the x11 grabber
#cmakedefine ENABLE_X11
// Define to enable the qt grabber
// Define to enable the Qt grabber
#cmakedefine ENABLE_QT
// Define to enable the spi-device
#cmakedefine ENABLE_SPIDEV
// Define to enable the V4L2 grabber
#cmakedefine ENABLE_V4L2
// Define to enable the ws281x-pwm-via-dma-device using jgarff's library
#cmakedefine ENABLE_WS281XPWM
// Define to enable the X11 grabber
#cmakedefine ENABLE_X11
// Define to enable the tinkerforge device
#cmakedefine ENABLE_TINKERFORGE
// Define to enable the XCB grabber
#cmakedefine ENABLE_XCB
// Define to enable avahi
#cmakedefine ENABLE_AVAHI
// Define to enable boblight server
#cmakedefine ENABLE_BOBLIGHT_SERVER
// Define to enable cec
// Define to enable CEC
#cmakedefine ENABLE_CEC
// Define to enable the usb / hid devices
#cmakedefine ENABLE_USB_HID
// Define to enable flatbuffer server
#cmakedefine ENABLE_FLATBUF_SERVER
// Define to enable protocol buffer server
#cmakedefine ENABLE_PROTOBUF_SERVER
// Define to enable hyperion forwarding
#cmakedefine ENABLE_FORWARDER
// Define to enable enable flatbuffer connect
#cmakedefine ENABLE_FLATBUF_CONNECT
// Define to enable protocol buffer connect
#cmakedefine ENABLE_PROTOBUF_CONNECT
// Define to enable the network devices
#cmakedefine ENABLE_DEV_NETWORK
// Define to enable the Serial devices
#cmakedefine ENABLE_DEV_SERIAL
// Define to enable the SPI devices
#cmakedefine ENABLE_DEV_SPI
// Define to enable the Tinkerforge devices
#cmakedefine ENABLE_DEV_TINKERFORGE
// Define to enable the USB / HID devices
#cmakedefine ENABLE_DEV_USB_HID
// Define to enable the WS281x-PWM-via-DMA-device using jgarff's library
#cmakedefine ENABLE_DEV_WS281XPWM
// Define to enable MDNS
#cmakedefine ENABLE_MDNS
// Define to enable EFFECTENGINE
#cmakedefine ENABLE_EFFECTENGINE
// Define to enable experimental features
#cmakedefine ENABLE_EXPERIMENTAL
// Define to enable Hyperion remote control
#cmakedefine ENABLE_REMOTE_CTL
// Define to enable profiler for development purpose
#cmakedefine ENABLE_PROFILER
// Define to enable deploy dependencies to packages
#cmakedefine ENABLE_DEPLOY_DEPENDENCIES
// the hyperion build id string
#define HYPERION_BUILD_ID "${HYPERION_BUILD_ID}"
#define HYPERION_GIT_REMOTE "${HYPERION_GIT_REMOTE}"

53
Installation.md Normal file
View File

@ -0,0 +1,53 @@
# Installation
This page contains general installation steps for Hyperion.
## Windows & macOS
For Windows and macOS is an installation file available on our [Release page](https://github.com/hyperion-project/hyperion.ng/releases).
## Linux:
On the following operating systems, Hyperion can currently be installed/updated using the method listed below:
- Raspbian Buster/Raspberry Pi OS and later (armhf/arm64)
- Debian Buster(10) and later (armhf/arm64/x86_64)
- Ubuntu 20.04 and later (armhf/arm64/x86_64)
***
### Install Hyperion:
1. Add necessary packages for the installation:
```bash
sudo apt-get update && sudo apt-get install wget gpg apt-transport-https lsb-release
```
2. Add Hyperions official GPG key:
```bash
wget -qO- https://apt.hyperion-project.org/hyperion.pub.key | sudo gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
```
3. Add Hyperion-Project to your APT sources:
```bash
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hyperion.list
```
4. Update your local package index and install Hyperion:
```bash
sudo apt-get update && sudo apt-get install hyperion
```
***
### Update Hyperion:
```bash
sudo apt-get install hyperion
```
***
### If you want to uninstall Hyperion, use the following commands:
1. Remove Hyperion:
```bash
sudo apt-get --purge autoremove hyperion
```
2. Remove the Hyperion-Project APT source from your system:
```bash
sudo rm /usr/share/keyrings/hyperion.pub.gpg /etc/apt/sources.list.d/hyperion.list
```

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2014 hyperion team
Copyright (c) 2014-2023 Hyperion Project
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

46
PRIVACY.md Normal file
View File

@ -0,0 +1,46 @@
# Privacy Policy
Hyperion-Project takes your privacy seriously. To better protect your privacy we provide this privacy policy notice
explaining the way your personal or technical information is collected and used.
## Collection of Routine Information
This application does not collect or transmit any user's personally identifiable information.
No personal information is used, stored, secured or disclosed by services this application works with.
Limited technical information is sent (such as IP addresses included in the HTTP/S calls the application makes) but none of that is used or stored.
## Cookies
Where necessary, this app uses cookies to store information about a visitors preferences and history
in order to better serve the user and/or present the user with customized content.
## Links to Third Party Websites
We have included links on this app for your use and reference. We are not responsible for the privacy policies on these websites.
You should be aware that the privacy policies of these websites may differ from our own.
## Security
The security of your personal information is important to us. That is the reason we do not collect any information,
but remember that no method of transmission over the Internet, or method of electronic storage,
is 100% secure. While we strive to use commercially acceptable means to protect your personal information,
we cannot guarantee its absolute security.
## Changes To This Privacy Policy
This Privacy Policy is effective as of February 2022 and will remain in effect except with respect to any changes in its provisions in the future,
which will be in effect immediately after being posted on this page.
We reserve the right to update or change our Privacy Policy at any time and you should check this Privacy Policy periodically.
If we make any material changes to this Privacy Policy, we will notify you by placing a prominent notice on our app.
## Contact Information
For any questions or concerns regarding the privacy policy, please open up an issue on our GitHub
https://github.com/hyperion-project/hyperion.ng

View File

@ -1,15 +1,20 @@
![Hyperion](https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/assets/webconfig/img/hyperion/hyperionlogo.png)
<picture>
<source media="(prefers-color-scheme: dark)" srcset="doc/logo_dark.png">
<source media="(prefers-color-scheme: light)" srcset="doc/logo_light.png">
<img alt="Hyperion" src="doc/logo_light.png">
</picture>
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases)](https://github.com/hyperion-project/hyperion.ng/releases)
[![Dependencies](https://img.shields.io/librariesio/github/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/tree/master/dependencies/external)
[![Azure-Pipeline](https://dev.azure.com/Hyperion-Project/Hyperion.NG/_apis/build/status/Hyperion.NG?branchName=master)](https://dev.azure.com/Hyperion-Project/Hyperion.NG/_build/latest?definitionId=7&branchName=master)
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases&label=Latest%20Release&logo=github&logoColor=white&color=0f83e7)](https://github.com/hyperion-project/hyperion.ng/releases)
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/workflows/Hyperion%20CI%20Build/badge.svg?branch=master)](https://github.com/hyperion-project/hyperion.ng/actions)
[![LGTM](https://img.shields.io/lgtm/alerts/g/hyperion-project/hyperion.ng.svg)](https://lgtm.com/projects/g/hyperion-project/hyperion.ng/alerts/)
[![Documentation](https://codedocs.xyz/hyperion-project/hyperion.ng.svg)](https://codedocs.xyz/hyperion-project/hyperion.ng/)
[![CodeQL Analysis](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml/badge.svg)](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml)
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
[![Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
[![Discord](https://img.shields.io/discord/785578322167463937?label=Discord&logo=discord&logoColor=white&color=4bc51d)](https://discord.gg/XtVTb3HEKS)
![made-with-love](https://img.shields.io/badge/Made%20With-&#9829;-ff0000.svg)
## About Hyperion
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers. The project is still in a alpha development stage (no stable release available).
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers.
![Screenshot](doc/screenshot.png)
@ -20,44 +25,53 @@
* A command line utility for testing and integration in automated environment
* Priority channels are not coupled to a specific led data provider which means that a provider can post led data and leave without the need to maintain a connection to Hyperion. This is ideal for a remote application (like our [Android app](https://play.google.com/store/apps/details?id=nl.hyperion.hyperionpro)).
* Black border detector and processor
* A scriptable (Python) effect engine
* A scriptable (Python) effect engine with 39 build-in effects for your inspiration
* A multi language web interface to configure and remote control hyperion
### Supported Hardware
You can find a list of supported hardware [here](https://docs.hyperion-project.org/en/user/leddevices/).
If you need further support please open a topic at the forum!<br>
[![Hyperion webpage/forum](https://img.shields.io/website/https/hyperion-project.org.svg?down_color=red&down_message=offline&up_color=green&up_message=online)](https://www.hyperion-project.org)
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
## Contributing
Contributions are welcome! Feel free to join us! We are looking always for people who wants to participate.<br>
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg?label=Contributors&logo=github&logoColor=white)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
For an example, you can participate in the translation.<br>
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](https://poeditor.com/join/project/Y4F6vHRFjA)
[![Join Translation](https://img.shields.io/badge/POEditor-4bc51d.svg?label=Join%20Translation)](https://poeditor.com/join/project/Y4F6vHRFjA)
## Requirements
Debian 9, Ubuntu 16.04 or higher.
## Supported Platforms
We provide a macOS Build but we can not support this.
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md)
## Documentation
Covers these topics (WorkInProgress)
- Installation
- Configuration
- Effect development
- JSON API
Covers these topics:
- [Installation](https://docs.hyperion-project.org/en/user/Installation.html)
- [Configuration](https://docs.hyperion-project.org/en/user/Configuration.html)
- [Effect development](https://docs.hyperion-project.org/en/effects/#effect-files)
- [JSON API](https://docs.hyperion-project.org/en/json/)
[![Visit Documentation](https://img.shields.io/website?down_message=offline&label=Documentation%20%20&up_message=online&url=https%3A%2F%2Fdocs.hyperion-project.org)](https://docs.hyperion-project.org)
[![Visit Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
## Changelog
Released and unreleased changes at [Changelog.md](CHANGELOG.md)
Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md)
## Building
See [CompileHowto](CompileHowto.md) and [CrossCompileHowto](CrossCompileHowto.md).
See [CompileHowto.md](doc/development/CompileHowto.md).
## Installation
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or at [Installation.md](Installation.md).
## Download
Alpha releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
Releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
## Privacy Policy
See [PRIVACY.md](PRIVACY.md).
## License
The source is released under MIT-License (see http://opensource.org/licenses/MIT).<br>
The source is released under MIT-License (see https://opensource.org/licenses/MIT).<br>
[![GitHub license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/LICENSE)

View File

@ -0,0 +1,655 @@
#include <NeoPixelBus.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
const int serialSpeed = 2000000; // serial port speed
#define DATA_PIN 2 // PIN: data output for LED strip
const bool reportStats = false; // Send back processing statistics
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
/* Statistics breakdown:
FPS: Updates to the LEDs per second
F-FPS: Frames identified per second
S: Shown (Done) updates to the LEDs per given interval
F: Frames identified per interval (garbled grames cannot be counted)
G: Good frames identified per interval
B: Total bad frames of all types identified per interval
BF: Bad frames identified per interval
BS: Skipped incomplete frames
BC: Frames failing CRC check per interval
BFL Frames failing Fletcher content validation per interval
*/
//Developer configs
#define ENABLE_STRIP
#define ENABLE_CHECK_FLETCHER
const int SERIAL_SIZE_RX = 4096;
#ifndef ENABLE_STRIP
const int serial2Speed = 460800;
const bool reportInput = false;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
const String version = "8.0";
#ifdef THIS_IS_RGBW
float whiteLimit = 1.0f;
#ifdef COLD_WHITE
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
#else
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
#endif
#endif
int ledCount = 0; // This is dynamic, don't change it
int pixelCount = 0; // This is dynamic, don't change it
#ifdef THIS_IS_RGBW
#define LED_TYPE NeoGrbwFeature
#if defined(ARDUINO_LOLIN_S2_MINI)
#define LED_METHOD NeoEsp32I2s0Sk6812Method
#else
#define LED_METHOD NeoEsp32I2s1Sk6812Method
#endif
#else
#define LED_TYPE NeoGrbFeature
#if defined(ARDUINO_LOLIN_S2_MINI)
#define LED_METHOD NeoEsp32I2s0Ws2812xMethod
#else
#define LED_METHOD NeoEsp32I2s1Ws2812xMethod
#endif
#endif
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
uint8_t* ledBuffer;
int ledBufferSize;
#ifdef ENABLE_STRIP
LED_DRIVER* strip = NULL;
#endif
enum class AwaProtocol
{
HEADER_A,
HEADER_w,
HEADER_a,
HEADER_HI,
HEADER_LO,
HEADER_CRC,
CHANNELCALIB_GAIN,
CHANNELCALIB_RED,
CHANNELCALIB_GREEN,
CHANNELCALIB_BLUE,
PIXEL,
FLETCHER1,
FLETCHER2,
FLETCHER_EXT
};
AwaProtocol state = AwaProtocol::HEADER_A;
const int headerSize = 6;
const int trailerSize = 3;
const int calibInfoSize = 4;
int bytesRead = 0;
bool isVersion2 = false;
bool isChannelCalib = false;
uint8_t CRC = 0;
int count = 0;
int currentPixel = 0;
uint16_t fletcher1 = 0;
uint16_t fletcher2 = 0;
uint16_t fletcherExt = 0;
#ifdef THIS_IS_RGBW
RgbwColor inputColor;
uint8_t wChannel[256];
uint8_t rChannel[256];
uint8_t gChannel[256];
uint8_t bChannel[256];
#else
RgbColor inputColor;
#endif
bool ledsComplete = false;
// statistics
const int reportStatInterval_ms = reportStatInterval_s * 1000;
unsigned long curTime;
unsigned long stat_start = 0;
uint16_t stat_shown = 0;
uint16_t stat_frames = 0;
uint16_t stat_good = 0;
uint16_t stat_bad = 0;
uint16_t stat_bad_frame = 0;
uint16_t stat_bad_skip = 0;
uint16_t stat_bad_crc = 0;
uint16_t stat_bad_fletcher = 0;
uint16_t stat_final_shown = 0;
uint16_t stat_final_frames = 0;
uint16_t stat_final_good = 0;
uint16_t stat_final_bad = 0;
uint16_t stat_final_bad_frame = 0;
uint16_t stat_final_bad_skip = 0;
uint16_t stat_final_bad_crc = 0;
uint16_t stat_final_bad_fletcher = 0;
//Debugging
String inputString;
String inputErrorString;
String debugString;
void printStringHex(String string)
{
#ifndef ENABLE_STRIP
Serial2.println(string.length());
for (int i = 0; i < string.length(); ++i)
{
if (i % 36 == 0)
{
Serial2.println();
Serial2.print("[");
Serial2.print(i);
Serial2.print("] ");
}
if (string[i] < 16)
Serial2.print("0");
Serial2.print(string[i], HEX);
Serial2.print(":");
}
#endif
}
inline void showMe()
{
#ifdef ENABLE_STRIP
if (strip != NULL && strip->CanShow())
{
stat_shown++;
strip->Show();
}
#endif
}
// statistics
inline void showStats()
{
if (reportStats)
{
if (stat_frames > 0)
{
stat_final_shown = stat_shown;
stat_final_frames = stat_frames;
stat_final_good = stat_good;
stat_final_bad = stat_bad;
stat_final_bad_frame = stat_bad_frame;
stat_final_bad_skip = stat_bad_skip;
stat_final_bad_crc = stat_bad_crc;
stat_final_bad_fletcher = stat_bad_fletcher;
}
stat_start = curTime;
stat_shown = 0;
stat_frames = 0;
stat_good = 0;
stat_bad = 0;
stat_bad_frame = 0;
stat_bad_skip = 0;
stat_bad_crc = 0;
stat_bad_fletcher = 0;
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
" S: " + stat_final_shown +
" F: " + stat_final_frames +
" G: " + stat_final_good +
" B: " + stat_final_bad +
" (BF: " + stat_final_bad_frame +
" BS: " + stat_final_bad_skip +
" BC: " + stat_final_bad_crc +
" BFL: " + stat_final_bad_fletcher +
")";
#ifdef ENABLE_STRIP
Serial.println(summary);
#else
Serial2.println(summary);
#endif
}
}
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
{
if (ledBuffer != NULL)
delete ledBuffer;
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
ledBuffer = new uint8_t[ledBufferSize];
#ifdef ENABLE_STRIP
if (strip != NULL)
delete strip;
strip = new LED_DRIVER(ledCount, DATA_PIN);
strip->Begin();
#endif
}
inline void processSerialData()
{
while (Serial.available()) {
char input = Serial.read();
++bytesRead;
#ifndef ENABLE_STRIP
if (reportInput)
inputString += input;
#endif
switch (state)
{
case AwaProtocol::HEADER_A:
if (input == 'A')
{
state = AwaProtocol::HEADER_w;
}
break;
case AwaProtocol::HEADER_w:
if (input == 'w')
state = AwaProtocol::HEADER_a;
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_a:
if (input == 'a')
{
isVersion2 = false;
state = AwaProtocol::HEADER_HI;
}
else if (input == 'A')
{
state = AwaProtocol::HEADER_HI;
isVersion2 = true;
}
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_HI:
stat_frames++;
count = input << 8;
CRC = input;
fletcher1 = 0;
fletcher2 = 0;
fletcherExt = 0;
state = AwaProtocol::HEADER_LO;
break;
case AwaProtocol::HEADER_LO:
count += input + 1;
if (ledCount != count || isChannelCalib != isVersion2)
{
ledCount = count;
isChannelCalib = isVersion2;
pixelCount = ledCount * 3;
if (isChannelCalib)
prepareCalibration();
InitLeds(ledCount, pixelCount, isChannelCalib);
}
CRC = CRC ^ input ^ 0x55;
state = AwaProtocol::HEADER_CRC;
break;
case AwaProtocol::HEADER_CRC:
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
if (bytesRead != headerSize)
{
stat_bad_skip++;
bytesRead = headerSize;
}
currentPixel = 0;
if (CRC == input)
{
state = AwaProtocol::PIXEL;
}
else
{
// CRC failure
stat_bad++;
stat_bad_crc++;
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::PIXEL:
ledBuffer[currentPixel++] = input;
if (currentPixel == pixelCount)
{
if (isChannelCalib)
state = AwaProtocol::CHANNELCALIB_GAIN;
else
state = AwaProtocol::FLETCHER1;
}
break;
case AwaProtocol::CHANNELCALIB_GAIN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_RED;
break;
case AwaProtocol::CHANNELCALIB_RED:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_GREEN;
break;
case AwaProtocol::CHANNELCALIB_GREEN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_BLUE;
break;
case AwaProtocol::CHANNELCALIB_BLUE:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::FLETCHER1;
break;
case AwaProtocol::FLETCHER1:
fletcher1 = input;
state = AwaProtocol::FLETCHER2;
break;
case AwaProtocol::FLETCHER2:
fletcher2 = input;
state = AwaProtocol::FLETCHER_EXT;
break;
case AwaProtocol::FLETCHER_EXT:
fletcherExt = input;
ledsComplete = true;
state = AwaProtocol::HEADER_A;
break;
}
}
}
void setup()
{
// Init serial port
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
Serial.begin(serialSpeed);
Serial.setTimeout(50);
#ifndef ENABLE_STRIP
Serial2.begin(serial2Speed);
Serial2.println();
Serial2.println("Welcome!");
Serial2.println("Hyperion Awa driver " + version);
Serial2.println("!!! Debug Output !!!");
#endif
// Display config
Serial.println();
Serial.println("Welcome!");
Serial.println("Hyperion Awa driver " + version);
Serial.print("(Build: ");
Serial.print(__DATE__);
Serial.print(" ");
Serial.print(__TIME__);
Serial.println(")");
// first LED info
if (skipFirstLed)
Serial.println("First LED: disabled");
else
Serial.println("First LED: enabled");
// RGBW claibration info
#ifdef THIS_IS_RGBW
#ifdef COLD_WHITE
Serial.println("Default color mode: RGBW cold");
#else
Serial.println("Default color mode: RGBW neutral");
#endif
prepareCalibration();
#else
Serial.println("Color mode: RGB");
#endif
InitLeds(ledCount, pixelCount);
}
void prepareCalibration()
{
#ifdef THIS_IS_RGBW
// prepare LUT calibration table, cold white is much better than "neutral" white
for (uint32_t i = 0; i < 256; i++)
{
// color calibration
float red = rCorrection * i; // adjust red
float green = gCorrection * i; // adjust green
float blue = bCorrection * i; // adjust blue
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
}
Serial.write("RGBW calibration. White limit(%): ");
Serial.print(whiteLimit * 100.0f);
Serial.write(" %, red: ");
Serial.print(rCorrection);
Serial.write(" , green: ");
Serial.print(gCorrection);
Serial.write(" , blue: ");
Serial.print(bCorrection);
Serial.println();
#endif
}
void loop()
{
curTime = millis();
#ifdef __AVR__
// nothing , USART Interrupt is implemented
ESPserialEvent();
#else
// ESP8266 polling
ESPserialEvent();
#endif
if (ledsComplete)
{
#ifndef ENABLE_STRIP
if (reportInput)
{
Serial2.println();
Serial2.print("<input> L: ");
printStringHex(inputString);
Serial2.println("<\input>");
inputString = "";
Serial2.print("bytesRead: ");
Serial2.print(bytesRead);
Serial2.print(" , currentPixel: ");
Serial2.print(currentPixel);
Serial2.print(" ,pixelCount: ");
Serial2.print(pixelCount);
Serial2.println();
}
#endif
int frameSize = headerSize + ledBufferSize + trailerSize;
if (bytesRead > frameSize)
{
//Add number of frames ignored on top of frame
int frames = bytesRead / frameSize;
stat_frames += frames;
//Count frame plus frames ignored as bad frames
int badFrames = frames + 1;
stat_bad += badFrames;
stat_bad_frame += badFrames;
}
else
{
#ifdef ENABLE_CHECK_FLETCHER
//Test if content is valid
uint16_t item = 0;
uint16_t fletch1 = 0;
uint16_t fletch2 = 0;
uint16_t fletchExt = 0;
while (item < ledBufferSize)
{
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
fletch2 = (fletch2 + fletch1) % 255;
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
++item;
}
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
{
#endif
stat_good++;
uint16_t startLed = 0;
if (skipFirstLed)
{
#ifdef ENABLE_STRIP
#ifdef THIS_IS_RGBW
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
#else
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
#endif
#endif
startLed = 1;
}
for (uint16_t led = startLed; led < ledCount; ++led)
{
inputColor.R = ledBuffer[led * 3];
inputColor.G = ledBuffer[led * 3 + 1];
inputColor.B = ledBuffer[led * 3 + 2];
#ifdef THIS_IS_RGBW
inputColor.W = min(rChannel[inputColor.R],
min(gChannel[inputColor.G],
bChannel[inputColor.B]));
inputColor.R -= rChannel[inputColor.W];
inputColor.G -= gChannel[inputColor.W];
inputColor.B -= bChannel[inputColor.W];
inputColor.W = wChannel[inputColor.W];
#endif
#ifdef ENABLE_STRIP
strip->SetPixelColor(led, inputColor);
#endif
}
showMe();
yield();
#ifdef THIS_IS_RGBW
if (isChannelCalib)
{
uint8_t incoming_gain = ledBuffer[pixelCount];
uint8_t incoming_red = ledBuffer[pixelCount + 1];
uint8_t incoming_green = ledBuffer[pixelCount + 2];
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
{
rCorrection = incoming_red;
gCorrection = incoming_green;
bCorrection = incoming_blue;
whiteLimit = final_limit;
prepareCalibration();
}
}
#endif
#ifdef ENABLE_CHECK_FLETCHER
}
else
{
stat_bad++;
stat_bad_fletcher++;
}
#endif
}
bytesRead = 0;
state = AwaProtocol::HEADER_A;
ledsComplete = false;
}
if ((curTime - stat_start > reportStatInterval_ms))
{
if (stat_frames > 0)
{
showStats();
}
}
}
#ifdef __AVR__
void serialEvent()
{
processSerialData();
}
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
void ESPserialEvent()
{
processSerialData();
}
#endif

View File

@ -0,0 +1,646 @@
#include <NeoPixelBus.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
const int serialSpeed = 2000000; // serial port speed
const bool reportStats = false; // Send back processing statistics
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
/* Statistics breakdown:
FPS: Updates to the LEDs per second
F-FPS: Frames identified per second
S: Shown (Done) updates to the LEDs per given interval
F: Frames identified per interval (garbled grames cannot be counted)
G: Good frames identified per interval
B: Total bad frames of all types identified per interval
BF: Bad frames identified per interval
BS: Skipped incomplete frames
BC: Frames failing CRC check per interval
BFL Frames failing Fletcher content validation per interval
*/
//Developer configs
#define ENABLE_STRIP
#define ENABLE_CHECK_FLETCHER
const int SERIAL_SIZE_RX = 4096;
#ifndef ENABLE_STRIP
const int serial2Speed = 460800;
const bool reportInput = false;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
const String version = "8.0";
#ifdef THIS_IS_RGBW
float whiteLimit = 1.0f;
#ifdef COLD_WHITE
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
#else
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
#endif
#endif
int ledCount = 0; // This is dynamic, don't change it
int pixelCount = 0; // This is dynamic, don't change it
#ifdef THIS_IS_RGBW
#define LED_TYPE NeoGrbwFeature
#define LED_METHOD NeoEsp8266Uart1Sk6812Method
#else
#define LED_TYPE NeoGrbFeature
#define LED_METHOD NeoEsp8266Uart1Ws2812xMethod
#endif
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
uint8_t* ledBuffer;
int ledBufferSize;
#ifdef ENABLE_STRIP
LED_DRIVER* strip = NULL;
#endif
enum class AwaProtocol
{
HEADER_A,
HEADER_w,
HEADER_a,
HEADER_HI,
HEADER_LO,
HEADER_CRC,
CHANNELCALIB_GAIN,
CHANNELCALIB_RED,
CHANNELCALIB_GREEN,
CHANNELCALIB_BLUE,
PIXEL,
FLETCHER1,
FLETCHER2,
FLETCHER_EXT
};
AwaProtocol state = AwaProtocol::HEADER_A;
const int headerSize = 6;
const int trailerSize = 3;
const int calibInfoSize = 4;
int bytesRead = 0;
bool isVersion2 = false;
bool isChannelCalib = false;
uint8_t CRC = 0;
int count = 0;
int currentPixel = 0;
uint16_t fletcher1 = 0;
uint16_t fletcher2 = 0;
uint16_t fletcherExt = 0;
#ifdef THIS_IS_RGBW
RgbwColor inputColor;
uint8_t wChannel[256];
uint8_t rChannel[256];
uint8_t gChannel[256];
uint8_t bChannel[256];
#else
RgbColor inputColor;
#endif
bool ledsComplete = false;
// statistics
const int reportStatInterval_ms = reportStatInterval_s * 1000;
unsigned long curTime;
unsigned long stat_start = 0;
uint16_t stat_shown = 0;
uint16_t stat_frames = 0;
uint16_t stat_good = 0;
uint16_t stat_bad = 0;
uint16_t stat_bad_frame = 0;
uint16_t stat_bad_skip = 0;
uint16_t stat_bad_crc = 0;
uint16_t stat_bad_fletcher = 0;
uint16_t stat_final_shown = 0;
uint16_t stat_final_frames = 0;
uint16_t stat_final_good = 0;
uint16_t stat_final_bad = 0;
uint16_t stat_final_bad_frame = 0;
uint16_t stat_final_bad_skip = 0;
uint16_t stat_final_bad_crc = 0;
uint16_t stat_final_bad_fletcher = 0;
//Debugging
String inputString;
String inputErrorString;
String debugString;
void printStringHex(String string)
{
#ifndef ENABLE_STRIP
Serial2.println(string.length());
for (int i = 0; i < string.length(); ++i)
{
if (i % 36 == 0)
{
Serial2.println();
Serial2.print("[");
Serial2.print(i);
Serial2.print("] ");
}
if (string[i] < 16)
Serial2.print("0");
Serial2.print(string[i], HEX);
Serial2.print(":");
}
#endif
}
inline void showMe()
{
#ifdef ENABLE_STRIP
if (strip != NULL && strip->CanShow())
{
stat_shown++;
strip->Show();
}
#endif
}
// statistics
inline void showStats()
{
if (reportStats)
{
if (stat_frames > 0)
{
stat_final_shown = stat_shown;
stat_final_frames = stat_frames;
stat_final_good = stat_good;
stat_final_bad = stat_bad;
stat_final_bad_frame = stat_bad_frame;
stat_final_bad_skip = stat_bad_skip;
stat_final_bad_crc = stat_bad_crc;
stat_final_bad_fletcher = stat_bad_fletcher;
}
stat_start = curTime;
stat_shown = 0;
stat_frames = 0;
stat_good = 0;
stat_bad = 0;
stat_bad_frame = 0;
stat_bad_skip = 0;
stat_bad_crc = 0;
stat_bad_fletcher = 0;
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
" S: " + stat_final_shown +
" F: " + stat_final_frames +
" G: " + stat_final_good +
" B: " + stat_final_bad +
" (BF: " + stat_final_bad_frame +
" BS: " + stat_final_bad_skip +
" BC: " + stat_final_bad_crc +
" BFL: " + stat_final_bad_fletcher +
")";
#ifdef ENABLE_STRIP
Serial.println(summary);
#else
Serial2.println(summary);
#endif
}
}
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
{
if (ledBuffer != NULL)
delete ledBuffer;
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
ledBuffer = new uint8_t[ledBufferSize];
#ifdef ENABLE_STRIP
if (strip != NULL)
delete strip;
strip = new LED_DRIVER(ledCount);
strip->Begin();
#endif
}
inline void processSerialData()
{
while (Serial.available()) {
char input = Serial.read();
++bytesRead;
#ifndef ENABLE_STRIP
if (reportInput)
inputString += input;
#endif
switch (state)
{
case AwaProtocol::HEADER_A:
if (input == 'A')
{
state = AwaProtocol::HEADER_w;
}
break;
case AwaProtocol::HEADER_w:
if (input == 'w')
state = AwaProtocol::HEADER_a;
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_a:
if (input == 'a')
{
isVersion2 = false;
state = AwaProtocol::HEADER_HI;
}
else if (input == 'A')
{
state = AwaProtocol::HEADER_HI;
isVersion2 = true;
}
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_HI:
stat_frames++;
count = input << 8;
CRC = input;
fletcher1 = 0;
fletcher2 = 0;
fletcherExt = 0;
state = AwaProtocol::HEADER_LO;
break;
case AwaProtocol::HEADER_LO:
count += input + 1;
if (ledCount != count || isChannelCalib != isVersion2)
{
ledCount = count;
isChannelCalib = isVersion2;
pixelCount = ledCount * 3;
if (isChannelCalib)
prepareCalibration();
InitLeds(ledCount, pixelCount, isChannelCalib);
}
CRC = CRC ^ input ^ 0x55;
state = AwaProtocol::HEADER_CRC;
break;
case AwaProtocol::HEADER_CRC:
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
if (bytesRead != headerSize)
{
stat_bad_skip++;
bytesRead = headerSize;
}
currentPixel = 0;
if (CRC == input)
{
state = AwaProtocol::PIXEL;
}
else
{
// CRC failure
stat_bad++;
stat_bad_crc++;
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::PIXEL:
ledBuffer[currentPixel++] = input;
if (currentPixel == pixelCount)
{
if (isChannelCalib)
state = AwaProtocol::CHANNELCALIB_GAIN;
else
state = AwaProtocol::FLETCHER1;
}
break;
case AwaProtocol::CHANNELCALIB_GAIN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_RED;
break;
case AwaProtocol::CHANNELCALIB_RED:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_GREEN;
break;
case AwaProtocol::CHANNELCALIB_GREEN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_BLUE;
break;
case AwaProtocol::CHANNELCALIB_BLUE:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::FLETCHER1;
break;
case AwaProtocol::FLETCHER1:
fletcher1 = input;
state = AwaProtocol::FLETCHER2;
break;
case AwaProtocol::FLETCHER2:
fletcher2 = input;
state = AwaProtocol::FLETCHER_EXT;
break;
case AwaProtocol::FLETCHER_EXT:
fletcherExt = input;
ledsComplete = true;
state = AwaProtocol::HEADER_A;
break;
}
}
}
void setup()
{
// Init serial port
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
Serial.begin(serialSpeed);
Serial.setTimeout(50);
#ifndef ENABLE_STRIP
Serial2.begin(serial2Speed);
Serial2.println();
Serial2.println("Welcome!");
Serial2.println("Hyperion Awa driver " + version);
Serial2.println("!!! Debug Output !!!");
#endif
// Display config
Serial.println();
Serial.println("Welcome!");
Serial.println("Hyperion Awa driver " + version);
Serial.print("(Build: ");
Serial.print(__DATE__);
Serial.print(" ");
Serial.print(__TIME__);
Serial.println(")");
// first LED info
if (skipFirstLed)
Serial.println("First LED: disabled");
else
Serial.println("First LED: enabled");
// RGBW claibration info
#ifdef THIS_IS_RGBW
#ifdef COLD_WHITE
Serial.println("Default color mode: RGBW cold");
#else
Serial.println("Default color mode: RGBW neutral");
#endif
prepareCalibration();
#else
Serial.println("Color mode: RGB");
#endif
InitLeds(ledCount, pixelCount);
}
void prepareCalibration()
{
#ifdef THIS_IS_RGBW
// prepare LUT calibration table, cold white is much better than "neutral" white
for (uint32_t i = 0; i < 256; i++)
{
// color calibration
float red = rCorrection * i; // adjust red
float green = gCorrection * i; // adjust green
float blue = bCorrection * i; // adjust blue
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
}
Serial.write("RGBW calibration. White limit(%): ");
Serial.print(whiteLimit * 100.0f);
Serial.write(" %, red: ");
Serial.print(rCorrection);
Serial.write(" , green: ");
Serial.print(gCorrection);
Serial.write(" , blue: ");
Serial.print(bCorrection);
Serial.println();
#endif
}
void loop()
{
curTime = millis();
#ifdef __AVR__
// nothing , USART Interrupt is implemented
ESPserialEvent();
#else
// ESP8266 polling
ESPserialEvent();
#endif
if (ledsComplete)
{
#ifndef ENABLE_STRIP
if (reportInput)
{
Serial2.println();
Serial2.print("<input> L: ");
printStringHex(inputString);
Serial2.println("<\input>");
inputString = "";
Serial2.print("bytesRead: ");
Serial2.print(bytesRead);
Serial2.print(" , currentPixel: ");
Serial2.print(currentPixel);
Serial2.print(" ,pixelCount: ");
Serial2.print(pixelCount);
Serial2.println();
}
#endif
int frameSize = headerSize + ledBufferSize + trailerSize;
if (bytesRead > frameSize)
{
//Add number of frames ignored on top of frame
int frames = bytesRead / frameSize;
stat_frames += frames;
//Count frame plus frames ignored as bad frames
int badFrames = frames + 1;
stat_bad += badFrames;
stat_bad_frame += badFrames;
}
else
{
#ifdef ENABLE_CHECK_FLETCHER
//Test if content is valid
uint16_t item = 0;
uint16_t fletch1 = 0;
uint16_t fletch2 = 0;
uint16_t fletchExt = 0;
while (item < ledBufferSize)
{
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
fletch2 = (fletch2 + fletch1) % 255;
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
++item;
}
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
{
#endif
stat_good++;
uint16_t startLed = 0;
if (skipFirstLed)
{
#ifdef ENABLE_STRIP
#ifdef THIS_IS_RGBW
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
#else
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
#endif
#endif
startLed = 1;
}
for (uint16_t led = startLed; led < ledCount; ++led)
{
inputColor.R = ledBuffer[led * 3];
inputColor.G = ledBuffer[led * 3 + 1];
inputColor.B = ledBuffer[led * 3 + 2];
#ifdef THIS_IS_RGBW
inputColor.W = min(rChannel[inputColor.R],
min(gChannel[inputColor.G],
bChannel[inputColor.B]));
inputColor.R -= rChannel[inputColor.W];
inputColor.G -= gChannel[inputColor.W];
inputColor.B -= bChannel[inputColor.W];
inputColor.W = wChannel[inputColor.W];
#endif
#ifdef ENABLE_STRIP
strip->SetPixelColor(led, inputColor);
#endif
}
showMe();
yield();
#ifdef THIS_IS_RGBW
if (isChannelCalib)
{
uint8_t incoming_gain = ledBuffer[pixelCount];
uint8_t incoming_red = ledBuffer[pixelCount + 1];
uint8_t incoming_green = ledBuffer[pixelCount + 2];
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
{
rCorrection = incoming_red;
gCorrection = incoming_green;
bCorrection = incoming_blue;
whiteLimit = final_limit;
prepareCalibration();
}
}
#endif
#ifdef ENABLE_CHECK_FLETCHER
}
else
{
stat_bad++;
stat_bad_fletcher++;
}
#endif
}
bytesRead = 0;
state = AwaProtocol::HEADER_A;
ledsComplete = false;
}
if ((curTime - stat_start > reportStatInterval_ms))
{
if (stat_frames > 0)
{
showStats();
}
}
}
#ifdef __AVR__
void serialEvent()
{
processSerialData();
}
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
void ESPserialEvent()
{
processSerialData();
}
#endif

View File

@ -139,7 +139,7 @@ void setup() {
}
int ledCount = MAX_LEDS;
if (ANALOG_MODE == ANALOG_MODE_LAST_LED) {
if (ANALOG_OUTPUT_ENABLED == true && ANALOG_MODE == ANALOG_MODE_LAST_LED) {
ledCount--;
}
@ -170,7 +170,7 @@ void setup() {
showColor(CRGB(0, 0, 0));
Serial.print("Ada\n"); // Send "Magic Word" string to host
Serial.println("Ada: LED num: " + String(FastLED.size())); //Return number of LEDs configured
boolean transmissionSuccess;
unsigned long sum_r, sum_g, sum_b;
@ -254,4 +254,3 @@ void setup() {
void loop() {
// Not used. See note in setup() function.
}

View File

@ -21,6 +21,7 @@ import socket
import serial
import serial.threaded
from __future__ import division
class SerialToNet(serial.threaded.Protocol):
"""serial->socket"""
@ -137,7 +138,7 @@ to this service over the network.
sys.stderr.write(
'--- UDP to Serial redirector\n'
'--- listening on udp port {a.localport}\n'
'--- sending to {p.name} {p.baudrate},{p.bytesize}{p.parity}{p.stopbits}\n'
'--- sending to {p.name} {p.baudrate},{p.bytesize}{p.parity}{p.stopbits}\n'
'--- type Ctrl-C / BREAK to quit\n'.format(p=ser, a=args))
try:
@ -152,10 +153,9 @@ to this service over the network.
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(('', args.localport))
srv.bind(('0.0.0.0', args.localport))
try:
intentional_exit = False
while True:
try:
while True:
@ -164,14 +164,14 @@ to this service over the network.
if not data:
break
if args.ada:
numleds = len(data)/3
hi = (numleds-1)/256
lo = (numleds-1)&255
sum = hi^lo^0x55
ser.write ("Ada"+ chr(hi) + chr(lo) + chr(sum))
if args.ada:
numleds = len(data)/3
hi = (numleds-1)/256
lo = (numleds-1)&255
sum = hi^lo^0x55
ser.write ("Ada"+ chr(hi) + chr(lo) + chr(sum))
ser.write(data) # get a bunch of bytes and send them
ser.write(data) # get a bunch of bytes and send them
except socket.error as msg:
if args.develop:
raise
@ -179,7 +179,7 @@ to this service over the network.
# probably got disconnected
break
except KeyboardInterrupt:
intentional_exit = True
# intentional_exit
raise
except socket.error as msg:
if args.develop:
@ -189,6 +189,7 @@ to this service over the network.
ser_to_net.socket = None
sys.stderr.write('Disconnected\n')
except KeyboardInterrupt:
# do not handle exceptions
pass
sys.stderr.write('\n--- exit ---\n')

View File

@ -0,0 +1,354 @@
// AtmoOrb by Lightning303 & Rick164, Additions by Lord-Grey
//
// ESP8266 Standalone Version
//
//
// You may change the settings that are commented
#define FASTLED_ALLOW_INTERRUPTS 0
// To make sure that all leds get changed 100% of the time, we need to allow FastLED to disabled interrupts for a short while.
// If you experience problems, please set this value to 1.
// This is only needed for 3 wire (1 data line + Vcc and GND) chips (e.g. WS2812B). If you are using WS2801, APA102 or similar chipsets, you can set the value back to 1.
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <FastLED.h>
#define NUM_LEDS 24 // Number of leds
#define DATA_PIN D7 // Data pin for leds (the default pin 7 might correspond to pin 13 on some boards)
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
#define ID 1 // Id of this lamp
// Smoothing
#define SMOOTH_STEPS 20 // Steps to take for smoothing colors
#define SMOOTH_DELAY 10 // Delay between smoothing steps
#define SMOOTH_BLOCK 0 // Block incoming colors while smoothing
// Startup color
#define STARTUP_RED 255 // Color shown directly after power on
#define STARTUP_GREEN 175 // Color shown directly after power on
#define STARTUP_BLUE 100 // Color shown directly after power on
// White adjustment
#define RED_CORRECTION 220 // Color Correction
#define GREEN_CORRECTION 255 // Color Correction
#define BLUE_CORRECTION 180 // Color Correction
// RC Switch
#define RC_SWITCH 0 // RF transmitter to swtich remote controlled power sockets (0=Off, 1=On)
#if RC_SWITCH == 1
#include <RCSwitch.h>
#define RC_PIN 2 // Data pin for RF transmitter
#define RC_SLEEP_DELAY 900000 // Delay until RF transmitter send signals
char* rcCode0 = "10001"; // First part of the transmission code
char* rcCode1 = "00010"; // Second part of the transmission code
RCSwitch mySwitch = RCSwitch();
boolean remoteControlled = false;
#endif
// Network settings
const char* ssid = "***"; // WiFi SSID
const char* password = "***"; // WiFi password
const IPAddress multicastIP(239,255,255,250); // Multicast IP address
const int multicastPort = 49692; // Multicast port number
IPAddress ip_null(0,0,0,0);
IPAddress local_IP(0,0,0,0);
WiFiUDP Udp;
int timeout = 20000; // wait 20 sec for successfull login
boolean is_connect = false; // ... not yet connected
CRGB leds[NUM_LEDS];
byte nextColor[3];
byte prevColor[3];
byte currentColor[3];
byte smoothStep = SMOOTH_STEPS;
unsigned long smoothMillis;
void setColor(byte red, byte green, byte blue);
void setSmoothColor(byte red, byte green, byte blue);
void smoothColor();
void clearSmoothColors();
void setup()
{
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
//FastLED.setCorrection(TypicalSMD5050);
FastLED.setCorrection(CRGB(RED_CORRECTION, GREEN_CORRECTION, BLUE_CORRECTION));
FastLED.showColor(CRGB(STARTUP_RED, STARTUP_GREEN, STARTUP_BLUE));
#if RC_SWITCH == 1
mySwitch.enableTransmit(RC_PIN);
#endif
#if SERIAL_DEBUG == 1
Serial.begin(115200);
#endif
#if SERIAL_DEBUG == 1
Serial.printf("Connecting to %s ", ssid);
#endif
// .... wait for WiFi gets valid !!!
unsigned long tick = millis(); // get start-time for login
WiFi.begin(ssid, password);
while ( (!is_connect) && ((millis() - tick) < timeout) )
{
yield(); // ... for safety
is_connect = WiFi.status(); // connected ?
if (!is_connect) // only if not yet connected !
{
#if SERIAL_DEBUG == 1
Serial.print("."); // print a dot while waiting
#endif
delay(50);
}
}
if (is_connect)
{
#if SERIAL_DEBUG == 1
Serial.print("after ");
Serial.print(millis() - tick);
Serial.println(" ms");
#endif
// .... wait for local_IP becomes valid !!!
is_connect = false;
tick = millis(); // get start-time for login
while ( (!is_connect) && ((millis() - tick) < timeout) )
{
yield(); // ... for safety
local_IP = WiFi.localIP();
is_connect = local_IP != ip_null; // connected ?
if (!is_connect) // only if not yet connected !
{
#if SERIAL_DEBUG == 1
Serial.print("."); // print a dot while waiting
#endif
delay(50);
}
}
if (is_connect)
{
#if SERIAL_DEBUG == 1
Serial.print("local_IP valid after ");
Serial.print(millis() - tick);
Serial.println(" ms");
Serial.println("");
Serial.print(F("Connected to "));
Serial.println(ssid);
#endif
// ... now start UDP and check the result:
is_connect = Udp.beginMulticast(local_IP, multicastIP, multicastPort);
if (is_connect)
{
#if SERIAL_DEBUG == 1
Serial.print("Listening to Multicast at ");
Serial.print(multicastIP);
Serial.println(":" + String(multicastPort));
#endif
}
else
{
#if SERIAL_DEBUG == 1
Serial.println(" - ERROR beginMulticast !");
#endif
}
}
else
{
#if SERIAL_DEBUG == 1
Serial.println("local_IP invalid after timeout !");
#endif
}
}
else
{
#if SERIAL_DEBUG == 1
Serial.println("- invalid after timeout !");
#endif
}
}
void loop()
{
#if SERIAL_DEBUG == 1
if (WiFi.status() != WL_CONNECTED)
{
Serial.print(F("Lost connection to "));
Serial.print(ssid);
Serial.println(F("."));
Serial.println(F("Trying to reconnect."));
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(F("."));
}
Serial.println("");
Serial.println(F("Reconnected."));
}
#endif
if (Udp.parsePacket())
{
byte len = Udp.available();
byte rcvd[len];
Udp.read(rcvd, len);
#if SERIAL_DEBUG == 1
Serial.print(F("UDP Packet from "));
Serial.print(Udp.remoteIP());
Serial.print(F(":"));
Serial.print(Udp.remotePort());
Serial.print(F(" to "));
Serial.println(Udp.destinationIP());
for (byte i = 0; i < len; i++)
{
Serial.print(rcvd[i]);
Serial.print(F(" "));
}
Serial.println("");
#endif
if (len >= 8 && rcvd[0] == 0xC0 && rcvd[1] == 0xFF && rcvd[2] == 0xEE && (rcvd[4] == ID || rcvd[4] == 0))
{
switch (rcvd[3])
{
case 1:
smoothStep = SMOOTH_STEPS;
forceLedsOFF();
break;
case 2:
default:
setSmoothColor(rcvd[5], rcvd[6], rcvd[7]);
break;
case 4:
setColor(rcvd[5], rcvd[6], rcvd[7]);
smoothStep = SMOOTH_STEPS;
break;
case 8:
#if SERIAL_DEBUG == 1
Serial.print(F("Announce myself. OrbID: "));
Serial.println(ID);
#endif
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ID);
Udp.endPacket();
break;
case 9:
#if SERIAL_DEBUG == 1
Serial.print(F("Identify myself. OrbID: "));
Serial.println(ID);
#endif
identify();
break;
}
}
}
if (smoothStep < SMOOTH_STEPS && millis() >= (smoothMillis + (SMOOTH_DELAY * (smoothStep + 1))))
{
smoothColor();
}
#if RC_SWITCH == 1
if (remoteControlled && currentColor[0] == 0 && currentColor[1] == 0 && currentColor[2] == 0 && millis() >= smoothMillis + RC_SLEEP_DELAY)
{
// Send this signal only once every seconds
smoothMillis += 1000;
mySwitch.switchOff(rcCode0, rcCode1);
}
#endif
}
// Display color on leds
void setColor(byte red, byte green, byte blue)
{
// Is the new color already active?
if (currentColor[0] == red && currentColor[1] == green && currentColor[2] == blue)
{
return;
}
currentColor[0] = red;
currentColor[1] = green;
currentColor[2] = blue;
FastLED.showColor(CRGB(red, green, blue));
}
// Set a new color to smooth to
void setSmoothColor(byte red, byte green, byte blue)
{
if (smoothStep == SMOOTH_STEPS || SMOOTH_BLOCK == 0)
{
// Is the new color the same as the one we already are smoothing towards?
// If so dont do anything.
if (nextColor[0] == red && nextColor[1] == green && nextColor[2] == blue)
{
return;
}
// Is the new color the same as we have right now?
// If so stop smoothing and keep the current color.
else if (currentColor[0] == red && currentColor[1] == green && currentColor[2] == blue)
{
smoothStep = SMOOTH_STEPS;
return;
}
prevColor[0] = currentColor[0];
prevColor[1] = currentColor[1];
prevColor[2] = currentColor[2];
nextColor[0] = red;
nextColor[1] = green;
nextColor[2] = blue;
smoothMillis = millis();
smoothStep = 0;
#if RC_SWITCH == 1
if (!remoteControlled)
{
remoteControlled = true;
}
#endif
}
}
// Display one step to the next color
void smoothColor()
{
smoothStep++;
byte red = prevColor[0] + (((nextColor[0] - prevColor[0]) * smoothStep) / SMOOTH_STEPS);
byte green = prevColor[1] + (((nextColor[1] - prevColor[1]) * smoothStep) / SMOOTH_STEPS);
byte blue = prevColor[2] + (((nextColor[2] - prevColor[2]) * smoothStep) / SMOOTH_STEPS);
setColor(red, green, blue);
}
// Force all leds OFF
void forceLedsOFF()
{
setColor(0,0,0);
clearSmoothColors();
}
// Clear smooth color byte arrays
void clearSmoothColors()
{
memset(prevColor, 0, sizeof(prevColor));
memset(currentColor, 0, sizeof(nextColor));
memset(nextColor, 0, sizeof(nextColor));
}
void identify()
{
for (byte i = 0; i < 3; i++)
{
FastLED.showColor(CRGB::LemonChiffon);
delay(500);
FastLED.showColor(CRGB::Black);
delay(500);
}
}

View File

@ -0,0 +1,313 @@
#include <FastLED.h>
FASTLED_USING_NAMESPACE;
SYSTEM_THREAD(ENABLED);
#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif
// WiFi
#define timeout 30000
#define reconnect_delay 5000
// UDP
#define SERVER_PORT 49692
#define DISCOVERY_PORT 49692
UDP client;
IPAddress multicastIP(239, 15, 18, 2);
// ORB
unsigned int orbID = 1;
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
// LED
#define DATA_PIN 6
#define NUM_LEDS 24
CRGB leds[NUM_LEDS];
// UDP
#define BUFFER_SIZE 8 // 5 + 3 channels for 1 LED
#define BUFFER_SIZE_DISCOVERY 5
#define TIMEOUT_MS 500
uint8_t buffer[BUFFER_SIZE];
uint8_t bufferDiscovery[BUFFER_SIZE_DISCOVERY];
unsigned long lastWiFiCheck = 0;
// SMOOTHING
#define SMOOTH_STEPS 50 // Steps to take for smoothing colors
#define SMOOTH_DELAY 4 // Delay between smoothing steps
#define SMOOTH_BLOCK 0 // Block incoming colors while smoothing
byte nextColor[3];
byte prevColor[3];
byte currentColor[3];
byte smoothStep = SMOOTH_STEPS;
unsigned long smoothMillis;
// CUSTOM COLOR CORRECTIONS
#define RED_CORRECTION 255
#define GREEN_CORRECTION 255
#define BLUE_CORRECTION 255
#include "Particle.h"
void setup()
{
// Leds - choose one correction method
// 1 - Custom color correction
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(CRGB(RED_CORRECTION, GREEN_CORRECTION, BLUE_CORRECTION));
// Set color
//setColor(40, 21, 0);
// Uncomment the below lines to dim the single built-in led to 2%
::RGB.control(true);
::RGB.brightness(2);
::RGB.control(false);
// WiFi
lastWiFiCheck = millis();
initWiFi();
// 2 - FastLED predefined color correction
//FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
}
void initWiFi()
{
// Delays added UDP client creation, required for WiFi reconnects as takes a bit for resources to be full available
// Wait for WiFi connection
delay(500);
waitFor(WiFi.ready, timeout);
delay(reconnect_delay);
// Multicast UDP
if(WiFi.ready())
{
#if SERIAL_DEBUG == 1
Serial.println("");
Serial.print(F("Connected to "));
Serial.println(WiFi.SSID());
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
#endif
client.begin(SERVER_PORT);
delay(reconnect_delay);
client.joinMulticast(multicastIP);
#if SERIAL_DEBUG == 1
Serial.print(F("Listening to Multicast at "));
Serial.print(multicastIP);
Serial.print(F(":"));
Serial.println(SERVER_PORT);
#endif
}
}
void loop(){
if (Network.listening())
{
// If we are in listening mode (blinking dark blue), don't
// output by USB serial, because it can conflict with
// serial commands.
return;
}
if(WiFi.ready() == false) {
#if SERIAL_DEBUG == 1
Serial.print(F("Lost connection to "));
Serial.print(WiFi.SSID());
Serial.println(F("."));
Serial.println(F("Trying to reconnect."));
#endif
initWiFi();
}
int packetSize = client.parsePacket();
if(packetSize == BUFFER_SIZE){
#if SERIAL_DEBUG == 1
Serial.print(F("Packet size: "));
Serial.println(packetSize);
#endif
client.read(buffer, BUFFER_SIZE);
//client.flush();
#if SERIAL_DEBUG == 1
Serial.print(F("UDP Packet from "));
Serial.println(client.remoteIP());
for (int i = 0; i < BUFFER_SIZE; i++)
{
Serial.print(buffer[i]);
Serial.print(F(" "));
}
Serial.println("");
#endif
unsigned int i = 0;
// Look for 0xC0FFEE
if(buffer[i++] == 0xC0 && buffer[i++] == 0xFF && buffer[i++] == 0xEE)
{
byte commandOptions = buffer[i++];
byte rcvOrbID = buffer[i++];
byte red = buffer[i++];
byte green = buffer[i++];
byte blue = buffer[i++];
// Command options
// 1 = force off
// 2 = use lamp smoothing and validate by Orb ID
// 4 = validate by Orb ID
// 8 = discovery
// 9 = light-up Orb to identify by Orb ID
if(commandOptions == 1)
{
// Orb ID 0 = turn off all lights
// Otherwise turn off selectively
if(rcvOrbID == 0 || rcvOrbID == orbID)
{
smoothStep = SMOOTH_STEPS;
forceLedsOFF();
}
return;
}
else if(commandOptions == 2)
{
if(rcvOrbID != orbID)
{
return;
}
setSmoothColor(red, green, blue);
}
else if(commandOptions == 4)
{
if(rcvOrbID != orbID)
{
return;
}
smoothStep = SMOOTH_STEPS;
setColor(red, green, blue);
setSmoothColor(red, green, blue);
return;
}
else if(commandOptions == 8)
{
#if SERIAL_DEBUG == 1
Serial.print(F("Announce myself. OrbID: "));
Serial.println(orbID);
#endif
// Respond to remote IP address with Orb ID
IPAddress remoteIP = client.remoteIP();
bufferDiscovery[0] = orbID;
client.sendPacket(bufferDiscovery, BUFFER_SIZE_DISCOVERY, remoteIP, DISCOVERY_PORT);
// Clear buffer
memset(bufferDiscovery, 0, sizeof(bufferDiscovery));
return;
}
else if(commandOptions == 9)
{
if(rcvOrbID == 0 || rcvOrbID == orbID)
{
#if SERIAL_DEBUG == 1
Serial.print(F("Identify myself. OrbID: "));
Serial.println(orbID);
#endif
identify();
}
return;
}
}
}else if(packetSize > 0){
// Got malformed packet
}
if (smoothStep < SMOOTH_STEPS && millis() >= (smoothMillis + (SMOOTH_DELAY * (smoothStep + 1))))
{
smoothColor();
}
}
// Set color
void setColor(byte red, byte green, byte blue)
{
for (byte i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(red, green, blue);
}
FastLED.show();
}
// Set a new color to smooth to
void setSmoothColor(byte red, byte green, byte blue)
{
if (smoothStep == SMOOTH_STEPS || SMOOTH_BLOCK == 0)
{
if (nextColor[0] == red && nextColor[1] == green && nextColor[2] == blue)
{
return;
}
prevColor[0] = currentColor[0];
prevColor[1] = currentColor[1];
prevColor[2] = currentColor[2];
nextColor[0] = red;
nextColor[1] = green;
nextColor[2] = blue;
smoothMillis = millis();
smoothStep = 0;
}
}
// Display one step to the next color
void smoothColor()
{
smoothStep++;
currentColor[0] = prevColor[0] + (((nextColor[0] - prevColor[0]) * smoothStep) / SMOOTH_STEPS);
currentColor[1] = prevColor[1] + (((nextColor[1] - prevColor[1]) * smoothStep) / SMOOTH_STEPS);
currentColor[2] = prevColor[2] + (((nextColor[2] - prevColor[2]) * smoothStep) / SMOOTH_STEPS);
setColor(currentColor[0], currentColor[1], currentColor[2]);
}
// Force all leds OFF
void forceLedsOFF()
{
setColor(0,0,0);
clearSmoothColors();
}
// Clear smooth color byte arrays
void clearSmoothColors()
{
memset(prevColor, 0, sizeof(prevColor));
memset(currentColor, 0, sizeof(nextColor));
memset(nextColor, 0, sizeof(nextColor));
}
void identify()
{
for (byte i = 0; i < 3; i++)
{
FastLED.showColor(CRGB::LemonChiffon);
delay(500);
FastLED.showColor(CRGB::Black);
delay(500);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,89 +1,75 @@
<div class="container-fluid">
<h3 class="page-header"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">About
Hyperion</span></h3>
<div class="row">
<div class="col-lg-12">
<div id="about_cont"></div>
<h3 class="page-header">
<i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">
About
Hyperion
</span>
</h3>
<div class="row">
<div class="col-lg-12">
<div id="about_cont"></div>
</div>
<div id="danger_act" class="col-lg-6" style="display:none;padding-top:20px">
<h4>You found a hidden service menu!</h4>
<button id="reset_cache" class="btn btn-danger">Reset Browser Cache</button>
<button id="hyp_restart" class="btn btn-danger">Force Hyperion Restart</button>
</div>
</div>
</div>
<div id="danger_act" class="col-lg-6" style="display:none;padding-top:20px">
<h4>You found a hidden service menu!</h4>
<button id="reset_cache" class="btn btn-danger">Reset Browser Cache</button>
<button id="hyp_restart" class="btn btn-danger">Force Hyperion Restart</button>
</div>
</div>
</div>
<script type="text/javascript">
performTranslation();
performTranslation();
var si = sysInfo.hyperion;
var libs = { "Bootstrap 3": "http://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "http://jeremydorn.com/json-editor/", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "http://mm.onokumus.com/index.html", "download.js": "http://danml.com/download.html", "gijgo": "http://gijgo.com/" };
var libh = "";
var lang = [];
var dcount = 0;
var si = window.sysInfo.hyperion;
var libs = { "Bootstrap 3": "https://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "https://www.jeremydorn.com/json-editor", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "https://mm.onokumus.com/index.html", "download.js": "https://github.com/rndme/download", "Gijgo": "https://gijgo.com/", "DOMPurify" : "https://github.com/cure53/DOMPurify", "Marked": "https://github.com/markedjs/marked", "PlainDraggable": "https://github.com/anseki/plain-draggable", "LeaderLine": "https://github.com/anseki/leader-line", "Animate.css": "https://github.com/animate-css/animate.css"};
var libh = "";
var lang = [];
var dcount = 0;
for (var i = 0; i < availLang.length; i++)
lang.push($.i18n('general_speech_' + availLang[i]));
for (key in libs)
libh += '<a href="' + libs[key] + '" target="_blank">' + key + '</a>, ';
libh += "<br/>" + $.i18n("about_credits");
lang = lang.toString().replace(/,/g, ", ");
for (var i = 0; i < availLang.length; i++)
lang.push($.i18n('general_speech_' + availLang[i]));
lang.sort();
for (key in libs)
libh += '<a href="' + libs[key] + '" target="_blank">' + key + '</a>, ';
libh += "<br/>" + $.i18n("about_credits");
lang = lang.toString().replace(/,/g, ", ");
// Github Issue bugreport infos
var sys = window.sysInfo.system;
var shy = window.sysInfo.hyperion;
var info = "<pre>Hyperion Server: \n";
info += '- Build: ' + shy.build + '\n';
info += '- Build time: ' + shy.time + '\n';
info += '- Git Remote: ' + shy.gitremote + '\n';
info += '- Version: ' + shy.version + '\n';
info += '- UI Lang: ' + storedLang + ' (BrowserLang: ' + navigator.language + ')\n';
info += '- UI Access: ' + storedAccess + '\n';
//info += 'Log lvl: ' + window.serverConfig.logger.level + '\n';
info += '- Avail Capt: ' + window.serverInfo.grabbers.available + '\n\n';
info += 'Hyperion Server OS: \n';
info += '- Distribution: ' + sys.prettyName + '\n';
info += '- Arch: ' + sys.architecture + '\n';
info += '- Kernel: ' + sys.kernelType + ' (' + sys.kernelVersion + ' (WS: ' + sys.wordSize + '))\n';
info += '- Browser: ' + navigator.userAgent + ' </pre>';
var info = '<pre>' + getSystemInfo() + '</pre>';
var fc = ['<span id="danger_trig">' + $.i18n("about_version") + '<span>', $.i18n("about_build"), $.i18n("about_builddate"), $.i18n("about_translations"), $.i18n("about_resources", $.i18n("general_webui_title")), "System info (Github Issue)", $.i18n("about_3rd_party_licenses")];
var sc = [currentVersion, si.build, si.time, '(' + availLang.length + ')<p>' + lang + '</p><p><a href="https://github.com/hyperion-project/hyperion.ng" target="_blank">' + $.i18n("about_contribute") + '</a></p>', libh, info, '<pre><div id="3rdpartylicenses" style="overflow:scroll;max-height:400px"></div></pre>'];
var fc = ['<span id="danger_trig">' + $.i18n("about_version") + '<span>', $.i18n("about_build"), $.i18n("about_builddate"), $.i18n("about_translations"), $.i18n("about_resources", $.i18n("general_webui_title")), "System info (Github Issue)", $.i18n("about_3rd_party_licenses")];
var sc = [currentVersion, si.build, si.time, '(' + availLang.length + ')<p>' + lang + '</p><p><a href="https://github.com/hyperion-project/hyperion.ng" target="_blank">' + $.i18n("about_contribute") + '</a></p>', libh, info, '<pre><div id="3rdpartylicenses" style="overflow:scroll;max-height:400px"></div></pre>'];
createTable("", "atb", "about_cont");
for (var i = 0; i < fc.length; i++)
$('.atb').append(createTableRow([fc[i], sc[i]], "atb", false));
createTable("", "atb", "about_cont");
for (var i = 0; i < fc.length; i++)
$('.atb').append(createTableRow([fc[i], sc[i]], "atb", false));
$('#danger_trig').off().on('click', function () {
dcount++;
if (dcount > 2)
$('#danger_act').toggle(true);
});
$('#danger_trig').off().on('click', function () {
dcount++;
if (dcount > 2)
$('#danger_act').toggle(true);
});
$('#reset_cache').off().on('click', function () {
localStorage.clear();
});
$('#reset_cache').off().on('click', function () {
localStorage.clear();
});
$('#hyp_restart').off().on('click', function () {
initRestart();
});
$('#hyp_restart').off().on('click', function () {
initRestart();
});
var url = 'https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES';
fetch(url)
.then(function (response) {
if (!response.ok) {
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
}
else {
response.text().then(function (text) {
$("#3rdpartylicenses").html('<code>' + text + '</code>');
});
}
})
.catch(function (rejected) {
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
});
$.ajax({
url:'3RD_PARTY_LICENSES',
dataType: "text",
success: function(data)
{
$("#3rdpartylicenses").html('<code>' + data + '</code>');
},
error: function()
{
$("#3rdpartylicenses").html('<a href="https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
}
});
removeOverlay();
removeOverlay();
</script>

View File

@ -2,11 +2,23 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h3>
<div id="conf_cont"></div>
<h3 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_colors.js"></script>

View File

@ -2,6 +2,19 @@
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div id="conf_cont"></div>
</div>
</div>

View File

@ -6,7 +6,7 @@
<div class="row">
<div class="col-lg-6" id="inst_desc">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-plus fa-fw"></i><span data-i18n="conf_general_inst_title"></span></div>
<div class="panel-heading panel-instance"><i class="mdi mdi-lightbulb-group mdi-24px"></i><span data-i18n="conf_general_inst_title"></span></div>
<div class="panel-body">
<div id="inst_desc_cont"></div>
<div id="itable"></div>

View File

@ -2,7 +2,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
<div id="conf_cont"></div>
</div>
</div>

View File

@ -0,0 +1,24 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_instcapture_conf_token">Capturing Hardware</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_instcapture.js"></script>

View File

@ -1,374 +1,428 @@
<!DOCTYPE html>
<html>
<head>
<title>Hyperion - LED Device Configuration</title>
</head>
<div class="container-fluid">
<h3 class="page-header"><i class="fa fa-lightbulb-o fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h3>
<ul id="leds_cfg_nav" class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#menu_controller" data-i18n="conf_leds_nav_label_ledcontroller">LED Controller</a></li>
<li><a data-toggle="tab" href="#menu_gencfg" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
</ul>
<h3 class="page-header"><i class="mdi mdi-lightbulb-on fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h3>
<div class="tab-content">
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
<div class="row">
<div class="col-lg-12" id="leddevice_intro"></div>
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading form-group">
<label for="leddevices" class="panel-title" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<ul id="leds_cfg_nav" class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#menu_controller" data-i18n="conf_leds_nav_label_ledcontroller">LED Controller</a></li>
<li><a data-toggle="tab" href="#menu_gencfg" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
</ul>
<div class="panel-body">
<div id="btn_wiz_holder"></div>
<div id="ledDeviceOptions"> <div id='editor_container'></div> </div>
</div>
<div class="panel-footer" style="text-align:right">
<button id='btn_submit_controller' class="btn btn-primary"><i class="fa fa-fw fa-save" /><span data-i18n="general_button_savesettings">Save Settings</span></button>
</div>
</div>
</div>
</div>
</div>
<div class="tab-content">
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
<div class="row">
<div class="col-lg-12" id="leddevice_intro"></div>
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading form-group">
<label for="leddevices" class="panel-title" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
</div>
<div id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
<div class="panel-body">
<div id="btn_wiz_holder"></div>
<div id='editor_container_leddevice'></div>
<div id='info_container' class="bs-callout bs-callout-info" style="margin-top:0px">
<h4 data-i18n="dashboard_infobox_label_title">Information</h4>
<div id='info_container_text'>
<span data-i18n="conf_leds_device_info_log"> In case your LEDs do not work, check here for errors: </span>
<a onclick="SwitchToMenuItem('MenuItemLogging')" data-i18n="main_menu_logging_token" style="cursor:pointer"></a>
</div>
</div>
</div>
<div class="panel-footer" style="text-align:right">
<button id='btn_test_controller' class="btn btn-primary" disabled data-toggle="tooltip" data-placement="top" title="Identify configured device by lighting it up">
<i class="fa fa-fw fa-save"></i><span data-i18n="wiz_identify">Identify/Test</span>
</button>
<button id='btn_submit_controller' class="btn btn-primary" data-toggle="tooltip" data-placement="top" title="Save the device's connectivity configuration">
<i class="fa fa-fw fa-save"></i><span data-i18n="general_button_savesettings">Save Settings</span>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12" id="layout_intro"></div>
<div class="col-lg-6 col-md-12">
<div class="panel-group" id="accordion">
<div class="panel panel-primary">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
<h4 class="panel-title">
<a><i class="fa fa-television fa-fw"></i><span data-i18n="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a>
</h4>
</div>
<div id="collapse1" class="panel-collapse collapse in">
<div class="panel-body">
<table class="table borderless">
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_top" data-i18n="conf_leds_layout_cl_top">Top</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr " id="ip_cl_top" type="number" value="10" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_bottom" data-i18n="conf_leds_layout_cl_bottom">Bottom</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_bottom" type="number" value="10" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_left" data-i18n="conf_leds_layout_cl_left">Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_left" type="number" value="6" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_right" data-i18n="conf_leds_layout_cl_right">Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_right" type="number" value="6" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_glength" data-i18n="conf_leds_layout_cl_gaglength">Gap length</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_glength" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_gpos" data-i18n="conf_leds_layout_cl_gappos">Gap position</label>
</td>
<td class="itd">
<input class="form-control ledCLconstr" id="ip_cl_gpos" type="number" value="0" min="0" step="1">
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_position" data-i18n="conf_leds_layout_cl_inppos">Input position</label>
</td>
<td class="itd">
<input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" min="0" step="1">
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_reverse" data-i18n="conf_leds_layout_cl_reversdir">Reverse direction</label>
</td>
<td class="itd">
<div class="checkbox">
<input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input>
<label></label>
</div>
</td>
</tr>
</tbody>
</table>
<div class="panel panel-default">
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3">
<h4 class="panel-title">
<a><span data-i18n="conf_leds_layout_advanced">Advanced settings</span></a>
</h4>
</div>
<div id="collapse3" class="panel-collapse collapse">
<div class="panel-body ">
<table class="tableform borderless">
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_hdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_hdepth" type="number" value="8" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_vdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_vdepth" type="number" value="5" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_overlap" data-i18n="conf_leds_layout_cl_overlap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_overlap" type="number" value="0" min="0" max="200" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_edgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_edgegap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_ptl" data-i18n="conf_leds_layout_ptl">Point Top Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="40" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%h</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="40" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%v</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_ptr" data-i18n="conf_leds_layout_ptr">Point Top Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="60" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="40" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_pbr" data-i18n="conf_leds_layout_pbr">Point Bottom Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="60" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="60" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_pbl" data-i18n="conf_leds_layout_pbl">Point Bottom Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="40" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="60" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<!-- <tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_cornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr " id="ip_cl_cornergap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
-->
</tbody>
</table>
</div>
</div>
</div>
<div id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_cl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
<h4 class="panel-title">
<a><i class="fa fa-th fa-fw"></i><span data-i18n="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a>
</h4>
</div>
<div id="collapse2" class="panel-collapse collapse">
<div class="panel-body">
<table>
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_ledshoriz" data-i18n="conf_leds_layout_ma_horiz">Horizontal</label>
</td>
<td class="itd input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="10" min="1" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_ledsvert" data-i18n="conf_leds_layout_ma_vert">Vertical</label>
</td>
<td class="itd input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="10" min="1" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_cabling" data-i18n="conf_leds_layout_ma_cabling">Cabling</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_cabling">
<option value="snake" data-i18n="conf_leds_layout_ma_optsnake">Snake</option>
<option value="parallel" data-i18n="conf_leds_layout_ma_optparallel">Parallel</option>
</select>
</td>
</tr>
<!--- <tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_order" data-i18n="conf_leds_layout_ma_order">Order</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_order">
<option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
<option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
</select>
</td>
</tr>
--->
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_start" data-i18n="conf_leds_layout_ma_position">Input</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_start">
<option value="top-left" data-i18n="conf_leds_layout_ma_opttopleft">Top left</option>
<option value="top-right" data-i18n="conf_leds_layout_ma_opttopright">Top right</option>
<option value="bottom-left" data-i18n="conf_leds_layout_ma_optbottomleft">Bottom left</option>
<option value="bottom-right" data-i18n="conf_leds_layout_ma_optbottomright">Bottom right</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_ma_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
<div id="texfield_panel" class="panel panel-primary">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4">
<h4 class="panel-title">
<a><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a>
</h4>
</div>
<div id="collapse4" class="panel-collapse collapse">
<div class="panel-body">
<p id="leds_wl" data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
<div id="aceedit" style="width:100%;height:500px"></div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
<button type="button" class="btn btn-primary pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
</div>
</div> <!-- accordion -->
<div class="col-lg-6 col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_peview">LED Layout preview</span></h4>
</div>
<div class="panel-body">
<p id="previewcreator" style="font-weight:bold"></p>
<p id="previewledcount" style="font-weight:bold"></p>
<p id="previewledpower" style="font-weight:bold"></p>
<div id="led_vis_help"></div>
<div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px">
<div id="leds_preview"></div>
</div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
<button type="button" class="btn btn-primary" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">toggle led numbers</span></button>
</div>
</div>
</div>
</div>
</div> <!-- row layout -->
</div>
</div>
</div> <!-- tab content -->
<div class="row">
<div class="col-lg-12" id="layout_intro"></div>
<div class="col-lg-6 col-md-12" id="layout_type">
<div class="panel-group" id="accordion">
<div class="panel panel-primary">
<div class="panel-heading headcollapse" id="classic_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
<h4 class="panel-title">
<a><i class="fa fa-television fa-fw"></i><span data-i18n="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a>
</h4>
</div>
<div id="collapse1" class="panel-collapse collapse">
<div class="panel-body">
<table class="table borderless">
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_top" data-i18n="conf_leds_layout_cl_top">Top</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr " id="ip_cl_top" type="number" value="1" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_bottom" data-i18n="conf_leds_layout_cl_bottom">Bottom</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_bottom" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_left" data-i18n="conf_leds_layout_cl_left">Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_left" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_right" data-i18n="conf_leds_layout_cl_right">Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_right" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_glength" data-i18n="conf_leds_layout_cl_gaglength">Gap length</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_glength" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_gpos" data-i18n="conf_leds_layout_cl_gappos">Gap position</label>
</td>
<td class="itd">
<input class="form-control ledCLconstr" id="ip_cl_gpos" type="number" value="0" min="0" step="1">
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_position" data-i18n="conf_leds_layout_cl_inppos">Input position</label>
</td>
<td class="itd">
<input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" min="0" step="1">
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_reverse" data-i18n="conf_leds_layout_cl_reversdir">Reverse direction</label>
</td>
<td class="itd">
<div class="checkbox">
<input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input>
<label></label>
</div>
</td>
</tr>
</tbody>
</table>
<div class="panel panel-default">
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3" id="advanced_settings">
<h4 class="panel-title">
<a>
<i class="fa fa-fw fa-cogs"></i>
<span data-i18n="conf_leds_layout_advanced">Advanced settings</span>
<i class="fa fa-angle-down pull-right" id="advanced_settings_right_icon"></i>
</a>
</h4>
</div>
<div id="collapse3" class="panel-collapse collapse">
<div class="panel-body ">
<table class="tableform borderless">
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_hdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_hdepth" type="number" value="8" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_vdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_vdepth" type="number" value="5" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_overlap" data-i18n="conf_leds_layout_cl_overlap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_overlap" type="number" value="0" min="0" max="200" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_edgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_edgegap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_ptl" data-i18n="conf_leds_layout_ptl">Point Top Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%h</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%v</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_ptr" data-i18n="conf_leds_layout_ptr">Point Top Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_pbr" data-i18n="conf_leds_layout_pbr">Point Bottom Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_pbl" data-i18n="conf_leds_layout_pbl">Point Bottom Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
<!-- <tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_cornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr " id="ip_cl_cornergap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
-->
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_cl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading headcollapse" id="matrix_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
<h4 class="panel-title">
<a><i class="fa fa-th fa-fw"></i><span data-i18n="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a>
</h4>
</div>
<div id="collapse2" class="panel-collapse collapse">
<div class="panel-body">
<table>
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_ledshoriz" data-i18n="conf_leds_layout_ma_horiz">Horizontal</label>
</td>
<td class="itd input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="1" min="1" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_ledsvert" data-i18n="conf_leds_layout_ma_vert">Vertical</label>
</td>
<td class="itd input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="1" min="1" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_cabling" data-i18n="conf_leds_layout_ma_cabling">Cabling</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_cabling">
<option value="snake" data-i18n="conf_leds_layout_ma_optsnake">Snake</option>
<option value="parallel" data-i18n="conf_leds_layout_ma_optparallel">Parallel</option>
</select>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_direction" data-i18n="conf_leds_layout_ma_direction">Cabling</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_direction">
<option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
<option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
</select>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_start" data-i18n="conf_leds_layout_ma_position">Input</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_start">
<option value="top-left" data-i18n="conf_leds_layout_ma_opttopleft">Top left</option>
<option value="top-right" data-i18n="conf_leds_layout_ma_opttopright">Top right</option>
<option value="bottom-left" data-i18n="conf_leds_layout_ma_optbottomleft">Bottom left</option>
<option value="bottom-right" data-i18n="conf_leds_layout_ma_optbottomright">Bottom right</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_ma_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
<div id="blacklist_panel" class="panel panel-primary">
<div class="panel-heading headcollapse" id="blacklist_config_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4">
<h4 class="panel-title">
<a><i class="fa fa-ban fa-fw"></i><span data-i18n="conf_leds_layout_blacklistleds_title">Blacklist LEDs</span></a>
</h4>
</div>
<div id="collapse4" class="panel-collapse collapse">
<div class="panel-body">
<div id="editor_container_blacklist_conf"></div>
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_bl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
<div id="texfield_panel" class="panel panel-primary">
<div class="panel-heading headcollapse" id="current_config_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse5">
<h4 class="panel-title">
<a><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a>
</h4>
</div>
<div id="collapse5" class="panel-collapse collapse in">
<div class="panel-body">
<p id="leds_wl" data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
<div id="aceedit" style="width:100%;height:500px"></div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
<button type="button" class="btn btn-primary pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
</div>
</div> <!-- accordion -->
<div class="col-lg-6 col-md-12" id="layout_preview">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fa fa-search fa-fw"></i>
<span data-i18n="conf_leds_layout_peview">LED Layout preview</span>
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
<i class="fa fa-expand fa-fw pull-right"></i>
</a>
</h4>
</div>
<div class="panel-body">
<p id="previewcreator" style="font-weight:bold"></p>
<p id="previewledcount" style="font-weight:bold"></p>
<p id="previewledpower" style="font-weight:bold"></p>
<div id="led_vis_help"></div>
<div class="col-lg-12 st_helper" style="position:relative; padding-left:0px; padding-right:0px">
<canvas id="image_preview" style="position:absolute; z-index:0"></canvas>
<div id="keystone_correction_area" style="position: absolute; z-index: 20;"></div>
<div id="leds_preview"></div>
</div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
<button type="button" class="btn btn-danger" id="leds_prev_toggle_live_video"><i class="fa fa-fw fa-television"></i><span data-i18n="main_ledsim_btn_togglelivevideo">toggle live video</span></button>
<button type="button" class="btn btn-danger" id="leds_prev_toggle_keystone_correction_area" style="display:none;"><i class="mdi mdi-vector-square" style="margin-right:5px;"></i><span data-i18n="conf_leds_layout_btn_keystone">toggle keystone correction</span></button>
<button type="button" class="btn btn-primary pull-right" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">show checklist</span></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_leds.js"></script>

View File

@ -1,21 +1,30 @@
<div class="container-fluid" id="trans_conf_logging">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h3>
<div id="log_head"></div>
<div class="row" id='conf_cont'></div>
<hr />
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
<hr>
<div style="display:none">
<h4 style="font-weight:bold"><i class="fa fa-reorder fa-fw"></i><span data-i18n="conf_logging_report">Bericht</span></h4>
<button class="btn btn-primary" id="btn_logupload"><i class="fa fa-upload fa-fw"></i><span data-i18n="conf_logging_btn_pbupload"></span></button>
<div id="log_upl_pol"></div>
<div id="upl_link" style="margin-top:10px;font-weight:bold;"></div>
<div id="prev_reports"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h3>
<div id="log_head"></div>
<div class="row" id='conf_cont'></div>
</div>
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fa fa-book fa-fw"></i>
<span data-i18n="conf_logging_logoutput"></span>
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
<i class="fa fa-expand fa-fw pull-right"></i>
</a>
</h4>
</div>
<div class="panel-body">
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
</div>
<div class="panel-footer" id="log_footer">
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_logging.js"></script>

View File

@ -1,12 +1,12 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h3>
<h3 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h3>
<div id="conf_cont">
<div class="row" id="conf_cont_tok">
<div class="col-lg-6" id="tok_desc">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-key fa-fw"></i><span data-i18n="conf_network_tok_title"></span></div>
<div class="panel-heading panel-system"><i class="fa fa-key fa-fw"></i><span data-i18n="conf_network_tok_title"></span></div>
<div class="panel-body">
<div id="tok_desc_cont"></div>
<div id="tktable"></div>
@ -34,4 +34,4 @@
</div>
</div>
<script src="/js/content_network.js"></script>
<script src="/js/content_network.js"></script>

File diff suppressed because one or more lines are too long

View File

@ -1,98 +1,149 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h3>
<div id="dash_intro">
<div class="row">
<div class="col-md-6 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading">
<i class="fa fa-info-circle fa-fw"></i>
<span data-i18n="dashboard_infobox_label_title">Information</span>
</div>
<div class="panel-body">
<table class="table borderless">
<tbody>
<tr>
<td data-i18n="dashboard_infobox_label_statush"></td>
<td id="dash_statush" style="font-weight:bold">unknown</td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_platform">Platform:</td>
<td id="dash_platform"></td>
</tr>
<tr>
<td data-i18n="conf_leds_contr_label_contrtype">LED type:</td>
<td id="dash_leddevice"></td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_instance">Instance</td>
<td id="dash_instance"></td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_ports">Ports</td>
<td id="dash_ports"></td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
<td id="dash_currv">unknown</td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_watchedversionbranch">Watched version branch:</td>
<td id="dash_watchedversionbranch">unknown</td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
<td id="dash_latev">unknown</td>
</tr>
</tbody>
</table>
<hr>
<p style="font-weight:bold" data-i18n="dashboard_infobox_label_smartacc">Smart Access<p>
<span id="btn_hsc"></span>
<hr>
<span id="versioninforesult"></span>
</div>
</div>
</div>
<div class="col-md-6 col-xxl-3">
<div class="panel panel-default">
<div class="panel-heading">
<i class="fa fa-eye fa-fw"></i>
<span data-i18n="dashboard_componentbox_label_title">Components status</span>
</div>
<div class="panel-body">
<table class="table">
<thead>
<tr>
<th data-i18n="dashboard_componentbox_label_comp">Component</th>
<th data-i18n="dashboard_componentbox_label_status">Status</th>
</tr>
</thead>
<tbody id="tab_components">
</tbody>
</table>
</div>
</div>
</div>
<div class="col-md-12 col-xxl-5" style="display:none">
<div class="panel panel-default">
<div class="panel-heading">
<i class="fa fa-newspaper-o fa-fw"></i>
<span data-i18n="dashboard_newsbox_label_title">Visit Hyperion Blog</span>
</div>
<div class="panel-body">
<div id="dash_news" style="margin-bottom:7px"></div>
<a href="https://hyperion-project.org/blog/?pk_campaign=WebUI&pk_kwd=visitblog" target="_blank" data-i18n="dashboard_newsbox_visitblog"></a>
</div>
</div>
</div>
</div>
</div>
<!-- /.col-lg-12 -->
</div>
<!-- /.row -->
</div>
<!-- /.container-fluid -->
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h3>
<script src="/js/content_dashboard.js"></script>
<!-- Infobox -->
<div id="dash_intro">
<!-- Instance(s) -->
<div class="row instances">
<!-- Config status -->
<div class="col-md-6 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading panel-system">
<span id="dash_config_status">Status</span>
</div>
<div class="panel-body">
<table id="dash_capture_hw" class="table borderless">
<thead>
<tr>
<th colspan="3">
<i class="mdi mdi-camera"></i>
<span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span>
</th>
</tr>
</thead>
<tbody>
<tr id="dash_screen_grabber_row">
<td></td>
<td data-i18n="edt_conf_fg_heading_title">Screen-Grabber</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_screen_grabber">disabled</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_screengrabber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_video_grabber_row">
<td></td>
<td data-i18n="edt_conf_v4l2_heading_title">Video-Grabber</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_video_grabber">disabled</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_videograbber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_audio_grabber_row">
<td></td>
<td data-i18n="edt_conf_audio_heading_title">Audio-Grabber</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_audio_grabber">disabled</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_audiograbber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
</tbody>
</table>
<table id="dash_ports" class="table borderless">
<thead>
<tr>
<th colspan="3">
<i class="mdi mdi-lan"></i>
<span data-i18n="dashboard_infobox_label_ports">Ports</span>
</th>
</tr>
</thead>
<tbody>
<tr id="dash_ports_flat_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_flat">flat</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_fbPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_fbserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_ports_proto_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_proto">proto</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_pbPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_protoserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_ports_boblight_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_boblight">proto</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_boblightPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemInstCapture', 'editor_container_boblightserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr>
<td></td>
<td data-i18n="dashboard_infobox_label_port_json">json</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_jsonPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_jsonserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr>
<td></td>
<td data-i18n="dashboard_infobox_label_ports_websocket">websocket</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_wsPorts">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemWeb')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
</tbody>
</table>
<table class="table borderless">
<thead>
<tr>
<th colspan="3">
<i class="mdi mdi-numeric"></i>
<span data-i18n="about_version">Version</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
<td id="dash_currv" style="text-align: right">unknown</td>
</tr>
<tr>
<td></td>
<td data-i18n="dashboard_infobox_label_watchedversionbranch">Watched version branch:</td>
<td id="dash_watchedversionbranch" style="text-align: right">unknown</td>
</tr>
<tr>
<td></td>
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
<td id="dash_latev" style="text-align: right">unknown</td>
</tr>
</tbody>
</table>
<hr>
<span id="versioninforesult"></span>
</div>
</div>
</div>
</div>
</div>
<!-- /.col-lg-12 -->
</div>
<!-- /.row -->
</div>
</div>
<!-- /.container-fluid -->
<script src="/js/content_dashboard.js"></script>

View File

@ -1,51 +1,65 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
<div id="intro_effc">
</div>
<div class="row">
<div class="col-lg-6">
<div class="panel panel-default" >
<div class="panel-heading">
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<div class="panel-body">
<div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody>
<tr>
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
<td class="itd"><input class="form-control" type="text" id="name-input" /></td>
</tr>
</tbody>
</table>
<div id="editor_container" />
</div>
<div class="panel-footer" id="eff_footer">
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel panel-default" >
<div class="panel-heading">
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<div class="panel-body">
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div id="intro_effc">
</div>
<div class="row">
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading">
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
</div>
<div class="panel-body">
<div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody>
<tr>
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
<td class="itd"><input class="form-control" type="text" id="name-input"></td>
</tr>
</tbody>
</table>
<div id="editor_container"></div>
</div>
<div class="panel-footer" id="eff_footer">
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading">
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
</div>
<div class="panel-body">
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_effectsconfigurator.js"></script>

View File

@ -5,7 +5,7 @@
<style> body {margin:auto; padding:2%; text-align:center; font-family:arial;}</style>
</head>
<body>
<img src="../img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:20px;">
<img src="../img/hyperion/logo_positiv.png" alt="Redefine ambient light!" style="margin-bottom:20px;">
<h2><span style="color:red">We are sorry, Internet Explorer is not supported!</span><br /><br /> Please use recent versions of Firefox, Chrome, Safari or MS Edge.</h2>
</body>
</html>

View File

@ -1,35 +1,40 @@
<div class="container" style="margin:20px auto;max-width:500px;">
<center>
<div>
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Login</h3>
</div>
<div class="panel-body">
<form>
<div class="form-group">
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off"/>
<input name="show_pw" type="checkbox" id="show_pw"/><label for="show_pw">Show/Hide Password</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;" disabled><i class="fa fa-fw fa-unlock"></i>Login</button>
</div>
</form>
</div>
</div>
</div>
</center>
<center>
<div>
<div class="panel panel-danger">
<div class="panel-heading panel-system">
<h3 class="panel-title">Login</h3>
</div>
<div class="panel-body">
<form>
<div class="form-group">
<input type="name="username" class="form-control" type="text" id="username" value="Hyperion" disabled/></br>
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off"/>
<input name="show_pw" type="checkbox" id="show_pw" /><label for="show_pw">Show/Hide Password</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;"><i class="fa fa-fw fa-unlock"></i>Login</button>
</div>
</form>
</div>
</div>
</div>
</center>
</div>
<script>
removeOverlay();
removeOverlay();
$('#password').off().on('input',function(e) {
if(e.currentTarget.value.length >= 8)
$('#btn_password').removeAttr('disabled');
});
$('#password').off().on('input', function (e) {
if (e.currentTarget.value.length >= 8) {
$('#btn_password').prop('disabled', false);
}
else {
$('#btn_password').prop('disabled', true);
}
});
$('#show_pw').off().on('change',function(e) {
(e.currentTarget.checked ? $('#password').attr('type', 'text') : $('#password').attr('type', 'password'))
});
$('#show_pw').off().on('change', function (e) {
(e.currentTarget.checked ? $('#password').attr('type', 'text') : $('#password').attr('type', 'password'))
});
</script>

View File

@ -1,91 +1,107 @@
<div class="container-fluid">
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
<div class="row">
<div class="col-md-12 col-lg-8 col-xxl-7">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
<div class="panel-body">
<div id="sstcont"></div>
<div id="auto_btn"></div>
</div>
</div>
</div>
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
<div class="col-md-6 col-lg-4 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
<div class="panel-body" id="comp_intro">
<div id="componentsbutton"></div>
</div>
</div>
</div>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-4">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
<div class="panel-body" id="color_intro">
<table class="table borderless">
<tbody>
<tr>
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
<td>
<div id="cp2" class="colorpicker-component input-group">
<input type="text" id="cpeff" class="form-control"/>
<span class="input-group-addon"><i></i></span>
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</div>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
<td class="input-group">
<select id="effect_select" class="form-control"></select>
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture" >Picture:</label></td>
<td class="input-group custom-file">
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
<td class="input-group">
<input id="remote_duration" type="number" class="form-control" value="0" min="0"/>
<span class="input-group-addon" data-i18n="edt_append_s"></span>
</td>
</tr>
</tbody>
</table>
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-3">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
<div class="panel-body" id="maptype_intro">
<div id="mappingsbutton"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
<div class="panel-body" id="videomode_intro">
<div id="videomodebtns"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
<div class="panel-body" id="adjust_content">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-8 col-xxl-8">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
<div class="panel-body">
<div id="sstcont"></div>
<div id="auto_btn"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
<div class="panel-body" id="comp_intro">
<div id="componentsbutton"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-6 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
<div class="panel-body" id="color_intro">
<table class="table borderless">
<tbody>
<tr>
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
<td>
<div id="cp2" class="colorpicker-component input-group">
<input type="text" id="cpeff" class="form-control" />
<span class="input-group-addon"><i></i></span>
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</div>
</td>
</tr>
<tr id="effect_row">
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
<td class="input-group">
<select id="effect_select" class="form-control"></select>
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture">Picture:</label></td>
<td class="input-group custom-file">
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
<td class="input-group">
<input id="remote_duration" type="number" class="form-control" value="0" min="0" />
<span class="input-group-addon" data-i18n="edt_append_s"></span>
</td>
</tr>
</tbody>
</table>
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-3">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
<div class="panel-body" id="maptype_intro">
<div id="mappingsbutton"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
<div class="panel-body" id="videomode_intro">
<div id="videomodebtns"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
<div class="panel-body" id="adjust_content">
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_remote.js" ></script>
<script src="/js/content_remote.js"></script>

View File

@ -5,7 +5,7 @@
<h3 data-i18n="info_restart_title"></h3>
<h4 data-i18n="info_restart_rightback"></h4>
<p data-i18n="info_restart_contus"></p>
<a href="https://forum.hyperion-project.org?pk_campaign=WebUI&pk_kwd=failedrestart" data-i18n="info_restart_contusa"></a>
<a href="https://hyperion-project.org/forum/" data-i18n="info_restart_contusa"></a>
</div>
</center>
</div>

View File

@ -3,110 +3,24 @@
<div class="col-xs-12">
<h3 class="page-header"><i class="fa fa-info fa-fw"></i><span data-i18n="support_label_title">Support Hyperion</span></h3>
<div id="supp_intro"></div>
<div style="display:none">
<h4 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h4>
<a href="https://www.facebook.com/Hyperion-1415088231896140/" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-facebook bg-color-fb"></i>
<h4>Facebook</h4>
<p data-i18n="support_label_fbtext">Share our Hyperion Facebook page and get a notice when new updates are released</p>
</div>
</a>
<a href="https://twitter.com/HyperionAmbient" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-twitter bg-color-tw"></i>
<h4>Twitter</h4>
<p data-i18n="support_label_twtext">Share and follow on Twitter, be always up to date with latest post about the Hyperion development</p>
</div>
</a>
<a href="https://plus.google.com/103082579494653418604" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-google-plus bg-color-g"></i>
<h4>Google+</h4>
<p data-i18n="support_label_ggtext">Circle us on Google +!</p>
</div>
</a>
<a href="https://www.youtube.com/channel/UCCah_idbSMqgo4UwP6R9H-A" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-youtube bg-color-g"></i>
<h4>Youtube</h4>
<p data-i18n="support_label_yttext">Bored from pictures? Checkout our Youtube channel!</p>
</div>
</a>
<a href="https://www.instagram.com/hyperionambient/" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-instagram bg-color-ig"></i>
<h4>Instagram</h4>
<p data-i18n="support_label_igtext"></p>
</div>
</a>
</div>
</div>
<div class="col-xs-12" style="display:none">
<hr>
<h4 style="font-weight: bold" data-i18n="support_label_donate">Donate or use our affiliate links</h4>
<ol>
<li data-i18n="support_label_affinstr1">Click on the appropriate link of your country</li>
<li data-i18n="support_label_affinstr2">Everything you buy (doesnt matter what) we get a small fee based on your turnover</li>
<li data-i18n="support_label_affinstr3">You ALWAYS pay the same price, there is absolutely no difference. Try it out!</li>
</ol>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-amazon bg-color-am"></i>
<h4>Amazon</h4>
<ul>
<li><a href="http://www.amazon.de/?tag=hyperionproje-21" target="_blank" data-i18n="general_country_de">Germany</a></li>
<li><a href="http://www.amazon.com/?tag=hyperionpro05-20" target="_blank" data-i18n="general_country_us">United States</a></li>
<li><a href="http://www.amazon.co.uk/?tag=hyperionpro02-21" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
<li><a href="http://www.amazon.fr/?tag=hyperionpro0c-21" target="_blank" data-i18n="general_country_fr">France</a></li>
<li><a href="http://www.amazon.es/?tag=hyperionpro07-21" target="_blank" data-i18n="general_country_es">Spain</a></li>
<li><a href="http://www.amazon.it/?tag=hyperionpro00-21" target="_blank" data-i18n="general_country_it">Italy</a></li>
</ul>
</div>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-shopping-cart bg-color-am"></i>
<h4>ebay</h4>
<ul>
<li><a href="http://rover.ebay.com/rover/1/707-53477-19255-0/1?pub=5575174930&toolid=10001&campid=707-53477-19255-0&customid=&mpt=9592320&mpre=http%3A%2F%2Fwww.ebay.de" target="_blank" data-i18n="general_country_de">Germany</a></li>
<li><a href="http://rover.ebay.com/rover/1/711-53200-19255-0/1?pub=5575174930&toolid=10001&campid=711-53200-19255-0&customid=&mpt=8091563&mpre=http%3A%2F%2Fwww.ebay.com" target="_blank" data-i18n="general_country_us">United States</a></li>
<li><a href="http://rover.ebay.com/rover/1/710-53481-19255-0/1?pub=5575174930&toolid=10001&campid=710-53481-19255-0&customid=&mpt=9837178&mpre=http%3A%2F%2Fwww.ebay.co.uk" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
<li><a href="http://rover.ebay.com/rover/1/1346-53482-19255-0/1?pub=5575174930&toolid=10001&campid=1346-53482-19255-0&customid=&mpt=9890408&mpre=http%3A%2F%2Fwww.ebay.nl" target="_blank" data-i18n="general_country_nl">Netherlands</a></li>
<li><a href="http://rover.ebay.com/rover/1/709-53476-19255-0/1?pub=5575174930&toolid=10001&campid=709-53476-19255-0&customid=&mpt=9865977&mpre=http%3A%2F%2Fwww.ebay.fr" target="_blank" data-i18n="general_country_fr">France</a></li>
<li><a href="http://rover.ebay.com/rover/1/1185-53479-19255-0/1?pub=5575174930&toolid=10001&campid=1185-53479-19255-0&customid=&mpt=1016300&mpre=http%3A%2F%2Fwww.ebay.es" target="_blank" data-i18n="general_country_es">Spain</a></li>
</ul>
</div>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-paypal bg-color-pp"></i>
<h4>Paypal</h4>
<p data-i18n="support_label_donationpp">Donation:</p><a href="https://www.paypal.me/hyperionproject/10" target="_blank">Paypal</a>
</div>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-btc bg-color-btc"></i>
<h4>Bitcoin</h4>
<p data-i18n="support_label_btctext">Address:</p>
<p style="word-break: break-all;">1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p>
</div>
</div>
<div class="col-xs-12">
<hr>
<h4 style="font-weight: bold" data-i18n="support_label_webrestitle">Information and help ressources</h4>
<a href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_webpage" target="_blank" class="unlink">
<a href="https://hyperion-project.org" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-globe bg-color-wf"></i>
<h4 data-i18n="support_label_webpagetitle">Webpage</h4>
<p data-i18n="support_label_webpagetext">Home of Hyperion</p>
</div>
</a>
<a href="https://wiki.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_wiki" target="_blank" class="unlink">
<a href="https://docs.hyperion-project.org" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-book bg-color-wf"></i>
<h4 data-i18n="support_label_wikititle">Wiki</h4>
<h4 data-i18n="support_label_wikititle">Documentation</h4>
<p data-i18n="support_label_wikitext">The A to Z source for almost everything Hyperion related</p>
</div>
</a>
<a href="https://forum.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_forum" target="_blank" class="unlink">
<a href="https://hyperion-project.org/forum/" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-comments bg-color-wf"></i>
<h4 data-i18n="support_label_forumtitle">Forum</h4>

View File

@ -4,7 +4,7 @@
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
<div class="introd">
<h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
<h4> At the moment the install buttons are not working. Development is still ongoing here. </h4>
<h4> At the moment the respective install button is disabled. Development is still ongoing here. </h4>
<hr />
</div>
<h4 id="update_currver"></h4>
@ -49,12 +49,12 @@ $(document).ready( function(error) {
danger = 'default';
type = 'Stable';
}
matches++;
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked.parse(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"disabled") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
}
$('#update_currver').append($.i18n('update_versreminder', currentVersion));
if (matches == 0)
$('#versionlist').append($.i18n('update_no_updates_for_branch'));
}

8
assets/webconfig/css/animate.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,6 +14,10 @@ body {
border-color: #212121;
}
.navbar-default li a {
color: #C6C6C6 !important;
}
.panel-body {
background-color: #424242;
}
@ -189,7 +193,7 @@ tr:hover td {
}
.dropdown-menu>li>a {
color: #2e6da4;
color: #DDDDDD;
}
/*Panels*/
@ -220,6 +224,18 @@ tr:hover td {
color: #DDDDDD;
}
.panel-default>.panel-system{
background-color: #0E83E7 !important;
border-color: #212121 !important;
color: #fff ;
}
.panel-default>.panel-instance{
background-color:#E18300 !important;
border-color: #212121 !important;
color: #DDDDDD;
}
.panel-footer {
background-color: #424242 !important;
border-top: 1px solid #616161 !important;
@ -258,6 +274,10 @@ select.form-control {
color: #DDDDDD;
}
.keystone_correction_corners {
border:1px solid white;
}
.checkbox label::before {
border-color: #616161;
background-color: #212121;
@ -271,18 +291,22 @@ select.form-control {
}
.checklist li::before {
color: greenyellow;
color: #DDDDDD;
}
.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-success input[type="radio"]:checked + label::before {
background-color: greenyellow;
border-color: #5cb85c;
.checkbox input[type="checkbox"]:checked + label::before, .checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-success input[type="radio"]:checked + label::before {
border-color: #616161;
background-color: #212121;
}
.checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-success input[type="radio"]:checked + label::after {
color: #1e1e1e;
.checkbox input[type="checkbox"]:checked + label::after, .checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-success input[type="radio"]:checked + label::after {
color: #DDDDDD;
}
.radio__field:checked ~ .radio__icon::before {
background: #fff;
}
.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) {
border-bottom-right-radius: 4px;
border-top-right-radius: 4px;
@ -416,7 +440,7 @@ button.close:hover {
}
.bs-callout-success {
border-left-color: greenyellow;
border-left-color: #67FF01;
}
.bs-callout-success h4 {

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.gj-draggable{cursor:move}.gj-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;z-index:1203}.gj-dialog-bootstrap [data-role=title],.gj-dialog-bootstrap4 [data-role=title]{display:inline}.gj-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.gj-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.gj-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.gj-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.gj-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.gj-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.gj-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.gj-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.gj-dialog-footer{position:absolute;bottom:0;width:100%;margin-top:0}.gj-dialog-scrollable [data-role=body]{overflow-x:hidden;overflow-y:scroll}.gj-dialog-bootstrap,.gj-dialog-bootstrap4,.gj-dialog-md{overflow:hidden;z-index:1202}.gj-dialog-bootstrap [data-role=close]{line-height:1.42857143}.gj-dialog-bootstrap4 [data-role=close]{line-height:1.5}.gj-dialog-md{background-color:#FFF;border:none;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);box-sizing:border-box;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.gj-dialog-md-header{padding:24px 24px 0;font-family:Roboto,Helvetica,Arial,sans-serif}.gj-dialog-md-title{margin:0;font-weight:400;display:inline;line-height:28px;font-size:20px}.gj-dialog-md-close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0;float:right;line-height:28px;font-size:28px}.gj-dialog-md-body{padding:20px 24px 24px;color:rgba(0,0,0,.54);font-family:Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:20px}.gj-dialog-md-footer{padding:8px 8px 8px 24px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;box-sizing:border-box}.gj-dialog-md-footer>:first-child{margin-right:0}.gj-dialog-md-footer>*{margin-right:8px;height:36px}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,64 +0,0 @@
/*
* metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3
* https://github.com/onokumus/metisMenu
*
* Made by Osman Nuri Okumus
* Under MIT License
*/
.arrow {
float: right;
line-height: 1.42857;
}
.glyphicon.arrow:before {
content: "\e079";
}
.active > a > .glyphicon.arrow:before {
content: "\e114";
}
/*
* Require Font-Awesome
* http://fortawesome.github.io/Font-Awesome/
*/
.fa.arrow:before {
content: "\f104";
}
.active > a > .fa.arrow:before {
content: "\f107";
}
.plus-times {
float: right;
}
.fa.plus-times:before {
content: "\f067";
}
.active > a > .fa.plus-times {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.plus-minus {
float: right;
}
.fa.plus-minus:before {
content: "\f067";
}
.active > a > .fa.plus-minus:before {
content: "\f068";
}

View File

@ -0,0 +1,7 @@
/*!
* metismenu https://github.com/onokumus/metismenu#readme
* A collapsible jQuery menu plugin
* @version 3.0.6
* @author Osman Nuri Okumus <onokumus@gmail.com> (https://github.com/onokumus)
* @license: MIT
*/.metismenu .arrow{float:right;line-height:1.42857}*[dir=rtl] .metismenu .arrow{float:left}.metismenu .glyphicon.arrow:before{content:""}.metismenu .mm-active>a>.glyphicon.arrow:before{content:""}.metismenu .fa.arrow:before{content:""}.metismenu .mm-active>a>.fa.arrow:before{content:""}.metismenu .ion.arrow:before{content:""}.metismenu .mm-active>a>.ion.arrow:before{content:""}.metismenu .plus-times{float:right}*[dir=rtl] .metismenu .plus-times{float:left}.metismenu .fa.plus-times:before{content:""}.metismenu .mm-active>a>.fa.plus-times{transform:rotate(45deg)}.metismenu .plus-minus{float:right}*[dir=rtl] .metismenu .plus-minus{float:left}.metismenu .fa.plus-minus:before{content:""}.metismenu .mm-active>a>.fa.plus-minus:before{content:""}.metismenu .mm-collapse:not(.mm-show){display:none}.metismenu .mm-collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.metismenu .has-arrow{position:relative}.metismenu .has-arrow::after{position:absolute;content:"";width:.5em;height:.5em;border-width:1px 0 0 1px;border-style:solid;border-color:initial;right:1em;transform:rotate(-45deg) translate(0, -50%);transform-origin:top;top:50%;transition:all .3s ease-out}*[dir=rtl] .metismenu .has-arrow::after{right:auto;left:1em;transform:rotate(135deg) translate(0, -50%)}.metismenu .mm-active>.has-arrow::after,.metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(-135deg) translate(0, -50%)}*[dir=rtl] .metismenu .mm-active>.has-arrow::after,*[dir=rtl] .metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(225deg) translate(0, -50%)}/*# sourceMappingURL=metisMenu.min.css.map */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 382 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,61 @@
{
"dashboard_alert_message_confedit": "La teva configuració d'Hyperion s'ha modificat. Per aplicar-la, reinicia Hyperion.",
"dashboard_alert_message_confedit_t": "Configuració modificada",
"dashboard_alert_message_confsave_success_t": "Configuració guardada",
"dashboard_alert_message_disabled_t": "Instància de maquinari LED deshabilitada",
"dashboard_componentbox_label_comp": "Component",
"dashboard_componentbox_label_status": "Estat",
"dashboard_componentbox_label_title": "Estat del component",
"dashboard_infobox_label_currenthyp": "La teva versió d'Hyperion:",
"dashboard_infobox_label_disableh": "Desactivar instància: 1 $",
"dashboard_infobox_label_enableh": "Activar instància: 1 $",
"dashboard_infobox_label_instance": "Instànica:",
"dashboard_infobox_label_latesthyp": "La darrera versió d'Hyperion:",
"dashboard_infobox_label_platform": "Plataforma:",
"dashboard_infobox_label_ports": "Ports:",
"dashboard_infobox_label_smartacc": "Accés intel·ligent",
"dashboard_infobox_label_statush": "Estat d'Hyperion:",
"dashboard_infobox_label_title": "Informació",
"dashboard_infobox_message_updatesuccess": "Estàs executant la darrera versió d'Hyperion.",
"dashboard_infobox_message_updatewarning": "Hi ha una nova versió d'Hyperion disponible! (1 $)",
"dashboard_label_intro": "El panell de control et dona una vista ràpida de l'estat d'Hyperion",
"dashboard_newsbox_label_title": "Bloc d'Hyperion",
"dashboard_newsbox_readmore": "Llegeix més",
"dashboard_newsbox_visitblog": "Visita el bloc d'Hyperion",
"general_access_advanced": "Avançat",
"general_access_default": "Per defecte",
"general_access_expert": "Expert",
"general_btn_back": "Tornar",
"general_btn_cancel": "Cancel.la",
"general_btn_continue": "Continuar",
"general_btn_next": "Següent",
"general_btn_off": "Off",
"general_btn_ok": "OK",
"general_btn_on": "On",
"general_btn_restarthyperion": "Reinicia Hyperion",
"general_btn_save": "Guarda",
"general_btn_saveandreload": "Guarda i recarrega",
"general_btn_yes": "Sí",
"general_button_savesettings": "Guarda la configuració",
"general_col_blue": "blau",
"general_col_green": "verd",
"general_col_red": "vermell",
"general_comp_BLACKBORDER": "Bandes fosques",
"general_comp_GRABBER": "Captura Pantalla",
"general_comp_LEDDEVICE": "Sortida LED",
"general_comp_SMOOTHING": "Suavitzat",
"general_comp_V4L": "Captura l'entrada USB",
"general_country_de": "Alemany",
"general_country_es": "Espanya",
"general_country_fr": "França",
"general_country_it": "Itàlia",
"general_country_nl": "Països Baixos",
"general_country_uk": "Regne Unit",
"general_country_us": "Estats Units",
"general_speech_cs": "Txec",
"general_speech_de": "Alemany",
"general_speech_en": "Anglès",
"general_speech_es": "Espanyol",
"general_speech_it": "Italià",
"general_webui_title": "Hyperion - Configuració Web"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,49 @@
{
"dashboard_infobox_label_currenthyp": "Din Hyperion version:",
"dashboard_infobox_label_latesthyp": "Seneste Hyperion version:",
"dashboard_infobox_label_platform": "Platform:",
"dashboard_infobox_label_title": "Information",
"dashboard_label_intro": "Dashboardet giver dig en hurtig oversigt over status af Hyperion",
"general_access_advanced": "Avanceret",
"general_access_default": "Standart",
"general_access_expert": "Ekspert",
"general_btn_back": "Tilbage",
"general_btn_cancel": "Annullere",
"general_btn_continue": "Fortsæt",
"general_btn_iswitch": "Skift",
"general_btn_next": "Næste",
"general_btn_off": "Fra",
"general_btn_ok": "OK",
"general_btn_on": "Til",
"general_btn_restarthyperion": "Genstart Hyperion",
"general_btn_save": "Gem",
"general_btn_saveandreload": "Gem og genindlæs",
"general_btn_yes": "Ja",
"general_button_savesettings": "Gem indstillinger",
"general_col_blue": "blå",
"general_col_green": "grøn",
"general_col_red": "rød",
"general_comp_BLACKBORDER": "Blackbar Detektion",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_FLATBUFSERVER": "Flatbuffers Server",
"general_comp_FORWARDER": "Forwarder",
"general_comp_GRABBER": "Optag skærm",
"general_comp_LEDDEVICE": "LED output",
"general_comp_PROTOSERVER": "Protocol Buffers Server",
"general_comp_SMOOTHING": "Udjævning",
"general_comp_V4L": "Optag USB-input",
"general_country_de": "Tyskland",
"general_country_es": "Spanien",
"general_country_fr": "Frankrig",
"general_country_it": "Italien",
"general_country_nl": "Holland",
"general_country_uk": "England",
"general_country_us": "USA",
"general_speech_cs": "Tjekkisk",
"general_speech_de": "Tysk",
"general_speech_en": "Engelsk",
"general_speech_es": "Spansk",
"general_speech_it": "Italiensk",
"general_webui_title": "Hyperion - Webkonfiguration",
"general_wiki_moreto": "Mere information om \"$1\" på vores Wiki"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,646 @@
{
"InfoDialog_access_text": "Ανάλογα με το επίπεδο ρυθμίσεων, μπορείτε να προσαρμόσετε περισσότερες επιλογές ή να αποκτήσετε πρόσβαση σε περισσότερες δυνατότητες. Συνιστάται το επίπεδο \"Προεπιλογή\".",
"InfoDialog_access_title": "Επίπεδα Ρυθμίσεων",
"InfoDialog_changePassword_success": "Ο κωδικός πρόσβασης αποθηκεύτηκε με επιτυχία!",
"InfoDialog_changePassword_title": "Αλλαγή κωδικού",
"InfoDialog_iswitch_text": "Εάν εκτελείτε το Hyperion περισσότερες από μία φορές στο τοπικό σας δίκτυο, μπορείτε να κάνετε εναλλαγή μεταξύ των διαμορφώσεων ιστού. Επιλέξτε την παρουσία Hyperion παρακάτω και αλλάξτε!",
"InfoDialog_nostorage_text": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει τοπική αποθήκευση. Δεν μπορείτε να αποθηκεύσετε μια συγκεκριμένη ρύθμιση γλώσσας (επιστροφή στην «αυτόματη ανίχνευση») και επίπεδο πρόσβασης (επιστροφή στην «προεπιλογή»). Μερικοί μάγοι μπορεί να είναι κρυφοί. Θα μπορούσατε ακόμα να χρησιμοποιήσετε τη διεπαφή ιστού χωρίς περαιτέρω προβλήματα",
"InfoDialog_nowrite_foottext": "Το WebUI θα ξεκλειδωθεί αυτόματα μόλις λύσετε το πρόβλημα!",
"InfoDialog_nowrite_text": "Το Hyperion δεν μπορεί να γράψει στο τρέχον φορτωμένο αρχείο διαμόρφωσης. Επιδιορθώστε τα δικαιώματα του αρχείου για να συνεχίσετε.",
"InfoDialog_nowrite_title": "Σφάλμα άδειας εγγραφής!",
"about_3rd_party_licenses": "Άδεια τρίτου μέρους",
"about_credits": "Πιστώσεις σε όλους αυτούς τους προγραμματιστές!",
"about_resources": "$1 βιβλιοθήκες",
"about_translations": "Μεταφράσεις",
"about_version": "Έκδοση",
"conf_colors_blackborder_intro": "Παραλείψτε τις μαύρες μπάρες όπου κι αν βρίσκονται. Κάθε λειτουργία χρησιμοποιεί έναν άλλο αλγόριθμο ανίχνευσης που είναι συντονισμένος για ειδικές καταστάσεις. Αυξήστε το όριο αν δεν λειτουργεί για εσάς.",
"conf_colors_color_intro": "Δημιουργήστε ένα ή περισσότερα προφίλ βαθμονόμησης, προσαρμόστε κάθε χρώμα, φωτεινότητα, γραμμικοποίηση και άλλα.",
"conf_effect_fgeff_intro": "Καθορίστε ένα εφέ εκκίνησης ή ένα χρώμα, το οποίο εμφανίζεται κατά την εκκίνηση του Hyperion για την καθορισμένη διάρκεια.",
"conf_effect_path_intro": "Φόρτωση εφέ από τις καθορισμένες διαδρομές. Επιπλέον, μπορείτε να απενεργοποιήσετε μεμονωμένα εφέ ονομαστικά για να τα αποκρύψετε από όλες τις λίστες εφέ.",
"conf_general_impexp_expbtn": "Εξαγωγή",
"conf_general_impexp_impbtn": "Εισαγωγή",
"conf_general_impexp_l1": "Εισαγάγετε μια διαμόρφωση επιλέγοντας ένα αρχείο διαμόρφωσης παρακάτω και κάντε κλικ στο \"Εισαγωγή\".",
"conf_general_impexp_l2": "Εξάγετε μια διαμόρφωση κάνοντας κλικ στο \"Εξαγωγή\". Το πρόγραμμα περιήγησής σας ξεκινά μια λήψη.",
"conf_general_impexp_title": "Εισαγωγή/Εξαγωγή διαρύθμισης",
"conf_general_inst_actionhead": "Ενέργεια",
"conf_general_inst_desc": "Χρησιμοποιήστε διαφορετικό υλικό LED ταυτόχρονα. Κάθε στιγμιότυπο εκτελείται ανεξάρτητα το ένα από το άλλο, γεγονός που επιτρέπει διαφορετικές διατάξεις LED και ρυθμίσεις βαθμονόμησης. Οι εμφανίσεις που εκτελούνται είναι διαθέσιμες στην επάνω γραμμή εικονιδίων",
"conf_general_intro": "Βασικές ρυθμίσεις γύρω από το Hyperion και το WebUI που δεν ταιριάζουν σε άλλη κατηγορία.",
"conf_general_label_title": "Γενικές ρυθμίσεις",
"conf_grabber_fg_intro": "Η καταγραφή οθόνης είναι η λήψη του τοπικού σας συστήματος ως πηγή εισόδου, στο οποίο είναι εγκατεστημένο το Hyperion.",
"conf_grabber_v4l_intro": "Η λήψη USB είναι μια συσκευή (λήψης) που συνδέεται μέσω USB και χρησιμοποιείται για την εισαγωγή εικόνων πηγής για επεξεργασία.",
"conf_helptable_expl": "Εξήγηση",
"conf_helptable_option": "Επιλογή",
"conf_leds_contr_label_contrtype": "Είδος χειριστή:",
"conf_leds_device_intro": "Το Hyperion υποστηρίζει πολλούς ελεγκτές για τη μετάδοση δεδομένων στη συσκευή-στόχο σας. Επιλέξτε έναν ελεγκτή LED από την ταξινομημένη λίστα και διαμορφώστε τον. Έχουμε επιλέξει τις καλύτερες προεπιλεγμένες ρυθμίσεις για κάθε συσκευή.",
"conf_leds_error_get_properties_text": "Αποτυχία λήψης των ιδιοτήτων της συσκευής. Ελέγξτε τα στοιχεία διαμόρφωσης.",
"conf_leds_error_get_properties_title": "Ιδιότητες συσκευής",
"conf_leds_layout_advanced": "Προχωρημένες Ρυθμίσεις",
"conf_leds_layout_blacklist_num_title": "Αριθμός LED",
"conf_leds_layout_blacklist_start_title": "Εκκίνηση LED",
"conf_leds_layout_btn_checklist": "Δείξε λίστα ελέγχου",
"conf_leds_layout_button_savelay": "Αποθήκευση Διάταξης",
"conf_leds_layout_button_updsim": "Ενημέρωση Προεπισκόπησης",
"conf_leds_layout_checkp1": "Το μαύρο LED είναι το πρώτο LED, το πρώτο LED είναι το σημείο όπου εισέρχεται το σήμα",
"conf_leds_layout_checkp2": "Η διάταξη είναι πάντα η μπροστινή όψη της τηλεόρασής σας, ποτέ η πίσω όψη.",
"conf_leds_layout_checkp3": "Βεβαιωθείτε ότι η κατεύθυνση είναι σωστή. Τα γκρι LED υποδεικνύουν τον αριθμό LED 2 και 3 για οπτικοποίηση της κατεύθυνσης των δεδομένων.",
"conf_leds_layout_checkp4": "Κενό θήκης: Για να δημιουργήσετε ένα κενό, αγνοήστε το πρώτα όταν ορίζετε Πάνω/Κάτω/Αριστερά/Δεξιά και στη συνέχεια ορίστε το μήκος του διακένου σας για να αφαιρέσετε μια ποσότητα led. Τροποποιήστε τη θέση του κενού μέχρι να ταιριάζει.",
"conf_leds_layout_cl_bottom": "Κάτω",
"conf_leds_layout_cl_bottomleft": "Κάτω αριστερά (Γωνία)",
"conf_leds_layout_cl_bottomright": "Κάτω Δεξιά (Γωνία)",
"conf_leds_layout_cl_gaglength": "Μήκος κενού",
"conf_leds_layout_cl_gappos": "θέση κενού",
"conf_leds_layout_cl_hleddepth": "Οριζόντιο βάθος LED",
"conf_leds_layout_cl_inppos": "Θέση Εισαγωγής",
"conf_leds_layout_cl_left": "Αριστερά",
"conf_leds_layout_cl_leftbottom": "Αριστερά 50% - 100% Κάτω",
"conf_leds_layout_cl_leftmiddle": "Αριστερά 25% - 75% Μέση",
"conf_leds_layout_cl_lefttop": "Αριστερά 0% - 50% Πάνω",
"conf_leds_layout_cl_lightPosBottomLeft11": "Κάτω: 75 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft112": "Κάτω: 0 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft12": "Κάτω: 25 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft121": "Κάτω: 50 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft14": "Κάτω: 0 - 25% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft34": "Κάτω: 50 - 75% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Κάτω: 25 - 75% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeft112": "Πάνω: 0 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeft121": "Πάνω: 50 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Πάνω: 25 - 75% από Αριστερά",
"conf_leds_layout_cl_overlap": "Αλληλοεπικάλυψη",
"conf_leds_layout_cl_reversdir": "Αντίστροφη κατεύθυνση",
"conf_leds_layout_cl_right": "Δεξιά",
"conf_leds_layout_cl_rightbottom": "Δεξιά 50% - 100% Κάτω",
"conf_leds_layout_cl_rightmiddle": "Δεξιά 25% - 75% Μέση",
"conf_leds_layout_cl_righttop": "Δεξιά 0% - 50% Πάνω",
"conf_leds_layout_cl_top": "Πάνω",
"conf_leds_layout_cl_topleft": "Πάνω αριστερά (Γωνία)",
"conf_leds_layout_cl_topright": "Πάνω Δεξιά (Γωνία)",
"conf_leds_layout_cl_vleddepth": "Κάθετο βάθος LED",
"conf_leds_layout_frame": "Κλασική διάταξη (Κορνίζα LED)",
"conf_leds_layout_generatedconf": "Δημιουργία/Τρέχουσα διαμόρφωση LED",
"conf_leds_layout_intro": "Χρειάζεστε επίσης μια διάταξη LED, η οποία αντικατοπτρίζει τις θέσεις LED σας. Η κλασική διάταξη είναι το συνήθως χρησιμοποιούμενο πλαίσιο τηλεόρασης, αλλά υποστηρίζουμε επίσης τη δημιουργία LED matrix (LED walls). Η προβολή αυτής της διάταξης είναι ΠΑΝΤΑ από το ΜΠΡΟΣΤΑ της τηλεόρασής σας.",
"conf_leds_layout_ma_cabling": "Καλωδίωση",
"conf_leds_layout_ma_direction": "Διεύθυνση",
"conf_leds_layout_ma_horiz": "Οριζόντια",
"conf_leds_layout_ma_optbottomleft": "Κάτω Αριστερά",
"conf_leds_layout_ma_optbottomright": "Κάτω Δεξιά",
"conf_leds_layout_ma_opthoriz": "Οριζόντια",
"conf_leds_layout_ma_optparallel": "Παράλληλα",
"conf_leds_layout_ma_optsnake": "Φιδάκι",
"conf_leds_layout_ma_opttopleft": "Πάνω Αριστερά",
"conf_leds_layout_ma_opttopright": "Πάνω Δεξιά",
"conf_leds_layout_ma_optvert": "Κάθετα",
"conf_leds_layout_ma_order": "Σειρά",
"conf_leds_layout_ma_position": "Εισαγωγή",
"conf_leds_layout_ma_vert": "Κάθετα",
"conf_leds_layout_matrix": "Διάταξη Μήτρας (Τοίχος LED)",
"conf_leds_layout_pbl": "Δείξτε κάτω Αριστερά",
"conf_leds_layout_pbr": "Δείξτε κάτω Δεξιά",
"conf_leds_layout_preview_l1": "Αυτό είναι το πρώτο σας LED (θέση εισόδου)",
"conf_leds_layout_preview_l2": "Αυτό οπτικοποιεί την κατεύθυνση των δεδομένων (δεύτερο/τρίτο LED)",
"conf_leds_layout_preview_ledpower": "Μέγιστη κατανάλωση ενέργειας: $1 Α",
"conf_leds_layout_preview_originCL": "Δημιουργήθηκε από: Κλασική διάταξη (πλαίσιο LED)",
"conf_leds_layout_preview_originMA": "Δημιουργήθηκε από: Διάταξη Μήτρας (τείχος LED)",
"conf_leds_layout_preview_totalleds": "Πλήθος LED: $1",
"conf_leds_layout_ptl": "Δείξτε πάνω Αριστερά",
"conf_leds_layout_ptlh": "Οριζόντια",
"conf_leds_layout_ptln": "Τριπλό σημείο",
"conf_leds_layout_ptlv": "Κάθετα",
"conf_leds_layout_ptr": "Δείξτε πάνω Δεξιά",
"conf_leds_layout_textf1": "Αυτό το πεδίο κειμένου εμφανίζει από προεπιλογή την τρέχουσα φορτωμένη διάταξη και θα αντικατασταθεί εάν δημιουργήσετε μια νέα με τις παραπάνω επιλογές. Προαιρετικά, μπορείτε να πραγματοποιήσετε περαιτέρω επεξεργασίες.",
"conf_leds_nav_label_ledcontroller": "Χειριστής LED",
"conf_leds_nav_label_ledlayout": "Διάταξη LED",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "PRI PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Δίκτυο",
"conf_leds_optgroup_other": "Άλλο",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_contpolicy": "Αναφορά Πολιτικής Απορρήτου",
"conf_logging_lastreports": "Προηγούμενες αναφορές",
"conf_logging_report": "Αναφορά",
"conf_logging_uplfailed": "Η μεταφόρτωση απέτυχε! Ελέγξτε τη σύνδεσή σας στο Διαδίκτυο!",
"conf_logging_uploading": "Προετοιμασία δεδομένων...",
"conf_logging_uplpolicy": "Κάνοντας κλικ σε αυτό το κουμπί αποδέχεστε το",
"conf_network_forw_intro": "Προωθήστε όλες τις εισόδους σε μια δεύτερη εγκατάσταση Hyperion που θα μπορούσε να οδηγηθεί με άλλο ελεγκτή LED",
"conf_network_tok_cidhead": "Περιγραφή",
"conf_network_tok_desc": "Τα διακριτικά παρέχουν σε άλλες εφαρμογές πρόσβαση στο Hyperion API, μια εφαρμογή μπορεί να ζητήσει ένα διακριτικό όπου πρέπει να το αποδεχτείτε ή να τις δημιουργήσετε μόνοι σας παρακάτω. Αυτά τα διακριτικά απαιτούνται απλώς όταν η \"Εξουσιοδότηση API\" είναι ενεργοποιημένη στις ρυθμίσεις δικτύου.",
"conf_network_tok_grantMsg": "Μια εφαρμογή ζήτησε ένα διακριτικό για να αποκτήσει πρόσβαση στο Hyperion API. Θέλετε να παραχωρήσετε πρόσβαση; Επαληθεύστε τις παρεχόμενες πληροφορίες!",
"conf_network_tok_lastuse": "Τελευταία χρήση",
"conf_network_tok_title": "Διαχείρηση Διακριτικών",
"conf_webconfig_label_intro": "Ρυθμίσεις Webconfiguration. Επεξεργαστείτε με σύνεση.",
"dashboard_alert_message_confedit": "Η διαμόρφωση του Hyperion έχει τροποποιηθεί. Για να το εφαρμόσετε, επανεκκινήστε το Hyperion.",
"dashboard_alert_message_confsave_success": "Η διαμόρφωσή σας στο Hyperion αποθηκεύτηκε επιτυχώς. Οι αλλαγές σας είναι πλέον ενεργές.",
"dashboard_alert_message_confsave_success_t": "Η διαμόρφωση αποθηκεύτηκε",
"dashboard_componentbox_label_comp": "Στοιχείο",
"dashboard_componentbox_label_status": "Κατάσταση",
"dashboard_componentbox_label_title": "Κατάσταση στοιχείου",
"dashboard_infobox_label_currenthyp": "Η έκδοση Hyperion σας:",
"dashboard_infobox_label_disableh": "Απενεργοποίηση Περίπτωσης: $1",
"dashboard_infobox_label_enableh": "Ενεργοποίηση Περίπτωσης: $1",
"dashboard_infobox_label_instance": "Περίπτωση:",
"dashboard_infobox_label_latesthyp": "Η τελευταία έκδοση Hyperion:",
"dashboard_infobox_label_platform": "Πλατφόρμα",
"dashboard_infobox_label_ports": "Θύρες",
"dashboard_infobox_label_smartacc": "Έξυπνη πρόσβαση",
"dashboard_infobox_label_statush": "Κατάσταση Hyperion:",
"dashboard_infobox_label_title": "Πληροφορίες",
"dashboard_infobox_message_updatesuccess": "Τρέχεται την τελευταία έκδοση Hyperion.",
"dashboard_infobox_message_updatewarning": "Μια νεότερη έκδοση του Hyperion είναι διαθέσιμη! (1$)",
"dashboard_label_intro": "Ο πίνακας ελέγχου σας δίνει μια σύντομη περιγραφή για τη κατάσταση του Hyperion",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "Δεν μπορείτε να συνδεθείτε με το Hyperion Server για να ανακτήσετε τις τελευταίες δημοσιεύσεις, λειτουργεί το διαδύκτιο σας;",
"dashboard_newsbox_readmore": "Διαβάστε παραπάνω",
"dashboard_newsbox_visitblog": "Επισκεφτείτε Hyperion-Blog ",
"edt_append_degree": "°",
"edt_append_frames": "καρέ",
"edt_append_hz": "Hz",
"edt_append_leds": "LED",
"edt_append_ms": "ms",
"edt_append_ns": "ns",
"edt_append_percent": "%",
"edt_append_percent_h": "% hori",
"edt_append_percent_v": "% vert",
"edt_append_pixel": "Πίξελ",
"edt_append_s": "s",
"edt_append_sdegree": "s/μοίρα",
"edt_conf_bb_blurRemoveCnt_title": "Θόλωσε πίξελ",
"edt_conf_bb_mode_title": "Τρόπο",
"edt_conf_bb_threshold_title": "Κατώφλι",
"edt_conf_color_black_expl": "Η βαθμονομημένη τιμή μαύρου.",
"edt_conf_color_black_title": "Μαύρο",
"edt_conf_color_blue_expl": "Η βαθμονομημένη τιμή μπλε.",
"edt_conf_color_blue_title": "Μπλε",
"edt_conf_color_channelAdjustment_header_expl": "Δημιουργήστε προφίλ χρωμάτων που θα μπορούσαν να αντιστοιχιστούν σε ένα συγκεκριμένο στοιχείο. Προσαρμόστε χρώμα, γάμμα, φωτεινότητα, αντιστάθμιση και πολλά άλλα.",
"edt_conf_color_channelAdjustment_header_itemtitle": "Προφίλ",
"edt_conf_color_cyan_expl": "Η βαθμονομημένη τιμή κυανού.",
"edt_conf_color_cyan_title": "Κυανό",
"edt_conf_color_green_expl": "Η βαθμονομημένη τιμή πράσινου.",
"edt_conf_color_green_title": "Πράσινο",
"edt_conf_color_heading_title": "Βαθμονόμηση Χρώματος",
"edt_conf_color_id_title": "ID",
"edt_conf_color_imageToLedMappingType_expl": "Αντικαθιστά την εκχώρηση περιοχής LED της διάταξης LED εάν δεν είναι \"πολύχρωμη\"",
"edt_conf_color_leds_expl": "Αντιστοιχίστε αυτήν τη ρύθμιση σε όλα τα LED (*) ή μόνο σε μερικά (0-24).",
"edt_conf_color_leds_title": "Δείκτης LED",
"edt_conf_color_magenta_expl": "Η βαθμονομημένη τιμή ματζέντας.",
"edt_conf_color_magenta_title": "Ματζέντα",
"edt_conf_color_red_expl": "Η βαθμονομημένη τιμή κόκκινου.",
"edt_conf_color_red_title": "Κόκκινο",
"edt_conf_color_saturationGain_expl": "Ρυθμίζει τον κορεσμό των χρωμάτων. 1,0 σημαίνει καμία αλλαγή, πάνω από 1,0 αυξάνει τον κορεσμό, κάτω από 1,0 αποκορεσμένα.",
"edt_conf_color_white_expl": "Η βαθμονομημένη τιμή λευκού.",
"edt_conf_color_white_title": "Λευκό",
"edt_conf_color_yellow_expl": "Η βαθμονομημένη τιμή κίτρινου.",
"edt_conf_color_yellow_title": "Κίτρινο",
"edt_conf_enum_BOTH": "Οριζόντια & Κάθετα",
"edt_conf_enum_HORIZONTAL": "Οριζόντια",
"edt_conf_enum_NO_CHANGE": "Αυτόματο",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Κάθετα",
"edt_conf_enum_automatic": "Αυτόματο",
"edt_conf_enum_bbclassic": "Κλασσικό",
"edt_conf_enum_bbletterbox": "Γραμματοκιβώτιο",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_color": "Χρώμα",
"edt_conf_enum_decay": "Αποσύνθεση",
"edt_conf_enum_dl_error": "Σφάλμα",
"edt_conf_enum_dl_verbose1": "Επίπεδο πολυγλωσσίας 1",
"edt_conf_enum_dl_verbose2": "Επίπεδο πολυγλωσσίας 2",
"edt_conf_enum_dl_verbose3": "Επίπεδο πολυγλωσσίας 3",
"edt_conf_enum_effect": "Εφέ",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_linear": "Γραμμικό",
"edt_conf_enum_logsilent": "Αθόρυβο",
"edt_conf_enum_logwarn": "Προειδοποίση",
"edt_conf_enum_multicolor_mean": "Πολύχρωμο",
"edt_conf_enum_please_select": "Παρακαλώ Επιλέξτε",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
"edt_conf_enum_transeffect_smooth": "Λείο",
"edt_conf_enum_transeffect_sudden": "Απότομο",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Μονοχρωματικό",
"edt_conf_fg_display_title": "Απεικόνηση",
"edt_conf_fg_heading_title": "Καταγραφή Οθόνης",
"edt_conf_fg_height_expl": "Συρρικνώστε την εικόνα σε αυτό το ύψος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
"edt_conf_fg_height_title": "Ύψος",
"edt_conf_fg_type_title": "Είδος",
"edt_conf_fg_width_expl": "Συρρικνώστε την εικόνα σε αυτό το πλάτος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
"edt_conf_fg_width_title": "Πλάτος",
"edt_conf_fge_color_expl": "Εάν ο τύπος είναι \"Χρώμα\", ορίστε ένα χρώμα της επιλογής σας εδώ.",
"edt_conf_fge_color_title": "Χρώμα",
"edt_conf_fge_duration_ms_title": "Διάρκεια.",
"edt_conf_fge_effect_expl": "Εάν ο τύπος είναι \"Εφέ\", ορίστε ένα εφέ της επιλογής σας εδώ.",
"edt_conf_fge_effect_title": "Εφέ",
"edt_conf_fge_type_expl": "Επιλέξτε ανάμεσα σε χρώμα ή εφέ.",
"edt_conf_fge_type_title": "Είδος",
"edt_conf_fw_remote_service_discovered_none": "Δεν ανακαλύφθηκαν απομακρυσμένες υπηρεσίες",
"edt_conf_fw_service_name_expl": "Όνομα του παρόχου υπηρεσιών",
"edt_conf_fw_service_name_title": "Όνομα υπηρεσίας",
"edt_conf_gen_configVersion_title": "Έκδοση διαμόρφωσης",
"edt_conf_gen_heading_title": "Γενικές Ρυθμίσεις",
"edt_conf_gen_name_expl": "Ένα όνομα καθορισμένο από το χρήστη που χρησιμοποιείται για τον εντοπισμό του Hyperion. (Χρήσιμο με περισσότερες από μία περιπτώσεις Hyperion)",
"edt_conf_gen_name_title": "Όνομα διαμόρφωσης",
"edt_conf_gen_showOptHelp_expl": "Εμφάνιση όλων των διαθέσιμων επεξηγήσεων σε κάθε ενότητα. Συνιστάται ανεπιφύλακτα για αρχάριους!",
"edt_conf_gen_showOptHelp_title": "Δείξε παραδείγματα",
"edt_conf_general_port_expl": "Η θύρα που χρησιμοποιείται.",
"edt_conf_general_port_title": "Θύρα",
"edt_conf_net_apiAuth_expl": "Επιβολή όλων των εφαρμογών που χρησιμοποιούν το Hyperion API για έλεγχο ταυτότητας έναντι του Hyperion (Εξαίρεση: βλ. \"Τοπικός έλεγχος ταυτότητας API\"). Υψηλότερη ασφάλεια, καθώς ελέγχετε την πρόσβαση και την ανακαλείτε ανά πάσα στιγμή.",
"edt_conf_net_apiAuth_title": "Αυθεντικοποίηση ΑΡΙ",
"edt_conf_net_heading_title": "Δίκτυο",
"edt_conf_net_ip_itemtitle": "ΙΡ",
"edt_conf_smooth_decay_expl": "Η ταχύτητα της αποσύνθεσης. Το 1 είναι γραμμικό, οι μεγαλύτερες τιμές έχουν ισχυρότερο αποτέλεσμα.",
"edt_conf_smooth_decay_title": "Αποσύνθεση-Δύναμη",
"edt_conf_smooth_dithering_title": "Χρωματική αντιπαράθεση",
"edt_conf_smooth_heading_title": "Λείανση",
"edt_conf_smooth_interpolationRate_expl": "Ταχύτητα υπολογισμού λείων ενδιάμεσων πλαισίων.",
"edt_conf_smooth_interpolationRate_title": "Ρυθμός Παρεμβολής",
"edt_conf_smooth_outputRate_expl": "Η ταχύτητα εξόδου του χειριστή LED σας.",
"edt_conf_smooth_outputRate_title": "Ρυθμός Εξόδου",
"edt_conf_smooth_time_ms_title": "Χρόνος",
"edt_conf_smooth_type_expl": "Είδος λείανσης.",
"edt_conf_smooth_type_title": "Είδος",
"edt_conf_smooth_updateFrequency_title": "Ρυθμός ανανέωσης",
"edt_conf_v4l2_cecDetection_expl": "Εάν είναι ενεργοποιημένο, η λήψη USB θα απενεργοποιηθεί προσωρινά όταν ληφθεί συμβάν αναμονής CEC από το δίαυλο HDMI.",
"edt_conf_v4l2_cecDetection_title": "Ανίχνευση CEC",
"edt_conf_v4l2_cropBottom_title": "Περικοπή κάτω",
"edt_conf_v4l2_cropHeightValidation_error": "Περικοπή πάνω + Περικοπή κάτω δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
"edt_conf_v4l2_cropLeft_title": "Περικοπή αριστερά",
"edt_conf_v4l2_cropRight_title": "Περικοπή δεξιά",
"edt_conf_v4l2_cropTop_title": "Περικοπή πάνω",
"edt_conf_v4l2_cropWidthValidation_error": "Περικοπή αριστερά + Περικοπή δεξιά δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
"edt_conf_v4l2_device_title": "Συσκευή",
"edt_conf_v4l2_flip_expl": "Αυτό σας επιτρέπει να αναστρέψετε την εικόνα οριζόντια, κάθετα ή και τα δύο.",
"edt_conf_v4l2_flip_title": "Αναστροφή εικόνας",
"edt_conf_v4l2_framerate_title": "Καρέ ανά δευτερόλεπτο",
"edt_conf_v4l2_resolution_title": "Ανάλυση Συσκευής",
"edt_conf_webc_keyPassPhrase_expl": "Προαιρετικό: Το κλειδί μπορεί να προστατεύεται με κωδικό πρόσβασης",
"edt_conf_webc_keyPassPhrase_title": "Κωδικός πρόσβασης",
"edt_conf_webc_sslport_title": "Θύρα HTTPS",
"edt_dev_enum_sub_min_cool_adjust": "Αφαίρεσε ψυχρό λευκό",
"edt_dev_enum_sub_min_warm_adjust": "Αφαίρεσε θερμό λευκό",
"edt_dev_enum_subtract_minimum": "Αφαίρεση ελάχιστου",
"edt_dev_enum_white_off": "Απενεργοποίηση Λευκού",
"edt_dev_general_autostart_title": "Αυτόματη Εκκίνηση",
"edt_dev_general_enableAttemptsInterval_title": "Διάστημα Επανάληψης",
"edt_dev_general_enableAttempts_title": "Προσπάθεια Σύνδεσης",
"edt_dev_general_enableAttempts_title_info": "Αριθμός προσπαθειών σύνδεσης μιας συσκευής προτού μεταβεί σε κατάσταση σφάλματος.",
"edt_dev_general_heading_title": "Γενικές Ρυθμίσεις",
"edt_dev_general_rewriteTime_title": "Χρόνος Ανανέωσης",
"edt_dev_spec_brightnessMax_title": "Μέγιστη Φωτεινότητα",
"edt_dev_spec_brightnessMin_title": "Ελάχιστη Φωτεινότητα",
"edt_dev_spec_brightness_title": "Φωτεινότητα",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_dmaNumber_title": "Κανάλι DMA",
"edt_dev_spec_gamma_title": "Gamma",
"edt_dev_spec_globalBrightnessControlMaxLevel_title": "Μέγιστο επίπεδο Έντασης",
"edt_dev_spec_gpioMap_title": "Χαρτογράφηση GPIO",
"edt_dev_spec_gpioNumber_title": "Αριθμός GPIO",
"edt_dev_spec_intervall_title": "Διάστημα",
"edt_dev_spec_ledIndex_title": "Δείκτης LED",
"edt_dev_spec_ledType_title": "Είδος LED",
"edt_dev_spec_lightid_itemtitle": "ID",
"edt_dev_spec_lights_itemtitle": "Φως",
"edt_dev_spec_lights_name": "Όνομα",
"edt_dev_spec_lights_title": "Φώτα",
"edt_dev_spec_maximumLedCount_title": "Μέγιστος αριθμός LED",
"edt_dev_spec_networkDevicePort_title": "Θύρα",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_title": "Θύρα",
"edt_dev_spec_razer_device_title": "Συσκευή RΛΖΞR Chroma",
"edt_dev_spec_serial_title": "Σειριακός Αριθμός",
"edt_dev_spec_spipath_title": "Συσκευή SPI",
"edt_dev_spec_targetIpHost_title": "Hostname/Διεύθυνση ΙΡ",
"edt_dev_spec_targetIp_title": "Διεύθυνση ΙΡ",
"edt_dev_spec_transistionTime_title": "Χρόνος Μετάβασης",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_useRgbwProtocol_title": "Χρησιμοπίησε πρωτόκολο RGBW",
"edt_dev_spec_username_title": "Όνομα Χρήστη",
"edt_dev_spec_vid_title": "VID",
"edt_eff_blobcount": "Αριθμός σταγώνων",
"edt_eff_candle_header": "Κερί",
"edt_eff_candle_header_desc": "Λαμπερά κεριά",
"edt_eff_centerx": "Κέντρο Χ-άξονα",
"edt_eff_centery": "Κέντρο Υ-άξονα",
"edt_eff_color": "Χρώμα",
"edt_eff_colorHour": "Χρώμα ώρας",
"edt_eff_colorMinute": "Χρώμα λεπτού",
"edt_eff_colorSecond": "Χρώμα δευτερολέπτου",
"edt_eff_colorcount": "Μήκος χρώματος",
"edt_eff_colorend": "Τέλους χρώματος",
"edt_eff_colorevel": "Επίπεδο χρώματος",
"edt_eff_colorone": "Χρώμα ένα",
"edt_eff_colorrandom": "Τυχαίο χρώμα",
"edt_eff_colorshift": "Μετάβαση Χρώματος",
"edt_eff_colorstart": "Αρχή χρώματος",
"edt_eff_colortwo": "Χρώμα δύο",
"edt_eff_count": "Αριθμός",
"edt_eff_countries": "Χώρες",
"edt_eff_enableSecondSwirl": "Δεύτερος Στροβιλισμός",
"edt_eff_enum_all": "Όλα",
"edt_eff_enum_all-together": "Όλα μαζί",
"edt_eff_enum_list": "Λίστα LED",
"edt_eff_fade_header": "Σβήσιμο",
"edt_eff_fade_header_desc": "Σβήσιμο ανάμεσα σε χρώματα",
"edt_eff_flag_header": "Σημαίες",
"edt_eff_flag_header_desc": "Αφήστε τα LED σας να λάμπουν στα χρώματα της χώρας σας. Μπορείτε να επιλέξετε περισσότερες από μία σημαίες και θα αλλάξουν με βάση το χρονικό διάστημα.",
"edt_eff_fps": "Καρέ ανά δευτερόλεπτο",
"edt_eff_frequency": "Συχνότητα",
"edt_eff_gif_header": "GIF's",
"edt_eff_gif_header_desc": "Αυτό το εφέ αναπαράγει αρχεία .gif, παρέχει ένα απλό βίντεο όπως βρόχο ως εφέ.",
"edt_eff_height": "Ύψος",
"edt_eff_huechange": "Αλλαγή χρώματος",
"edt_eff_image_source_url": "URL",
"edt_eff_knightrider_header": "Knight Rider",
"edt_eff_knightrider_header_desc": "O K.I.T.T επέστρεψε! Ο μπροστινός σαρωτής του γνωστού αυτοκινήτου, αυτή τη φορά όχι μόνο στο κόκκινο.",
"edt_eff_ledlist": "Λίστα LED",
"edt_eff_ledtest_header": "Δοκιμή LED",
"edt_eff_length": "Μήκος",
"edt_eff_lightclock_header_desc": "Ένα πραγματικό ρολόι σαν φως! Προσαρμόστε τα χρώματα των ωρών, λεπτών, και δευτερολέπτων. Διατίθεται επίσης προαιρετικός δείκτης ώρας 3/6/9/12. Σε περίπτωση που το ρολόι είναι λάθος, πρέπει να ελέγξετε το ρολόι του συστήματός σας.",
"edt_eff_max_len": "Μέγιστο μήκος",
"edt_eff_min_len": "Ελάχιστο μήκος",
"edt_eff_moodblobs_header_desc": "Χαλαρώστε το βράδυ με αργή κίνηση και σταγόνες που αλλάζουν χρώμα.",
"edt_eff_pacman_header": "Πακ-Μαν",
"edt_eff_pacman_header_desc": "Μικρό, πεινασμένο και κίτρινο. Ποιος θα επιβιώσει;",
"edt_eff_plasma_header": "Πλάσμα",
"edt_eff_police_header": "Αστυνομία",
"edt_eff_police_header_desc": "Φώτα σαν αστινομικό όχημα σε δράση",
"edt_eff_randomCenter": "Τυχαίο Κέντρο",
"edt_eff_random_header": "Τυχαίο",
"edt_eff_repeat": "Επανάληψη",
"edt_eff_reverseRandomTime": "Ανέστρεψε κάθε",
"edt_eff_reversedirection": "Ανάστροφη κίνηση",
"edt_eff_rotationtime": "Χρόνος περιστροφής",
"edt_eff_showseconds": "Δείξε δευτερόλεπτα",
"edt_eff_snake_header": "Φιδάκι",
"edt_eff_snake_header_desc": "Που υπάρχει κάτι να φάω;",
"edt_eff_sparks_header": "Σπίθες",
"edt_eff_sparks_header_desc": "Αστερική-σπίθα, επιλέξτε ανάμεσα σε ένα στατικό χρώμα ή ένα τυχαίο. Θα μπορούσατε επίσης να ρυθμίσετε τη φωτεινότητα, τον κορεσμό και την ταχύτητα.",
"edt_eff_speed": "Ταχύτητα",
"edt_eff_swirl_header": "στροβιλισμός χρωμάτων",
"edt_eff_swirl_header_desc": "Ένας στροβιλισμός με προσαρμοσμένα χρώματα. Τα χρώματα απλώνονται ακόμη και στις 360°, θα υπολογίζονται οι μετατοπίσεις μεταξύ των χρωμάτων. Επιπλέον, μπορείτε να προσθέσετε ένα δεύτερο στροβιλισμό από πάνω, να γνωρίζετε ότι χρειάζεστε μερική διαφάνεια! Συμβουλή: Η επανάληψη του ίδιου χρώματος έχει ως αποτέλεσμα μια \"υψηλότερη\" περιοχή χρώματος και μια μειωμένη περιοχή μετατόπισης χρώματος.",
"edt_eff_trails_header": "Πεφταστέρι",
"edt_eff_trails_header_desc": "Χρωματιστά αστέρια που πέφτουν από τη κορυφή",
"edt_eff_waves_header": "Κύματα",
"edt_eff_whichleds": "Ποια LEDs",
"edt_eff_whitelevel": "Επίπεδο λευκού",
"edt_eff_x-mas_header": "Χριστούγεννα",
"edt_eff_x-mas_header_desc": "Άγγιγμα Χριστουγέννων",
"edt_msg_button_add_row_title": "Προσθήκη $1",
"edt_msg_button_collapse": "Σύμπτηξη",
"edt_msg_button_delete_all": "Όλα",
"edt_msg_button_delete_all_title": "Διαγραφή Όλων",
"edt_msg_button_delete_last": "Τουλάχιστον $1",
"edt_msg_button_delete_last_title": "Διαγραφή Τελευταίων $1",
"edt_msg_button_delete_row_title": "Διαγραφή $1",
"edt_msg_button_delete_row_title_short": "Διαγραφή",
"edt_msg_button_expand": "Ανέπτυξε",
"edt_msg_button_move_down_title": "Μετακίνησε κάτω",
"edt_msg_button_move_up_title": "Μετακίνησε πάνω",
"edt_msg_error_additionalItems": "Δεν επιτρέπονται επιπλέον στοιχεία σε αυτόν τον πίνακα",
"edt_msg_error_additional_properties": "Δεν επιτρέπονται πρόσθετες ιδιότητες, αλλά η ιδιότητα $1 έχει οριστεί",
"edt_msg_error_dependency": "Πρέπει να έχει την ιδιότητα $1",
"edt_msg_error_disallow": "Η τιμή δεν πρέπει να είναι τύπου $1",
"edt_msg_error_disallow_union": "Η τιμή δεν πρέπει να είναι ένας από τους παρεχόμενους μη επιτρεπόμενους τύπους",
"edt_msg_error_maxItems": "Η τιμή πρέπει να έχει το πολύ $1 αντικείμενα",
"edt_msg_error_maxLength": "Η τιμή πρέπει να έχει το πολύ $1 μήκος χαρακτήρων",
"edt_msg_error_maxProperties": "Το αντικείμενο πρέπει να έχει το πολύ $1 ιδιότητες",
"edt_msg_error_maximum_excl": "Η τιμή πρέπει να είναι λιγότερο του $1",
"edt_msg_error_maximum_incl": "Η τιμή πρέπει να είναι το πολύ $1",
"edt_msg_error_minItems": "Η τιμή πρέπει να έχει τουλάχιστον $1 αντικείμενα",
"edt_msg_error_minLength": "Η τιμή πρέπει να έχει τουλάχιστον $1 μήκος χαρακτήρων",
"edt_msg_error_minProperties": "Το αντικείμενο πρέπει να έχει τουλάχιστον $1 ιδιότητες",
"edt_msg_error_minimum_excl": "Η τιμή πρέπει να είναι μεγαλύτερη του $1",
"edt_msg_error_minimum_incl": "Η τιμή πρέπει να είναι τουλάχιστον $1",
"edt_msg_error_multipleOf": "Η τιμή πρέπει να είναι πολλαπλάσιο του $1",
"edt_msg_error_pattern": "Η τιμή πρέπει να μοιάζει με το μοτίβο",
"edt_msg_error_required": "Από το αντικείμενο λείπει η απαιτούμενη ιδιότητα '$1'",
"edt_msg_error_type": "Η τιμή πρέπει να είναι τύπου $1",
"edt_msg_error_uniqueItems": "Ο πίνακας πρέπει να έχει μοναδικά στοιχεία",
"effectsconfigurator_button_conttest": "Συνεχές τεστ",
"effectsconfigurator_button_deleffect": "Διαγραφή Εφέ",
"effectsconfigurator_button_editeffect": "Φόρτωση Εφέ",
"effectsconfigurator_button_saveeffect": "Αποθήκευση Εφέ",
"effectsconfigurator_button_starttest": "Εκκίνηση τεστ",
"effectsconfigurator_button_stoptest": "Τερματισμός τεστ",
"effectsconfigurator_label_chooseeff": "Επιλέξτε Πρότυπο",
"effectsconfigurator_label_effectname": "Όνομα Εφέ",
"effectsconfigurator_label_intro": "Δημιουργήστε από τα βασικά εφέ νέα εφέ που είναι συντονισμένα σύμφωνα με τις προτιμήσεις σας. Ανάλογα με το Εφέ, υπάρχουν διαθέσιμες επιλογές όπως χρώμα, ταχύτητα, κατεύθυνση και άλλα.",
"general_access_advanced": "Προχωρημένο",
"general_access_default": "Προεπιλεγμένο",
"general_access_expert": "Ειδικό",
"general_btn_back": "Πίσω",
"general_btn_cancel": "Ακύρωση",
"general_btn_continue": "Συνέχεια",
"general_btn_delete": "Διαγραφή",
"general_btn_denyAccess": "Απόρριψη πρόσβασης",
"general_btn_grantAccess": "Παραχώρηση πρόσβασης",
"general_btn_iswitch": "Διακόπτης",
"general_btn_next": "Επόμενο",
"general_btn_off": "Απενεργοποίηση",
"general_btn_ok": "ΟΚ",
"general_btn_on": "Εκκίνηση",
"general_btn_overwrite": "Αντικατάσταση",
"general_btn_rename": "Μεταονόμασε",
"general_btn_restarthyperion": "Επανεκκίνηση Hyperion",
"general_btn_save": "Αποθήκευση",
"general_btn_saveandreload": "Αποθήκευση και επαναφόρτωση",
"general_btn_saverestart": "Αποθήκευση και επανεκκίνηση",
"general_btn_start": "Εκκίνηση",
"general_btn_stop": "Τερματισμός",
"general_btn_yes": "Ναι",
"general_button_savesettings": "Αποθήκευση ρυθμίσεων",
"general_chars_needed": "χρειάζονται περισσότεροι χαρακτήρες",
"general_col_blue": "Μπλε",
"general_col_green": "Πράσινο",
"general_col_red": "Κόκκινο",
"general_comp_BLACKBORDER": "Ανίχνευση μαύρης μπάρας",
"general_comp_GRABBER": "Λήψη Οθόνης",
"general_comp_LEDDEVICE": "Έξοδος LED",
"general_comp_SMOOTHING": "Εξομάλυνση",
"general_comp_V4L": "Λήψη εισόδου-USB",
"general_country_cn": "Κίνα",
"general_country_de": "Γερμανία",
"general_country_es": "Ισπανία",
"general_country_fr": "Γαλλία",
"general_country_it": "Ιταλία",
"general_country_nl": "Ολλανδία",
"general_country_ru": "Ρωσία",
"general_country_uk": "Ηνωμένο Βασίλειο",
"general_country_us": "ΗΠΑ",
"general_disabled": "Απενεργοποιημένο",
"general_enabled": "Ενεργοποιημένο",
"general_speech_cs": "Τσέχικα",
"general_speech_da": "Δανέζικα",
"general_speech_de": "Γερμανικά",
"general_speech_en": "Αγγλικά",
"general_speech_es": "Ισπανικά",
"general_speech_fr": "Γαλλικά",
"general_speech_hu": "Ουγγαρικά",
"general_speech_it": "Ιταλικά",
"general_speech_ja": "Ιαπωνικά",
"general_speech_nb": "Νορβηγικά (Bokmål)",
"general_speech_nl": "Ολλανδικά",
"general_speech_pl": "Πολωνικά",
"general_speech_pt": "Πορτογαλικά",
"general_speech_ro": "Ρουμάνικα",
"general_speech_ru": "Ρωσικά",
"general_speech_sv": "Σουηδικά",
"general_speech_tr": "Τούρκικα",
"general_speech_vi": "Βιετναμέζικα",
"general_speech_zh-CN": "Κινέζικα (απλοποιημένα)",
"general_webui_title": "Hyperion - Διαμόρφωση Ιστού",
"general_wiki_moreto": "Περισσότερες πληροφορίες για \"$1\" στο Wiki μας",
"infoDialog_effconf_created_text": "Το εφέ \"$1\" κατασκευάστηκε επιτυχώς!",
"infoDialog_effconf_deleted_text": "Το εφέ \"$1\" διαγράφτηκε επιτυχώς!",
"infoDialog_general_error_title": "Σφάλμα",
"infoDialog_general_success_title": "Επιτυχία",
"infoDialog_general_warning_title": "Προειδοπίηση",
"infoDialog_import_comperror_text": "Λυπητερό! Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την εισαγωγή. Δοκιμάστε ξανά με άλλο πρόγραμμα περιήγησης.",
"infoDialog_import_confirm_text": "Είστε βέβαιοι ότι θα εισαγάγετε το \"$1\"; Δεν είναι δυνατή η επαναφορά αυτής της διαδικασίας!",
"infoDialog_import_hyperror_text": "Δεν είναι δυνατή η εισαγωγή του επιλεγμένου αρχείου διαμόρφωσης \"$1\". Δεν είναι συμβατό με Hyperion 2.0 και νεότερη έκδοση!",
"infoDialog_import_jsonerror_text": "Το επιλεγμένο αρχείο διαμόρφωσης \"$1\" δεν είναι αρχείο .json ή είναι κατεστραμμένο. Μήνυμα σφάλματος: ($2)",
"infoDialog_password_current_text": "Τωρινός κωδικός",
"infoDialog_password_new_text": "Νέος κωδικός",
"infoDialog_username_text": "Όνομα Χρήστη",
"infoDialog_writeconf_error_text": "Η αποθήκευση της διαμόρφωσής σας απέτυχε.",
"infoDialog_writeimage_error_text": "Το επιλεγμένο αρχείο \"$1\" δεν είναι αρχείο εικόνας ή είναι κατεστραμμένο! Επιλέξτε άλλο αρχείο εικόνας.",
"info_404": "Η σελίδα που ζητήσατε δεν είναι διαθέσιμη!",
"info_conlost_label_autorecon": "Θα επανασυνδεθείτε ξανά αφού το Hyperion είναι διαθέσιμο.",
"info_conlost_label_autorefresh": "Αυτή η σελίδα θα ανανεωθεί αυτόματα.",
"info_conlost_label_reason1": "- Κακή σύνδεση WLAN",
"info_conlost_label_reason2": "- Πραγματοποιήσατε αναβάθμιση",
"info_conlost_label_reason3": "- Το Hyperion δεν τρέχει",
"info_conlost_label_reload": "Η αυτόματη επανασύνδεση διακόπηκε - υπέρβαση του ορίου. Ανανεώστε τη σελίδα ή κάντε κλικ σε εμένα!",
"info_conlost_label_title": "Χάθηκε η σύνδεση με την υπηρεσία Hyperion!",
"info_restart_contus": "Εάν εξακολουθείτε να μένετε εδώ μετά από 20 δευτερόλεπτα και δεν έχετε ιδέα γιατί ανοίξτε ένα νέο θέμα στο φόρουμ υποστήριξής μας...",
"info_restart_contusa": "...με τα τελευταία σου βήματα. Ευχαριστώ!",
"info_restart_rightback": "Ο Hyperion θα επιστρέψει αμέσως!",
"info_restart_title": "Αυτήν τη στιγμή γίνεται επανεκκίνηση...",
"main_ledsim_btn_togglelednumber": "Αριθμός LED",
"main_ledsim_btn_toggleleds": "Δείξε LED",
"main_ledsim_btn_togglelivevideo": "Ζωντανό βίντεο",
"main_ledsim_text": "Ζωντανή απεικόνιση χρωμάτων LED και προαιρετική η τρέχουσα ροή βίντεο της συσκευής λήψης.",
"main_ledsim_title": "Οπτικοποίηση LED",
"main_menu_about_token": "Σχετικά με το Hyperion",
"main_menu_colors_conf_token": "Επεξεργασία εικόνας",
"main_menu_dashboard_token": "Πίνακας Ελέγχου",
"main_menu_effect_conf_token": "Εφέ",
"main_menu_general_conf_token": "Γενικά",
"main_menu_input_selection_token": "Επιλογή εισόδου",
"main_menu_instcapture_conf_token": "Πηγές",
"main_menu_leds_conf_token": "Έξοδος LED",
"main_menu_logging_token": "Καταγράψτε",
"main_menu_remotecontrol_token": "Ασύρματος χειρισμός",
"main_menu_support_token": "Υποστήριξη",
"main_menu_system_token": "Σύστημα",
"main_menu_update_token": "Αναβάθμιση",
"main_menu_webconfig_token": "Διαμόρφωση Ιστού",
"remote_adjustment_label": "Ρύθμιση χρώματος",
"remote_color_button_reset": "Επαναφορά Χρώματος/Εφέ",
"remote_color_intro": "Ορίστε ένα εφέ ή χρώμα. Επίσης παρατίθενται τα εφέ που δημιουργήσατε εσείς (εάν είναι διαθέσιμα). $1",
"remote_color_label": "Χρώματα/Εφέ",
"remote_color_label_color": "Χρώμα:",
"remote_components_intro": "Ενεργοποίηση και απενεργοποίηση στοιχείων του Hyperion κατά τη διάρκεια του χρόνου εκτέλεσης. $1",
"remote_effects_label_effects": "Εφέ:",
"remote_effects_label_picture": "Εικόνα:",
"remote_input_clearall": "Καθαρισμός όλων των Χρωμάτων/Εφέ",
"remote_input_duration": "Διάρκεια:",
"remote_input_intro": "Το Hyperion χρησιμοποιεί ένα σύστημα προτεραιότητας για να επιλέξει μια πηγή. Ό,τι ορίζετε έχει προτεραιότητα (Εφέ/Χρώμα/Λήψη οθόνης/Λήψη USB και πηγές δικτύου). Από προεπιλογή, το Hyperion επιλέγει πηγές ανάλογα με την προτεραιότητα (ο χαμηλότερος αριθμός αντικατοπτρίζει την τρέχουσα ενεργή πηγή). Τώρα έχετε την ευκαιρία να επιλέξετε μόνοι σας πηγές. $1",
"remote_input_ip": "ΙΡ:",
"remote_input_label_autoselect": "Αυτόματη Επιλογή",
"remote_input_origin": "Προέλευση",
"remote_input_owner": "Είδος",
"remote_input_priority": "Προτεραιότητα",
"remote_input_setsource_btn": "Επιλέξτε Πηγή",
"remote_input_sourceactiv_btn": "Πηγή ενεργή",
"remote_input_status": "Κατάσταση/Ενέργεια",
"remote_losthint": "Σημείωση: Όλες οι αλλαγές θα χαθούν μετά από επανεκκίνηση.",
"remote_maptype_intro": "Συνήθως η διάταξη LED καθορίζει ποια LED καλύπτει μια συγκεκριμένη περιοχή εικόνας. Μπορείτε να το αλλάξετε εδώ: $1.",
"remote_maptype_label": "Είδος Χαρτογράφισης",
"remote_maptype_label_multicolor_mean": "Πολύχρωμο",
"remote_maptype_label_unicolor_mean": "Μονοχρωματικό",
"remote_optgroup_syseffets": "Ρυθμίσης Συστήματος",
"remote_optgroup_templates_custom": "Πρότυπα Χρήστη",
"remote_optgroup_templates_system": "Πρότυπα Συστήματος",
"remote_optgroup_usreffets": "Εφέ Χρήστη",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_label": "Λειτουργία βίντεο",
"support_label_affinstr1": "Κάντε κλικ στον κατάλληλο σύνδεσμο της χώρας σας",
"support_label_affinstr2": "Ό,τι αγοράζετε (δεν έχει σημασία τι) παίρνουμε μια μικρή χρέωση με βάση τον τζίρο σας",
"support_label_affinstr3": "Πληρώνετε ΠΑΝΤΑ το ίδιο, δεν υπάρχει καμία απολύτως διαφορά. Δοκίμασέ το!",
"support_label_btctext": "Διεύθυνση:",
"support_label_donate": "Δωρίστε ή χρησιμοποιήστε τους συνδέσμους συνεργατών μας",
"support_label_donationpp": "Δωρεά:",
"support_label_fbtext": "Μοιραστείτε τη σελίδα μας στο Hyperion στο Facebook και λάβετε ειδοποίηση όταν κυκλοφορούν νέες ενημερώσεις",
"support_label_forumtext": "Προθήκες, συζητήσεις, βοήθεια και πολλά άλλα",
"support_label_forumtitle": "Φόρουμ",
"support_label_ghtext": "Επισκευτείτε μας στο GitHub",
"support_label_igtext": "Επισκεφθείτε μας στο Instagram για να παρακολουθήσετε τις τελευταίες φωτογραφίες του Hyperion!",
"support_label_intro": "Το Hyperion είναι ένα δωρεάν, μη-κερδοσκοπικό λογισμικό. Μια μικρή ομάδα εργάζεται πάνω σε αυτό και γι' αυτό χρειαζόμαστε τη σταθερή υποστήριξή σας.",
"support_label_spreadtheword": "Διέδωσέ το",
"support_label_title": "Υποστήριξη Hyperion",
"support_label_twtext": "Μοιραστείτε και ακολουθήστε μας στο Twitter, για να είστε πάντα ενημερωμένοι με την τελευταία ανάρτηση σχετικά με την ανάπτυξη του Hyperion",
"support_label_webpagetitle": "Ιστοσελίδα",
"support_label_webrestitle": "Πληροφορίες και βοηθιτικό υλικό",
"support_label_wikitext": "Το Α έως Ω για σχεδόν οτιδήποτε σχετίζεται με το Hyperion",
"support_label_yttext": "Βαρεθήκατε τις φωτογραφίες; Δείτε το κανάλι μας στο YouTube!",
"update_button_install": "Εγκατάσταση",
"update_error_getting_versions": "Παρουσιάστηκε πρόβλημα με τον προσδιορισμό της πιο πρόσφατης διαθέσιμης έκδοσης.",
"update_label_description": "Περιγραφή:",
"update_label_intro": "Επισκόπηση όλων των διαθέσιμων εκδόσεων Hyperion. Επιπλέον, θα μπορούσατε να ενημερώσετε ή να υποβαθμίσετε την έκδοση του Hyperion όποτε θέλετε. Ταξινόμηση από το νεότερο στο παλαιότερο",
"update_label_type": "Τύπος:",
"update_versreminder": "Η έκδοση σας: $1",
"wiz_cc_adjustgamma": "Gamma: Αυτό που πρέπει να κάνετε είναι να προσαρμόσετε τα επίπεδα γάμμα κάθε καναλιού μέχρι να έχετε την ίδια αντιληπτή ποσότητα για κάθε κανάλι. Υπόδειξη: Το ουδέτερο είναι 1,0! Για παράδειγμα, εάν το Γκρι σας είναι λίγο κοκκινωπό, σημαίνει ότι πρέπει να αυξήσετε το κόκκινο γάμμα για να μειώσετε την ποσότητα του κόκκινου (όσο περισσότερο γάμμα, τόσο μικρότερη ποσότητα χρώματος).",
"wiz_cc_adjustit": "Προσαρμόστε το \"$1\" σας, μέχρι να τα καταφέρετε. Λάβετε υπόψη: Όσο περισσότερο προσαρμόζετε μακριά από την προεπιλεγμένη τιμή, το φάσμα χρωμάτων θα είναι περιορισμένο (Επίσης για όλα τα ενδιάμεσα χρώματα). Ανάλογα με το χρωματικό φάσμα της τηλεόρασης/LED, τα αποτελέσματα θα διαφέρουν.",
"wiz_cc_backlight": "Επιπλέον, θα μπορούσατε να ορίσετε έναν οπίσθιο φωτισμό για να ταξινομήσετε τα \"κακά χρώματα\" σε σχεδόν σκοτεινές περιοχές ή εάν δεν σας αρέσει η εναλλαγή μεταξύ χρώματος και απενεργοποίησης κατά την παρακολούθηση. Επιπλέον, θα μπορούσατε να ορίσετε εάν πρέπει να υπάρχει κάποιο χρώμα σε αυτό ή απλώς λευκό. Αυτό είναι απενεργοποιημένο κατά την κατάσταση \"Απενεργοποίηση\" \"Χρώμα\" και \"Εφέ\".",
"wiz_cc_btn_stop": "Σταματήστε το βίντεο",
"wiz_cc_btn_switchpic": "Αλλαγή εικόνας",
"wiz_cc_chooseid": "Ορίστε ένα όνομα για αυτό το προφίλ χρώματος.",
"wiz_cc_kodidiscon": "Το Kodi δεν βρέθηκε, προχωρήστε χωρίς υποστήριξη Kodi (ελέγξτε εάν είναι ενεργοποιημένος ο τηλεχειρισμός από άλλα συστήματα).",
"wiz_cc_kodimsg_start": "Επιτυχία δοκιμής - ώρα να προχωρήσετε!",
"wiz_cc_kodishould": "Το Kodi θα πρέπει να δείχνει την ακόλουθη εικόνα: $1",
"wiz_cc_kwebs": "Kodi webserver (Hostname ή IP)\n",
"wiz_cc_lettvshow": "Αφήστε την τηλεόρασή σας να εμφανίσει την ακόλουθη εικόνα: $1",
"wiz_cc_lettvshowm": "Ελέγξτε αυτό με τις παρακάτω εικόνες: $1",
"wiz_cc_link": "Πάτα με!",
"wiz_cc_morethanone": "Έχετε περισσότερα από ένα προφίλ, επιλέξτε το προφίλ που θέλετε να βαθμονομήσετε.",
"wiz_cc_summary": "Συμπέρασμα των ρυθμίσεών σας. Κατά τη διάρκεια της αναπαραγωγής βίντεο, μπορείτε να αλλάξετε ή να δοκιμάσετε ξανά τις τιμές. Εάν τελειώσετε, κάντε κλικ στην αποθήκευση.",
"wiz_cc_testintro": "Ώρα για ένα πραγματικό τεστ",
"wiz_cc_testintrok": "Πατήστε ένα κουμπί παρακάτω για να ξεκινήσετε ένα δοκιμαστικό βίντεο.",
"wiz_cc_testintrowok": "Δείτε τον παρακάτω σύνδεσμο για να κατεβάσετε δοκιμαστικά βίντεο:",
"wiz_cc_try_connect": "Σύνδεση...",
"wiz_cololight_desc2": "Τώρα επιλέξτε ποια Cololights θα προστεθούν. Για να αναγνωρίσετε μεμονωμένα φώτα, πατήστε το κουμπί στα δεξιά.",
"wiz_cololight_noprops": "Δεν είναι δυνατή η λήψη των ιδιοτήτων της συσκευής - Ορίστε τον αριθμό των LED υλικού με μη αυτόματο τρόπο",
"wiz_guideyou": "Το $1 θα σας καθοδηγήσει στις ρυθμίσεις. Απλά πατήστε το κουμπί!",
"wiz_hue_create_user": "Δημιουργία νέου Χρήστη",
"wiz_hue_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη, εάν δεν έχετε, δημιουργήστε ένα νέο.",
"wiz_hue_desc2": "3. Τώρα επιλέξτε ποιοι λαμπτήρες πρέπει να προστεθούν. Η θέση αντιστοιχίζει τη λάμπα σε μια συγκεκριμένη θέση στην \"εικόνα\" σας. Δεν θα προστεθούν απενεργοποιημένες λάμπες. Για να αναγνωρίσετε μεμονωμένους λαμπτήρες πατήστε το κουμπί στα δεξιά.",
"wiz_hue_e_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη και το κλειδί πελάτη, εάν δεν έχετε και τα δύο, δημιουργήστε νέα.",
"wiz_hue_e_noapisupport": "Ο Wizard έχει απενεργοποιήσει την υποστήριξη API ψυχαγωγίας και θα συνεχίσει σε κλασική λειτουργία.",
"wiz_hue_e_title": "Wizard ψυχαγωγίας Philips Hue",
"wiz_hue_ip": "Hostname ή ΙΡ",
"wiz_hue_title": "Philips Hue Wizard",
"wiz_hue_username": "ID Χρήστη",
"wiz_identify": "Αναγνώρισε",
"wiz_identify_light": "Αναγνώρισε $1",
"wiz_ids_disabled": "Απενεργοποίηση",
"wiz_ids_entire": "Πλήρη εικόνα",
"wiz_noLights": "Δεν βρέθηκε το $1! Συνδέστε τα φώτα στο δίκτυο ή διαμορφώστε τα με μη αυτόματο τρόπο.",
"wiz_pos": "Θέση/Κατάσταση",
"wiz_rgb_expl": "Η χρωματική κουκκίδα αλλάζει κάθε x δευτερόλεπτα το χρώμα (κόκκινο, πράσινο), την ίδια στιγμή που τα LED σας αλλάζουν και το χρώμα. Απαντήστε στις ερωτήσεις στο κάτω μέρος για να ελέγξετε/διορθώσετε τη σειρά των byte.",
"wiz_rgb_q": "Ποιο χρώμα δείχνουν τα LED σας, όταν η έγχρωμη κουκκίδα παραπάνω δείχνει...",
"wiz_rgb_qgend": "...πράσινο;",
"wiz_rgb_qrend": "...κόκινο;",
"wiz_rgb_switchevery": "Αλάξτε χρώμα κάθε...",
"wiz_yeelight_unsupported": "Μη-υποστηριζόμενο"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,301 @@
{
"InfoDialog_access_title": "設定レベル",
"InfoDialog_nowrite_title": "書き込み権限エラー!",
"about_build": "ビルド",
"about_builddate": "ビルド日付",
"about_translations": "翻訳について",
"about_version": "バージョン",
"conf_general_impexp_expbtn": "出力",
"conf_general_impexp_impbtn": "入力",
"conf_general_impexp_l1": "下記の設定ファイルを選択し、「インポート」をクリックしてください",
"conf_general_impexp_l2": "設定をエクスポートするには「エクスポート」をクリックしてください。",
"conf_general_impexp_title": "設定ファイルをインポート・エクスポートする",
"conf_general_label_title": "一般設定",
"conf_helptable_expl": "説明",
"conf_helptable_option": "オプション",
"conf_leds_contr_label_contrtype": "コントローラータイプ",
"conf_leds_layout_advanced": "詳細設定",
"conf_leds_layout_btn_checklist": "チェックリストを表示",
"conf_leds_layout_button_savelay": "レイアウト保存",
"conf_leds_layout_button_updsim": "プレビュー",
"conf_leds_layout_cl_bottom": "下",
"conf_leds_layout_cl_gappos": "ギャップの位置",
"conf_leds_layout_cl_inppos": "インプットの位置",
"conf_leds_layout_cl_left": "左",
"conf_leds_layout_cl_right": "右",
"conf_leds_layout_cl_top": "上",
"conf_leds_layout_frame": "クラッシックレイアウト",
"conf_leds_layout_ma_cabling": "配線",
"conf_leds_layout_ma_horiz": "水平",
"conf_leds_layout_ma_optbottomleft": "左下",
"conf_leds_layout_ma_optbottomright": "右下",
"conf_leds_layout_ma_opthoriz": "水平",
"conf_leds_layout_ma_optparallel": "パラレル",
"conf_leds_layout_ma_optsnake": "スネーク",
"conf_leds_layout_ma_opttopleft": "左上",
"conf_leds_layout_ma_opttopright": "右上",
"conf_leds_layout_ma_optvert": "垂直",
"conf_leds_layout_ma_order": "並び順",
"conf_leds_layout_ma_position": "インプット",
"conf_leds_layout_ma_vert": "垂直",
"conf_leds_layout_matrix": "マトリックスレイアウト",
"conf_leds_layout_peview": "LEDレイアウトのプレビュー",
"conf_leds_layout_preview_l1": "一番目のLEDの位置",
"conf_leds_layout_preview_l2": "データの向きを示す",
"conf_leds_layout_preview_ledpower": "最大パワー消費電力率:",
"conf_leds_layout_preview_originCL": "クラッシックレイアウトから作成",
"conf_leds_layout_preview_originMA": "マトリックスレイアウトから作成",
"conf_leds_layout_preview_originTEXT": "テキストから作成",
"conf_leds_layout_preview_totalleds": "LED数",
"conf_leds_nav_label_ledcontroller": "LEDコントローラー",
"conf_leds_nav_label_ledlayout": "LEDレイアウト",
"conf_leds_optgroup_network": "ネットワーク",
"conf_leds_optgroup_usb": "USBシリアル",
"conf_logging_btn_autoscroll": "オートスクロール",
"conf_logging_report": "レポートと連携する",
"conf_logging_uplpolicy": "ボタンをクリックして同意する",
"dashboard_alert_message_confedit": "設定変更しました。適用するには、ハイペリオンを再起動してください。",
"dashboard_alert_message_confedit_t": "設定変更しました",
"dashboard_alert_message_confsave_success": "設定を保存し、有効化にしました。",
"dashboard_alert_message_confsave_success_t": "設定を保存しました",
"dashboard_alert_message_disabled": "インスタンスが無効になっています。使用するにはダッシュボードにて有効にしてください。",
"dashboard_alert_message_disabled_t": "LEDハードウェアインスタンスを無効",
"dashboard_componentbox_label_comp": "コンポネント",
"dashboard_componentbox_label_status": "ステータス",
"dashboard_componentbox_label_title": "コンポネント・ステータス",
"dashboard_infobox_label_currenthyp": "バージョン",
"dashboard_infobox_label_disableh": "インスタンスを無効にする",
"dashboard_infobox_label_enableh": "インスタンスを有効にする",
"dashboard_infobox_label_instance": "インスタンス",
"dashboard_infobox_label_latesthyp": "最新バージョン",
"dashboard_infobox_label_platform": "プラットフォーム",
"dashboard_infobox_label_ports": "ポート",
"dashboard_infobox_label_smartacc": "スマートアクセス",
"dashboard_infobox_label_statush": "ステータス",
"dashboard_infobox_label_title": "システム情報",
"dashboard_infobox_message_updatesuccess": "最新版を使用しています",
"dashboard_infobox_message_updatewarning": "最新版のアップデートあります!",
"dashboard_label_intro": "ハイペリオンのステータスを確認できる画面です",
"dashboard_newsbox_label_title": "ブログ",
"dashboard_newsbox_noconn": "ハイペリオンサーバーに接続して最新情報を見れない場合は、インターネット接続を確認してください。",
"dashboard_newsbox_readmore": "詳細を読む",
"dashboard_newsbox_visitblog": "ハイペリオンのブログを見る",
"edt_conf_bb_mode_title": "モード",
"edt_conf_color_black_title": "ブラック",
"edt_conf_color_blue_title": "青",
"edt_conf_color_brightness_title": "明るさ",
"edt_conf_color_channelAdjustment_header_itemtitle": "プロファイル",
"edt_conf_color_channelAdjustment_header_title": "カラーチャネルの調整",
"edt_conf_color_cyan_title": "シアン",
"edt_conf_color_green_title": "緑",
"edt_conf_color_heading_title": "色の調整",
"edt_conf_color_id_title": "ID",
"edt_conf_color_leds_title": "LEDインデックス",
"edt_conf_color_magenta_title": "マジェスタ",
"edt_conf_color_red_title": "赤",
"edt_conf_color_white_title": "ホワイト",
"edt_conf_color_yellow_title": "黄",
"edt_conf_enum_NO_CHANGE": "自動",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_automatic": "自動",
"edt_conf_enum_bbclassic": "クラシック",
"edt_conf_enum_bbdefault": "デフォルト",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR 青・緑・赤",
"edt_conf_enum_brg": "BRG 青・赤・緑",
"edt_conf_enum_color": "色",
"edt_conf_enum_effect": "効果",
"edt_conf_enum_gbr": "GBR 緑・青・赤",
"edt_conf_enum_grb": "GRB 緑・赤・青",
"edt_conf_enum_logdebug": "デバッグ",
"edt_conf_enum_logwarn": "警告",
"edt_conf_enum_multicolor_mean": "マルチカラー",
"edt_conf_enum_rbg": "RBG 赤・青・緑",
"edt_conf_enum_rgb": "RGB 赤・緑・青",
"edt_conf_enum_unicolor_mean": "ユニカラー",
"edt_conf_fg_type_title": "タイプ",
"edt_conf_fge_type_title": "タイプ",
"edt_conf_gen_heading_title": "全般設定",
"edt_conf_gen_name_title": "設定の名前",
"edt_conf_gen_showOptHelp_title": "説明を表示する",
"edt_conf_general_enable_expl": "コンポネントを有効にする。",
"edt_conf_general_enable_title": "有効にする",
"edt_conf_general_port_expl": "使用ポート",
"edt_conf_general_port_title": "ポート",
"edt_conf_general_priority_expl": "このコンポネントの優先度",
"edt_conf_general_priority_title": "有線チャネル",
"edt_conf_smooth_heading_title": "スムージング",
"edt_conf_smooth_time_ms_title": "時刻",
"edt_conf_smooth_type_expl": "スムージングタイプ",
"edt_conf_smooth_type_title": "タイプ",
"edt_conf_v4l2_device_title": "デバイス",
"edt_conf_v4l2_heading_title": "USBキャプチャ",
"edt_conf_v4l2_standard_title": "ビデオスタンダード",
"edt_dev_auth_key_title": "認証トークン",
"edt_dev_enum_sub_min_cool_adjust": "クールホワイトを減らす",
"edt_dev_enum_sub_min_warm_adjust": "ワームホワイトを減らす",
"edt_dev_general_autostart_title": "オートスタート",
"edt_dev_general_colorOrder_title": "RGBの並び",
"edt_dev_general_hardwareLedCount_title": "ハードウェアLED数",
"edt_dev_general_heading_title": "一般設定",
"edt_dev_general_name_title": "設定の名前",
"edt_dev_spec_FCledToOn_title": "フェードキャンディーLEDを有効にする",
"edt_dev_spec_FCsetConfig_title": "フェードキャンディの設定",
"edt_dev_spec_baudrate_title": "ボーレート",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_colorComponent_title": "カラーコンポネント",
"edt_dev_spec_dmaNumber_title": "DMAチャネル",
"edt_dev_spec_gpioBcm_title": "GPIOピン",
"edt_dev_spec_gpioMap_title": "GPIOマッピング",
"edt_dev_spec_gpioNumber_title": "GPIO番号",
"edt_dev_spec_intervall_title": "インタバル",
"edt_dev_spec_ledIndex_title": "LEDインデックス",
"edt_dev_spec_ledType_title": "LEDタイプ",
"edt_dev_spec_lightid_itemtitle": "ID",
"edt_dev_spec_lightid_title": "ライトID",
"edt_dev_spec_maxPacket_title": "最大パケット",
"edt_dev_spec_maximumLedCount_title": "最大LED数",
"edt_dev_spec_numberOfLeds_title": "LED数",
"edt_dev_spec_outputPath_title": "出力パス",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_title": "ポート",
"edt_dev_spec_serial_title": "シリアル番号",
"edt_dev_spec_spipath_title": "SPIデバイス",
"edt_dev_spec_targetIpHost_title": "ホスト名IPアドレス",
"edt_dev_spec_targetIp_title": "IPアドレス",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "ユニバース",
"edt_dev_spec_useRgbwProtocol_title": "RGBWプロトコルを使用する",
"edt_dev_spec_username_title": "ユーザー名",
"edt_dev_spec_vid_title": "VID",
"edt_eff_image_source_url": "URL",
"effectsconfigurator_button_deleffect": "効果を削除する",
"effectsconfigurator_button_editeffect": "効果をロードする",
"effectsconfigurator_button_saveeffect": "効果を保存",
"effectsconfigurator_button_starttest": "テスト開始",
"effectsconfigurator_button_stoptest": "テスト中止",
"effectsconfigurator_editdeleff": "効果を削除/ロードする",
"effectsconfigurator_label_chooseeff": "テンプレートを選択する",
"effectsconfigurator_label_effectname": "効果名",
"general_access_advanced": "アドバンスト",
"general_access_default": "一般",
"general_access_expert": "エキスパート",
"general_btn_back": "戻る",
"general_btn_cancel": "キャンセル",
"general_btn_continue": "続行",
"general_btn_iswitch": "スイッチ",
"general_btn_next": "次へ",
"general_btn_off": "切",
"general_btn_ok": "OK",
"general_btn_on": "入",
"general_btn_restarthyperion": "ハイペリオンを再起動する",
"general_btn_save": "保存",
"general_btn_saveandreload": "保存してリフレッシュ",
"general_btn_yes": "はい",
"general_button_savesettings": "設定保存",
"general_col_blue": "青",
"general_col_green": "緑",
"general_col_red": "赤",
"general_comp_BLACKBORDER": "黒帯検出",
"general_comp_BOBLIGHTSERVER": "ボブライト・サーバー",
"general_comp_FLATBUFSERVER": "フラットバッファ・サーバー",
"general_comp_FORWARDER": "フォワーダー",
"general_comp_GRABBER": "画面キャプチャ",
"general_comp_LEDDEVICE": "LED出力",
"general_comp_PROTOSERVER": "プロトコルバッファ・サーバー",
"general_comp_SMOOTHING": "スムージング",
"general_comp_V4L": "キャプチャ - USB入力",
"general_country_de": "ドイツ",
"general_country_es": "スペイン",
"general_country_fr": "仏国",
"general_country_it": "イタリア",
"general_country_nl": "オランダ",
"general_country_uk": "英国",
"general_country_us": "米国",
"general_speech_cs": "チェコ語",
"general_speech_de": "ドイツ語",
"general_speech_en": "英語",
"general_speech_es": "スペイン語",
"general_speech_it": "イタリア語",
"general_webui_title": "ハイペリオン - ウェブ設定",
"infoDialog_checklist_title": "チェックリスト!",
"infoDialog_effconf_created_text": "\"$1\"は正しく作成されました!",
"infoDialog_effconf_deleted_text": "\"$1\"は正しく削除されました!",
"infoDialog_general_error_title": "エラー",
"infoDialog_general_success_title": "大成功!",
"infoDialog_general_warning_title": "警告",
"infoDialog_import_comperror_text": "残念!このブラウザーはインポートを対応していません。別なブラウザーで試してください。",
"infoDialog_import_confirm_title": "インポートの確認",
"infoDialog_wizrgb_text": "RGBの並び順を修正しました。",
"info_conlost_label_autorefresh": "このページは自動的に更新します。",
"info_conlost_label_reason": "原因:",
"info_conlost_label_reason1": "-  インターネットにせt属されていない",
"info_conlost_label_reason2": "‐ ハイペリオンがアップデート中",
"info_conlost_label_reason3": "- ハイペリオンが起動されていない",
"info_restart_title": "再起動中…",
"main_ledsim_btn_togglelednumber": "LED番号を表示する",
"main_ledsim_btn_toggleleds": "LEDを表示する",
"main_ledsim_btn_togglelivevideo": "LEDビデオ",
"main_ledsim_title": "LEDの視覚化",
"main_menu_about_token": "ハイペリオンについて",
"main_menu_colors_conf_token": "イメージ・プロセシング",
"main_menu_configuration_token": "LEDのインスタンス",
"main_menu_dashboard_token": "ダッシュボード",
"main_menu_effect_conf_token": "効果",
"main_menu_effectsconfigurator_token": "効果設定",
"main_menu_general_conf_token": "一般",
"main_menu_grabber_conf_token": "キャプチャ・ハードウェア",
"main_menu_input_selection_token": "入力選択",
"main_menu_leds_conf_token": "LED出力",
"main_menu_logging_token": "ログ",
"main_menu_network_conf_token": "ネットワーク設定",
"main_menu_remotecontrol_token": "リモート・コントロール設定",
"main_menu_support_token": "サポート",
"main_menu_system_token": "システム",
"main_menu_update_token": "アップデート",
"main_menu_webconfig_token": "ウェブ設定",
"remote_adjustment_label": "色の調整",
"remote_color_button_reset": "色/効果をリセット",
"remote_color_label": "色/効果",
"remote_color_label_color": "色:",
"remote_effects_label_effects": "効果:",
"remote_input_clearall": "全ての効果/色をクリアする",
"remote_input_ip": "IP",
"remote_input_label": "ソース選択",
"remote_input_label_autoselect": "自動選択",
"remote_input_owner": "タイプ",
"remote_input_priority": "優先度",
"remote_input_setsource_btn": "ソース選択",
"remote_maptype_label_multicolor_mean": "マルチカラー",
"remote_maptype_label_unicolor_mean": "ユニカラー",
"remote_optgroup_syseffets": "システム設定",
"remote_optgroup_usreffets": "ユーザー設定",
"remote_videoMode_label": "ビデオモード",
"support_label_forumtitle": "フォーラム",
"support_label_ghtext": "GitHubへ",
"support_label_title": "ハイペリオンをサポートする",
"support_label_wikititle": "ドキュメンテーション",
"update_button_changelog": "変更ログ",
"update_button_install": "インストール",
"update_error_getting_versions": "最新バージョンをとけていできません",
"update_label_description": "説明",
"update_label_type": "タイプ:",
"update_versreminder": "使用中のバージョン:",
"wiz_cc_btn_stop": "ビデオを停止する",
"wiz_cc_btn_switchpic": "画像の切り替え:",
"wiz_cc_kodimsg_start": "テスト成功 - 次へ進みましょう!",
"wiz_cc_kodishould": "Kodiに次の画像が表示されます$1",
"wiz_cc_kwebs": "Kodiウェブサーバーホスト名またはIPアドレス",
"wiz_cc_testintro": "テストしましょう!",
"wiz_cc_title": "色調整ウィザード",
"wiz_hue_create_user": "ユーザーIDを新規作成",
"wiz_hue_ip": "ホスト名またはIPアドレス",
"wiz_hue_searchb": "ブリッジを検証中…",
"wiz_hue_title": "フィリップスヒューウィザード",
"wiz_hue_username": "ユーザーID",
"wiz_rgb_qgend": "緑?",
"wiz_rgb_qrend": "赤?",
"wiz_rgb_title": "RGBの並び順",
"wiz_wizavail": "ウィザードを使用可能"
}

View File

@ -0,0 +1,180 @@
{
"about_translations": "Oversettelser",
"about_version": "Versjon",
"conf_general_impexp_expbtn": "Eksporter",
"conf_general_impexp_impbtn": "Importer",
"conf_general_impexp_l1": "Import en konfigurasjon ved å velge en konfigurasjonsfil nedenfor og trykk \"Importer\".",
"conf_general_impexp_l2": "Eksporter en konfigurasjon ved å trykke \"Eksporter\". Nettleseren din starter en nedlastning.",
"conf_general_impexp_title": "Import/eksport konfigurasjon",
"conf_general_label_title": "Generelle innstillinger",
"conf_helptable_expl": "Forklaring",
"conf_helptable_option": "Valg",
"conf_leds_contr_label_contrtype": "Kontrollertype:",
"conf_leds_layout_advanced": "Avanserte innstillinger",
"conf_leds_layout_btn_checklist": "Vis sjekkliste",
"conf_leds_layout_button_savelay": "Lagre Oppsett",
"conf_leds_layout_button_updsim": "Oppdater Forhåndsvining",
"conf_leds_layout_cl_bottom": "Bunn",
"conf_leds_layout_cl_left": "Venstre",
"conf_leds_layout_cl_right": "Høyre",
"conf_leds_layout_cl_top": "Topp",
"conf_leds_layout_frame": "Klassisk Oppsett (LED Ramme)",
"conf_leds_layout_matrix": "Matrix Oppsett (LED-vegg)",
"conf_leds_layout_peview": "LED-oppsett forhåndsvisning",
"conf_leds_layout_ptlh": "Horisontal",
"conf_leds_layout_ptlv": "Vertikal",
"conf_leds_nav_label_ledcontroller": "LED kontroller",
"conf_leds_nav_label_ledlayout": "LED-oppsett",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Nettverk",
"conf_leds_optgroup_usb": "USB/Serial",
"dashboard_alert_message_confedit": "Din Hyperion konfigureringer er blitt endret. For å aktivere dem, restart Hyperion.",
"dashboard_alert_message_confedit_t": "Konfigurering endret",
"dashboard_alert_message_confsave_success": "Dine Hyperionkonfigureringer er vellykket endret. Dine endringer er nå aktive.",
"dashboard_alert_message_confsave_success_t": "Konfigurasjon lagret",
"dashboard_componentbox_label_comp": "Komponent",
"dashboard_componentbox_label_status": "Status",
"dashboard_componentbox_label_title": "Komponentstatus",
"dashboard_infobox_label_currenthyp": "Din Hyperion versjon:",
"dashboard_infobox_label_disableh": "Deaktiver forekomst: $1",
"dashboard_infobox_label_enableh": "Aktiver forekomst: $1",
"dashboard_infobox_label_instance": "Forekomst:",
"dashboard_infobox_label_latesthyp": "Siste Hyperion versjon:",
"dashboard_infobox_label_platform": "Plattform:",
"dashboard_infobox_label_ports": "Porter",
"dashboard_infobox_label_smartacc": "Smart Adgang",
"dashboard_infobox_label_statush": "Hyperion status:",
"dashboard_infobox_label_title": "Informasjon",
"dashboard_infobox_message_updatesuccess": "Du kjører siste versjon av Hyperion.",
"dashboard_infobox_message_updatewarning": "En nyere versjon av Hyperion er tilgjengelig! ($1)",
"dashboard_label_intro": "Dashbordet gir en enkel oversikt over statusen til Hyperion.",
"dashboard_message_do_not_show_again": "Ikke vis denne meldingen igjen",
"dashboard_newsbox_label_title": "Hyperion-Blogg",
"dashboard_newsbox_noconn": "Kan ikke koble Hyperion Serveren for å motta siste innlegg, fungerer internettilkoblingen?",
"dashboard_newsbox_readmore": "Les mer",
"dashboard_newsbox_visitblog": "Besøk Hyperion-Bloggen",
"edt_conf_enum_dl_error": "Feil",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_right_left": "Høyre til venstre",
"edt_dev_spec_clientKey_title": "Klientnøkkel",
"edt_dev_spec_lights_itemtitle": "Lys",
"edt_dev_spec_lights_name": "Navn",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_eff_grayscale": "Gråskala",
"edt_eff_image_source": "Bildekilde",
"edt_eff_image_source_file": "Lokal fil",
"edt_eff_image_source_url": "URL",
"edt_eff_ledtest_header": "LED Test",
"edt_eff_plasma_header": "Plasma",
"edt_eff_url": "Bildeadresse",
"effectsconfigurator_button_deleffect": "Slett effekt",
"effectsconfigurator_button_editeffect": "Last inn effekt",
"effectsconfigurator_button_starttest": "Start test",
"effectsconfigurator_button_stoptest": "Stop test",
"effectsconfigurator_label_effectname": "Effektnavn",
"general_access_advanced": "Avansert",
"general_access_default": "Standard",
"general_access_expert": "Ekspert",
"general_btn_back": "Tilbake",
"general_btn_cancel": "Avbryt",
"general_btn_continue": "Fortsett",
"general_btn_denyAccess": "Nekt tilgang",
"general_btn_grantAccess": "Gi tilgang",
"general_btn_iswitch": "Bytt",
"general_btn_next": "Neste",
"general_btn_off": "Av",
"general_btn_ok": "OK",
"general_btn_on": "På",
"general_btn_restarthyperion": "Start Hyperion på nytt",
"general_btn_save": "Lagre",
"general_btn_saveandreload": "Lagre og last inn på nytt",
"general_btn_saverestart": "Lagre og restart",
"general_btn_yes": "Ja",
"general_col_blue": "blå",
"general_col_green": "grønn",
"general_col_red": "rød",
"general_comp_BLACKBORDER": "Blackbar gjennkjennelse",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_SMOOTHING": "Utjevning",
"general_country_cn": "Kina",
"general_country_de": "Tyskland",
"general_country_es": "Spania",
"general_country_fr": "Frankrike",
"general_country_it": "Italia",
"general_country_nl": "Nederland",
"general_country_ru": "Russland",
"general_country_uk": "Storbritania",
"general_country_us": "USA",
"general_speech_cs": "Tsjekkisk",
"general_speech_de": "Tysk",
"general_speech_en": "Engelsk",
"general_speech_es": "Spansk",
"general_speech_fr": "Fransk",
"general_speech_it": "Italiensk",
"general_speech_nl": "Nederlandsk",
"general_speech_pl": "Polsk",
"general_speech_ro": "Rumensk",
"general_speech_ru": "Russisk",
"general_speech_sv": "Svensk",
"general_speech_tr": "Tyrkisk",
"general_speech_vi": "Vietnamesisk",
"general_speech_zh-CN": "Kinesisk (forenklet)",
"general_webui_title": "Hyperion - Webkonfigurasjon",
"infoDialog_checklist_title": "Sjekkliste!",
"infoDialog_general_success_title": "Suksess",
"infoDialog_general_warning_title": "Advarsel",
"infoDialog_import_confirm_title": "Bekreft import",
"infoDialog_password_minimum_length": "Passord må bestå av minst 8 tegn",
"infoDialog_username_text": "Brukernavn",
"infoDialog_writeconf_error_text": "Lagringen av konfigurasjonen din feilet.",
"info_conlost_label_autorecon": "Vil koble til på nytt når Hyperion er tilgjengelig.",
"info_conlost_label_reason": "Mulige årsaker:",
"main_ledsim_btn_togglelednumber": "Antall LED",
"main_ledsim_btn_toggleleds": "Vis LED",
"main_ledsim_btn_togglelivevideo": "Direktevideo",
"main_ledsim_title": "LED-visualisering",
"main_menu_about_token": "Om Hyperion",
"main_menu_colors_conf_token": "Bildebehandling",
"main_menu_configuration_token": "Konfigureringer",
"main_menu_dashboard_token": "Dashbord",
"main_menu_effect_conf_token": "Effekter",
"main_menu_effectsconfigurator_token": "Effekt konfigurerer",
"main_menu_general_conf_token": "Generell",
"main_menu_instcapture_conf_token": "Kilder",
"main_menu_logging_token": "Logg",
"main_menu_network_conf_token": "Nettverkstjenester",
"main_menu_remotecontrol_token": "Fjern-kontroll",
"main_menu_support_token": "Støtte",
"main_menu_system_token": "System",
"main_menu_update_token": "Oppdater",
"main_menu_webconfig_token": "Web-konfigurasjon",
"remote_adjustment_label": "Fargejusteringer",
"remote_color_button_reset": "Nullstill Farge/Effekt",
"remote_color_label_color": "Farge:",
"remote_effects_label_effects": "Effekt:",
"remote_effects_label_picture": "Bilde:",
"remote_input_duration": "Varighet",
"remote_input_label": "Kildevalg",
"remote_input_owner": "Type",
"remote_input_priority": "Prioritet",
"remote_input_setsource_btn": "Velg kilde",
"remote_input_sourceactiv_btn": "Kilde aktiv",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_label": "Videomodus",
"support_label_btctext": "Adresse:",
"support_label_donationpp": "Doner:",
"support_label_spreadtheword": "Spre ordet",
"update_button_install": "Installer",
"update_label_description": "Beskrivelse:",
"wiz_hue_username": "Bruker ID:",
"wiz_identify": "Identifiser",
"wiz_identify_light": "Identifiser $1",
"wiz_rgb_qgend": "...grønn?",
"wiz_rgb_qrend": "...rød?"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
{
"dashboard_alert_message_confedit_t": "Configuração modificada",
"dashboard_alert_message_confsave_success_t": "Configuração gravada",
"dashboard_componentbox_label_comp": "Componente",
"dashboard_componentbox_label_status": "Estado",
"dashboard_componentbox_label_title": "Estado dos componentes",
"dashboard_infobox_label_currenthyp": "A tua versão do Hyperion:",
"dashboard_infobox_label_disableh": "Desabilitar instância: $1",
"dashboard_infobox_label_enableh": "Habilitar instância: $1",
"dashboard_infobox_label_instance": "Instância",
"dashboard_infobox_label_latesthyp": "Última versão do Hyperion:",
"dashboard_infobox_label_platform": "Plataforma:",
"dashboard_infobox_label_ports": "Portos",
"dashboard_infobox_label_smartacc": "Acesso Inteligente",
"dashboard_infobox_label_statush": "Hyperion estado:",
"dashboard_infobox_label_title": "Informação",
"dashboard_infobox_message_updatesuccess": "Está a executar última versão do Hyperion.",
"dashboard_infobox_message_updatewarning": "Uma versão mais recente do Hyperion está disponível! ($1)",
"dashboard_label_intro": "O painel fornece uma visão geral rápida sobre o estado do Hyperion.",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "Não é possível conectar ao servidor Hyperion para recuperar os últimos posts, a sua conexão à Internet funciona?",
"dashboard_newsbox_readmore": "Ler mais",
"dashboard_newsbox_visitblog": "Visite o Hyperion-Blog",
"general_access_advanced": "Avançado",
"general_access_default": "Por omissão",
"general_access_expert": "Especialista",
"general_btn_back": "Voltar",
"general_btn_cancel": "Cancelar",
"general_btn_continue": "Continuar",
"general_btn_iswitch": "Interruptor",
"general_btn_next": "Seguinte",
"general_btn_off": "Desligar",
"general_btn_ok": "OK",
"general_btn_on": "Ligar",
"general_btn_restarthyperion": "Reiniciar o Hyperion",
"general_btn_save": "Garvar",
"general_btn_saveandreload": "Gravar e recarregar",
"general_btn_yes": "Sim",
"general_button_savesettings": "Gravar configurações",
"general_col_blue": "azul",
"general_col_green": "verde",
"general_col_red": "vermelho",
"general_comp_BLACKBORDER": "Detecção de barras",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_FLATBUFSERVER": "Servidor Flatbuffers",
"general_comp_FORWARDER": "Forwarder",
"general_comp_GRABBER": "Plataforma de Captura",
"general_comp_LEDDEVICE": "Dispositivo LED",
"general_comp_PROTOSERVER": "Servidor de buffers de protocolo",
"general_comp_SMOOTHING": "Smoothing",
"general_comp_V4L": "Captura USB",
"general_country_de": "Alemanha",
"general_country_es": "Espanha",
"general_country_fr": "França",
"general_country_it": "Itália",
"general_country_nl": "Holanda",
"general_country_uk": "Reino Unido",
"general_country_us": "Estados Unidos da América",
"general_speech_cs": "Tcheco",
"general_speech_de": "Alemão",
"general_speech_en": "Inglês",
"general_speech_es": "Espanhol",
"general_speech_it": "Italiano",
"general_webui_title": "Hyperion - Configuração Web",
"general_wiki_moreto": "Mais informação a \"$1\" na nossa Wiki",
"main_menu_colors_conf_token": "Processamento de imagem",
"main_menu_configuration_token": "Configuração",
"main_menu_dashboard_token": "Painel",
"main_menu_effect_conf_token": "Efeitos",
"main_menu_general_conf_token": "Geral",
"main_menu_grabber_conf_token": "Hardware de captura",
"main_menu_leds_conf_token": "LED Hardware",
"main_menu_network_conf_token": "Serviços de rede",
"main_menu_remotecontrol_token": "Controlo remoto",
"main_menu_support_token": "Suporte"
}

View File

@ -1,891 +1,96 @@
{
"general_webui_title": "Hyperion - Configurare Web",
"conf_leds_contr_label_contrtype": "Tip controller",
"conf_leds_layout_button_savelay": "Salvare model",
"conf_leds_layout_button_updsim": "Actualizare previzualizare",
"conf_leds_layout_cl_bottom": "Jos",
"conf_leds_layout_cl_left": "Stânga",
"conf_leds_layout_cl_right": "Dreapta",
"conf_leds_layout_cl_top": "Sus",
"conf_leds_layout_ma_cabling": "Cablare",
"conf_leds_layout_ma_horiz": "Orizontal",
"conf_leds_layout_ma_opthoriz": "Orizontal",
"conf_leds_layout_ma_optparallel": "Paralel",
"conf_leds_layout_ma_optsnake": "Șarpe",
"conf_leds_layout_ma_order": "Direcție",
"conf_leds_layout_ma_vert": "Vertical",
"conf_leds_nav_label_ledcontroller": "Controller LED",
"conf_leds_optgroup_RPiGPIO": "PRi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Rețea",
"conf_leds_optgroup_usb": "USB",
"conf_logging_contpolicy": "Politica de confidențialitate pentru raport",
"conf_logging_lastreports": "Rapoarte anterioare",
"conf_logging_report": "Raport",
"conf_logging_uplpolicy": "Apăsând acest buton accepți",
"dashboard_alert_message_confsave_success": "Configurația ta Hyperion a fost salvată cu succes. Modificările sunt active acum.",
"dashboard_componentbox_label_title": "Stare componente",
"dashboard_infobox_label_currenthyp": "Versiunea ta Hyperion:",
"dashboard_infobox_label_disableh": "Dezactivare Hyperion",
"dashboard_infobox_label_enableh": "Activare Instans: $1",
"dashboard_infobox_label_instance": "Instanță:",
"dashboard_infobox_label_latesthyp": "Cea mai nouă versiune Hyperion:",
"dashboard_infobox_label_platform": "Platformă:",
"dashboard_infobox_label_statush": "Stare Hyperion:",
"dashboard_infobox_label_title": "Informații",
"dashboard_infobox_message_updatesuccess": "Rulezi cea mai recentă versiune Hyperion.",
"dashboard_infobox_message_updatewarning": "Este disponibilă o nouă versiune Hyperion! ($1)",
"general_access_advanced": "Avansat",
"general_access_default": "Implicit",
"general_access_expert": "Expert",
"general_btn_back": "Înapoi",
"general_btn_cancel": "Anulare",
"general_btn_continue": "Continuă",
"general_btn_next": "Următor",
"general_btn_off": "Închis",
"general_btn_ok": "OK",
"general_btn_on": "Deschis",
"general_btn_restarthyperion": "Repornește Hyperion",
"general_btn_save": "Salvare",
"general_btn_saveandreload": "Salvare și reîncărcare",
"general_btn_yes": "Da",
"general_button_savesettings": "Salvare setări",
"general_col_blue": "albastru",
"general_col_green": "verde",
"general_col_red": "roșu",
"general_comp_BLACKBORDER": "Detecție bare negre",
"general_comp_BOBLIGHTSERVER": "Server Boblight",
"general_comp_GRABBER": "Captură platformă",
"general_comp_LEDDEVICE": "Dispozitiv LED",
"general_comp_V4L": "Captură USB",
"general_country_de": "Germania",
"general_country_us": "Statele Unite",
"general_country_uk": "Regatul Unit",
"general_country_fr": "Franța",
"general_country_es": "Spania",
"general_country_fr": "Franța",
"general_country_it": "Italia",
"general_country_nl": "Olanda",
"general_country_uk": "Regatul Unit",
"general_country_us": "Statele Unite",
"general_speech_cs": "Cehă",
"general_speech_de": "Germană",
"general_speech_en": "Engleză",
"general_speech_es": "Spaniolă",
"general_speech_it": "Italiană",
"general_speech_cs": "Cehă",
"general_access_default": "Implicit",
"general_access_advanced": "Avansat",
"general_access_expert": "Expert",
"general_comp_SMOOTHING": "",
"general_comp_BLACKBORDER": "Detecție bare negre",
"general_comp_FORWARDER": "",
"general_comp_BOBLIGHTSERVER": "Server Boblight",
"general_comp_FLATBUFSERVER": "",
"general_comp_PROTOSERVER": "",
"general_comp_GRABBER": "Captură platformă",
"general_comp_V4L": "Captură USB",
"general_comp_LEDDEVICE": "Dispozitiv LED",
"general_col_red": "roșu",
"general_col_green": "verde",
"general_col_blue": "albastru",
"general_button_savesettings": "Salvare setări",
"general_btn_yes": "Da",
"general_btn_ok": "OK",
"general_btn_cancel": "Anulare",
"general_btn_continue": "Continuă",
"general_btn_save": "Salvare",
"general_btn_saveandreload": "Salvare și reîncărcare",
"general_btn_restarthyperion": "Repornește Hyperion",
"general_btn_off": "Închis",
"general_btn_on": "Deschis",
"general_btn_next": "Următor",
"general_btn_back": "Înapoi",
"general_btn_iswitch": "",
"general_wiki_moreto": "",
"dashboard_label_intro": "",
"dashboard_infobox_label_title": "Informații",
"dashboard_infobox_label_currenthyp": "Versiunea ta Hyperion:",
"dashboard_infobox_label_latesthyp": "Cea mai nouă versiune Hyperion:",
"dashboard_infobox_label_platform": "Platformă:",
"dashboard_infobox_label_instance": "Instanță:",
"dashboard_infobox_label_ports": "",
"dashboard_infobox_message_updatewarning": "Este disponibilă o nouă versiune Hyperion! ($1)",
"dashboard_infobox_message_updatesuccess": "Rulezi cea mai recentă versiune Hyperion.",
"dashboard_infobox_label_statush": "Stare Hyperion:",
"dashboard_infobox_label_smartacc": "",
"dashboard_infobox_label_enableh": "Activare Hyperion",
"dashboard_infobox_label_disableh": "Dezactivare Hyperion",
"dashboard_componentbox_label_title": "Stare componente",
"dashboard_componentbox_label_comp": "",
"dashboard_componentbox_label_status": "",
"dashboard_newsbox_label_title": "",
"dashboard_newsbox_visitblog": "",
"dashboard_newsbox_noconn": "",
"dashboard_newsbox_readmore": "",
"dashboard_alert_message_confedit_t": "",
"dashboard_alert_message_confedit": "",
"dashboard_alert_message_disabled_t": "",
"dashboard_alert_message_disabled": "",
"dashboard_alert_message_confsave_success_t": "",
"dashboard_alert_message_confsave_success": "Configurația ta Hyperion a fost salvată cu succes. Modificările sunt active acum.",
"main_menu_dashboard_token": "Panou control",
"main_menu_configuration_token": "Configurație",
"main_menu_general_conf_token": "General",
"main_menu_leds_conf_token": "",
"main_menu_grabber_conf_token": "",
"main_menu_effect_conf_token": "Efecte",
"general_webui_title": "Hyperion - Configurare Web",
"main_ledsim_title": "Vizualizare LED",
"main_menu_about_token": "Despre Hyperion",
"main_menu_colors_conf_token": "Procesare imagine",
"main_menu_configuration_token": "Configurație",
"main_menu_dashboard_token": "Panou control",
"main_menu_effect_conf_token": "Efecte",
"main_menu_effectsconfigurator_token": "Configurator efecte",
"main_menu_general_conf_token": "General",
"main_menu_logging_token": "Jurnal",
"main_menu_network_conf_token": "Servicii rețea",
"main_menu_remotecontrol_token": "Telecomandă",
"main_menu_effectsconfigurator_token": "Configurator efecte",
"main_menu_support_token": "Ajutor",
"main_menu_update_token": "Actualizare",
"main_menu_system_token": "Sistem",
"main_menu_input_selection_token": "",
"main_menu_logging_token": "Jurnal",
"main_menu_update_token": "Actualizare",
"main_menu_webconfig_token": "Configurație web",
"main_menu_about_token": "Despre Hyperion",
"main_ledsim_title": "Vizualizare LED",
"main_ledsim_text": "",
"main_ledsim_btn_toggleleds": "",
"main_ledsim_btn_togglelednumber": "",
"main_ledsim_btn_togglelivevideo": "",
"conf_general_label_title": "",
"conf_general_intro": "",
"conf_general_impexp_title": "",
"conf_general_impexp_l1": "",
"conf_general_impexp_l2": "",
"conf_general_impexp_impbtn": "",
"conf_general_impexp_expbtn": "",
"conf_helptable_option": "",
"conf_helptable_expl": "",
"conf_effect_path_intro": "",
"conf_effect_fgeff_intro": "",
"conf_effect_bgeff_intro": "",
"conf_leds_device_intro": "",
"conf_leds_layout_intro": "",
"conf_leds_nav_label_ledcontroller": "Controller LED",
"conf_leds_nav_label_ledlayout": "",
"conf_leds_contr_label_contrtype": "Tip controller",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiGPIO": "PRi GPIO",
"conf_leds_optgroup_network": "Rețea",
"conf_leds_optgroup_usb": "USB",
"conf_leds_optgroup_debug": "",
"conf_leds_layout_btn_checklist": "",
"conf_leds_layout_checkp1": "",
"conf_leds_layout_checkp2": "",
"conf_leds_layout_checkp3": "",
"conf_leds_layout_checkp4": "",
"conf_leds_layout_frame": "",
"conf_leds_layout_matrix": "",
"conf_leds_layout_generatedconf": "",
"conf_leds_layout_button_savelay": "Salvare model",
"conf_leds_layout_button_updsim": "Actualizare previzualizare",
"conf_leds_layout_peview": "",
"conf_leds_layout_advanced": "",
"conf_leds_layout_preview_originCL": "",
"conf_leds_layout_preview_originTEXT": "",
"conf_leds_layout_preview_originMA": "",
"conf_leds_layout_preview_totalleds": "",
"conf_leds_layout_preview_ledpower": "",
"conf_leds_layout_preview_l1": "",
"conf_leds_layout_preview_l2": "",
"conf_leds_layout_cl_top": "Sus",
"conf_leds_layout_cl_bottom": "Jos",
"conf_leds_layout_cl_left": "Stânga",
"conf_leds_layout_cl_right": "Dreapta",
"conf_leds_layout_cl_gaglength": "",
"conf_leds_layout_cl_gappos": "",
"conf_leds_layout_cl_inppos": "",
"conf_leds_layout_cl_reversdir": "",
"conf_leds_layout_cl_hleddepth": "",
"conf_leds_layout_cl_vleddepth": "",
"conf_leds_layout_cl_edgegap": "",
"conf_leds_layout_cl_cornergap": "",
"conf_leds_layout_cl_overlap": "",
"conf_leds_layout_ma_horiz": "Orizontal",
"conf_leds_layout_ma_vert": "Vertical",
"conf_leds_layout_ma_cabling": "Cablare",
"conf_leds_layout_ma_optsnake": "Șarpe",
"conf_leds_layout_ma_optparallel": "Paralel",
"conf_leds_layout_ma_order": "Direcție",
"conf_leds_layout_ma_opthoriz": "Orizontal",
"conf_leds_layout_ma_optvert": "",
"conf_leds_layout_ma_position": "",
"conf_leds_layout_ma_opttopleft": "",
"conf_leds_layout_ma_opttopright": "",
"conf_leds_layout_ma_optbottomleft": "",
"conf_leds_layout_ma_optbottomright": "",
"conf_leds_layout_textf1": "",
"conf_grabber_fg_intro": "",
"conf_grabber_v4l_intro": "",
"conf_colors_color_intro": "",
"conf_colors_smoothing_intro": "",
"conf_colors_blackborder_intro": "",
"conf_network_json_intro": "",
"conf_network_bobl_intro": "",
"conf_network_fbs_intro": "",
"conf_network_proto_intro": "",
"conf_network_forw_intro": "",
"conf_logging_label_intro": "",
"conf_logging_btn_pbupload": "",
"conf_logging_btn_autoscroll": "",
"conf_logging_nomessage": "",
"conf_logging_uploading": "",
"conf_logging_yourlink": "",
"conf_logging_uplfailed": "",
"conf_logging_report": "Raport",
"conf_logging_lastreports": "Rapoarte anterioare",
"conf_logging_uplpolicy": "Apăsând acest buton accepți",
"conf_logging_contpolicy": "Politica de confidențialitate pentru raport",
"conf_webconfig_label_intro": "",
"remote_losthint": "",
"remote_color_label": "Culori/Efecte",
"remote_color_intro": "",
"remote_color_button_reset": "",
"remote_color_label_color": "",
"remote_effects_label_effects": "",
"remote_adjustment_label": "",
"remote_adjustment_intro": "",
"remote_videoMode_label": "",
"remote_videoMode_intro": "",
"remote_videoMode_3DSBS": "",
"remote_videoMode_3DTAB": "",
"remote_videoMode_2D": "",
"remote_input_label": "",
"remote_input_intro": "",
"remote_input_label_autoselect": "",
"remote_input_setsource_btn": "",
"remote_input_sourceactiv_btn": "",
"remote_input_duration": "Durată:",
"remote_input_ip": "IP:",
"remote_input_origin": "Origine",
"remote_input_owner": "Tip",
"remote_input_priority": "Prioritate",
"remote_input_status": "Stare/Acțiune",
"remote_input_duration": "Durată:",
"remote_input_ip": "IP:",
"remote_input_clearall": "",
"remote_components_label": "",
"remote_components_intro": "",
"remote_optgroup_usreffets": "",
"remote_optgroup_syseffets": "",
"remote_maptype_label": "",
"remote_maptype_intro": "",
"remote_maptype_label_multicolor_mean": "",
"remote_maptype_label_unicolor_mean": "",
"effectsconfigurator_label_intro": "",
"effectsconfigurator_label_chooseeff": "",
"effectsconfigurator_editdeleff": "",
"effectsconfigurator_button_saveeffect": "",
"effectsconfigurator_label_effectname": "",
"effectsconfigurator_button_starttest": "",
"effectsconfigurator_button_stoptest": "",
"effectsconfigurator_button_conttest": "",
"effectsconfigurator_button_deleffect": "",
"effectsconfigurator_button_editeffect": "",
"support_label_title": "",
"support_label_intro": "",
"support_label_spreadtheword": "",
"support_label_fbtext": "",
"support_label_twtext": "",
"support_label_ggtext": "",
"support_label_yttext": "",
"support_label_igtext": "",
"support_label_donate": "",
"support_label_affinstr1": "",
"support_label_affinstr2": "",
"support_label_affinstr3": "",
"support_label_btctext": "",
"support_label_donationpp": "",
"support_label_webrestitle": "",
"support_label_webpagetitle": "",
"support_label_webpagetext": "",
"support_label_wikititle": "",
"support_label_wikitext": "",
"support_label_forumtitle": "",
"support_label_forumtext": "",
"support_label_ghtext": "",
"update_label_intro": "",
"update_label_description": "",
"update_button_install": "",
"update_button_changelog": "",
"update_label_type": "",
"update_versreminder": "",
"update_error_getting_versions": "",
"about_version": "",
"about_build": "",
"about_builddate": "",
"about_translations": "",
"about_resources": "",
"about_contribute": "",
"about_credits": "",
"info_conlost_label_title": "",
"info_conlost_label_reason": "",
"info_conlost_label_reason1": "",
"info_conlost_label_reason2": "",
"info_conlost_label_reason3": "",
"info_conlost_label_autorecon": "",
"info_conlost_label_autorefresh": "",
"info_conlost_label_reload": "",
"info_restart_title": "",
"info_restart_rightback": "",
"info_restart_contus": "",
"info_restart_contusa": "",
"info_404": "",
"infoDialog_general_success_title": "",
"infoDialog_general_error_title": "",
"infoDialog_general_warning_title": "",
"infoDialog_checklist_title": "",
"infoDialog_effconf_deleted_text": "",
"infoDialog_effconf_created_text": "",
"InfoDialog_lang_title": "",
"InfoDialog_lang_text": "",
"InfoDialog_access_title": "",
"InfoDialog_access_text": "",
"InfoDialog_nowrite_title": "",
"InfoDialog_nowrite_text": "",
"InfoDialog_nowrite_foottext": "",
"infoDialog_wizrgb_text": "",
"infoDialog_writeimage_error_text": "",
"infoDialog_writeconf_error_text": "",
"infoDialog_import_jsonerror_text": "",
"infoDialog_import_hyperror_text": "",
"infoDialog_import_comperror_text": "",
"infoDialog_import_confirm_title": "",
"infoDialog_import_confirm_text": "",
"InfoDialog_iswitch_title": "",
"InfoDialog_iswitch_text": "",
"wiz_wizavail": "",
"wiz_guideyou": "",
"wiz_rgb_title": "",
"wiz_rgb_intro1": "",
"wiz_rgb_intro2": "",
"wiz_rgb_expl": "",
"wiz_rgb_switchevery": "",
"wiz_rgb_q": "",
"wiz_rgb_qrend": "",
"wiz_rgb_qgend": "",
"wiz_hue_title": "",
"wiz_hue_intro1": "",
"wiz_hue_desc1": "",
"wiz_hue_desc2": "",
"wiz_hue_ip": "",
"wiz_hue_username": "",
"wiz_hue_create_user": "",
"wiz_hue_failure_ip": "",
"wiz_hue_failure_connection": "",
"wiz_hue_failure_user": "",
"wiz_hue_press_link": "",
"wiz_hue_ids_disabled": "",
"wiz_hue_ids_entire": "",
"wiz_hue_noids": "",
"wiz_hue_pos": "",
"wiz_hue_searchb": "",
"wiz_hue_blinkblue": "",
"wiz_hue_ident": "",
"wiz_cc_title": "",
"wiz_cc_intro1": "",
"wiz_cc_kwebs": "",
"wiz_cc_kodidiscon": "",
"wiz_cc_kodidisconlink": "",
"wiz_cc_kodicon": "",
"wiz_cc_kodimsg_start": "",
"wiz_cc_kodishould": "",
"wiz_cc_lettvshow": "",
"wiz_cc_lettvshowm": "",
"wiz_cc_adjustit": "",
"wiz_cc_adjustgamma": "",
"wiz_cc_chooseid": "",
"wiz_cc_btn_switchpic": "",
"wiz_cc_backlight": "",
"wiz_cc_testintro": "",
"wiz_cc_testintrok": "",
"wiz_cc_testintrowok": "",
"wiz_cc_link": "",
"wiz_cc_morethanone": "",
"wiz_cc_btn_stop": "",
"wiz_cc_summary": "",
"edt_dev_auth_key_title": "",
"edt_dev_enum_subtract_minimum": "",
"edt_dev_enum_sub_min_cool_adjust": "",
"edt_dev_enum_sub_min_warm_adjust": "",
"edt_dev_enum_white_off": "",
"edt_dev_general_heading_title": "",
"edt_dev_general_name_title": "",
"edt_dev_general_hardwareLedCount_title": "",
"edt_dev_general_colorOrder_title": "",
"edt_dev_general_rewriteTime_title": "",
"edt_dev_spec_header_title": "",
"edt_dev_spec_baudrate_title": "",
"edt_dev_spec_spipath_title": "",
"edt_dev_spec_invert_title": "",
"edt_dev_spec_multicastGroup_title": "",
"edt_dev_spec_numberOfLeds_title": "",
"edt_dev_spec_port_title": "",
"edt_dev_spec_orbIds_title": "",
"edt_dev_spec_useOrbSmoothing_title": "",
"edt_dev_spec_targetIp_title": "",
"edt_dev_spec_targetIpHost_title": "",
"edt_dev_spec_outputPath_title": "",
"edt_dev_spec_delayAfterConnect_title": "",
"edt_dev_spec_FCsetConfig_title": "",
"edt_dev_spec_FCmanualControl_title": "",
"edt_dev_spec_FCledToOn_title": "",
"edt_dev_spec_interpolation_title": "",
"edt_dev_spec_dithering_title": "",
"edt_dev_spec_gamma_title": "",
"edt_dev_spec_whitepoint_title": "",
"edt_dev_spec_username_title": "",
"edt_dev_spec_lightid_title": "",
"edt_dev_spec_lightid_itemtitle": "",
"edt_dev_spec_transistionTime_title": "",
"edt_dev_spec_switchOffOnBlack_title": "",
"edt_dev_spec_brightnessFactor_title": "",
"edt_dev_spec_ledType_title": "",
"edt_dev_spec_uid_title": "",
"edt_dev_spec_intervall_title": "",
"edt_dev_spec_latchtime_title": "",
"edt_dev_spec_maxPacket_title": "",
"edt_dev_spec_serial_title": "",
"edt_dev_spec_vid_title": "",
"edt_dev_spec_pid_title": "",
"edt_dev_spec_cid_title": "",
"edt_dev_spec_LBap102Mode_title": "",
"edt_dev_spec_universe_title": "",
"edt_dev_spec_whiteLedAlgor_title": "",
"edt_dev_spec_useRgbwProtocol_title": "",
"edt_dev_spec_maximumLedCount_title": "",
"edt_dev_spec_gpioNumber_title": "",
"edt_dev_spec_dmaNumber_title": "",
"edt_dev_spec_gpioMap_title": "",
"edt_dev_spec_PBFiFo_title": "",
"edt_dev_spec_gpioBcm_title": "",
"edt_dev_spec_ledIndex_title": "",
"edt_dev_spec_colorComponent_title": "",
"edt_conf_general_enable_title": "",
"edt_conf_general_enable_expl": "",
"edt_conf_general_priority_title": "",
"edt_conf_general_priority_expl": "",
"edt_conf_general_port_title": "",
"edt_conf_general_port_expl": "",
"edt_conf_enum_color": "",
"edt_conf_enum_effect": "",
"edt_conf_enum_multicolor_mean": "",
"edt_conf_enum_unicolor_mean": "",
"edt_conf_enum_rgb": "",
"edt_conf_enum_bgr": "",
"edt_conf_enum_rbg": "",
"edt_conf_enum_brg": "",
"edt_conf_enum_gbr": "",
"edt_conf_enum_grb": "",
"edt_conf_enum_linear": "",
"edt_conf_enum_PAL": "",
"edt_conf_enum_NTSC": "",
"edt_conf_enum_SECAM": "",
"edt_conf_enum_NO_CHANGE": "",
"edt_conf_enum_logsilent": "",
"edt_conf_enum_logwarn": "",
"edt_conf_enum_logverbose": "",
"edt_conf_enum_logdebug": "",
"edt_conf_enum_bbdefault": "",
"edt_conf_enum_bbclassic": "",
"edt_conf_enum_bbosd": "",
"edt_conf_enum_automatic": "",
"edt_conf_gen_heading_title": "",
"edt_conf_gen_name_title": "",
"edt_conf_gen_name_expl": "",
"edt_conf_gen_showOptHelp_title": "",
"edt_conf_gen_showOptHelp_expl": "",
"edt_conf_color_heading_title": "",
"edt_conf_color_channelAdjustment_header_itemtitle": "",
"edt_conf_color_channelAdjustment_header_title": "",
"edt_conf_color_channelAdjustment_header_expl": "",
"edt_conf_color_imageToLedMappingType_title": "",
"edt_conf_color_imageToLedMappingType_expl": "",
"edt_conf_color_id_title": "",
"edt_conf_color_id_expl": "",
"edt_conf_color_leds_title": "",
"edt_conf_color_leds_expl": "",
"edt_conf_color_black_title": "",
"edt_conf_color_black_expl": "",
"edt_conf_color_white_title": "",
"edt_conf_color_white_expl": "",
"edt_conf_color_red_title": "",
"edt_conf_color_red_expl": "",
"edt_conf_color_green_title": "",
"edt_conf_color_green_expl": "",
"edt_conf_color_blue_title": "",
"edt_conf_color_blue_expl": "",
"edt_conf_color_cyan_title": "",
"edt_conf_color_cyan_expl": "",
"edt_conf_color_magenta_title": "",
"edt_conf_color_magenta_expl": "",
"edt_conf_color_yellow_title": "",
"edt_conf_color_yellow_expl": "",
"edt_conf_color_gammaRed_title": "",
"edt_conf_color_gammaRed_expl": "",
"edt_conf_color_gammaGreen_title": "",
"edt_conf_color_gammaGreen_expl": "",
"edt_conf_color_gammaBlue_title": "",
"edt_conf_color_gammaBlue_expl": "",
"edt_conf_color_backlightThreshold_title": "",
"edt_conf_color_backlightThreshold_expl": "",
"edt_conf_color_backlightColored_title": "",
"edt_conf_color_backlightColored_expl": "",
"edt_conf_color_brightness_title": "",
"edt_conf_color_brightness_expl": "",
"edt_conf_color_brightnessComp_title": "",
"edt_conf_color_brightnessComp_expl": "",
"edt_conf_smooth_heading_title": "",
"edt_conf_smooth_type_title": "",
"edt_conf_smooth_type_expl": "",
"edt_conf_smooth_time_ms_title": "",
"edt_conf_smooth_time_ms_expl": "",
"edt_conf_smooth_updateFrequency_title": "",
"edt_conf_smooth_updateFrequency_expl": "",
"edt_conf_smooth_updateDelay_title": "",
"edt_conf_smooth_updateDelay_expl": "",
"edt_conf_smooth_continuousOutput_title": "",
"edt_conf_smooth_continuousOutput_expl": "",
"edt_conf_v4l2_heading_title": "",
"edt_conf_v4l2_device_title": "",
"edt_conf_v4l2_device_expl": "",
"edt_conf_v4l2_standard_title": "",
"edt_conf_v4l2_standard_expl": "",
"edt_conf_v4l2_sizeDecimation_title": "",
"edt_conf_v4l2_sizeDecimation_expl": "",
"edt_conf_v4l2_cropLeft_title": "",
"edt_conf_v4l2_cropLeft_expl": "",
"edt_conf_v4l2_cropRight_title": "",
"edt_conf_v4l2_cropRight_expl": "",
"edt_conf_v4l2_cropTop_title": "",
"edt_conf_v4l2_cropTop_expl": "",
"edt_conf_v4l2_cropBottom_title": "",
"edt_conf_v4l2_cropBottom_expl": "",
"edt_conf_v4l2_signalDetection_title": "",
"edt_conf_v4l2_signalDetection_expl": "",
"edt_conf_v4l2_redSignalThreshold_title": "",
"edt_conf_v4l2_redSignalThreshold_expl": "",
"edt_conf_v4l2_greenSignalThreshold_title": "",
"edt_conf_v4l2_greenSignalThreshold_expl": "",
"edt_conf_v4l2_blueSignalThreshold_title": "",
"edt_conf_v4l2_blueSignalThreshold_expl": "",
"edt_conf_v4l2_sDVOffsetMin_title": "",
"edt_conf_v4l2_sDVOffsetMin_expl": "",
"edt_conf_v4l2_sDHOffsetMin_title": "",
"edt_conf_v4l2_sDHOffsetMin_expl": "",
"edt_conf_v4l2_sDVOffsetMax_title": "",
"edt_conf_v4l2_sDVOffsetMax_expl": "",
"edt_conf_v4l2_sDHOffsetMax_title": "",
"edt_conf_v4l2_sDHOffsetMax_expl": "",
"edt_conf_instCapture_heading_title": "",
"edt_conf_instC_systemEnable_title": "",
"edt_conf_instC_systemEnable_expl": "",
"edt_conf_instC_v4lEnable_title": "",
"edt_conf_instC_v4lEnable_expl": "",
"edt_conf_fg_heading_title": "",
"edt_conf_fg_type_title": "",
"edt_conf_fg_type_expl": "",
"edt_conf_fg_frequency_Hz_title": "",
"edt_conf_fg_frequency_Hz_expl": "",
"edt_conf_fg_width_title": "",
"edt_conf_fg_width_expl": "",
"edt_conf_fg_height_title": "",
"edt_conf_fg_height_expl": "",
"edt_conf_fg_pixelDecimation_title": "",
"edt_conf_fg_pixelDecimation_expl": "",
"edt_conf_fg_device_title": "",
"edt_conf_fg_display_title": "",
"edt_conf_fg_display_expl": "",
"edt_conf_bb_heading_title": "",
"edt_conf_bb_threshold_title": "",
"edt_conf_bb_threshold_expl": "",
"edt_conf_bb_unknownFrameCnt_title": "",
"edt_conf_bb_unknownFrameCnt_expl": "",
"edt_conf_bb_borderFrameCnt_title": "",
"edt_conf_bb_borderFrameCnt_expl": "",
"edt_conf_bb_maxInconsistentCnt_title": "",
"edt_conf_bb_maxInconsistentCnt_expl": "",
"edt_conf_bb_blurRemoveCnt_title": "",
"edt_conf_bb_blurRemoveCnt_expl": "",
"edt_conf_bb_mode_title": "",
"edt_conf_bb_mode_expl": "",
"edt_conf_fge_heading_title": "",
"edt_conf_fge_type_title": "",
"edt_conf_fge_type_expl": "",
"edt_conf_fge_color_title": "",
"edt_conf_fge_color_expl": "",
"edt_conf_fge_effect_title": "",
"edt_conf_fge_effect_expl": "",
"edt_conf_fge_duration_ms_title": "",
"edt_conf_fge_duration_ms_expl": "",
"edt_conf_bge_heading_title": "",
"edt_conf_fw_heading_title": "",
"edt_conf_fw_json_title": "",
"edt_conf_fw_json_expl": "",
"edt_conf_fw_json_itemtitle": "",
"edt_conf_js_heading_title": "",
"edt_conf_fbs_heading_title": "",
"edt_conf_fbs_timeout_title": "",
"edt_conf_fbs_timeout_expl": "",
"edt_conf_pbs_heading_title": "",
"edt_conf_pbs_timeout_title": "",
"edt_conf_pbs_timeout_expl": "",
"edt_conf_bobls_heading_title": "",
"edt_conf_webc_heading_title": "",
"edt_conf_webc_docroot_title": "",
"edt_conf_webc_docroot_expl": "",
"edt_conf_effp_heading_title": "",
"edt_conf_effp_paths_title": "",
"edt_conf_effp_paths_expl": "",
"edt_conf_effp_paths_itemtitle": "",
"edt_conf_effp_disable_title": "",
"edt_conf_effp_disable_expl": "",
"edt_conf_effp_disable_itemtitle": "",
"edt_conf_log_heading_title": "",
"edt_conf_log_level_title": "",
"edt_conf_log_level_expl": "",
"edt_eff_smooth_custom": "",
"edt_eff_smooth_time_ms": "",
"edt_eff_smooth_updateFrequency": "",
"edt_eff_waves_header": "",
"edt_eff_waves_header_desc": "",
"edt_eff_gif_header": "",
"edt_eff_gif_header_desc": "",
"edt_eff_candle_header": "",
"edt_eff_candle_header_desc": "",
"edt_eff_police_header": "",
"edt_eff_police_header_desc": "",
"edt_eff_fade_header": "",
"edt_eff_fade_header_desc": "",
"edt_eff_rainbowmood_header": "",
"edt_eff_rainbowmood_header_desc": "",
"edt_eff_knightrider_header": "",
"edt_eff_knightrider_header_desc": "",
"edt_eff_lightclock_header": "",
"edt_eff_lightclock_header_desc": "",
"edt_eff_pacman_header": "",
"edt_eff_pacman_header_desc": "",
"edt_eff_moodblobs_header": "",
"edt_eff_moodblobs_header_desc": "",
"edt_eff_swirl_header": "",
"edt_eff_swirl_header_desc": "",
"edt_eff_random_header": "",
"edt_eff_random_header_desc": "",
"edt_eff_systemshutdown_header": "",
"edt_eff_systemshutdown_header_desc": "",
"edt_eff_snake_header": "",
"edt_eff_snake_header_desc": "",
"edt_eff_sparks_header": "",
"edt_eff_sparks_header_desc": "",
"edt_eff_traces_header": "",
"edt_eff_traces_header_desc": "",
"edt_eff_x-mas_header": "",
"edt_eff_x-mas_header_desc": "",
"edt_eff_trails_header": "",
"edt_eff_trails_header_desc": "",
"edt_eff_flag_header": "",
"edt_eff_flag_header_desc": "",
"edt_eff_enum_all": "",
"edt_eff_enum_all-together": "",
"edt_eff_enum_list": "",
"edt_eff_count": "",
"edt_eff_color": "",
"edt_eff_colorrandom": "",
"edt_eff_colorone": "",
"edt_eff_colortwo": "",
"edt_eff_colorcount": "",
"edt_eff_rotationtime": "",
"edt_eff_sleeptime": "",
"edt_eff_image": "",
"edt_eff_fps": "",
"edt_eff_reversedirection": "",
"edt_eff_fadeintime": "",
"edt_eff_fadeouttime": "",
"edt_eff_repeat": "",
"edt_eff_repeatcount": "",
"edt_eff_colorendtime": "",
"edt_eff_colorstarttime": "",
"edt_eff_colorstart": "",
"edt_eff_colorend": "",
"edt_eff_maintain_end_color": "",
"edt_eff_colorshift": "",
"edt_eff_whichleds": "",
"edt_eff_ledlist": "",
"edt_eff_speed": "",
"edt_eff_fadefactor": "",
"edt_eff_showseconds": "",
"edt_eff_blobcount": "",
"edt_eff_huechange": "",
"edt_eff_basecolorchange": "",
"edt_eff_basecolorchangerate": "",
"edt_eff_basecolorrangeleft": "",
"edt_eff_basecolorrangeright": "",
"edt_eff_brightness": "",
"edt_eff_centerx": "",
"edt_eff_centery": "",
"edt_eff_saturation": "",
"edt_eff_colorevel": "",
"edt_eff_whitelevel": "",
"edt_eff_alarmcolor": "",
"edt_eff_postcolor": "",
"edt_eff_enableshutdown": "",
"edt_eff_length": "",
"edt_eff_frequency": "",
"edt_eff_min_len": "",
"edt_eff_max_len": "",
"edt_eff_height": "",
"edt_eff_offset": "",
"edt_eff_colorHour": "",
"edt_eff_colorMinute": "",
"edt_eff_colorSecond": "",
"edt_eff_colorMarker": "",
"edt_eff_markerWidth": "",
"edt_eff_markerDepth": "",
"edt_eff_markerEnable": "",
"edt_eff_backgroundColor": "",
"edt_eff_countries": "",
"edt_eff_interval": "",
"edt_eff_margin": "",
"edt_eff_customColor": "",
"edt_eff_randomCenter": "",
"edt_eff_enableSecondSwirl": "",
"edt_eff_reverseRandomTime": "",
"edt_append_ns": "",
"edt_append_ms": "",
"edt_append_s": "",
"edt_append_hz": "",
"edt_append_pixel": "",
"edt_append_percent": "",
"edt_append_degree": "",
"edt_append_sdegree": "",
"edt_append_leds": "",
"edt_msg_error_notset": "",
"edt_msg_error_notempty": "",
"edt_msg_error_enum": "",
"edt_msg_error_anyOf": "",
"edt_msg_error_oneOf": "",
"edt_msg_error_not": "",
"edt_msg_error_type_union": "",
"edt_msg_error_type": "",
"edt_msg_error_disallow_union": "",
"edt_msg_error_disallow": "",
"edt_msg_error_multipleOf": "",
"edt_msg_error_maximum_excl": "",
"edt_msg_error_maximum_incl": "",
"edt_msg_error_minimum_excl": "",
"edt_msg_error_minimum_incl": "",
"edt_msg_error_maxLength": "",
"edt_msg_error_minLength": "",
"edt_msg_error_pattern": "",
"edt_msg_error_additionalItems": "",
"edt_msg_error_maxItems": "",
"edt_msg_error_minItems": "",
"edt_msg_error_uniqueItems": "",
"edt_msg_error_maxProperties": "",
"edt_msg_error_minProperties": "",
"edt_msg_error_required": "",
"edt_msg_error_additional_properties": "",
"edt_msg_error_dependency": "",
"edt_msg_button_delete_all": "",
"edt_msg_button_delete_all_title": "",
"edt_msg_button_delete_last": "",
"edt_msg_button_delete_last_title": "",
"edt_msg_button_add_row_title": "",
"edt_msg_button_move_down_title": "",
"edt_msg_button_move_up_title": "",
"edt_msg_button_delete_row_title": "",
"edt_msg_button_delete_row_title_short": "",
"edt_msg_button_collapse": "",
"edt_msg_button_expand": "",
"dashboard_infobox_label_watchedversionbranch": "",
"edt_conf_gen_watchedVersionBranch_title": "",
"edt_conf_gen_watchedVersionBranch_expl": "",
"about_3rd_party_licenses": "",
"general_btn_start": "",
"general_btn_stop": "",
"general_btn_delete": "",
"general_btn_rename": "",
"dashboard_message_global_setting_t": "",
"dashboard_message_global_setting": "",
"conf_general_inst_title": "",
"conf_general_inst_desc": "",
"conf_general_inst_namehead": "",
"conf_general_inst_actionhead": "",
"conf_general_inst_name_title": "",
"conf_general_createInst_btn": "",
"conf_general_inst_renreq_t": "",
"conf_general_inst_delreq_h": "",
"conf_general_inst_delreq_t": "",
"conf_network_net_intro": "",
"conf_network_tok_title": "",
"conf_network_tok_desc": "",
"conf_network_tok_cidhead": "",
"conf_network_tok_lastuse": "",
"conf_network_tok_comment_title": "",
"conf_network_createToken_btn": "",
"conf_network_tok_diaTitle": "",
"conf_network_tok_diaMsg": "",
"conf_network_tok_intro": "",
"edt_conf_net_heading_title": "",
"edt_conf_net_internetAccessAPI_title": "",
"edt_conf_net_internetAccessAPI_expl": "",
"edt_conf_net_ipWhitelist_title": "",
"edt_conf_net_ipWhitelist_expl": "",
"edt_conf_net_ip_itemtitle": "",
"edt_conf_net_apiAuth_title": "",
"edt_conf_net_apiAuth_expl": "",
"edt_conf_net_localApiAuth_title": "",
"edt_conf_net_localApiAuth_expl": "",
"general_chars_needed": "",
"about_3rd_party_licenses_error": "",
"edt_conf_webc_sslport_title": "",
"edt_conf_webc_sslport_expl": "",
"edt_conf_webc_crtPath_title": "",
"edt_conf_webc_crtPath_expl": "",
"edt_conf_webc_keyPath_title": "",
"edt_conf_webc_keyPath_expl": "",
"edt_conf_webc_keyPassPhrase_title": "",
"edt_conf_webc_keyPassPhrase_expl": "",
"remote_effects_label_picture": "",
"dashboard_active_instance": "",
"edt_conf_net_restirctedInternetAccessAPI_title": "",
"edt_conf_net_restirctedInternetAccessAPI_expl": "",
"edt_conf_fw_flat_title": "",
"edt_conf_fw_flat_expl": "",
"edt_conf_fw_flat_itemtitle": "",
"edt_dev_spec_pwmChannel_title": "",
"dashboard_message_default_password_t": "",
"dashboard_message_default_password": "",
"InfoDialog_changePassword_title": "",
"InfoDialog_changePassword_success": "",
"edt_conf_net_localAdminAuth_title": "",
"edt_conf_net_localAdminAuth_expl": "",
"edt_eff_collision_header": "",
"edt_eff_collision_header_desc": "",
"edt_eff_explodeRadius": "",
"edt_dev_spec_printTimeStamp_title": "",
"edt_eff_ledtest_header": "",
"edt_eff_ledtest_header_desc": "",
"update_no_updates_for_branch": "",
"general_speech_sv": "",
"general_speech_nl": "",
"general_speech_pl": "",
"general_speech_ro": "",
"general_btn_saverestart": "",
"general_btn_grantAccess": "",
"general_btn_denyAccess": "",
"conf_leds_layout_cl_topleft": "",
"conf_leds_layout_cl_topright": "",
"conf_leds_layout_cl_bottomleft": "",
"conf_leds_layout_cl_bottomright": "",
"conf_leds_layout_cl_lefttop": "",
"conf_leds_layout_cl_leftmiddle": "",
"conf_leds_layout_cl_leftbottom": "",
"conf_leds_layout_cl_righttop": "",
"conf_leds_layout_cl_rightmiddle": "",
"conf_leds_layout_cl_rightbottom": "",
"conf_network_tok_grantT": "",
"conf_network_tok_grantMsg": "",
"wiz_hue_clientkey": "",
"wiz_hue_e_create_user": "",
"wiz_hue_e_clientkey_needed": "",
"wiz_hue_e_use_groupid": "",
"wiz_hue_e_noegrpids": "",
"wiz_hue_e_nogrpids": "",
"wiz_hue_e_noapisupport": "",
"wiz_hue_e_noapisupport_hint": "",
"wiz_hue_e_title": "",
"wiz_hue_e_intro1": "",
"wiz_hue_e_desc1": "",
"wiz_hue_e_desc2": "",
"wiz_hue_e_desc3": "",
"wiz_hue_e_use_group": "",
"edt_dev_spec_blackLightsTimeout_title": "",
"edt_dev_spec_brightnessThreshold_title": "",
"edt_dev_spec_brightnessMin_title": "",
"edt_dev_spec_brightnessMax_title": "",
"edt_dev_spec_sslReadTimeout_title": "",
"edt_dev_spec_sslHSTimeoutMin_title": "",
"edt_dev_spec_sslHSTimeoutMax_title": "",
"edt_dev_spec_verbose_title": "",
"edt_dev_spec_debugStreamer_title": "",
"edt_dev_spec_debugLevel_title": "",
"edt_dev_spec_restoreOriginalState_title": "",
"edt_dev_spec_useEntertainmentAPI_title": "",
"edt_dev_spec_clientKey_title": "",
"edt_dev_spec_groupId_title": "",
"edt_dev_spec_panelorganisation_title": "",
"edt_dev_spec_order_top_down_title": "",
"edt_dev_spec_order_left_right_title": "",
"edt_dev_spec_panel_start_position": "",
"edt_conf_enum_dl_nodebug": "",
"edt_conf_enum_dl_error": "",
"edt_conf_enum_dl_statechange": "",
"edt_conf_enum_dl_informational": "",
"edt_conf_enum_dl_verbose": "",
"edt_conf_enum_custom": "",
"edt_conf_enum_bottom_up": "",
"edt_conf_enum_top_down": "",
"edt_conf_enum_right_left": "",
"edt_conf_enum_left_right": "",
"edt_conf_v4l2_input_title": "",
"edt_conf_v4l2_input_expl": "",
"edt_conf_v4l2_resolution_title": "",
"edt_conf_v4l2_resolution_expl": "",
"edt_conf_v4l2_framerate_title": "",
"edt_conf_v4l2_framerate_expl": "",
"edt_eff_plasma_header": "",
"edt_eff_plasma_header_desc": "",
"edt_append_percent_h": "",
"edt_append_percent_v": "",
"conf_leds_layout_ptln": "",
"conf_leds_layout_ptlh": "",
"conf_leds_layout_ptlv": "",
"conf_leds_layout_ptl": "",
"conf_leds_layout_ptr": "",
"conf_leds_layout_pbl": "",
"conf_leds_layout_pbr": "",
"edt_dev_spec_chanperfixture_title": "",
"dashboard_message_do_not_show_again": ""
"remote_input_status": "Stare/Acțiune"
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More