diff --git a/packages/addons/driver/sundtek-mediatv/changelog.txt b/packages/addons/driver/sundtek-mediatv/changelog.txt index 4ddd18aa24..0f51099e6b 100644 --- a/packages/addons/driver/sundtek-mediatv/changelog.txt +++ b/packages/addons/driver/sundtek-mediatv/changelog.txt @@ -1,3 +1,6 @@ +4.3.3 + addon transformed to service addon + new addon settings option to enable to check for new driver at boot 4.3.2 new addon settings option to enable to update driver from web with latest version 4.3.1 diff --git a/packages/addons/driver/sundtek-mediatv/package.mk b/packages/addons/driver/sundtek-mediatv/package.mk index 51c1e7cd33..7f9bbe9d7f 100644 --- a/packages/addons/driver/sundtek-mediatv/package.mk +++ b/packages/addons/driver/sundtek-mediatv/package.mk @@ -18,7 +18,7 @@ PKG_NAME="sundtek-mediatv" PKG_VERSION="4.3" -PKG_REV="2" +PKG_REV="3" PKG_ARCH="any" PKG_LICENSE="nonfree" PKG_SITE="http://support.sundtek.com/" @@ -29,7 +29,7 @@ PKG_SECTION="driver/dvb" PKG_SHORTDESC="Sundtek USB Stick DVB userspace driver" PKG_LONGDESC="Driver for Sundtek MediaTV Pro (DVB-C, DVB-T, AnalogTV, Composite, S-Video, FM-Radio USB Stick) and Sundtek SkyTV Ultimate (DVB-S/S2 USB)." PKG_IS_ADDON="yes" -PKG_ADDON_TYPE="xbmc.python.script" +PKG_ADDON_TYPE="kodi.service" PKG_AUTORECONF="no" make_target() { @@ -49,9 +49,8 @@ make_target() { esac wget -O installer.tar.gz $INSTALLER_URL tar -xzf installer.tar.gz - # we run this via wrapper - mv opt/bin/mediaclient opt/bin/mediaclient.bin - chmod 755 opt/bin/* + + wget -O version.used http://sundtek.de/media/latest.phtml } makeinstall_target() { @@ -64,4 +63,5 @@ addon() { cp -P $PKG_DIR/settings-default.xml $ADDON_BUILD/$PKG_ADDON_ID/ cp -Pa $PKG_BUILD/opt/bin $ADDON_BUILD/$PKG_ADDON_ID/ cp -Pa $PKG_BUILD/opt/lib $ADDON_BUILD/$PKG_ADDON_ID/ + cp $PKG_BUILD/version.used $ADDON_BUILD/$PKG_ADDON_ID/ } diff --git a/packages/addons/driver/sundtek-mediatv/settings-default.xml b/packages/addons/driver/sundtek-mediatv/settings-default.xml index e182036226..493cc87581 100644 --- a/packages/addons/driver/sundtek-mediatv/settings-default.xml +++ b/packages/addons/driver/sundtek-mediatv/settings-default.xml @@ -17,4 +17,5 @@ + diff --git a/packages/addons/driver/sundtek-mediatv/source/bin/mediaclient b/packages/addons/driver/sundtek-mediatv/source/bin/mediaclient deleted file mode 100755 index b0909a88e5..0000000000 --- a/packages/addons/driver/sundtek-mediatv/source/bin/mediaclient +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -LD_PRELOAD=/storage/.xbmc/addons/driver.dvb.sundtek-mediatv/lib/libmediaclient.so exec mediaclient.bin "$@" diff --git a/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.start b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.start new file mode 100644 index 0000000000..457c43c3cc --- /dev/null +++ b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.start @@ -0,0 +1,247 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) +# +# OpenELEC 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. +# +# OpenELEC 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 OpenELEC. If not, see . +################################################################################ + +. /etc/profile + +net_tuner_num_fix() { + local num=$1 + + [ -z "$num" ] && num=1 + num=$(( $num *1 )) + [ $num -lt 1 ] && num=1 + num=$(( $num -1 )) + echo $num +} + +SUNDTEK_ADDON_DIR="$HOME/.kodi/addons/driver.dvb.sundtek-mediatv" +SUNDTEK_ADDON_HOME="$HOME/.kodi/userdata/addon_data/driver.dvb.sundtek-mediatv" +SUNDTEK_ADDON_SETTINGS="$SUNDTEK_ADDON_HOME/settings.xml" + +mkdir -p $SUNDTEK_ADDON_HOME + +if [ ! -f "$SUNDTEK_ADDON_HOME/sundtek.conf" ]; then + cp $SUNDTEK_ADDON_DIR/config/* $SUNDTEK_ADDON_HOME/ +else + # in case of missing entries in addon home's sundtek.conf + entry_set="$(grep use_hwpidfilter $SUNDTEK_ADDON_HOME/sundtek.conf 2>/dev/null)" + if [ -z "$entry_set" ]; then + sed -i 's|^device_attach=.*|# device_attach not used anymore\n\n# enable HW PID filter\nuse_hwpidfilter=off\n\n# enable listening on network\nenablenetwork=off|g' $SUNDTEK_ADDON_HOME/sundtek.conf + sed -i 's|^#first_adapter=.*|first_adapter=0|g' $SUNDTEK_ADDON_HOME/sundtek.conf + + sed -i 's|.*network tuner IP address (OpenELEC specific).*||g' $SUNDTEK_ADDON_HOME/sundtek.conf + sed -i 's|.*network_tuner_ip=.*||g' $SUNDTEK_ADDON_HOME/sundtek.conf + fi +fi + +if [ ! -f "$SUNDTEK_ADDON_SETTINGS" ]; then + cp $SUNDTEK_ADDON_DIR/settings-default.xml $SUNDTEK_ADDON_SETTINGS +fi + +[ ! -f $SUNDTEK_ADDON_HOME/rc_key_enter.map ] && mv $SUNDTEK_ADDON_HOME/rc_key_enter $SUNDTEK_ADDON_HOME/rc_key_enter.map +[ ! -f $SUNDTEK_ADDON_HOME/rc_key_ok.map ] && mv $SUNDTEK_ADDON_HOME/rc_key_ok $SUNDTEK_ADDON_HOME/rc_key_ok.map + +mkdir -p /var/config +cat "$SUNDTEK_ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sundtek-addon.conf +. /var/config/sundtek-addon.conf + +# check if there is new driver on web +if [ "$CHECK_BOOT" = "true" ]; then + if [ ! -f /var/run/sundtek.checked ]; then + # only once after boot + touch /var/run/sundtek.checked + +( + # wait some time before checking + sleep 20 + cd $SUNDTEK_ADDON_DIR + + wget -O version.latest http://sundtek.de/media/latest.phtml + + version_used=$(cat version.used) + version_latest=$(cat version.latest) + if [ "$version_used" != "$version_latest" ]; then + # new version exist + kodi-send -a "Notification(Sundtek, \"New driver version exist, update manually\", 7000, $SUNDTEK_ADDON_DIR/icon.png)" + fi +)& + fi +fi + +if [ -z "$(pidof mediasrv)" ]; then + rm -f /var/log/mediasrv.log + rm -f /var/log/mediaclient.log + + SUNDTEK_CONF_TMP=/tmp/sundtek.conf + cp $SUNDTEK_ADDON_HOME/sundtek.conf $SUNDTEK_CONF_TMP + + [ -z "$LOWEST_ADAPTER_NUM" ] && LOWEST_ADAPTER_NUM=0 + sed -i "s|^first_adapter=.*|first_adapter=$LOWEST_ADAPTER_NUM|g" $SUNDTEK_CONF_TMP + + # enable HW PID filter + if [ "$ENABLE_HW_PID_FILTER" = "true" ]; then + sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $SUNDTEK_CONF_TMP + else + sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=off|g' $SUNDTEK_CONF_TMP + fi + + # enable IR receiver + if [ "$ENABLE_IR_RECEIVER" = "true" ]; then + sed -i 's|^ir_disabled=.*|ir_disabled=0|g' $SUNDTEK_CONF_TMP + else + sed -i 's|^ir_disabled=.*|ir_disabled=1|g' $SUNDTEK_CONF_TMP + fi + + if [ "$ALLOW_NET_USE" = "true" ]; then + sed -i 's|^enablenetwork=.*|enablenetwork=on|g' $SUNDTEK_CONF_TMP + else + sed -i 's|^enablenetwork=.*|enablenetwork=off|g' $SUNDTEK_CONF_TMP + fi + + [ "$DEVICE1_IP" = "0.0.0.0" ] && DEVICE1_IP="" + [ "$DEVICE2_IP" = "0.0.0.0" ] && DEVICE2_IP="" + [ "$DEVICE3_IP" = "0.0.0.0" ] && DEVICE3_IP="" + [ "$DEVICE4_IP" = "0.0.0.0" ] && DEVICE4_IP="" + [ "$DEVICE5_IP" = "0.0.0.0" ] && DEVICE5_IP="" + DEVICE1_NUM=$(net_tuner_num_fix $DEVICE1_NUM) + DEVICE2_NUM=$(net_tuner_num_fix $DEVICE2_NUM) + DEVICE3_NUM=$(net_tuner_num_fix $DEVICE3_NUM) + DEVICE4_NUM=$(net_tuner_num_fix $DEVICE4_NUM) + DEVICE5_NUM=$(net_tuner_num_fix $DEVICE5_NUM) + + if [ "$USE_NET_TUNERS" = "true" -a -n "$DEVICE1_IP" ]; then + # delete all network tuner entries + awk '/^\[NETWORK\]/{flag=1; next} /^device=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-net + mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP + echo "" >>$SUNDTEK_CONF_TMP + # remove empty lines at the end of file + sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP + # add entries + echo -e "\n[NETWORK]" >>$SUNDTEK_CONF_TMP + for dev in $(seq 0 $DEVICE1_NUM); do + echo "device=$DEVICE1_IP:$dev" >>$SUNDTEK_CONF_TMP + done + if [ -n "$DEVICE2_IP" ]; then + for dev in $(seq 0 $DEVICE2_NUM); do + echo "device=$DEVICE2_IP:$dev" >>$SUNDTEK_CONF_TMP + done + if [ -n "$DEVICE3_IP" ]; then + for dev in $(seq 0 $DEVICE3_NUM); do + echo "device=$DEVICE3_IP:$dev" >>$SUNDTEK_CONF_TMP + done + if [ -n "$DEVICE4_IP" ]; then + for dev in $(seq 0 $DEVICE4_NUM); do + echo "device=$DEVICE4_IP:$dev" >>$SUNDTEK_CONF_TMP + done + if [ -n "$DEVICE5_IP" ]; then + for dev in $(seq 0 $DEVICE5_NUM); do + echo "device=$DEVICE5_IP:$dev" >>$SUNDTEK_CONF_TMP + done + fi + fi + fi + fi + else + # delete all network tuner entries + awk '/^\[NETWORK\]/{flag=1; next} /^device=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-net + mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP + echo "" >>$SUNDTEK_CONF_TMP + # remove empty lines at the end of file + sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP + fi + + if [ "$ENABLE_TUNER_TYPES" = "true" ]; then + # get tuner serial numbers + SERIALS=$(cat /var/config/sundtek-addon.conf | sed -n 's|^ATTACHED_TUNER_\(.*\)_DVBMODE=.*|\1|gp' | sort | uniq) + . /var/config/sundtek-addon.conf + + for SERIAL in $SERIALS; do + DVBMODE=$(eval echo \$ATTACHED_TUNER_${SERIAL}_DVBMODE) + IRPROT=$(eval echo \$ATTACHED_TUNER_${SERIAL}_IRPROT) + KEYMAP=$(eval echo \$ATTACHED_TUNER_${SERIAL}_KEYMAP) + + if [ "$DVBMODE" = "DVB-T" ]; then + # only set DVB-T because default is DVB-C (and DVB-S is not set either) + DVBMODE="DVBT" + else + DVBMODE="" + fi + + [ "$IRPROT" = "NEC" -o "$IRPROT" = "auto" ] && IRPROT="" + + [ ! -f $KEYMAP ] && KEYMAP="" + + # remove setttings for this tuner + awk -v val="[$SERIAL]" '$0 == val {flag=1; next} /^ir_protocol=|^rcmap=|^initial_dvb_mode=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-types + mv ${SUNDTEK_CONF_TMP}-types $SUNDTEK_CONF_TMP + echo "" >>$SUNDTEK_CONF_TMP + # remove empty lines at the end of file + sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP + + ADDNEW=true + if [ -n "$DVBMODE" ]; then + [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP + echo "initial_dvb_mode=$DVBMODE" >>$SUNDTEK_CONF_TMP + fi + if [ -n "$IRPROT" ]; then + [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP + echo "ir_protocol=$IRPROT" >>$SUNDTEK_CONF_TMP + fi + if [ -n "$KEYMAP" ]; then + [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP + echo "rcmap=$KEYMAP" >>$SUNDTEK_CONF_TMP + fi + + echo "" >>$SUNDTEK_CONF_TMP + done + fi + + md5_1=$(md5sum -b $SUNDTEK_CONF_TMP | awk '{print $1}') + md5_2=$(md5sum -b $SUNDTEK_ADDON_HOME/sundtek.conf | awk '{print $1}') + if [ "$md5_1" != "$md5_2" ]; then + # file changed - copy to addon home + cp $SUNDTEK_CONF_TMP $SUNDTEK_ADDON_HOME/sundtek.conf + fi + + chmod +x $SUNDTEK_ADDON_DIR/bin/* + mediasrv --wait-for-devices -p $SUNDTEK_ADDON_DIR/bin -c $SUNDTEK_ADDON_HOME/sundtek.conf -d + + # wait few seconds + [ -z "$SETTLE_TIME" ] && SETTLE_TIME=0 + SETTLE_TIME=$(( $SETTLE_TIME *1 )) + if [ $SETTLE_TIME -gt 0 ]; then + logger -t Sundtek "### Settle for $SETTLE_TIME sec ###" + sleep $SETTLE_TIME + fi + + if [ "$RUN_USER_SCRIPT" = "true" -a -f "$SUNDTEK_ADDON_HOME/userscript.sh" ]; then + logger -t Sundtek "### Running user script $SUNDTEK_ADDON_HOME/userscript.sh ###" + cat $SUNDTEK_ADDON_HOME/userscript.sh | dos2unix >/var/run/sundtek-userscript.sh + sh /var/run/sundtek-userscript.sh + fi + + # save adapter serial number + serial_number_old=$(cat $SUNDTEK_ADDON_HOME/adapters.txt 2>/dev/null) + serial_number_new=$(mediaclient -e | awk '/device / {print $0} /SERIAL/ {id=1} /ID:/ {if (id==1) print $2}') + if [ "$serial_number_old" != "$serial_number_new" ]; then + echo "$serial_number_new" >$SUNDTEK_ADDON_HOME/adapters.txt + fi +fi + +logger -t Sundtek "### Sundtek ready ###" diff --git a/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.stop b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.stop new file mode 100644 index 0000000000..7c88bbf23e --- /dev/null +++ b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-mediatv.stop @@ -0,0 +1,26 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) +# +# OpenELEC 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. +# +# OpenELEC 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 OpenELEC. If not, see . +################################################################################ + +. /etc/profile + +ADDON_DIR="$HOME/.kodi/addons/driver.dvb.sundtek-mediatv" + +logger -t Sundtek "### Sundtek driver stop ###" +mediaclient --shutdown diff --git a/packages/addons/driver/sundtek-mediatv/source/bin/update-driver.sh b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-update-driver.sh similarity index 58% rename from packages/addons/driver/sundtek-mediatv/source/bin/update-driver.sh rename to packages/addons/driver/sundtek-mediatv/source/bin/sundtek-update-driver.sh index 0e41b9917a..c500f89b1a 100644 --- a/packages/addons/driver/sundtek-mediatv/source/bin/update-driver.sh +++ b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek-update-driver.sh @@ -20,18 +20,27 @@ . /etc/profile -SUNDTEK_ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv" -SUNDTEK_ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv" +SUNDTEK_ADDON_DIR="$HOME/.kodi/addons/driver.dvb.sundtek-mediatv" +SUNDTEK_ADDON_HOME="$HOME/.kodi/userdata/addon_data/driver.dvb.sundtek-mediatv" SUNDTEK_ADDON_SETTINGS="$SUNDTEK_ADDON_HOME/settings.xml" logger -t Sundtek "### Starting updating driver ###" -xbmc-send -a "Notification(Sundtek, Starting updating driver, 2000)" +kodi-send -a "Notification(Sundtek, Starting updating driver, 2000, $SUNDTEK_ADDON_DIR/icon.png)" cd "$SUNDTEK_ADDON_DIR" rm -fr tmp mkdir tmp cd tmp +wget -O ../version.used http://sundtek.de/media/latest.phtml +if [ $? -ne 0 ]; then + logger -t Sundtek "### Can't get latest version ###" + kodi-send -a "Notification(Sundtek, Can't get latest version, 8000, $SUNDTEK_ADDON_DIR/icon.png)" + cd .. + rm -fr tmp/ + exit 1 +fi + ARCH=$(sed -n 's|.*\.\([^-]*\)-.*|\1|p' /etc/release | tr -d '\n') if [ "$ARCH" = "x86_64" ]; then INSTALLER_URL="http://sundtek.de/media/netinst/64bit/installer.tar.gz" @@ -41,32 +50,36 @@ elif [ "$ARCH" = "arm" ]; then INSTALLER_URL="http://sundtek.de/media/netinst/armsysvhf/installer.tar.gz" else logger -t Sundtek "### Unsupported architecture ###" - xbmc-send -a "Notification(Sundtek, Unsupported architecture, 5000)" + kodi-send -a "Notification(Sundtek, Unsupported architecture, 8000, $SUNDTEK_ADDON_DIR/icon.png)" cd .. rm -fr tmp - exit 1 -fi - -logger -t Sundtek "### Downloading driver archive for $ARCH ###" -xbmc-send -a "Notification(Sundtek, Downloading driver archive for $ARCH, 2000)" -wget -O installer.tar.gz $INSTALLER_URL -logger -t Sundtek "### Extracting archive ###" -xbmc-send -a "Notification(Sundtek, Extracting archive, 2000)" -tar -xzf installer.tar.gz -if [ $? -ne 0 ]; then - logger -t Sundtek "### Archive damaged ###" - xbmc-send -a "Notification(Sundtek, Archive damaged, 5000)" - cd .. - rm -fr tmp/ exit 2 fi -killall -9 mediaclient.bin &>/dev/null -killall -9 mediaclient &>/dev/null -killall -9 mediasrv &>/dev/null +logger -t Sundtek "### Downloading driver archive for $ARCH ###" +kodi-send -a "Notification(Sundtek, Downloading driver archive for $ARCH, 2000, $SUNDTEK_ADDON_DIR/icon.png)" +wget -O installer.tar.gz $INSTALLER_URL +if [ $? -ne 0 ]; then + logger -t Sundtek "### Archive damaged ###" + kodi-send -a "Notification(Sundtek, Download failed, 8000, $SUNDTEK_ADDON_DIR/icon.png)" + cd .. + rm -fr tmp/ + exit 3 +fi +logger -t Sundtek "### Extracting archive ###" +kodi-send -a "Notification(Sundtek, Extracting archive, 2000, $SUNDTEK_ADDON_DIR/icon.png)" +tar -xzf installer.tar.gz +if [ $? -ne 0 ]; then + logger -t Sundtek "### Archive damaged ###" + kodi-send -a "Notification(Sundtek, Archive damaged, 8000, $SUNDTEK_ADDON_DIR/icon.png)" + cd .. + rm -fr tmp/ + exit 4 +fi + +killall -9 mediaclient &>/dev/null +killall -9 mediasrv &>/dev/null -# we run this via wrapper -mv opt/bin/mediaclient opt/bin/mediaclient.bin chmod 755 opt/bin/* cp -Pa opt/bin/* ../bin/ @@ -75,7 +88,7 @@ cp -Pa opt/lib/* ../lib/ cd .. rm -fr tmp -logger -t Sundtek "### Driver update finished, please reboot ###" -xbmc-send -a "Notification(Sundtek, Driver update finished, 2000)" -xbmc-send -a "Notification(Sundtek, Please reboot, 5000)" +logger -t Sundtek "### Driver update finished ###" +kodi-send -a "Notification(Sundtek, Driver update finished, 5000, $SUNDTEK_ADDON_DIR/icon.png)" +kodi-send -a "Notification(Sundtek, Please reboot, 5000, $SUNDTEK_ADDON_DIR/icon.png)" exit 0 diff --git a/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh b/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh index 87155c51eb..23334ea890 100644 --- a/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh +++ b/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh @@ -20,223 +20,11 @@ . /etc/profile -# start locking mechanism - allows only one instance to be run at a time -SUNDTEK_LOCKFILE="/var/lock/userspace-driver-sundtek.lck" -SUNDTEK_LOCKFD=99 -# obtain an exclusive lock -exlock() { eval "exec $SUNDTEK_LOCKFD>\"$SUNDTEK_LOCKFILE\""; flock -x $SUNDTEK_LOCKFD; } -# drop a lock -unlock() { flock -u $SUNDTEK_LOCKFD; flock -xn $SUNDTEK_LOCKFD && rm -f "$SUNDTEK_LOCKFILE"; } -# end locking mechanism +SUNDTEK_ADDON_DIR="$HOME/.kodi/addons/driver.dvb.sundtek-mediatv" -# exclusive lock -exlock - -net_tuner_num_fix() { - local num=$1 - - [ -z "$num" ] && num=1 - num=$(( $num *1 )) - [ $num -lt 1 ] && num=1 - num=$(( $num -1 )) - echo $num -} - -SUNDTEK_ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv" -SUNDTEK_ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv" -SUNDTEK_ADDON_SETTINGS="$SUNDTEK_ADDON_HOME/settings.xml" - -mkdir -p $SUNDTEK_ADDON_HOME - -if [ ! -f "$SUNDTEK_ADDON_HOME/sundtek.conf" ]; then - cp $SUNDTEK_ADDON_DIR/config/* $SUNDTEK_ADDON_HOME/ +if [ -f $SUNDTEK_ADDON_DIR/lib/libmediaclient.so ]; then + logger -t Sundtek "### Preloading library ###" + export LD_PRELOAD=$SUNDTEK_ADDON_DIR/lib/libmediaclient.so else - # in case of missing entries in addon home's sundtek.conf - entry_set="$(grep use_hwpidfilter $SUNDTEK_ADDON_HOME/sundtek.conf 2>/dev/null)" - if [ -z "$entry_set" ]; then - sed -i 's|^device_attach=.*|# device_attach not used anymore\n\n# enable HW PID filter\nuse_hwpidfilter=off\n\n# enable listening on network\nenablenetwork=off|g' $SUNDTEK_ADDON_HOME/sundtek.conf - sed -i 's|^#first_adapter=.*|first_adapter=0|g' $SUNDTEK_ADDON_HOME/sundtek.conf - - sed -i 's|.*network tuner IP address (OpenELEC specific).*||g' $SUNDTEK_ADDON_HOME/sundtek.conf - sed -i 's|.*network_tuner_ip=.*||g' $SUNDTEK_ADDON_HOME/sundtek.conf - fi + logger -t Sundtek "### Preloading library doesn't exist ###" fi - -if [ ! -f "$SUNDTEK_ADDON_SETTINGS" ]; then - cp $SUNDTEK_ADDON_DIR/settings-default.xml $SUNDTEK_ADDON_SETTINGS -fi - -[ ! -f $SUNDTEK_ADDON_HOME/rc_key_enter.map ] && mv $SUNDTEK_ADDON_HOME/rc_key_enter $SUNDTEK_ADDON_HOME/rc_key_enter.map -[ ! -f $SUNDTEK_ADDON_HOME/rc_key_ok.map ] && mv $SUNDTEK_ADDON_HOME/rc_key_ok $SUNDTEK_ADDON_HOME/rc_key_ok.map - -mkdir -p /var/config -cat "$SUNDTEK_ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sundtek-addon.conf -. /var/config/sundtek-addon.conf - -export LD_PRELOAD=$SUNDTEK_ADDON_DIR/lib/libmediaclient.so - -if [ -z "$(pidof mediasrv)" ]; then - rm -f /var/log/mediasrv.log - rm -f /var/log/mediaclient.log - - SUNDTEK_CONF_TMP=/tmp/sundtek.conf - cp $SUNDTEK_ADDON_HOME/sundtek.conf $SUNDTEK_CONF_TMP - - [ -z "$LOWEST_ADAPTER_NUM" ] && LOWEST_ADAPTER_NUM=0 - sed -i "s|^first_adapter=.*|first_adapter=$LOWEST_ADAPTER_NUM|g" $SUNDTEK_CONF_TMP - - # enable HW PID filter - if [ "$ENABLE_HW_PID_FILTER" = "true" ]; then - sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $SUNDTEK_CONF_TMP - else - sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=off|g' $SUNDTEK_CONF_TMP - fi - - # enable IR receiver - if [ "$ENABLE_IR_RECEIVER" = "true" ]; then - sed -i 's|^ir_disabled=.*|ir_disabled=0|g' $SUNDTEK_CONF_TMP - else - sed -i 's|^ir_disabled=.*|ir_disabled=1|g' $SUNDTEK_CONF_TMP - fi - - if [ "$ALLOW_NET_USE" = "true" ]; then - sed -i 's|^enablenetwork=.*|enablenetwork=on|g' $SUNDTEK_CONF_TMP - else - sed -i 's|^enablenetwork=.*|enablenetwork=off|g' $SUNDTEK_CONF_TMP - fi - - [ "$DEVICE1_IP" = "0.0.0.0" ] && DEVICE1_IP="" - [ "$DEVICE2_IP" = "0.0.0.0" ] && DEVICE2_IP="" - [ "$DEVICE3_IP" = "0.0.0.0" ] && DEVICE3_IP="" - [ "$DEVICE4_IP" = "0.0.0.0" ] && DEVICE4_IP="" - [ "$DEVICE5_IP" = "0.0.0.0" ] && DEVICE5_IP="" - DEVICE1_NUM=$(net_tuner_num_fix $DEVICE1_NUM) - DEVICE2_NUM=$(net_tuner_num_fix $DEVICE2_NUM) - DEVICE3_NUM=$(net_tuner_num_fix $DEVICE3_NUM) - DEVICE4_NUM=$(net_tuner_num_fix $DEVICE4_NUM) - DEVICE5_NUM=$(net_tuner_num_fix $DEVICE5_NUM) - - if [ "$USE_NET_TUNERS" = "true" -a -n "$DEVICE1_IP" ]; then - # delete all network tuner entries - awk '/^\[NETWORK\]/{flag=1; next} /^device=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-net - mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP - echo "" >>$SUNDTEK_CONF_TMP - # remove empty lines at the end of file - sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP - # add entries - echo -e "\n[NETWORK]" >>$SUNDTEK_CONF_TMP - for dev in $(seq 0 $DEVICE1_NUM); do - echo "device=$DEVICE1_IP:$dev" >>$SUNDTEK_CONF_TMP - done - if [ -n "$DEVICE2_IP" ]; then - for dev in $(seq 0 $DEVICE2_NUM); do - echo "device=$DEVICE2_IP:$dev" >>$SUNDTEK_CONF_TMP - done - if [ -n "$DEVICE3_IP" ]; then - for dev in $(seq 0 $DEVICE3_NUM); do - echo "device=$DEVICE3_IP:$dev" >>$SUNDTEK_CONF_TMP - done - if [ -n "$DEVICE4_IP" ]; then - for dev in $(seq 0 $DEVICE4_NUM); do - echo "device=$DEVICE4_IP:$dev" >>$SUNDTEK_CONF_TMP - done - if [ -n "$DEVICE5_IP" ]; then - for dev in $(seq 0 $DEVICE5_NUM); do - echo "device=$DEVICE5_IP:$dev" >>$SUNDTEK_CONF_TMP - done - fi - fi - fi - fi - else - # delete all network tuner entries - awk '/^\[NETWORK\]/{flag=1; next} /^device=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-net - mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP - echo "" >>$SUNDTEK_CONF_TMP - # remove empty lines at the end of file - sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP - fi - - if [ "$ENABLE_TUNER_TYPES" = "true" ]; then - # get tuner serial numbers - SERIALS=$(cat /var/config/sundtek-addon.conf | sed -n 's|^ATTACHED_TUNER_\(.*\)_DVBMODE=.*|\1|gp' | sort | uniq) - . /var/config/sundtek-addon.conf - - for SERIAL in $SERIALS; do - DVBMODE=$(eval echo \$ATTACHED_TUNER_${SERIAL}_DVBMODE) - IRPROT=$(eval echo \$ATTACHED_TUNER_${SERIAL}_IRPROT) - KEYMAP=$(eval echo \$ATTACHED_TUNER_${SERIAL}_KEYMAP) - - if [ "$DVBMODE" = "DVB-T" ]; then - # only set DVB-T because default is DVB-C (and DVB-S is not set either) - DVBMODE="DVBT" - else - DVBMODE="" - fi - - [ "$IRPROT" = "NEC" -o "$IRPROT" = "auto" ] && IRPROT="" - - [ ! -f $KEYMAP ] && KEYMAP="" - - # remove setttings for this tuner - awk -v val="[$SERIAL]" '$0 == val {flag=1; next} /^ir_protocol=|^rcmap=|^initial_dvb_mode=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-types - mv ${SUNDTEK_CONF_TMP}-types $SUNDTEK_CONF_TMP - echo "" >>$SUNDTEK_CONF_TMP - # remove empty lines at the end of file - sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP - - ADDNEW=true - if [ -n "$DVBMODE" ]; then - [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP - echo "initial_dvb_mode=$DVBMODE" >>$SUNDTEK_CONF_TMP - fi - if [ -n "$IRPROT" ]; then - [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP - echo "ir_protocol=$IRPROT" >>$SUNDTEK_CONF_TMP - fi - if [ -n "$KEYMAP" ]; then - [ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP - echo "rcmap=$KEYMAP" >>$SUNDTEK_CONF_TMP - fi - - echo "" >>$SUNDTEK_CONF_TMP - done - fi - - md5_1=$(md5sum -b $SUNDTEK_CONF_TMP | awk '{print $1}') - md5_2=$(md5sum -b $SUNDTEK_ADDON_HOME/sundtek.conf | awk '{print $1}') - if [ "$md5_1" != "$md5_2" ]; then - # file changed - copy to addon home - cp $SUNDTEK_CONF_TMP $SUNDTEK_ADDON_HOME/sundtek.conf - fi - - mediasrv --wait-for-devices -p $SUNDTEK_ADDON_DIR/bin -c $SUNDTEK_ADDON_HOME/sundtek.conf -d - - # wait few seconds - [ -z "$SETTLE_TIME" ] && SETTLE_TIME=0 - SETTLE_TIME=$(( $SETTLE_TIME *1 )) - if [ $SETTLE_TIME -gt 0 ]; then - logger -t Sundtek "### Settle for $SETTLE_TIME sec ###" - sleep $SETTLE_TIME - fi - - if [ "$RUN_USER_SCRIPT" = "true" -a -f "$SUNDTEK_ADDON_HOME/userscript.sh" ]; then - logger -t Sundtek "### Running user script $SUNDTEK_ADDON_HOME/userscript.sh ###" - cat $SUNDTEK_ADDON_HOME/userscript.sh | dos2unix >/var/run/sundtek-userscript.sh - sh /var/run/sundtek-userscript.sh - fi -( - # save adapter serial number in background - sleep 5 - serial_number_old=$(cat $SUNDTEK_ADDON_HOME/adapters.txt 2>/dev/null) - serial_number_new=$(mediaclient.bin -e | awk '/device / {print $0} /ID:/ {print $2}') - if [ "$serial_number_old" != "$serial_number_new" ]; then - echo "$serial_number_new" >$SUNDTEK_ADDON_HOME/adapters.txt - fi -)& -fi - -logger -t Sundtek "### Sundtek ready ###" - -# unlock the lock -unlock diff --git a/packages/addons/driver/sundtek-mediatv/source/default.py b/packages/addons/driver/sundtek-mediatv/source/default.py index 672afd3bad..c466f0415a 100644 --- a/packages/addons/driver/sundtek-mediatv/source/default.py +++ b/packages/addons/driver/sundtek-mediatv/source/default.py @@ -26,18 +26,18 @@ __cwd__ = __settings__.getAddonInfo('path') __resources_lib__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib')) __settings_xml__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'settings.xml')) -__mediaclient__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'mediaclient.bin')) -__ld_preload__ = xbmc.translatePath(os.path.join(__cwd__, 'lib', 'libmediaclient.so')) -__mediaclient_e__ = 'LD_PRELOAD=' + __ld_preload__ + ' ' + __mediaclient__ + ' -e' -__update_sh__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'update-driver.sh')) +__mediaclient__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'mediaclient')) +__mediaclient_e__ = __mediaclient__ + ' -e' +__update_sh__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'sundtek-update-driver.sh')) -if __name__ == "__main__" and len(sys.argv) == 2 and sys.argv[1] == 'refresh_tuners': - sys.path.append(__resources_lib__) - from functions import refresh_sundtek_tuners - refresh_sundtek_tuners(__settings_xml__, __mediaclient_e__) - __settings__.openSettings() -elif __name__ == "__main__" and len(sys.argv) == 2 and sys.argv[1] == 'update_driver': - proc = subprocess.Popen([__update_sh__], shell = True) - return_code = proc.wait() - print "sundtek update driver rv", return_code - __settings__.openSettings() +if __name__ == "__main__" and len(sys.argv) == 2: + if sys.argv[1] == 'refresh_tuners': + sys.path.append(__resources_lib__) + from functions import refresh_sundtek_tuners + refresh_sundtek_tuners(__settings_xml__, __mediaclient_e__) + __settings__.openSettings() + elif sys.argv[1] == 'update_driver': + proc = subprocess.Popen([__update_sh__], shell = True) + return_code = proc.wait() + print "sundtek update driver return value" + str(return_code) + __settings__.openSettings() diff --git a/packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml b/packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml index 88a52b6ca2..a00afae1ea 100644 --- a/packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml +++ b/packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml @@ -29,5 +29,6 @@ keymap filename Driver + Check for new driver version at boot Update from web... (press me) diff --git a/packages/addons/driver/sundtek-mediatv/source/resources/lib/functions.py b/packages/addons/driver/sundtek-mediatv/source/resources/lib/functions.py index 344f007337..bc34bf8e3b 100644 --- a/packages/addons/driver/sundtek-mediatv/source/resources/lib/functions.py +++ b/packages/addons/driver/sundtek-mediatv/source/resources/lib/functions.py @@ -22,7 +22,7 @@ import shutil import xmlpp from xml.dom import minidom -__sundtek_userspace__ = '/storage/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv/' +__sundtek_userspace__ = '/storage/.kodi/userdata/addon_data/driver.dvb.sundtek-mediatv/' ###################################################################################################### # backup setting.xml file only if backup doesn't exist diff --git a/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml b/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml index 1d7e9ff6e2..5c6f651113 100644 --- a/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml +++ b/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml @@ -31,6 +31,7 @@ + diff --git a/packages/addons/driver/sundtek-mediatv/source/sleep.d/99-sundtek-mediatv.power b/packages/addons/driver/sundtek-mediatv/source/sleep.d/99-sundtek-mediatv.power index 7a2e93324f..1f91cc9065 100644 --- a/packages/addons/driver/sundtek-mediatv/source/sleep.d/99-sundtek-mediatv.power +++ b/packages/addons/driver/sundtek-mediatv/source/sleep.d/99-sundtek-mediatv.power @@ -25,9 +25,10 @@ oe_setup_addon driver.dvb.sundtek-mediatv if [ "$SUSPEND_DRIVER" = "true" ]; then case "$1" in pre) - killall -9 mediasrv &>/dev/null + systemctl stop driver.dvb.sundtek-mediatv.service ;; post) + systemctl start driver.dvb.sundtek-mediatv.service ;; esac fi diff --git a/packages/addons/driver/sundtek-mediatv/source/system.d/driver.dvb.sundtek-mediatv.service b/packages/addons/driver/sundtek-mediatv/source/system.d/driver.dvb.sundtek-mediatv.service new file mode 100644 index 0000000000..4f6c142d1a --- /dev/null +++ b/packages/addons/driver/sundtek-mediatv/source/system.d/driver.dvb.sundtek-mediatv.service @@ -0,0 +1,12 @@ +[Unit] +Description=Sundtek driver service +After=network.target + +[Service] +Type=oneshot +ExecStart=-/bin/sh -c "exec sh /storage/.kodi/addons/driver.dvb.sundtek-mediatv/bin/sundtek-mediatv.start" +ExecStop=-/bin/sh -c "exec sh /storage/.kodi/addons/driver.dvb.sundtek-mediatv/bin/sundtek-mediatv.stop" +RemainAfterExit=yes + +[Install] +WantedBy=kodi.target