#!/bin/bash

# /usr/bin/easyvdr-config-pvr350.sh
#
# Dieses Skript konfiguriert easyVDR 0.5.x fuer de pvr350 Betrieb
#
# Autor: Wicky
#

version="0.0.7"

VDRSETUPXML="/etc/vdr/plugins/setup/vdr-setup.xml"
SYSCONFIG="/etc/vdr/sysconfig"
DRIVERCONFIG="/etc/vdr/dvbdriver.load.default"
vdr_running="false"
COMMANDSCONF="/etc/vdr/commands.conf"
SETUPCONF="/etc/vdr/setup.conf"
REMOTES="/etc/vdr/remotes/pvr350"
force="false"
config_fb="false"
scan_pvr="false"

# function lib einbinden
. /usr/bin/easyvdr/functions/easyvdr_functions
. /usr/bin/easyvdr/functions/easyvdr_var_names
. $FolderAndFilenameForSysconfig

function usage (){
    echo ""
    echo "Dies ist easyvdr-config-pvr350 Version $version"
    echo ""
    echo "Optionen:"
    echo "        -f       Deaktivert die Hardwareerkennung"
    echo "        -fb      Die neue Hauppauge FB A415 (siehe Batteriefachdeckel) wird konfiguriert"
    echo "        -fb=new  Die neue Hauppauge FB A415 (siehe Batteriefachdeckel) wird konfiguriert"
    echo "        -fb=old  Die alte Hauppauge FB R808 (siehe Batteriefachdeckel) wird konfiguriert"
    echo "        -ch      Erstellt eine passende Kanalliste"
    echo "                 Diese wird automatisch aktiviert" 
    echo ""
}

# read script parameter
while [ $# -gt 0 ]; do
        case $1 in
			--force|-f)		force="true"
							shift;;
            -fb|-fb=new)	config_fb="true"
							FB_Model="NewFB"
							shift;;
			-fb=old)		config_fb="true"
							FB_Model="OldFB"
							shift;;
			-ch)			scan_pvr="true"
							shift;;
			*)				usage;
							exit;;
	esac
done

function chk_lspci() {
	for arg in $@
	do
	if [ $(lspci -n | grep -c $arg) -eq 0 ]; then
		return 1
	fi
	done
	return 0
}

function stop_vdr() {
	if [ -e /var/run/Runvdr.pid ]; then
		vdr_running="true"
			echo 
			echo "---> Der VDR-Prozess wird beendet..."
			echo
			stopvdr >/dev/null 2>/dev/null
			sleep 3
	fi
}

function start_vdr() {
	if [ "x$vdr_running" = "xtrue" ]; then
		echo
		echo "---> Der VDR-Prozess wird wieder gestartet ..."
		echo
		startvdr >/dev/null 2>/dev/null
	fi
}

function activate_remote() {

	echo "---> Die original Hauppage FB wird konfiguriert...."
	echo
	echo "     Hinweis:"
	echo
	echo "     Falls nicht alle Tasten der Fernbedienung funktionieren,"
	echo "     dann fueren Sie bitte folgenden Befehl aus:"
	echo 
	echo "     easyvdr-config-pvr350.sh --help"
	echo
	#LIRC="ivtv"
	sed -i 's/^LIRC=.*"/LIRC=\"ivtv\"/g' $SYSCONFIG
	sed -i '/sysconfig=\"LIRC\"/s/value=\".*\"/value=\"ivtv\"/' $VDRSETUPXML
	
	#LIRC_REMOTE_OFF="no"
	sed -i 's/^LIRC_REMOTE_OFF=.*"/LIRC_REMOTE_OFF=\"no\"/g' $SYSCONFIG
	sed -i '/sysconfig=\"LIRC_REMOTE_OFF\"/s/value=\".*\"/value=\"no\"/' $VDRSETUPXML
	
	#USE_INTERNAL_IR="no"
	sed -i 's/^USE_INTERNAL_IR=.*"/USE_INTERNAL_IR=\"no\"/g' $SYSCONFIG
	sed -i '/sysconfig=\"USE_INTERNAL_IR\"/s/value=\".*\"/value=\"no\"/' $VDRSETUPXML
	
	#INVERT_SIGNAL="no"
	sed -i 's/^INVERT_SIGNAL=.*"/INVERT_SIGNAL=\"no\"/g' $SYSCONFIG
	sed -i '/sysconfig=\"INVERT_SIGNAL\"/s/value=\".*\"/value=\"no\"/' $VDRSETUPXML
	
	if [ -f $REMOTES/lircd.conf ] && [ $REMOTES/remote.conf.$FB_Model ]; then
	    rm /etc/lircd.conf
	    rm /etc/vdr/remote.conf
	    ln -s $REMOTES/lircd.conf /etc/lircd.conf
	    ln -s $REMOTES/remote.conf.$FB_Model /etc/vdr/remote.conf
	else
		echo 
		echo "Es ist ein Fehler aufgetreten:"
		echo 
		echo "$REMOTES/lircd.conf und $REMOTES/remote.conf.$FB_Model sind nicht vorhanden..."
		echo 

	fi

}

function activate_plugin() {
	if [ $(grep -c '^PLUGINLIST.*P'$1'' < $SYSCONFIG) -lt 1 ]; then
		sed -i 's/^PLUGINLIST="/& \\"-P'$1' \\"/g' $SYSCONFIG
	fi
	sed -i '/plugin name=\"'$1'\"/s/active=\"no\"/active=\"yes\"/' $VDRSETUPXML
}

	
function activate_Module() {
	# Diese Funktion macht nur Sinn, wenn das zu ladende Modul wie ein DVB-Modul geladen wird.
	. $DRIVERCONFIG
	#if ! echo $MODULES | grep -w $1 >/dev/null 2>/dev/null; then
	#	sed -i '/^MODULES=/ a\'$1'' $DRIVERCONFIG
	#fi
	echo $1 >> $DRIVERCONFIG
}

function scanpvr {
	echo "---> Es wird eine Kanalliste mit w_pvrscan fuer den analogen Empfang erstellt.."
	echo ""
	modprobe -r ivtv_fb
	modprobe -r ivtv 
	sleep 2
	modprobe ivtv
	sleep 2
	echo "" /etc/vdr/channels/PVR.conf
	w_pvrscan -p pvrinput > /etc/vdr/channels/PVR.conf
	sleep 2
	echo "---> Die Kanalliste PVR wird aktiviert ..."	
	ConfigVarName="CHANNELLIST"
	ConfigValue="PVR"
	SetupConfigs	
}

function detect_pvr350 {
	found_pvr350="false"
	modprobe ivtv
	if [ $(dmesg | grep -c PVR-350) -gt 0 ]; then
	    found_pvr350="true"
	fi
	if [ -n "$(lspci -n | grep -w 4444:0803)" ]; then
	    found_pvr350="true"
	fi
}

function main() {
	detect_pvr350
	if [ $found_pvr350 = "true" ] || [ $force = "true" ]; then
		echo ""
		echo "***** easyVDR wird nun fuer eine  PVR-350 als Ausgabegeraet konfiguriert. *****"
		echo ""
		stop_vdr
		echo ""
		echo "---> Das PVR350-Plugin wird aktiviert ..."
		activate_plugin pvr350
		echo "---> Das pvrinput-Plugin wird aktiviert ..."
		activate_plugin pvrinput
		echo "---> Der Anti-Flickering-Workaround wird aktiviert ..."
		
		ConfigVarName="pvrinput.AntiFlickering"
		ConfigValue="1"
		SetSetupConf 
		
		echo "---> Andere Ausgabe-Plugins werden deaktiviert..."
		
		#PluginName="em84xx"
		DeactivatePlugin em84xx
		
		#PluginName="softdevice"
		DeactivatePlugin softdevice
		
		#PluginName="xine"
		DeactivatePlugin xine
		
		#PluginName="xineliboutput"
		DeactivatePlugin xineliboutput
		
		#PluginName="dxr3"
		DeactivatePlugin dxr3
		echo "---> Die Module ivtv und ivtv-fb werden aktiviert...."
		activate_Module ivtv_fb
		activate_Module ivtv
		chk_lspci "0300: 8086"
		if [ $? -eq 0 ];then
			echo "---> Das Modul i810fb wird aktiviert...."
			activate_Module i810fb
		fi
		if [ $config_fb = "true" ]; then
		    activate_remote
		fi
		
		if [ $scan_pvr = "true" ]; then
		    scanpvr
		fi
		
		echo ""
		echo "***** Die Konfiguration von easyVDR fuer eine PVR-350 ist abgeschlossen *****"
		echo
		echo "      have a lot of fun :)"
		echo ""
		sleep 2
		start_vdr
	else
		echo ""
		echo "Sorry: Es wurde keine PVR-350 gefunden.."
		echo "Das System wurde daher nicht fuer eine PVR-350 konfiguriert."
		echo ""
	fi
}

main