#!/bin/sh
# tlp - adjust power settings 
#
# Copyright (c) 2012 Thomas Koch <linrunner at gmx.net>
# This software is licensed under the GPL v2.

# --- Constants
readonly LIB=/usr/lib64/tlp-pm/tlp-functions

# --- Source libraries
if [ ! -f $LIB ]; then
    echo "Error: missing function library \'$LIB\'."
    exit 1
fi
. $LIB

# --- MAIN
read_defaults
check_tlp_enabled || exit 1
check_laptop_mode_tools || exit 2

# Get cmd line arg
mode=$(echo $1 | tr "[:upper:]" "[:lower:]")

echo_debug "run" "+++ mode=$mode"
echo_debug "path" "PATH=$PATH"

case "$mode" in
    start) # Set start power mode depending on state
        check_root
        get_power_state
        pwr=$?
        load_tp_modules
        set_laptopmode $pwr
        set_dirty_parms $pwr
        set_scaling_governor $pwr
        set_scaling_min_max_freq $pwr
        set_sched_powersave $pwr
        set_nmi_watchdog
        set_phc_controls $pwr
        set_disk_apm_level $pwr
        set_disk_spindown_timeout $pwr
        set_disk_io_sched
        set_sata_link_power $pwr
        set_pcie_aspm $pwr
        set_i915_power_mgmt $pwr
        set_radeon_profile $pwr
        set_wifi_power_mode $pwr
        disable_wake_on_lan $pwr
        set_sound_power_mode $pwr
        set_runtime_pm $pwr
        enable_usb_suspend 0
        set_charge_thresholds
        [ "$pwr" = "1" ] && poweroff_drivebay 0
        
        echo_started_mode $pwr
        ;;

    true|bat*) # Set battery power mode
        check_root
        load_tp_modules
        set_laptopmode 1
        set_dirty_parms 1
        set_scaling_governor 1
        set_scaling_min_max_freq 1
        set_sched_powersave 1
        set_nmi_watchdog
        set_phc_controls 1
        set_disk_apm_level 1
        set_disk_spindown_timeout 1
        set_disk_io_sched
        set_sata_link_power 1
        set_pcie_aspm 1
        set_i915_power_mgmt 1
        set_radeon_profile 1
        set_wifi_power_mode 1
        disable_wake_on_lan 1
        set_sound_power_mode 1
        set_runtime_pm 1
        [ "$X_TLP_USB_MODE" = "1" ] && enable_usb_suspend 0
        poweroff_drivebay 0
        
        echo_started_mode 1
        ;;
        
    false|ac) # Set ac power mode
        check_root
        load_tp_modules
        set_laptopmode 0
        set_dirty_parms 0
        set_scaling_governor 0
        set_scaling_min_max_freq 0
        set_sched_powersave 0
        set_nmi_watchdog
        set_phc_controls 0
        set_disk_apm_level 0
        set_disk_spindown_timeout 0
        set_disk_io_sched
        set_sata_link_power 0
        set_pcie_aspm 0
        set_i915_power_mgmt 0
        set_radeon_profile 0
        set_wifi_power_mode 0
        disable_wake_on_lan 0
        set_sound_power_mode 0
        set_runtime_pm 0
        [ "$X_TLP_USB_MODE" = "1" ] && enable_usb_suspend 0
         
        echo_started_mode 0
        ;;
        
    wifi) # Set wifi power mode depending on state
        check_root
        get_power_state
        pwr=$?
        set_wifi_power_mode $pwr $2
        ;;

    usb) # Enable usb autosuspend
        check_root
        enable_usb_suspend 1
        ;;
        
    bayoff) # Power off drive bay
        check_root
        poweroff_drivebay 1
        ;;
        
    xlogin) # Called on desktop login
        ;;

    discharge) # Discharge battery completely (to recalibrate)
        check_root
        load_tp_modules
        discharge_battery $2
        ;;
        
    setcharge) # Set charge thresholds (temporarily)
        check_root
        load_tp_modules
        setcharge_battery $2 $3 $4
        ;;

    fullcharge) # Charge battery up to 100% (temporarily)
        check_root
        load_tp_modules
        setcharge_battery 96 100 $2
        ;;
        
    recalibrate) # Recalibrate battery, i.e. discharge and charge to 100%
        check_root
        load_tp_modules
        setcharge_battery 96 100 $2
        discharge_battery $2
        ;;        
        
    stat) # Show status
        tlp-stat
        ;;

    diskid) # Show disk-by-id
        { for dev in $(ls /dev/disk/by-id/ | egrep '^ata' | egrep -v '\-part[1-9]+'); do
            get_disk_dev $dev
            echo "$disk_dev: $disk_id"
        done } | sort
        ;;
        
    *) 
        echo "Error: unknown command \"$mode\"."  1>&2
        echo "Usage: tlp start|true|bat|false|ac|wifi|usb|bayoff|discharge|setcharge|fullcharge|recalibrate|stat|diskid" 1>&2
        ;;
esac

exit 0


