Acpi::Battery - A class to get informations about your battery.


Acpi documentation Contained in the Acpi distribution.

Index


Code Index:

NAME

Top

Acpi::Battery - A class to get informations about your battery.

SYNOPSIS

Top

use Acpi::Battery;

$battery = Acpi::Battery->new;

if($battery->batteryOnLine == 0){

	print "Battery online\n";

	print $battery->getCharge."\n"; 

	print "Time remaining ".$batteyr->getHoursLeft.":".$battery->getMinutesLeft."\n";

}

else{

print "Battery offline\n";

}

DESCRIPTION

Top

Acpi::Battery is used to have information about your battery.It's specific for GNU/Linux

METHOD DESCRIPTIONS

Top

This sections contains only the methods in Battery.pm itself.

AUTHORS

Top


Acpi documentation Contained in the Acpi distribution.

package Acpi::Battery;
use Acpi::Field;
use strict;

our $VERSION = '0.1';

my $rfield;

sub new{
	my($class) = shift;
	my($self) = {};

	bless($self,$class);

	$rfield = Acpi::Field->new; 
	return $self;
}

sub getBatteryInfo{
	my($self,$what) = @_;
	my(%value);
	my($i) = 0;
	my($numbatt) = $self->nbBattery;

	for($i=1;$i<=$numbatt;$i++){
		$value{"BAT".$i} = $rfield->getValueField("/proc/acpi/battery/BAT".$i."/info",$what);
	}

	return (%value);
}

sub getBatteryState{
	my($self,$what)= @_;
	my(%value);
	my($i) = 0;
	my($numbatt) = $self->nbBattery;

	for($i=1;$i<=$numbatt;$i++){
		$value{"BAT".$i} = $rfield->getValueField("/proc/acpi/battery/BAT".$i."/state",$what);
	}

	return (%value);
}

sub batteryOnLine{
	my($self) = shift;
	my($file) = "/proc/acpi/ac_adapter/ACAD/state";
	
	if($rfield->getValueField($file,"state") eq "on-line"){
		return -1;
	}
	else{
		return 0;
	}
}

sub nbBattery{
	my($self) = shift;
	my($dir) = "/proc/acpi/battery";
	my($nb) = 0;
	
	opendir(BATTERYDIR,$dir) || die "Impossible d'ouvrir $dir : $!";
	while(readdir(BATTERYDIR)){
		$nb++;	
	}

	$nb -= 2; #SOUSTRACT "." and ".."

	closedir(BATTERYDIR);
	return $nb;
}

sub getLastFull{
	my($self) = shift;

	return $self->getBatteryInfo("last full capacity");
}

sub getLastFullTotal{
	my($self) = shift;
	my($lastfulltotal) = undef;
	my($i) = 0;
	my($numbatt) = $self->nbBattery;
	
	for($i=1;$i<=$numbatt;$i++){
		$lastfulltotal += $rfield->getValueField("/proc/acpi/battery/BAT".$i."/info","last full capacity");
	}

	return $lastfulltotal;

}

sub getPresent{
	my($self) = shift;
	my(%value);
	my($i) = 0;
	my($numbatt) = $self->nbBattery;
	
	
	for($i=1;$i<=$numbatt;$i++){
		if($rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","present") eq "yes"){
			$value{"BAT".$i} = 0;
		}
		else{
			$value{"BAT".$i} = -1;
		}
	}
	return (%value);
}

sub getDesignCapacity{
	my($self) = shift;

	return $self->getBatteryInfo("design capacity");
}

sub getBatteryTechnology{
	my($self) = shift;
	
	return $self->getBatteryInfo("battery technology");
}

sub getBatteryType{
	my($self) = shift;

	return $self->getBatteryInfo("battery type");
}

sub getOEMInfo{
	my($self) = shift;

	return $self->getBatteryInfo("OEM info");
}

sub getChargingState{
	my($self) = shift;
	my(%value);
        my($i) = 0;
	my($numbatt) = $self->nbBattery;


	for($i=1;$i<=$numbatt;$i++){
	        if($rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","charging state") eq "charging"){
			$value{"BAT".$i} = 0;
		}
		else{
			$value{"BAT".$i} = -1;
		}
	}

	return (%value);
}

sub getCapacityState{
	my($self) = shift;
	my(%value);
	my($i) = 0;
	my($numbatt) = $self->nbBattery;

	for($i=1;$i<=$numbatt;$i++){
		if($rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","capacity state") eq "ok"){
			$value{"BAT".$i} = 0;
		}
		else{
			$value{"BAT".$i} = -1;
		}
	}

	return (%value);
}

sub getRemaining{
	my($self) = shift;

	return $self->getBatteryState("remaining capacity");
}

sub getRemainingTotal{
        my($self) = shift;
	my($remainingtotal) = undef;
	my($i) = 0;
	my($numbatt) = $self->nbBattery;
	
	for($i=1;$i<=$numbatt;$i++){
		$remainingtotal += $rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","remaining capacity");
	}
	
	return $remainingtotal;
}

sub getPresentRate{
	my($self) = shift;

	return $self->getBatteryState("present rate");
}

sub getPresentRateTotal{
        my($self) = shift;
	my($presentratetotal) = undef;
	my($i) = 0;
	my($numbatt) = $self->nbBattery;

	for($i=1;$i<=$numbatt;$i++){
		$presentratetotal += $rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","present rate");
	}
	
	return $presentratetotal;					
}

sub getPresentVoltage{
	my($self) = shift;

	return $self->getBatteryState("present voltage");
}

sub getPresentVoltageTotal{
	my($self) = shift;
	my($presentvoltagetotal) = undef;
	my($i) = 0;
	my($numbatt) = $self->nbBattery;

	for($i=1;$i<=$numbatt;$i++){
		$presentvoltagetotal += $rfield->getValueField("/proc/acpi/battery/BAT".$i."/state","present voltage");
	}

	return $presentvoltagetotal;
}

sub getCharge{
	my($self) = shift;
	
	my($charge) = sprintf("%.1f",100*$self->getRemainingTotal/$self->getLastFullTotal);

	return $charge;
}

sub getHoursLeft{
	my($self) = shift;
	
	my($hoursleft) = sprintf("%d",$self->getRemainingTotal/$self->getPresentRateTotal);
	
	return $hoursleft;
}

sub getMinutesLeft{
	my($self) = shift;
	my($remaining) = $self->getRemainingTotal;
	my($presentrate) = $self->getPresentRateTotal;
	my($hoursleft) = sprintf("%d",$self->getHoursLeft);

	my($minutesleft) = sprintf("%d",60 * ($remaining - $presentrate * $hoursleft)/$presentrate);

	return $minutesleft;
}
1;

__END__