#! /usr/bin/bash # Set up help text command_name=$(basename $0) help_text="${command_name}: GDP Win 3 TDP management script This script checks and sets the TDP using intel_rapl Usage: ${command_name} COMMAND [ARGUMENTS] Command: check [ARG] Checks current TDP and prints it in watts set WATT Setts TDP to the requested number in watts help Prints this help text COMMAND help Prints help for specified command" check_help_text="${command_name} check [ARG] Example: ${command_name} check --detail Arguments: --detail, -d Prints PL2 as well as PL1 --help Prints this help text" set_help_text="${command_name} set WATT Example: ${command_name} set 15 Arguments: --help Prints this help text" print_help () { case $1 in "check") echo "$check_help_text" ;; "set") echo "$set_help_text" ;; *) echo "$help_text" ;; esac } print_unknown () { echo "Unknown command or incorrect arguments. Try \"${command_name} help\" or \"${command_name} COMMAND --help\"" } # End of help text # Retrieves current TDP and prints it check_tdp () { if [ "$1" == "--detail" ] || [ "$1" == "-d" ]; then echo "Placeholder" echo "Extra placeholder" elif [ -z "$1" ]; then echo "Placeholder" elif [ "$1" == "--help" ]; then print_help "check" else print_unknown fi } # Sets TDP to number provided as first argument set_tdp () { if [ -z "$1" ]; then print_unknown exit elif [ "$1" == "--help" ]; then print_help "set" exit fi if ! [[ $1 =~ ^-?[0-9]+$ ]]; then echo "TDP must be a plain number!)" elif [[ ! "$@" == *"--force"* ]] || [ $1 -lt 8 ] || [ $1 -gt 28 ]; then echo "TDP too high or low, should be between 8W and 28W" else #PL1 local watts=$1 local uwatts=$(expr $watts '*' 1000000) #PL2 local watts2=$(expr $watts + 2) local uwatts2=$(expr $watts2 '*' 1000000) echo $uwatts echo "PL1 is now ${watts}W (Long-term)" echo "PL2 is now ${watts2}W (Short-term)" fi } # Command handler case $1 in "check") check_tdp "${@:2}" ;; "set") set_tdp "${@:2}" ;; "help") print_help ;; *) print_unknown ;; esac