Merge pull request #4 from hyperion-project/master

merge
This commit is contained in:
b1rdhous3 2019-06-20 12:02:55 +02:00 committed by GitHub
commit e4bc5d0990
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
160 changed files with 3722 additions and 2372 deletions

48
.azure.yml Normal file
View 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
View 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
View 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
View 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
View File

@ -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

View File

@ -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
matrix:
include:
- os: linux
dist: trusty
env:
- DOCKER_TAG=ubuntu1604
- DOCKER_NAME="Ubuntu 16.04"
- os: linux
dist: trusty
env:
- DOCKER_TAG=cross-qemu-rpistretch
- DOCKER_NAME="Raspberry Pi"
- os: osx
osx_image: xcode8.3
env:
- HOMEBREW_CACHE=$HOME/brew-cache
before_install: before_install:
- ./.travis/travis_install.sh - ./.ci/ci_install.sh
jobs:
include:
- <<: *linux
name: "AMD64 (x64)"
env:
- DOCKER_TAG=amd64
- DOCKER_NAME="Debian Stretch (AMD64)"
- <<: *linux
name: "i386 (x86)"
env:
- DOCKER_TAG=i386
- DOCKER_NAME="Debian Stretch (i386)"
# ////////////////////////////////////////////////////////////////
# 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
name: "macOS 10.12 (Xcode 8.3.3)"
env:
- HOMEBREW_CACHE=$HOME/brew-cache
script: script:
- ./.travis/travis_build.sh - ./.ci/ci_build.sh
after_success: after_success:
- ./.travis/travis_deploy.sh - ./.ci/ci_deploy.sh

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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):

View File

@ -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++;

View File

@ -15,7 +15,8 @@
</div> </div>
<script> <script>
performTranslation('trans_update'); // performTranslation('trans_update');
performTranslation();
for (key in parsedUpdateJSON) for (key in parsedUpdateJSON)
{ {

View File

@ -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",

View File

@ -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",

View File

@ -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");

View File

@ -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({
// url: 'https://hyperion-project.org/wp-json/wp/v2/posts?_embed',
// dataType: 'json',
// type: 'GET',
// timeout: 2000
// })
// .done( function( data, textStatus, jqXHR ) {
// if(jqXHR.status == 200)
// createNews(data);
// else
// $('#dash_news').html(h);
// })
// .fail( function( jqXHR, textStatus ) {
// $('#dash_news').html(h);
// });
// }
newsCont(title,excerpt,link); // getNews();
}
}
function getNews()
{
var h = '<span style="color:red;font-weight:bold">'+$.i18n('dashboard_newsbox_noconn')+'</span>';
$.ajax({
url: 'https://hyperion-project.org/wp-json/wp/v2/posts?_embed',
dataType: 'json',
type: 'GET',
timeout: 2000
})
.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();
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();

View File

@ -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();
}); });

View File

@ -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();
}); });

View File

@ -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();

View File

@ -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"]);

View File

@ -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){

View File

@ -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();
}); });

View File

@ -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 = "";

View File

@ -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");

View File

@ -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();
}); });

View File

@ -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();

View File

@ -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");
} }

View File

@ -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();
}); });

View File

@ -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() {

View File

@ -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 != "")

View File

@ -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
View 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
View 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"

View File

@ -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
View 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()

View File

@ -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)

View File

@ -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)

View File

@ -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")

View File

@ -114,26 +114,24 @@
/// * 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", "sizeDecimation" : 8,
"sizeDecimation" : 8, "priority" : 240,
"priority" : 240, "cropLeft" : 0,
"cropLeft" : 0, "cropRight" : 0,
"cropRight" : 0, "cropTop" : 0,
"cropTop" : 0, "cropBottom" : 0,
"cropBottom" : 0, "redSignalThreshold" : 5,
"redSignalThreshold" : 5, "greenSignalThreshold" : 5,
"greenSignalThreshold" : 5, "blueSignalThreshold" : 5,
"blueSignalThreshold" : 5, "signalDetection" : false,
"signalDetection" : false, "sDVOffsetMin" : 0.25,
"sDVOffsetMin" : 0.25, "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

View File

@ -57,25 +57,23 @@
}, },
"grabberV4L2" : "grabberV4L2" :
[ {
{ "device" : "auto",
"device" : "auto", "standard" : "NO_CHANGE",
"standard" : "NO_CHANGE", "sizeDecimation" : 8,
"sizeDecimation" : 8, "cropLeft" : 0,
"cropLeft" : 0, "cropRight" : 0,
"cropRight" : 0, "cropTop" : 0,
"cropTop" : 0, "cropBottom" : 0,
"cropBottom" : 0, "redSignalThreshold" : 5,
"redSignalThreshold" : 5, "greenSignalThreshold" : 5,
"greenSignalThreshold" : 5, "blueSignalThreshold" : 5,
"blueSignalThreshold" : 5, "signalDetection" : false,
"signalDetection" : false, "sDVOffsetMin" : 0.25,
"sDVOffsetMin" : 0.25, "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" :

View File

@ -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)
# define the flatc executable at the parent scope IF (NOT CMAKE_CROSSCOMPILING)
get_property(FLATBUFFERS_FLATC_EXECUTABLE TARGET flatc PROPERTY LOCATION) # define the flatc executable at the parent scope
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()

View File

@ -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

@ -0,0 +1 @@
Subproject commit adce8a99fdab90f290d659b6b3bf2d09b721e24a

@ -1 +1 @@
Subproject commit f580777219062568d2e43e998ecb0950deff9e99 Subproject commit 6c5ade93d1af78cd19e60ee5ecc34adfd111b186

View File

@ -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')

View File

@ -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))

View File

@ -1,4 +1,4 @@
import hyperion, time, colorsys import hyperion, time
from random import randint from random import randint
#get args #get args

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
View File

0
include/bonjour/bonjourserviceregister.h Executable file → Normal file
View File

View 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

View File

@ -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:
/// ///

11
include/grabber/AmlogicGrabber.h Executable file → Normal file
View 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;
}; };

View File

@ -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.

View File

@ -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

View File

@ -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;
@ -156,7 +200,7 @@ private:
double _x_frac_max; double _x_frac_max;
double _y_frac_max; double _y_frac_max;
QSocketNotifier * _streamNotifier; QSocketNotifier *_streamNotifier;
bool _initialized; bool _initialized;
bool _deviceAutoDiscoverEnabled; bool _deviceAutoDiscoverEnabled;

View File

@ -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
View File

View 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;
}; };

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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;
} }
} }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(); };

View 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;
};

View File

@ -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

View File

@ -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;

View File

@ -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)
@ -41,7 +42,8 @@ inline const char* componentToString(Components c)
case COMP_EFFECT: return "Effect"; case COMP_EFFECT: return "Effect";
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;
} }

View File

@ -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);
}; };

View File

@ -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:

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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);
};

View File

@ -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";
} }
} }
@ -73,7 +75,7 @@ inline QString typeToString(const type& type)
/// ///
inline type stringToType(const QString& type) inline type stringToType(const QString& type)
{ {
if (type == "backgroundEffect") return BGEFFECT; if (type == "backgroundEffect") return BGEFFECT;
else if (type == "foregroundEffect") return FGEFFECT; else if (type == "foregroundEffect") return FGEFFECT;
else if (type == "blackborderdetector") return BLACKBORDER; else if (type == "blackborderdetector") return BLACKBORDER;
else if (type == "boblightServer") return BOBLSERVER; else if (type == "boblightServer") return BOBLSERVER;
@ -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 return INVALID; else if (type == "protoServer") return PROTOSERVER;
else return INVALID;
} }
}; };

View File

@ -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

View File

@ -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)

View File

@ -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;

View File

@ -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
View 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)

View File

@ -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);
} }

View File

@ -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())
{ {

View File

@ -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

View File

@ -31,7 +31,7 @@ public:
/// @param timeout The timeout when a client is automatically disconnected and the priority unregistered /// @param timeout The timeout when a client is automatically disconnected and the priority unregistered
/// @param parent The parent /// @param parent The parent
/// ///
explicit FlatBufferClient(QTcpSocket* socket, const int &timeout, QObject *parent = nullptr); explicit FlatBufferClient(QTcpSocket* socket, const int &timeout, QObject *parent = nullptr);
signals: signals:
/// ///
@ -59,12 +59,12 @@ private slots:
/// ///
/// @brief Is called whenever the socket got new data to read /// @brief Is called whenever the socket got new data to read
/// ///
void readyRead(); void readyRead();
/// ///
/// @brief Is called when the socket closed the connection, also requests thread exit /// @brief Is called when the socket closed the connection, also requests thread exit
/// ///
void disconnected(); void disconnected();
private: private:
/// ///

View File

@ -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);
} }
} }

219
libsrc/grabber/amlogic/AmlogicGrabber.cpp Executable file → Normal file
View 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,183 +120,47 @@ 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 (! openDev(_captureDev, CAPTURE_DEVICE)) if (_captureDev < 0)
{ {
ErrorIf( _lastError != 1, _log,"Failed to open the AMLOGIC device (%d - %s):", errno, strerror(errno)); if (! openDev(_captureDev, CAPTURE_DEVICE))
_lastError = 1; {
return -1; ErrorIf( _lastError != 1, _log,"Failed to open the AMLOGIC device (%d - %s):", errno, strerror(errno));
} _lastError = 1;
return -1;
}
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;
}

View File

@ -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)
{} {}

View File

@ -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
View 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);

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