sundtek: transformed to service addon new addon settings option to enable to check for new driver at boot update to kodi

This commit is contained in:
vpeter4 2014-09-04 18:54:41 +02:00 committed by Stephan Raue
parent 1a3380a66f
commit 8fe7fb4eaf
14 changed files with 357 additions and 266 deletions

View File

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

View File

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

View File

@ -17,4 +17,5 @@
<setting id="DEVICE4_NUM" value="1" />
<setting id="DEVICE5_IP" value="" />
<setting id="DEVICE5_NUM" value="1" />
<setting id="CHECK_BOOT" value="false" />
</settings>

View File

@ -1,2 +0,0 @@
#!/bin/sh
LD_PRELOAD=/storage/.xbmc/addons/driver.dvb.sundtek-mediatv/lib/libmediaclient.so exec mediaclient.bin "$@"

View File

@ -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 <http://www.gnu.org/licenses/>.
################################################################################
. /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 ###"

View File

@ -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 <http://www.gnu.org/licenses/>.
################################################################################
. /etc/profile
ADDON_DIR="$HOME/.kodi/addons/driver.dvb.sundtek-mediatv"
logger -t Sundtek "### Sundtek driver stop ###"
mediaclient --shutdown

View File

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

View File

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

View File

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

View File

@ -29,5 +29,6 @@
<string id="9030"> keymap filename</string>
<string id="3000">Driver</string>
<string id="3020">Check for new driver version at boot</string>
<string id="3010">Update from web... (press me)</string>
</strings>

View File

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

View File

@ -31,6 +31,7 @@
</category>
<category label="3000">
<setting type="sep" />
<setting id="CHECK_BOOT" type="bool" label="3020" default="false" />
<setting label="3010" option="close" type="action" action="RunScript($ID, update_driver)" />
</category>
</settings>

View File

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

View File

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