#!/bin/bash
# Usage of this utility
function usage() {
	echo "usage: power-util mb [on|off|status|cycle|reset]";
	echo "       power-util sled-cycle"
}

GPIO_BASE=$(cat /sys/class/gpio/gpio*/base)
PWR_GPIO=$(($GPIO_BASE + 32 + 3))
BMC_RDY_GPIO=$(($GPIO_BASE + 144 +1))
PWR_GOOD=$(($GPIO_BASE + 8 + 6))
PWR_RESET=$(($GPIO_BASE + 33))

power_off() {
	echo "Shutting down Server $2"
	echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
	sleep 1
	echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
	sleep 6
	echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
}

power_on() {
	echo "Powering on Server $2"
	echo 0 > /sys/class/gpio/gpio${BMC_RDY_GPIO}/value
	echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
	echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
	sleep 1
	echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
}

power_status() {
	st=$(cat /sys/class/gpio/gpio${PWR_GOOD}/value)
	if [ "$st" == "0" ]; then
		echo "off"
	else
		echo "on"
	fi
}

power_reset() {
	echo "Reset on server $2"
	echo 0 > /sys/class/gpio/gpio${PWR_RESET}/value
  sleep 0.1
	echo 1 > /sys/class/gpio/gpio${PWR_RESET}/value
}

sled_cycle() {
	i2cset -y 7 0x45 0xd9 c
}

if [ $# -lt 2 ]; then
	echo "Total number of parameter=$#"
	echo "Insufficient parameter"
	usage;
	exit 0;
fi

if [ $1 == "sled-cycle" ]; then
	sled_cycle
fi

if [ $1 != "mb" ]; then
	echo "Invalid parameter1=$1"
	usage;
	exit 0;
fi

if [ $2 = "on" ]; then
  if [ $(power_status) == "off" ]; then
	  power_on
  fi
elif [ $2 = "off" ]; then
  if [ $(power_status) == "on" ]; then
	  power_off
  fi
elif [ $2 == "cycle" ]; then
  if [ $(power_status) == "on" ]; then
	  power_off
  else
    echo "WARNING: Powering on server"
  fi
	power_on
elif [ $2 == "reset" ]; then
  if [ $(power_status) == "on" ]; then
	  power_reset
  else
    echo "ERROR: Server not powered on"
  fi
elif [ $2 == "status" ]; then
	power_status
else
	echo "Invalid parameter2=$2"
	usage;
fi

exit 0;
