|
|
|
@ -3,95 +3,94 @@ |
|
|
|
|
# Copyright (C) 2010 Vertical Communications |
|
|
|
|
|
|
|
|
|
fs_wait_for_key () { |
|
|
|
|
local timeout=$3 |
|
|
|
|
local timer |
|
|
|
|
local do_keypress |
|
|
|
|
local keypress_true="$(mktemp)" |
|
|
|
|
local keypress_wait="$(mktemp)" |
|
|
|
|
local keypress_sec="$(mktemp)" |
|
|
|
|
if [ -z "$keypress_wait" ]; then |
|
|
|
|
keypress_wait=/tmp/.keypress_wait |
|
|
|
|
touch $keypress_wait |
|
|
|
|
fi |
|
|
|
|
if [ -z "$keypress_true" ]; then |
|
|
|
|
keypress_true=/tmp/.keypress_true |
|
|
|
|
touch $keypress_true |
|
|
|
|
fi |
|
|
|
|
if [ -z "$keypress_sec" ]; then |
|
|
|
|
keypress_sec=/tmp/.keypress_sec |
|
|
|
|
touch $keypress_sec |
|
|
|
|
fi |
|
|
|
|
local timeout=$3 |
|
|
|
|
local timer |
|
|
|
|
local do_keypress |
|
|
|
|
local keypress_true="$(mktemp)" |
|
|
|
|
local keypress_wait="$(mktemp)" |
|
|
|
|
local keypress_sec="$(mktemp)" |
|
|
|
|
if [ -z "$keypress_wait" ]; then |
|
|
|
|
keypress_wait=/tmp/.keypress_wait |
|
|
|
|
touch $keypress_wait |
|
|
|
|
fi |
|
|
|
|
if [ -z "$keypress_true" ]; then |
|
|
|
|
keypress_true=/tmp/.keypress_true |
|
|
|
|
touch $keypress_true |
|
|
|
|
fi |
|
|
|
|
if [ -z "$keypress_sec" ]; then |
|
|
|
|
keypress_sec=/tmp/.keypress_sec |
|
|
|
|
touch $keypress_sec |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT |
|
|
|
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1 |
|
|
|
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT |
|
|
|
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1 |
|
|
|
|
|
|
|
|
|
[ -n "$timeout" ] || timeout=1 |
|
|
|
|
[ $timeout -ge 1 ] || timeout=1 |
|
|
|
|
timer=$timeout |
|
|
|
|
lock $keypress_wait |
|
|
|
|
{ |
|
|
|
|
while [ $timer -gt 0 ]; do |
|
|
|
|
echo "$timer" >$keypress_sec |
|
|
|
|
timer=$(($timer - 1)) |
|
|
|
|
sleep 1 |
|
|
|
|
done |
|
|
|
|
lock -u $keypress_wait |
|
|
|
|
rm -f $keypress_wait |
|
|
|
|
} & |
|
|
|
|
|
|
|
|
|
echo "Press the [$1] key and hit [enter] $2" |
|
|
|
|
echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level" |
|
|
|
|
# if we're on the console we wait for input |
|
|
|
|
{ |
|
|
|
|
while [ -r $keypress_wait ]; do |
|
|
|
|
timer="$(cat $keypress_sec)" |
|
|
|
|
|
|
|
|
|
[ -n "$timer" ] || timer=1 |
|
|
|
|
timer="${timer%%\ *}" |
|
|
|
|
[ $timer -ge 1 ] || timer=1 |
|
|
|
|
do_keypress="" |
|
|
|
|
{ |
|
|
|
|
read -t "$timer" do_keypress |
|
|
|
|
case "$do_keypress" in |
|
|
|
|
$1) |
|
|
|
|
echo "true" >$keypress_true |
|
|
|
|
;; |
|
|
|
|
1 | 2 | 3 | 4) |
|
|
|
|
echo "$do_keypress" >/tmp/debug_level |
|
|
|
|
;; |
|
|
|
|
*) |
|
|
|
|
continue; |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|
[ -n "$timeout" ] || timeout=1 |
|
|
|
|
[ $timeout -ge 1 ] || timeout=1 |
|
|
|
|
timer=$timeout |
|
|
|
|
lock $keypress_wait |
|
|
|
|
{ |
|
|
|
|
while [ $timer -gt 0 ]; do |
|
|
|
|
echo "$timer" >$keypress_sec |
|
|
|
|
timer=$(($timer - 1)) |
|
|
|
|
sleep 1 |
|
|
|
|
done |
|
|
|
|
lock -u $keypress_wait |
|
|
|
|
rm -f $keypress_wait |
|
|
|
|
} |
|
|
|
|
done |
|
|
|
|
} |
|
|
|
|
lock -w $keypress_wait |
|
|
|
|
} & |
|
|
|
|
|
|
|
|
|
echo "Press the [$1] key and hit [enter] $2" |
|
|
|
|
echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level" |
|
|
|
|
# if we're on the console we wait for input |
|
|
|
|
{ |
|
|
|
|
while [ -r $keypress_wait ]; do |
|
|
|
|
timer="$(cat $keypress_sec)" |
|
|
|
|
|
|
|
|
|
keypressed=1 |
|
|
|
|
[ "$(cat $keypress_true)" = "true" ] && keypressed=0 |
|
|
|
|
[ -n "$timer" ] || timer=1 |
|
|
|
|
timer="${timer%%\ *}" |
|
|
|
|
[ $timer -ge 1 ] || timer=1 |
|
|
|
|
do_keypress="" |
|
|
|
|
{ |
|
|
|
|
read -t "$timer" do_keypress |
|
|
|
|
case "$do_keypress" in |
|
|
|
|
$1) |
|
|
|
|
echo "true" >$keypress_true |
|
|
|
|
;; |
|
|
|
|
1 | 2 | 3 | 4) |
|
|
|
|
echo "$do_keypress" >/tmp/debug_level |
|
|
|
|
;; |
|
|
|
|
*) |
|
|
|
|
continue; |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|
lock -u $keypress_wait |
|
|
|
|
rm -f $keypress_wait |
|
|
|
|
} |
|
|
|
|
done |
|
|
|
|
} |
|
|
|
|
lock -w $keypress_wait |
|
|
|
|
|
|
|
|
|
rm -f $keypress_true |
|
|
|
|
rm -f $keypress_wait |
|
|
|
|
rm -f $keypress_sec |
|
|
|
|
keypressed=1 |
|
|
|
|
[ "$(cat $keypress_true)" = "true" ] && keypressed=0 |
|
|
|
|
|
|
|
|
|
return $keypressed |
|
|
|
|
rm -f $keypress_true |
|
|
|
|
rm -f $keypress_wait |
|
|
|
|
rm -f $keypress_sec |
|
|
|
|
|
|
|
|
|
return $keypressed |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
failsafe_wait() { |
|
|
|
|
FAILSAFE= |
|
|
|
|
grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE |
|
|
|
|
if [ "$FAILSAFE" != "true" ]; then |
|
|
|
|
pi_failsafe_net_message=true |
|
|
|
|
preinit_net_echo "Please press button now to enter failsafe" |
|
|
|
|
pi_failsafe_net_message=false |
|
|
|
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true |
|
|
|
|
[ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -" |
|
|
|
|
[ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe |
|
|
|
|
fi |
|
|
|
|
FAILSAFE= |
|
|
|
|
grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE |
|
|
|
|
if [ "$FAILSAFE" != "true" ]; then |
|
|
|
|
pi_failsafe_net_message=true |
|
|
|
|
preinit_net_echo "Please press button now to enter failsafe" |
|
|
|
|
pi_failsafe_net_message=false |
|
|
|
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true |
|
|
|
|
[ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -" |
|
|
|
|
[ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
boot_hook_add preinit_main failsafe_wait |
|
|
|
|
|
|
|
|
|