#!/bin/bash

. /usr/share/acpi-support/power-funcs
. /etc/default/power4gear

power4gear() {

touch /tmp/power4gearactive

RET=`zenity --list --radiolist --width=400 --height=300 \
		--window-icon="/usr/share/pixmaps/cpufreq-applet/cpufreq-50.png" \
		--title "Power Management Interface" \
		--text "Select your power saving profile" \
		--column="" --column $"Profile" \
		TRUE	$"Hi Performance/Gaming" \
		FALSE	$"DVD/Divx Video" \
		FALSE	$"Email/Office" \
		FALSE	$"CD Audio/MP3" \
		FALSE	$"Presentation" \
		FALSE	$"Battery Saving (Medium)" \
		FALSE	$"Battery Saving (Powersave)" `

case $RET in
	"Hi Performance/Gaming")
	hi;
	;;
	"DVD/Divx Video")
	dvd;
	;;
	"Email/Office")
	email;
	;;
	"CD Audio/MP3")
	audio;
	;;
	"Presentation")
	presentation;
	;;
	"Battery Saving (Medium)")
	medium;
	;;
	"Battery Saving (Powersave)")
	powersave;
	;;
esac

rm -f /tmp/power4gearactive

}

#get_freqs() {
#for I in `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
#do
#	echo FALSE
#	let "Z = $I >= 1000000"
#	let "Z2 = $I >= 1000"
#	if [ $Z = 1 ]
#	then
#      let "Z = $I / 1000000"
#		let "Y = ($I % 1000000)/10000"
#        echo -n $Z.$Y
#        echo GHz
#   	elif [ $Z2 = 1 ]
#   	then
#		let "Z = $I / 1000"
#		let "Y = ($I % 1000)/10"
#		echo -n $Z
#		if [ D$Y != D0 ]
#		then
#			echo -n .$Y
#		fi
#		echo MHz
#	fi
#done
#}


# Hi Performance/Gaming PROFILE
hi(){
	echo going HI
	set_cpu $HI_CPU;
	set_laptop_mode $HI_LAPTOP_MODE ;
	set_hdd_saving $HI_HDD_SAVING;
	set_screen_dpms $HI_SCREEN_DPMS;
	set_screensaver $HI_SCREENSAVER;
	set_brightness $HI_BRIGHTNESS;
}

# DVD/Divx Video PROFILE
dvd() {
	echo going DVD
	set_cpu $DVD_CPU;
	set_laptop_mode $DVD_LAPTOP_MODE ;
	set_hdd_saving $DVD_HDD_SAVING;
	set_screen_dpms $DVD_SCREEN_DPMS;
	set_screensaver $DVD_SCREENSAVER;
	set_brightness $DVD_BRIGHTNESS;
}

# Email/Office PROFILE
email() {
	echo going EMAIL
	set_cpu $EMAIL_CPU;
	set_laptop_mode $EMAIL_LAPTOP_MODE ;
	set_hdd_saving $EMAIL_HDD_SAVING;
	set_screen_dpms $EMAIL_SCREEN_DPMS;
	set_screensaver $EMAIL_SCREENSAVER;
	set_brightness $EMAIL_BRIGHTNESS;
}

# CD Audio/MP3 PROFILE
audio() {
	echo going AUDIO
	set_cpu $AUDIO_CPU;
	set_laptop_mode $AUDIO_LAPTOP_MODE ;
	set_hdd_saving $AUDIO_HDD_SAVING;
	set_screen_dpms $AUDIO_SCREEN_DPMS;
	set_screensaver $AUDIO_SCREENSAVER;
	set_brightness $AUDIO_BRIGHTNESS;
}

# Presentation PROFILE
presentation() {
	echo going Presentation
	set_cpu $PRESENTATION_CPU;
	set_laptop_mode $PRESENTATION_LAPTOP_MODE ;
	set_hdd_saving $PRESENTATION_HDD_SAVING;
	set_screen_dpms $PRESENTATION_SCREEN_DPMS;
	set_screensaver $PRESENTATION_SCREENSAVER;
	set_brightness $PRESENTATION_BRIGHTNESS;
}

# Battery Saving (Medium) PROFILE
medium() {
	echo going Medium
	set_cpu $MEDIUM_CPU;
	set_laptop_mode $MEDIUM_LAPTOP_MODE ;
	set_hdd_saving $MEDIUM_HDD_SAVING;
	set_screen_dpms $MEDIUM_SCREEN_DPMS;
	set_screensaver $MEDIUM_SCREENSAVER;
	set_brightness $MEDIUM_BRIGHTNESS;
}

# Battery Saving (High) PROFILE
powersave() {
	echo going Powersave
	set_cpu $POWERSAVE_CPU;
	set_laptop_mode $POWERSAVE_LAPTOP_MODE ;
	set_hdd_saving $POWERSAVE_HDD_SAVING;
	set_screen_dpms $POWERSAVE_SCREEN_DPMS;
	set_screensaver $POWERSAVE_SCREENSAVER;
	set_brightness $POWERSAVE_BRIGHTNESS;
}

# FUNCTIONS CALLED BY PROFILES

set_cpu() {

	if [ A$1 = Apowersave ]; then
		echo setting powersave governor
		/etc/init.d/powernowd stop
		echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
	elif [ A$1 = Anormal ]; then
		/etc/init.d/powernowd start
		echo setting maximun frequency
		cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
	elif [ A$1 != A ]; then
		echo setting maximun frequency to $1
		echo $1 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
	else
		echo usage: set_cpu powersave/normal/frequency	
	fi
}

set_hdd_saving() {
	if [ -d /sys/bus/ide ]; then
        for x in /sys/bus/ide/devices/*/block; do
        drive=$(basename $(readlink $x));
        echo -n hdparm for $drive ...
        $HDPARM -S $1 /dev/$drive
        #$HDPARM -B $2 /dev/$drive
        echo " DONE"
        done
    fi
    #   if [ -d /sys/bus/scsi ]; then
#       for x in /sys/bus/scsi/devices/*/block; do
#       drive=$(basename $(readlink $x));
#       $HDPARM -S $1 /dev/$drive
#       #$HDPARM -B $2 /dev/$drive
#       done
#   fi

    
}

set_screen_dpms(){
	if [ A$1 = A ]
	then
		echo usage: screen timeout;
	elif [ A$1 = A0 ]
	then
		echo Screen always ON
		xset dpms 0 0 0
	else
		echo Screen timeout: $1
		xset dpms 0 0 $1
	fi
}

set_screensaver() {
	if [ A$1 = A0 ]
	then
		echo disabling screensaver
#		for x in /tmp/.X11-unix/*; do
#			displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
#	    	getXuser;
#	    	if [ x"$XAUTHORITY" != x"" ]; then
#	        	export DISPLAY=":$displaynum"	
	        	su $user -c "xscreensaver-command -throttle" &
#    		fi
#    	done
    elif [ A$1 = A1 ]
    then
    	echo enabling screensaver
#	for x in /tmp/.X11-unix/*; do
#    	displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
#	    getXuser;
#	    if [ x"$XAUTHORITY" != x"" ]; then
#	        export DISPLAY=":$displaynum"
    	    su $user -c "xscreensaver-command -unthrottle" &
#	    fi
#	    done
	    
	else
		echo usage: screensaver 0/1; (OFF/ON)
    fi
}

set_laptop_mode() {
	if [ A$1 = A0 ]
	then
		$LAPTOP_MODE stop
	elif [ A$1 = A1 ]
	then
		$LAPTOP_MODE start
	else
		echo usage: laptop_mode 0/1; (OFF/ON)
	fi
}

set_brightness() {
	
	if [ A$1 = A ]; then
		echo usage: bright 1-15
		exit
	else
		if [ ! -w /proc/acpi/asus/brn ]; then
			echo /proc/acpi/asus/brn not writable
			exit
		fi
		let "R = ( $1 >= 0 ) && ( $1 <= 15 )"
		if [ $R = 0 ]; then
			echo 'argoument must be >=0 and <=15'
			exit
		fi
		echo $1 > /proc/acpi/asus/brn
	fi

	echo $1 > /proc/acpi/asus/brn
}
