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