#!/bin/zsh

readcard() {
   CARDID=`cat /dev/smartcard`
}

waitkey() {
	PID=$$
	# on utilise le SIGWINCH pour stopper le read mais pas le process
	(sleep 10 && kill -WINCH $PID > /dev/null 2>&1) &
	KILLER=$!
	if read < /dev/keypad; then
		kill $KILLER 2> /dev/null 2>&1
		KEY=$REPLY
		return 0
	else
		kill $KILLER 2> /dev/null 2>&1
		KEY=""
		return 1
	fi
}

lcdpmenu() {
	lcdwrite '[L*[2J'
	while :; do
	  readcard
	  lcdwrite "[HCard: $CARDID"
	  if waitkey; then
		if [ "$KEY" = "CardOut" ]; then
			lcdwrite '[2J'
			return 0		# leave protected menus
		else
			echo "REPLY2=$REPLY"
		fi
	  fi
	done
}

lcdmenu() {
	lcdwrite '[2J'
	while :; do
		readcard
		if [ "$CARDID" != "000000000" -a "$CARDID" != '?????????' ]; then
			lcdpmenu
		fi
		temp=`cut -f3 -d' ' /proc/sys/dev/sensors/*i2c*/temp* 2> /dev/null`
		lcdwrite "[HCPU Temp: $temp"
		lcdwrite "> Insert  Card <"
		if waitkey; then
			readcard
			if [ "$KEY" = "CardIn" ]; then
				if [ "$CARDID" = "000000000" -o "$CARDID" = '?????????' ]; then
		  			lcdwrite '[L+'; lcdwrite '[2J'
		  			(echo 'Erreur !!!'; echo 'Mauvaise carte') | lcdwrite
					while [ "$REPLY" != "CardOut" ]; do
						read < /dev/keypad
					done
		  			lcdwrite '[L-[2J'
				fi
			elif [ "$KEY" = "Esc" ]; then
		  			lcdwrite '[2J[L-[L*'
					return 0
			fi
		fi
	done
}

# main

lcdmenu

