#!/bin/bash
#
# $Id: set_timer 908 2008-11-23 13:29:13Z tiber $
#
# This script was made by Hans-Hermann Redenius (redenius@gmx.de)
#
# This file is for bioses nvram-wakeup couldn't handle, because there is
# no possibility to change the Wake on RTC time in the nvram
# The wake up time must be set to 23:59:59 the day must be set to 31
# if your board supports a month setting for the wakeup, set it to July
#
# The System should not update the hardware clock in the shutdown process.
# In Debian Woody set HWCLOCKACCESS=no in /etc/default/rcS
#
# in vdrshutdown replace:
#
# $NVRAMCMD -ls $1
#
# by
#
# $PATH_TO_SET_TIMER/set_timer $1 $2
#
# and add the following line to your start script before vdr is started
#
# $PATH_TO_SET_TIMER/set_timer
#
# The time command from nvram-wakeup is needed (set the path bwlow)
#
# Thanks to Sergei Haller for nvram-wakeup and the time and ideas to develop
# this script
# programs to use:
HWCLOCK=/sbin/hwclock
TIME=/usr/local/sbin/time
# files to use:
TIME_DIFF=/video/time_diff
if [ ! -x $HWCLOCK ] ; then
echo "$0 needs hwclock"
exit 1
fi
if [ ! -x $TIME ] ; then
echo "$0 needs the time command from nvram-wakeup"
exit 1
fi
# current time
cur_time=`date +%s`
# how many seconds before the next event the system should be booted
boot_time=300
# if a time_diff file exists the clock is set to the wakeup time and
# must be fixed before any further action
#
if [ -f $TIME_DIFF ] ; then
# the difference stored
time_diff=`cat $TIME_DIFF`
# add the difference to the curent time and change it in the date format
set_time=$(( $cur_time + $time_diff ))
set_date=`$TIME $set_time | grep "^(local" | cut -f2- -d')' `
# restore the correct time and if all is right remove the $TIME_DIFF file
# because there is no longer a difference
$HWCLOCK --set --date "$set_date" && $HWCLOCK --hctosys && rm $TIME_DIFF
fi
# if there is a parameter given, it is assumed the system schould boot
# after $boot_time seconds
if [ -n "$2" ] ; then
if [ $1 -eq 0 ] ; then # no timer present
sleep_time=$(( 61 * 24 * 60 * 60 - 1 + $boot_time )) # 61 days - 1s
# + boot_time
else # timer present
if [ $2 -ge $(( $boot_time + 30 )) ] ; then # need 30 seconds for shutdown
sleep_time=$2
else
sleep_time=$(( $boot_time + 30 ))
# or exit 1 so vdrshutdown would do nothing
# because the next timer is less than boot_time + 30 seconds in the future
# or currently recording
# I suggest a short timeout, because the user really asked for it
fi
fi
# wakeup time
wake_time=996616799 # date -d "Jul 31 23:59:59 2001" +%s
# calculate the right time and the time difference
set_time=$(( $wake_time - $sleep_time + $boot_time ))
time_diff=$(( $cur_time - $set_time ))
# convert time to date format
set_date=`$TIME $set_time | grep "^(local" | cut -f2- -d')' `
# set date and if it is correct write the time_diff file
# date --set="$set_date" && \ # add this if a script updates the hwclock
$HWCLOCK --set --date "$set_date" && echo $time_diff > $TIME_DIFF
fi