#!/bin/sh

# read and set time from RTC

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

retry_count=0

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

while true
do
	if grep -Fq -- ds1339 /sys/bus/i2c/devices/*-0068/name 2>/dev/null; then
		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
	fi
	
	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
