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

# --- Definitions
LIB=/usr/lib/tlp-pm/tlp-functions
RFLIB=/usr/lib/tlp-pm/tlp-rf-func

# --- 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_sched_powersave $pwr
        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_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_sched_powersave 1
        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_radeon_profile 1
        set_wifi_power_mode 1
        disable_wake_on_lan 1
        set_sound_power_mode 1
        set_runtime_pm 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_sched_powersave 0
        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_radeon_profile 0
        set_wifi_power_mode 0
        disable_wake_on_lan 0
        set_sound_power_mode 0
        set_runtime_pm 0
        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
        ;;
        
    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 "Usage: tlp start|true|bat|false|ac|wifi|usb|bayoff|discharge|setcharge|fullcharge|stat|diskid"
        ;;
esac

exit 0


