#!/bin/sh /etc/rc.common
################################################################################
#                                                                              #
# Polish Koders Team 2010                                                      #
#                                                                              #
# contact: http://pkteam.pl                                                    #
#                                                                              #
################################################################################
#
# CAM general init script
# version $Revision: 486 $ $Date: 2011-03-31 20:21:59 +0200 (czw) $
#

START=40

EXTRA_COMMANDS="status config"
EXTRA_HELP=$(echo -e "	config	<cam-name> Set new CAM\n \
	status	Show current CAM status")

CONF_EMUMAN="config.plugins.emuman"

CONF_DIR="/var/keys"

DEFAULT_FAKECA1="no"	#Set in EmuManager plugin

CAM=$(config_get "${CONF_EMUMAN}.cam")


# Prepare cam configuration arguments 
#
prepare_conf() { #cam binary
	case "$1" in
	  camd3*)	CONF="${CONF_DIR}/camd3.config";;
	  incubuscamd*)	;;
	  mbox*)	CONF="${CONF_DIR}/mbox.cfg";;
	  mgcamd*)	;;
	  gbox*)	;;
	  mpcs*)	CONF="-c ${CONF_DIR}";;
	  ufs910camd*)	;;
	  newcs*)	CONF="-C ${CONF_DIR}/newcs.conf";;    #FIXME do zrobienia 
	  oscam*)	CONF="-b -c ${CONF_DIR}/";;           #FIXME do zrobienia
	  vizcam*)	CONF="-b -c ${CONF_DIR}/";;           #FIXME do zrobienia
	  *)		help
	  		exit 1;;
	esac
	echo "${CONF}"
}

# Prepare cam enviroment variables
#
prepare_env() {
	CMDENV="PATH=/var/emu "
	fakeCA1=$(config_get "${CONF_EMUMAN}.fakeCA1")
	fakeCA1="${fakeCA1:-${DEFAULT_FAKECA1}}"
	if [ "no" != "${fakeCA1}" ]; then
	  CMDENV="${CMDENV}__FAKED_CA1_=/dev/dvb/adapter0/${fakeCA1} "
	  CMDENV="${CMDENV}LD_PRELOAD=/usr/lib/libadapre.so "
	fi
	echo "${CMDENV}"
}

cleanup() {
	tmp="share.onl share.info \
	     ecm.info pid.info mbox.ver \
	     mpcs.mem mpcs.log pmt.tmp"
	for i in $tmp; do
	  rm -rf /tmp/$i
	done
}

start() {
	if [ -z "${CAM}" ]; then
	  echo "Cam not configured"
	  return
	fi

	local pids=$(pidof ${CAM})
	if [ ! -z "${pids}" ]; then
	  echo "${CAM} alredy running with pids: [${pids}]"
	  return
	fi
	
	cleanup
	echo "Starting ${CAM}"
	echo "Starting ${CAM}" > /dev/dbox/fp0
	eval "$(prepare_env)$CAM $(prepare_conf $CAM) > /dev/null"
}

stop() {
	if [ -z "${CAM}" ]; then
	  echo "Cam not configured"
	  return
	fi
	echo "Stopping ${CAM}"
	killall -9 "${CAM}" 2> /dev/null
	cleanup
}

status() {
	if [ -z "${CAM}" ]; then
	  echo "Cam not configured"
	  return
	fi

	local pids=$(pidof ${CAM})
	if [ -z "${pids}" ]; then
	  echo "Not running ${CAM}"
	else
	  echo "Running ${CAM}: [${pids}]"
	fi
}

config() {
	if [ -z "$1" ]; then
	  help
	  return 1
	fi
	config_set "${CONF_EMUMAN}.cam" "$1"
	echo "CAM $1 configured"
}
