mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| # Copyright (C) 2006-2010 OpenWrt.org
 | |
| # Copyright (C) 2010 Vertical Communications
 | |
| 
 | |
| fs_wait_for_key () {
 | |
|     local timeout=$3
 | |
|     local timer
 | |
|     local do_failsafe
 | |
|     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
 | |
| 
 | |
|     [ -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"
 | |
|     # 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_failsafe=""
 | |
| 	    {
 | |
| 		read -t "$timer" do_failsafe
 | |
| 		if [ "$do_failsafe" = "$1" ]; then
 | |
| 		    echo "true" >$keypress_true
 | |
| 		    lock -u $keypress_wait
 | |
| 		    rm -f $keypress_wait
 | |
|  		fi
 | |
| 	    }
 | |
| 	done
 | |
|     }
 | |
|     lock -w $keypress_wait
 | |
| 
 | |
|     trap - INT
 | |
|     trap - USR1
 | |
| 
 | |
|     keypressed=1
 | |
|     [ "$(cat $keypress_true)" = "true" ] && keypressed=0
 | |
|     rm -f $keypress_true
 | |
|     rm -f $keypress_wait
 | |
|     rm -f $keypress_sec
 | |
|     
 | |
|     return $keypressed
 | |
| }
 | |
| 
 | |
| failsafe_wait() {
 | |
|     FAILSAFE=
 | |
|     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 && export FAILSAFE
 | |
| }
 | |
| 
 | |
| boot_hook_add preinit_main failsafe_wait
 | |
| 
 |