From 0b8de8b12d8576340c8a28dcbd9c55c3581c8059 Mon Sep 17 00:00:00 2001 From: jc Date: Sun, 1 May 2016 16:03:19 +0200 Subject: [PATCH] dispmanx_vnc --- .../addons/addon-depends/libconfig/package.mk | 38 ++++++++++++ .../patches/libconfig-0001_fix-include.patch | 12 ++++ .../addon-depends/libvncserver/package.mk | 47 +++++++++++++++ .../addons/service/dispmanx_vnc/changelog.txt | 5 ++ .../addons/service/dispmanx_vnc/icon/icon.png | Bin 0 -> 25734 bytes .../addons/service/dispmanx_vnc/package.mk | 51 ++++++++++++++++ .../dispmanx_vnc-0001_fix-cross-compile.patch | 20 +++++++ .../source/bin/dispmanx_vncserver-service | 55 ++++++++++++++++++ .../service/dispmanx_vnc/source/default.py | 36 ++++++++++++ .../resources/language/English/strings.po | 46 +++++++++++++++ .../source/resources/settings.xml | 14 +++++ .../dispmanx_vnc/source/settings-default.xml | 11 ++++ .../service.system.dispmanx_vnc.service | 13 +++++ 13 files changed, 348 insertions(+) create mode 100644 packages/addons/addon-depends/libconfig/package.mk create mode 100644 packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch create mode 100644 packages/addons/addon-depends/libvncserver/package.mk create mode 100644 packages/addons/service/dispmanx_vnc/changelog.txt create mode 100644 packages/addons/service/dispmanx_vnc/icon/icon.png create mode 100644 packages/addons/service/dispmanx_vnc/package.mk create mode 100644 packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch create mode 100755 packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service create mode 100644 packages/addons/service/dispmanx_vnc/source/default.py create mode 100644 packages/addons/service/dispmanx_vnc/source/resources/language/English/strings.po create mode 100644 packages/addons/service/dispmanx_vnc/source/resources/settings.xml create mode 100644 packages/addons/service/dispmanx_vnc/source/settings-default.xml create mode 100644 packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service diff --git a/packages/addons/addon-depends/libconfig/package.mk b/packages/addons/addon-depends/libconfig/package.mk new file mode 100644 index 0000000000..0f2db98b35 --- /dev/null +++ b/packages/addons/addon-depends/libconfig/package.mk @@ -0,0 +1,38 @@ +################################################################################# +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libconfig" +PKG_VERSION="1.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://hyperrealm.com/libconfig/libconfig.html" +PKG_URL="https://github.com/hyperrealm/libconfig/archive/v$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="lib" +PKG_SHORTDESC="C/C++ Configuration File Library" +PKG_LONGDESC="C/C++ Configuration File Library" + +PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--enable-static \ + --disable-shared \ + --disable-examples \ + --with-sysroot=$SYSROOT_PREFIX" diff --git a/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch b/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch new file mode 100644 index 0000000000..79b0a2e00f --- /dev/null +++ b/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch @@ -0,0 +1,12 @@ +diff -Naur a/tests/Makefile.am b/tests/Makefile.am +--- a/tests/Makefile.am 2014-03-04 03:04:17.000000000 +0100 ++++ b/tests/Makefile.am 2016-01-22 21:22:38.742833399 +0100 +@@ -3,7 +3,7 @@ + + libconfig_tests_SOURCES = tests.c + +-libconfig_tests_CPPFLAGS = -I$(top_srcdir)/tinytest -I../lib ++libconfig_tests_CPPFLAGS = -I$(top_srcdir)/tinytest -I$(top_srcdir)/lib + + libconfig_tests_LDADD = -L$(top_builddir)/tinytest -ltinytest \ + -L$(top_builddir)/lib/.libs -lconfig diff --git a/packages/addons/addon-depends/libvncserver/package.mk b/packages/addons/addon-depends/libvncserver/package.mk new file mode 100644 index 0000000000..fb858e52fd --- /dev/null +++ b/packages/addons/addon-depends/libvncserver/package.mk @@ -0,0 +1,47 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libvncserver" +PKG_VERSION="0.9.10" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="https://libvnc.github.io/" +PKG_URL="https://github.com/LibVNC/libvncserver/archive/LibVNCServer-$PKG_VERSION.tar.gz" +PKG_SOURCE_DIR="libvncserver-LibVNCServer-$PKG_VERSION" +PKG_DEPENDS_TARGET="toolchain libjpeg-turbo libpng" +PKG_SECTION="libs" +PKG_PRIORITY="optional" +PKG_SHORTDESC="LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program." +PKG_LONGDESC="LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program." + +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" + +PKG_MAINTAINER="Lukas Rusak (lrusak at irc.freenode.net)" + +PKG_CONFIGURE_OPTS_TARGET="--disable-shared \ + --enable-static \ + --with-sysroot=$SYSROOT_PREFIX \ + --with-jpeg \ + --with-png \ + --without-sdl \ + --without-gcrypt \ + --without-client-gcrypt \ + --without-gnutls" diff --git a/packages/addons/service/dispmanx_vnc/changelog.txt b/packages/addons/service/dispmanx_vnc/changelog.txt new file mode 100644 index 0000000000..590aae25f3 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/changelog.txt @@ -0,0 +1,5 @@ +7.0.101 +- Move settings to Kodi + +7.0.100 +- Initial addon diff --git a/packages/addons/service/dispmanx_vnc/icon/icon.png b/packages/addons/service/dispmanx_vnc/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8838fdf0cfd389efcd4adfade8b1e200859a88af GIT binary patch literal 25734 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 FKLE_(>sSB) literal 0 HcmV?d00001 diff --git a/packages/addons/service/dispmanx_vnc/package.mk b/packages/addons/service/dispmanx_vnc/package.mk new file mode 100644 index 0000000000..f51880f814 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/package.mk @@ -0,0 +1,51 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="dispmanx_vnc" +PKG_VERSION="78e6673" +PKG_REV="101" +PKG_ARCH="arm" +PKG_ADDON_PROJECTS="RPi RPi2" +PKG_LICENSE="OSS" +PKG_SITE="https://github.com/patrikolausson/dispmanx_vnc" +PKG_URL="https://github.com/patrikolausson/dispmanx_vnc/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain libvncserver bcm2835-bootloader libconfig" +PKG_PRIORITY="optional" +PKG_SECTION="service/system" +PKG_SHORTDESC="VNC Server for Raspberry Pi" +PKG_LONGDESC="VNC Server for Raspberry Pi using dispmanx" +PKG_AUTORECONF="no" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Raspberry Pi VNC" +PKG_ADDON_TYPE="xbmc.service" +PKG_ADDON_REPOVERSION="7.0" +PKG_MAINTAINER="Anton Voyl (awiouy at gmail dot com)" + +pre_make_target() { + export SYSROOT_PREFIX +} + +makeinstall_target() { + : # nop +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -p $PKG_BUILD/dispmanx_vncserver $ADDON_BUILD/$PKG_ADDON_ID/bin +} diff --git a/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch b/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch new file mode 100644 index 0000000000..344c283d61 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch @@ -0,0 +1,20 @@ +diff -Naur a/Makefile b/Makefile +--- a/Makefile 2016-01-22 20:52:21.000000000 +0100 ++++ b/Makefile 2016-01-22 21:29:34.601124600 +0100 +@@ -1,9 +1,11 @@ +-CXX = g++ +-CXXFLAGS = -Wall -std=c++11 -O3 -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM ++CXX ?= g++ ++CXXFLAGS += -Wall -std=c++11 -O3 -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM + +-INCLUDES = -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux +-LIB_PATHS = -L/opt/vc/lib/ +-LIBS = -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -lvncserver -lconfig++ ++SYSROOT_PREFIX ?= ++ ++INCLUDES = -I$(SYSROOT_PREFIX)/usr/include/ -I$(SYSROOT_PREFIX)/usr/include/interface/vcos/pthreads -I$(SYSROOT_PREFIX)/usr/include/interface/vmcs_host/linux ++LIB_PATHS = -L$(SYSROOT_PREFIX)/usr/lib/ ++LIBS = -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -lconfig++ -lz -lssl -lcrypto -lresolv -lvncserver -ljpeg -lpng16 + + SOURCES = main.cpp \ + UFile.cpp \ diff --git a/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service b/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service new file mode 100755 index 0000000000..4b0d232a34 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service @@ -0,0 +1,55 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ +. /etc/profile +oe_setup_addon service.system.dispmanx_vnc + +if [ -f "$ADDON_HOME/dispmanx_vncserver.conf" ]; then + rm "$ADDON_HOME/dispmanx_vncserver.conf" +fi + +options="-p $vnc_port -s $vnc_screen -t $vnc_framerate" +if [ "$vnc_relative" == "true" ] +then + options="$options -r" +else + options="$options -a" +fi +if [ "$vnc_unsafe" == "true" ] +then + options="$options -u" +fi +if [ "$vnc_fullscreen" == "true" ] +then + options="$options -f" +fi +if [ "$vnc_multithreaded" == "true" ] +then + options="$options -m" +fi +if [ ! -z "$vnc_password" ] +then + options="$options -P $vnc_password" +fi +if [ "$vnc_downscale" == "true" ] +then + options="$options -d" +fi + +#/bin/sleep 10 +dispmanx_vncserver $options diff --git a/packages/addons/service/dispmanx_vnc/source/default.py b/packages/addons/service/dispmanx_vnc/source/default.py new file mode 100644 index 0000000000..0a5065ba27 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/default.py @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +import subprocess +import xbmc +import xbmcaddon + + +class Monitor(xbmc.Monitor): + + def __init__(self, *args, **kwargs): + xbmc.Monitor.__init__(self) + self.id = xbmcaddon.Addon().getAddonInfo('id') + + def onSettingsChanged(self): + subprocess.call(['systemctl', 'restart', self.id]) + + +if __name__ == "__main__": + Monitor().waitForAbort() + diff --git a/packages/addons/service/dispmanx_vnc/source/resources/language/English/strings.po b/packages/addons/service/dispmanx_vnc/source/resources/language/English/strings.po new file mode 100644 index 0000000000..328e1a184f --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/resources/language/English/strings.po @@ -0,0 +1,46 @@ +# Kodi Media Center language file +# Addon Name: dispmanx_vnc +# Addon id: service.system.dispmanx_vnc +# Addon Provider: awiouy at gmail dot com +msgid "" +msgstr "" + +msgctxt "#30000" +msgid "Configuration" +msgstr "" + +msgctxt "#30001" +msgid "relative" +msgstr "" + +msgctxt "#30002" +msgid "port" +msgstr "" + +msgctxt "#30003" +msgid "screen" +msgstr "" + +msgctxt "#30004" +msgid "unsafe" +msgstr "" + +msgctxt "#30005" +msgid "fullscreen" +msgstr "" + +msgctxt "#30006" +msgid "multi-threaded" +msgstr "" + +msgctxt "#30007" +msgid "password" +msgstr "" + +msgctxt "#30008" +msgid "frame-rate" +msgstr "" + +msgctxt "#30009" +msgid "downscale" +msgstr "" diff --git a/packages/addons/service/dispmanx_vnc/source/resources/settings.xml b/packages/addons/service/dispmanx_vnc/source/resources/settings.xml new file mode 100644 index 0000000000..9953e7bc72 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/resources/settings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/addons/service/dispmanx_vnc/source/settings-default.xml b/packages/addons/service/dispmanx_vnc/source/settings-default.xml new file mode 100644 index 0000000000..cb68e2b763 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/settings-default.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service b/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service new file mode 100644 index 0000000000..70e616d79a --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service @@ -0,0 +1,13 @@ +[Unit] +Description=dispmanx_vnc +After=kodi.service + +[Service] +ExecStart=/bin/sh /storage/.kodi/addons/service.system.dispmanx_vnc/bin/dispmanx_vncserver-service +TimeoutStopSec=1 +Restart=always +RestartSec=2 +StartLimitInterval=0 + +[Install] +WantedBy=kodi.target