#!/bin/bash
. /etc/systemconfig
. /etc/profile
echo $@ >/tmp/audio.call

BASE=""
. /etc/profile
TESTFILE="/usr/share/sounds/alsa/Front_Center.wav"
OSSinstalled="false"
BLACKLIST=/etc/modprobe.d/soundconfig_blacklist.conf

echo "---------------------------------------"


function testaudio () {

ossplay  -d$AUDIODEVICE $TESTFILE

}

function load_alsa() {
    echo "Loading ALSA ..."
    remove_service.sh alsa-utils 1> /dev/null 2> /dev/null
    KER=`uname -r`
    cd /lib/modules/$KER/
    echo "   uncompressing ALSA modules"
    tar -xf sound-preoss.tar.bz2
#    echo "   installing alsa-lib"
    #pacman -Sf --noconfirm  alsa-lib

    echo "   uninstalling oss"
    pacman -R --noconfirm oss

    echo    "triggering udev module load"
    depmod -a
    cd - > /dev/null
    #udevadm trigger
    udevadm settle
    udevadm trigger


    add_service.sh alsa-utils

}


function unload_alsa () {
    echo "unloading ALSA ..."
#kill $(lsof -t /dev/dsp* /dev/audio* /dev/mixer* /dev/snd/*) && modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
    sv stop alsa-utils
    remove_service.sh alsa-utils
    rm -rf /dev/adsp*
    rm -rf /dev/snd/*
    rm -rf /dev/audio
    modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
}

function unload_oss {
    echo "unloading OSS ..."
    sv stop oss
    soundoff
    rm -rf /dev/dsp*
    rm -rf /dev/oss*
    rm -rf /dev/sndstat
    remove_service.sh oss
    rm -f $BLACKLIST
}

function installOSS {
    echo "installing OSS ..."
    pacman -Q oss 2>/dev/null
    if [  ! $? = 0 ]
    then
        pacman --noconfirm -Sf oss
    fi
    soundon
    add_service.sh oss
    echo "install soundcore /bin/false" >$BLACKLIST


}


function SYNCXINE {
echo "modify xine config file"
    if [ -f /data/home/mythtv/.xine/config ]
    then
        cp -f /data/home/mythtv/.xine/config  $TEMPLATES/xine.config
    else
        cp $TEMPLATES/xine.config.template $TEMPLATES/xine.config
    fi

    if [ x$Audiotype = xOSS ]
    then
       DEVICENUMBER=`echo $SoundDevice|awk -F/ ' { print $3  } '|tr -d dsp `
        sed -e "s/^.*audio.driver.*$/audio.driver:oss/" \
               -e "s/^.audio.device.oss_device_name.*$/audio.device.oss_device_name:\/dev\/dsp/" \
               -e "s/^.audio.devic.oss_device_number.*$/audio.device.oss_device_number:$DEVICENUMER/" \
               -e "s/^.*audio.output.speaker_arrangement:.*$/Audio.output.speaker_arrangement:PassThrough/" \
                $TEMPLATES/xine.config > /data/home/mythtv/.xine/config
    else
        cp $TEMPLATES/xine.config /data/home/mythtv/.xine/config
    fi

}

function SYNCMPLAYER {
echo "modify mplayer not implmented yet"
}

function SYNCMYTHMUSIC {
echo "sync mythmusic"
$MV_ROOT/bin/restore_default_settings.sh -c MUSICMYTH
}

function SYNCMYTHFRONTEND {
echo "sync mythfrontend"
$MV_ROOT/bin/restore_default_settings.sh -c MUSICFRONT
}


function checkOSSinstalled () {
 echo "Checking if OSS is installed"
 ossinfo |grep Version |grep -q OSS >/dev/null
 resultcode=$?

 if [ $resultcode = 0 ]
 then
    OSSinstalled='true'
    echo "   OSS is loaded"
 else
    OSSinstalled='false'
    echo "   OSS is NOT loaded"
 fi
}

function sound_config_system {
    
    SYNCMYTHFRONTEND
#    if [ x$syncXine = x1 ]
#    then
#          SYNCXINE
#    fi
#    if [ x$syncMplayer = x1 ]
#    then
#          SYNCMPLAYER
#    fi
#    if [ x$syncMythMusic = x1 ]
#    then
#          SYNCMYTHMUSIC
#    fi
#    if [ x$syncMythFrontend = x1 ]
#    then
#          SYNCMYTHFRONTEND
#    fi

}

function loadsound (){
        checkOSSinstalled
        if [  x$AUDIOTYPE = xOSS  -o   x$AUDIOTYPE = xoss ]
            then
                while [ $OSSinstalled = "false" ]
                do
                    unload_alsa
                    if [ -e /tmp/.alsatest ]
                    then
                        rm /tmp/.alsatest
                    fi
                    installOSS
                    checkOSSinstalled
                done
          #  fi
        else
            touch /tmp/.alsatest
            unload_oss
            load_alsa
            #load_alsa
            rm /tmp/.alsatest

        fi

}




#####################MAIN PROGRAM##########################

declare -r OPTSTRING="i:t:d:"

if [ $# -eq 0 ]
then
    echo "Valid options are:"
    echo "  -i  (oss|alsa)   oss or alsa subsystem  "
    echo "  -t  (test|real|LOAD)   "
    echo "  -d device"
    exit 1
fi




while getopts "$OPTSTRING"  SWITCH
do
    case $SWITCH in
          \?)  echo "unknown option"
                      exit 11 ;;
            i)   #echo "$SWITCH"  "$OPTARG"
                    AUDIOTYPE="$OPTARG"
                    ;;
            d) #echo "$SWITCH"  "$OPTARG"
                    AUDIODEVICE=$OPTARG
                    ;;
            t) #echo "$SWITCH"  "$OPTARG"
                SOUNDOPTYPE="$OPTARG"
                if  [ x"$OPTARG" = xtest ]
                then
                    TEST=true
                else
                    TEST=false
                fi


                    ;;

            esac
done




case $SOUNDOPTYPE in
    REAL|real )
                   # loadsound
                    sound_config_system
        ;;
    test|TEST)
                echo $@ > /tmp/audio.test
                #loadsound
                 if [  x$AUDIOTYPE = xOSS  -o   x$AUDIOTYPE = xoss ]
                then
                    echo "testing OSS  $AUDIODEVICE "
                    ossplay  -d$AUDIODEVICE $TESTFILE
                else
                    echo "testing ALSA $AUDIODEVICE "
                    echo aplay --device=$AUDIODEVICE $TESTFILE
                    aplay -d=$AUDIODEVICE $TESTFILE
                fi

        ;;

    LOAD|load)
                        loadsound
        ;;
    esac


exit 0