summaryrefslogtreecommitdiff
path: root/recipes-core/multitech/reset-handler-test/reset-handler.sh
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-core/multitech/reset-handler-test/reset-handler.sh')
-rwxr-xr-xrecipes-core/multitech/reset-handler-test/reset-handler.sh134
1 files changed, 134 insertions, 0 deletions
diff --git a/recipes-core/multitech/reset-handler-test/reset-handler.sh b/recipes-core/multitech/reset-handler-test/reset-handler.sh
new file mode 100755
index 0000000..08e4e51
--- /dev/null
+++ b/recipes-core/multitech/reset-handler-test/reset-handler.sh
@@ -0,0 +1,134 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+PERSISTENT_DIR="/var/persistent/"
+ERASE_PERSISTENT="${PERSISTENT_DIR}/mts_do_erase_persistent"
+
+name="reset-handler"
+log="logger -t $name -s"
+pid="$$"
+
+off_leds_test() {
+ logger 'Turning LEDs to off'
+ leds=$(ls $led_dir/ | grep -v status)
+ nleds=$(echo "$leds" | wc -w)
+ # turn LEDs off
+ for led in $leds; do
+ echo none > $led_dir/$led/trigger
+ echo 0 > $led_dir/$led/brightness
+ done
+ logger 'Done LEDs off'
+}
+blink_leds_test() {
+ logger 'Turning LEDs to test'
+ led_dir=/sys/class/leds
+ # blink all programmable LEDs except status
+ # in reverse order
+ leds=$(ls $led_dir/ | grep -v status | awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }')
+ nleds=$(echo "$leds" | wc -w)
+
+ # turn LEDs off
+ for led in $leds; do
+ echo "timer" > $led_dir/$led/trigger
+ echo 0 > $led_dir/$led/delay_off
+ done
+
+
+ # make a pattern
+ int=1200
+ total=$(( int * (nleds+1) ))
+ on=$(( total - int ))
+ off=$(( total - on ))
+ for led in $leds; do
+ echo "$on" > $led_dir/$led/delay_on
+ echo "$off" > $led_dir/$led/delay_off
+ on=$(( total - int ))
+ off=$(( total - on ))
+ done
+ sleep 4
+ off_leds_test
+ logger 'Done Turning LEDs to test'
+}
+
+short_signal=10 # SIGUSR1
+long_signal=12 # SIGUSR2
+extralong_signal=1 # SIGHUP
+
+do_reboot() {
+ $log "Rebooting on button press"
+ sleep 1
+ reboot
+}
+
+do_shutdown() {
+ $log "Shutting down"
+ shutdown -h now
+}
+
+do_restore_defaults() {
+ $log "Removing /var/config contents"
+ rm -rf /var/config/*
+ $log "Setting restore defaults on reboot"
+ touch /var/config/force_defaults
+ if [[ -x /usr/bin/rmpasswd ]]
+ then
+ $log "Resetting passwords"
+ source rmpasswd
+ fi
+ if [[ -d ${PERSISTENT_DIR} ]] ; then
+ touch ${ERASE_PERSISTENT}
+ fi
+ $log "Blink LEDs"
+ sleep 1
+ reboot
+}
+
+log_exit() {
+ $log "Exiting on SIGTERM"
+ exit 0
+}
+
+idle_wait() {
+ pipe=/var/tmp/$name.fifo
+ rm -f $pipe
+ mkfifo -m 400 $pipe
+
+ # sneaky way to do nothing forever
+ while true; do
+ read < $pipe
+ done
+}
+
+trap blink_leds_test $short_signal
+trap blink_leds_test $long_signal
+trap blink_leds_test $extralong_signal
+trap log_exit TERM
+
+$log "Enabling reset-monitor for pid $pid"
+mts-io-sysfs store reset-monitor "$pid $short_signal $long_signal $extralong_signal"
+# set long press to 5 seconds for reset to defaults
+mts-io-sysfs store reset-monitor-intervals "5 30"
+# set up SIGPWR shutdown
+
+# wait for signals
+idle_wait
+