#!/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 usrmsg(){ if [[ "$debug" -gt 0 ]]; then printf "$*" fi } get_tools() { if test -f "$inb" && test -f "$outb"; then usrmsg "Tools exist - not acquiring again.\n" else usrmsg "Acquiring latest tools... \n" if ! test -f "$inb"; then usrmsg "Missing inb; downloading now.\n" wget -q "$get_inb" -O "$inb" fi if ! test -f "$outb"; then usrmsg "Missing outb; downloading now.\n" wget -q "$get_outb" -O "$outb" fi fi chmod +x "$inb" "$outb" } check_problem() { usrmsg "Querying the SMBus for its current status...\n" problem=$($inb 0xf00f) validate_problem } validate_problem() { if [[ "$problem" -ne 7 ]]; then usrmsg " SMBus reporting invalid value; reported: %s\n" "$problem" fix else usrmsg " The SMBus is currently operating as normal. Exiting script.\n" 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.\n" "$attempts" exit 1 fi } get_tools check_problem