diff --git a/.ci/ci_build.sh b/.ci/ci_build.sh index 00538255..d74d4144 100755 --- a/.ci/ci_build.sh +++ b/.ci/ci_build.sh @@ -1,14 +1,8 @@ #!/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:]')" CI_BUILD_DIR="$GITHUB_WORKSPACE" else diff --git a/.ci/ci_install.sh b/.ci/ci_install.sh index 1b262034..86c6ffd4 100755 --- a/.ci/ci_install.sh +++ b/.ci/ci_install.sh @@ -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 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..cd6a2a74 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: "https://www.paypal.me/HyperionAmbi" diff --git a/.github/pr_comment.yml b/.github/pr_comment.yml index 40ad4f39..34705602 100644 --- a/.github/pr_comment.yml +++ b/.github/pr_comment.yml @@ -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 + diff --git a/.github/workflows/apt.json b/.github/workflows/apt.json new file mode 100644 index 00000000..622a10e6 --- /dev/null +++ b/.github/workflows/apt.json @@ -0,0 +1,82 @@ +{ + "include": + [ + { + "distribution": "Bionic", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg, libcec4", + "description": "Ubuntu 18.04 (Bionic Beaver) (amd64)" + }, + { + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec4", + "description": "Ubuntu 20.04 (Focal Fossa) (amd64)" + }, + { + "distribution": "Groovy", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6", + "description": "Ubuntu 20.10 (Groovy Gorilla) (amd64)" + }, + { + "distribution": "Hirsute", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6", + "description": "Ubuntu 21.04 (Hirsute Hippo) (amd64)" + }, + { + "distribution": "Impish", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6", + "description": "Ubuntu 21.10 (Impish Indri) (amd64)" + }, + { + "distribution": "Stretch", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl1.0-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg0, libcec4", + "description": "Debian 9.x (Stretch) (amd64)" + }, + { + "distribution": "Stretch", + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg0, libcec4", + "description":"Debian 9.x (Stretch) (armhf)" + }, + { + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec4", + "description": "Debian 10.x (Buster) (amd64)" + }, + { + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec4", + "description": "Debian 10.x (Buster) (armhf)" + }, + { + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec6", + "description": "Debian 11.x (Bullseye) (amd64)" + }, + { + "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, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev", + "package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec6", + "description": "Debian 11.x (Bullseye) (armhf)" + } + ] +} diff --git a/.github/workflows/apt.yml b/.github/workflows/apt.yml new file mode 100644 index 00000000..87d8a58b --- /dev/null +++ b/.github/workflows/apt.yml @@ -0,0 +1,111 @@ +name: Hyperion APT Build +on: [workflow_call] + +jobs: + setup: + name: Setup APT build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set APT matrix + id: apt-ppa + run: | + APT=$(echo $(cat .github/workflows/apt.json) | jq --compact-output .) + echo "::set-output name=apt::$APT" + 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@v2 + with: + submodules: true + + - name: Generate environment variables + run: | + tr -d '\n' < .version > temp && mv temp .version + VERSION=$(cat .version) + echo VERSION=${VERSION} >> $GITHUB_ENV + echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV + 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 '3.0 (native)' > 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 && \ + tar -cJf ../hyperion_${{ env.VERSION }}~${{ env.DISTRIBUTION }}.orig.tar.xz . && \ + debuild --no-lintian -uc -us && \ + cp ../hyperion_* /deploy" + + - name: Upload package artifact + if: startsWith(github.event.ref, 'refs/tags') + uses: actions/upload-artifact@v2 + with: + path: deploy + retention-days: 1 + + publish: + name: Publish APT packages + if: startsWith(github.event.ref, 'refs/tags') + needs: [setup, build] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v3.1.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@v2.0.10 + + - name: Include artifacts into the package source + run: | + for file in artifact/*.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@4.1.0 + 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 diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index abfd9782..95ab9fd7 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -1,5 +1,6 @@ name: Clean artifacts +# Run cleanup workflow at the end of every day on: schedule: - cron: '0 0 * * *' diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 00000000..76624460 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,139 @@ +name: Nightly build + +# Create nightly builds at the end of every day +on: + schedule: + - cron: '0 0 * * *' + +jobs: + check: + name: Compare local <-> nightly + if: github.repository_owner == 'hyperion-project' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - 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 "::set-output name=commit-has-changed::false" + else + echo "::set-output name=commit-has-changed::true" + 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@v2 + - name: Set nightly matrix + id: nightly-ppa + run: | + NIGHTLY=$(echo $(cat .github/workflows/apt.json) | jq --compact-output .) + echo "::set-output name=nightly::$NIGHTLY" + 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@v2 + with: + submodules: true + + - 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 + echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV + 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 '3.0 (native)' > 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 && \ + tar -cJf ../hyperion_${{ env.VERSION }}~${{ env.DISTRIBUTION }}.orig.tar.xz . && \ + debuild --no-lintian -uc -us && \ + cp ../hyperion_* /deploy" + + - name: Upload package artifact + uses: actions/upload-artifact@v2.2.4 + with: + path: deploy + retention-days: 1 + + publish: + name: Publish nightly packages + needs: [setup, build] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v3.1.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@v2.0.10 + + - 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@4.1.0 + 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@v1 + with: + name: artifact + failOnError: false diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index a5c462e9..a308b78a 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -36,12 +36,12 @@ jobs: with: submodules: true - # 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 @@ -63,7 +63,7 @@ jobs: # Upload artifacts - name: Upload artifacts - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v2 with: name: ${{ matrix.dockerImage }} path: ${{ matrix.dockerImage }} @@ -82,12 +82,12 @@ jobs: with: submodules: true - # 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 @@ -106,11 +106,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@v2 with: name: macOS path: macOS @@ -131,12 +131,12 @@ jobs: with: submodules: true - # 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: Cache Qt uses: actions/cache@v2 @@ -170,6 +170,11 @@ jobs: run: | choco install --no-progress python nsis openssl 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 run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat" @@ -190,34 +195,15 @@ jobs: # Upload artifacts - name: Upload artifacts - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v2 with: name: windows path: windows -###################### -#### Documentation ### -###################### +########################## +###### APT workflow ###### +########################## - 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 + apt_build: + name: APT Build + uses: hyperion-project/hyperion.ng/.github/workflows/apt.yml@master diff --git a/.github/workflows/push-master.yml b/.github/workflows/push-master.yml index 647e5f99..4521d9b2 100644 --- a/.github/workflows/push-master.yml +++ b/.github/workflows/push-master.yml @@ -1,17 +1,16 @@ name: Hyperion CI Build on: push: - branches-ignore: - - 'gh-pages' - - 'docker-ci' + branches: + - '**' tags: - '*' jobs: -###################### -###### Linux ######### -###################### +################### +###### Linux ###### +################### Linux: name: ${{ matrix.dockerName }} @@ -38,7 +37,7 @@ jobs: with: submodules: true - # build process + # Build process - name: Build packages env: DOCKER_IMAGE: ${{ matrix.dockerImage }} @@ -48,16 +47,16 @@ 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 with: path: deploy/Hyperion-* -###################### -###### macOS ######### -###################### +################### +###### macOS ###### +################### macOS: name: macOS @@ -67,28 +66,28 @@ jobs: with: submodules: true - # 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 with: path: build/Hyperion-* -###################### -###### Windows ####### -###################### +##################### +###### Windows ###### +##################### windows: name: Windows @@ -134,6 +133,11 @@ jobs: run: | choco install --no-progress python nsis openssl 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 run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat" @@ -145,74 +149,32 @@ 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 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 - # generate environment variables - - name: Generate environment variables from version and tag + # Generate environment variables + - name: Generate environment variables from .version and tag run: | echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV - echo "VERSION=$(tr -d '\n' < version)" >> $GITHUB_ENV - echo "preRelease=false" >> $GITHUB_ENV - - # 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 "preRelease=true" >> $GITHUB_ENV + echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV # Download artifacts from previous build process - name: Download artifacts @@ -220,7 +182,7 @@ jobs: 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: @@ -228,6 +190,14 @@ jobs: tag_name: ${{ env.TAG }} files: "artifacts/**" draft: true - prerelease: ${{ env.preRelease }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +########################## +###### APT workflow ###### +########################## + + apt_build: + name: APT Build + needs: [Linux, macOS, windows] + uses: hyperion-project/hyperion.ng/.github/workflows/apt.yml@master diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 125c29a3..bf4af932 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,11 +5,12 @@ on: 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@v1 + uses: peter-evans/repository-dispatch@v1.1.3 if: ${{ github.repository_owner == 'hyperion-project'}} with: repository: hyperion-project/HyperBian diff --git a/.gitignore b/.gitignore index 0713ddb3..40563443 100644 --- a/.gitignore +++ b/.gitignore @@ -27,5 +27,11 @@ libsrc/flatbufserver/hyperion_request_generated.h *.kdev* # Visual Studio 2015/2017/2019 cache/options directory -.vs/ +# Ignore +.vs/* CMakeSettings.json +# Allow +!.vs/launch.vs.json + +# LedDevice 'File' output +NULL diff --git a/.lgtm.yml b/.lgtm.yml new file mode 100644 index 00000000..09e32b46 --- /dev/null +++ b/.lgtm.yml @@ -0,0 +1,27 @@ +extraction: + cpp: + prepare: + packages: + - "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" + - "libturbojpeg0-dev" + - "libssl-dev" + - "zlib1g-dev" diff --git a/.version b/.version new file mode 100644 index 00000000..3bad7881 --- /dev/null +++ b/.version @@ -0,0 +1 @@ +2.0.12 \ No newline at end of file diff --git a/.vs/launch.vs.json b/.vs/launch.vs.json new file mode 100644 index 00000000..37627ab1 --- /dev/null +++ b/.vs/launch.vs.json @@ -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 + } + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json index ad6f92cc..9f351e73 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -27,12 +27,24 @@ "name": "(Windows) hyperiond", "type": "cppvsdbg", "request": "launch", - "program": "${workspaceFolder}/build/bin/Debug/hyperiond.exe", + "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/hyperiond.app/Contents/MacOS/hyperiond", + "args": ["-d"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "console": "internalConsole", + "MIMode": "lldb" } ] } diff --git a/3RD_PARTY_LICENSES b/3RD_PARTY_LICENSES index 76ea8ba1..ad7b48de 100644 --- a/3RD_PARTY_LICENSES +++ b/3RD_PARTY_LICENSES @@ -704,6 +704,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 ===== @@ -739,11 +797,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 =========== @@ -856,8 +943,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: @@ -1377,7 +1464,7 @@ tinkerforge Copyright (C) 2012-2013 Matthias Bolte Copyright (C) 2011 Olaf Lüke - + Redistribution and use in source and binary forms of this file, with or without modification, are permitted. @@ -1415,7 +1502,7 @@ Pulse-Eight Licensing http://www.pulse-eight.net/ - + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 @@ -1696,4 +1783,3 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e42638..480bc72f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ 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.9...HEAD) +## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.11...HEAD) ### Breaking @@ -16,6 +16,187 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +## [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 everybody’s 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
`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
+ 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) @@ -94,8 +275,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - AtmoOrb Fix (#988) - Return TAN to API requests whenever possible (#1002) -### Removed - ## [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) @@ -258,3 +437,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 + diff --git a/CMakeLists.txt b/CMakeLists.txt index 62200bb2..5f96c6a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,15 @@ message( STATUS "CMake Version: ${CMAKE_VERSION}" ) 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) @@ -25,23 +30,27 @@ 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) +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() -else() - set(Python_ADDITIONAL_VERSIONS 3.5) - find_package( PythonInterp 3.5 REQUIRED ) endif() # Set build variables SET ( DEFAULT_AMLOGIC OFF ) +SET ( DEFAULT_BOBLIGHT ON ) SET ( DEFAULT_DISPMANX OFF ) +SET ( DEFAULT_DX OFF ) +SET ( DEFAULT_MF OFF ) SET ( DEFAULT_OSX OFF ) SET ( DEFAULT_QT ON ) SET ( DEFAULT_X11 OFF ) SET ( DEFAULT_XCB OFF ) +SET ( DEFAULT_V4L2 OFF ) SET ( DEFAULT_WS281XPWM OFF ) SET ( DEFAULT_AVAHI ON ) SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON ) @@ -50,6 +59,8 @@ SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF ) SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF ) SET ( DEFAULT_TESTS OFF ) SET ( DEFAULT_EXPERIMENTAL OFF ) +SET ( DEFAULT_CEC OFF ) +SET ( DEFAULT_DEPLOY_DEPENDENCIES ON ) IF ( ${CMAKE_SYSTEM} MATCHES "Linux" ) SET ( DEFAULT_V4L2 ON ) @@ -60,6 +71,7 @@ IF ( ${CMAKE_SYSTEM} MATCHES "Linux" ) SET ( DEFAULT_CEC ON ) ELSEIF ( WIN32 ) SET ( DEFAULT_DX ON ) + SET ( DEFAULT_MF ON ) ELSE() SET ( DEFAULT_V4L2 OFF ) SET ( DEFAULT_FB OFF ) @@ -109,6 +121,8 @@ MACRO(FIRSTSUBDIR result curdir) 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/qt") FIRSTSUBDIR(SUBDIRPY "/usr/local/opt/python3/Frameworks/Python.framework/Versions") @@ -120,9 +134,14 @@ elseif ( "${PLATFORM}" MATCHES "rpi" ) SET ( DEFAULT_DISPMANX ON ) SET ( DEFAULT_WS281XPWM ON ) elseif ( "${PLATFORM}" STREQUAL "amlogic" ) - SET ( DEFAULT_AMLOGIC ON ) + SET ( DEFAULT_AMLOGIC ON ) +elseif ( "${PLATFORM}" STREQUAL "amlogic-dev" ) + SET ( DEFAULT_AMLOGIC ON ) + SET ( DEFAULT_DISPMANX OFF ) + SET ( DEFAULT_QT OFF ) + SET ( DEFAULT_CEC OFF ) elseif ( "${PLATFORM}" STREQUAL "amlogic64" ) - SET ( DEFAULT_AMLOGIC ON ) + SET ( DEFAULT_AMLOGIC ON ) elseif ( "${PLATFORM}" MATCHES "x11" ) SET ( DEFAULT_X11 ON ) SET ( DEFAULT_XCB ON ) @@ -146,20 +165,25 @@ STRING( REPLACE "-DEV" "" PLATFORM_DEFINE "${PLATFORM_DEFINE}" ) ADD_DEFINITIONS( ${PLATFORM_DEFINE} ) # set the build options + +option(ENABLE_BOBLIGHT "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT} ) +message(STATUS "ENABLE_BOBLIGHT = ${ENABLE_BOBLIGHT}") + 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}") - if (ENABLE_AMLOGIC) SET(ENABLE_FB ON) else() 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_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX} ) +message(STATUS "ENABLE_DISPMANX = ${ENABLE_DISPMANX}") + +option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} ) message(STATUS "ENABLE_OSX = ${ENABLE_OSX}") option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} ) @@ -171,6 +195,9 @@ message(STATUS "ENABLE_TINKERFORGE = ${ENABLE_TINKERFORGE}") option(ENABLE_V4L2 "Enable the V4L2 grabber" ${DEFAULT_V4L2}) message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}") +option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF}) +message(STATUS "ENABLE_MF = ${ENABLE_MF}") + option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} ) message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}") @@ -189,7 +216,7 @@ message(STATUS "ENABLE_X11 = ${ENABLE_X11}") option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB}) message(STATUS "ENABLE_XCB = ${ENABLE_XCB}") -option(ENABLE_QT "Enable the qt grabber" ${DEFAULT_QT}) +option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT}) message(STATUS "ENABLE_QT = ${ENABLE_QT}") option(ENABLE_DX "Enable the DirectX grabber" ${DEFAULT_DX}) @@ -204,6 +231,9 @@ message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}") option(ENABLE_EXPERIMENTAL "Compile experimental features" ${DEFAULT_EXPERIMENTAL}) message(STATUS "ENABLE_EXPERIMENTAL = ${ENABLE_EXPERIMENTAL}") +option(ENABLE_DEPLOY_DEPENDENCIES "Deploy with dependencies" ${DEFAULT_DEPLOY_DEPENDENCIES}) +message(STATUS "ENABLE_DEPLOY_DEPENDENCIES = ${ENABLE_DEPLOY_DEPENDENCIES}") + SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf ) SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf ) @@ -212,10 +242,7 @@ 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} -) +SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS}) EXECUTE_PROCESS ( COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES} @@ -239,7 +266,7 @@ ENDIF () # 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 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 ) @@ -303,7 +330,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") # 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 # - # Alternatively, use Qt5_BASE_DIR environment variable to point to Qt version to be used + # Alternatively, use Qt5_BASE_DIR environment variable to point to Qt version to be used # In MSVC19 add into CMakeSettings.json # # "environments": [ @@ -333,14 +360,14 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") message(STATUS "Add ${qt_module_path} to CMAKE_MODULE_PATH") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${qt_module_path}") - + #message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") #message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}") # Search for DirectX9 if (ENABLE_DX) find_package(DirectX9 REQUIRED) - endif() + endif(ENABLE_DX) endif() @@ -349,17 +376,19 @@ if (NOT WIN32) include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake) endif() -# Don't create new dynamic tags (RUNPATH) -if (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags") -endif() +if (ENABLE_DEPLOY_DEPENDENCIES) + # Don't create new dynamic tags (RUNPATH) + if (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + 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) + # 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 () endif () # add QT5 dependency @@ -393,31 +422,6 @@ 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() diff --git a/CrossCompileHowto.md b/CrossCompileHowto.md deleted file mode 100644 index 4617370a..00000000 --- a/CrossCompileHowto.md +++ /dev/null @@ -1,93 +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 libqt5svg5-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 libqt5svg5-dev libqt5sql5-sqlite 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 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/7.4-2019.02/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 https://download.qt.io/new_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. - - diff --git a/HyperionConfig.h.in b/HyperionConfig.h.in index 00537e71..9b098a73 100644 --- a/HyperionConfig.h.in +++ b/HyperionConfig.h.in @@ -1,48 +1,54 @@ // Generated config file -// Define to enable the dispmanx grabber +// Define to enable the DispmanX grabber #cmakedefine ENABLE_DISPMANX -// Define to enable the v4l2 grabber +// Define to enable the V4L2 grabber #cmakedefine ENABLE_V4L2 -// Define to enable the framebuffer grabber +// Define to enable the Media Foundation grabber +#cmakedefine ENABLE_MF + +// 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 OSX grabber #cmakedefine ENABLE_OSX -// Define to enable the x11 grabber +// Define to enable the X11 grabber #cmakedefine ENABLE_X11 -// Define to enable the xcb grabber +// Define to enable the XCB grabber #cmakedefine ENABLE_XCB -// Define to enable the qt grabber +// Define to enable the Qt grabber #cmakedefine ENABLE_QT // Define to enable the DirectX grabber #cmakedefine ENABLE_DX -// Define to enable the spi-device +// Define to enable the SPI-Device #cmakedefine ENABLE_SPIDEV -// Define to enable the ws281x-pwm-via-dma-device using jgarff's library +// Define to enable the WS281x-PWM-via-DMA-device using jgarff's library #cmakedefine ENABLE_WS281XPWM -// Define to enable the tinkerforge device +// Define to enable the Tinkerforge device #cmakedefine ENABLE_TINKERFORGE -// Define to enable avahi +// Define to enable AVAHI #cmakedefine ENABLE_AVAHI -// Define to enable cec +// Define to enable CEC #cmakedefine ENABLE_CEC -// Define to enable the usb / hid devices +// Define to enable boblight server +#cmakedefine ENABLE_BOBLIGHT + +// Define to enable the USB / HID devices #cmakedefine ENABLE_USB_HID // Define to enable profiler for development purpose @@ -51,6 +57,9 @@ // Define to enable experimental features #cmakedefine ENABLE_EXPERIMENTAL +// 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}" diff --git a/Installation.md b/Installation.md new file mode 100644 index 00000000..57e14503 --- /dev/null +++ b/Installation.md @@ -0,0 +1,46 @@ + +# Installation + +This page contains general installation steps for Hyperion. For Linux please follow the instructions below. For Windows 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 Stretch/Raspberry Pi OS and later (armhf) +- Debian Stretch (9) and later (armhf/x64) +- Ubuntu 18.04 and later (x64) + +*** + +### Install Hyperion: +1. Add Hyperion’s official GPG key: +```bash +wget -qO- https://apt.hyperion-project.org/hyperion.pub.key | sudo gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg +``` + +2. 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 +``` + +3. 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 +``` diff --git a/LICENSE b/LICENSE index 49f17f41..6f152fa7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2014-2020 Hyperion Project +Copyright (c) 2014-2021 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 diff --git a/README.md b/README.md index 7a3ec484..91922902 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ -![Hyperion](https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/assets/webconfig/img/hyperion/hyperionlogo.png) +![Hyperion](doc/logo.png) [![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases)](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/) +[![made-with-love](https://img.shields.io/badge/Made%20with-♥-ff0000.svg)](#) ## About Hyperion @@ -18,7 +19,7 @@ * 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 If you need further support please open a topic at the forum!
@@ -32,10 +33,9 @@ Contributions are welcome! Feel free to join us! We are looking always for peopl For an example, you can participate in the translation.
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](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) @@ -50,7 +50,7 @@ Covers these topics (WorkInProgress) Released and unreleased changes at [Changelog.md](CHANGELOG.md) ## Building -See [CompileHowto](CompileHowto.md) and [CrossCompileHowto](CrossCompileHowto.md). +See [CompileHowto](doc/development/CompileHowto.md). ## Download Alpha releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases) diff --git a/assets/firmware/arduino/adalight/adalight.ino b/assets/firmware/arduino/adalight/adalight.ino index 30a41c2a..5172129a 100644 --- a/assets/firmware/arduino/adalight/adalight.ino +++ b/assets/firmware/arduino/adalight/adalight.ino @@ -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. } - diff --git a/assets/firmware/arduino/network_bridge/udpraw_serialadalight.py b/assets/firmware/arduino/network_bridge/udpraw_serialadalight.py index b69efe20..b46597a9 100755 --- a/assets/firmware/arduino/network_bridge/udpraw_serialadalight.py +++ b/assets/firmware/arduino/network_bridge/udpraw_serialadalight.py @@ -138,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: @@ -153,7 +153,7 @@ 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(('0.0.0.0', args.localport)) + srv.bind(('0.0.0.0', args.localport)) # lgtm [py/bind-socket-all-network-interfaces] try: intentional_exit = False @@ -165,14 +165,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 diff --git a/assets/webconfig/apple-touch-icon.png b/assets/webconfig/apple-touch-icon.png index 48342175..f4244271 100644 Binary files a/assets/webconfig/apple-touch-icon.png and b/assets/webconfig/apple-touch-icon.png differ diff --git a/assets/webconfig/content/about.html b/assets/webconfig/content/about.html index 665dbc4b..27a962b4 100644 --- a/assets/webconfig/content/about.html +++ b/assets/webconfig/content/about.html @@ -1,106 +1,75 @@
- -
-
-
+ +
+
+
-
- -
+
+ +
diff --git a/assets/webconfig/content/conf_colors.html b/assets/webconfig/content/conf_colors.html index e3972070..0ec85948 100644 --- a/assets/webconfig/content/conf_colors.html +++ b/assets/webconfig/content/conf_colors.html @@ -2,11 +2,23 @@
- -
+ + +
+
+ +
+
+ +
- diff --git a/assets/webconfig/content/conf_effect.html b/assets/webconfig/content/conf_effect.html index 704172d8..282cdf1f 100644 --- a/assets/webconfig/content/conf_effect.html +++ b/assets/webconfig/content/conf_effect.html @@ -2,6 +2,19 @@
+ +
+
+ +
+
+
diff --git a/assets/webconfig/content/conf_general.html b/assets/webconfig/content/conf_general.html index 50a439c4..161a551c 100644 --- a/assets/webconfig/content/conf_general.html +++ b/assets/webconfig/content/conf_general.html @@ -6,7 +6,7 @@
-
+
diff --git a/assets/webconfig/content/conf_grabber.html b/assets/webconfig/content/conf_grabber.html index 2865dc03..1b50ba3f 100644 --- a/assets/webconfig/content/conf_grabber.html +++ b/assets/webconfig/content/conf_grabber.html @@ -2,7 +2,7 @@
- +
diff --git a/assets/webconfig/content/conf_instcapture.html b/assets/webconfig/content/conf_instcapture.html new file mode 100644 index 00000000..73a8bf75 --- /dev/null +++ b/assets/webconfig/content/conf_instcapture.html @@ -0,0 +1,24 @@ + +
+
+
+ + +
+
+ +
+
+ +
+
+
+
+ + diff --git a/assets/webconfig/content/conf_leds.html b/assets/webconfig/content/conf_leds.html index eca4412f..240b06fc 100755 --- a/assets/webconfig/content/conf_leds.html +++ b/assets/webconfig/content/conf_leds.html @@ -1,374 +1,404 @@ + + + + Hyperion - LED Device Configuration +
- - + -
+
+
+ +
+
- -
- - -
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
LEDs
+
+ + + +
LEDs
+
+ + + +
LEDs
+
+ + + +
LEDs
+
+ + + +
LEDs
+
+ + + +
+ + + +
+ + +
+ + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
%
+
+ + + +
%
+
+ + + +
%
+
+ + + +
%
+
+ + + +
%h
+
+ +
%v
+
+ + + +
%
+
+ +
%
+
+ + + +
%
+
+ +
%
+
+ + + +
%
+
+ +
%
+
+
+
+
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + +
LEDs
+
+ + + +
LEDs
+
+ + + +
+ + + +
+
+ +
+
+
+
+

+ Blacklist LEDs +

+
+
+
+
+
+ +
+
+
+ +
+
+

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.

+
+
+ +
+
+
+
+
+
+
+

LED Layout preview

+
+
+

+

+

+
+
+ +
+
+
+ +
+
+
+
+
+ diff --git a/assets/webconfig/content/conf_logging.html b/assets/webconfig/content/conf_logging.html index a9995b2f..768f9908 100644 --- a/assets/webconfig/content/conf_logging.html +++ b/assets/webconfig/content/conf_logging.html @@ -1,21 +1,22 @@
-
-
- -
-
-
-
-
-
-

Bericht

- -
- -
-
-
-
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
diff --git a/assets/webconfig/content/conf_network.html b/assets/webconfig/content/conf_network.html index 6b370360..ab4b7c33 100644 --- a/assets/webconfig/content/conf_network.html +++ b/assets/webconfig/content/conf_network.html @@ -1,12 +1,12 @@
- +
-
+
@@ -34,4 +34,4 @@
- \ No newline at end of file + diff --git a/assets/webconfig/content/connection_lost.html b/assets/webconfig/content/connection_lost.html index 760f46d2..d1a1c697 100644 --- a/assets/webconfig/content/connection_lost.html +++ b/assets/webconfig/content/connection_lost.html @@ -1,6 +1,6 @@
- Redefine ambient light! + Redefine ambient light!

Lost connection to Hyperion service!


@@ -29,6 +29,15 @@ var count = 1; var reconnectInterval = 4000; var connURL = window.location.protocol+"//"+window.location.hostname+":"+window.jsonPort+window.location.pathname+window.location.hash; + +if($('body').css("background-color") == "rgb(33, 33, 33)") { + // Dark Mode (darkMode.css:3) + document.getElementById("hyperion").src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAB4CAMAAAAzDfCvAAADAFBMVEVHcEz///////////////////+96M3////////////////////////5///+///////////////////////////////////////jD03n2AHfAYb///////8B+9H///////9Zvxia79P9///t9AL////Evv7/////////////Dw3/JRD/////Ay7d/fj08wEY7/wSE/r///+YBMtC0DQZEvtKyCYA+fFRuxH/DQSVBMwICPkF+ZoA+OwA8PyjE8wJIfzj++hWwBb/////////CQr/EBL///+XBMzy+wL0AI//BwjbvfV8A9f39gAA9vgA7/v///+++P8U63D+AGhlww7wAJkHGvwsDvMA9OMA+u9MwhdLwBsJ9In///////7/////EQX3+gK71P/ZAKenAcCMDNAB9bZQvxj/FQc00joE96CbA8v9AHD/BQ8C/aVOAej///+h4Ad+A9YA9s1XwRbyAJj/DQyiBMnmAKf///8l3lMa6GUC/aMA+ulzAtoAkvz/nAK46wT9AUzDArz/Axkg31bl+gQA+vT9ksAb5F8A7Pz////72wPz+4m+ALRQwgz/mYoA+PjMArgA/uEcqPz/laT/AixewhQBafv7lwc4zjTwAJ37+f/4AJBzANQ2zDX/AU5HCuwnAPT/VwT+lQX/qQP9lwf9IQDlAKnWAbPJArqyA8PzkdYA3vz/ATJMAej9XwjikeIB+7mH1hD/AGFpCuEE+5r6tQM1AOrJ8gsAovwAZfz884j+ABb+WwbD7wAAq/r9zwUKpPkA/cXG8gf/AHgp1EIKcPn///8Ac/mc4wD6ZAAKPvp10gCK1Qv/AGfU9wf/VATR8Y/+0gPh943i4v8Kz/v/AEEAPvqo5AlWAN+n5Q+A0A226wub3gzC65D6AI/9sIu45pDXlen/AGX////8w4v74IrZ2P+Oi/727fv80ovj4/9U8fz+UE3C7LOc23HS/P62t//bs/L16/zKfedva/7b3f/67v3////6/v3u7v717f3t+//s9f71/fMldEOMAAAA/nRSTlMADGJD7woBXkuP81JxBSgs6OK0/PglFBsEBgnNPRWfdAQgZU4hRzVrqi4WRx7+IQpigxwT3zMwDA4RwDvIIDU1/VzGl5hX21WI6kVMJ92V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"; +} else { + // Light Mode + document.getElementById("hyperion").src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAB4CAMAAAAzDfCvAAADAFBMVEVHcExAQEBFSENAQECwqUVAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQD9AQEBAQEBAQEBAQEBAQEBAQEDbAnVAQEBAQEBAQED7DVIzOHH8DFIvj3I/REL06wFUwhhAPz9AQUEC+sP/PQNAQEBAQEBFyCoN8bFAP0JAQEBgZDYXEvwA+fT/HQpbuwr09gH/BhIA+u8PB/g+zDJAQED/ERJAQECmBMdcwxT/IAg4VlIA/Pf0+gFMXjh8A9kQD/s5Nl4MF/yRBM8A7/oA9P4D+rwK+ZkvZ3AQC/9MMGn/CBVYwRUE+pwA+/cA8vyeA8o2Ql62AstJvhkA/eg2VF2PBNCKBNT5/ARAQEA/QkJAQEAE+50B/an2+gOaA9OUA9JexRb9AIzSAbU61TsA+fb/Cgv9AHRhxBOKA9LKAbmOBND/pQIA+tRENloB+d4X8Hfd/wr/Ehf/DxlMAO/eAK3xAJzcAa6YJU74/AGNI2xzI33/CRAk20/7/QJo0xIe4FlJwiH/AHj/BhAD/KIA+/HE+A5lOzWA2RJmWTZrAeG97gUq41c3BeZJxCgAaf/OAcb/AjA+APKrA8lkAOf/Ak3/AGf/AiCrA8Ws7hD/Dg3/FQ7/lQnyAJoc5mP0AJdyAOL/PwaP1QdAAO1mSTb+hgQAafxBTz9UAOcAPP8Ae/4ATf+aJS//AGUAuf/2AJbIArr/uQgA+vf/AGT/cgmt6Q7T9wn/BxGP2Q6f4AnG8gYAxP8s1ka16gMBVPsAkvvY+QYf5WEAs//kAbr/AW7+ALEAif8vL3P+XAUA/NIA5v+a3QsL9on9zgUAx/3/xgMA+fIAp/yN4hT9eQf/Sggr0j/9jgX/AVf+TQb/AUS47Ar+3AP/3AUC+7BGOFT/2Qf8owf+uAU7S00Pxc9lI4RJJSUzSSojHqEiH6E4OVVAQkhAQEBHSCU6SCtGLi9BOTxIOicqKEc3KkVLJSAqTCZCLz4fSzMnNUc8VUcaS0YmQUdERDIe3CEOAAAA73RSTlMAWQMkAWk2T17T3jKi9Ajk24MsG4vr/bAQcQRAxwsGWhoc/Q4NFEcZC9fvFwJ3+f0xWCUGLxIy3jSVNbsRREb+EWD5K5b9Yj5DCO3tXcBcVl0/myEZ/c8lh/gjCuh+O2OSZryfinLrt9JynECKbJFSKdL76enfiKfAPN7T+pL783qG16VlndSzt7bb97/9eynnXL4v49jVtLLla8hb1Wxi1m+2mp67Iov8U1z9S9zUvuyzwLpp3MiUzre5k6FQWqKlDJSGkdIn6+zwsvl3rYh+0bhuWtlP1arQUYXWm8CJkdXS9OezjP3B3F5e1aThXYNFf50AAAvXSURBVHja7Z0JYBRXGYAnuxs2m2zuzW5CNkdbdsMGsoVQYkhCCgQIVwlHCpSYpHIVKGeLiYBWaKBRW7EJICJIFGlrBQUVKmfBKrRWC609tGJrQa09LBvCkWpt43tvZja7O/dBGOT/cm0y82bezDf/zD//zE4oCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JBnwT0ivwgf7QE/8wHFTYePSKsyRtFuKU3IjtI3yC39b1NhF9102dQEJPJ1B/WqdHBvrHhwZjc3NzC3ELEssJlLHcsu4PDtxieZOj3ZD9EHwQWD9aNHue9s7HwXKy6BFFeUl5e/nT50zSvEoa/OjyUZ4c/y3AMM/TYUERxcfH06dOJ+UEmWK1Gl46VY+Hl5VVVVW1tbb+n+TPiH5i/Yr7C8huGtxFn3j6DmTt37qRJk44R88g7SDe+9Oy+g5FyZLytbceaNQ0NDX/B/BHzd8wriFmvzApyeNZhxKHDhxBHDx0lnFm0aBExP3QosQ4JndGlozgvQcp3rGk4cmThwsYnMAefOHjw4PcRBw4ceAfx8DsP03wR8w3M9xCH3jj0GKLpsaajTdg7sX5jSU/QPMKNmMehQEfOkfKFyHgzEv4nTLfzA3/DfL6boHes/Q0MEd/UtB5rH1o8vd+g67AcpT6bzRfDMyAFDbD5UoTa2ZPwYCvfIDduGZsq1DKdDA/BXeqoN8voanJEOxafXaSRK7SRz+Z2OWLkzMtE1ksUR3puIXaOgrx536MMP2L4JsPtt6PPCEbgjxHkC7F7xIjWpvXrsXUU6hHzMJOOZvD0yYq75NYjmPwBRC3PgDo8IFAn1M5LBqfxDCkgQ1yCc/QE+CiNkuyqKyBArEijNHXzMpERC7jSS8rbkPPG5kc//SzIJ599wnLlCvrkcvXK1QiwdRzqHOlxdB95YiaaDNBDeiyeEN921YvMopeEgnru6orHf3dmCTZMj+dX506R6KpdSLpbpJGNv0WclPREPFo0R3phSdWOBuR836cB9TidzqsjWltRqL9ZPL1PxDE9RXCZYkiYXVfpHoFQr+WNERnSAwGrSulpiqUHAlGqpA9Ge/c1RxqbtUlH/Ht3a+sJFOqC0jnzNoR0aghv3xLI8SKfkpLuSnaw2N3sqsiUlp7U3S5ItJR0d7CRyyZvXsLS2xoWNm/bpkX6JSJ9Pgr1teigLiQ9kG5E6fx6HaRZjKT0sGTBXEtHvzNdUrpd4fLZIpfPnEyvU3+COuk7GhpZ6Y44VXh3E+nzW0+sXScivdSI0pmMLXxHni6ZWTHSI3avqTaJ9I+V7lIjPTk8PyZCAw7l0rMHF1btONK4bdtmIj1K5TrffYlIn4+kv1ksKJ0zeUNIpzPjeBN3n5+pWDqzlgPmHpBOpfq5HZcpvQQd0pu3baalR6tb5bfcyko/gTK5foLSI/dFxpAeFYg83/NIZtNC0pn5JfeEdCqDzMurTvrCt3SR/vjj83eeWCsmPXJZjSGdSorcIOkEO0WNdMottb3oJz3LL7WBCRzTc0uqGhrf2rx565e1Sv9vUHp/HunxTp7N0iDSMyOiMzUgw4uQdJIipJl6Qjq9gdmVR3puSRuSfnbr1n06SD+JpK8TkF6fT7JkiwGl0yuvuxBjFyomyZFulWqso3Q7b3osI9Lv/+4vf4al6xHpJ0/uFJIeMJGKp9NuROkpYXkwHehDKHXSM6UyuesvPbtb+n80S18hJj2O8nHWv1GkM8XY9JBfRAqw4tK9PRjpLqlJiUk/e3brC9qlr1ixAkufzJ/IeZmfiUaU7gkJbrNUAVZcej05mGX1iPRYqV2SmPRHzr6gj/SXd967bnIer/RMtszlMKB0C901D35dKlWAFZVuIU59PZK9x0mWDUWlP9Ij0qnEiFMhnaVHCcawlHSmGGsP9jZGrfTuCelfhk3myz8D6eqlz9Muffz4FS9/7d4vTM7rLySdDrukayXdbo3iUCtPOlPoSGXWZCylVrpLsmBCpLsj+xnjUSyd3jvZFZdhLaz0ebpIHy8hnSlvFlwj6cJIS6eLsXZmu8xUK93ByVv4pXPxSksPyzNSmel4KFWR/sNfIOfzHtIovUOOdCo/LLc1knS6GOuxSxdgQ6WH35JjdcsQKCA9U1q6I4shPcU6JF7OxXt+6TW59/+gJ6V7w6raRpJOn1Em+qULsKHS7QUstQ4X2wnxU3z1ke6PZwm2yqAoVZGOpK9aNe+3mqXfOX7c+HNS0pljXvQ1ke70OyPxO2VLzxS6QiAmnQ+JJI2WzumqjEjnkC9xk45opOsjfZwc6XR2yxyJdJZe60mNxGOVLZ0K3vmSqkW6XyL4mDIap6sJiqWnDfFQlJZIX6WL9HPS0pnadOm1kF7PM8AsX7pZ1t5ZXHqiQ3KLwdKdqs7TI6iTbiYW6at1kj5OhnS6+EGnvYYpzoTueOMTFEjPTwwS63bVek0y56JKeml9NEO8zHN9oUhfSaQ/r4/05TKkp3ffT2Ew6fStKAWUAukxFhOL3K6ql54RXuuVsVRCkY6k37d6tT7Sl597CUu3iEpneuwynnT6XN2qRLpVeVd1KcMmShV7pSJ9CZb+/EMfa5b+4PLlL82Qls5kTF7DSc/Kl1eBFavI9ZB0a0DWJidQkateuR9L36SD9Adp6UUSu3f2gnW+iY55kK6m9u6TenuEWKQT6fch6V/VSfpAaelModsOka5eeqac2oyo9Gk9LJ05A/GkgHS10uljpD9BjfTedKRP27RJB+mvLf+6TOn0KXGpFaSrlh4n/VYHEenbl6BQn6aT9CkLBhYNs0hKp+g35aT5Qbpa6Uy9w6NGetnK7fu3bNFJ+jOypYdcIQHp6qSbZVwnEDiml1Vs378ESZ+mXfprRPoYedLjQLpG6XLekiEU6RVLkfQtjHSV72Xr/y6RjpzPkCuduZ/iZpWux+1SMt58JSR9ZuX+ObNZ6bVmVdR1Sx84Zqo86cEnatyU0n21yVzSlUln4sarSvp2JH0LLV3D+9M77nxGmfS6m1k6L2aF0rOcUvfziUhfjK1rkY7peBc5x3mcXOns0oN09hkuqQqlM89IiVEsvaa6cimSPnv2e9qk39p5D3I+A0sfK1M6/SwffaSrfbpUuHSBp6Tw4gkIXcKXQPDpUmI3b6TxXug3+SXamZy8T5eqqa4goT579vmPL4bThT7au9oj6Gq/3HW5m47LHYTOzn9OmXJ6wcAxRXljKb5EnefQQ1810OXpUqWxSUmxfAZSkjApsiaSYMNTkXuVTcnIoThik/jxiZxzu/DMuHuyGDytfOEtz+TG7ThPTqipnlm5FFlH2t87j3gglFEPjGL4HQG/unvU3Sz34A8W2jk+pEdKN+MliuXbww7BXXL/Pz6UsUfJUji+paZsZgW2vmHOnDm7du36DuZLiG8zfI7DT2h+Svg5zfHjU06fJs6LuNIBg4GkV2PrSPviDRuId1o8MX9XkA/bnc6uUeTl3rv2Il7c+yLhOOI0ZgFSjp3nDRsLDwQ2Nv17Y+tIO/K+dHvLYqwe8RTLyKdGEj5s7+pqP0+/fm7kczS/pvkDBhsfU0ScQ6QbPdJ7Z9eUlVVj7xWVAyorK/fQtOxpaWkZ3TKaYc+/2gOB9o/YX0f/mOZ1wpjXse6iU0VTp+Zh5/CfHYyOCVlHlJVh9Vg+1o8ZUDGgmxosvesj5reNG/HXxlP4CzP1VB7yPQwzFjkH6TdOzFuCCX3EvsBislAtWLoNHQ5Y2MFjg0fw6/jPmrz1MYB8PvjgwoULE0MomJiOViJ+lZOTMzEHf8e4uvCd/DlhTMiZMOEWdEaWMSGUCxfef19hJ+q9GqX7AoAiLnaFl2S8plQb+tF+MbwkQ8Zlf7vczpRmOjujKU9GZwgdHR3K++DTKN0NGrXg9zDP0pP7zO9Lvdgb2TXg1ijdBuI0rv46ZS1c7P8P0IBNo/Q6K6CBFIpKVdYCl1e9GudaB3k0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcM35H82cipTBxi+MAAAAAElFTkSuQmCC"; +} + function tryReconnect() { if(count > 100) diff --git a/assets/webconfig/content/dashboard.html b/assets/webconfig/content/dashboard.html index a83d72ec..0aec432a 100644 --- a/assets/webconfig/content/dashboard.html +++ b/assets/webconfig/content/dashboard.html @@ -1,98 +1,132 @@ -
-
-
- -
-
-
-
-
- - Information -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unknown
Platform:
LED type:
Instance
Ports
Hyperion version:unknown
Watched version branch:unknown
Latest version:unknown
-
-

Smart Access

- -


- -
-
-
-
-
-
- - Components status -
-
- - - - - - - - - -
ComponentStatus
-
-
-
- -
-
- -
- -
- +
+
+
+ - + +
+ + +
+ + +
+
+
+ Status +
+
+ + + + + + + + + + + + + + + + + + +
+ + Capturing Hardware +
Screen-Grabber + disabled + +
Video-Grabber + disabled + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Ports +
proto + unknown + +
flat + unknown + +
json + unknown + +
websocket + unknown + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + Version +
Hyperion version:unknown
Watched version branch:unknown
Latest version:unknown
+
+ +
+
+
+ +
+
+ +
+ +
+ + + diff --git a/assets/webconfig/content/effects_configurator.html b/assets/webconfig/content/effects_configurator.html index a6b7b344..2d7015f5 100644 --- a/assets/webconfig/content/effects_configurator.html +++ b/assets/webconfig/content/effects_configurator.html @@ -1,7 +1,20 @@
- + + +
+
+ +
+
+
@@ -20,7 +33,7 @@ - +