#!/bin/bash # description: RR4360 PSU fix # Runs for 10 attempts to try resolve PSU failure messages get_inb="http://ntgr.support/tools/inb" get_outb="http://ntgr.support/tools/outb" inb="/etc/frontview/support/inb" outb="/etc/frontview/support/outb" attempts=0 debug=0 if [[ "$debug" -gt 0 ]]; then usrmsg="printf" else usrmsg="#" fi get_tools() { if test -f "$inb" && test -f "$outb"; then $usrmsg "Tools exist - not acquiring again." else $usrmsg "Acquiring latest tools... " if ! test -f "$inb"; then $usrmsg "Missing inb; downloading now." wget -q "$get_inb" -O "$inb" fi if ! test -f "$outb"; then $usrmsg "Missing outb; downloading now." wget -q "$get_outb" -O "$outb" fi fi chmod +x "$inb" "$outb" } check_problem() { $usrmsg "Querying the SMBus for its current status..." problem=$($inb 0xf00f) validate_problem } validate_problem() { if [[ "$problem" -ne 7 ]]; then $usrmsg " SMBus reporting invalid value; reported: %s" "$problem" fix else $usrmsg " The SMBus is currently operating as normal. Exiting script." exit 0 fi } fix() { attempts=$((attempts+1)) $usrmsg " Attempt %s at fixing the SMBus..." "$attempts" sleep 1 $usrmsg " (#3)... " "$outb" 0xf00f 3 2>/dev/null sleep 1 $usrmsg " (#7)... " "$outb" 0xf00f 7 2>/dev/null sleep 1 $usrmsg " fix applied. \n" verify_fix } verify_fix(){ if [[ "$attempts" -lt 10 ]]; then check_problem else $usrmsg "Attempted to recover this %s times... seek alternative recovery method." "$attempts" exit 1 fi } get_tools check_problem