#!/bin/bash

# /usr/bin/easyvdr-config-pvr350.sh
#
# Dieses Skript konfiguriert easyVDR 0.4.x für denpvr350 Betrieb
# Version: alpha1

version="0.0.1"


VDRSETUPXML="/etc/vdr/plugins/setup/vdr-setup.xml"
SYSCONFIG="/etc/vdr/sysconfig"
DRIVERCONFIG="/etc/vdr/driverconfig"
vdr_running="false"
COMMANDSCONF="/etc/vdr/commands.conf"
SETUPCONF="/etc/vdr/setup.conf"
PVRCHANNELS="/etc/vdr/channels/Hauppauge-PVR.conf"
force="false"
config_fb="false"
scan_pvr="false"

function usage ()
{
        echo ""
        echo "Dies ist easyvdr-config-pvr350 Version $version"
        echo ""
        echo "Optionen:"
        echo "        -f       Deaktivert die Hardwareerkennung"
        echo "        -fb      Die original Hauppage FB wird konfiguriert"
	echo "        -ch      Erstellt eine passende Kanalliste"
	echo "                 Die erstellte Kanalliste muss jedoch ueber das OSD" 
	echo "                 von easyVDR aktiviert werden"
        echo ""
}

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

function stop_vdr() {
# Ggf. VDR beenden	
	if [ -e /var/run/vdr.pid ]; then
		vdr_running="true"
    	PID=`cat /var/run/vdr.pid` 
      	if [ x"$PID" != "x" ]; then
        	stopvdr >/dev/null 2>/dev/null
      	fi
	fi
}



function activate_remote() {

	#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 /etc/lircd.conf.all ]; then
		cp /etc/lircd.conf.all /etc/lircd.conf;
	else
		echo ""
		echo "Hinweis:"
		echo ""
		echo "Die Datei /etc/lircd.conf.all wurde nicht gefunden"
		echo "und konnte daher nicht in /etc/lircd.conf umbenannt werden."
		echo ""
		echo "Sie benoetigen daher eventuell noch eine passende /etc/lircd.conf"
		echo "damit Ihre Hauppauge FB funktioniert"
	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 deactivate_plugin() {
	# Beim Aufruf dieser Funktion wird das zu deaktivierende Plugin übergeben	
	sed -i '/PLUGINLIST=/s/\\"-P'$1' \\"//' $SYSCONFIG
	sed -i '/plugin name=\"'$1'\"/s/active=\"yes\"/active=\"no\"/' $VDRSETUPXML
}
	
function activate_Module() {
	# Diese Funktion macht nur Sinn, wenn das Modul wie ein DVB-Modul geladen wird.
	. $DRIVERCONFIG
	if ! echo $MODULES | grep $1 >/dev/null 2>/dev/null; then
		sed -i '/^MODULES=/ a\'$1'' $DRIVERCONFIG
	fi
}

function scanpvr {
	modprobe ivtv
	w_pvrscan -p pvrinput > $PVRCHANNELS
	echo ""
	echo ""
	echo "Hinweis:"
	echo ""
	echo "Falls der Scan erfolgreich war,"
	echo "so koennen Sie die Kannalliste ueber das OSD aktivieren."
	echo ""
}

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 ""
		echo "---> Der VDR-Prozess wird falls notwendig beendet..."	
		stop_vdr
		sleep 3
		echo ""
		echo "---> Das PVR350-Plugin wird aktiviert ..."
		activate_plugin pvr350
		echo "---> Das pvrinput-Plugin wird aktiviert ..."
		activate_plugin pvrinput
		echo "---> Andere Ausgabe-Plugins werden deaktiviert..."
		deactivate_plugin em84xx
		deactivate_plugin softdevice
		deactivate_plugin em84xx-eject
		deactivate_plugin dxr3
		echo "---> Die Module ivtv und ivtv-fb werden aktiviert...."
		activate_Module ivtv
		activate_Module ivtv_fb
		if [ $scan_pvr = "true" ]; then
		    echo "---> Es wird eine Kanalliste mit w_pvrscan fuer den analogen Empfang erstellt.."
		    echo ""
		    echo ""
		    scanpvr
		fi
		if [ $config_fb = "true" ]; then
		    echo "---> Die original Hauppage FB wird konfiguriert...."
		    activate_remote		    
		fi
		echo ""
		echo "***** Die Konfiguration von easyVDR fuer eine PVR-350 ist abgeschlossen *****"
		echo ""
		
		#Den VDR wieder starten, falls er gestartet war...
		if [ "x$vdr_running" = "xtrue" ]; then
			echo "Der VDR-Prozess wird gleich wieder gestartet ..."
			startvdr >/dev/null 2>/dev/null
		fi
	else
		echo "" 
		echo "Sorry: Es wurde keine PVR-350 gefunden.."
		echo "Das System wurde daher nicht fuer eine PVR-350 konfiguriert."
		echo ""
	fi
}

main
