mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
commit
e4bc5d0990
48
.azure.yml
Normal file
48
.azure.yml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
jobs:
|
||||||
|
- job: Linux
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-16.04'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
AMD64 (x64):
|
||||||
|
dockerTag: 'amd64'
|
||||||
|
dockerName: 'Debian Stretch (AMD64)'
|
||||||
|
i386 (x86):
|
||||||
|
dockerTag: 'i386'
|
||||||
|
dockerName: 'Debian Stretch (i386)'
|
||||||
|
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
|
||||||
|
submodules: recursive
|
||||||
|
- bash: ./.ci/ci_build.sh
|
||||||
|
displayName: 'Build $(dockerName)'
|
||||||
|
env:
|
||||||
|
DOCKER_TAG: $(dockerTag)
|
||||||
|
DOCKER_NAME: $(dockerName)
|
||||||
|
PLATFORM: $(platform)
|
||||||
|
- bash: ./.ci/ci_deploy.sh
|
||||||
|
displayName: 'Upload $(dockerName)'
|
||||||
|
|
||||||
|
- job: macOS
|
||||||
|
pool:
|
||||||
|
vmImage: 'macOS-10.13'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
submodules: recursive
|
||||||
|
- bash: ./.ci/ci_install.sh
|
||||||
|
displayName: 'Install dependencies'
|
||||||
|
- bash: ./.ci/ci_build.sh
|
||||||
|
displayName: 'Build macOS 10.13'
|
||||||
|
- bash: ./.ci/ci_deploy.sh
|
||||||
|
displayName: 'Upload macOS 10.13'
|
80
.ci/ci_build.sh
Executable file
80
.ci/ci_build.sh
Executable file
@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# detect CI
|
||||||
|
if [ -n "${TRAVIS-}" ]; then
|
||||||
|
# Travis-CI
|
||||||
|
CI_NAME="$(echo "$TRAVIS_OS_NAME" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
CI_BUILD_DIR="$TRAVIS_BUILD_DIR"
|
||||||
|
elif [ "$SYSTEM_COLLECTIONID" != "" ]; then
|
||||||
|
# Azure Pipelines
|
||||||
|
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
|
||||||
|
else
|
||||||
|
# for executing in non ci environment
|
||||||
|
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# set environment variables
|
||||||
|
BUILD_TYPE="Debug"
|
||||||
|
PACKAGES=""
|
||||||
|
[ -z "${PLATFORM}" ] && PLATFORM="x11"
|
||||||
|
|
||||||
|
# Detect number of processor cores
|
||||||
|
# default is 4 jobs
|
||||||
|
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
||||||
|
JOBS=$(sysctl -n hw.ncpu)
|
||||||
|
PLATFORM=osx
|
||||||
|
elif [[ "$CI_NAME" == 'linux' ]]; then
|
||||||
|
JOBS=$(nproc)
|
||||||
|
fi
|
||||||
|
echo "compile jobs: ${JOBS:=4}"
|
||||||
|
|
||||||
|
# Determine cmake build type; tag builds are Release, else Debug
|
||||||
|
if [ -n "${TRAVIS_TAG:-}" ] || [[ $BUILD_SOURCEBRANCH == *"refs/tags"* ]]; then
|
||||||
|
BUILD_TYPE=Release
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine package creation; True for cron/schedule and tag builds
|
||||||
|
if [ "${TRAVIS_EVENT_TYPE:-}" == 'cron' ] || [ -n "${TRAVIS_TAG:-}" ] || [[ $BUILD_REASON == "Schedule" ]] || [[ $BUILD_SOURCEBRANCH == *"refs/tags"* ]]; then
|
||||||
|
PACKAGES="package"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determie -dev appends to platform;
|
||||||
|
# Commented because tests are currently broken
|
||||||
|
# [ "${TRAVIS_EVENT_TYPE:-}" != 'cron' -a -z "${TRAVIS_TAG:-}" ] && PLATFORM=${PLATFORM}-dev
|
||||||
|
|
||||||
|
# Build the package on osx or docker for linux
|
||||||
|
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
||||||
|
# compile prepare
|
||||||
|
mkdir build || exit 1
|
||||||
|
mkdir ${CI_BUILD_DIR}/deploy || exit 1
|
||||||
|
cd build
|
||||||
|
cmake -DPLATFORM=$PLATFORM -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr .. || exit 2
|
||||||
|
make -j ${JOBS} ${PACKAGES} || exit 3
|
||||||
|
echo "---> Copy binaries and packages to folder: ${CI_BUILD_DIR}/deploy"
|
||||||
|
cp -v ${CI_BUILD_DIR}/build/bin/h* ${CI_BUILD_DIR}/deploy/ 2>/dev/null || : &&
|
||||||
|
cp -v ${CI_BUILD_DIR}/build/Hyperion-* ${CI_BUILD_DIR}/deploy/ 2>/dev/null || : &&
|
||||||
|
exit 0;
|
||||||
|
elif [[ "$CI_NAME" == 'linux' ]]; then
|
||||||
|
echo "Compile Hyperion with DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
|
||||||
|
# take ownership of deploy dir
|
||||||
|
mkdir ${CI_BUILD_DIR}/deploy
|
||||||
|
|
||||||
|
# run docker
|
||||||
|
docker run --rm \
|
||||||
|
-v "${CI_BUILD_DIR}/deploy:/deploy" \
|
||||||
|
-v "${CI_BUILD_DIR}:/source:ro" \
|
||||||
|
hyperionproject/hyperion-ci:$DOCKER_TAG \
|
||||||
|
/bin/bash -c "mkdir build && cp -r source/. /build &&
|
||||||
|
cd /build && mkdir build && cd build &&
|
||||||
|
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&
|
||||||
|
make -j ${JOBS} ${PACKAGES} || exit 3 &&
|
||||||
|
echo '---> Copy binaries and packages to host folder: ${CI_BUILD_DIR}/deploy' &&
|
||||||
|
cp -v /build/build/bin/h* /deploy/ 2>/dev/null || : &&
|
||||||
|
cp -v /build/build/Hyperion-* /deploy/ 2>/dev/null || : &&
|
||||||
|
exit 0;
|
||||||
|
exit 1 " || { echo "---> Hyperion compilation failed! Abort"; exit 4; }
|
||||||
|
|
||||||
|
# overwrite file owner to current user
|
||||||
|
sudo chown -fR $(stat -c "%U:%G" ${CI_BUILD_DIR}/deploy) ${CI_BUILD_DIR}/deploy
|
||||||
|
fi
|
67
.ci/ci_deploy.sh
Executable file
67
.ci/ci_deploy.sh
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# detect CI
|
||||||
|
if [ -n "${TRAVIS-}" ]; then
|
||||||
|
# Travis-CI
|
||||||
|
CI_NAME="$(echo "$TRAVIS_OS_NAME" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
CI_BUILD_DIR="$TRAVIS_BUILD_DIR"
|
||||||
|
elif [ "$SYSTEM_COLLECTIONID" != "" ]; then
|
||||||
|
# Azure Pipelines
|
||||||
|
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
|
||||||
|
else
|
||||||
|
# for executing in non ci environment
|
||||||
|
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# sf_upload <FILES> <sf_dir>
|
||||||
|
# {
|
||||||
|
# echo "Uploading following files: ${1} to dir /hyperion-project/${2}"
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
|
||||||
|
# append current Date to filename (just packages no binaries)
|
||||||
|
appendDate()
|
||||||
|
{
|
||||||
|
D=$(date +%Y-%m-%d)
|
||||||
|
for F in $CI_BUILD_DIR/deploy/Hy*
|
||||||
|
do
|
||||||
|
mv "$F" "${F%.*}-$D.${F##*.}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# append friendly name (just packages no binaries)
|
||||||
|
appendName()
|
||||||
|
{
|
||||||
|
for F in $CI_BUILD_DIR/deploy/Hy*
|
||||||
|
do
|
||||||
|
mv "$F" "${F%.*}-($DOCKER_NAME).${F##*.}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# get all files to deploy (just packages no binaries)
|
||||||
|
getFiles()
|
||||||
|
{
|
||||||
|
FILES=""
|
||||||
|
for f in $CI_BUILD_DIR/deploy/Hy*;
|
||||||
|
do FILES+="${f} ";
|
||||||
|
done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $CI_NAME == 'linux' || "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
||||||
|
if [[ -n $TRAVIS_TAG ]] || [[ $BUILD_SOURCEBRANCH == *"refs/tags"* ]]; then
|
||||||
|
echo "tag upload"
|
||||||
|
appendName
|
||||||
|
appendDate
|
||||||
|
getFiles
|
||||||
|
# sf_upload $FILES release
|
||||||
|
elif [[ $TRAVIS_EVENT_TYPE == 'cron' ]] || [[ $BUILD_REASON == "Schedule" ]]; then
|
||||||
|
echo "cron/schedule upload"
|
||||||
|
appendName
|
||||||
|
appendDate
|
||||||
|
getFiles
|
||||||
|
# sf_upload $FILES dev/alpha
|
||||||
|
else
|
||||||
|
echo "Direct pushed no upload, PRs not possible"
|
||||||
|
fi
|
||||||
|
fi
|
42
.ci/ci_install.sh
Executable file
42
.ci/ci_install.sh
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# detect CI
|
||||||
|
if [ -n "${TRAVIS-}" ]; then
|
||||||
|
# Travis-CI
|
||||||
|
CI_NAME="$(echo "$TRAVIS_OS_NAME" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
elif [ "$SYSTEM_COLLECTIONID" != "" ]; then
|
||||||
|
# Azure Pipelines
|
||||||
|
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
else
|
||||||
|
# for executing in non ci environment
|
||||||
|
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
function installAndUpgrade()
|
||||||
|
{
|
||||||
|
arr=("$@")
|
||||||
|
for i in "${arr[@]}";
|
||||||
|
do
|
||||||
|
list_output=`brew list | grep $i`
|
||||||
|
outdated_output=`brew outdated | grep $i`
|
||||||
|
|
||||||
|
if [[ ! -z "$list_output" ]]; then
|
||||||
|
if [[ ! -z "$outdated_output" ]]; then
|
||||||
|
brew upgrade $i
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
brew install $i
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# install osx deps for hyperion compile
|
||||||
|
if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then
|
||||||
|
echo "Install dependencies"
|
||||||
|
brew update
|
||||||
|
dependencies=("qt5" "python" "libusb" "cmake" "doxygen")
|
||||||
|
installAndUpgrade "${dependencies[@]}"
|
||||||
|
elif [[ $CI_NAME != 'linux' ]]; then
|
||||||
|
echo "Unsupported platform: $CI_NAME"
|
||||||
|
exit 5
|
||||||
|
fi
|
5
.gitmodules
vendored
5
.gitmodules
vendored
@ -5,3 +5,8 @@
|
|||||||
[submodule "dependencies/external/flatbuffers"]
|
[submodule "dependencies/external/flatbuffers"]
|
||||||
path = dependencies/external/flatbuffers
|
path = dependencies/external/flatbuffers
|
||||||
url = https://github.com/google/flatbuffers
|
url = https://github.com/google/flatbuffers
|
||||||
|
branch = master
|
||||||
|
[submodule "dependencies/external/protobuf"]
|
||||||
|
path = dependencies/external/protobuf
|
||||||
|
url = https://github.com/hyperion-project/protobuf.git
|
||||||
|
branch = master
|
||||||
|
66
.travis.yml
66
.travis.yml
@ -1,3 +1,11 @@
|
|||||||
|
linux: &linux
|
||||||
|
os: linux
|
||||||
|
dist: xenial
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
osx: &osx
|
||||||
|
os: osx
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
- ccache
|
- ccache
|
||||||
- directories:
|
- directories:
|
||||||
@ -5,27 +13,53 @@ cache:
|
|||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
language: cpp
|
language: cpp
|
||||||
services:
|
|
||||||
- docker
|
before_install:
|
||||||
matrix:
|
- ./.ci/ci_install.sh
|
||||||
|
|
||||||
|
jobs:
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- <<: *linux
|
||||||
dist: trusty
|
name: "AMD64 (x64)"
|
||||||
env:
|
env:
|
||||||
- DOCKER_TAG=ubuntu1604
|
- DOCKER_TAG=amd64
|
||||||
- DOCKER_NAME="Ubuntu 16.04"
|
- DOCKER_NAME="Debian Stretch (AMD64)"
|
||||||
- os: linux
|
- <<: *linux
|
||||||
dist: trusty
|
name: "i386 (x86)"
|
||||||
env:
|
env:
|
||||||
- DOCKER_TAG=cross-qemu-rpistretch
|
- DOCKER_TAG=i386
|
||||||
- DOCKER_NAME="Raspberry Pi"
|
- DOCKER_NAME="Debian Stretch (i386)"
|
||||||
- os: osx
|
# ////////////////////////////////////////////////////////////////
|
||||||
|
# NOTE: Temporary disabled because travis timeouts
|
||||||
|
# ////////////////////////////////////////////////////////////////
|
||||||
|
# - <<: *linux
|
||||||
|
# name: "ARMv6hf (Raspberry Pi v1 & ZERO)"
|
||||||
|
# env:
|
||||||
|
# - DOCKER_TAG=armv6hf
|
||||||
|
# - DOCKER_NAME="Debian Stretch (Raspberry Pi v1 & ZERO)"
|
||||||
|
# - PLATFORM="rpi"
|
||||||
|
# - <<: *linux
|
||||||
|
# name: "ARMv7hf (Raspberry Pi 2 & 3)"
|
||||||
|
# env:
|
||||||
|
# - DOCKER_TAG=armv7hf
|
||||||
|
# - DOCKER_NAME="Debian Stretch (Raspberry Pi 2 & 3)"
|
||||||
|
# - PLATFORM="rpi"
|
||||||
|
# - <<: *linux
|
||||||
|
# name: "ARMv8 (Generic AARCH64)"
|
||||||
|
# env:
|
||||||
|
# - DOCKER_TAG=aarch64
|
||||||
|
# - DOCKER_NAME="ARMv8 (Generic AARCH64)"
|
||||||
|
# - PLATFORM="amlogic"
|
||||||
|
#
|
||||||
|
# ////////////////////////////////////////////////////////////////
|
||||||
|
- <<: *osx
|
||||||
osx_image: xcode8.3
|
osx_image: xcode8.3
|
||||||
|
name: "macOS 10.12 (Xcode 8.3.3)"
|
||||||
env:
|
env:
|
||||||
- HOMEBREW_CACHE=$HOME/brew-cache
|
- HOMEBREW_CACHE=$HOME/brew-cache
|
||||||
before_install:
|
|
||||||
- ./.travis/travis_install.sh
|
|
||||||
script:
|
script:
|
||||||
- ./.travis/travis_build.sh
|
- ./.ci/ci_build.sh
|
||||||
after_success:
|
after_success:
|
||||||
- ./.travis/travis_deploy.sh
|
- ./.ci/ci_deploy.sh
|
||||||
|
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# for executing in non travis environment
|
|
||||||
[ -z "$TRAVIS_OS_NAME" ] && TRAVIS_OS_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
|
||||||
|
|
||||||
PLATFORM=x86
|
|
||||||
BUILD_TYPE=Debug
|
|
||||||
PACKAGES=""
|
|
||||||
|
|
||||||
# Detect number of processor cores
|
|
||||||
# default is 4 jobs
|
|
||||||
if [[ "$TRAVIS_OS_NAME" == 'osx' || "$TRAVIS_OS_NAME" == 'darwin' ]]
|
|
||||||
then
|
|
||||||
JOBS=$(sysctl -n hw.ncpu)
|
|
||||||
PLATFORM=osx
|
|
||||||
elif [[ "$TRAVIS_OS_NAME" == 'linux' ]]
|
|
||||||
then
|
|
||||||
JOBS=$(nproc)
|
|
||||||
fi
|
|
||||||
echo "compile jobs: ${JOBS:=4}"
|
|
||||||
|
|
||||||
# Determine cmake build type; tag builds are Release, else Debug
|
|
||||||
[ -n "${TRAVIS_TAG:-}" ] && BUILD_TYPE=Release
|
|
||||||
|
|
||||||
# Determine package creation; True for cron and tag builds
|
|
||||||
[ "${TRAVIS_EVENT_TYPE:-}" == 'cron' ] || [ -n "${TRAVIS_TAG:-}" ] && PACKAGES=package
|
|
||||||
|
|
||||||
# Determie -dev appends to platform;
|
|
||||||
[ "${TRAVIS_EVENT_TYPE:-}" != 'cron' -a -z "${TRAVIS_TAG:-}" ] && PLATFORM=${PLATFORM}-dev
|
|
||||||
|
|
||||||
# Build the package on osx
|
|
||||||
if [[ "$TRAVIS_OS_NAME" == 'osx' || "$TRAVIS_OS_NAME" == 'darwin' ]]
|
|
||||||
then
|
|
||||||
# compile prepare
|
|
||||||
mkdir build || exit 1
|
|
||||||
cd build
|
|
||||||
cmake -DPLATFORM=$PLATFORM -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr .. || exit 2
|
|
||||||
make -j ${JOBS} || exit 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build the package with docker
|
|
||||||
if [[ $TRAVIS_OS_NAME == 'linux' ]]
|
|
||||||
then
|
|
||||||
echo "Compile Hyperion with DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
|
|
||||||
# take ownership of deploy dir
|
|
||||||
mkdir $TRAVIS_BUILD_DIR/deploy
|
|
||||||
# run docker
|
|
||||||
docker run --rm \
|
|
||||||
-v "${TRAVIS_BUILD_DIR}/deploy:/deploy" \
|
|
||||||
-v "${TRAVIS_BUILD_DIR}:/source:ro" \
|
|
||||||
hyperionorg/hyperion-ci:$DOCKER_TAG \
|
|
||||||
/bin/bash -c "mkdir build && cp -r /source/. /build &&
|
|
||||||
cd /build && mkdir build && cd build &&
|
|
||||||
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&
|
|
||||||
make -j $(nproc) ${PACKAGES} || exit 3 &&
|
|
||||||
echo '---> Copy binaries and packages to host folder: ${TRAVIS_BUILD_DIR}/deploy' &&
|
|
||||||
cp -v /build/build/bin/h* /deploy/ 2>/dev/null || : &&
|
|
||||||
cp -v /build/build/Hyperion-* /deploy/ 2>/dev/null || : &&
|
|
||||||
exit 0;
|
|
||||||
exit 1 " || { echo "---> Hyperion compilation failed! Abort"; exit 4; }
|
|
||||||
|
|
||||||
# overwrite file owner to current user
|
|
||||||
sudo chown -fR $(stat -c "%U:%G" $TRAVIS_BUILD_DIR/deploy) $TRAVIS_BUILD_DIR/deploy
|
|
||||||
fi
|
|
@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# sf_upload <FILES> <sf_dir>
|
|
||||||
sf_upload()
|
|
||||||
{
|
|
||||||
echo "Uploading following files: ${1}
|
|
||||||
to dir /hyperion-project/${2}"
|
|
||||||
|
|
||||||
/usr/bin/expect <<-EOD
|
|
||||||
spawn scp $1hyperionsf37@frs.sourceforge.net:/home/frs/project/hyperion-project/$2
|
|
||||||
expect "*(yes/no)*"
|
|
||||||
send "yes\r"
|
|
||||||
expect "*password:*"
|
|
||||||
send "$SFPW\r"
|
|
||||||
expect eof
|
|
||||||
EOD
|
|
||||||
}
|
|
||||||
|
|
||||||
# append current Date to filename (just packages no binaries)
|
|
||||||
appendDate()
|
|
||||||
{
|
|
||||||
D=$(date +%Y-%m-%d)
|
|
||||||
for F in $TRAVIS_BUILD_DIR/deploy/Hy*
|
|
||||||
do
|
|
||||||
mv "$F" "${F%.*}-$D.${F##*.}"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# append friendly name (just packages no binaries)
|
|
||||||
appendName()
|
|
||||||
{
|
|
||||||
for F in $TRAVIS_BUILD_DIR/deploy/Hy*
|
|
||||||
do
|
|
||||||
mv "$F" "${F%.*}-($DOCKER_NAME).${F##*.}"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# get all files to deploy (just packages no binaries)
|
|
||||||
getFiles()
|
|
||||||
{
|
|
||||||
FILES=""
|
|
||||||
for f in $TRAVIS_BUILD_DIR/deploy/Hy*;
|
|
||||||
do FILES+="${f} ";
|
|
||||||
done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ $TRAVIS_OS_NAME == 'linux' ]]; then
|
|
||||||
if [[ -n $TRAVIS_TAG ]]; then
|
|
||||||
echo "tag upload"
|
|
||||||
appendName
|
|
||||||
appendDate
|
|
||||||
getFiles
|
|
||||||
sf_upload $FILES release
|
|
||||||
elif [[ $TRAVIS_EVENT_TYPE == 'cron' ]]; then
|
|
||||||
echo "cron upload"
|
|
||||||
appendName
|
|
||||||
appendDate
|
|
||||||
getFiles
|
|
||||||
sf_upload $FILES dev/alpha
|
|
||||||
else
|
|
||||||
echo "Direct pushed no upload, PRs not possible"
|
|
||||||
#sf_upload $FILES pr
|
|
||||||
fi
|
|
||||||
fi
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# for executing in non travis environment
|
|
||||||
[ -z "$TRAVIS_OS_NAME" ] && TRAVIS_OS_NAME="$( uname -s | tr '[:upper:]' '[:lower:]' )"
|
|
||||||
|
|
||||||
# install osx deps for hyperion compile
|
|
||||||
if [[ $TRAVIS_OS_NAME == 'osx' || $TRAVIS_OS_NAME == 'darwin' ]]
|
|
||||||
then
|
|
||||||
echo "Install OSX deps"
|
|
||||||
brew update
|
|
||||||
brew install qt5 || true
|
|
||||||
brew upgrade python3 || true
|
|
||||||
brew upgrade libusb || true
|
|
||||||
brew upgrade cmake || true
|
|
||||||
brew install doxygen || true
|
|
||||||
|
|
||||||
# install linux deps for hyperion compile
|
|
||||||
elif [[ $TRAVIS_OS_NAME == 'linux' ]]
|
|
||||||
then
|
|
||||||
echo "Install linux deps"
|
|
||||||
#sudo apt-get -qq update
|
|
||||||
#sudo apt-get install -qq -y qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev doxygen expect
|
|
||||||
else
|
|
||||||
echo "Unsupported platform: $TRAVIS_OS_NAME"
|
|
||||||
exit 5
|
|
||||||
fi
|
|
@ -11,6 +11,13 @@ IF ( POLICY CMP0026 )
|
|||||||
CMAKE_POLICY( SET CMP0026 OLD )
|
CMAKE_POLICY( SET CMP0026 OLD )
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
# Configure CCache if available
|
||||||
|
find_program(CCACHE_FOUND ccache)
|
||||||
|
if(CCACHE_FOUND)
|
||||||
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
||||||
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||||
|
endif(CCACHE_FOUND)
|
||||||
|
|
||||||
SET ( HYPERION_VERSION_STABLE OFF )
|
SET ( HYPERION_VERSION_STABLE OFF )
|
||||||
SET ( HYPERION_VERSION_MAJOR 2 )
|
SET ( HYPERION_VERSION_MAJOR 2 )
|
||||||
SET ( HYPERION_VERSION_MINOR 0 )
|
SET ( HYPERION_VERSION_MINOR 0 )
|
||||||
@ -24,6 +31,7 @@ SET ( DEFAULT_QT ON )
|
|||||||
SET ( DEFAULT_WS281XPWM OFF )
|
SET ( DEFAULT_WS281XPWM OFF )
|
||||||
SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON )
|
SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON )
|
||||||
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
|
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
|
||||||
|
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
|
||||||
SET ( DEFAULT_TESTS OFF )
|
SET ( DEFAULT_TESTS OFF )
|
||||||
|
|
||||||
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
|
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
|
||||||
@ -164,6 +172,9 @@ message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
|
|||||||
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
||||||
SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
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
|
# check all json files
|
||||||
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
|
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
|
||||||
SET( JSON_FILES
|
SET( JSON_FILES
|
||||||
@ -197,9 +208,6 @@ IF ( ${CHECK_CONFIG_FAILED} )
|
|||||||
MESSAGE (FATAL_ERROR "check of json default config failed" )
|
MESSAGE (FATAL_ERROR "check of json default config failed" )
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
|
||||||
# Createt the configuration file
|
|
||||||
|
|
||||||
# Add project specific cmake modules (find, etc)
|
# Add project specific cmake modules (find, etc)
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
@ -210,7 +218,6 @@ find_package(GitVersion)
|
|||||||
configure_file("${PROJECT_SOURCE_DIR}/HyperionConfig.h.in" "${PROJECT_BINARY_DIR}/HyperionConfig.h")
|
configure_file("${PROJECT_SOURCE_DIR}/HyperionConfig.h.in" "${PROJECT_BINARY_DIR}/HyperionConfig.h")
|
||||||
include_directories("${PROJECT_BINARY_DIR}")
|
include_directories("${PROJECT_BINARY_DIR}")
|
||||||
|
|
||||||
|
|
||||||
# Define the global output path of binaries
|
# Define the global output path of binaries
|
||||||
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
||||||
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||||
@ -233,6 +240,7 @@ CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
|
||||||
endif()
|
endif()
|
||||||
if(COMPILER_SUPPORTS_CXX11)
|
if(COMPILER_SUPPORTS_CXX11)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
@ -242,6 +250,9 @@ else()
|
|||||||
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
|
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Use GNU gold linker if available
|
||||||
|
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
|
||||||
|
|
||||||
# setup -rpath to search for shared libs in BINARY/../libs folder
|
# setup -rpath to search for shared libs in BINARY/../libs folder
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE)
|
||||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||||
@ -250,6 +261,24 @@ if (UNIX AND NOT APPLE)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# add QT5 dependency
|
# 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")
|
SET(QT_MIN_VERSION "5.5.0")
|
||||||
find_package(Qt5 COMPONENTS Core Gui Network SerialPort REQUIRED)
|
find_package(Qt5 COMPONENTS Core Gui Network SerialPort REQUIRED)
|
||||||
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
|
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
|
||||||
@ -257,12 +286,23 @@ IF ( "${Qt5Core_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
|
|||||||
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
|
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
# Add libusb and pthreads
|
# Add libusb and pthreads
|
||||||
find_package(libusb-1.0 REQUIRED)
|
find_package(libusb-1.0 REQUIRED)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
add_definitions(${QT_DEFINITIONS})
|
add_definitions(${QT_DEFINITIONS})
|
||||||
|
|
||||||
|
# Add jpeg library
|
||||||
|
if (ENABLE_V4L2)
|
||||||
|
find_package(JPEG)
|
||||||
|
if (JPEG_FOUND)
|
||||||
|
add_definitions(-DHAVE_JPEG)
|
||||||
|
message( STATUS "Using 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()
|
||||||
|
|
||||||
# TODO[TvdZ]: This linking directory should only be added if we are cross compiling
|
# TODO[TvdZ]: This linking directory should only be added if we are cross compiling
|
||||||
#if(NOT APPLE)
|
#if(NOT APPLE)
|
||||||
# link_directories(${CMAKE_FIND_ROOT_PATH}/lib/arm-linux-gnueabihf)
|
# link_directories(${CMAKE_FIND_ROOT_PATH}/lib/arm-linux-gnueabihf)
|
||||||
|
@ -1,13 +1,21 @@
|
|||||||
# With Docker
|
# 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 compilation for Raspberry Pi (Raspbian stretch)
|
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 compilation for Raspberry Pi (Debian Stretch)
|
||||||
|
|
||||||
To compile Hyperion for Ubuntu 16.04 (x64) or higher just execute the following command
|
To compile Hyperion for Debain Stretch (x64 architecture) or higher just execute the following command
|
||||||
```
|
```
|
||||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh
|
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh
|
||||||
```
|
```
|
||||||
To compile Hyperion for Raspberry Pi
|
To compile Hyperion for i386 architecture
|
||||||
```
|
```
|
||||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t cross-qemu-rpistretch
|
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t i386
|
||||||
|
```
|
||||||
|
To compile Hyperion for 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
|
||||||
|
```
|
||||||
|
To compile Hyperion for 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 compiled binaries and packages will be available at the deploy folder next to the script
|
The compiled binaries and packages will be available at the deploy folder next to the script
|
||||||
Note: call the script with `./docker-compile.sh -h` for more options
|
Note: call the script with `./docker-compile.sh -h` for more options
|
||||||
@ -18,7 +26,7 @@ Note: call the script with `./docker-compile.sh -h` for more options
|
|||||||
|
|
||||||
```
|
```
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev
|
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
**on RPI you need the videocore IV headers**
|
**on RPI you need the videocore IV headers**
|
||||||
@ -27,6 +35,10 @@ sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev
|
|||||||
sudo apt-get install libraspberrypi-dev
|
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
|
**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.
|
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.
|
||||||
|
@ -1,38 +1,36 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#Updated: 18 August 2016, by brindosch
|
#Use a clean Raspbian Stretch Lite and Ubunut 18/19 and run this script
|
||||||
#Just use a clean Ubunut 14.04 and run this script
|
|
||||||
##############
|
##############
|
||||||
#ON TARGET
|
#ON TARGET
|
||||||
#--------------
|
#--------------
|
||||||
#sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev python-dev rsync
|
#sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev aptitude show qt5-default rsync
|
||||||
#############
|
#############
|
||||||
|
|
||||||
#ON HOST
|
#ON HOST
|
||||||
#---------
|
#---------
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get upgrade
|
sudo apt-get upgrade
|
||||||
#TO-DO verify what is really required
|
# !!! TO-DO verify aptitude gcc-multilib
|
||||||
#blacklist: lib32z1 lib32ncurses5 lib32bz2-1.0 zlib1g-dev
|
|
||||||
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev
|
|
||||||
|
|
||||||
echo 'PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin' >> .bashrc
|
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev
|
||||||
#---------
|
#---------
|
||||||
|
|
||||||
|
|
||||||
export TARGET_IP=192.168.0.103
|
export TARGET_IP=x.x.x.x
|
||||||
export TARGET_USER=pi
|
export TARGET_USER=pi
|
||||||
|
|
||||||
export RASCROSS_DIR="$HOME/raspberrypi"
|
export CROSSROOT="$HOME/crosscompile"
|
||||||
|
export RASCROSS_DIR="$CROSSROOT/raspberrypi"
|
||||||
export ROOTFS_DIR="$RASCROSS_DIR/rootfs"
|
export ROOTFS_DIR="$RASCROSS_DIR/rootfs"
|
||||||
export HYPERION_DIR="$HOME/hyperion"
|
export TOOLCHAIN_DIR="$RASCROSS_DIR/tools"
|
||||||
#export IMX6_DIR="$HOME/hummingboard"
|
export QT5_DIR="$CROSSROOT/Qt5"
|
||||||
export TOOLCHAIN_FILE="$HYPERION_DIR/Toolchain-RaspberryPi.cmake"
|
|
||||||
|
|
||||||
export NATIVE_BUILD_DIR="$HYPERION_DIR/build"
|
export HYPERION_DIR="$HOME/hyperion.ng"
|
||||||
export TARGET_BUILD_DIR="$HYPERION_DIR/build-rpi"
|
|
||||||
|
|
||||||
mkdir -p "$ROOTFS_DIR"
|
mkdir -p "$ROOTFS_DIR/lib"
|
||||||
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/{lib,usr} "$ROOTFS_DIR"
|
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"
|
||||||
|
|
||||||
######## RPi specific #########
|
######## RPi specific #########
|
||||||
|
|
||||||
@ -40,41 +38,40 @@ mkdir -p "$RASCROSS_DIR/firmware"
|
|||||||
git clone --depth 1 https://github.com/raspberrypi/firmware.git "$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"
|
ln -s "$RASCROSS_DIR/firmware/hardfp/opt" "$ROOTFS_DIR/opt"
|
||||||
|
|
||||||
git clone --depth 1 git://github.com/raspberrypi/tools.git "$RASCROSS_DIR/tools"
|
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
|
||||||
|
|
||||||
##### End of RPi specific ######
|
##### End of RPi specific ######
|
||||||
|
|
||||||
######## NOT TESTED ONLY INFOs #########
|
######## Qt5 specific #########
|
||||||
######## IMX6 specific #########
|
|
||||||
#export IMX6_DIR="$HOME/hummingboard"
|
mkdir -p "$QT5_DIR"
|
||||||
#mkdir -p "$IMX6_Dir"
|
cd "$QT5_DIR"
|
||||||
#cd "$IMX6_Dir"
|
|
||||||
#wget https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
|
wget -c http://download.qt.io/archive/qt/5.7/5.7.1/qt-opensource-linux-x64-5.7.1.run
|
||||||
#tar -xvjf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
|
chmod +x $QT5_DIR/*.run
|
||||||
#cd
|
|
||||||
##### End of IMX6 specific ######
|
#Display absolute installation directory to be used in Qt5 installer
|
||||||
######## NOT TESTED #########
|
echo $HOME/crosscompile/Qt5
|
||||||
|
|
||||||
|
./qt-opensource-linux-x64-5.7.1.run
|
||||||
|
|
||||||
|
#Follow the dialogs and install in absolute directory of $HOME/crosscompile/Qt5 (copy from above)
|
||||||
|
|
||||||
|
##### End of Qt5 specific ######
|
||||||
|
|
||||||
# get the Hyperion sources
|
# get the Hyperion sources
|
||||||
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
|
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
|
||||||
|
|
||||||
# do a native build (to build the flatbuffers compiler for the native platform)
|
# get requried submodules
|
||||||
mkdir -p "$NATIVE_BUILD_DIR"
|
cd "$HYPERION_DIR"
|
||||||
cmake -DENABLE_DISPMANX=OFF --build "$NATIVE_BUILD_DIR" "$HYPERION_DIR"
|
git fetch --recurse-submodules -j2
|
||||||
|
|
||||||
# do the cross build
|
|
||||||
# specify the protoc export file to import the flatbuffers compiler from the native build
|
|
||||||
mkdir -p "$TARGET_BUILD_DIR"
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" -DIMPORT_PROTOC=$NATIVE_BUILD_DIR/protoc_export.cmake --build "$TARGET_BUILD_DIR" "$HYPERION_DIR"
|
|
||||||
|
|
||||||
#compile
|
#compile
|
||||||
cd "$HYPERION_DIR/bin"
|
|
||||||
chmod +x *
|
|
||||||
cp "$HYPERION_DIR/bin/create_all_releases.sh" "$HYPERION_DIR"
|
|
||||||
cd "$HYPERION_DIR"
|
cd "$HYPERION_DIR"
|
||||||
./create_all_releases.sh
|
chmod +x "$HYPERION_DIR/bin/"*.sh
|
||||||
|
./bin/create_all_releases.sh
|
||||||
|
|
||||||
######END
|
######END
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
#These instructions are based on tvdzwan and on the guide given by:
|
|
||||||
#http://airwiki.ws.dei.polimi.it/index.php/Cross-compiling_for_the_RaspberryPi
|
|
||||||
|
27
README.md
27
README.md
@ -1,9 +1,27 @@
|
|||||||
HYPERION
|
<p align="center">
|
||||||
========
|
<img src="./assets/webconfig/img/hyperion/hyperionlogo.png" height="130">
|
||||||
|
</p>
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/hyperion-project/hyperion.ng.svg?branch=master)](https://travis-ci.org/hyperion-project/hyperion.ng)
|
<p align="center">
|
||||||
|
<a href="https://www.hyperion-project.org" alt="Forum">
|
||||||
|
<img src="https://img.shields.io/website/https/hyperion-project.org.svg?down_color=red&down_message=offline&up_color=green&up_message=online" /></a>
|
||||||
|
<a href="https://github.com/hyperion-project/hyperion.ng/graphs/contributors" alt="Contributors">
|
||||||
|
<img src="https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg" /></a>
|
||||||
|
<a href="https://github.com/hyperion-project/hyperion.ng/tree/master/dependencies/external" alt="Dependencies">
|
||||||
|
<img src="https://img.shields.io/librariesio/github/hyperion-project/hyperion.ng.svg" /></a>
|
||||||
|
<a href="https://dev.azure.com/Hyperion-Project/Hyperion.NG/_build/latest?definitionId=7&branchName=master" alt="Azure-Pipeline">
|
||||||
|
<img src="https://dev.azure.com/Hyperion-Project/Hyperion.NG/_apis/build/status/Hyperion.NG?branchName=master" /></a>
|
||||||
|
<a href="https://travis-ci.org/hyperion-project/hyperion.ng" alt="Travis-CI">
|
||||||
|
<img src="https://travis-ci.org/hyperion-project/hyperion.ng.svg?branch=master" /></a>
|
||||||
|
<a href="https://lgtm.com/projects/g/hyperion-project/hyperion.ng/alerts/">
|
||||||
|
<img src="https://img.shields.io/lgtm/alerts/g/hyperion-project/hyperion.ng.svg"
|
||||||
|
alt="Total alerts"/></a>
|
||||||
|
<a href="https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/LICENSE">
|
||||||
|
<img src="https://img.shields.io/badge/License-MIT-yellow.svg"
|
||||||
|
alt="GitHub license"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
This is a pre alpha development repository for the next major version of hyperion
|
<p align="center">This is a pre alpha development repository for the next major version of hyperion</p>
|
||||||
|
|
||||||
--------
|
--------
|
||||||
## **Important notice!**
|
## **Important notice!**
|
||||||
@ -16,6 +34,7 @@ If you want to use hyperion as 'normal user', please use [current stable version
|
|||||||
Besides of that .... Feel free to join us! We are looking always for people who wants to participate.
|
Besides of that .... Feel free to join us! We are looking always for people who wants to participate.
|
||||||
|
|
||||||
--------
|
--------
|
||||||
|
## About
|
||||||
|
|
||||||
Hyperion is an opensource 'AmbiLight' implementation with support for many LED devices and video grabbers.
|
Hyperion is an opensource 'AmbiLight' implementation with support for many LED devices and video grabbers.
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ import sys
|
|||||||
import socket
|
import socket
|
||||||
import serial
|
import serial
|
||||||
import serial.threaded
|
import serial.threaded
|
||||||
import time
|
|
||||||
|
|
||||||
|
|
||||||
class SerialToNet(serial.threaded.Protocol):
|
class SerialToNet(serial.threaded.Protocol):
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
createTable("","atb","about_cont");
|
createTable("","atb","about_cont");
|
||||||
for(var i = 0; i<fc.length; i++)
|
for(var i = 0; i<fc.length; i++)
|
||||||
$('.atb').append(createTableRow([fc[i],sc[i]], "atb", false, true));
|
$('.atb').append(createTableRow([fc[i],sc[i]], "atb", false));
|
||||||
|
|
||||||
$('#danger_trig').off().on('click',function(){
|
$('#danger_trig').off().on('click',function(){
|
||||||
dcount++;
|
dcount++;
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
performTranslation('trans_update');
|
// performTranslation('trans_update');
|
||||||
|
performTranslation();
|
||||||
|
|
||||||
for (key in parsedUpdateJSON)
|
for (key in parsedUpdateJSON)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||||
"general_comp_FLATBUFSERVER" : "Flatbuffers Server",
|
"general_comp_FLATBUFSERVER" : "Flatbuffers Server",
|
||||||
|
"general_comp_PROTOSERVER" : "Protocol Buffers Server",
|
||||||
"general_comp_GRABBER" : "Plattform Aufnahme",
|
"general_comp_GRABBER" : "Plattform Aufnahme",
|
||||||
"general_comp_V4L" : "USB Aufnahme",
|
"general_comp_V4L" : "USB Aufnahme",
|
||||||
"general_comp_LEDDEVICE" : "LED Hardware",
|
"general_comp_LEDDEVICE" : "LED Hardware",
|
||||||
@ -48,7 +49,7 @@
|
|||||||
"dashboard_infobox_label_latesthyp" : "Aktuellste Hyperion Version:",
|
"dashboard_infobox_label_latesthyp" : "Aktuellste Hyperion Version:",
|
||||||
"dashboard_infobox_label_platform" : "Plattform:",
|
"dashboard_infobox_label_platform" : "Plattform:",
|
||||||
"dashboard_infobox_label_instance" : "Instanz:",
|
"dashboard_infobox_label_instance" : "Instanz:",
|
||||||
"dashboard_infobox_label_ports" : "Port flatbuf:",
|
"dashboard_infobox_label_ports" : "Ports (flat|proto):",
|
||||||
"dashboard_infobox_message_updatewarning" : "Eine aktuellere Version von Hyperion ist verfügbar! (V$1)",
|
"dashboard_infobox_message_updatewarning" : "Eine aktuellere Version von Hyperion ist verfügbar! (V$1)",
|
||||||
"dashboard_infobox_message_updatesuccess" : "Du nutzt die aktuellste Version von Hyperion.",
|
"dashboard_infobox_message_updatesuccess" : "Du nutzt die aktuellste Version von Hyperion.",
|
||||||
"dashboard_infobox_label_statush" : "Hyperion Status:",
|
"dashboard_infobox_label_statush" : "Hyperion Status:",
|
||||||
@ -169,6 +170,7 @@
|
|||||||
"conf_network_bobl_intro" : "Boblight Empfänger",
|
"conf_network_bobl_intro" : "Boblight Empfänger",
|
||||||
"conf_network_udpl_intro" : "UDP Empfänger",
|
"conf_network_udpl_intro" : "UDP Empfänger",
|
||||||
"conf_network_fbs_intro" : "Google Flatbuffers Empfänger. Wird genutzt für schnellen Bildempfang.",
|
"conf_network_fbs_intro" : "Google Flatbuffers Empfänger. Wird genutzt für schnellen Bildempfang.",
|
||||||
|
"conf_network_proto_intro" : "Der PROTO-Port dieser Hyperion-Instanz, wird genutzt für \"Bildstreams\" (HyperionScreenCap, Kodi Addon, ...)",
|
||||||
"conf_network_forw_intro" : "Leite alles an eine zweite Hyperion Instanz weiter, diese kann dann mit einer anderen LED Steuerung genutzt werden",
|
"conf_network_forw_intro" : "Leite alles an eine zweite Hyperion Instanz weiter, diese kann dann mit einer anderen LED Steuerung genutzt werden",
|
||||||
"conf_logging_label_intro" : "Überprüfe die Meldungen im Prokotoll um zu erfahren was Hyperion gerade beschäftigt. Je nach eingestellter Protokoll-Stufe siehst du mehr oder weniger Informationen.",
|
"conf_logging_label_intro" : "Überprüfe die Meldungen im Prokotoll um zu erfahren was Hyperion gerade beschäftigt. Je nach eingestellter Protokoll-Stufe siehst du mehr oder weniger Informationen.",
|
||||||
"conf_logging_btn_pbupload" : "Bericht für Supportanfrage hochladen",
|
"conf_logging_btn_pbupload" : "Bericht für Supportanfrage hochladen",
|
||||||
@ -346,7 +348,7 @@
|
|||||||
"wiz_cc_morethanone" : "Du hast mehr als 1 Profil, bitte wähle das zu kalibrierende Profil",
|
"wiz_cc_morethanone" : "Du hast mehr als 1 Profil, bitte wähle das zu kalibrierende Profil",
|
||||||
"wiz_cc_btn_stop" : "Stoppe Video",
|
"wiz_cc_btn_stop" : "Stoppe Video",
|
||||||
"wiz_cc_summary" : "Im folgenden eine Zusammenfassung deiner Einstellungen. Während du ein Video abspielst, kannst du hier weiter ausprobieren. Wenn du fertig bist, klicke auf speichern.",
|
"wiz_cc_summary" : "Im folgenden eine Zusammenfassung deiner Einstellungen. Während du ein Video abspielst, kannst du hier weiter ausprobieren. Wenn du fertig bist, klicke auf speichern.",
|
||||||
"edt_dev_auth_key_title" : "Aurora API Schlüssel",
|
"edt_dev_auth_key_title" : "Authentisierungstoken",
|
||||||
"edt_dev_enum_subtract_minimum" : "Subtrahiere minimum",
|
"edt_dev_enum_subtract_minimum" : "Subtrahiere minimum",
|
||||||
"edt_dev_enum_sub_min_cool_adjust" : "Minimale Anpassung: cool",
|
"edt_dev_enum_sub_min_cool_adjust" : "Minimale Anpassung: cool",
|
||||||
"edt_dev_enum_sub_min_warm_adjust" : "Minimale Anpassung: warm",
|
"edt_dev_enum_sub_min_warm_adjust" : "Minimale Anpassung: warm",
|
||||||
@ -430,6 +432,7 @@
|
|||||||
"edt_conf_enum_bbdefault" : "Standard",
|
"edt_conf_enum_bbdefault" : "Standard",
|
||||||
"edt_conf_enum_bbclassic" : "Klassisch",
|
"edt_conf_enum_bbclassic" : "Klassisch",
|
||||||
"edt_conf_enum_bbosd" : "OSD",
|
"edt_conf_enum_bbosd" : "OSD",
|
||||||
|
"edt_conf_enum_automatic" : "Automatisch",
|
||||||
"edt_conf_gen_heading_title" : "Allgemeine Einstellungen",
|
"edt_conf_gen_heading_title" : "Allgemeine Einstellungen",
|
||||||
"edt_conf_gen_name_title" : "Name der Konfiguration",
|
"edt_conf_gen_name_title" : "Name der Konfiguration",
|
||||||
"edt_conf_gen_name_expl" : "Der Name wird verwendet, um Hyperion besser zu identifizieren. (Hilfreich bei mehreren Instanzen)",
|
"edt_conf_gen_name_expl" : "Der Name wird verwendet, um Hyperion besser zu identifizieren. (Hilfreich bei mehreren Instanzen)",
|
||||||
@ -570,6 +573,9 @@
|
|||||||
"edt_conf_fbs_heading_title" : "Flatbuffers Server",
|
"edt_conf_fbs_heading_title" : "Flatbuffers Server",
|
||||||
"edt_conf_fbs_timeout_title" : "Zeitüberschreitung",
|
"edt_conf_fbs_timeout_title" : "Zeitüberschreitung",
|
||||||
"edt_conf_fbs_timeout_expl" : "Wenn für die angegebene Zeit keine Daten empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
|
"edt_conf_fbs_timeout_expl" : "Wenn für die angegebene Zeit keine Daten empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
|
||||||
|
"edt_conf_pbs_heading_title" : "Protocol Buffers Server",
|
||||||
|
"edt_conf_pbs_timeout_title" : "Zeitüberschreitung",
|
||||||
|
"edt_conf_pbs_timeout_expl" : "Wenn für die angegebene Zeit keine Daten empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
|
||||||
"edt_conf_bobls_heading_title" : "Boblight Server",
|
"edt_conf_bobls_heading_title" : "Boblight Server",
|
||||||
"edt_conf_udpl_heading_title" : "UDP Listener",
|
"edt_conf_udpl_heading_title" : "UDP Listener",
|
||||||
"edt_conf_udpl_address_title" : "Adresse",
|
"edt_conf_udpl_address_title" : "Adresse",
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||||
"general_comp_FLATBUFSERVER" : "Flatbuffers Server",
|
"general_comp_FLATBUFSERVER" : "Flatbuffers Server",
|
||||||
|
"general_comp_PROTOSERVER" : "Protocol Buffers Server",
|
||||||
"general_comp_GRABBER" : "Platform Capture",
|
"general_comp_GRABBER" : "Platform Capture",
|
||||||
"general_comp_V4L" : "USB Capture",
|
"general_comp_V4L" : "USB Capture",
|
||||||
"general_comp_LEDDEVICE" : "LED device",
|
"general_comp_LEDDEVICE" : "LED device",
|
||||||
@ -48,7 +49,7 @@
|
|||||||
"dashboard_infobox_label_latesthyp" : "Latest Hyperion version:",
|
"dashboard_infobox_label_latesthyp" : "Latest Hyperion version:",
|
||||||
"dashboard_infobox_label_platform" : "Platform:",
|
"dashboard_infobox_label_platform" : "Platform:",
|
||||||
"dashboard_infobox_label_instance" : "Instance:",
|
"dashboard_infobox_label_instance" : "Instance:",
|
||||||
"dashboard_infobox_label_ports" : "Port flatbuf:",
|
"dashboard_infobox_label_ports" : "Ports (flat|proto):",
|
||||||
"dashboard_infobox_message_updatewarning" : "A newer version of Hyperion is available! ($1)",
|
"dashboard_infobox_message_updatewarning" : "A newer version of Hyperion is available! ($1)",
|
||||||
"dashboard_infobox_message_updatesuccess" : "You run the latest version of Hyperion.",
|
"dashboard_infobox_message_updatesuccess" : "You run the latest version of Hyperion.",
|
||||||
"dashboard_infobox_label_statush" : "Hyperion status:",
|
"dashboard_infobox_label_statush" : "Hyperion status:",
|
||||||
@ -169,6 +170,7 @@
|
|||||||
"conf_network_bobl_intro" : "Receiver for Boblight",
|
"conf_network_bobl_intro" : "Receiver for Boblight",
|
||||||
"conf_network_udpl_intro" : "Receiver for UDP",
|
"conf_network_udpl_intro" : "Receiver for UDP",
|
||||||
"conf_network_fbs_intro" : "Google Flatbuffers Receiver. Used for fast image transmission.",
|
"conf_network_fbs_intro" : "Google Flatbuffers Receiver. Used for fast image transmission.",
|
||||||
|
"conf_network_proto_intro" : "The PROTO-Port of this Hyperion instance, used for picture streams (HyperionScreenCap, Kodi Addon, ...)",
|
||||||
"conf_network_forw_intro" : "Forward all input to a second Hyperion instance which could be driven with another led controller",
|
"conf_network_forw_intro" : "Forward all input to a second Hyperion instance which could be driven with another led controller",
|
||||||
"conf_logging_label_intro" : "Area to check log messages, depending on loglevel setting you see more or less information.",
|
"conf_logging_label_intro" : "Area to check log messages, depending on loglevel setting you see more or less information.",
|
||||||
"conf_logging_btn_pbupload" : "Upload report for support request",
|
"conf_logging_btn_pbupload" : "Upload report for support request",
|
||||||
@ -346,7 +348,7 @@
|
|||||||
"wiz_cc_morethanone" : "You have more than one profile, please choose the profile you want to calibrate.",
|
"wiz_cc_morethanone" : "You have more than one profile, please choose the profile you want to calibrate.",
|
||||||
"wiz_cc_btn_stop" : "Stop video",
|
"wiz_cc_btn_stop" : "Stop video",
|
||||||
"wiz_cc_summary" : "A conclusion of your settings. During video playback, you could change or test values again. If you are done, click on save.",
|
"wiz_cc_summary" : "A conclusion of your settings. During video playback, you could change or test values again. If you are done, click on save.",
|
||||||
"edt_dev_auth_key_title" : "Aurora API Key",
|
"edt_dev_auth_key_title" : "Authentication Token",
|
||||||
"edt_dev_enum_subtract_minimum" : "Substract minimum",
|
"edt_dev_enum_subtract_minimum" : "Substract minimum",
|
||||||
"edt_dev_enum_sub_min_cool_adjust" : "Subtract cool white",
|
"edt_dev_enum_sub_min_cool_adjust" : "Subtract cool white",
|
||||||
"edt_dev_enum_sub_min_warm_adjust" : "Subtract warm white",
|
"edt_dev_enum_sub_min_warm_adjust" : "Subtract warm white",
|
||||||
@ -431,6 +433,7 @@
|
|||||||
"edt_conf_enum_bbdefault" : "Default",
|
"edt_conf_enum_bbdefault" : "Default",
|
||||||
"edt_conf_enum_bbclassic" : "Classic",
|
"edt_conf_enum_bbclassic" : "Classic",
|
||||||
"edt_conf_enum_bbosd" : "OSD",
|
"edt_conf_enum_bbosd" : "OSD",
|
||||||
|
"edt_conf_enum_automatic" : "Automatic",
|
||||||
"edt_conf_gen_heading_title" : "General Settings",
|
"edt_conf_gen_heading_title" : "General Settings",
|
||||||
"edt_conf_gen_name_title" : "Configuration name",
|
"edt_conf_gen_name_title" : "Configuration name",
|
||||||
"edt_conf_gen_name_expl" : "A user defined name which is used to detect Hyperion. (Helpful with more than one Hyperion instance)",
|
"edt_conf_gen_name_expl" : "A user defined name which is used to detect Hyperion. (Helpful with more than one Hyperion instance)",
|
||||||
@ -571,6 +574,9 @@
|
|||||||
"edt_conf_fbs_heading_title" : "Flatbuffers Server",
|
"edt_conf_fbs_heading_title" : "Flatbuffers Server",
|
||||||
"edt_conf_fbs_timeout_title" : "Timeout",
|
"edt_conf_fbs_timeout_title" : "Timeout",
|
||||||
"edt_conf_fbs_timeout_expl" : "If no data are received for the given period, the component will be (soft) disabled.",
|
"edt_conf_fbs_timeout_expl" : "If no data are received for the given period, the component will be (soft) disabled.",
|
||||||
|
"edt_conf_pbs_heading_title" : "Protocol Buffers Server",
|
||||||
|
"edt_conf_pbs_timeout_title" : "Timeout",
|
||||||
|
"edt_conf_pbs_timeout_expl" : "If no data are received for the given period, the component will be (soft) disabled.",
|
||||||
"edt_conf_bobls_heading_title" : "Boblight Server",
|
"edt_conf_bobls_heading_title" : "Boblight Server",
|
||||||
"edt_conf_udpl_heading_title" : "UDP Listener",
|
"edt_conf_udpl_heading_title" : "UDP Listener",
|
||||||
"edt_conf_udpl_address_title" : "Address",
|
"edt_conf_udpl_address_title" : "Address",
|
||||||
|
@ -4,22 +4,22 @@ $(document).ready( function() {
|
|||||||
var editor_smoothing = null;
|
var editor_smoothing = null;
|
||||||
var editor_blackborder = null;
|
var editor_blackborder = null;
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
//color
|
//color
|
||||||
$('#conf_cont').append(createRow('conf_cont_color'))
|
$('#conf_cont').append(createRow('conf_cont_color'));
|
||||||
$('#conf_cont_color').append(createOptPanel('fa-photo', $.i18n("edt_conf_color_heading_title"), 'editor_container_color', 'btn_submit_color'));
|
$('#conf_cont_color').append(createOptPanel('fa-photo', $.i18n("edt_conf_color_heading_title"), 'editor_container_color', 'btn_submit_color'));
|
||||||
$('#conf_cont_color').append(createHelpTable(schema.color.properties, $.i18n("edt_conf_color_heading_title")));
|
$('#conf_cont_color').append(createHelpTable(window.schema.color.properties, $.i18n("edt_conf_color_heading_title")));
|
||||||
|
|
||||||
//smoothing
|
//smoothing
|
||||||
$('#conf_cont').append(createRow('conf_cont_smoothing'))
|
$('#conf_cont').append(createRow('conf_cont_smoothing'));
|
||||||
$('#conf_cont_smoothing').append(createOptPanel('fa-photo', $.i18n("edt_conf_smooth_heading_title"), 'editor_container_smoothing', 'btn_submit_smoothing'));
|
$('#conf_cont_smoothing').append(createOptPanel('fa-photo', $.i18n("edt_conf_smooth_heading_title"), 'editor_container_smoothing', 'btn_submit_smoothing'));
|
||||||
$('#conf_cont_smoothing').append(createHelpTable(schema.smoothing.properties, $.i18n("edt_conf_smooth_heading_title")));
|
$('#conf_cont_smoothing').append(createHelpTable(window.schema.smoothing.properties, $.i18n("edt_conf_smooth_heading_title")));
|
||||||
|
|
||||||
//blackborder
|
//blackborder
|
||||||
$('#conf_cont').append(createRow('conf_cont_blackborder'))
|
$('#conf_cont').append(createRow('conf_cont_blackborder'));
|
||||||
$('#conf_cont_blackborder').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
|
$('#conf_cont_blackborder').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
|
||||||
$('#conf_cont_blackborder').append(createHelpTable(schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title")));
|
$('#conf_cont_blackborder').append(createHelpTable(window.schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title")));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -31,7 +31,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//color
|
//color
|
||||||
editor_color = createJsonEditor('editor_container_color', {
|
editor_color = createJsonEditor('editor_container_color', {
|
||||||
color : schema.color
|
color : window.schema.color
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
editor_color.on('change',function() {
|
editor_color.on('change',function() {
|
||||||
@ -44,7 +44,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//smoothing
|
//smoothing
|
||||||
editor_smoothing = createJsonEditor('editor_container_smoothing', {
|
editor_smoothing = createJsonEditor('editor_container_smoothing', {
|
||||||
smoothing : schema.smoothing
|
smoothing : window.schema.smoothing
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
editor_smoothing.on('change',function() {
|
editor_smoothing.on('change',function() {
|
||||||
@ -57,7 +57,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//blackborder
|
//blackborder
|
||||||
editor_blackborder = createJsonEditor('editor_container_blackborder', {
|
editor_blackborder = createJsonEditor('editor_container_blackborder', {
|
||||||
blackborderdetector: schema.blackborderdetector
|
blackborderdetector: window.schema.blackborderdetector
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
editor_blackborder.on('change',function() {
|
editor_blackborder.on('change',function() {
|
||||||
@ -72,7 +72,7 @@ $(document).ready( function() {
|
|||||||
$('#editor_container_blackborder').append(buildWL("user/moretopics/bbmode","edt_conf_bb_mode_title",true));
|
$('#editor_container_blackborder').append(buildWL("user/moretopics/bbmode","edt_conf_bb_mode_title",true));
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint("intro", $.i18n('conf_colors_color_intro'), "editor_container_color");
|
createHint("intro", $.i18n('conf_colors_color_intro'), "editor_container_color");
|
||||||
createHint("intro", $.i18n('conf_colors_smoothing_intro'), "editor_container_smoothing");
|
createHint("intro", $.i18n('conf_colors_smoothing_intro'), "editor_container_smoothing");
|
||||||
|
@ -1,58 +1,58 @@
|
|||||||
$(document).ready( function() {
|
$(document).ready( function() {
|
||||||
performTranslation();
|
performTranslation();
|
||||||
|
|
||||||
function newsCont(t,e,l)
|
// function newsCont(t,e,l)
|
||||||
{
|
// {
|
||||||
var h = '<div style="padding-left:9px;border-left:6px solid #0088cc;">';
|
// var h = '<div style="padding-left:9px;border-left:6px solid #0088cc;">';
|
||||||
h += '<h4 style="font-weight:bold;font-size:17px">'+t+'</h4>';
|
// h += '<h4 style="font-weight:bold;font-size:17px">'+t+'</h4>';
|
||||||
h += e;
|
// h += e;
|
||||||
h += '<a href="'+l+'" class="" target="_blank"><i class="fa fa-fw fa-newspaper-o"></i>'+$.i18n('dashboard_newsbox_readmore')+'</a>';
|
// h += '<a href="'+l+'" class="" target="_blank"><i class="fa fa-fw fa-newspaper-o"></i>'+$.i18n('dashboard_newsbox_readmore')+'</a>';
|
||||||
h += '</div><hr/>';
|
// h += '</div><hr/>';
|
||||||
$('#dash_news').append(h);
|
// $('#dash_news').append(h);
|
||||||
}
|
// }
|
||||||
|
|
||||||
function createNews(d)
|
// function createNews(d)
|
||||||
{
|
// {
|
||||||
for(var i = 0; i<d.length; i++)
|
// for(var i = 0; i<d.length; i++)
|
||||||
{
|
// {
|
||||||
if(i > 5)
|
// if(i > 5)
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
|
// var title = d[i].title.rendered;
|
||||||
|
// var excerpt = d[i].excerpt.rendered;
|
||||||
|
// var link = d[i].link+'?pk_campaign=WebUI&pk_kwd=news_'+d[i].slug;
|
||||||
|
//
|
||||||
|
// newsCont(title,excerpt,link);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
title = d[i].title.rendered;
|
// function getNews()
|
||||||
excerpt = d[i].excerpt.rendered;
|
// {
|
||||||
link = d[i].link+'?pk_campaign=WebUI&pk_kwd=news_'+d[i].slug;
|
// var h = '<span style="color:red;font-weight:bold">'+$.i18n('dashboard_newsbox_noconn')+'</span>';
|
||||||
|
// $.ajax({
|
||||||
newsCont(title,excerpt,link);
|
// url: 'https://hyperion-project.org/wp-json/wp/v2/posts?_embed',
|
||||||
}
|
// dataType: 'json',
|
||||||
}
|
// type: 'GET',
|
||||||
|
// timeout: 2000
|
||||||
function getNews()
|
// })
|
||||||
{
|
// .done( function( data, textStatus, jqXHR ) {
|
||||||
var h = '<span style="color:red;font-weight:bold">'+$.i18n('dashboard_newsbox_noconn')+'</span>';
|
// if(jqXHR.status == 200)
|
||||||
$.ajax({
|
// createNews(data);
|
||||||
url: 'https://hyperion-project.org/wp-json/wp/v2/posts?_embed',
|
// else
|
||||||
dataType: 'json',
|
// $('#dash_news').html(h);
|
||||||
type: 'GET',
|
// })
|
||||||
timeout: 2000
|
// .fail( function( jqXHR, textStatus ) {
|
||||||
})
|
// $('#dash_news').html(h);
|
||||||
.done( function( data, textStatus, jqXHR ) {
|
// });
|
||||||
if(jqXHR.status == 200)
|
// }
|
||||||
createNews(data);
|
|
||||||
else
|
|
||||||
$('#dash_news').html(h);
|
|
||||||
})
|
|
||||||
.fail( function( jqXHR, textStatus ) {
|
|
||||||
$('#dash_news').html(h);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// getNews();
|
// getNews();
|
||||||
|
|
||||||
function updateComponents()
|
function updateComponents()
|
||||||
{
|
{
|
||||||
var components = comps;
|
var components = window.comps;
|
||||||
components_html = "";
|
var components_html = "";
|
||||||
for ( idx=0; idx<components.length;idx++)
|
for ( var idx=0; idx<components.length;idx++)
|
||||||
{
|
{
|
||||||
if(components[idx].name != "ALL")
|
if(components[idx].name != "ALL")
|
||||||
components_html += '<tr><td>'+$.i18n('general_comp_'+components[idx].name)+'</td><td><i class="fa fa-circle component-'+(components[idx].enabled?"on":"off")+'"></i></td></tr>';
|
components_html += '<tr><td>'+$.i18n('general_comp_'+components[idx].name)+'</td><td><i class="fa fa-circle component-'+(components[idx].enabled?"on":"off")+'"></i></td></tr>';
|
||||||
@ -60,7 +60,7 @@ $(document).ready( function() {
|
|||||||
$("#tab_components").html(components_html);
|
$("#tab_components").html(components_html);
|
||||||
|
|
||||||
//info
|
//info
|
||||||
hyperion_enabled = true;
|
var hyperion_enabled = true;
|
||||||
|
|
||||||
components.forEach( function(obj) {
|
components.forEach( function(obj) {
|
||||||
if (obj.name == "ALL")
|
if (obj.name == "ALL")
|
||||||
@ -74,27 +74,28 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add more info
|
// add more info
|
||||||
$('#dash_leddevice').html(serverInfo.ledDevices.active);
|
$('#dash_leddevice').html(window.serverInfo.ledDevices.active);
|
||||||
$('#dash_currv').html(currentVersion);
|
$('#dash_currv').html(window.currentVersion);
|
||||||
$('#dash_instance').html(serverConfig.general.name);
|
$('#dash_instance').html(window.serverConfig.general.name);
|
||||||
$('#dash_ports').html(serverConfig.flatbufServer.port);
|
$('#dash_ports').html(window.serverConfig.flatbufServer.port+' | '+window.serverConfig.protoServer.port);
|
||||||
|
|
||||||
$.get( "https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/version.json", function( data ) {
|
$.get( "https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/version.json", function( data ) {
|
||||||
parsedUpdateJSON = JSON.parse(data);
|
window.parsedUpdateJSON = JSON.parse(data);
|
||||||
latestVersion = parsedUpdateJSON[0].versionnr;
|
window.latestVersion = window.parsedUpdateJSON[0].versionnr;
|
||||||
var cleanLatestVersion = latestVersion.replace(/\./g, '');
|
// var cleanLatestVersion = window.latestVersion.replace(/\./g, '');
|
||||||
var cleanCurrentVersion = currentVersion.replace(/\./g, '');
|
// var cleanCurrentVersion = window.currentVersion.replace(/\./g, '');
|
||||||
|
|
||||||
// $('#dash_latev').html(latestVersion);
|
$('#dash_latev').html(window.currentVersion);
|
||||||
|
// $('#dash_latev').html(window.latestVersion);
|
||||||
|
|
||||||
// if ( cleanCurrentVersion < cleanLatestVersion )
|
// if ( cleanCurrentVersion < cleanLatestVersion )
|
||||||
// $('#versioninforesult').html('<div class="bs-callout bs-callout-warning" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
|
// $('#versioninforesult').html('<div class="bs-callout bs-callout-warning" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatewarning', window.latestVersion)+'</div>');
|
||||||
// else
|
// else
|
||||||
$('#versioninforesult').html('<div class="bs-callout bs-callout-success" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
|
$('#versioninforesult').html('<div class="bs-callout bs-callout-success" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
|
||||||
});
|
});
|
||||||
|
|
||||||
//determine platform
|
//determine platform
|
||||||
var grabbers = serverInfo.grabbers.available;
|
var grabbers = window.serverInfo.grabbers.available;
|
||||||
var html = "";
|
var html = "";
|
||||||
|
|
||||||
if(grabbers.indexOf('dispmanx') > -1)
|
if(grabbers.indexOf('dispmanx') > -1)
|
||||||
@ -113,9 +114,9 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//interval update
|
//interval update
|
||||||
updateComponents();
|
updateComponents();
|
||||||
$(hyperion).on("components-updated",updateComponents);
|
$(window.hyperion).on("components-updated",updateComponents);
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
createHintH("intro", $.i18n('dashboard_label_intro'), "dash_intro");
|
createHintH("intro", $.i18n('dashboard_label_intro'), "dash_intro");
|
||||||
|
|
||||||
removeOverlay();
|
removeOverlay();
|
||||||
|
@ -2,29 +2,29 @@ $(document).ready( function() {
|
|||||||
performTranslation();
|
performTranslation();
|
||||||
var oldEffects = [];
|
var oldEffects = [];
|
||||||
var effects_editor = null;
|
var effects_editor = null;
|
||||||
var confFgEff = serverConfig.foregroundEffect.effect;
|
var confFgEff = window.serverConfig.foregroundEffect.effect;
|
||||||
var confBgEff = serverConfig.backgroundEffect.effect;
|
var confBgEff = window.serverConfig.backgroundEffect.effect;
|
||||||
var foregroundEffect_editor = null;
|
var foregroundEffect_editor = null;
|
||||||
var backgroundEffect_editor = null;
|
var backgroundEffect_editor = null;
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
//foreground effect
|
//foreground effect
|
||||||
$('#conf_cont').append(createRow('conf_cont_fge'))
|
$('#conf_cont').append(createRow('conf_cont_fge'));
|
||||||
$('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
|
$('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
|
||||||
$('#conf_cont_fge').append(createHelpTable(schema.foregroundEffect.properties, $.i18n("edt_conf_fge_heading_title")));
|
$('#conf_cont_fge').append(createHelpTable(window.schema.foregroundEffect.properties, $.i18n("edt_conf_fge_heading_title")));
|
||||||
|
|
||||||
//background effect
|
//background effect
|
||||||
$('#conf_cont').append(createRow('conf_cont_bge'))
|
$('#conf_cont').append(createRow('conf_cont_bge'));
|
||||||
$('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
|
$('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
|
||||||
$('#conf_cont_bge').append(createHelpTable(schema.backgroundEffect.properties, $.i18n("edt_conf_bge_heading_title")));
|
$('#conf_cont_bge').append(createHelpTable(window.schema.backgroundEffect.properties, $.i18n("edt_conf_bge_heading_title")));
|
||||||
|
|
||||||
//effect path
|
//effect path
|
||||||
if(storedAccess != 'default')
|
if(storedAccess != 'default')
|
||||||
{
|
{
|
||||||
$('#conf_cont').append(createRow('conf_cont_ef'))
|
$('#conf_cont').append(createRow('conf_cont_ef'));
|
||||||
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
|
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
|
||||||
$('#conf_cont_ef').append(createHelpTable(schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
|
$('#conf_cont_ef').append(createHelpTable(window.schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -39,7 +39,7 @@ $(document).ready( function() {
|
|||||||
if(storedAccess != 'default')
|
if(storedAccess != 'default')
|
||||||
{
|
{
|
||||||
effects_editor = createJsonEditor('editor_container_effects', {
|
effects_editor = createJsonEditor('editor_container_effects', {
|
||||||
effects : schema.effects
|
effects : window.schema.effects
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
effects_editor.on('change',function() {
|
effects_editor.on('change',function() {
|
||||||
@ -52,11 +52,11 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foregroundEffect_editor = createJsonEditor('editor_container_foregroundEffect', {
|
foregroundEffect_editor = createJsonEditor('editor_container_foregroundEffect', {
|
||||||
foregroundEffect : schema.foregroundEffect
|
foregroundEffect : window.schema.foregroundEffect
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
backgroundEffect_editor = createJsonEditor('editor_container_backgroundEffect', {
|
backgroundEffect_editor = createJsonEditor('editor_container_backgroundEffect', {
|
||||||
backgroundEffect : schema.backgroundEffect
|
backgroundEffect : window.schema.backgroundEffect
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
|
|
||||||
@ -75,19 +75,19 @@ $(document).ready( function() {
|
|||||||
$('#btn_submit_foregroundEffect').off().on('click',function() {
|
$('#btn_submit_foregroundEffect').off().on('click',function() {
|
||||||
var value = foregroundEffect_editor.getValue();
|
var value = foregroundEffect_editor.getValue();
|
||||||
if(typeof value.foregroundEffect.effect == 'undefined')
|
if(typeof value.foregroundEffect.effect == 'undefined')
|
||||||
value.foregroundEffect.effect = serverConfig.foregroundEffect.effect;
|
value.foregroundEffect.effect = window.serverConfig.foregroundEffect.effect;
|
||||||
requestWriteConfig(value);
|
requestWriteConfig(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#btn_submit_backgroundEffect').off().on('click',function() {
|
$('#btn_submit_backgroundEffect').off().on('click',function() {
|
||||||
var value = backgroundEffect_editor.getValue();
|
var value = backgroundEffect_editor.getValue();
|
||||||
if(typeof value.backgroundEffect.effect == 'undefined')
|
if(typeof value.backgroundEffect.effect == 'undefined')
|
||||||
value.backgroundEffect.effect = serverConfig.backgroundEffect.effect;
|
value.backgroundEffect.effect = window.serverConfig.backgroundEffect.effect;
|
||||||
requestWriteConfig(value);
|
requestWriteConfig(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint("intro", $.i18n('conf_effect_path_intro'), "editor_container_effects");
|
createHint("intro", $.i18n('conf_effect_path_intro'), "editor_container_effects");
|
||||||
createHint("intro", $.i18n('conf_effect_fgeff_intro'), "editor_container_foregroundEffect");
|
createHint("intro", $.i18n('conf_effect_fgeff_intro'), "editor_container_foregroundEffect");
|
||||||
@ -95,14 +95,14 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateEffectlist(){
|
function updateEffectlist(){
|
||||||
var newEffects = serverInfo.effects;
|
var newEffects = window.serverInfo.effects;
|
||||||
if (newEffects.length != oldEffects.length)
|
if (newEffects.length != oldEffects.length)
|
||||||
{
|
{
|
||||||
$('#root_foregroundEffect_effect').html('');
|
$('#root_foregroundEffect_effect').html('');
|
||||||
var usrEffArr = [];
|
var usrEffArr = [];
|
||||||
var sysEffArr = [];
|
var sysEffArr = [];
|
||||||
|
|
||||||
for(i = 0; i < newEffects.length; i++)
|
for(var i = 0; i < newEffects.length; i++)
|
||||||
{
|
{
|
||||||
var effectName = newEffects[i].name;
|
var effectName = newEffects[i].name;
|
||||||
if(!/^\:/.test(newEffects[i].file))
|
if(!/^\:/.test(newEffects[i].file))
|
||||||
@ -121,8 +121,8 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//interval update
|
//interval update
|
||||||
$(hyperion).on("cmd-effects-update", function(event){
|
$(window.hyperion).on("cmd-effects-update", function(event){
|
||||||
serverInfo.effects = event.response.data.effects
|
window.serverInfo.effects = event.response.data.effects
|
||||||
updateEffectlist();
|
updateEffectlist();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ $(document).ready( function() {
|
|||||||
var effectPy = "";
|
var effectPy = "";
|
||||||
var testrun;
|
var testrun;
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
|
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
|
||||||
|
|
||||||
function updateDelEffectlist(){
|
function updateDelEffectlist(){
|
||||||
var newDelList = serverInfo.effects;
|
var newDelList = window.serverInfo.effects;
|
||||||
if(newDelList.length != oldDelList.length)
|
if(newDelList.length != oldDelList.length)
|
||||||
{
|
{
|
||||||
$('#effectsdellist').html("");
|
$('#effectsdellist').html("");
|
||||||
@ -107,7 +107,7 @@ $(document).ready( function() {
|
|||||||
// Save Effect
|
// Save Effect
|
||||||
$('#btn_write').off().on('click',function() {
|
$('#btn_write').off().on('click',function() {
|
||||||
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()),imageData);
|
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()),imageData);
|
||||||
$(hyperion).one("cmd-create-effect", function(event) {
|
$(window.hyperion).one("cmd-create-effect", function(event) {
|
||||||
if (event.response.success)
|
if (event.response.success)
|
||||||
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
|
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
|
||||||
});
|
});
|
||||||
@ -137,7 +137,7 @@ $(document).ready( function() {
|
|||||||
$('#btn_delete').off().on('click',function() {
|
$('#btn_delete').off().on('click',function() {
|
||||||
var name = $("#effectsdellist").val().split("_")[1];
|
var name = $("#effectsdellist").val().split("_")[1];
|
||||||
requestDeleteEffect(name);
|
requestDeleteEffect(name);
|
||||||
$(hyperion).one("cmd-delete-effect", function(event) {
|
$(window.hyperion).one("cmd-delete-effect", function(event) {
|
||||||
if (event.response.success)
|
if (event.response.success)
|
||||||
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
|
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
|
||||||
});
|
});
|
||||||
@ -163,15 +163,15 @@ $(document).ready( function() {
|
|||||||
$("#name-input").val(name);
|
$("#name-input").val(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
var efx = serverInfo.effects;
|
var efx = window.serverInfo.effects;
|
||||||
for(var i = 0; i<efx.length; i++)
|
for(var i = 0; i<efx.length; i++)
|
||||||
{
|
{
|
||||||
if(efx[i].name == name)
|
if(efx[i].name == name)
|
||||||
{
|
{
|
||||||
var py = efx[i].script.split("/").pop()
|
var py = efx[i].script.split("/").pop();
|
||||||
$("#effectslist").val(py).trigger("change");
|
$("#effectslist").val(py).trigger("change");
|
||||||
|
|
||||||
for(key in efx[i].args)
|
for(var key in efx[i].args)
|
||||||
{
|
{
|
||||||
var ed = effects_editor.getEditor('root.args.'+[key]);
|
var ed = effects_editor.getEditor('root.args.'+[key]);
|
||||||
if(ed)
|
if(ed)
|
||||||
@ -183,7 +183,7 @@ $(document).ready( function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//create basic effect list
|
//create basic effect list
|
||||||
var effects = serverSchema.properties.effectSchemas.internal
|
var effects = window.serverSchema.properties.effectSchemas.internal;
|
||||||
for(var idx=0; idx<effects.length; idx++)
|
for(var idx=0; idx<effects.length; idx++)
|
||||||
{
|
{
|
||||||
$("#effectslist").append(createSelOpt(effects[idx].schemaContent.script, $.i18n(effects[idx].schemaContent.title)));
|
$("#effectslist").append(createSelOpt(effects[idx].schemaContent.script, $.i18n(effects[idx].schemaContent.title)));
|
||||||
@ -193,8 +193,8 @@ $(document).ready( function() {
|
|||||||
updateDelEffectlist();
|
updateDelEffectlist();
|
||||||
|
|
||||||
//interval update
|
//interval update
|
||||||
$(hyperion).on("cmd-effects-update", function(event){
|
$(window.hyperion).on("cmd-effects-update", function(event){
|
||||||
serverInfo.effects = event.response.data.effects
|
window.serverInfo.effects = event.response.data.effects
|
||||||
updateDelEffectlist();
|
updateDelEffectlist();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -6,15 +6,15 @@ $(document).ready( function() {
|
|||||||
var conf_editor = null;
|
var conf_editor = null;
|
||||||
|
|
||||||
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_gen_heading_title"), 'editor_container', 'btn_submit'));
|
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_gen_heading_title"), 'editor_container', 'btn_submit'));
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
$('#conf_cont').append(createHelpTable(schema.general.properties, $.i18n("edt_conf_gen_heading_title")));
|
$('#conf_cont').append(createHelpTable(window.schema.general.properties, $.i18n("edt_conf_gen_heading_title")));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$('#conf_imp').appendTo('#conf_cont');
|
$('#conf_imp').appendTo('#conf_cont');
|
||||||
|
|
||||||
conf_editor = createJsonEditor('editor_container', {
|
conf_editor = createJsonEditor('editor_container', {
|
||||||
general: schema.general
|
general: window.schema.general
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor.on('change',function() {
|
conf_editor.on('change',function() {
|
||||||
@ -88,7 +88,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//export
|
//export
|
||||||
$('#btn_export_conf').off().on('click', function(){
|
$('#btn_export_conf').off().on('click', function(){
|
||||||
var name = serverConfig.general.name;
|
var name = window.serverConfig.general.name;
|
||||||
|
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
var month = d.getMonth()+1;
|
var month = d.getMonth()+1;
|
||||||
@ -98,11 +98,11 @@ $(document).ready( function() {
|
|||||||
(month<10 ? '0' : '') + month + '.' +
|
(month<10 ? '0' : '') + month + '.' +
|
||||||
(day<10 ? '0' : '') + day;
|
(day<10 ? '0' : '') + day;
|
||||||
|
|
||||||
download(JSON.stringify(serverConfig, null, "\t"), 'Hyperion-'+currentVersion+'-Backup ('+name+') '+timestamp+'.json', "application/json");
|
download(JSON.stringify(window.serverConfig, null, "\t"), 'Hyperion-'+window.currentVersion+'-Backup ('+name+') '+timestamp+'.json', "application/json");
|
||||||
});
|
});
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
createHint("intro", $.i18n('conf_general_intro'), "editor_container");
|
createHint("intro", $.i18n('conf_general_intro'), "editor_container");
|
||||||
|
|
||||||
removeOverlay();
|
removeOverlay();
|
||||||
|
@ -12,22 +12,22 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
//fg
|
//fg
|
||||||
$('#conf_cont').append(createRow('conf_cont_instCapt'))
|
$('#conf_cont').append(createRow('conf_cont_instCapt'));
|
||||||
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
||||||
$('#conf_cont_instCapt').append(createHelpTable(schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
|
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
|
||||||
|
|
||||||
//fg
|
//fg
|
||||||
$('#conf_cont').append(createRow('conf_cont_fg'))
|
$('#conf_cont').append(createRow('conf_cont_fg'));
|
||||||
$('#conf_cont_fg').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_fg', 'btn_submit_fg'));
|
$('#conf_cont_fg').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_fg', 'btn_submit_fg'));
|
||||||
$('#conf_cont_fg').append(createHelpTable(schema.framegrabber.properties, $.i18n("edt_conf_fg_heading_title")));
|
$('#conf_cont_fg').append(createHelpTable(window.schema.framegrabber.properties, $.i18n("edt_conf_fg_heading_title")));
|
||||||
|
|
||||||
//v4l
|
//v4l
|
||||||
$('#conf_cont').append(createRow('conf_cont_v4l'))
|
$('#conf_cont').append(createRow('conf_cont_v4l'));
|
||||||
$('#conf_cont_v4l').append(createOptPanel('fa-camera', $.i18n("edt_conf_v4l2_heading_title"), 'editor_container_v4l2', 'btn_submit_v4l2'));
|
$('#conf_cont_v4l').append(createOptPanel('fa-camera', $.i18n("edt_conf_v4l2_heading_title"), 'editor_container_v4l2', 'btn_submit_v4l2'));
|
||||||
$('#conf_cont_v4l').append(createHelpTable(schema.grabberV4L2.items.properties, $.i18n("edt_conf_v4l2_heading_title")));
|
$('#conf_cont_v4l').append(createHelpTable(window.schema.grabberV4L2.properties, $.i18n("edt_conf_v4l2_heading_title")));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -38,7 +38,7 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
//instCapt
|
//instCapt
|
||||||
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
|
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
|
||||||
instCapture: schema.instCapture
|
instCapture: window.schema.instCapture
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_instCapt.on('change',function() {
|
conf_editor_instCapt.on('change',function() {
|
||||||
@ -52,7 +52,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//fg
|
//fg
|
||||||
conf_editor_fg = createJsonEditor('editor_container_fg', {
|
conf_editor_fg = createJsonEditor('editor_container_fg', {
|
||||||
framegrabber: schema.framegrabber
|
framegrabber: window.schema.framegrabber
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_fg.on('change',function() {
|
conf_editor_fg.on('change',function() {
|
||||||
@ -65,7 +65,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//vl4
|
//vl4
|
||||||
conf_editor_v4l2 = createJsonEditor('editor_container_v4l2', {
|
conf_editor_v4l2 = createJsonEditor('editor_container_v4l2', {
|
||||||
grabberV4L2 : schema.grabberV4L2
|
grabberV4L2 : window.schema.grabberV4L2
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_v4l2.on('change',function() {
|
conf_editor_v4l2.on('change',function() {
|
||||||
@ -77,7 +77,7 @@ $(document).ready( function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint("intro", $.i18n('conf_grabber_fg_intro'), "editor_container_fg");
|
createHint("intro", $.i18n('conf_grabber_fg_intro'), "editor_container_fg");
|
||||||
createHint("intro", $.i18n('conf_grabber_v4l_intro'), "editor_container_v4l2");
|
createHint("intro", $.i18n('conf_grabber_v4l_intro'), "editor_container_v4l2");
|
||||||
@ -85,7 +85,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//hide specific options
|
//hide specific options
|
||||||
conf_editor_fg.on('ready',function() {
|
conf_editor_fg.on('ready',function() {
|
||||||
var grabbers = serverInfo.grabbers.available;
|
var grabbers = window.serverInfo.grabbers.available;
|
||||||
|
|
||||||
if(grabbers.indexOf('dispmanx') > -1)
|
if(grabbers.indexOf('dispmanx') > -1)
|
||||||
hideEl(["device","pixelDecimation"]);
|
hideEl(["device","pixelDecimation"]);
|
||||||
|
@ -4,14 +4,14 @@ $(document).ready( function() {
|
|||||||
loadContentTo("#container_restart","restart");
|
loadContentTo("#container_restart","restart");
|
||||||
initWebSocket();
|
initWebSocket();
|
||||||
|
|
||||||
$(hyperion).on("cmd-serverinfo",function(event){
|
$(window.hyperion).on("cmd-serverinfo",function(event){
|
||||||
serverInfo = event.response.info;
|
window.serverInfo = event.response.info;
|
||||||
// comps
|
// comps
|
||||||
comps = event.response.info.components
|
window.comps = event.response.info.components
|
||||||
|
|
||||||
$(hyperion).trigger("ready");
|
$(window.hyperion).trigger("ready");
|
||||||
|
|
||||||
comps.forEach( function(obj) {
|
window.comps.forEach( function(obj) {
|
||||||
if (obj.name == "ALL")
|
if (obj.name == "ALL")
|
||||||
{
|
{
|
||||||
if(obj.enabled)
|
if(obj.enabled)
|
||||||
@ -21,7 +21,7 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (serverInfo.hyperion.enabled)
|
if (window.serverInfo.hyperion.enabled)
|
||||||
$("#hyperion_disabled_notify").fadeOut("fast");
|
$("#hyperion_disabled_notify").fadeOut("fast");
|
||||||
else
|
else
|
||||||
$("#hyperion_disabled_notify").fadeIn("fast");
|
$("#hyperion_disabled_notify").fadeIn("fast");
|
||||||
@ -29,59 +29,59 @@ $(document).ready( function() {
|
|||||||
updateSessions();
|
updateSessions();
|
||||||
}); // end cmd-serverinfo
|
}); // end cmd-serverinfo
|
||||||
|
|
||||||
$(hyperion).on("cmd-sessions-update", function(event) {
|
$(window.hyperion).on("cmd-sessions-update", function(event) {
|
||||||
serverInfo.sessions = event.response.data;
|
window.serverInfo.sessions = event.response.data;
|
||||||
updateSessions();
|
updateSessions();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-sysinfo", function(event) {
|
$(window.hyperion).on("cmd-sysinfo", function(event) {
|
||||||
requestServerInfo();
|
requestServerInfo();
|
||||||
sysInfo = event.response.info;
|
window.sysInfo = event.response.info;
|
||||||
|
|
||||||
currentVersion = sysInfo.hyperion.version;
|
window.currentVersion = window.sysInfo.hyperion.version;
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).one("cmd-config-getschema", function(event) {
|
$(window.hyperion).one("cmd-config-getschema", function(event) {
|
||||||
serverSchema = event.response.info;
|
window.serverSchema = event.response.info;
|
||||||
requestServerConfig();
|
requestServerConfig();
|
||||||
|
|
||||||
schema = serverSchema.properties;
|
window.schema = window.serverSchema.properties;
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-config-getconfig", function(event) {
|
$(window.hyperion).on("cmd-config-getconfig", function(event) {
|
||||||
serverConfig = event.response.info;
|
window.serverConfig = event.response.info;
|
||||||
requestSysInfo();
|
requestSysInfo();
|
||||||
|
|
||||||
showOptHelp = serverConfig.general.showOptHelp;
|
window.showOptHelp = window.serverConfig.general.showOptHelp;
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-config-setconfig", function(event) {
|
$(window.hyperion).on("cmd-config-setconfig", function(event) {
|
||||||
if (event.response.success === true) {
|
if (event.response.success === true) {
|
||||||
$('#hyperion_config_write_success_notify').fadeIn().delay(5000).fadeOut();
|
$('#hyperion_config_write_success_notify').fadeIn().delay(5000).fadeOut();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("error",function(event){
|
$(window.hyperion).on("error",function(event){
|
||||||
showInfoDialog("error","Error", event.reason);
|
showInfoDialog("error","Error", event.reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("open",function(event){
|
$(window.hyperion).on("open",function(event){
|
||||||
requestServerConfigSchema();
|
requestServerConfigSchema();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).one("ready", function(event) {
|
$(window.hyperion).one("ready", function(event) {
|
||||||
loadContent();
|
loadContent();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-adjustment-update", function(event) {
|
$(window.hyperion).on("cmd-adjustment-update", function(event) {
|
||||||
serverInfo.adjustment = event.response.data
|
window.serverInfo.adjustment = event.response.data
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-videomode-update", function(event) {
|
$(window.hyperion).on("cmd-videomode-update", function(event) {
|
||||||
serverInfo.videomode = event.response.data.videomode
|
window.serverInfo.videomode = event.response.data.videomode
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-components-update", function(event) {
|
$(window.hyperion).on("cmd-components-update", function(event) {
|
||||||
let obj = event.response.data
|
let obj = event.response.data
|
||||||
|
|
||||||
// notfication in index
|
// notfication in index
|
||||||
@ -93,17 +93,17 @@ $(document).ready( function() {
|
|||||||
$("#hyperion_disabled_notify").fadeIn("fast");
|
$("#hyperion_disabled_notify").fadeIn("fast");
|
||||||
}
|
}
|
||||||
|
|
||||||
comps.forEach((entry, index) => {
|
window.comps.forEach((entry, index) => {
|
||||||
if (entry.name === obj.name){
|
if (entry.name === obj.name){
|
||||||
comps[index] = obj;
|
window.comps[index] = obj;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// notify the update
|
// notify the update
|
||||||
$(hyperion).trigger("components-updated");
|
$(window.hyperion).trigger("components-updated");
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-effects-update", function(event){
|
$(window.hyperion).on("cmd-effects-update", function(event){
|
||||||
serverInfo.effects = event.response.data.effects
|
window.serverInfo.effects = event.response.data.effects
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".mnava").bind('click.menu', function(e){
|
$(".mnava").bind('click.menu', function(e){
|
||||||
|
@ -30,19 +30,19 @@ function createLedPreview(leds, origin){
|
|||||||
|
|
||||||
$('.st_helper').css("border", "8px solid grey");
|
$('.st_helper').css("border", "8px solid grey");
|
||||||
|
|
||||||
canvas_height = $('#leds_preview').innerHeight();
|
var canvas_height = $('#leds_preview').innerHeight();
|
||||||
canvas_width = $('#leds_preview').innerWidth();
|
var canvas_width = $('#leds_preview').innerWidth();
|
||||||
|
|
||||||
leds_html = "";
|
var leds_html = "";
|
||||||
for(var idx=0; idx<leds.length; idx++)
|
for(var idx=0; idx<leds.length; idx++)
|
||||||
{
|
{
|
||||||
led = leds[idx];
|
var led = leds[idx];
|
||||||
led_id='ledc_'+[idx];
|
var led_id='ledc_'+[idx];
|
||||||
bgcolor = "background-color:hsl("+(idx*360/leds.length)+",100%,50%);";
|
var bgcolor = "background-color:hsl("+(idx*360/leds.length)+",100%,50%);";
|
||||||
pos = "left:"+(led.hscan.minimum * canvas_width)+"px;"+
|
var pos = "left:"+(led.hscan.minimum * canvas_width)+"px;"+
|
||||||
"top:"+(led.vscan.minimum * canvas_height)+"px;"+
|
"top:"+(led.vscan.minimum * canvas_height)+"px;"+
|
||||||
"width:"+((led.hscan.maximum-led.hscan.minimum) * canvas_width-1)+"px;"+
|
"width:"+((led.hscan.maximum-led.hscan.minimum) * (canvas_width-1))+"px;"+
|
||||||
"height:"+((led.vscan.maximum-led.vscan.minimum) * canvas_height-1)+"px;";
|
"height:"+((led.vscan.maximum-led.vscan.minimum) * (canvas_height-1))+"px;";
|
||||||
leds_html += '<div id="'+led_id+'" class="led" style="'+bgcolor+pos+'" title="'+led.index+'"><span id="'+led_id+'_num" class="led_prev_num">'+led.index+'</span></div>';
|
leds_html += '<div id="'+led_id+'" class="led" style="'+bgcolor+pos+'" title="'+led.index+'"><span id="'+led_id+'_num" class="led_prev_num">'+led.index+'</span></div>';
|
||||||
}
|
}
|
||||||
$('#leds_preview').html(leds_html);
|
$('#leds_preview').html(leds_html);
|
||||||
@ -87,10 +87,10 @@ function createClassicLeds(){
|
|||||||
function createFinalArray(array){
|
function createFinalArray(array){
|
||||||
finalLedArray = [];
|
finalLedArray = [];
|
||||||
for(var i = 0; i<array.length; i++){
|
for(var i = 0; i<array.length; i++){
|
||||||
hmin = array[i].hscan.minimum;
|
var hmin = array[i].hscan.minimum;
|
||||||
hmax = array[i].hscan.maximum;
|
var hmax = array[i].hscan.maximum;
|
||||||
vmin = array[i].vscan.minimum;
|
var vmin = array[i].vscan.minimum;
|
||||||
vmax = array[i].vscan.maximum;
|
var vmax = array[i].vscan.maximum;
|
||||||
finalLedArray[i] = { "index" : i, "hscan": { "maximum" : hmax, "minimum" : hmin }, "vscan": { "maximum": vmax, "minimum": vmin}}
|
finalLedArray[i] = { "index" : i, "hscan": { "maximum" : hmax, "minimum" : hmin }, "vscan": { "maximum": vmax, "minimum": vmin}}
|
||||||
}
|
}
|
||||||
createLedPreview(finalLedArray, 'classic');
|
createLedPreview(finalLedArray, 'classic');
|
||||||
@ -115,9 +115,9 @@ function createClassicLeds(){
|
|||||||
function valScan(val)
|
function valScan(val)
|
||||||
{
|
{
|
||||||
if(val > 1)
|
if(val > 1)
|
||||||
return val = 1;
|
return 1;
|
||||||
if(val < 0)
|
if(val < 0)
|
||||||
return val = 0;
|
return 0;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,62 +138,65 @@ function createClassicLeds(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createTopLeds(){
|
function createTopLeds(){
|
||||||
step=(Hmax-Hmin)/ledstop;
|
var step=(Hmax-Hmin)/ledstop;
|
||||||
//if(cornerVGap != '0')
|
//if(cornerVGap != '0')
|
||||||
// step=(Hmax-Hmin-(cornerHGap*2))/ledstop;
|
// step=(Hmax-Hmin-(cornerHGap*2))/ledstop;
|
||||||
|
|
||||||
vmin=Vmin;
|
var vmin=Vmin;
|
||||||
vmax=vmin+ledsHDepth;
|
var vmax=vmin+ledsHDepth;
|
||||||
for (var i = 0; i<ledstop; i++){
|
for (var i = 0; i<ledstop; i++){
|
||||||
hmin = ovl("-",(Hdiff/ledstop*[i])+edgeHGap);
|
var hmin = ovl("-",(Hdiff/ledstop*Number([i]))+edgeHGap);
|
||||||
hmax = ovl("+",(Hdiff/ledstop*[i])+step+edgeHGap);
|
var hmax = ovl("+",(Hdiff/ledstop*Number([i]))+step+edgeHGap);
|
||||||
createLedArray(hmin, hmax, vmin, vmax);
|
createLedArray(hmin, hmax, vmin, vmax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createLeftLeds(){
|
function createLeftLeds(){
|
||||||
step=(Vmax-Vmin)/ledsleft;
|
var step=(Vmax-Vmin)/ledsleft;
|
||||||
//if(cornerVGap != '0')
|
//if(cornerVGap != '0')
|
||||||
// step=(Vmax-Vmin-(cornerVGap*2))/ledsleft;
|
// step=(Vmax-Vmin-(cornerVGap*2))/ledsleft;
|
||||||
|
|
||||||
hmin=Hmin;
|
var hmin=Hmin;
|
||||||
hmax=hmin+ledsVDepth;
|
var hmax=hmin+ledsVDepth;
|
||||||
for (var i = ledsleft-1; i>-1; --i){
|
for (var i = ledsleft-1; i>-1; --i){
|
||||||
vmin = ovl("-",(Vdiff/ledsleft*[i])+edgeVGap);
|
var vmin = ovl("-",(Vdiff/ledsleft*Number([i]))+edgeVGap);
|
||||||
vmax = ovl("+",(Vdiff/ledsleft*[i])+step+edgeVGap);
|
var vmax = ovl("+",(Vdiff/ledsleft*Number([i]))+step+edgeVGap);
|
||||||
createLedArray(hmin, hmax, vmin, vmax);
|
createLedArray(hmin, hmax, vmin, vmax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createRightLeds(){
|
function createRightLeds(){
|
||||||
step=(Vmax-Vmin)/ledsright;
|
var step=(Vmax-Vmin)/ledsright;
|
||||||
//if(cornerVGap != '0')
|
//if(cornerVGap != '0')
|
||||||
// step=(Vmax-Vmin-(cornerVGap*2))/ledsright;
|
// step=(Vmax-Vmin-(cornerVGap*2))/ledsright;
|
||||||
|
|
||||||
hmax=Hmax;
|
var hmax=Hmax;
|
||||||
hmin=hmax-ledsVDepth;
|
var hmin=hmax-ledsVDepth;
|
||||||
for (var i = 0; i<ledsright; i++){
|
for (var i = 0; i<ledsright; i++){
|
||||||
vmin = ovl("-",(Vdiff/ledsright*[i])+edgeVGap);
|
var vmin = ovl("-",(Vdiff/ledsright*Number([i]))+edgeVGap);
|
||||||
vmax = ovl("+",(Vdiff/ledsright*[i])+step+edgeVGap);
|
var vmax = ovl("+",(Vdiff/ledsright*Number([i]))+step+edgeVGap);
|
||||||
createLedArray(hmin, hmax, vmin, vmax);
|
createLedArray(hmin, hmax, vmin, vmax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createBottomLeds(){
|
function createBottomLeds(){
|
||||||
step=(Hmax-Hmin)/ledsbottom;
|
var step=(Hmax-Hmin)/ledsbottom;
|
||||||
//if(cornerVGap != '0')
|
//if(cornerVGap != '0')
|
||||||
// step=(Hmax-Hmin-(cornerHGap*2))/ledsbottom;
|
// step=(Hmax-Hmin-(cornerHGap*2))/ledsbottom;
|
||||||
|
|
||||||
vmax=Vmax;
|
var vmax=Vmax;
|
||||||
vmin=vmax-ledsHDepth;
|
var vmin=vmax-ledsHDepth;
|
||||||
for (var i = ledsbottom-1; i>-1; i--){
|
for (var i = ledsbottom-1; i>-1; i--){
|
||||||
hmin = ovl("-",(Hdiff/ledsbottom*[i])+edgeHGap);
|
var hmin = ovl("-",(Hdiff/ledsbottom*Number([i]))+edgeHGap);
|
||||||
hmax = ovl("+",(Hdiff/ledsbottom*[i])+step+edgeHGap);
|
var hmax = ovl("+",(Hdiff/ledsbottom*Number([i]))+step+edgeHGap);
|
||||||
createLedArray(hmin, hmax, vmin, vmax);
|
createLedArray(hmin, hmax, vmin, vmax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createLeftLeds(createBottomLeds(createRightLeds(createTopLeds())));
|
createLeftLeds();
|
||||||
|
createBottomLeds();
|
||||||
|
createRightLeds();
|
||||||
|
createTopLeds();
|
||||||
|
|
||||||
//check led gap pos
|
//check led gap pos
|
||||||
if (ledsgpos+ledsglength > ledArray.length)
|
if (ledsgpos+ledsglength > ledArray.length)
|
||||||
@ -308,17 +311,17 @@ $(document).ready(function() {
|
|||||||
performTranslation();
|
performTranslation();
|
||||||
|
|
||||||
//add intros
|
//add intros
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHintH("intro", $.i18n('conf_leds_device_intro'), "leddevice_intro");
|
createHintH("intro", $.i18n('conf_leds_device_intro'), "leddevice_intro");
|
||||||
createHintH("intro", $.i18n('conf_leds_layout_intro'), "layout_intro");
|
createHintH("intro", $.i18n('conf_leds_layout_intro'), "layout_intro");
|
||||||
$('#led_vis_help').html('<div><div class="led_ex" style="background-color:black;margin-right:5px;margin-top:3px"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l1')+'</div></div><div class="led_ex" style="background-color:grey;margin-top:3px;margin-right:2px"></div><div class="led_ex" style="background-color: rgb(169, 169, 169);margin-right:5px;margin-top:3px;"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l2')+'</div>');
|
$('#led_vis_help').html('<div><div class="led_ex" style="background-color:black;margin-right:5px;margin-top:3px"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l1')+'</div></div><div class="led_ex" style="background-color:grey;margin-top:3px;margin-right:2px"></div><div class="led_ex" style="background-color: rgb(169, 169, 169);margin-right:5px;margin-top:3px;"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l2')+'</div>');
|
||||||
}
|
}
|
||||||
|
|
||||||
var slConfig = serverConfig.ledConfig;
|
var slConfig = window.serverConfig.ledConfig;
|
||||||
|
|
||||||
//restore ledConfig
|
//restore ledConfig
|
||||||
for(key in slConfig)
|
for(var key in slConfig)
|
||||||
{
|
{
|
||||||
if(typeof(slConfig[key]) === "boolean")
|
if(typeof(slConfig[key]) === "boolean")
|
||||||
$('#ip_cl_'+key).prop('checked', slConfig[key]);
|
$('#ip_cl_'+key).prop('checked', slConfig[key]);
|
||||||
@ -329,7 +332,7 @@ $(document).ready(function() {
|
|||||||
function saveValues()
|
function saveValues()
|
||||||
{
|
{
|
||||||
var ledConfig = {};
|
var ledConfig = {};
|
||||||
for(key in slConfig)
|
for(var key in slConfig)
|
||||||
{
|
{
|
||||||
if(typeof(slConfig[key]) === "boolean")
|
if(typeof(slConfig[key]) === "boolean")
|
||||||
ledConfig[key] = $('#ip_cl_'+key).is(':checked');
|
ledConfig[key] = $('#ip_cl_'+key).is(':checked');
|
||||||
@ -370,7 +373,7 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// v4 of json schema with diff required assignment - remove when hyperion schema moved to v4
|
// v4 of json schema with diff required assignment - remove when hyperion schema moved to v4
|
||||||
var ledschema = {"items":{"additionalProperties":false,"required":["hscan","vscan","index"],"properties":{"clone":{"type":"integer"},"colorOrder":{"enum":["rgb","bgr","rbg","brg","gbr","grb"],"type":"string"},"hscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"},"index":{"type":"integer"},"vscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"}},"type":"object"},"type":"array"}
|
var ledschema = {"items":{"additionalProperties":false,"required":["hscan","vscan","index"],"properties":{"clone":{"type":"integer"},"colorOrder":{"enum":["rgb","bgr","rbg","brg","gbr","grb"],"type":"string"},"hscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"},"index":{"type":"integer"},"vscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"}},"type":"object"},"type":"array"};
|
||||||
//create jsonace editor
|
//create jsonace editor
|
||||||
var aceEdt = new JSONACEEditor(document.getElementById("aceedit"),{
|
var aceEdt = new JSONACEEditor(document.getElementById("aceedit"),{
|
||||||
mode: 'code',
|
mode: 'code',
|
||||||
@ -396,7 +399,7 @@ $(document).ready(function() {
|
|||||||
$('#leds_custom_save').attr("disabled", true);
|
$('#leds_custom_save').attr("disabled", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, serverConfig.leds);
|
}, window.serverConfig.leds);
|
||||||
|
|
||||||
//TODO: HACK! No callback for schema validation - Add it!
|
//TODO: HACK! No callback for schema validation - Add it!
|
||||||
setInterval(function(){
|
setInterval(function(){
|
||||||
@ -405,12 +408,12 @@ $(document).ready(function() {
|
|||||||
$('#leds_custom_updsim').attr("disabled", true);
|
$('#leds_custom_updsim').attr("disabled", true);
|
||||||
$('#leds_custom_save').attr("disabled", true);
|
$('#leds_custom_save').attr("disabled", true);
|
||||||
}
|
}
|
||||||
},1000)
|
},1000);
|
||||||
|
|
||||||
$('.jsoneditor-menu').toggle();
|
$('.jsoneditor-menu').toggle();
|
||||||
|
|
||||||
// leds to finalLedArray
|
// leds to finalLedArray
|
||||||
finalLedArray = serverConfig.leds;
|
finalLedArray = window.serverConfig.leds;
|
||||||
|
|
||||||
// cl/ma leds push to textfield
|
// cl/ma leds push to textfield
|
||||||
$('#btn_cl_generate, #btn_ma_generate').off().on("click", function(e) {
|
$('#btn_cl_generate, #btn_ma_generate').off().on("click", function(e) {
|
||||||
@ -425,28 +428,28 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
// create and update editor
|
// create and update editor
|
||||||
$("#leddevices").off().on("change", function() {
|
$("#leddevices").off().on("change", function() {
|
||||||
generalOptions = serverSchema.properties.device;
|
var generalOptions = window.serverSchema.properties.device;
|
||||||
specificOptions = serverSchema.properties.alldevices[$(this).val()];
|
var specificOptions = window.serverSchema.properties.alldevices[$(this).val()];
|
||||||
conf_editor = createJsonEditor('editor_container', {
|
conf_editor = createJsonEditor('editor_container', {
|
||||||
generalOptions : generalOptions,
|
generalOptions : generalOptions,
|
||||||
specificOptions : specificOptions,
|
specificOptions : specificOptions,
|
||||||
});
|
});
|
||||||
|
|
||||||
values_general = {};
|
var values_general = {};
|
||||||
values_specific = {};
|
var values_specific = {};
|
||||||
isCurrentDevice = (serverInfo.ledDevices.active == $(this).val());
|
var isCurrentDevice = (window.serverInfo.ledDevices.active == $(this).val());
|
||||||
|
|
||||||
for(var key in serverConfig.device){
|
for(var key in window.serverConfig.device){
|
||||||
if (key != "type" && key in generalOptions.properties)
|
if (key != "type" && key in generalOptions.properties)
|
||||||
values_general[key] = serverConfig.device[key];
|
values_general[key] = window.serverConfig.device[key];
|
||||||
};
|
};
|
||||||
conf_editor.getEditor("root.generalOptions").setValue( values_general );
|
conf_editor.getEditor("root.generalOptions").setValue( values_general );
|
||||||
|
|
||||||
if (isCurrentDevice)
|
if (isCurrentDevice)
|
||||||
{
|
{
|
||||||
specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue()
|
var specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue()
|
||||||
for(var key in specificOptions_val){
|
for(var key in specificOptions_val){
|
||||||
values_specific[key] = (key in serverConfig.device) ? serverConfig.device[key] : specificOptions_val[key];
|
values_specific[key] = (key in window.serverConfig.device) ? window.serverConfig.device[key] : specificOptions_val[key];
|
||||||
};
|
};
|
||||||
|
|
||||||
conf_editor.getEditor("root.specificOptions").setValue( values_specific );
|
conf_editor.getEditor("root.specificOptions").setValue( values_specific );
|
||||||
@ -469,12 +472,12 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// create led device selection
|
// create led device selection
|
||||||
ledDevices = serverInfo.ledDevices.available
|
var ledDevices = window.serverInfo.ledDevices.available;
|
||||||
devRPiSPI = ['apa102', 'apa104', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'sk6822spi', 'ws2812spi'];
|
var devRPiSPI = ['apa102', 'apa104', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'sk6822spi', 'ws2812spi'];
|
||||||
devRPiPWM = ['ws281x'];
|
var devRPiPWM = ['ws281x'];
|
||||||
devRPiGPIO = ['piblaster'];
|
var devRPiGPIO = ['piblaster'];
|
||||||
devNET = ['atmoorb', 'fadecandy', 'philipshue', 'aurora', 'tinkerforge', 'tpm2net', 'udpe131', 'udpartnet', 'udph801', 'udpraw'];
|
var devNET = ['atmoorb', 'fadecandy', 'philipshue', 'aurora', 'tinkerforge', 'tpm2net', 'udpe131', 'udpartnet', 'udph801', 'udpraw'];
|
||||||
devUSB = ['adalight', 'dmx', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2', 'karate'];
|
var devUSB = ['adalight', 'dmx', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2', 'karate'];
|
||||||
|
|
||||||
var optArr = [[]];
|
var optArr = [[]];
|
||||||
optArr[1]=[];
|
optArr[1]=[];
|
||||||
@ -483,7 +486,7 @@ $(document).ready(function() {
|
|||||||
optArr[4]=[];
|
optArr[4]=[];
|
||||||
optArr[5]=[];
|
optArr[5]=[];
|
||||||
|
|
||||||
for (idx=0; idx<ledDevices.length; idx++)
|
for (var idx=0; idx<ledDevices.length; idx++)
|
||||||
{
|
{
|
||||||
if($.inArray(ledDevices[idx], devRPiSPI) != -1)
|
if($.inArray(ledDevices[idx], devRPiSPI) != -1)
|
||||||
optArr[0].push(ledDevices[idx]);
|
optArr[0].push(ledDevices[idx]);
|
||||||
@ -505,7 +508,7 @@ $(document).ready(function() {
|
|||||||
$("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
|
$("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
|
||||||
$("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
|
$("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
|
||||||
$("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
|
$("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
|
||||||
$("#leddevices").val(serverInfo.ledDevices.active);
|
$("#leddevices").val(window.serverInfo.ledDevices.active);
|
||||||
$("#leddevices").trigger("change");
|
$("#leddevices").trigger("change");
|
||||||
|
|
||||||
// validate textfield and update preview
|
// validate textfield and update preview
|
||||||
@ -559,11 +562,11 @@ $(document).ready(function() {
|
|||||||
// save led device config
|
// save led device config
|
||||||
$("#btn_submit_controller").off().on("click", function(event) {
|
$("#btn_submit_controller").off().on("click", function(event) {
|
||||||
|
|
||||||
ledDevice = $("#leddevices").val();
|
var ledDevice = $("#leddevices").val();
|
||||||
result = {device:{}};
|
var result = {device:{}};
|
||||||
|
|
||||||
general = conf_editor.getEditor("root.generalOptions").getValue();
|
var general = conf_editor.getEditor("root.generalOptions").getValue();
|
||||||
specific = conf_editor.getEditor("root.specificOptions").getValue();
|
var specific = conf_editor.getEditor("root.specificOptions").getValue();
|
||||||
for(var key in general){
|
for(var key in general){
|
||||||
result.device[key] = general[key];
|
result.device[key] = general[key];
|
||||||
}
|
}
|
||||||
@ -577,6 +580,3 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
removeOverlay();
|
removeOverlay();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,15 +10,15 @@ $(document).ready(function() {
|
|||||||
var reportUrl = 'https://report.hyperion-project.org/#';
|
var reportUrl = 'https://report.hyperion-project.org/#';
|
||||||
|
|
||||||
$('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit'));
|
$('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit'));
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
$('#conf_cont').append(createHelpTable(schema.logger.properties, $.i18n("edt_conf_log_heading_title")));
|
$('#conf_cont').append(createHelpTable(window.schema.logger.properties, $.i18n("edt_conf_log_heading_title")));
|
||||||
createHintH("intro", $.i18n('conf_logging_label_intro'), "log_head");
|
createHintH("intro", $.i18n('conf_logging_label_intro'), "log_head");
|
||||||
}
|
}
|
||||||
$("#log_upl_pol").append('<span style="color:grey;font-size:80%">'+$.i18n("conf_logging_uplpolicy")+' '+buildWL("user/support#report_privacy_policy",$.i18n("conf_logging_contpolicy")));
|
$("#log_upl_pol").append('<span style="color:grey;font-size:80%">'+$.i18n("conf_logging_uplpolicy")+' '+buildWL("user/support#report_privacy_policy",$.i18n("conf_logging_contpolicy")));
|
||||||
|
|
||||||
conf_editor = createJsonEditor('editor_container', {
|
conf_editor = createJsonEditor('editor_container', {
|
||||||
logger : schema.logger
|
logger : window.schema.logger
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor.on('change',function() {
|
conf_editor.on('change',function() {
|
||||||
@ -61,11 +61,11 @@ $(document).ready(function() {
|
|||||||
function uploadLog()
|
function uploadLog()
|
||||||
{
|
{
|
||||||
var log = "";
|
var log = "";
|
||||||
var config = JSON.stringify(serverConfig, null).replace(/"/g, '\"');
|
var config = JSON.stringify(window.serverConfig, null).replace(/"/g, '\\"');
|
||||||
var prios = serverInfo.priorities;
|
var prios = window.serverInfo.priorities;
|
||||||
var comps = serverInfo.components;
|
var comps = window.serverInfo.components;
|
||||||
var sys = sysInfo.system;
|
var sys = window.sysInfo.system;
|
||||||
var shy = sysInfo.hyperion;
|
var shy = window.sysInfo.hyperion;
|
||||||
var info;
|
var info;
|
||||||
|
|
||||||
//create log
|
//create log
|
||||||
@ -78,8 +78,8 @@ $(document).ready(function() {
|
|||||||
info += 'Version: '+shy.version+'\n';
|
info += 'Version: '+shy.version+'\n';
|
||||||
info += 'UI Lang: '+storedLang+' (BrowserL: '+navigator.language+')\n';
|
info += 'UI Lang: '+storedLang+' (BrowserL: '+navigator.language+')\n';
|
||||||
info += 'UI Access: '+storedAccess+'\n';
|
info += 'UI Access: '+storedAccess+'\n';
|
||||||
info += 'Log lvl: '+serverConfig.logger.level+'\n';
|
info += 'Log lvl: '+window.serverConfig.logger.level+'\n';
|
||||||
info += 'Avail Capt: '+serverInfo.grabbers.available+'\n\n';
|
info += 'Avail Capt: '+window.serverInfo.grabbers.available+'\n\n';
|
||||||
info += 'Distribution:'+sys.prettyName+'\n';
|
info += 'Distribution:'+sys.prettyName+'\n';
|
||||||
info += 'Arch: '+sys.architecture+'\n';
|
info += 'Arch: '+sys.architecture+'\n';
|
||||||
info += 'Kernel: '+sys.kernelType+' ('+sys.kernelVersion+' (WS: '+sys.wordSize+'))\n';
|
info += 'Kernel: '+sys.kernelType+' ('+sys.kernelVersion+' (WS: '+sys.wordSize+'))\n';
|
||||||
@ -96,10 +96,10 @@ $(document).ready(function() {
|
|||||||
info += ' ';
|
info += ' ';
|
||||||
info += ' ('+prios[i].component+') Owner: '+prios[i].owner+'\n';
|
info += ' ('+prios[i].component+') Owner: '+prios[i].owner+'\n';
|
||||||
}
|
}
|
||||||
info += '\npriorities_autoselect: '+serverInfo.priorities_autoselect+'\n\n';
|
info += '\npriorities_autoselect: '+window.serverInfo.priorities_autoselect+'\n\n';
|
||||||
|
|
||||||
//create comps
|
//create comps
|
||||||
info += '### COMPONENTS ### \n'
|
info += '### COMPONENTS ### \n';
|
||||||
for(var i = 0; i<comps.length; i++)
|
for(var i = 0; i<comps.length; i++)
|
||||||
{
|
{
|
||||||
info += comps[i].enabled+' - '+comps[i].name+'\n';
|
info += comps[i].enabled+' - '+comps[i].name+'\n';
|
||||||
@ -109,7 +109,7 @@ $(document).ready(function() {
|
|||||||
info = JSON.stringify(info);
|
info = JSON.stringify(info);
|
||||||
log = JSON.stringify(log);
|
log = JSON.stringify(log);
|
||||||
config = JSON.stringify(config);
|
config = JSON.stringify(config);
|
||||||
var title = 'Hyperion '+currentVersion+' Report ('+serverConfig.general.name+' ('+serverInfo.ledDevices.active+'))';
|
var title = 'Hyperion '+window.currentVersion+' Report ('+window.serverConfig.general.name+' ('+window.serverInfo.ledDevices.active+'))';
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'https://api.hyperion-project.org/report.php',
|
url: 'https://api.hyperion-project.org/report.php',
|
||||||
@ -140,15 +140,15 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!loggingHandlerInstalled)
|
if (!window.loggingHandlerInstalled)
|
||||||
{
|
{
|
||||||
loggingHandlerInstalled = true;
|
window.loggingHandlerInstalled = true;
|
||||||
$(hyperion).on("cmd-logging-update",function(event){
|
$(window.hyperion).on("cmd-logging-update",function(event){
|
||||||
|
|
||||||
if ($("#logmessages").length == 0 && loggingStreamActive)
|
if ($("#logmessages").length == 0 && window.loggingStreamActive)
|
||||||
{
|
{
|
||||||
requestLoggingStop();
|
requestLoggingStop();
|
||||||
loggingStreamActive = false;
|
window.loggingStreamActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
messages = (event.response.result.messages);
|
messages = (event.response.result.messages);
|
||||||
@ -163,13 +163,13 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
for(var idx=0; idx<messages.length; idx++)
|
for(var idx=0; idx<messages.length; idx++)
|
||||||
{
|
{
|
||||||
app_name = messages[idx].appName;
|
var app_name = messages[idx].appName;
|
||||||
logger_name = messages[idx].loggerName;
|
var logger_name = messages[idx].loggerName;
|
||||||
function_ = messages[idx].function;
|
var function_ = messages[idx].function;
|
||||||
line = messages[idx].line;
|
var line = messages[idx].line;
|
||||||
file_name = messages[idx].fileName;
|
var file_name = messages[idx].fileName;
|
||||||
msg = messages[idx].message;
|
var msg = messages[idx].message;
|
||||||
level_string = messages[idx].levelString;
|
var level_string = messages[idx].levelString;
|
||||||
|
|
||||||
var debug = "";
|
var debug = "";
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
$(document).ready( function() {
|
$(document).ready( function() {
|
||||||
performTranslation();
|
performTranslation();
|
||||||
|
|
||||||
var conf_editor_net = null;
|
|
||||||
var conf_editor_json = null;
|
var conf_editor_json = null;
|
||||||
var conf_editor_proto = null;
|
var conf_editor_proto = null;
|
||||||
var conf_editor_fbs = null;
|
var conf_editor_fbs = null;
|
||||||
@ -9,34 +8,39 @@ $(document).ready( function() {
|
|||||||
var conf_editor_udpl = null;
|
var conf_editor_udpl = null;
|
||||||
var conf_editor_forw = null;
|
var conf_editor_forw = null;
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
//jsonserver
|
//jsonserver
|
||||||
$('#conf_cont').append(createRow('conf_cont_json'))
|
$('#conf_cont').append(createRow('conf_cont_json'))
|
||||||
$('#conf_cont_json').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver'));
|
$('#conf_cont_json').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver'));
|
||||||
$('#conf_cont_json').append(createHelpTable(schema.jsonServer.properties, $.i18n("edt_conf_js_heading_title")));
|
$('#conf_cont_json').append(createHelpTable(window.schema.jsonServer.properties, $.i18n("edt_conf_js_heading_title")));
|
||||||
|
|
||||||
//flatbufserver
|
//flatbufserver
|
||||||
$('#conf_cont').append(createRow('conf_cont_flatbuf'))
|
$('#conf_cont').append(createRow('conf_cont_flatbuf'))
|
||||||
$('#conf_cont_flatbuf').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
|
$('#conf_cont_flatbuf').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
|
||||||
$('#conf_cont_flatbuf').append(createHelpTable(schema.flatbufServer.properties, $.i18n("edt_conf_fbs_heading_title")));
|
$('#conf_cont_flatbuf').append(createHelpTable(window.schema.flatbufServer.properties, $.i18n("edt_conf_fbs_heading_title")));
|
||||||
|
|
||||||
|
//protoserver
|
||||||
|
$('#conf_cont').append(createRow('conf_cont_proto'))
|
||||||
|
$('#conf_cont_proto').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver'));
|
||||||
|
$('#conf_cont_proto').append(createHelpTable(window.schema.protoServer.properties, $.i18n("edt_conf_pbs_heading_title")));
|
||||||
|
|
||||||
//boblight
|
//boblight
|
||||||
$('#conf_cont').append(createRow('conf_cont_bobl'))
|
$('#conf_cont').append(createRow('conf_cont_bobl'))
|
||||||
$('#conf_cont_bobl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver'));
|
$('#conf_cont_bobl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver'));
|
||||||
$('#conf_cont_bobl').append(createHelpTable(schema.boblightServer.properties, $.i18n("edt_conf_bobls_heading_title")));
|
$('#conf_cont_bobl').append(createHelpTable(window.schema.boblightServer.properties, $.i18n("edt_conf_bobls_heading_title")));
|
||||||
|
|
||||||
//udplistener
|
//udplistener
|
||||||
$('#conf_cont').append(createRow('conf_cont_udpl'))
|
$('#conf_cont').append(createRow('conf_cont_udpl'))
|
||||||
$('#conf_cont_udpl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_udpl_heading_title"), 'editor_container_udplistener', 'btn_submit_udplistener'));
|
$('#conf_cont_udpl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_udpl_heading_title"), 'editor_container_udplistener', 'btn_submit_udplistener'));
|
||||||
$('#conf_cont_udpl').append(createHelpTable(schema.udpListener.properties, $.i18n("edt_conf_udpl_heading_title")));
|
$('#conf_cont_udpl').append(createHelpTable(window.schema.udpListener.properties, $.i18n("edt_conf_udpl_heading_title")));
|
||||||
|
|
||||||
//forwarder
|
//forwarder
|
||||||
if(storedAccess != 'default')
|
if(storedAccess != 'default')
|
||||||
{
|
{
|
||||||
$('#conf_cont').append(createRow('conf_cont_fw'))
|
$('#conf_cont').append(createRow('conf_cont_fw'))
|
||||||
$('#conf_cont_fw').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder'));
|
$('#conf_cont_fw').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder'));
|
||||||
$('#conf_cont_fw').append(createHelpTable(schema.forwarder.properties, $.i18n("edt_conf_fw_heading_title")));
|
$('#conf_cont_fw').append(createHelpTable(window.schema.forwarder.properties, $.i18n("edt_conf_fw_heading_title")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -44,6 +48,7 @@ $(document).ready( function() {
|
|||||||
$('#conf_cont').addClass('row');
|
$('#conf_cont').addClass('row');
|
||||||
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver'));
|
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver'));
|
||||||
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
|
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
|
||||||
|
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver'));
|
||||||
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver'));
|
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver'));
|
||||||
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_udpl_heading_title"), 'editor_container_udplistener', 'btn_submit_udplistener'));
|
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_udpl_heading_title"), 'editor_container_udplistener', 'btn_submit_udplistener'));
|
||||||
if(storedAccess != 'default')
|
if(storedAccess != 'default')
|
||||||
@ -52,7 +57,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//json
|
//json
|
||||||
conf_editor_json = createJsonEditor('editor_container_jsonserver', {
|
conf_editor_json = createJsonEditor('editor_container_jsonserver', {
|
||||||
jsonServer : schema.jsonServer
|
jsonServer : window.schema.jsonServer
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_json.on('change',function() {
|
conf_editor_json.on('change',function() {
|
||||||
@ -65,7 +70,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//flatbuffer
|
//flatbuffer
|
||||||
conf_editor_fbs = createJsonEditor('editor_container_fbserver', {
|
conf_editor_fbs = createJsonEditor('editor_container_fbserver', {
|
||||||
flatbufServer : schema.flatbufServer
|
flatbufServer : window.schema.flatbufServer
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_fbs.on('change',function() {
|
conf_editor_fbs.on('change',function() {
|
||||||
@ -76,9 +81,22 @@ $(document).ready( function() {
|
|||||||
requestWriteConfig(conf_editor_fbs.getValue());
|
requestWriteConfig(conf_editor_fbs.getValue());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//protobuffer
|
||||||
|
conf_editor_proto = createJsonEditor('editor_container_protoserver', {
|
||||||
|
protoServer : window.schema.protoServer
|
||||||
|
}, true, true);
|
||||||
|
|
||||||
|
conf_editor_proto.on('change',function() {
|
||||||
|
conf_editor_proto.validate().length ? $('#btn_submit_protoserver').attr('disabled', true) : $('#btn_submit_protoserver').attr('disabled', false);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#btn_submit_protoserver').off().on('click',function() {
|
||||||
|
requestWriteConfig(conf_editor_proto.getValue());
|
||||||
|
});
|
||||||
|
|
||||||
//boblight
|
//boblight
|
||||||
conf_editor_bobl = createJsonEditor('editor_container_boblightserver', {
|
conf_editor_bobl = createJsonEditor('editor_container_boblightserver', {
|
||||||
boblightServer : schema.boblightServer
|
boblightServer : window.schema.boblightServer
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_bobl.on('change',function() {
|
conf_editor_bobl.on('change',function() {
|
||||||
@ -91,7 +109,7 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
//udplistener
|
//udplistener
|
||||||
conf_editor_udpl = createJsonEditor('editor_container_udplistener', {
|
conf_editor_udpl = createJsonEditor('editor_container_udplistener', {
|
||||||
udpListener : schema.udpListener
|
udpListener : window.schema.udpListener
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_udpl.on('change',function() {
|
conf_editor_udpl.on('change',function() {
|
||||||
@ -106,7 +124,7 @@ $(document).ready( function() {
|
|||||||
{
|
{
|
||||||
//forwarder
|
//forwarder
|
||||||
conf_editor_forw = createJsonEditor('editor_container_forwarder', {
|
conf_editor_forw = createJsonEditor('editor_container_forwarder', {
|
||||||
forwarder : schema.forwarder
|
forwarder : window.schema.forwarder
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor_forw.on('change',function() {
|
conf_editor_forw.on('change',function() {
|
||||||
@ -119,10 +137,11 @@ $(document).ready( function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint("intro", $.i18n('conf_network_json_intro'), "editor_container_jsonserver");
|
createHint("intro", $.i18n('conf_network_json_intro'), "editor_container_jsonserver");
|
||||||
createHint("intro", $.i18n('conf_network_fbs_intro'), "editor_container_fbserver");
|
createHint("intro", $.i18n('conf_network_fbs_intro'), "editor_container_fbserver");
|
||||||
|
createHint("intro", $.i18n('conf_network_proto_intro'), "editor_container_protoserver");
|
||||||
createHint("intro", $.i18n('conf_network_bobl_intro'), "editor_container_boblightserver");
|
createHint("intro", $.i18n('conf_network_bobl_intro'), "editor_container_boblightserver");
|
||||||
createHint("intro", $.i18n('conf_network_udpl_intro'), "editor_container_udplistener");
|
createHint("intro", $.i18n('conf_network_udpl_intro'), "editor_container_udplistener");
|
||||||
createHint("intro", $.i18n('conf_network_forw_intro'), "editor_container_forwarder");
|
createHint("intro", $.i18n('conf_network_forw_intro'), "editor_container_forwarder");
|
||||||
|
@ -3,7 +3,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
var oldEffects = [];
|
var oldEffects = [];
|
||||||
var cpcolor = '#B500FF';
|
var cpcolor = '#B500FF';
|
||||||
var mappingList = serverSchema.properties.color.properties.imageToLedMappingType.enum;
|
var mappingList = window.serverSchema.properties.color.properties.imageToLedMappingType.enum;
|
||||||
var duration = 0;
|
var duration = 0;
|
||||||
var rgb = {r:255,g:0,b:0};
|
var rgb = {r:255,g:0,b:0};
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
|
|
||||||
//create introduction
|
//create introduction
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro");
|
createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro");
|
||||||
createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont");
|
createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont");
|
||||||
@ -25,16 +25,16 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//color adjustment
|
//color adjustment
|
||||||
var sColor = sortProperties(serverSchema.properties.color.properties.channelAdjustment.items.properties)
|
var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties);
|
||||||
var values = serverInfo.adjustment[0]
|
var values = window.serverInfo.adjustment[0];
|
||||||
|
|
||||||
for(key in sColor)
|
for(var key in sColor)
|
||||||
{
|
{
|
||||||
if(sColor[key].key != "id" && sColor[key].key != "leds")
|
if(sColor[key].key != "id" && sColor[key].key != "leds")
|
||||||
{
|
{
|
||||||
var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>';
|
var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>';
|
||||||
var property;
|
var property;
|
||||||
var value = values[sColor[key].key]
|
var value = values[sColor[key].key];
|
||||||
|
|
||||||
if(sColor[key].type == "array")
|
if(sColor[key].type == "array")
|
||||||
{
|
{
|
||||||
@ -71,11 +71,11 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function sendEffect()
|
function sendEffect()
|
||||||
{
|
{
|
||||||
efx = $("#effect_select").val();
|
var efx = $("#effect_select").val();
|
||||||
if(efx != "__none__")
|
if(efx != "__none__")
|
||||||
{
|
{
|
||||||
requestPriorityClear();
|
requestPriorityClear();
|
||||||
$(hyperion).one("cmd-clear", function(event) {
|
$(window.hyperion).one("cmd-clear", function(event) {
|
||||||
setTimeout(function() {requestPlayEffect(efx,duration)}, 100);
|
setTimeout(function() {requestPlayEffect(efx,duration)}, 100);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -89,8 +89,7 @@ $(document).ready(function() {
|
|||||||
function updateInputSelect()
|
function updateInputSelect()
|
||||||
{
|
{
|
||||||
$('.sstbody').html("");
|
$('.sstbody').html("");
|
||||||
var data = "";
|
var prios = window.serverInfo.priorities;
|
||||||
var prios = serverInfo.priorities
|
|
||||||
var i;
|
var i;
|
||||||
var clearAll = false;
|
var clearAll = false;
|
||||||
|
|
||||||
@ -156,9 +155,12 @@ $(document).ready(function() {
|
|||||||
case "FLATBUFSERVER":
|
case "FLATBUFSERVER":
|
||||||
owner = $.i18n('general_comp_FLATBUFSERVER');
|
owner = $.i18n('general_comp_FLATBUFSERVER');
|
||||||
break;
|
break;
|
||||||
|
case "PROTOSERVER":
|
||||||
|
owner = $.i18n('general_comp_PROTOSERVER');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(duration && compId != "GRABBER" && compId != "PROTOSERVER")
|
if(duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER")
|
||||||
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
|
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
|
||||||
|
|
||||||
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
|
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
|
||||||
@ -169,9 +171,9 @@ $(document).ready(function() {
|
|||||||
if(btn_type != 'default')
|
if(btn_type != 'default')
|
||||||
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
|
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
|
||||||
}
|
}
|
||||||
var btn_auto_color = (serverInfo.priorities_autoselect? "btn-success" : "btn-danger");
|
var btn_auto_color = (window.serverInfo.priorities_autoselect? "btn-success" : "btn-danger");
|
||||||
var btn_auto_state = (serverInfo.priorities_autoselect? "disabled" : "enabled");
|
var btn_auto_state = (window.serverInfo.priorities_autoselect? "disabled" : "enabled");
|
||||||
var btn_auto_text = (serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
|
var btn_auto_text = (window.serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
|
||||||
var btn_call_state = (clearAll? "enabled" : "disabled");
|
var btn_call_state = (clearAll? "enabled" : "disabled");
|
||||||
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
|
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
|
||||||
$('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>');
|
$('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>');
|
||||||
@ -186,15 +188,15 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function updateLedMapping()
|
function updateLedMapping()
|
||||||
{
|
{
|
||||||
mapping = serverInfo.imageToLedMappingType;
|
var mapping = window.serverInfo.imageToLedMappingType;
|
||||||
|
|
||||||
$('#mappingsbutton').html("");
|
$('#mappingsbutton').html("");
|
||||||
for(var ix = 0; ix < mappingList.length; ix++)
|
for(var ix = 0; ix < mappingList.length; ix++)
|
||||||
{
|
{
|
||||||
if(mapping == mappingList[ix])
|
if(mapping == mappingList[ix])
|
||||||
btn_style = 'btn-success';
|
var btn_style = 'btn-success';
|
||||||
else
|
else
|
||||||
btn_style = 'btn-primary';
|
var btn_style = 'btn-primary';
|
||||||
|
|
||||||
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
|
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
|
||||||
}
|
}
|
||||||
@ -202,7 +204,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function updateComponents()
|
function updateComponents()
|
||||||
{
|
{
|
||||||
components = comps;
|
var components = window.comps;
|
||||||
var hyperionEnabled = true;
|
var hyperionEnabled = true;
|
||||||
components.forEach( function(obj) {
|
components.forEach( function(obj) {
|
||||||
if (obj.name == "ALL")
|
if (obj.name == "ALL")
|
||||||
@ -213,21 +215,21 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
// create buttons
|
// create buttons
|
||||||
$('#componentsbutton').html("");
|
$('#componentsbutton').html("");
|
||||||
for ( idx=0; idx<components.length;idx++)
|
for (var idx=0; idx<components.length;idx++)
|
||||||
{
|
{
|
||||||
if(components[idx].name == "ALL")
|
if(components[idx].name == "ALL")
|
||||||
continue
|
continue;
|
||||||
|
|
||||||
enable_style = (components[idx].enabled? "btn-success" : "btn-danger");
|
var enable_style = (components[idx].enabled? "btn-success" : "btn-danger");
|
||||||
enable_icon = (components[idx].enabled? "fa-play" : "fa-stop");
|
var enable_icon = (components[idx].enabled? "fa-play" : "fa-stop");
|
||||||
comp_name = components[idx].name;
|
var comp_name = components[idx].name;
|
||||||
comp_btn_id = "comp_btn_"+comp_name;
|
var comp_btn_id = "comp_btn_"+comp_name;
|
||||||
comp_goff = hyperionEnabled? "enabled" : "disabled";
|
var comp_goff = hyperionEnabled? "enabled" : "disabled";
|
||||||
|
|
||||||
// create btn if not there
|
// create btn if not there
|
||||||
if ($("#"+comp_btn_id).length == 0)
|
if ($("#"+comp_btn_id).length == 0)
|
||||||
{
|
{
|
||||||
d='<span style="display:block;margin:3px"><button type="button" '+comp_goff+' id="'+comp_btn_id+'" class="btn '+enable_style
|
var d='<span style="display:block;margin:3px"><button type="button" '+comp_goff+' id="'+comp_btn_id+'" class="btn '+enable_style
|
||||||
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
|
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
|
||||||
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</span>';
|
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</span>';
|
||||||
$('#componentsbutton').append(d);
|
$('#componentsbutton').append(d);
|
||||||
@ -243,14 +245,14 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function updateEffectlist()
|
function updateEffectlist()
|
||||||
{
|
{
|
||||||
var newEffects = serverInfo.effects;
|
var newEffects = window.serverInfo.effects;
|
||||||
if (newEffects.length != oldEffects.length)
|
if (newEffects.length != oldEffects.length)
|
||||||
{
|
{
|
||||||
$('#effect_select').html('<option value="__none__"></option>');
|
$('#effect_select').html('<option value="__none__"></option>');
|
||||||
var usrEffArr = [];
|
var usrEffArr = [];
|
||||||
var sysEffArr = [];
|
var sysEffArr = [];
|
||||||
|
|
||||||
for(i = 0; i < newEffects.length; i++) {
|
for(var i = 0; i < newEffects.length; i++) {
|
||||||
var effectName = newEffects[i].name;
|
var effectName = newEffects[i].name;
|
||||||
if(!/^\:/.test(newEffects[i].file)){
|
if(!/^\:/.test(newEffects[i].file)){
|
||||||
usrEffArr.push(effectName);
|
usrEffArr.push(effectName);
|
||||||
@ -267,16 +269,16 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function updateVideoMode()
|
function updateVideoMode()
|
||||||
{
|
{
|
||||||
videoModes = ["2D","3DSBS","3DTAB"];
|
var videoModes = ["2D","3DSBS","3DTAB"];
|
||||||
currVideoMode = serverInfo.videomode;
|
var currVideoMode = window.serverInfo.videomode;
|
||||||
|
|
||||||
$('#videomodebtns').html("");
|
$('#videomodebtns').html("");
|
||||||
for(var ix = 0; ix < videoModes.length; ix++)
|
for(var ix = 0; ix < videoModes.length; ix++)
|
||||||
{
|
{
|
||||||
if(currVideoMode == videoModes[ix])
|
if(currVideoMode == videoModes[ix])
|
||||||
btn_style = 'btn-success';
|
var btn_style = 'btn-success';
|
||||||
else
|
else
|
||||||
btn_style = 'btn-primary';
|
var btn_style = 'btn-primary';
|
||||||
$('#videomodebtns').append('<button type="button" id="vModeBtn_'+videoModes[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestVideoMode(\''+videoModes[ix]+'\');">'+$.i18n('remote_videoMode_'+videoModes[ix])+'</button><br/>');
|
$('#videomodebtns').append('<button type="button" id="vModeBtn_'+videoModes[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestVideoMode(\''+videoModes[ix]+'\');">'+$.i18n('remote_videoMode_'+videoModes[ix])+'</button><br/>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -336,25 +338,25 @@ $(document).ready(function() {
|
|||||||
updateEffectlist();
|
updateEffectlist();
|
||||||
|
|
||||||
// interval updates
|
// interval updates
|
||||||
$(hyperion).on("components-updated",updateComponents);
|
$(window.hyperion).on("components-updated",updateComponents);
|
||||||
|
|
||||||
$(hyperion).on("cmd-priorities-update", function(event){
|
$(window.hyperion).on("cmd-priorities-update", function(event){
|
||||||
serverInfo.priorities = event.response.data.priorities
|
window.serverInfo.priorities = event.response.data.priorities
|
||||||
serverInfo.priorities_autoselect = event.response.data.priorities_autoselect
|
window.serverInfo.priorities_autoselect = event.response.data.priorities_autoselect
|
||||||
updateInputSelect()
|
updateInputSelect()
|
||||||
});
|
});
|
||||||
$(hyperion).on("cmd-imageToLedMapping-update", function(event){
|
$(window.hyperion).on("cmd-imageToLedMapping-update", function(event){
|
||||||
serverInfo.imageToLedMappingType = event.response.data.imageToLedMappingType
|
window.serverInfo.imageToLedMappingType = event.response.data.imageToLedMappingType
|
||||||
updateLedMapping()
|
updateLedMapping()
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-videomode-update", function(event){
|
$(window.hyperion).on("cmd-videomode-update", function(event){
|
||||||
serverInfo.videomode = event.response.data.videomode
|
window.serverInfo.videomode = event.response.data.videomode
|
||||||
updateVideoMode()
|
updateVideoMode()
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hyperion).on("cmd-effects-update", function(event){
|
$(window.hyperion).on("cmd-effects-update", function(event){
|
||||||
serverInfo.effects = event.response.data.effects
|
window.serverInfo.effects = event.response.data.effects
|
||||||
updateEffectlist();
|
updateEffectlist();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
var conf_editor = null;
|
var conf_editor = null;
|
||||||
|
|
||||||
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_webc_heading_title"), 'editor_container', 'btn_submit'));
|
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_webc_heading_title"), 'editor_container', 'btn_submit'));
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
$('#conf_cont').append(createHelpTable(schema.webConfig.properties, $.i18n("edt_conf_webc_heading_title")));
|
$('#conf_cont').append(createHelpTable(window.schema.webConfig.properties, $.i18n("edt_conf_webc_heading_title")));
|
||||||
}
|
}
|
||||||
|
|
||||||
conf_editor = createJsonEditor('editor_container', {
|
conf_editor = createJsonEditor('editor_container', {
|
||||||
webConfig : schema.webConfig
|
webConfig : window.schema.webConfig
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
conf_editor.on('change',function() {
|
conf_editor.on('change',function() {
|
||||||
@ -21,7 +21,7 @@
|
|||||||
requestWriteConfig(conf_editor.getValue());
|
requestWriteConfig(conf_editor.getValue());
|
||||||
});
|
});
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
createHint("intro", $.i18n('conf_webconfig_label_intro'), "editor_container");
|
createHint("intro", $.i18n('conf_webconfig_label_intro'), "editor_container");
|
||||||
|
|
||||||
removeOverlay();
|
removeOverlay();
|
||||||
|
@ -1,44 +1,39 @@
|
|||||||
|
// global vars (read and write in window object)
|
||||||
// global vars
|
window.webPrio = 1;
|
||||||
var webPrio = 1;
|
window.webOrigin = "Web Configuration";
|
||||||
var webOrigin = "Web Configuration";
|
window.showOptHelp = true;
|
||||||
var showOptHelp;
|
window.currentVersion = null;
|
||||||
var currentVersion;
|
window.latestVersion = null;
|
||||||
var latestVersion;
|
window.serverInfo = {};
|
||||||
var serverInfo = {};
|
window.parsedUpdateJSON = {};
|
||||||
var parsedUpdateJSON = {};
|
window.serverSchema = {};
|
||||||
var serverSchema = {};
|
window.serverConfig = {};
|
||||||
var serverConfig = {};
|
window.schema = {};
|
||||||
var schema;
|
window.sysInfo = {};
|
||||||
var sysInfo = {};
|
window.jsonPort = 19444;
|
||||||
var jsonPort = 19444;
|
window.websocket = null;
|
||||||
var websocket = null;
|
window.hyperion = {};
|
||||||
var hyperion = {};
|
window.wsTan = 1;
|
||||||
var wsTan = 1;
|
window.ledStreamActive = false;
|
||||||
var ledStreamActive = false;
|
window.imageStreamActive = false;
|
||||||
var imageStreamActive = false;
|
window.loggingStreamActive = false;
|
||||||
var loggingStreamActive = false;
|
window.loggingHandlerInstalled = false;
|
||||||
var loggingHandlerInstalled = false;
|
window.watchdog = 0;
|
||||||
var watchdog = 0;
|
window.debugMessagesActive = true;
|
||||||
var debugMessagesActive = true;
|
window.wSess = [];
|
||||||
var wSess = [];
|
window.comps = [];
|
||||||
var plugins_installed = {};
|
|
||||||
var plugins_available = {};
|
|
||||||
|
|
||||||
//comps serverinfo
|
|
||||||
comps = [];
|
|
||||||
|
|
||||||
function initRestart()
|
function initRestart()
|
||||||
{
|
{
|
||||||
$(hyperion).off();
|
$(window.hyperion).off();
|
||||||
requestServerConfigReload();
|
requestServerConfigReload();
|
||||||
watchdog = 10;
|
window.watchdog = 10;
|
||||||
connectionLostDetection('restart');
|
connectionLostDetection('restart');
|
||||||
}
|
}
|
||||||
|
|
||||||
function connectionLostDetection(type)
|
function connectionLostDetection(type)
|
||||||
{
|
{
|
||||||
if ( watchdog > 2 )
|
if ( window.watchdog > 2 )
|
||||||
{
|
{
|
||||||
var interval_id = window.setInterval("", 9999); // Get a reference to the last
|
var interval_id = window.setInterval("", 9999); // Get a reference to the last
|
||||||
for (var i = 1; i < interval_id; i++)
|
for (var i = 1; i < interval_id; i++)
|
||||||
@ -57,7 +52,7 @@ function connectionLostDetection(type)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$.get( "/cgi/cfg_jsonserver", function() {watchdog=0}).fail(function() {watchdog++;});
|
$.get( "/cgi/cfg_jsonserver", function() {window.watchdog=0}).fail(function() {window.watchdog++;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,20 +64,20 @@ function initWebSocket()
|
|||||||
{
|
{
|
||||||
if ("WebSocket" in window)
|
if ("WebSocket" in window)
|
||||||
{
|
{
|
||||||
if (websocket == null)
|
if (window.websocket == null)
|
||||||
{
|
{
|
||||||
jsonPort = (document.location.port == '') ? '80' : document.location.port;
|
window.jsonPort = (document.location.port == '') ? '80' : document.location.port;
|
||||||
websocket = new WebSocket('ws://'+document.location.hostname+":"+jsonPort);
|
window.websocket = new WebSocket('ws://'+document.location.hostname+":"+window.jsonPort);
|
||||||
|
|
||||||
websocket.onopen = function (event) {
|
window.websocket.onopen = function (event) {
|
||||||
$(hyperion).trigger({type:"open"});
|
$(window.hyperion).trigger({type:"open"});
|
||||||
|
|
||||||
$(hyperion).on("cmd-serverinfo", function(event) {
|
$(window.hyperion).on("cmd-serverinfo", function(event) {
|
||||||
watchdog = 0;
|
window.watchdog = 0;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
websocket.onclose = function (event) {
|
window.websocket.onclose = function (event) {
|
||||||
// See http://tools.ietf.org/html/rfc6455#section-7.4.1
|
// See http://tools.ietf.org/html/rfc6455#section-7.4.1
|
||||||
var reason;
|
var reason;
|
||||||
switch(event.code)
|
switch(event.code)
|
||||||
@ -102,45 +97,44 @@ function initWebSocket()
|
|||||||
case 1015: reason = "The connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified)."; break;
|
case 1015: reason = "The connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified)."; break;
|
||||||
default: reason = "Unknown reason";
|
default: reason = "Unknown reason";
|
||||||
}
|
}
|
||||||
console.log("[websocket::onclose] "+reason)
|
$(window.hyperion).trigger({type:"close", reason:reason});
|
||||||
$(hyperion).trigger({type:"close", reason:reason});
|
window.watchdog = 10;
|
||||||
watchdog = 10;
|
|
||||||
connectionLostDetection();
|
connectionLostDetection();
|
||||||
};
|
};
|
||||||
|
|
||||||
websocket.onmessage = function (event) {
|
window.websocket.onmessage = function (event) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
response = JSON.parse(event.data);
|
var response = JSON.parse(event.data);
|
||||||
success = response.success;
|
var success = response.success;
|
||||||
cmd = response.command;
|
var cmd = response.command;
|
||||||
if (success || typeof(success) == "undefined")
|
if (success || typeof(success) == "undefined")
|
||||||
{
|
{
|
||||||
$(hyperion).trigger({type:"cmd-"+cmd, response:response});
|
$(window.hyperion).trigger({type:"cmd-"+cmd, response:response});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error = response.hasOwnProperty("error")? response.error : "unknown";
|
var error = response.hasOwnProperty("error")? response.error : "unknown";
|
||||||
$(hyperion).trigger({type:"error",reason:error});
|
$(window.hyperion).trigger({type:"error",reason:error});
|
||||||
console.log("[websocket::onmessage] "+error)
|
console.log("[window.websocket::onmessage] "+error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(exception_error)
|
catch(exception_error)
|
||||||
{
|
{
|
||||||
$(hyperion).trigger({type:"error",reason:exception_error});
|
$(window.hyperion).trigger({type:"error",reason:exception_error});
|
||||||
console.log("[websocket::onmessage] "+exception_error)
|
console.log("[window.websocket::onmessage] "+exception_error)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
websocket.onerror = function (error) {
|
window.websocket.onerror = function (error) {
|
||||||
$(hyperion).trigger({type:"error",reason:error});
|
$(window.hyperion).trigger({type:"error",reason:error});
|
||||||
console.log("[websocket::onerror] "+error)
|
console.log("[window.websocket::onerror] "+error)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$(hyperion).trigger("error");
|
$(window.hyperion).trigger("error");
|
||||||
alert("Websocket is not supported by your browser");
|
alert("Websocket is not supported by your browser");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -158,7 +152,7 @@ function sendToHyperion(command, subcommand, msg)
|
|||||||
else
|
else
|
||||||
msg = "";
|
msg = "";
|
||||||
|
|
||||||
websocket.send(encode_utf8('{"command":"'+command+'", "tan":'+wsTan+subcommand+msg+'}'));
|
window.websocket.send(encode_utf8('{"command":"'+command+'", "tan":'+window.wsTan+subcommand+msg+'}'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
@ -192,32 +186,32 @@ function requestServerConfigReload()
|
|||||||
|
|
||||||
function requestLedColorsStart()
|
function requestLedColorsStart()
|
||||||
{
|
{
|
||||||
ledStreamActive=true;
|
window.ledStreamActive=true;
|
||||||
sendToHyperion("ledcolors", "ledstream-start");
|
sendToHyperion("ledcolors", "ledstream-start");
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestLedColorsStop()
|
function requestLedColorsStop()
|
||||||
{
|
{
|
||||||
ledStreamActive=false;
|
window.ledStreamActive=false;
|
||||||
sendToHyperion("ledcolors", "ledstream-stop");
|
sendToHyperion("ledcolors", "ledstream-stop");
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestLedImageStart()
|
function requestLedImageStart()
|
||||||
{
|
{
|
||||||
imageStreamActive=true;
|
window.imageStreamActive=true;
|
||||||
sendToHyperion("ledcolors", "imagestream-start");
|
sendToHyperion("ledcolors", "imagestream-start");
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestLedImageStop()
|
function requestLedImageStop()
|
||||||
{
|
{
|
||||||
imageStreamActive=false;
|
window.imageStreamActive=false;
|
||||||
sendToHyperion("ledcolors", "imagestream-stop");
|
sendToHyperion("ledcolors", "imagestream-stop");
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestPriorityClear(prio)
|
function requestPriorityClear(prio)
|
||||||
{
|
{
|
||||||
if(typeof prio !== 'number')
|
if(typeof prio !== 'number')
|
||||||
prio = webPrio;
|
prio = window.webPrio;
|
||||||
|
|
||||||
sendToHyperion("clear", "", '"priority":'+prio+'');
|
sendToHyperion("clear", "", '"priority":'+prio+'');
|
||||||
}
|
}
|
||||||
@ -229,22 +223,22 @@ function requestClearAll()
|
|||||||
|
|
||||||
function requestPlayEffect(effectName, duration)
|
function requestPlayEffect(effectName, duration)
|
||||||
{
|
{
|
||||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'"},"priority":'+webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+webOrigin+'"');
|
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'"},"priority":'+window.webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+window.webOrigin+'"');
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestSetColor(r,g,b,duration)
|
function requestSetColor(r,g,b,duration)
|
||||||
{
|
{
|
||||||
sendToHyperion("color", "", '"color":['+r+','+g+','+b+'], "priority":'+webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+webOrigin+'"');
|
sendToHyperion("color", "", '"color":['+r+','+g+','+b+'], "priority":'+window.webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+window.webOrigin+'"');
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestSetImage(data,width,height,duration)
|
function requestSetImage(data,width,height,duration)
|
||||||
{
|
{
|
||||||
sendToHyperion("image", "", '"imagedata":"'+data+'", "imagewidth":'+width+',"imageheight":'+height+', "priority":'+webPrio+',"duration":'+validateDuration(duration)+'');
|
sendToHyperion("image", "", '"imagedata":"'+data+'", "imagewidth":'+width+',"imageheight":'+height+', "priority":'+window.webPrio+',"duration":'+validateDuration(duration)+'');
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestSetComponentState(comp, state)
|
function requestSetComponentState(comp, state)
|
||||||
{
|
{
|
||||||
state_str = state ? "true" : "false";
|
var state_str = state ? "true" : "false";
|
||||||
sendToHyperion("componentstate", "", '"componentstate":{"component":"'+comp+'","state":'+state_str+'}');
|
sendToHyperion("componentstate", "", '"componentstate":{"component":"'+comp+'","state":'+state_str+'}');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,15 +253,15 @@ function requestSetSource(prio)
|
|||||||
function requestWriteConfig(config, full)
|
function requestWriteConfig(config, full)
|
||||||
{
|
{
|
||||||
if(full === true)
|
if(full === true)
|
||||||
serverConfig = config;
|
window.serverConfig = config;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jQuery.each(config, function(i, val) {
|
jQuery.each(config, function(i, val) {
|
||||||
serverConfig[i] = val;
|
window.serverConfig[i] = val;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToHyperion("config","setconfig", '"config":'+JSON.stringify(serverConfig));
|
sendToHyperion("config","setconfig", '"config":'+JSON.stringify(window.serverConfig));
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestWriteEffect(effectName,effectPy,effectArgs,data)
|
function requestWriteEffect(effectName,effectPy,effectArgs,data)
|
||||||
@ -278,7 +272,7 @@ function requestWriteEffect(effectName,effectPy,effectArgs,data)
|
|||||||
|
|
||||||
function requestTestEffect(effectName,effectPy,effectArgs,data)
|
function requestTestEffect(effectName,effectPy,effectArgs,data)
|
||||||
{
|
{
|
||||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'", "args":'+effectArgs+'}, "priority":'+webPrio+', "origin":"'+webOrigin+'", "pythonScript":"'+effectPy+'", "imageData":"'+data+'"');
|
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'", "args":'+effectArgs+'}, "priority":'+window.webPrio+', "origin":"'+window.webOrigin+'", "pythonScript":"'+effectPy+'", "imageData":"'+data+'"');
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestDeleteEffect(effectName)
|
function requestDeleteEffect(effectName)
|
||||||
@ -288,13 +282,13 @@ function requestDeleteEffect(effectName)
|
|||||||
|
|
||||||
function requestLoggingStart()
|
function requestLoggingStart()
|
||||||
{
|
{
|
||||||
loggingStreamActive=true;
|
window.loggingStreamActive=true;
|
||||||
sendToHyperion("logging", "start");
|
sendToHyperion("logging", "start");
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestLoggingStop()
|
function requestLoggingStop()
|
||||||
{
|
{
|
||||||
loggingStreamActive=false;
|
window.loggingStreamActive=false;
|
||||||
sendToHyperion("logging", "stop");
|
sendToHyperion("logging", "stop");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,14 +43,7 @@ $(document).ready(function() {
|
|||||||
* @return {Path2D} The final path
|
* @return {Path2D} The final path
|
||||||
*/
|
*/
|
||||||
function build2DPath(x, y, width, height, radius) {
|
function build2DPath(x, y, width, height, radius) {
|
||||||
var useColor = false
|
if (typeof radius == 'number') {
|
||||||
if (typeof stroke == 'undefined') {
|
|
||||||
stroke = true;
|
|
||||||
}
|
|
||||||
if (typeof radius === 'undefined') {
|
|
||||||
radius = 5;
|
|
||||||
}
|
|
||||||
if (typeof radius === 'number') {
|
|
||||||
radius = {tl: radius, tr: radius, br: radius, bl: radius};
|
radius = {tl: radius, tr: radius, br: radius, bl: radius};
|
||||||
} else {
|
} else {
|
||||||
var defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};
|
var defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};
|
||||||
@ -59,7 +52,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var path = new Path2D()
|
var path = new Path2D();
|
||||||
|
|
||||||
path.moveTo(x + radius.tl, y);
|
path.moveTo(x + radius.tl, y);
|
||||||
path.lineTo(x + width - radius.tr, y);
|
path.lineTo(x + width - radius.tr, y);
|
||||||
@ -74,10 +67,10 @@ $(document).ready(function() {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
$(hyperion).one("ready",function(){
|
$(window.hyperion).one("ready",function(){
|
||||||
leds = serverConfig.leds;
|
leds = window.serverConfig.leds;
|
||||||
|
|
||||||
if(showOptHelp)
|
if(window.showOptHelp)
|
||||||
{
|
{
|
||||||
createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text');
|
createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text');
|
||||||
$('#ledsim_text').css({'margin':'10px 15px 0px 15px'});
|
$('#ledsim_text').css({'margin':'10px 15px 0px 15px'});
|
||||||
@ -125,7 +118,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
// apply new serverinfos
|
// apply new serverinfos
|
||||||
$(hyperion).on("cmd-config-getconfig",function(event){
|
$(window.hyperion).on("cmd-config-getconfig",function(event){
|
||||||
leds = event.response.info.leds;
|
leds = event.response.info.leds;
|
||||||
updateLedLayout();
|
updateLedLayout();
|
||||||
});
|
});
|
||||||
@ -135,7 +128,7 @@ $(document).ready(function() {
|
|||||||
{
|
{
|
||||||
// toggle leds, do not print
|
// toggle leds, do not print
|
||||||
if(toggleLeds)
|
if(toggleLeds)
|
||||||
return
|
return;
|
||||||
|
|
||||||
var useColor = false;
|
var useColor = false;
|
||||||
ledsCanvasNodeCtx.clear();
|
ledsCanvasNodeCtx.clear();
|
||||||
@ -169,7 +162,7 @@ $(document).ready(function() {
|
|||||||
canvas_width = $('#ledsim_dialog').outerWidth()-30;
|
canvas_width = $('#ledsim_dialog').outerWidth()-30;
|
||||||
|
|
||||||
$('#leds_canvas').html("");
|
$('#leds_canvas').html("");
|
||||||
leds_html = '<canvas id="image_preview_canv" width="'+canvas_width+'" height="'+canvas_height+'" style="position: absolute; left: 0; top: 0; z-index: 99998;"></canvas>';
|
var leds_html = '<canvas id="image_preview_canv" width="'+canvas_width+'" height="'+canvas_height+'" style="position: absolute; left: 0; top: 0; z-index: 99998;"></canvas>';
|
||||||
leds_html += '<canvas id="leds_preview_canv" width="'+canvas_width+'" height="'+canvas_height+'" style="position: absolute; left: 0; top: 0; z-index: 99999;"></canvas>';
|
leds_html += '<canvas id="leds_preview_canv" width="'+canvas_width+'" height="'+canvas_height+'" style="position: absolute; left: 0; top: 0; z-index: 99999;"></canvas>';
|
||||||
|
|
||||||
$('#leds_canvas').html(leds_html);
|
$('#leds_canvas').html(leds_html);
|
||||||
@ -178,7 +171,7 @@ $(document).ready(function() {
|
|||||||
ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d");
|
ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d");
|
||||||
create2dPaths();
|
create2dPaths();
|
||||||
printLedsToCanvas();
|
printLedsToCanvas();
|
||||||
resetImage()
|
resetImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
@ -196,8 +189,8 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
$('#leds_toggle_live_video').off().on("click", function() {
|
$('#leds_toggle_live_video').off().on("click", function() {
|
||||||
setClassByBool('#leds_toggle_live_video',imageStreamActive,"btn-success","btn-danger");
|
setClassByBool('#leds_toggle_live_video',window.imageStreamActive,"btn-success","btn-danger");
|
||||||
if ( imageStreamActive )
|
if ( window.imageStreamActive )
|
||||||
{
|
{
|
||||||
requestLedImageStop();
|
requestLedImageStop();
|
||||||
resetImage();
|
resetImage();
|
||||||
@ -209,7 +202,7 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
$(hyperion).on("cmd-ledcolors-ledstream-update",function(event){
|
$(window.hyperion).on("cmd-ledcolors-ledstream-update",function(event){
|
||||||
if (!modalOpened)
|
if (!modalOpened)
|
||||||
{
|
{
|
||||||
requestLedColorsStop();
|
requestLedColorsStop();
|
||||||
@ -221,14 +214,14 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
$(hyperion).on("cmd-ledcolors-imagestream-update",function(event){
|
$(window.hyperion).on("cmd-ledcolors-imagestream-update",function(event){
|
||||||
if (!modalOpened)
|
if (!modalOpened)
|
||||||
{
|
{
|
||||||
requestLedImageStop();
|
requestLedImageStop();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
imageData = (event.response.result.image);
|
var imageData = (event.response.result.image);
|
||||||
|
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
image.onload = function() {
|
image.onload = function() {
|
||||||
@ -243,12 +236,12 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
$(hyperion).on("cmd-settings-update",function(event){
|
$(window.hyperion).on("cmd-settings-update",function(event){
|
||||||
var obj = event.response.data
|
var obj = event.response.data
|
||||||
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
|
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
|
||||||
serverInfo[val] = obj[val];
|
window.serverInfo[val] = obj[val];
|
||||||
});
|
});
|
||||||
leds = serverConfig.leds
|
leds = window.serverConfig.leds
|
||||||
updateLedLayout();
|
updateLedLayout();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
var storedAccess;
|
var storedAccess;
|
||||||
var storedLang;
|
var storedLang;
|
||||||
var availLang = ['en','de','es','it','cs'];
|
var availLang = ['en','de','es','it','cs'];
|
||||||
var availAccess = ['default','advanced','expert'];
|
var availAccess = ['default','advanced','expert'];
|
||||||
@ -30,7 +30,7 @@ $(document).ready( function() {
|
|||||||
storedLang = getStorage("langcode");
|
storedLang = getStorage("langcode");
|
||||||
if (storedLang == null)
|
if (storedLang == null)
|
||||||
{
|
{
|
||||||
setStorage("langcode", 'auto')
|
setStorage("langcode", 'auto');
|
||||||
storedLang = 'auto';
|
storedLang = 'auto';
|
||||||
initTrans(storedLang);
|
initTrans(storedLang);
|
||||||
}
|
}
|
||||||
@ -119,14 +119,14 @@ $(document).ready( function() {
|
|||||||
|
|
||||||
// instance switcher
|
// instance switcher
|
||||||
$('#btn_instanceswitch').off().on('click',function() {
|
$('#btn_instanceswitch').off().on('click',function() {
|
||||||
var lsys = sysInfo.system.hostName+':'+serverConfig.webConfig.port;
|
var lsys = window.sysInfo.system.hostName+':'+window.serverConfig.webConfig.port;
|
||||||
showInfoDialog('iswitch', $.i18n('InfoDialog_iswitch_title'), $.i18n('InfoDialog_iswitch_text'));
|
showInfoDialog('iswitch', $.i18n('InfoDialog_iswitch_title'), $.i18n('InfoDialog_iswitch_text'));
|
||||||
|
|
||||||
for (var i = 0; i<wSess.length; i++)
|
for (var i = 0; i<window.wSess.length; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(lsys != wSess[i].host+':'+wSess[i].port)
|
if(lsys != window.wSess[i].host+':'+window.wSess[i].port)
|
||||||
$('#id_select').append(createSelOpt('http://'+wSess[i].address+':'+wSess[i].port, wSess[i].name))
|
$('#id_select').append(createSelOpt('http://'+window.wSess[i].address+':'+window.wSess[i].port, window.wSess[i].name))
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#id_btn_saveset').off().on('click',function() {
|
$('#id_btn_saveset').off().on('click',function() {
|
||||||
|
@ -42,7 +42,7 @@ function setStorage(item, value, session)
|
|||||||
|
|
||||||
function debugMessage(msg)
|
function debugMessage(msg)
|
||||||
{
|
{
|
||||||
if (debugMessagesActive)
|
if (window.debugMessagesActive)
|
||||||
{
|
{
|
||||||
console.log(msg);
|
console.log(msg);
|
||||||
}
|
}
|
||||||
@ -50,19 +50,19 @@ function debugMessage(msg)
|
|||||||
|
|
||||||
function updateSessions()
|
function updateSessions()
|
||||||
{
|
{
|
||||||
var sess = serverInfo.sessions;
|
var sess = window.serverInfo.sessions;
|
||||||
if (sess.length)
|
if (sess.length)
|
||||||
{
|
{
|
||||||
wSess = [];
|
window.wSess = [];
|
||||||
for(var i = 0; i<sess.length; i++)
|
for(var i = 0; i<sess.length; i++)
|
||||||
{
|
{
|
||||||
if(sess[i].type == "_hyperiond-http._tcp.")
|
if(sess[i].type == "_hyperiond-http._tcp.")
|
||||||
{
|
{
|
||||||
wSess.push(sess[i]);
|
window.wSess.push(sess[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wSess.length > 1)
|
if (window.wSess.length > 1)
|
||||||
$('#btn_instanceswitch').toggle(true);
|
$('#btn_instanceswitch').toggle(true);
|
||||||
else
|
else
|
||||||
$('#btn_instanceswitch').toggle(false);
|
$('#btn_instanceswitch').toggle(false);
|
||||||
@ -72,7 +72,7 @@ function updateSessions()
|
|||||||
function validateDuration(d)
|
function validateDuration(d)
|
||||||
{
|
{
|
||||||
if(typeof d === "undefined" || d < 0)
|
if(typeof d === "undefined" || d < 0)
|
||||||
return d = 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return d *= 1000;
|
return d *= 1000;
|
||||||
}
|
}
|
||||||
@ -110,8 +110,10 @@ function loadContent(event, forceRefresh)
|
|||||||
$("#page-content").off();
|
$("#page-content").off();
|
||||||
$("#page-content").load("/content/"+tag+".html", function(response,status,xhr){
|
$("#page-content").load("/content/"+tag+".html", function(response,status,xhr){
|
||||||
if(status == "error")
|
if(status == "error")
|
||||||
|
{
|
||||||
$("#page-content").html('<h3>'+$.i18n('info_404')+'</h3>');
|
$("#page-content").html('<h3>'+$.i18n('info_404')+'</h3>');
|
||||||
removeOverlay();
|
removeOverlay();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,7 +214,8 @@ function showInfoDialog(type,header,message)
|
|||||||
|
|
||||||
function createHintH(type, text, container)
|
function createHintH(type, text, container)
|
||||||
{
|
{
|
||||||
if(type = "intro")
|
type = String(type);
|
||||||
|
if(type == "intro")
|
||||||
tclass = "introd";
|
tclass = "introd";
|
||||||
|
|
||||||
$('#'+container).prepend('<div class="'+tclass+'"><h4 style="font-size:16px">'+text+'</h4><hr/></div>');
|
$('#'+container).prepend('<div class="'+tclass+'"><h4 style="font-size:16px">'+text+'</h4><hr/></div>');
|
||||||
@ -349,7 +352,7 @@ function createJsonEditor(container,schema,setconfig,usePanel,arrayre)
|
|||||||
{
|
{
|
||||||
for(var key in editor.root.editors)
|
for(var key in editor.root.editors)
|
||||||
{
|
{
|
||||||
editor.getEditor("root."+key).setValue( serverConfig[key] );
|
editor.getEditor("root."+key).setValue( window.serverConfig[key] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,8 +479,8 @@ function createCP(id, color, cb)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('#'+id).colorpicker().on('changeColor', function(e) {
|
$('#'+id).colorpicker().on('changeColor', function(e) {
|
||||||
rgb = e.color.toRGB();
|
var rgb = e.color.toRGB();
|
||||||
hex = e.color.toHex();
|
var hex = e.color.toHex();
|
||||||
cb(rgb,hex,e);
|
cb(rgb,hex,e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -549,7 +552,7 @@ function createRow(id)
|
|||||||
function createOptPanel(phicon, phead, bodyid, footerid)
|
function createOptPanel(phicon, phead, bodyid, footerid)
|
||||||
{
|
{
|
||||||
phead = '<i class="fa '+phicon+' fa-fw"></i>'+phead;
|
phead = '<i class="fa '+phicon+' fa-fw"></i>'+phead;
|
||||||
pfooter = document.createElement('button');
|
var pfooter = document.createElement('button');
|
||||||
pfooter.className = "btn btn-primary";
|
pfooter.className = "btn btn-primary";
|
||||||
pfooter.setAttribute("id", footerid);
|
pfooter.setAttribute("id", footerid);
|
||||||
pfooter.innerHTML = '<i class="fa fa-fw fa-save"></i>'+$.i18n('general_button_savesettings');
|
pfooter.innerHTML = '<i class="fa fa-fw fa-save"></i>'+$.i18n('general_button_savesettings');
|
||||||
@ -559,7 +562,7 @@ function createOptPanel(phicon, phead, bodyid, footerid)
|
|||||||
|
|
||||||
function sortProperties(list)
|
function sortProperties(list)
|
||||||
{
|
{
|
||||||
for(key in list)
|
for(var key in list)
|
||||||
{
|
{
|
||||||
list[key].key = key;
|
list[key].key = key;
|
||||||
}
|
}
|
||||||
@ -583,7 +586,7 @@ function createHelpTable(list, phead){
|
|||||||
|
|
||||||
thead.appendChild(createTableRow([$.i18n('conf_helptable_option'), $.i18n('conf_helptable_expl')], true, false));
|
thead.appendChild(createTableRow([$.i18n('conf_helptable_option'), $.i18n('conf_helptable_expl')], true, false));
|
||||||
|
|
||||||
for (key in list)
|
for (var key in list)
|
||||||
{
|
{
|
||||||
if(list[key].access != 'system')
|
if(list[key].access != 'system')
|
||||||
{
|
{
|
||||||
@ -596,7 +599,7 @@ function createHelpTable(list, phead){
|
|||||||
if(list[key].items && list[key].items.properties)
|
if(list[key].items && list[key].items.properties)
|
||||||
{
|
{
|
||||||
var ilist = sortProperties(list[key].items.properties);
|
var ilist = sortProperties(list[key].items.properties);
|
||||||
for (ikey in ilist)
|
for (var ikey in ilist)
|
||||||
{
|
{
|
||||||
// break one iteration (in the loop), if the schema has the entry hidden=true
|
// break one iteration (in the loop), if the schema has the entry hidden=true
|
||||||
if ("options" in ilist[ikey] && "hidden" in ilist[ikey].options && (ilist[ikey].options.hidden))
|
if ("options" in ilist[ikey] && "hidden" in ilist[ikey].options && (ilist[ikey].options.hidden))
|
||||||
@ -635,7 +638,7 @@ function createPanel(head, body, footer, type, bodyid){
|
|||||||
if(typeof bodyid != 'undefined')
|
if(typeof bodyid != 'undefined')
|
||||||
{
|
{
|
||||||
pfooter.style.textAlign = 'right';
|
pfooter.style.textAlign = 'right';
|
||||||
pbody.setAttribute("id", bodyid)
|
pbody.setAttribute("id", bodyid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof body != 'undefined' && body != "")
|
if(typeof body != 'undefined' && body != "")
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
//clear priority and other tasks if people reload the page or lost connection while a wizard was active
|
//clear priority and other tasks if people reload the page or lost connection while a wizard was active
|
||||||
$(hyperion).one("ready", function(event) {
|
$(window.hyperion).one("ready", function(event) {
|
||||||
if(getStorage("wizardactive") === 'true')
|
if(getStorage("wizardactive") === 'true')
|
||||||
{
|
{
|
||||||
requestPriorityClear();
|
requestPriorityClear();
|
||||||
setStorage("wizardactive", false);
|
setStorage("wizardactive", false);
|
||||||
if(getStorage("kodiAddress" != null))
|
if(getStorage("kodiAddress") != null)
|
||||||
{
|
{
|
||||||
kodiAddress = getStorage("kodiAddress");
|
kodiAddress = getStorage("kodiAddress");
|
||||||
sendToKodi("stop");
|
sendToKodi("stop");
|
||||||
@ -58,7 +58,7 @@
|
|||||||
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_rgb_switchevery')+'</label><div class="input-group" style="width:100px"><select id="wiz_switchtime_select" class="form-control"></select><div class="input-group-addon">'+$.i18n('edt_append_s')+'</div></div></div>');
|
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_rgb_switchevery')+'</label><div class="input-group" style="width:100px"><select id="wiz_switchtime_select" class="form-control"></select><div class="input-group-addon">'+$.i18n('edt_append_s')+'</div></div></div>');
|
||||||
$('#wizp2_body').append('<canvas id="wiz_canv_color" width="100" height="100" style="border-radius:60px;background-color:red; display:block; margin: 10px 0;border:4px solid grey;"></canvas><label>'+$.i18n('wiz_rgb_q')+'</label>');
|
$('#wizp2_body').append('<canvas id="wiz_canv_color" width="100" height="100" style="border-radius:60px;background-color:red; display:block; margin: 10px 0;border:4px solid grey;"></canvas><label>'+$.i18n('wiz_rgb_q')+'</label>');
|
||||||
$('#wizp2_body').append('<table class="table borderless" style="width:200px"><tbody><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qrend')+'</label></td><td class="itd"><select id="wiz_r_select" class="form-control wselect"></select></td></tr><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qgend')+'</label></td><td class="itd"><select id="wiz_g_select" class="form-control wselect"></select></td></tr></tbody></table>');
|
$('#wizp2_body').append('<table class="table borderless" style="width:200px"><tbody><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qrend')+'</label></td><td class="itd"><select id="wiz_r_select" class="form-control wselect"></select></td></tr><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qgend')+'</label></td><td class="itd"><select id="wiz_g_select" class="form-control wselect"></select></td></tr></tbody></table>');
|
||||||
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_checkok" style="display:none" data-dismiss="modal"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_ok')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>')
|
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_checkok" style="display:none" data-dismiss="modal"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_ok')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||||
|
|
||||||
//open modal
|
//open modal
|
||||||
$("#wizard_modal").modal({
|
$("#wizard_modal").modal({
|
||||||
@ -84,7 +84,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('.wselect').change(function () {
|
$('.wselect').change(function () {
|
||||||
var rgb_order = serverConfig.device.colorOrder.split("");
|
var rgb_order = window.serverConfig.device.colorOrder.split("");
|
||||||
var redS = $("#wiz_r_select").val();
|
var redS = $("#wiz_r_select").val();
|
||||||
var greenS = $("#wiz_g_select").val();
|
var greenS = $("#wiz_g_select").val();
|
||||||
var blueS = rgb_order.toString().replace(/,/g,"").replace(redS, "").replace(greenS,"");
|
var blueS = rgb_order.toString().replace(/,/g,"").replace(redS, "").replace(greenS,"");
|
||||||
@ -127,7 +127,7 @@
|
|||||||
$('#btn_wiz_save').toggle(true);
|
$('#btn_wiz_save').toggle(true);
|
||||||
$('#btn_wiz_checkok').toggle(false);
|
$('#btn_wiz_checkok').toggle(false);
|
||||||
}
|
}
|
||||||
new_rgb_order = rgb_order
|
new_rgb_order = rgb_order;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$('#btn_wiz_save').attr('disabled',true);
|
$('#btn_wiz_save').attr('disabled',true);
|
||||||
@ -153,8 +153,8 @@
|
|||||||
|
|
||||||
$('#btn_wiz_save').off().on('click',function() {
|
$('#btn_wiz_save').off().on('click',function() {
|
||||||
resetWizard();
|
resetWizard();
|
||||||
serverConfig.device.colorOrder = new_rgb_order;
|
window.serverConfig.device.colorOrder = new_rgb_order;
|
||||||
requestWriteConfig({"device" : serverConfig.device});
|
requestWriteConfig({"device" : window.serverConfig.device});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,10 +232,10 @@
|
|||||||
{
|
{
|
||||||
$('#wiz_cc_desc').html($.i18n('wiz_cc_chooseid'));
|
$('#wiz_cc_desc').html($.i18n('wiz_cc_chooseid'));
|
||||||
updateWEditor(["id"]);
|
updateWEditor(["id"]);
|
||||||
$('#btn_wiz_back').attr("disabled", true)
|
$('#btn_wiz_back').attr("disabled", true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$('#btn_wiz_back').attr("disabled", false)
|
$('#btn_wiz_back').attr("disabled", false);
|
||||||
|
|
||||||
if(step == 2)
|
if(step == 2)
|
||||||
{
|
{
|
||||||
@ -415,7 +415,7 @@
|
|||||||
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_cc_title')+'</h4><p>'+$.i18n('wiz_cc_intro1')+'</p><label>'+$.i18n('wiz_cc_kwebs')+'</label><input class="form-control" style="width:170px;margin:auto" id="wiz_cc_kodiip" type="text" placeholder="'+kodiAddress+'" value="'+kodiAddress+'" /><span id="kodi_status"></span><span id="multi_cali"></span>');
|
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_cc_title')+'</h4><p>'+$.i18n('wiz_cc_intro1')+'</p><label>'+$.i18n('wiz_cc_kwebs')+'</label><input class="form-control" style="width:170px;margin:auto" id="wiz_cc_kodiip" type="text" placeholder="'+kodiAddress+'" value="'+kodiAddress+'" /><span id="kodi_status"></span><span id="multi_cali"></span>');
|
||||||
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont" disabled="disabled"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont" disabled="disabled"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||||
$('#wizp2_body').html('<div id="wiz_cc_desc" style="font-weight:bold"></div><div id="editor_container_wiz"></div>');
|
$('#wizp2_body').html('<div id="wiz_cc_desc" style="font-weight:bold"></div><div id="editor_container_wiz"></div>');
|
||||||
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_back"><i class="fa fa-fw fa-chevron-left"></i>'+$.i18n('general_btn_back')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_next">'+$.i18n('general_btn_next')+'<i style="margin-left:4px;"class="fa fa-fw fa-chevron-right"></i></button><button type="button" class="btn btn-warning" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>')
|
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_back"><i class="fa fa-fw fa-chevron-left"></i>'+$.i18n('general_btn_back')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_next">'+$.i18n('general_btn_next')+'<i style="margin-left:4px;"class="fa fa-fw fa-chevron-right"></i></button><button type="button" class="btn btn-warning" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||||
|
|
||||||
//open modal
|
//open modal
|
||||||
$("#wizard_modal").modal({
|
$("#wizard_modal").modal({
|
||||||
@ -450,10 +450,10 @@
|
|||||||
$('#wizp2').toggle(true);
|
$('#wizp2').toggle(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#wiz_cc_kodiip').trigger("change")
|
$('#wiz_cc_kodiip').trigger("change");
|
||||||
colorLength = serverConfig.color.channelAdjustment;
|
colorLength = window.serverConfig.color.channelAdjustment;
|
||||||
cobj = schema.color.properties.channelAdjustment.items.properties;
|
cobj = window.schema.color.properties.channelAdjustment.items.properties;
|
||||||
websAddress = document.location.hostname+':'+serverConfig.webConfig.port;
|
websAddress = document.location.hostname+':'+window.serverConfig.webConfig.port;
|
||||||
imgAddress = 'http://'+websAddress+'/img/cc/';
|
imgAddress = 'http://'+websAddress+'/img/cc/';
|
||||||
setStorage("wizardactive", true);
|
setStorage("wizardactive", true);
|
||||||
|
|
||||||
@ -471,7 +471,7 @@
|
|||||||
|
|
||||||
//prepare editor
|
//prepare editor
|
||||||
wiz_editor = createJsonEditor('editor_container_wiz', {
|
wiz_editor = createJsonEditor('editor_container_wiz', {
|
||||||
color : schema.color
|
color : window.schema.color
|
||||||
}, true, true);
|
}, true, true);
|
||||||
|
|
||||||
$('#editor_container_wiz h4').toggle(false);
|
$('#editor_container_wiz h4').toggle(false);
|
||||||
@ -716,7 +716,7 @@
|
|||||||
|
|
||||||
//create hue led config
|
//create hue led config
|
||||||
var incC = 0;
|
var incC = 0;
|
||||||
for(key in lightIDs)
|
for(var key in lightIDs)
|
||||||
{
|
{
|
||||||
if($('#hue_'+key).val() != "disabled")
|
if($('#hue_'+key).val() != "disabled")
|
||||||
{
|
{
|
||||||
@ -726,10 +726,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
serverConfig.leds = hueLedConfig;
|
window.serverConfig.leds = hueLedConfig;
|
||||||
|
|
||||||
//Adjust gamma, brightness and compensation
|
//Adjust gamma, brightness and compensation
|
||||||
var c = serverConfig.color.channelAdjustment[0];
|
var c = window.serverConfig.color.channelAdjustment[0];
|
||||||
c.gammaBlue = 1.0;
|
c.gammaBlue = 1.0;
|
||||||
c.gammaRed = 1.0;
|
c.gammaRed = 1.0;
|
||||||
c.gammaGreen = 1.0;
|
c.gammaGreen = 1.0;
|
||||||
@ -737,7 +737,7 @@
|
|||||||
c.brightnessCompensation = 0;
|
c.brightnessCompensation = 0;
|
||||||
|
|
||||||
//device config
|
//device config
|
||||||
var d = serverConfig.device;
|
var d = window.serverConfig.device;
|
||||||
d.output = $('#ip').val();
|
d.output = $('#ip').val();
|
||||||
d.lightIds = finalLightIds;
|
d.lightIds = finalLightIds;
|
||||||
d.username = $('#user').val();
|
d.username = $('#user').val();
|
||||||
@ -746,9 +746,9 @@
|
|||||||
d.switchOffOnBlack = true;
|
d.switchOffOnBlack = true;
|
||||||
|
|
||||||
//smoothing off
|
//smoothing off
|
||||||
serverConfig.smoothing.enable = false;
|
window.serverConfig.smoothing.enable = false;
|
||||||
|
|
||||||
requestWriteConfig(serverConfig, true);
|
requestWriteConfig(window.serverConfig, true);
|
||||||
resetWizard();
|
resetWizard();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -822,7 +822,7 @@
|
|||||||
|
|
||||||
$('.hue_sel_watch').bind("change", function(){
|
$('.hue_sel_watch').bind("change", function(){
|
||||||
var cC = 0;
|
var cC = 0;
|
||||||
for(key in lightIDs)
|
for(var key in lightIDs)
|
||||||
{
|
{
|
||||||
if($('#hue_'+key).val() != "disabled")
|
if($('#hue_'+key).val() != "disabled")
|
||||||
{
|
{
|
||||||
|
15
bin/create_all_releases.sh
Normal file → Executable file
15
bin/create_all_releases.sh
Normal file → Executable file
@ -10,25 +10,28 @@ make_release()
|
|||||||
PLATFORM=$2
|
PLATFORM=$2
|
||||||
shift 2
|
shift 2
|
||||||
|
|
||||||
|
rm -r build-${RELEASE}
|
||||||
mkdir -p build-${RELEASE}
|
mkdir -p build-${RELEASE}
|
||||||
|
rm -r deploy/${RELEASE}
|
||||||
mkdir -p deploy/${RELEASE}
|
mkdir -p deploy/${RELEASE}
|
||||||
|
|
||||||
cd build-${RELEASE}
|
cd build-${RELEASE}
|
||||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -DPLATFORM=${PLATFORM} $@ -DCMAKE_BUILD_TYPE=Release -Wno-dev .. || exit 1
|
cmake -DCMAKE_INSTALL_PREFIX=/usr -DPLATFORM=${PLATFORM} $@ -DCMAKE_BUILD_TYPE=Release -Wno-dev .. || exit 1
|
||||||
make -j $(nproc) || exit 1
|
make -j $(nproc) || exit 1
|
||||||
#strip bin/*
|
#strip bin/*
|
||||||
make package -j $(nproc)
|
make package -j $(nproc)
|
||||||
mv hyperion-*-ambilight.* ../deploy/${RELEASE}
|
mv Hyperion-*.* ../deploy/${RELEASE}
|
||||||
cd ..
|
cd ..
|
||||||
bin/create_release.sh . ${RELEASE}
|
bin/create_release.sh . ${RELEASE}
|
||||||
}
|
}
|
||||||
|
|
||||||
export PATH="$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin"
|
|
||||||
CMAKE_PROTOC_FLAG="-DIMPORT_PROTOC=../build-x86x64/protoc_export.cmake"
|
CMAKE_PROTOC_FLAG="-DIMPORT_PROTOC=../build-x86x64/protoc_export.cmake"
|
||||||
|
CMAKE_FLATC_FLAG="-DIMPORT_FLATC=../build-x86x64/flatc_export.cmake"
|
||||||
|
|
||||||
make_release x86x64 x86
|
make_release x86x64 x86
|
||||||
#make_release x32 x86 ${CMAKE_PROTOC_FLAG}
|
#make_release x32 x86 -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-x32.cmake" ${CMAKE_PROTOC_FLAG} ${CMAKE_FLATC_FLAG}
|
||||||
make_release rpi rpi -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
|
make_release rpi rpi -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG} ${CMAKE_FLATC_FLAG}
|
||||||
make_release wetek wetek -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
|
#make_release wetek wetek -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG} ${CMAKE_FLATC_FLAG}
|
||||||
#make_release imx6 imx6 -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-imx6.cmake" ${CMAKE_PROTOC_FLAG}
|
#make_release imx6 imx6 -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-imx6.cmake" ${CMAKE_PROTOC_FLAG} ${CMAKE_FLATC_FLAG}
|
||||||
|
|
||||||
|
|
||||||
|
8
bin/create_release.sh
Normal file → Executable file
8
bin/create_release.sh
Normal file → Executable file
@ -27,8 +27,8 @@ tar --create --gzip --absolute-names --show-transformed-names --ignore-failed-re
|
|||||||
--transform "s:$repodir/bin/service/hyperion.initctl.sh:hyperion/services/hyperion.initctl.sh:" \
|
--transform "s:$repodir/bin/service/hyperion.initctl.sh:hyperion/services/hyperion.initctl.sh:" \
|
||||||
--transform "s://:/:g" \
|
--transform "s://:/:g" \
|
||||||
"$builddir/bin/hyperion"* \
|
"$builddir/bin/hyperion"* \
|
||||||
"$repodir/bin/service/hyperion.init.sh" \
|
"$repodir/bin/service/hyperion.init" \
|
||||||
"$repodir/bin/service/hyperion.systemd.sh" \
|
"$repodir/bin/service/hyperion.systemd" \
|
||||||
"$repodir/bin/service/hyperion.initctl.sh" \
|
"$repodir/bin/service/hyperion.initctl" \
|
||||||
"$repodir/config/hyperion.config.json.example"
|
"$repodir/config/hyperion.config.json.default"
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ DOCKER="docker"
|
|||||||
GIT_REPO_URL="https://github.com/hyperion-project/hyperion.ng.git"
|
GIT_REPO_URL="https://github.com/hyperion-project/hyperion.ng.git"
|
||||||
# cmake build type
|
# cmake build type
|
||||||
BUILD_TYPE="Release"
|
BUILD_TYPE="Release"
|
||||||
# the image tag at hyperionorg/hyperion-ci
|
# the image tag at hyperionproject/hyperion-ci
|
||||||
BUILD_TARGET="ubuntu1604"
|
BUILD_TARGET="amd64"
|
||||||
# build packages (.deb .zip ...)
|
# build packages (.deb .zip ...)
|
||||||
BUILD_PACKAGES=true
|
BUILD_PACKAGES=true
|
||||||
# packages string inserted to cmake cmd
|
# packages string inserted to cmake cmd
|
||||||
@ -42,8 +42,8 @@ function printHelp {
|
|||||||
echo "########################################################
|
echo "########################################################
|
||||||
## A script to compile Hyperion inside a docker container
|
## A script to compile Hyperion inside a docker container
|
||||||
## Requires installed Docker: https://www.docker.com/
|
## Requires installed Docker: https://www.docker.com/
|
||||||
## Without arguments it will compile Hyperion for Ubuntu 16.04 (x64) or higher.
|
## Without arguments it will compile Hyperion for Debain Stretch (x64) or higher.
|
||||||
## Supports Raspberry Pi (armv6) cross compilation (Raspbian Stretch)
|
## Supports Raspberry Pi (armv6hf, armv7hf) cross compilation (Debian Stretch)
|
||||||
##
|
##
|
||||||
## Homepage: https://www.hyperion-project.org
|
## Homepage: https://www.hyperion-project.org
|
||||||
## Forum: https://forum.hyperion-project.org
|
## Forum: https://forum.hyperion-project.org
|
||||||
@ -51,10 +51,10 @@ echo "########################################################
|
|||||||
# These are possible arguments to modify the script behaviour with their default values
|
# These are possible arguments to modify the script behaviour with their default values
|
||||||
#
|
#
|
||||||
# docker-compile.sh -h # Show this help message
|
# docker-compile.sh -h # Show this help message
|
||||||
# docker-compile.sh -t ubuntu1604 # The docker tag, one of ubuntu1604 | cross-qemu-rpistretch
|
# docker-compile.sh -t amd64 # The docker tag, one of amd64 | i386 | armv6hf | armv7hf
|
||||||
# docker-compile.sh -b Release # cmake Release or Debug build
|
# docker-compile.sh -b Release # cmake Release or Debug build
|
||||||
# docker-compile.sh -p true # If true build packages with CPack
|
# docker-compile.sh -p true # If true build packages with CPack
|
||||||
# More informations to docker tags at: https://hub.docker.com/r/hyperionorg/hyperion-ci/"
|
# More informations to docker tags at: https://hub.docker.com/r/hyperionproject/hyperion-ci/"
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts t:b:p:h option
|
while getopts t:b:p:h option
|
||||||
@ -94,7 +94,7 @@ echo "---> Startup docker..."
|
|||||||
$DOCKER run --rm \
|
$DOCKER run --rm \
|
||||||
-v "${SCRIPT_PATH}/deploy:/deploy" \
|
-v "${SCRIPT_PATH}/deploy:/deploy" \
|
||||||
-v "${SCRIPT_PATH}/hyperion:/source:ro" \
|
-v "${SCRIPT_PATH}/hyperion:/source:ro" \
|
||||||
hyperionorg/hyperion-ci:$BUILD_TARGET \
|
hyperionproject/hyperion-ci:$BUILD_TARGET \
|
||||||
/bin/bash -c "mkdir build && cp -r /source/. /build &&
|
/bin/bash -c "mkdir build && cp -r /source/. /build &&
|
||||||
cd /build && mkdir build && cd build &&
|
cd /build && mkdir build && cd build &&
|
||||||
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&
|
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&
|
||||||
|
17
cmake/LDGold.cmake
Normal file
17
cmake/LDGold.cmake
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
option(ENABLE_LDGOLD "Use GNU gold linker" ON)
|
||||||
|
|
||||||
|
set(LDGOLD_FOUND FALSE)
|
||||||
|
if(ENABLE_LDGOLD)
|
||||||
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
||||||
|
if(LD_VERSION MATCHES "GNU gold")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
|
||||||
|
set(LDGOLD_FOUND TRUE)
|
||||||
|
message(STATUS "Linker: GNU gold")
|
||||||
|
else()
|
||||||
|
message(STATUS "GNU gold linker is not available, falling back to default system linker")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "Linker: Default system linker")
|
||||||
|
endif()
|
@ -1,16 +1,21 @@
|
|||||||
SET(CUBIXCROSS_DIR $ENV{HOME}/hummingboard)
|
|
||||||
|
|
||||||
SET(CMAKE_SYSTEM_NAME Linux)
|
SET(CMAKE_SYSTEM_NAME Linux)
|
||||||
SET(CMAKE_SYSTEM_VERSION 1)
|
SET(CMAKE_SYSTEM_VERSION 1)
|
||||||
|
|
||||||
# specify the cross compiler
|
SET(CROSSROOT $ENV{HOME}/crosscompile)
|
||||||
SET(CMAKE_C_COMPILER ${CUBIXCROSS_DIR}/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-gcc)
|
SET(DEVROOT ${CROSSROOT}/hummingboard)
|
||||||
SET(CMAKE_CXX_COMPILER ${CUBIXCROSS_DIR}/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-g++)
|
SET(CUBIXROOT ${DEVROOT}/rootfs)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard")
|
SET(CUBIXCROSS_DIR ${DEVROOT}/tools)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard")
|
|
||||||
|
|
||||||
# where is the target environment
|
SET(TOOLROOT ${CUBIXCROSS_DIR}/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/ )
|
||||||
SET(CMAKE_FIND_ROOT_PATH ${CUBIXCROSS_DIR}/rootfs)
|
|
||||||
|
# specify the cross compiler
|
||||||
|
SET(CMAKE_C_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-gcc)
|
||||||
|
SET(CMAKE_CXX_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-g++)
|
||||||
|
SET(CUBIX_FLAGS "-march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard")
|
||||||
|
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf" )
|
||||||
|
|
||||||
|
SET(CMAKE_SYSROOT ${CUBIXROOT})
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH ${CUBIXROOT})
|
||||||
|
|
||||||
# search for programs in the build host directories
|
# search for programs in the build host directories
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
@ -18,5 +23,17 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|||||||
# for libraries and headers in the target directories
|
# for libraries and headers in the target directories
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
#SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGES ONLY)
|
||||||
|
|
||||||
include_directories(${CMAKE_FIND_ROOT_PATH}/usr/include)
|
#SET Flags for linking as dynamic linker config file is not being properly parsed by the toolchain
|
||||||
|
# see https://solderspot.wordpress.com/2016/02/04/cross-compiling-for-raspberry-pi-part-ii/
|
||||||
|
|
||||||
|
SET(FLAGS "${CUBIX_FLAGS} -Wl,-rpath-link,${CUBIXROOT}/opt/vc/lib -Wl,-rpath-link,${CUBIXROOT}/lib/arm-linux-gnueabihf -Wl,-rpath-link,${CUBIXROOT}/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,${CUBIXROOT}/usr/local/lib")
|
||||||
|
|
||||||
|
UNSET(CMAKE_C_FLAGS CACHE)
|
||||||
|
UNSET(CMAKE_CXX_FLAGS CACHE)
|
||||||
|
|
||||||
|
SET(CMAKE_CXX_FLAGS ${FLAGS} CACHE STRING "" FORCE)
|
||||||
|
SET(CMAKE_C_FLAGS ${FLAGS} CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
link_directories(${CUBIXROOT}/lib/arm-linux-gnueabihf)
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
SET(RASPCROSS_DIR $ENV{HOME}/raspberrypi)
|
|
||||||
|
|
||||||
SET(CMAKE_SYSTEM_NAME Linux)
|
SET(CMAKE_SYSTEM_NAME Linux)
|
||||||
SET(CMAKE_SYSTEM_VERSION 1)
|
SET(CMAKE_SYSTEM_VERSION 1)
|
||||||
|
|
||||||
# specify the cross compiler
|
SET(CROSSROOT $ENV{HOME}/crosscompile)
|
||||||
SET(CMAKE_C_COMPILER ${RASPCROSS_DIR}/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc)
|
SET(DEVROOT ${CROSSROOT}/raspberrypi)
|
||||||
SET(CMAKE_CXX_COMPILER ${RASPCROSS_DIR}/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++)
|
SET(PIROOT ${DEVROOT}/rootfs)
|
||||||
|
SET(PITOOLCHAIN ${DEVROOT}/tools)
|
||||||
|
|
||||||
# where is the target environment
|
SET(TOOLROOT ${PITOOLCHAIN}/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf )
|
||||||
SET(CMAKE_FIND_ROOT_PATH ${RASPCROSS_DIR}/rootfs)
|
SET(QT_BIN_PATH ${CROSSROOT}/Qt5/5.7/gcc_64/bin)
|
||||||
|
|
||||||
|
# specify the cross compiler
|
||||||
|
SET(CMAKE_C_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-gcc)
|
||||||
|
SET(CMAKE_CXX_COMPILER ${TOOLROOT}/bin/arm-linux-gnueabihf-g++)
|
||||||
|
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf" )
|
||||||
|
|
||||||
|
SET(CMAKE_SYSROOT ${PIROOT})
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH ${PIROOT})
|
||||||
|
|
||||||
# search for programs in the build host directories
|
# search for programs in the build host directories
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
@ -16,4 +23,19 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|||||||
# for libraries and headers in the target directories
|
# for libraries and headers in the target directories
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
#SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGES ONLY)
|
||||||
|
|
||||||
|
|
||||||
|
#SET Flags for linking as dynamic linker config file is not being properly parsed by the toolchain
|
||||||
|
# see https://solderspot.wordpress.com/2016/02/04/cross-compiling-for-raspberry-pi-part-ii/
|
||||||
|
|
||||||
|
SET(FLAGS "-Wl,-rpath-link,${PIROOT}/opt/vc/lib -Wl,-rpath-link,${PIROOT}/lib/arm-linux-gnueabihf -Wl,-rpath-link,${PIROOT}/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,${PIROOT}/usr/local/lib")
|
||||||
|
|
||||||
|
UNSET(CMAKE_C_FLAGS CACHE)
|
||||||
|
UNSET(CMAKE_CXX_FLAGS CACHE)
|
||||||
|
|
||||||
|
SET(CMAKE_CXX_FLAGS ${FLAGS} CACHE STRING "" FORCE)
|
||||||
|
SET(CMAKE_C_FLAGS ${FLAGS} CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
link_directories(${PIROOT}/lib/arm-linux-gnueabihf)
|
||||||
|
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
# toolchain file for building a 32bit version on a 64bit host
|
# toolchain file for building a 32bit version on a 64bit host
|
||||||
|
|
||||||
# use it like this:
|
# Add additional 32-bit libraries
|
||||||
# cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-x32.cmake <sourcedir>
|
# sudo apt-get install g++-multilib libc6-dev-i386
|
||||||
|
|
||||||
|
#TO-DO
|
||||||
|
# Install QT5 32bit
|
||||||
|
|
||||||
|
SET(CROSSROOT $ENV{HOME}/crosscompile)
|
||||||
|
SET(QT_BIN_PATH ${CROSSROOT}/x86_32-linux-gnu/qt5/bin)
|
||||||
|
|
||||||
set(CMAKE_SYSTEM_NAME Linux)
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
set(CMAKE_SYSTEM_VERSION 1)
|
set(CMAKE_SYSTEM_VERSION 1)
|
||||||
@ -10,3 +16,6 @@ set(CMAKE_SYSTEM_PROCESSOR "i686")
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,7 +114,6 @@
|
|||||||
/// * sDHOffsetMax : area for signal detection - horizontal maximum offset value. Values between 0.0 and 1.0
|
/// * sDHOffsetMax : area for signal detection - horizontal maximum offset value. Values between 0.0 and 1.0
|
||||||
/// * sDVOffsetMax : area for signal detection - vertical maximum offset value. Values between 0.0 and 1.0
|
/// * sDVOffsetMax : area for signal detection - vertical maximum offset value. Values between 0.0 and 1.0
|
||||||
"grabberV4L2" :
|
"grabberV4L2" :
|
||||||
[
|
|
||||||
{
|
{
|
||||||
"device" : "auto",
|
"device" : "auto",
|
||||||
"standard" : "NO_CHANGE",
|
"standard" : "NO_CHANGE",
|
||||||
@ -132,8 +131,7 @@
|
|||||||
"sDHOffsetMin" : 0.25,
|
"sDHOffsetMin" : 0.25,
|
||||||
"sDVOffsetMax" : 0.75,
|
"sDVOffsetMax" : 0.75,
|
||||||
"sDHOffsetMax" : 0.75
|
"sDHOffsetMax" : 0.75
|
||||||
}
|
},
|
||||||
],
|
|
||||||
|
|
||||||
/// The configuration for the frame-grabber, contains the following items:
|
/// The configuration for the frame-grabber, contains the following items:
|
||||||
/// * type : type of grabber. (auto|osx|dispmanx|amlogic|x11|framebuffer|qt) [auto]
|
/// * type : type of grabber. (auto|osx|dispmanx|amlogic|x11|framebuffer|qt) [auto]
|
||||||
@ -243,15 +241,24 @@
|
|||||||
"timeout" : 5
|
"timeout" : 5
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// The configuration of the Protobuffer server which enables the Protobuffer remote interface
|
||||||
|
/// * port : Port at which the protobuffer server is started
|
||||||
|
"protoServer" :
|
||||||
|
{
|
||||||
|
"enable" : true,
|
||||||
|
"port" : 19445,
|
||||||
|
"timeout" : 5
|
||||||
|
},
|
||||||
|
|
||||||
/// The configuration of the boblight server which enables the boblight remote interface
|
/// The configuration of the boblight server which enables the boblight remote interface
|
||||||
/// * enable : Enable or disable the boblight server (true/false)
|
/// * enable : Enable or disable the boblight server (true/false)
|
||||||
/// * port : Port at which the boblight server is started
|
/// * port : Port at which the boblight server is started
|
||||||
/// * priority : Priority of the boblight server (Default=201) HINT: lower value result in HIGHER priority!
|
/// * priority : Priority of the boblight server (Default=128) HINT: lower value result in HIGHER priority!
|
||||||
"boblightServer" :
|
"boblightServer" :
|
||||||
{
|
{
|
||||||
"enable" : false,
|
"enable" : false,
|
||||||
"port" : 19333,
|
"port" : 19333,
|
||||||
"priority" : 201
|
"priority" : 128
|
||||||
},
|
},
|
||||||
|
|
||||||
/// The configuration of the udp listener
|
/// The configuration of the udp listener
|
||||||
|
@ -57,7 +57,6 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"grabberV4L2" :
|
"grabberV4L2" :
|
||||||
[
|
|
||||||
{
|
{
|
||||||
"device" : "auto",
|
"device" : "auto",
|
||||||
"standard" : "NO_CHANGE",
|
"standard" : "NO_CHANGE",
|
||||||
@ -74,8 +73,7 @@
|
|||||||
"sDHOffsetMin" : 0.25,
|
"sDHOffsetMin" : 0.25,
|
||||||
"sDVOffsetMax" : 0.75,
|
"sDVOffsetMax" : 0.75,
|
||||||
"sDHOffsetMax" : 0.75
|
"sDHOffsetMax" : 0.75
|
||||||
}
|
},
|
||||||
],
|
|
||||||
|
|
||||||
"framegrabber" :
|
"framegrabber" :
|
||||||
{
|
{
|
||||||
@ -138,11 +136,18 @@
|
|||||||
"timeout" : 5
|
"timeout" : 5
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"protoServer" :
|
||||||
|
{
|
||||||
|
"enable" : true,
|
||||||
|
"port" : 19445,
|
||||||
|
"timeout" : 5
|
||||||
|
},
|
||||||
|
|
||||||
"boblightServer" :
|
"boblightServer" :
|
||||||
{
|
{
|
||||||
"enable" : false,
|
"enable" : false,
|
||||||
"port" : 19333,
|
"port" : 19333,
|
||||||
"priority" : 201
|
"priority" : 128
|
||||||
},
|
},
|
||||||
|
|
||||||
"udpListener" :
|
"udpListener" :
|
||||||
|
124
dependencies/CMakeLists.txt
vendored
124
dependencies/CMakeLists.txt
vendored
@ -9,6 +9,10 @@ if(ENABLE_WS281XPWM)
|
|||||||
external/rpi_ws281x/rpihw.c)
|
external/rpi_ws281x/rpihw.c)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# FLATBUFFER
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
set(USE_SYSTEM_FLATBUFFERS_LIBS ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS} CACHE BOOL "use flatbuffers library from system")
|
set(USE_SYSTEM_FLATBUFFERS_LIBS ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS} CACHE BOOL "use flatbuffers library from system")
|
||||||
|
|
||||||
if (USE_SYSTEM_FLATBUFFERS_LIBS)
|
if (USE_SYSTEM_FLATBUFFERS_LIBS)
|
||||||
@ -36,9 +40,17 @@ else ()
|
|||||||
set(FLATBUFFERS_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/flatbuffers/include")
|
set(FLATBUFFERS_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/flatbuffers/include")
|
||||||
set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIRS} PARENT_SCOPE)
|
set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIRS} PARENT_SCOPE)
|
||||||
|
|
||||||
|
IF (NOT CMAKE_CROSSCOMPILING)
|
||||||
# define the flatc executable at the parent scope
|
# define the flatc executable at the parent scope
|
||||||
get_property(FLATBUFFERS_FLATC_EXECUTABLE TARGET flatc PROPERTY LOCATION)
|
get_property(FLATBUFFERS_FLATC_EXECUTABLE TARGET flatc PROPERTY LOCATION)
|
||||||
|
else()
|
||||||
|
#Workaround, set flatc comiplier directory hard, as cmake definitions of flatc do not cater for crosscompile correctly.
|
||||||
|
#Includ of flatc_export.cmake detects that flatc target is defined aand returns before using the definitions written by export
|
||||||
|
set ( FLATBUFFERS_FLATC_EXECUTABLE "${CMAKE_BINARY_DIR}/../build-x86x64/bin/flatc")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(FLATBUFFERS_FLATC_EXECUTABLE ${FLATBUFFERS_FLATC_EXECUTABLE} PARENT_SCOPE)
|
set(FLATBUFFERS_FLATC_EXECUTABLE ${FLATBUFFERS_FLATC_EXECUTABLE} PARENT_SCOPE)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Using flatbuffers compiler: " ${FLATBUFFERS_FLATC_EXECUTABLE})
|
message(STATUS "Using flatbuffers compiler: " ${FLATBUFFERS_FLATC_EXECUTABLE})
|
||||||
@ -63,3 +75,115 @@ function(compile_flattbuffer_schema SRC_FBS OUTPUT_DIR)
|
|||||||
DEPENDS flatc)
|
DEPENDS flatc)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# PROTOBUFFER
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
set(USE_SYSTEM_PROTO_LIBS ${DEFAULT_USE_SYSTEM_PROTO_LIBS} CACHE BOOL "use protobuf library from system")
|
||||||
|
|
||||||
|
if (USE_SYSTEM_PROTO_LIBS)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
if (ENABLE_AMLOGIC)
|
||||||
|
set(PROTOBUF_INCLUDE_DIRS "${Protobuf_INCLUDE_DIRS}" PARENT_SCOPE)
|
||||||
|
set(PROTOBUF_PROTOC_EXECUTABLE "${Protobuf_PROTOC_EXECUTABLE}" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
include_directories(${PROTOBUF_INCLUDE_DIRS})
|
||||||
|
else ()
|
||||||
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library")
|
||||||
|
add_subdirectory(external/protobuf)
|
||||||
|
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
# when crosscompiling import the protoc executable targets from a file generated by a native build
|
||||||
|
option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND")
|
||||||
|
include(${IMPORT_PROTOC})
|
||||||
|
else()
|
||||||
|
# export the protoc compiler so it can be used when cross compiling
|
||||||
|
export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# define the include for the protobuf library at the parent scope
|
||||||
|
set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src")
|
||||||
|
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
|
||||||
|
|
||||||
|
# define the protoc executable at the parent scope
|
||||||
|
get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION)
|
||||||
|
set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Using protobuf compiler: " ${PROTOBUF_PROTOC_EXECUTABLE})
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2009 Kitware, Inc.
|
||||||
|
# Copyright 2009-2011 Philip Lowman <philip@yhbt.com>
|
||||||
|
# Copyright 2008 Esben Mose Hansen, Ange Optimization ApS
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
||||||
|
if(NOT ARGN)
|
||||||
|
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||||
|
# Create an include path for each file specified
|
||||||
|
foreach(FIL ${ARGN})
|
||||||
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
|
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||||
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
|
if(${_contains_already} EQUAL -1)
|
||||||
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
||||||
|
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
|
||||||
|
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||||
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
|
if(${_contains_already} EQUAL -1)
|
||||||
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CROSSCOMPILING OR USE_SYSTEM_PROTO_LIBS)
|
||||||
|
set(PROTOC_DEPENDENCY ${PROTOBUF_PROTOC_EXECUTABLE})
|
||||||
|
else()
|
||||||
|
set(PROTOC_DEPENDENCY protoc_compiler)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${SRCS})
|
||||||
|
set(${HDRS})
|
||||||
|
foreach(FIL ${ARGN})
|
||||||
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
|
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
||||||
|
|
||||||
|
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
|
||||||
|
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
|
||||||
|
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
|
||||||
|
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
||||||
|
DEPENDS ${ABS_FIL} ${PROTOC_DEPENDENCY}
|
||||||
|
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
||||||
|
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
||||||
|
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
12
dependencies/build/tinkerforge/ip_connection.c
vendored
12
dependencies/build/tinkerforge/ip_connection.c
vendored
@ -1055,7 +1055,7 @@ static void ipcon_dispatch_meta(IPConnectionPrivate *ipcon_p, Meta *meta) {
|
|||||||
mutex_unlock(&ipcon_p->socket_mutex);
|
mutex_unlock(&ipcon_p->socket_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: wait a moment here, otherwise the next connect
|
// NOTE: wait a moment here, otherwise the next connect
|
||||||
// attempt will succeed, even if there is no open server
|
// attempt will succeed, even if there is no open server
|
||||||
// socket. the first receive will then fail directly
|
// socket. the first receive will then fail directly
|
||||||
thread_sleep(100);
|
thread_sleep(100);
|
||||||
@ -1146,11 +1146,11 @@ static void ipcon_callback_loop(void *opaque) {
|
|||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (queue_get(&callback->queue, &kind, &data, &length) < 0) {
|
if (queue_get(&callback->queue, &kind, &data, &length) < 0) {
|
||||||
// FIXME: what to do here? try again? exit?
|
// NOTE: what to do here? try again? exit?
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: cannot lock callback mutex here because this can
|
// NOTE: cannot lock callback mutex here because this can
|
||||||
// deadlock due to an ordering problem with the socket mutex
|
// deadlock due to an ordering problem with the socket mutex
|
||||||
//mutex_lock(&callback->mutex);
|
//mutex_lock(&callback->mutex);
|
||||||
|
|
||||||
@ -1219,7 +1219,7 @@ static void ipcon_disconnect_probe_loop(void *opaque) {
|
|||||||
while (event_wait(&ipcon_p->disconnect_probe_event,
|
while (event_wait(&ipcon_p->disconnect_probe_event,
|
||||||
IPCON_DISCONNECT_PROBE_INTERVAL) < 0) {
|
IPCON_DISCONNECT_PROBE_INTERVAL) < 0) {
|
||||||
if (ipcon_p->disconnect_probe_flag) {
|
if (ipcon_p->disconnect_probe_flag) {
|
||||||
// FIXME: this might block
|
// TODO: this might block
|
||||||
if (socket_send(ipcon_p->socket, &disconnect_probe,
|
if (socket_send(ipcon_p->socket, &disconnect_probe,
|
||||||
disconnect_probe.length) < 0) {
|
disconnect_probe.length) < 0) {
|
||||||
ipcon_handle_disconnect_by_peer(ipcon_p, IPCON_DISCONNECT_REASON_ERROR,
|
ipcon_handle_disconnect_by_peer(ipcon_p, IPCON_DISCONNECT_REASON_ERROR,
|
||||||
@ -1509,7 +1509,7 @@ static void ipcon_disconnect_unlocked(IPConnectionPrivate *ipcon_p) {
|
|||||||
// thread to avoid timeout exceptions due to callback functions
|
// thread to avoid timeout exceptions due to callback functions
|
||||||
// trying to call getters
|
// trying to call getters
|
||||||
if (!thread_is_current(&ipcon_p->callback->thread)) {
|
if (!thread_is_current(&ipcon_p->callback->thread)) {
|
||||||
// FIXME: cannot lock callback mutex here because this can
|
// NOTE: cannot lock callback mutex here because this can
|
||||||
// deadlock due to an ordering problem with the socket mutex
|
// deadlock due to an ordering problem with the socket mutex
|
||||||
//mutex_lock(&ipcon->callback->mutex);
|
//mutex_lock(&ipcon->callback->mutex);
|
||||||
|
|
||||||
@ -1608,7 +1608,7 @@ void ipcon_create(IPConnection *ipcon) {
|
|||||||
void ipcon_destroy(IPConnection *ipcon) {
|
void ipcon_destroy(IPConnection *ipcon) {
|
||||||
IPConnectionPrivate *ipcon_p = ipcon->p;
|
IPConnectionPrivate *ipcon_p = ipcon->p;
|
||||||
|
|
||||||
ipcon_disconnect(ipcon); // FIXME: disable disconnected callback before?
|
ipcon_disconnect(ipcon); // NOTE: disable disconnected callback before?
|
||||||
|
|
||||||
mutex_destroy(&ipcon_p->sequence_number_mutex);
|
mutex_destroy(&ipcon_p->sequence_number_mutex);
|
||||||
|
|
||||||
|
1
dependencies/external/protobuf
vendored
Submodule
1
dependencies/external/protobuf
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit adce8a99fdab90f290d659b6b3bf2d09b721e24a
|
2
dependencies/external/rpi_ws281x
vendored
2
dependencies/external/rpi_ws281x
vendored
@ -1 +1 @@
|
|||||||
Subproject commit f580777219062568d2e43e998ecb0950deff9e99
|
Subproject commit 6c5ade93d1af78cd19e60ee5ecc34adfd111b186
|
@ -1,4 +1,4 @@
|
|||||||
import os, hyperion, time
|
import hyperion, time
|
||||||
|
|
||||||
# Get the parameters
|
# Get the parameters
|
||||||
imageFile = hyperion.args.get('image')
|
imageFile = hyperion.args.get('image')
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import hyperion, time, colorsys
|
import hyperion, time
|
||||||
|
|
||||||
# Get the parameters
|
# Get the parameters
|
||||||
speed = float(hyperion.args.get('speed', 1.0))
|
speed = float(hyperion.args.get('speed', 1.0))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import hyperion, time, colorsys
|
import hyperion, time
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
#get args
|
#get args
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import hyperion, time, colorsys, random
|
import hyperion, time
|
||||||
|
|
||||||
# get options from args
|
# get options from args
|
||||||
sleepTime = float(hyperion.args.get('speed', 1.5)) * 0.005
|
sleepTime = float(hyperion.args.get('speed', 1.5)) * 0.005
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import hyperion, time, math, random
|
import hyperion, time, random
|
||||||
|
|
||||||
# Convert x/y (0.0 - 1.0) point to proper int values based on Hyperion image width/height
|
# Convert x/y (0.0 - 1.0) point to proper int values based on Hyperion image width/height
|
||||||
# Or get a random value
|
# Or get a random value
|
||||||
|
@ -39,7 +39,7 @@ diag = int(diag*1.3)
|
|||||||
# calc positions
|
# calc positions
|
||||||
pos = 0
|
pos = 0
|
||||||
step = int(255/len(colors))
|
step = int(255/len(colors))
|
||||||
for entry in colors:
|
for _ in colors:
|
||||||
positions.append(pos)
|
positions.append(pos)
|
||||||
pos += step
|
pos += step
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import hyperion, time, colorsys
|
import hyperion, time
|
||||||
|
|
||||||
# Get the parameters
|
# Get the parameters
|
||||||
sleepTime = float(hyperion.args.get('sleepTime', 1000))/1000.0
|
sleepTime = float(hyperion.args.get('sleepTime', 1000))/1000.0
|
||||||
|
@ -46,7 +46,7 @@ public slots:
|
|||||||
void setImage(const Image<ColorRgb> & image);
|
void setImage(const Image<ColorRgb> & image);
|
||||||
|
|
||||||
/// process and push new log messages from logger (if enabled)
|
/// process and push new log messages from logger (if enabled)
|
||||||
void incommingLogMessage(Logger::T_LOG_MESSAGE);
|
void incommingLogMessage(const Logger::T_LOG_MESSAGE&);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
///
|
///
|
||||||
|
0
include/bonjour/bonjourrecord.h
Executable file → Normal file
0
include/bonjour/bonjourrecord.h
Executable file → Normal file
0
include/bonjour/bonjourserviceregister.h
Executable file → Normal file
0
include/bonjour/bonjourserviceregister.h
Executable file → Normal file
@ -45,7 +45,7 @@ public:
|
|||||||
/// @param[out] resultMsg The feedback message
|
/// @param[out] resultMsg The feedback message
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Delete an effect by name.
|
/// @brief Delete an effect by name.
|
||||||
@ -53,7 +53,7 @@ public:
|
|||||||
/// @param[out] resultMsg The message on error
|
/// @param[out] resultMsg The message on error
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool deleteEffect(const QString& effectName, QString& resultMsg);
|
bool deleteEffect(const QString& effectName, QString& resultMsg);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Get all init data of the running effects and stop them
|
/// @brief Get all init data of the running effects and stop them
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
/// @param[out] resultMsg The feedback message
|
/// @param[out] resultMsg The feedback message
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Delete an effect by name.
|
/// @brief Delete an effect by name.
|
||||||
@ -41,7 +41,7 @@ public:
|
|||||||
/// @param[out] resultMsg The message on error
|
/// @param[out] resultMsg The message on error
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool deleteEffect(const QString& effectName, QString& resultMsg);
|
bool deleteEffect(const QString& effectName, QString& resultMsg);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
///
|
///
|
||||||
|
9
include/grabber/AmlogicGrabber.h
Executable file → Normal file
9
include/grabber/AmlogicGrabber.h
Executable file → Normal file
@ -6,8 +6,6 @@
|
|||||||
#include <hyperion/Grabber.h>
|
#include <hyperion/Grabber.h>
|
||||||
#include <grabber/FramebufferFrameGrabber.h>
|
#include <grabber/FramebufferFrameGrabber.h>
|
||||||
|
|
||||||
class IonBuffer;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
class AmlogicGrabber : public Grabber
|
class AmlogicGrabber : public Grabber
|
||||||
@ -43,20 +41,17 @@ private:
|
|||||||
bool openDev(int &fd, const char* dev);
|
bool openDev(int &fd, const char* dev);
|
||||||
|
|
||||||
int grabFrame_amvideocap(Image<ColorRgb> & image);
|
int grabFrame_amvideocap(Image<ColorRgb> & image);
|
||||||
int grabFrame_ge2d(Image<ColorRgb> & image);
|
|
||||||
|
|
||||||
/** The snapshot/capture device of the amlogic video chip */
|
/** The snapshot/capture device of the amlogic video chip */
|
||||||
int _captureDev;
|
int _captureDev;
|
||||||
int _videoDev;
|
int _videoDev;
|
||||||
int _ge2dDev;
|
|
||||||
|
|
||||||
Image<ColorBgr> _image_bgr;
|
Image<ColorBgr> _image_bgr;
|
||||||
|
void* _image_ptr;
|
||||||
|
ssize_t _bytesToRead;
|
||||||
|
|
||||||
int _lastError;
|
int _lastError;
|
||||||
bool _videoPlaying;
|
bool _videoPlaying;
|
||||||
FramebufferFrameGrabber _fbGrabber;
|
FramebufferFrameGrabber _fbGrabber;
|
||||||
int _grabbingModeNotification;
|
int _grabbingModeNotification;
|
||||||
bool _ge2dAvailable;
|
|
||||||
void* _ge2dVideoBufferPtr;
|
|
||||||
IonBuffer* _ge2dIonBuffer;
|
|
||||||
};
|
};
|
||||||
|
@ -17,9 +17,8 @@ public:
|
|||||||
///
|
///
|
||||||
/// @param[in] grabWidth The width of the grabbed image [pixels]
|
/// @param[in] grabWidth The width of the grabbed image [pixels]
|
||||||
/// @param[in] grabHeight The height of the grabbed images [pixels]
|
/// @param[in] grabHeight The height of the grabbed images [pixels]
|
||||||
/// @param[in] updateRate_Hz The image grab rate [Hz]
|
|
||||||
///
|
///
|
||||||
AmlogicWrapper(const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz);
|
AmlogicWrapper(const unsigned grabWidth, const unsigned grabHeight);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Destructor of this dispmanx frame grabber. Releases any claimed resources.
|
/// Destructor of this dispmanx frame grabber. Releases any claimed resources.
|
||||||
|
@ -70,7 +70,7 @@ private:
|
|||||||
/// @brief Setup a new capture display, will free the previous one
|
/// @brief Setup a new capture display, will free the previous one
|
||||||
/// @return True on success, false if no display is found
|
/// @return True on success, false if no display is found
|
||||||
///
|
///
|
||||||
const bool setupDisplay();
|
bool setupDisplay();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Is called whenever we need new screen dimension calculations based on window geometry
|
/// @brief Is called whenever we need new screen dimension calculations based on window geometry
|
||||||
|
@ -13,6 +13,14 @@
|
|||||||
#include <utils/PixelFormat.h>
|
#include <utils/PixelFormat.h>
|
||||||
#include <hyperion/Grabber.h>
|
#include <hyperion/Grabber.h>
|
||||||
#include <grabber/VideoStandard.h>
|
#include <grabber/VideoStandard.h>
|
||||||
|
#include <utils/Components.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_JPEG
|
||||||
|
#include <QImage>
|
||||||
|
#include <QColor>
|
||||||
|
#include <jpeglib.h>
|
||||||
|
#include <csetjmp>
|
||||||
|
#endif
|
||||||
|
|
||||||
/// Capture class for V4L2 devices
|
/// Capture class for V4L2 devices
|
||||||
///
|
///
|
||||||
@ -29,8 +37,12 @@ public:
|
|||||||
);
|
);
|
||||||
virtual ~V4L2Grabber();
|
virtual ~V4L2Grabber();
|
||||||
|
|
||||||
QRectF getSignalDetectionOffset();
|
QRectF getSignalDetectionOffset()
|
||||||
bool getSignalDetectionEnabled();
|
{
|
||||||
|
return QRectF(_x_frac_min, _y_frac_min, _x_frac_max, _y_frac_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getSignalDetectionEnabled() { return _signalDetectionEnabled; }
|
||||||
|
|
||||||
int grabFrame(Image<ColorRgb> &);
|
int grabFrame(Image<ColorRgb> &);
|
||||||
|
|
||||||
@ -78,6 +90,8 @@ public slots:
|
|||||||
|
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
void componentStateChanged(const hyperion::Components component, bool enable);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void newFrame(const Image<ColorRgb> & image);
|
void newFrame(const Image<ColorRgb> & image);
|
||||||
void readError(const char* err);
|
void readError(const char* err);
|
||||||
@ -91,7 +105,7 @@ private:
|
|||||||
bool init();
|
bool init();
|
||||||
void uninit();
|
void uninit();
|
||||||
|
|
||||||
void open_device();
|
bool open_device();
|
||||||
|
|
||||||
void close_device();
|
void close_device();
|
||||||
|
|
||||||
@ -111,26 +125,56 @@ private:
|
|||||||
|
|
||||||
bool process_image(const void *p, int size);
|
bool process_image(const void *p, int size);
|
||||||
|
|
||||||
void process_image(const uint8_t *p);
|
void process_image(const uint8_t *p, int size);
|
||||||
|
|
||||||
int xioctl(int request, void *arg);
|
int xioctl(int request, void *arg);
|
||||||
|
|
||||||
void throw_exception(const QString &error);
|
void throw_exception(const QString & error)
|
||||||
|
{
|
||||||
|
Error(_log, "Throws error: %s", QSTRING_CSTR(error));
|
||||||
|
}
|
||||||
|
|
||||||
void throw_errno_exception(const QString &error);
|
void throw_errno_exception(const QString & error)
|
||||||
|
{
|
||||||
|
Error(_log, "Throws error nr: %s", QSTRING_CSTR(QString(error + " error code " + QString::number(errno) + ", " + strerror(errno))));
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum io_method {
|
enum io_method
|
||||||
|
{
|
||||||
IO_METHOD_READ,
|
IO_METHOD_READ,
|
||||||
IO_METHOD_MMAP,
|
IO_METHOD_MMAP,
|
||||||
IO_METHOD_USERPTR
|
IO_METHOD_USERPTR
|
||||||
};
|
};
|
||||||
|
|
||||||
struct buffer {
|
struct buffer
|
||||||
|
{
|
||||||
void *start;
|
void *start;
|
||||||
size_t length;
|
size_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_JPEG
|
||||||
|
struct errorManager
|
||||||
|
{
|
||||||
|
jpeg_error_mgr pub;
|
||||||
|
jmp_buf setjmp_buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void errorHandler(j_common_ptr cInfo)
|
||||||
|
{
|
||||||
|
errorManager* mgr = reinterpret_cast<errorManager*>(cInfo->err);
|
||||||
|
longjmp(mgr->setjmp_buffer, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void outputHandler(j_common_ptr cInfo)
|
||||||
|
{
|
||||||
|
// Suppress fprintf warnings.
|
||||||
|
}
|
||||||
|
|
||||||
|
jpeg_decompress_struct* _decompress;
|
||||||
|
errorManager* _error;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _deviceName;
|
QString _deviceName;
|
||||||
std::map<QString,QString> _v4lDevices;
|
std::map<QString,QString> _v4lDevices;
|
||||||
|
@ -24,6 +24,7 @@ public slots:
|
|||||||
void setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom);
|
void setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom);
|
||||||
void setSignalDetectionOffset(double verticalMin, double horizontalMin, double verticalMax, double horizontalMax);
|
void setSignalDetectionOffset(double verticalMin, double horizontalMin, double verticalMax, double horizontalMax);
|
||||||
void setSignalDetectionEnable(bool enable);
|
void setSignalDetectionEnable(bool enable);
|
||||||
|
void setDeviceVideoStandard(QString device, VideoStandard videoStandard);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void newFrame(const Image<ColorRgb> & image);
|
void newFrame(const Image<ColorRgb> & image);
|
||||||
|
0
include/grabber/X11Grabber.h
Executable file → Normal file
0
include/grabber/X11Grabber.h
Executable file → Normal file
@ -41,13 +41,13 @@ private slots:
|
|||||||
/// @brief forward system image
|
/// @brief forward system image
|
||||||
/// @param image The image
|
/// @param image The image
|
||||||
///
|
///
|
||||||
void handleSystemImage(const Image<ColorRgb>& image);
|
void handleSystemImage(const QString& name, const Image<ColorRgb>& image);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief forward v4l image
|
/// @brief forward v4l image
|
||||||
/// @param image The image
|
/// @param image The image
|
||||||
///
|
///
|
||||||
void handleV4lImage(const Image<ColorRgb> & image);
|
void handleV4lImage(const QString& name, const Image<ColorRgb> & image);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Is called from _v4lInactiveTimer to set source after specific time to inactive
|
/// @brief Is called from _v4lInactiveTimer to set source after specific time to inactive
|
||||||
@ -66,10 +66,12 @@ private:
|
|||||||
/// Reflect state of System capture and prio
|
/// Reflect state of System capture and prio
|
||||||
bool _systemCaptEnabled;
|
bool _systemCaptEnabled;
|
||||||
quint8 _systemCaptPrio;
|
quint8 _systemCaptPrio;
|
||||||
|
QString _systemCaptName;
|
||||||
QTimer* _systemInactiveTimer;
|
QTimer* _systemInactiveTimer;
|
||||||
|
|
||||||
/// Reflect state of v4l capture and prio
|
/// Reflect state of v4l capture and prio
|
||||||
bool _v4lCaptEnabled;
|
bool _v4lCaptEnabled;
|
||||||
quint8 _v4lCaptPrio;
|
quint8 _v4lCaptPrio;
|
||||||
|
QString _v4lCaptName;
|
||||||
QTimer* _v4lInactiveTimer;
|
QTimer* _v4lInactiveTimer;
|
||||||
};
|
};
|
||||||
|
@ -84,12 +84,12 @@ public:
|
|||||||
///
|
///
|
||||||
/// @brief get current resulting height of image (after crop)
|
/// @brief get current resulting height of image (after crop)
|
||||||
///
|
///
|
||||||
virtual const int getImageWidth() { return _width; };
|
virtual int getImageWidth() { return _width; };
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief get current resulting width of image (after crop)
|
/// @brief get current resulting width of image (after crop)
|
||||||
///
|
///
|
||||||
virtual const int getImageHeight() { return _height; };
|
virtual int getImageHeight() { return _height; };
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Prevent the real capture implementation from capturing if disabled
|
/// @brief Prevent the real capture implementation from capturing if disabled
|
||||||
|
@ -24,7 +24,7 @@ class GrabberWrapper : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
GrabberWrapper(QString grabberName, Grabber * ggrabber, unsigned width, unsigned height, const unsigned updateRate_Hz);
|
GrabberWrapper(QString grabberName, Grabber * ggrabber, unsigned width, unsigned height, const unsigned updateRate_Hz = 0);
|
||||||
|
|
||||||
virtual ~GrabberWrapper();
|
virtual ~GrabberWrapper();
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ public:
|
|||||||
int ret = grabber.grabFrame(_image);
|
int ret = grabber.grabFrame(_image);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
emit systemImage(_image);
|
emit systemImage(_grabberName, _image);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -92,7 +92,7 @@ signals:
|
|||||||
///
|
///
|
||||||
/// @brief Emit the final processed image
|
/// @brief Emit the final processed image
|
||||||
///
|
///
|
||||||
void systemImage(const Image<ColorRgb>& image);
|
void systemImage(const QString& name, const Image<ColorRgb>& image);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ public:
|
|||||||
/// @param[out] resultMsg The feedback message
|
/// @param[out] resultMsg The feedback message
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
bool saveEffect(const QJsonObject& obj, QString& resultMsg);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Delete an effect by name.
|
/// @brief Delete an effect by name.
|
||||||
@ -176,7 +176,7 @@ public:
|
|||||||
/// @param[out] resultMsg The message on error
|
/// @param[out] resultMsg The message on error
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool deleteEffect(const QString& effectName, QString& resultMsg);
|
bool deleteEffect(const QString& effectName, QString& resultMsg);
|
||||||
|
|
||||||
/// Get the list of available effects
|
/// Get the list of available effects
|
||||||
/// @return The list of available effects
|
/// @return The list of available effects
|
||||||
@ -282,7 +282,7 @@ public slots:
|
|||||||
/// @param clearEffect Should be true when NOT called from an effect
|
/// @param clearEffect Should be true when NOT called from an effect
|
||||||
/// @return True on success, false when priority is not found
|
/// @return True on success, false when priority is not found
|
||||||
///
|
///
|
||||||
const bool setInput(const int priority, const std::vector<ColorRgb>& ledColors, const int timeout_ms = -1, const bool& clearEffect = true);
|
bool setInput(const int priority, const std::vector<ColorRgb>& ledColors, const int timeout_ms = -1, const bool& clearEffect = true);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Update the current image of a priority (prev registered with registerInput())
|
/// @brief Update the current image of a priority (prev registered with registerInput())
|
||||||
@ -293,14 +293,14 @@ public slots:
|
|||||||
/// @param clearEffect Should be true when NOT called from an effect
|
/// @param clearEffect Should be true when NOT called from an effect
|
||||||
/// @return True on success, false when priority is not found
|
/// @return True on success, false when priority is not found
|
||||||
///
|
///
|
||||||
const bool setInputImage(const int priority, const Image<ColorRgb>& image, int64_t timeout_ms = -1, const bool& clearEffect = true);
|
bool setInputImage(const int priority, const Image<ColorRgb>& image, int64_t timeout_ms = -1, const bool& clearEffect = true);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Set the given priority to inactive
|
/// @brief Set the given priority to inactive
|
||||||
/// @param priority The priority
|
/// @param priority The priority
|
||||||
/// @return True on success false if not found
|
/// @return True on success false if not found
|
||||||
///
|
///
|
||||||
const bool setInputInactive(const quint8& priority);
|
bool setInputInactive(const quint8& priority);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Writes a single color to all the leds for the given time and priority
|
/// Writes a single color to all the leds for the given time and priority
|
||||||
@ -336,7 +336,7 @@ public slots:
|
|||||||
/// @param[in] priority The priority channel
|
/// @param[in] priority The priority channel
|
||||||
/// @return True on success else false (not found)
|
/// @return True on success else false (not found)
|
||||||
///
|
///
|
||||||
const bool clear(int priority);
|
bool clear(int priority);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Clears all priority channels. This will switch the leds off until a new priority is written.
|
/// @brief Clears all priority channels. This will switch the leds off until a new priority is written.
|
||||||
@ -411,7 +411,7 @@ signals:
|
|||||||
void forwardJsonMessage(QJsonObject);
|
void forwardJsonMessage(QJsonObject);
|
||||||
|
|
||||||
/// Signal which is emitted, when a new proto image should be forwarded
|
/// Signal which is emitted, when a new proto image should be forwarded
|
||||||
void forwardProtoMessage(Image<ColorRgb>);
|
void forwardProtoMessage(const QString, const Image<ColorRgb>);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Is emitted from clients who request a videoMode change
|
/// @brief Is emitted from clients who request a videoMode change
|
||||||
|
@ -57,8 +57,8 @@ namespace hyperion
|
|||||||
///
|
///
|
||||||
unsigned height() const;
|
unsigned height() const;
|
||||||
|
|
||||||
const unsigned horizontalBorder() const { return _horizontalBorder; };
|
unsigned horizontalBorder() { return _horizontalBorder; };
|
||||||
const unsigned verticalBorder() const { return _verticalBorder; };
|
unsigned verticalBorder() { return _verticalBorder; };
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Determines the mean-color for each led using the mapping the image given
|
/// Determines the mean-color for each led using the mapping the image given
|
||||||
@ -96,9 +96,9 @@ namespace hyperion
|
|||||||
|
|
||||||
// Iterate each led and compute the mean
|
// Iterate each led and compute the mean
|
||||||
auto led = ledColors.begin();
|
auto led = ledColors.begin();
|
||||||
for (auto ledColors = _colorsMap.begin(); ledColors != _colorsMap.end(); ++ledColors, ++led)
|
for (auto colors = _colorsMap.begin(); colors != _colorsMap.end(); ++colors, ++led)
|
||||||
{
|
{
|
||||||
const ColorRgb color = calcMeanColor(image, *ledColors);
|
const ColorRgb color = calcMeanColor(image, *colors);
|
||||||
*led = color;
|
*led = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ private slots:
|
|||||||
/// @brief Forward image to all proto slaves
|
/// @brief Forward image to all proto slaves
|
||||||
/// @param image The PROTO image to send
|
/// @param image The PROTO image to send
|
||||||
///
|
///
|
||||||
void forwardProtoMessage(const Image<ColorRgb> &image);
|
void forwardProtoMessage(const QString& name, const Image<ColorRgb> &image);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Forward message to a single json slave
|
/// @brief Forward message to a single json slave
|
||||||
|
@ -151,7 +151,7 @@ public:
|
|||||||
/// @param timeout_ms The new timeout (defaults to -1 endless)
|
/// @param timeout_ms The new timeout (defaults to -1 endless)
|
||||||
/// @return True on success, false when priority is not found
|
/// @return True on success, false when priority is not found
|
||||||
///
|
///
|
||||||
const bool setInput(const int priority, const std::vector<ColorRgb>& ledColors, int64_t timeout_ms = -1);
|
bool setInput(const int priority, const std::vector<ColorRgb>& ledColors, int64_t timeout_ms = -1);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Update the current image of a priority (prev registered with registerInput())
|
/// @brief Update the current image of a priority (prev registered with registerInput())
|
||||||
@ -160,14 +160,14 @@ public:
|
|||||||
/// @param timeout_ms The new timeout (defaults to -1 endless)
|
/// @param timeout_ms The new timeout (defaults to -1 endless)
|
||||||
/// @return True on success, false when priority is not found
|
/// @return True on success, false when priority is not found
|
||||||
///
|
///
|
||||||
const bool setInputImage(const int priority, const Image<ColorRgb>& image, int64_t timeout_ms = -1);
|
bool setInputImage(const int priority, const Image<ColorRgb>& image, int64_t timeout_ms = -1);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Set the given priority to inactive
|
/// @brief Set the given priority to inactive
|
||||||
/// @param priority The priority
|
/// @param priority The priority
|
||||||
/// @return True on success false if not found
|
/// @return True on success false if not found
|
||||||
///
|
///
|
||||||
const bool setInputInactive(const quint8& priority);
|
bool setInputInactive(const quint8& priority);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Clears the specified priority channel and update _currentPriority on success
|
/// Clears the specified priority channel and update _currentPriority on success
|
||||||
@ -175,7 +175,7 @@ public:
|
|||||||
/// @param[in] priority The priority of the channel to clear
|
/// @param[in] priority The priority of the channel to clear
|
||||||
/// @return True if priority has been cleared else false (not found)
|
/// @return True if priority has been cleared else false (not found)
|
||||||
///
|
///
|
||||||
const bool clearInput(const uint8_t priority);
|
bool clearInput(const uint8_t priority);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Clears all priority channels
|
/// Clears all priority channels
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
/// @param correct If true will correct json against schema before save
|
/// @param correct If true will correct json against schema before save
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
const bool saveSettings(QJsonObject config, const bool& correct = false);
|
bool saveSettings(QJsonObject config, const bool& correct = false);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief get a single setting json from config
|
/// @brief get a single setting json from config
|
||||||
|
@ -58,7 +58,7 @@ public:
|
|||||||
|
|
||||||
void setEnable(bool enable);
|
void setEnable(bool enable);
|
||||||
bool enabled() { return _enabled; };
|
bool enabled() { return _enabled; };
|
||||||
const int getLatchTime() { return _latchTime_ms; };
|
int getLatchTime() { return _latchTime_ms; };
|
||||||
|
|
||||||
inline bool componentState() { return enabled(); };
|
inline bool componentState() { return enabled(); };
|
||||||
|
|
||||||
|
67
include/protoserver/ProtoServer.h
Normal file
67
include/protoserver/ProtoServer.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// util
|
||||||
|
#include <utils/Logger.h>
|
||||||
|
#include <utils/settings.h>
|
||||||
|
|
||||||
|
// qt
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
class QTcpServer;
|
||||||
|
class ProtoClientConnection;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// @brief This class creates a TCP server which accepts connections wich can then send
|
||||||
|
/// in Protocol Buffer encoded commands. This interface to Hyperion is used by various
|
||||||
|
/// third-party applications
|
||||||
|
///
|
||||||
|
class ProtoServer : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
ProtoServer(const QJsonDocument& config, QObject* parent = nullptr);
|
||||||
|
~ProtoServer();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
///
|
||||||
|
/// @brief Handle settings update
|
||||||
|
/// @param type The type from enum
|
||||||
|
/// @param config The configuration
|
||||||
|
///
|
||||||
|
void handleSettingsUpdate(const settings::type& type, const QJsonDocument& config);
|
||||||
|
|
||||||
|
void initServer();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
///
|
||||||
|
/// @brief Is called whenever a new socket wants to connect
|
||||||
|
///
|
||||||
|
void newConnection();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// @brief is called whenever a client disconnected
|
||||||
|
///
|
||||||
|
void clientDisconnected();
|
||||||
|
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
/// @brief Start the server with current _port
|
||||||
|
///
|
||||||
|
void startServer();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// @brief Stop server
|
||||||
|
///
|
||||||
|
void stopServer();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
QTcpServer* _server;
|
||||||
|
Logger* _log;
|
||||||
|
int _timeout;
|
||||||
|
quint16 _port;
|
||||||
|
const QJsonDocument _config;
|
||||||
|
|
||||||
|
QVector<ProtoClientConnection*> _openConnections;
|
||||||
|
};
|
@ -28,7 +28,7 @@ public:
|
|||||||
/// @brief Start SSDP
|
/// @brief Start SSDP
|
||||||
/// @return false if already running or bind failure
|
/// @return false if already running or bind failure
|
||||||
///
|
///
|
||||||
const bool start();
|
bool start();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Stop SSDP
|
/// @brief Stop SSDP
|
||||||
|
@ -84,7 +84,6 @@ private slots:
|
|||||||
void processTheDatagram(const QByteArray * datagram, const QHostAddress * sender);
|
void processTheDatagram(const QByteArray * datagram, const QHostAddress * sender);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/// The UDP server object
|
/// The UDP server object
|
||||||
QUdpSocket * _server;
|
QUdpSocket * _server;
|
||||||
|
|
||||||
|
@ -22,7 +22,8 @@ enum Components
|
|||||||
COMP_IMAGE,
|
COMP_IMAGE,
|
||||||
COMP_EFFECT,
|
COMP_EFFECT,
|
||||||
COMP_LEDDEVICE,
|
COMP_LEDDEVICE,
|
||||||
COMP_FLATBUFSERVER
|
COMP_FLATBUFSERVER,
|
||||||
|
COMP_PROTOSERVER
|
||||||
};
|
};
|
||||||
|
|
||||||
inline const char* componentToString(Components c)
|
inline const char* componentToString(Components c)
|
||||||
@ -42,6 +43,7 @@ inline const char* componentToString(Components c)
|
|||||||
case COMP_IMAGE: return "Image";
|
case COMP_IMAGE: return "Image";
|
||||||
case COMP_LEDDEVICE: return "LED device";
|
case COMP_LEDDEVICE: return "LED device";
|
||||||
case COMP_FLATBUFSERVER: return "Image Receiver";
|
case COMP_FLATBUFSERVER: return "Image Receiver";
|
||||||
|
case COMP_PROTOSERVER: return "Proto Server";
|
||||||
default: return "";
|
default: return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,6 +65,7 @@ inline const char* componentToIdString(Components c)
|
|||||||
case COMP_IMAGE: return "IMAGE";
|
case COMP_IMAGE: return "IMAGE";
|
||||||
case COMP_LEDDEVICE: return "LEDDEVICE";
|
case COMP_LEDDEVICE: return "LEDDEVICE";
|
||||||
case COMP_FLATBUFSERVER: return "FLATBUFSERVER";
|
case COMP_FLATBUFSERVER: return "FLATBUFSERVER";
|
||||||
|
case COMP_PROTOSERVER: return "PROTOSERVER";
|
||||||
default: return "";
|
default: return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,6 +86,7 @@ inline Components stringToComponent(QString component)
|
|||||||
if (component == "IMAGE") return COMP_IMAGE;
|
if (component == "IMAGE") return COMP_IMAGE;
|
||||||
if (component == "LEDDEVICE") return COMP_LEDDEVICE;
|
if (component == "LEDDEVICE") return COMP_LEDDEVICE;
|
||||||
if (component == "FLATBUFSERVER") return COMP_FLATBUFSERVER;
|
if (component == "FLATBUFSERVER") return COMP_FLATBUFSERVER;
|
||||||
|
if (component == "PROTOSERVER") return COMP_PROTOSERVER;
|
||||||
return COMP_INVALID;
|
return COMP_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,13 +29,15 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
///
|
///
|
||||||
/// @brief PIPE SystemCapture images from GrabberWrapper to Hyperion class
|
/// @brief PIPE SystemCapture images from GrabberWrapper to Hyperion class
|
||||||
|
/// @param name The name of the platform capture that is currently active
|
||||||
/// @param image The prepared image
|
/// @param image The prepared image
|
||||||
///
|
///
|
||||||
void setSystemImage(const Image<ColorRgb>& image);
|
void setSystemImage(const QString& name, const Image<ColorRgb>& image);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief PIPE v4lCapture images from v4lCapture over HyperionDaemon to Hyperion class
|
/// @brief PIPE v4lCapture images from v4lCapture over HyperionDaemon to Hyperion class
|
||||||
|
/// @param name The name of the v4l capture (path) that is currently active
|
||||||
/// @param image The prepared image
|
/// @param image The prepared image
|
||||||
///
|
///
|
||||||
void setV4lImage(const Image<ColorRgb> & image);
|
void setV4lImage(const QString& name, const Image<ColorRgb> & image);
|
||||||
};
|
};
|
||||||
|
@ -68,7 +68,7 @@ public:
|
|||||||
_pixels(new Pixel_T[other._width * other._height + 1]),
|
_pixels(new Pixel_T[other._width * other._height + 1]),
|
||||||
_endOfPixels(_pixels + other._width * other._height)
|
_endOfPixels(_pixels + other._width * other._height)
|
||||||
{
|
{
|
||||||
memcpy(_pixels, other._pixels, other._width * other._height * sizeof(Pixel_T));
|
memcpy(_pixels, other._pixels, (long) other._width * other._height * sizeof(Pixel_T));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define assignment operator in terms of the copy constructor
|
// Define assignment operator in terms of the copy constructor
|
||||||
@ -242,7 +242,7 @@ public:
|
|||||||
//
|
//
|
||||||
ssize_t size() const
|
ssize_t size() const
|
||||||
{
|
{
|
||||||
return _width * _height * sizeof(Pixel_T);
|
return (ssize_t) _width * _height * sizeof(Pixel_T);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -86,7 +86,7 @@ public:
|
|||||||
QVector<Logger::T_LOG_MESSAGE>* getLogMessageBuffer() { return &_logMessageBuffer; };
|
QVector<Logger::T_LOG_MESSAGE>* getLogMessageBuffer() { return &_logMessageBuffer; };
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handleNewLogMessage(Logger::T_LOG_MESSAGE);
|
void handleNewLogMessage(const Logger::T_LOG_MESSAGE&);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void newLogMessage(Logger::T_LOG_MESSAGE);
|
void newLogMessage(Logger::T_LOG_MESSAGE);
|
||||||
|
@ -11,7 +11,7 @@ namespace NetUtils {
|
|||||||
/// @param log The logger of the caller to print
|
/// @param log The logger of the caller to print
|
||||||
/// @return True on success else false
|
/// @return True on success else false
|
||||||
///
|
///
|
||||||
static const bool portAvailable(quint16& port, Logger* log)
|
static bool portAvailable(quint16& port, Logger* log)
|
||||||
{
|
{
|
||||||
const quint16 prevPort = port;
|
const quint16 prevPort = port;
|
||||||
QTcpServer server;
|
QTcpServer server;
|
||||||
|
@ -12,6 +12,9 @@ enum PixelFormat {
|
|||||||
PIXELFORMAT_BGR24,
|
PIXELFORMAT_BGR24,
|
||||||
PIXELFORMAT_RGB32,
|
PIXELFORMAT_RGB32,
|
||||||
PIXELFORMAT_BGR32,
|
PIXELFORMAT_BGR32,
|
||||||
|
#ifdef HAVE_JPEG
|
||||||
|
PIXELFORMAT_MJPEG,
|
||||||
|
#endif
|
||||||
PIXELFORMAT_NO_CHANGE
|
PIXELFORMAT_NO_CHANGE
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -44,6 +47,12 @@ inline PixelFormat parsePixelFormat(QString pixelFormat)
|
|||||||
{
|
{
|
||||||
return PIXELFORMAT_BGR32;
|
return PIXELFORMAT_BGR32;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_JPEG
|
||||||
|
else if (pixelFormat == "mjpeg")
|
||||||
|
{
|
||||||
|
return PIXELFORMAT_MJPEG;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// return the default NO_CHANGE
|
// return the default NO_CHANGE
|
||||||
return PIXELFORMAT_NO_CHANGE;
|
return PIXELFORMAT_NO_CHANGE;
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
// qt includes
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QUrl>
|
|
||||||
#include <QUrlQuery>
|
|
||||||
#include <QTimer>
|
|
||||||
|
|
||||||
// hyperion includes
|
|
||||||
#include <utils/Logger.h>
|
|
||||||
#include <hyperion/Hyperion.h>
|
|
||||||
|
|
||||||
class Stats : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
Stats();
|
|
||||||
static Stats* getInstance() { return instance; };
|
|
||||||
static Stats* instance;
|
|
||||||
|
|
||||||
void handleDataUpdate(const QJsonObject& config);
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class HyperionDaemon;
|
|
||||||
Stats(const QJsonObject& config);
|
|
||||||
~Stats();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Logger* _log;
|
|
||||||
Hyperion* _hyperion;
|
|
||||||
QString _hash = "";
|
|
||||||
QByteArray _ba;
|
|
||||||
QNetworkRequest _req;
|
|
||||||
QNetworkAccessManager _mgr;
|
|
||||||
|
|
||||||
bool trigger(bool set = false);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void initialExec();
|
|
||||||
void sendHTTP();
|
|
||||||
void sendHTTPp();
|
|
||||||
void resolveReply(QNetworkReply *reply);
|
|
||||||
|
|
||||||
};
|
|
@ -29,6 +29,7 @@ enum type {
|
|||||||
INSTCAPTURE,
|
INSTCAPTURE,
|
||||||
NETWORK,
|
NETWORK,
|
||||||
FLATBUFSERVER,
|
FLATBUFSERVER,
|
||||||
|
PROTOSERVER,
|
||||||
INVALID
|
INVALID
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -62,6 +63,7 @@ inline QString typeToString(const type& type)
|
|||||||
case INSTCAPTURE: return "instCapture";
|
case INSTCAPTURE: return "instCapture";
|
||||||
case NETWORK: return "network";
|
case NETWORK: return "network";
|
||||||
case FLATBUFSERVER: return "flatbufServer";
|
case FLATBUFSERVER: return "flatbufServer";
|
||||||
|
case PROTOSERVER: return "protoServer";
|
||||||
default: return "invalid";
|
default: return "invalid";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,6 +96,7 @@ inline type stringToType(const QString& type)
|
|||||||
else if (type == "instCapture") return INSTCAPTURE;
|
else if (type == "instCapture") return INSTCAPTURE;
|
||||||
else if (type == "network") return NETWORK;
|
else if (type == "network") return NETWORK;
|
||||||
else if (type == "flatbufServer") return FLATBUFSERVER;
|
else if (type == "flatbufServer") return FLATBUFSERVER;
|
||||||
|
else if (type == "protoServer") return PROTOSERVER;
|
||||||
else return INVALID;
|
else return INVALID;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
quint16 getPort() { return _port; };
|
quint16 getPort() { return _port; };
|
||||||
|
|
||||||
/// check if server has been inited
|
/// check if server has been inited
|
||||||
const bool isInited() { return _inited; };
|
bool isInited() { return _inited; };
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief Set a new description, if empty the description is NotFound for clients
|
/// @brief Set a new description, if empty the description is NotFound for clients
|
||||||
|
@ -8,6 +8,7 @@ add_subdirectory(commandline)
|
|||||||
add_subdirectory(blackborder)
|
add_subdirectory(blackborder)
|
||||||
add_subdirectory(jsonserver)
|
add_subdirectory(jsonserver)
|
||||||
add_subdirectory(flatbufserver)
|
add_subdirectory(flatbufserver)
|
||||||
|
add_subdirectory(protoserver)
|
||||||
add_subdirectory(bonjour)
|
add_subdirectory(bonjour)
|
||||||
add_subdirectory(ssdp)
|
add_subdirectory(ssdp)
|
||||||
add_subdirectory(boblightserver)
|
add_subdirectory(boblightserver)
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include <hyperion/GrabberWrapper.h>
|
#include <hyperion/GrabberWrapper.h>
|
||||||
#include <utils/Process.h>
|
#include <utils/Process.h>
|
||||||
#include <utils/JsonUtils.h>
|
#include <utils/JsonUtils.h>
|
||||||
#include <utils/Stats.h>
|
|
||||||
|
|
||||||
// bonjour wrapper
|
// bonjour wrapper
|
||||||
#include <bonjour/bonjourbrowserwrapper.h>
|
#include <bonjour/bonjourbrowserwrapper.h>
|
||||||
@ -1052,7 +1051,7 @@ void JsonAPI::setImage(const Image<ColorRgb> & image)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonAPI::incommingLogMessage(Logger::T_LOG_MESSAGE msg)
|
void JsonAPI::incommingLogMessage(const Logger::T_LOG_MESSAGE &msg)
|
||||||
{
|
{
|
||||||
QJsonObject result, message;
|
QJsonObject result, message;
|
||||||
QJsonArray messageArray;
|
QJsonArray messageArray;
|
||||||
|
@ -192,6 +192,9 @@ void BoblightClientConnection::handleMessage(const QString & message)
|
|||||||
{
|
{
|
||||||
// clear the current channel
|
// clear the current channel
|
||||||
_hyperion->clear(_priority);
|
_hyperion->clear(_priority);
|
||||||
|
|
||||||
|
// register new priority
|
||||||
|
_hyperion->registerInput(prio, hyperion::COMP_BOBLIGHTSERVER, QString("Boblight@%1").arg(_socket->peerAddress().toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
_priority = prio;
|
_priority = prio;
|
||||||
|
2
libsrc/bonjour/bonjourserviceregister.cpp
Executable file → Normal file
2
libsrc/bonjour/bonjourserviceregister.cpp
Executable file → Normal file
@ -34,7 +34,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
#include <HyperionConfig.h>
|
#include <HyperionConfig.h>
|
||||||
#include <utils/Stats.h>
|
#include <hyperion/Hyperion.h>
|
||||||
|
|
||||||
BonjourServiceRegister::BonjourServiceRegister(QObject *parent)
|
BonjourServiceRegister::BonjourServiceRegister(QObject *parent)
|
||||||
: QObject(parent), dnssref(0), bonjourSocket(0)
|
: QObject(parent), dnssref(0), bonjourSocket(0)
|
||||||
|
@ -48,12 +48,12 @@ EffectEngine::~EffectEngine()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool EffectEngine::saveEffect(const QJsonObject& obj, QString& resultMsg)
|
bool EffectEngine::saveEffect(const QJsonObject& obj, QString& resultMsg)
|
||||||
{
|
{
|
||||||
return _effectFileHandler->saveEffect(obj, resultMsg);
|
return _effectFileHandler->saveEffect(obj, resultMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool EffectEngine::deleteEffect(const QString& effectName, QString& resultMsg)
|
bool EffectEngine::deleteEffect(const QString& effectName, QString& resultMsg)
|
||||||
{
|
{
|
||||||
return _effectFileHandler->deleteEffect(effectName, resultMsg);
|
return _effectFileHandler->deleteEffect(effectName, resultMsg);
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ void EffectFileHandler::handleSettingsUpdate(const settings::type& type, const Q
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool EffectFileHandler::deleteEffect(const QString& effectName, QString& resultMsg)
|
bool EffectFileHandler::deleteEffect(const QString& effectName, QString& resultMsg)
|
||||||
{
|
{
|
||||||
std::list<EffectDefinition> effectsDefinition = getEffects();
|
std::list<EffectDefinition> effectsDefinition = getEffects();
|
||||||
std::list<EffectDefinition>::iterator it = std::find_if(effectsDefinition.begin(), effectsDefinition.end(), find_effect(effectName));
|
std::list<EffectDefinition>::iterator it = std::find_if(effectsDefinition.begin(), effectsDefinition.end(), find_effect(effectName));
|
||||||
@ -95,7 +95,7 @@ const bool EffectFileHandler::deleteEffect(const QString& effectName, QString& r
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool EffectFileHandler::saveEffect(const QJsonObject& message, QString& resultMsg)
|
bool EffectFileHandler::saveEffect(const QJsonObject& message, QString& resultMsg)
|
||||||
{
|
{
|
||||||
if (!message["args"].toObject().isEmpty())
|
if (!message["args"].toObject().isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -138,9 +138,9 @@ void FlatBufferClient::handleImageCommand(const hyperionnet::Image *image)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image<ColorRgb> image(width, height);
|
Image<ColorRgb> imageDest(width, height);
|
||||||
memmove(image.memptr(), imageData->data(), imageData->size());
|
memmove(imageDest.memptr(), imageData->data(), imageData->size());
|
||||||
_hyperion->setInputImage(_priority, image, duration);
|
_hyperion->setInputImage(_priority, imageDest, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send reply
|
// send reply
|
||||||
|
@ -62,8 +62,6 @@ void FlatBufferServer::newConnection()
|
|||||||
FlatBufferClient *client = new FlatBufferClient(socket, _timeout, this);
|
FlatBufferClient *client = new FlatBufferClient(socket, _timeout, this);
|
||||||
// internal
|
// internal
|
||||||
connect(client, &FlatBufferClient::clientDisconnected, this, &FlatBufferServer::clientDisconnected);
|
connect(client, &FlatBufferClient::clientDisconnected, this, &FlatBufferServer::clientDisconnected);
|
||||||
// forward data
|
|
||||||
//connect(clientThread, &FlatBufferClient::);
|
|
||||||
_openConnections.append(client);
|
_openConnections.append(client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
199
libsrc/grabber/amlogic/AmlogicGrabber.cpp
Executable file → Normal file
199
libsrc/grabber/amlogic/AmlogicGrabber.cpp
Executable file → Normal file
@ -19,28 +19,26 @@
|
|||||||
|
|
||||||
#define VIDEO_DEVICE "/dev/amvideo"
|
#define VIDEO_DEVICE "/dev/amvideo"
|
||||||
#define CAPTURE_DEVICE "/dev/amvideocap0"
|
#define CAPTURE_DEVICE "/dev/amvideocap0"
|
||||||
#define GE2D_DEVICE "/dev/ge2d"
|
|
||||||
|
|
||||||
AmlogicGrabber::AmlogicGrabber(const unsigned width, const unsigned height)
|
AmlogicGrabber::AmlogicGrabber(const unsigned width, const unsigned height)
|
||||||
: Grabber("AMLOGICGRABBER", qMax(160u, width), qMax(160u, height)) // Minimum required width or height is 160
|
: Grabber("AMLOGICGRABBER", qMax(160u, width), qMax(160u, height)) // Minimum required width or height is 160
|
||||||
, _captureDev(-1)
|
, _captureDev(-1)
|
||||||
, _videoDev(-1)
|
, _videoDev(-1)
|
||||||
, _ge2dDev(-1)
|
|
||||||
, _lastError(0)
|
, _lastError(0)
|
||||||
, _fbGrabber("/dev/fb0",width,height)
|
, _fbGrabber("/dev/fb0",width,height)
|
||||||
, _grabbingModeNotification(0)
|
, _grabbingModeNotification(0)
|
||||||
, _ge2dAvailable(true)
|
|
||||||
, _ge2dVideoBufferPtr(nullptr)
|
|
||||||
, _ge2dIonBuffer(nullptr)
|
|
||||||
{
|
{
|
||||||
Debug(_log, "constructed(%d x %d)",_width,_height);
|
Debug(_log, "constructed(%d x %d), grabber device: %s",_width,_height, CAPTURE_DEVICE);
|
||||||
|
|
||||||
|
_image_bgr.resize(_width, _height);
|
||||||
|
_bytesToRead = _image_bgr.size();
|
||||||
|
_image_ptr = _image_bgr.memptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
AmlogicGrabber::~AmlogicGrabber()
|
AmlogicGrabber::~AmlogicGrabber()
|
||||||
{
|
{
|
||||||
closeDev(_captureDev);
|
closeDev(_captureDev);
|
||||||
closeDev(_videoDev);
|
closeDev(_videoDev);
|
||||||
closeDev(_ge2dDev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AmlogicGrabber::openDev(int &fd, const char* dev)
|
bool AmlogicGrabber::openDev(int &fd, const char* dev)
|
||||||
@ -89,7 +87,6 @@ int AmlogicGrabber::grabFrame(Image<ColorRgb> & image)
|
|||||||
{
|
{
|
||||||
if (!_enabled) return 0;
|
if (!_enabled) return 0;
|
||||||
|
|
||||||
image.resize(_width,_height);
|
|
||||||
// Make sure video is playing, else there is nothing to grab
|
// Make sure video is playing, else there is nothing to grab
|
||||||
if (isVideoPlaying())
|
if (isVideoPlaying())
|
||||||
{
|
{
|
||||||
@ -100,28 +97,8 @@ int AmlogicGrabber::grabFrame(Image<ColorRgb> & image)
|
|||||||
_lastError = 0;
|
_lastError = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_ge2dAvailable)
|
if (grabFrame_amvideocap(image) < 0)
|
||||||
{
|
closeDev(_captureDev);
|
||||||
try
|
|
||||||
{
|
|
||||||
_ge2dAvailable = (QFile::exists(GE2D_DEVICE) && grabFrame_ge2d(image) == 0);
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
_ge2dAvailable = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ge2dAvailable)
|
|
||||||
{
|
|
||||||
closeDev(_videoDev);
|
|
||||||
closeDev(_ge2dDev);
|
|
||||||
Warning(_log, "GE2D capture interface not available! try Amvideocap instead");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (QFile::exists(CAPTURE_DEVICE))
|
|
||||||
{
|
|
||||||
grabFrame_amvideocap(image);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -132,9 +109,9 @@ int AmlogicGrabber::grabFrame(Image<ColorRgb> & image)
|
|||||||
_lastError = 0;
|
_lastError = 0;
|
||||||
}
|
}
|
||||||
_fbGrabber.grabFrame(image);
|
_fbGrabber.grabFrame(image);
|
||||||
}
|
|
||||||
|
|
||||||
closeDev(_videoDev);
|
usleep(50 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -143,6 +120,8 @@ int AmlogicGrabber::grabFrame(Image<ColorRgb> & image)
|
|||||||
int AmlogicGrabber::grabFrame_amvideocap(Image<ColorRgb> & image)
|
int AmlogicGrabber::grabFrame_amvideocap(Image<ColorRgb> & image)
|
||||||
{
|
{
|
||||||
// If the device is not open, attempt to open it
|
// If the device is not open, attempt to open it
|
||||||
|
if (_captureDev < 0)
|
||||||
|
{
|
||||||
if (! openDev(_captureDev, CAPTURE_DEVICE))
|
if (! openDev(_captureDev, CAPTURE_DEVICE))
|
||||||
{
|
{
|
||||||
ErrorIf( _lastError != 1, _log,"Failed to open the AMLOGIC device (%d - %s):", errno, strerror(errno));
|
ErrorIf( _lastError != 1, _log,"Failed to open the AMLOGIC device (%d - %s):", errno, strerror(errno));
|
||||||
@ -152,174 +131,36 @@ int AmlogicGrabber::grabFrame_amvideocap(Image<ColorRgb> & image)
|
|||||||
|
|
||||||
long r1 = ioctl(_captureDev, AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH, _width);
|
long r1 = ioctl(_captureDev, AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH, _width);
|
||||||
long r2 = ioctl(_captureDev, AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT, _height);
|
long r2 = ioctl(_captureDev, AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT, _height);
|
||||||
|
long r3 = ioctl(_captureDev, AMVIDEOCAP_IOW_SET_WANTFRAME_AT_FLAGS, CAP_FLAG_AT_END);
|
||||||
|
|
||||||
if (r1<0 || r2<0 || _height==0 || _width==0)
|
if (r1<0 || r2<0 || r3<0 || _height==0 || _width==0)
|
||||||
{
|
{
|
||||||
ErrorIf(_lastError != 2,_log,"Failed to configure capture size (%d - %s)", errno, strerror(errno));
|
ErrorIf(_lastError != 2,_log,"Failed to configure capture device (%d - %s)", errno, strerror(errno));
|
||||||
closeDev(_captureDev);
|
|
||||||
_lastError = 2;
|
_lastError = 2;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Read the snapshot into the memory
|
// Read the snapshot into the memory
|
||||||
image.resize(_width, _height);
|
ssize_t bytesRead = pread(_captureDev, _image_ptr, _bytesToRead, 0);
|
||||||
_image_bgr.resize(_width, _height);
|
|
||||||
const ssize_t bytesToRead = _image_bgr.size();
|
|
||||||
void * image_ptr = _image_bgr.memptr();
|
|
||||||
const ssize_t bytesRead = pread(_captureDev, image_ptr, bytesToRead, 0);
|
|
||||||
|
|
||||||
if (bytesRead < 0)
|
if (bytesRead < 0)
|
||||||
{
|
{
|
||||||
ErrorIf(_lastError != 3, _log,"Read of device failed: %d - %s", errno, strerror(errno));
|
ErrorIf(_lastError != 3, _log,"Read of device failed: %d - %s", errno, strerror(errno));
|
||||||
closeDev(_captureDev);
|
|
||||||
_lastError = 3;
|
_lastError = 3;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (bytesToRead != bytesRead)
|
else if (_bytesToRead != bytesRead)
|
||||||
{
|
{
|
||||||
// Read of snapshot failed
|
// Read of snapshot failed
|
||||||
ErrorIf(_lastError != 4, _log,"Capture failed to grab entire image [bytesToRead(%d) != bytesRead(%d)]", bytesToRead, bytesRead);
|
ErrorIf(_lastError != 4, _log,"Capture failed to grab entire image [bytesToRead(%d) != bytesRead(%d)]", _bytesToRead, bytesRead);
|
||||||
closeDev(_captureDev);
|
_lastError = 4;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
closeDev(_captureDev);
|
|
||||||
_useImageResampler = true;
|
_useImageResampler = true;
|
||||||
_imageResampler.processImage((const uint8_t*)image_ptr, _width, _height, _width*3, PIXELFORMAT_BGR24, image);
|
_imageResampler.processImage((const uint8_t*)_image_ptr, _width, _height, (_width << 1) + _width, PIXELFORMAT_BGR24, image);
|
||||||
_lastError = 0;
|
_lastError = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int AmlogicGrabber::grabFrame_ge2d(Image<ColorRgb> & image)
|
|
||||||
{
|
|
||||||
if ( ! openDev(_ge2dDev, GE2D_DEVICE) || ! openDev(_videoDev, VIDEO_DEVICE))
|
|
||||||
{
|
|
||||||
Error(_log, "cannot open devices");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ion
|
|
||||||
if (_ge2dIonBuffer == nullptr)
|
|
||||||
{
|
|
||||||
_ge2dIonBuffer = new IonBuffer(_width * _height * 3); // BGR
|
|
||||||
_ge2dVideoBufferPtr = _ge2dIonBuffer->Map();
|
|
||||||
memset(_ge2dVideoBufferPtr, 0, _ge2dIonBuffer->BufferSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
int canvas_index;
|
|
||||||
if (ioctl(_videoDev, AMVIDEO_EXT_GET_CURRENT_VIDEOFRAME, &canvas_index) < 0)
|
|
||||||
{
|
|
||||||
Error(_log, "AMSTREAM_EXT_GET_CURRENT_VIDEOFRAME failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t canvas0addr;
|
|
||||||
|
|
||||||
if (ioctl(_videoDev, AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_CANVAS0ADDR, &canvas0addr) < 0)
|
|
||||||
{
|
|
||||||
Error(_log, "AMSTREAM_EXT_CURRENT_VIDEOFRAME_GET_CANVAS0ADDR failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t ge2dformat;
|
|
||||||
if (ioctl(_videoDev, AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_GE2D_FORMAT, &ge2dformat) <0)
|
|
||||||
{
|
|
||||||
Error(_log, "AMSTREAM_EXT_CURRENT_VIDEOFRAME_GET_GE2D_FORMAT failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t size;
|
|
||||||
if (ioctl(_videoDev, AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_SIZE, &size) < 0)
|
|
||||||
{
|
|
||||||
Error(_log, "AMSTREAM_EXT_CURRENT_VIDEOFRAME_GET_SIZE failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned cropLeft = _cropLeft;
|
|
||||||
unsigned cropRight = _cropRight;
|
|
||||||
unsigned cropTop = _cropTop;
|
|
||||||
unsigned cropBottom = _cropBottom;
|
|
||||||
int videoWidth = (size >> 32) - cropLeft - cropRight;
|
|
||||||
int videoHeight = (size & 0xffffff) - cropTop - cropBottom;
|
|
||||||
|
|
||||||
// calculate final image dimensions and adjust top/left cropping in 3D modes
|
|
||||||
switch (_videoMode)
|
|
||||||
{
|
|
||||||
case VIDEO_3DSBS:
|
|
||||||
videoWidth /= 2;
|
|
||||||
cropLeft /= 2;
|
|
||||||
break;
|
|
||||||
case VIDEO_3DTAB:
|
|
||||||
videoHeight /= 2;
|
|
||||||
cropTop /= 2;
|
|
||||||
break;
|
|
||||||
case VIDEO_2D:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct config_para_ex_s configex = { 0 };
|
|
||||||
configex.src_para.mem_type = CANVAS_TYPE_INVALID;
|
|
||||||
configex.src_para.canvas_index = canvas0addr;
|
|
||||||
configex.src_para.left = cropLeft;
|
|
||||||
configex.src_para.top = cropTop;
|
|
||||||
configex.src_para.width = videoWidth;
|
|
||||||
configex.src_para.height = videoHeight / 2;
|
|
||||||
configex.src_para.format = ge2dformat;
|
|
||||||
|
|
||||||
configex.dst_para.mem_type = CANVAS_ALLOC;
|
|
||||||
configex.dst_para.format = GE2D_FORMAT_S24_RGB;
|
|
||||||
configex.dst_para.left = 0;
|
|
||||||
configex.dst_para.top = 0;
|
|
||||||
configex.dst_para.width = _width;
|
|
||||||
configex.dst_para.height = _height;
|
|
||||||
|
|
||||||
configex.dst_planes[0].addr = (long unsigned int)_ge2dIonBuffer->PhysicalAddress();
|
|
||||||
configex.dst_planes[0].w = configex.dst_para.width;
|
|
||||||
configex.dst_planes[0].h = configex.dst_para.height;
|
|
||||||
|
|
||||||
if (ioctl(_ge2dDev, GE2D_CONFIG_EX, &configex) < 0)
|
|
||||||
{
|
|
||||||
Error(_log, "video GE2D_CONFIG_EX failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ge2d_para_s blitRect = { 0 };
|
|
||||||
blitRect.src1_rect.x = 0;
|
|
||||||
blitRect.src1_rect.y = 0;
|
|
||||||
blitRect.src1_rect.w = configex.src_para.width;
|
|
||||||
blitRect.src1_rect.h = configex.src_para.height;
|
|
||||||
|
|
||||||
blitRect.dst_rect.x = 0;
|
|
||||||
blitRect.dst_rect.y = 0;
|
|
||||||
blitRect.dst_rect.w = configex.dst_para.width ;
|
|
||||||
blitRect.dst_rect.h = configex.dst_para.height;
|
|
||||||
|
|
||||||
// Blit to videoBuffer
|
|
||||||
if (ioctl(_ge2dDev, GE2D_STRETCHBLIT_NOALPHA, &blitRect) < 0)
|
|
||||||
{
|
|
||||||
Error(_log,"GE2D_STRETCHBLIT_NOALPHA failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return video frame
|
|
||||||
if (ioctl(_videoDev, AMVIDEO_EXT_PUT_CURRENT_VIDEOFRAME) < 0)
|
|
||||||
{
|
|
||||||
Error(_log, "AMSTREAM_EXT_PUT_CURRENT_VIDEOFRAME failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
_ge2dIonBuffer->Sync();
|
|
||||||
|
|
||||||
// Read the snapshot into the memory
|
|
||||||
_useImageResampler = false;
|
|
||||||
_imageResampler.processImage((const uint8_t*)_ge2dVideoBufferPtr, _width, _height, _width*3, PIXELFORMAT_BGR24, image);
|
|
||||||
|
|
||||||
closeDev(_videoDev);
|
|
||||||
closeDev(_ge2dDev);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <grabber/AmlogicWrapper.h>
|
#include <grabber/AmlogicWrapper.h>
|
||||||
|
|
||||||
AmlogicWrapper::AmlogicWrapper(const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz)
|
AmlogicWrapper::AmlogicWrapper(const unsigned grabWidth, const unsigned grabHeight)
|
||||||
: GrabberWrapper("AmLogic", &_grabber, grabWidth, grabHeight, updateRate_Hz)
|
: GrabberWrapper("AmLogic", &_grabber, grabWidth, grabHeight)
|
||||||
, _grabber(grabWidth, grabHeight)
|
, _grabber(grabWidth, grabHeight)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -11,168 +11,10 @@
|
|||||||
#define CAP_FLAG_AT_TIME_WINDOW 1
|
#define CAP_FLAG_AT_TIME_WINDOW 1
|
||||||
#define CAP_FLAG_AT_END 2
|
#define CAP_FLAG_AT_END 2
|
||||||
|
|
||||||
/*
|
|
||||||
format see linux/ge2d/ge2d.h
|
|
||||||
like:
|
|
||||||
GE2D_FORMAT_S24_RGB
|
|
||||||
*/
|
|
||||||
#define GE2D_ENDIAN_SHIFT 24
|
|
||||||
#define GE2D_LITTLE_ENDIAN (1 << GE2D_ENDIAN_SHIFT)
|
|
||||||
#define GE2D_COLOR_MAP_SHIFT 20
|
|
||||||
#define GE2D_COLOR_MAP_BGR888 (5 << GE2D_COLOR_MAP_SHIFT)
|
|
||||||
#define GE2D_COLOR_MAP_RGB888 (0 << GE2D_COLOR_MAP_SHIFT)
|
|
||||||
#define GE2D_FMT_S24_RGB (GE2D_LITTLE_ENDIAN|0x00200) /* 10_00_0_00_0_00 */
|
|
||||||
#define GE2D_FORMAT_S24_BGR (GE2D_FMT_S24_RGB | GE2D_COLOR_MAP_BGR888)
|
|
||||||
#define GE2D_FORMAT_S24_RGB (GE2D_FMT_S24_RGB | GE2D_COLOR_MAP_RGB888)
|
|
||||||
|
|
||||||
// #define AMVIDEOCAP_IOW_SET_WANTFRAME_FORMAT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x01, int)
|
// #define AMVIDEOCAP_IOW_SET_WANTFRAME_FORMAT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x01, int)
|
||||||
#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
|
#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
|
||||||
#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
|
#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
|
||||||
|
#define AMVIDEOCAP_IOW_SET_WANTFRAME_AT_FLAGS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x06, int)
|
||||||
|
|
||||||
#define _A_M 'S'
|
#define _A_M 'S'
|
||||||
#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR((_A_M), 0x48, int)
|
#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR((_A_M), 0x48, int)
|
||||||
|
|
||||||
#define AMVIDEO_MAGIC 'X'
|
|
||||||
|
|
||||||
#define AMVIDEO_EXT_GET_CURRENT_VIDEOFRAME _IOR((AMVIDEO_MAGIC), 0x01, int)
|
|
||||||
#define AMVIDEO_EXT_PUT_CURRENT_VIDEOFRAME _IO((AMVIDEO_MAGIC), 0x02)
|
|
||||||
|
|
||||||
#define AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_GE2D_FORMAT _IOR((AMVIDEO_MAGIC), 0x03, uint32_t)
|
|
||||||
#define AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_SIZE _IOR((AMVIDEO_MAGIC), 0x04, uint64_t)
|
|
||||||
#define AMVIDEO_EXT_CURRENT_VIDEOFRAME_GET_CANVAS0ADDR _IOR((AMVIDEO_MAGIC), 0x05, uint32_t)
|
|
||||||
|
|
||||||
// GE2D commands
|
|
||||||
#define GE2D_STRETCHBLIT_NOALPHA 0x4702
|
|
||||||
#define GE2D_CONFIG_EX 0x46fa
|
|
||||||
|
|
||||||
|
|
||||||
// data structures
|
|
||||||
struct rectangle_s {
|
|
||||||
int x; /* X coordinate of its top-left point */
|
|
||||||
int y; /* Y coordinate of its top-left point */
|
|
||||||
int w; /* width of it */
|
|
||||||
int h; /* height of it */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ge2d_para_s {
|
|
||||||
unsigned int color;
|
|
||||||
struct rectangle_s src1_rect;
|
|
||||||
struct rectangle_s src2_rect;
|
|
||||||
struct rectangle_s dst_rect;
|
|
||||||
int op;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
enum ge2d_src_dst_e {
|
|
||||||
OSD0_OSD0 = 0,
|
|
||||||
OSD0_OSD1,
|
|
||||||
OSD1_OSD1,
|
|
||||||
OSD1_OSD0,
|
|
||||||
ALLOC_OSD0,
|
|
||||||
ALLOC_OSD1,
|
|
||||||
ALLOC_ALLOC,
|
|
||||||
TYPE_INVALID,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ge2d_src_canvas_type_e {
|
|
||||||
CANVAS_OSD0 = 0,
|
|
||||||
CANVAS_OSD1,
|
|
||||||
CANVAS_ALLOC,
|
|
||||||
CANVAS_TYPE_INVALID,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct src_dst_para_s {
|
|
||||||
int xres;
|
|
||||||
int yres;
|
|
||||||
int canvas_index;
|
|
||||||
int bpp;
|
|
||||||
int ge2d_color_index;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ge2d_op_type_e {
|
|
||||||
GE2D_OP_DEFAULT = 0,
|
|
||||||
GE2D_OP_FILLRECT,
|
|
||||||
GE2D_OP_BLIT,
|
|
||||||
GE2D_OP_STRETCHBLIT,
|
|
||||||
GE2D_OP_BLEND,
|
|
||||||
GE2D_OP_MAXNUM
|
|
||||||
};
|
|
||||||
|
|
||||||
struct config_planes_s {
|
|
||||||
unsigned long addr;
|
|
||||||
unsigned int w;
|
|
||||||
unsigned int h;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct src_key_ctrl_s {
|
|
||||||
int key_enable;
|
|
||||||
int key_color;
|
|
||||||
int key_mask;
|
|
||||||
int key_mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct config_para_s {
|
|
||||||
int src_dst_type;
|
|
||||||
int alu_const_color;
|
|
||||||
unsigned int src_format;
|
|
||||||
unsigned int dst_format; /* add for src&dst all in user space. */
|
|
||||||
|
|
||||||
struct config_planes_s src_planes[4];
|
|
||||||
struct config_planes_s dst_planes[4];
|
|
||||||
struct src_key_ctrl_s src_key;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct src_dst_para_ex_s {
|
|
||||||
int canvas_index;
|
|
||||||
int top;
|
|
||||||
int left;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int format;
|
|
||||||
int mem_type;
|
|
||||||
int color;
|
|
||||||
unsigned char x_rev;
|
|
||||||
unsigned char y_rev;
|
|
||||||
unsigned char fill_color_en;
|
|
||||||
unsigned char fill_mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct config_para_ex_s {
|
|
||||||
struct src_dst_para_ex_s src_para;
|
|
||||||
struct src_dst_para_ex_s src2_para;
|
|
||||||
struct src_dst_para_ex_s dst_para;
|
|
||||||
|
|
||||||
/* key mask */
|
|
||||||
struct src_key_ctrl_s src_key;
|
|
||||||
struct src_key_ctrl_s src2_key;
|
|
||||||
|
|
||||||
int alu_const_color;
|
|
||||||
unsigned src1_gb_alpha;
|
|
||||||
unsigned op_mode;
|
|
||||||
unsigned char bitmask_en;
|
|
||||||
unsigned char bytemask_only;
|
|
||||||
unsigned int bitmask;
|
|
||||||
unsigned char dst_xy_swap;
|
|
||||||
|
|
||||||
/* scaler and phase releated */
|
|
||||||
unsigned hf_init_phase;
|
|
||||||
int hf_rpt_num;
|
|
||||||
unsigned hsc_start_phase_step;
|
|
||||||
int hsc_phase_slope;
|
|
||||||
unsigned vf_init_phase;
|
|
||||||
int vf_rpt_num;
|
|
||||||
unsigned vsc_start_phase_step;
|
|
||||||
int vsc_phase_slope;
|
|
||||||
unsigned char src1_vsc_phase0_always_en;
|
|
||||||
unsigned char src1_hsc_phase0_always_en;
|
|
||||||
/* 1bit, 0: using minus, 1: using repeat data */
|
|
||||||
unsigned char src1_hsc_rpt_ctrl;
|
|
||||||
/* 1bit, 0: using minus 1: using repeat data */
|
|
||||||
unsigned char src1_vsc_rpt_ctrl;
|
|
||||||
|
|
||||||
/* canvas info */
|
|
||||||
struct config_planes_s src_planes[4];
|
|
||||||
struct config_planes_s src2_planes[4];
|
|
||||||
struct config_planes_s dst_planes[4];
|
|
||||||
};
|
|
||||||
|
4
libsrc/grabber/framebuffer/FramebufferFrameGrabber.cpp
Executable file → Normal file
4
libsrc/grabber/framebuffer/FramebufferFrameGrabber.cpp
Executable file → Normal file
@ -46,7 +46,11 @@ int FramebufferFrameGrabber::grabFrame(Image<ColorRgb> & image)
|
|||||||
{
|
{
|
||||||
case 16: pixelFormat = PIXELFORMAT_BGR16; break;
|
case 16: pixelFormat = PIXELFORMAT_BGR16; break;
|
||||||
case 24: pixelFormat = PIXELFORMAT_BGR24; break;
|
case 24: pixelFormat = PIXELFORMAT_BGR24; break;
|
||||||
|
#ifdef ENABLE_AMLOGIC
|
||||||
|
case 32: pixelFormat = PIXELFORMAT_RGB32; break;
|
||||||
|
#else
|
||||||
case 32: pixelFormat = PIXELFORMAT_BGR32; break;
|
case 32: pixelFormat = PIXELFORMAT_BGR32; break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
Error(_log, "Unknown pixel format: %d bits per pixel", vinfo.bits_per_pixel);
|
Error(_log, "Unknown pixel format: %d bits per pixel", vinfo.bits_per_pixel);
|
||||||
close(_fbfd);
|
close(_fbfd);
|
||||||
|
0
libsrc/grabber/osx/OsxFrameGrabber.cpp
Executable file → Normal file
0
libsrc/grabber/osx/OsxFrameGrabber.cpp
Executable file → Normal file
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user