Blame samples/panasonic/ac_adapt.pl

Packit Service 26469c
#!/usr/bin/perl -w
Packit Service 26469c
# AC Power Handler v1.0
Packit Service 26469c
# Handles AC power events for Panasonic notebooks
Packit Service 26469c
#
Packit Service 26469c
# Copyright (C) 2004 David Bronaugh
Packit Service 26469c
#
Packit Service 26469c
# Requires pcc_acpi driver
Packit Service 26469c
#
Packit Service 26469c
# This program is free software; you can redistribute it and/or modify 
Packit Service 26469c
# it under the terms of the GNU General Public License version 2 as 
Packit Service 26469c
# published by the Free Software Foundation
Packit Service 26469c
#
Packit Service 26469c
# This program is distributed in the hope that it will be useful,
Packit Service 26469c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 26469c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 26469c
# GNU General Public License for more details.
Packit Service 26469c
#
Packit Service 26469c
# You should have received a copy of the GNU General Public License
Packit Service 26469c
# along with this program; if not, write to the Free Software
Packit Service 26469c
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit Service 26469c
Packit Service 26469c
use strict;
Packit Service 26469c
use POSIX qw(ceil floor);
Packit Service 26469c
Packit Service 26469c
our($config);
Packit Service 26469c
our($power_state);
Packit Service 26469c
Packit Service 26469c
sub read_file {
Packit Service 26469c
  my($file) = @_;
Packit Service 26469c
  my($fh);
Packit Service 26469c
  my($contents) = "";
Packit Service 26469c
  if(open($fh, $file)) {
Packit Service 26469c
    $/ = undef;
Packit Service 26469c
    $contents = <$fh>;
Packit Service 26469c
    close($fh);
Packit Service 26469c
  } else {
Packit Service 26469c
    print "Couldn't open file " . $file . "!\n";
Packit Service 26469c
  }
Packit Service 26469c
  return $contents;
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
sub write_file {
Packit Service 26469c
  my($file, $contents) = @_;
Packit Service 26469c
  my($fh);
Packit Service 26469c
Packit Service 26469c
  if(open($fh, ">", $file)) {
Packit Service 26469c
    print $fh $contents;
Packit Service 26469c
    close($fh);
Packit Service 26469c
    return 1;
Packit Service 26469c
  } else {
Packit Service 26469c
    print "Couldn't open file " . $file . "!\n";
Packit Service 26469c
    return 0;
Packit Service 26469c
  }
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
sub get_pcc_field {
Packit Service 26469c
  my($field) = @_;
Packit Service 26469c
  my($file) = $config->{'pcc_path'} . "/" . $power_state . "_" . $field;
Packit Service 26469c
Packit Service 26469c
  return read_file($file);
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
sub set_pcc_field {
Packit Service 26469c
  my($field, $contents) = @_;
Packit Service 26469c
  my($file) = $config->{'pcc_path'} . "/" . $power_state . "_" . $field;
Packit Service 26469c
Packit Service 26469c
  if(!write_file($file, $contents)) {
Packit Service 26469c
    print "Couldn't set pcc " . $field . " field (are you root?)\n";
Packit Service 26469c
    return 0;
Packit Service 26469c
  }
Packit Service 26469c
  return 1;
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
sub ac_disconnect {
Packit Service 26469c
  $power_state = "dc";
Packit Service 26469c
  set_pcc_field("brightness", get_pcc_field("brightness"));
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
sub ac_connect {
Packit Service 26469c
  $power_state = "ac";
Packit Service 26469c
  set_pcc_field("brightness", get_pcc_field("brightness"));
Packit Service 26469c
}
Packit Service 26469c
Packit Service 26469c
my($key) = $ARGV[3];
Packit Service 26469c
Packit Service 26469c
my(%dispatch) = (
Packit Service 26469c
	     "00000000" => \&ac_disconnect,
Packit Service 26469c
	     "00000001" => \&ac_connect,
Packit Service 26469c
	    );
Packit Service 26469c
Packit Service 26469c
$config = {
Packit Service 26469c
	       "pcc_path" => "/proc/acpi/pcc",
Packit Service 26469c
	      };
Packit Service 26469c
Packit Service 26469c
$dispatch{$key}();