#!/bin/sh

# read and set time from RTC

I2CBUS=2
CHIP_ADDRESS=104
DATA_ADDRESS=16

REG_VALUE=166
REG_VALUE_HEX=0xa6

# seconds
retry_timeout=2
max_retries=10
rtc_dev=/dev/rtc0

retry_count=0

RTC_MODULE=rtc-ds1307

HWCLOCK_PROBLEM_FILE=/var/local/telem/errors/hwclock
I2C_PROBLEM_FILE=/var/local/telem/errors/i2c-bus

while true
do

    if [ -e /var/local/telem/rtc-charger-disabled ]; then
        REG_VALUE=0
        REG_VALUE_HEX=0x0
    fi

	CUR_VALUE=$(i2cget -y $I2CBUS $CHIP_ADDRESS $DATA_ADDRESS)
	_res=$?
	if [ "$_res" == "0" ]; then
		# i2cget successful

		if [ "$CUR_VALUE" != "$REG_VALUE_HEX" ]; then

			logger -s -p "user.warn" -t "$0" "RTC-DS1339 Trickle Charger not enabled"
			i2cset -y $I2CBUS $CHIP_ADDRESS $DATA_ADDRESS $REG_VALUE
			if [ "$?" != "0" ]; then
				logger -s -p "user.err" -t "$0" "Failed to enable RTC-DS1339 Trickle Charger"
			fi
		else
			logger -s -p "user.info" -t "$0" "RTC-DS1339 Trickle Charger already enabled"
		fi

		modprobe $RTC_MODULE
		
        sleep 1

		hwclock -s -u -f $rtc_dev
		res=$?
		if [ "$res" = "0" ]; then
			logger -s -p "user.info" -t "$0" "Successfully read time from RTC"
			! rm $HWCLOCK_PROBLEM_FILE 2> /dev/null
            ! rm $I2C_PROBLEM_FILE 2> /dev/null
			exit 0
		elif [ "$res" = "1" ]; then
			logger -s -p "user.err" -t "$0" "Probably invalid time in RTC"
			exit 1
		else
			logger -s -p "user.err" -t "$0" "Reading current time from RTC failed"
		fi
	else
		logger -s -p "user.err" -t "$0" "i2cget failed."
	fi

	modprobe -r $RTC_MODULE

	retry_count=$(($retry_count + 1))

	if [ $retry_count -gt $max_retries ]; then
		logger -s -p "user.err" -t "$0" "Too many retries, giving up."
		touch $HWCLOCK_PROBLEM_FILE
        touch $I2C_PROBLEM_FILE
		exit 0
	fi

	logger -s -p "user.err" -t "$0" "ReadHwClock retry $retry_count in $retry_timeout seconds"

	sleep $retry_timeout
done
