#!/bin/sh
fullPage=10 # How many pages before a full refresh?
### Do not edit below this line unless you know what you are doing ###
## Get cvm PID
read cvmPid < /var/run/cvm.pid
if [[ -z "$cvmPid" ]]; then
echo "cvm isn't running..."
exit 2
fi
pCount=0
fullPage="$(($fullPage-1))"
if [[ ! -e "/var/run/flashDis.pid" ]]; then
echo $$ > "/var/run/flashDis.pid"
else
echo "Flash disabler is already running"
exit 1
fi
trap "enableFlash ; rm /var/run/flashDis.pid ; exit" SIGINT SIGTERM
update() {
waitForEink
## Do some fancy stuff to make the page look decent
echo 19 0 > /proc/eink_fb/update_display
echo 0 > /sys/devices/platform/eink_fb.0/override_upd_mode
echo 18 0 > /proc/eink_fb/update_display
echo 1 > /sys/devices/platform/eink_fb.0/override_upd_mode
echo 19 4 > /proc/eink_fb/update_display
## Sets the next page turn to be a full refresh
let pCount+=1
if [[ "$pCount" -ge "$fullPage" ]]; then
echo 0 > /sys/devices/platform/eink_fb.0/override_upd_mode
echo 19 0 > /proc/eink_fb/update_display
pCount=0
fi
}
enableFlash() {
echo 0 > /sys/devices/platform/eink_fb.0/override_upd_mode
echo 19 0 > /proc/eink_fb/update_display
}
## Check if we need to look for a book/check if current book is open
bookCheck() {
if [[ -n "$fd" -a -n "$book" ]]; then
if [[ "$(realpath /proc/$cvmPid/fd/$fd 2> /dev/null)" == "$book" ]]; then
if [[ "$bookType" != "BAD" ]]; then
update
else
enableFlash
fi
else
book=""
bookType=""
findBook
fi
else
findBook
fi
}
## Check if cvm has a file descriptor open in /mnt/us/documents
findBook() {
enableFlash
fd="$(ls -l /proc/$cvmPid/fd/ | awk '/\/mnt\/us\/documents\// {print $9}')"
if [[ -n "$fd" ]]; then
book="$(realpath /proc/$cvmPid/fd/$fd 2> /dev/null)"
bookType="${book##*.}"
case $bookType in
[Mm][Oo][Bb][Ii]|[Pp][Dd][Ff]|[Pp][Rr][Cc]|[Aa][Zz][Ww]*|[Tt][Xx][Tt])
update
;;
*)
bookType="BAD"
;;
esac
fi
}
## Check if /var/log/messages has changed within the last second
waitForEink() {
c=1
while [[ "$(stat -c %Y /var/log/messages)" -lt "$time" -a "$c" -lt "10" ]]; do
let c+=1
usleep 100000
done
}
## Wait for page turn
while :; do
case "$(waitforkey)" in
191*|109*|104*|193*)
time="$(($(date +%s)-1))"
bookCheck
;;
esac
usleep 100000
done