#!/usr/bin/python # # Copyright (C) 2008 Angus Ainslie. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import sys import pygtk pygtk.require('2.0') import gtk import os import gobject class Main: def delete_event(self, widget, event, data=None): print "delete event occurred" return False def destroy(self, widget, data=None): os.close( self.apmFd ) os.close( self.forceFd ) gobject.source_remove(self.timer) self.timer = 0 gtk.main_quit() def ApmTimeout( self, obj ): chg = self.GetCharger() self.chgLabel.set_text( chg ) apm = self.GetApm() self.apmStrings = self.ParseApm( apm ) batPercent = int( self.apmStrings[6].split( "%" )[0] ) self.powerBar.set_fraction( batPercent/100.0 ) self.powerBar.set_text( self.apmStrings[6] ) self.powerTime.set_text( self.apmStrings[7] + " " + self.apmStrings[8] ) return True def ParseApm( self, apm ) : strings = apm.split( " " ) return strings def GetCharger( self ) : self.chgFd = os.open( "/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/charger_type", os.O_RDONLY ) os.lseek( self.chgFd, 0, 0 ) chg = os.read( self.chgFd, 512 ) # print "Charger :", chg os.close( self.chgFd ) return chg def GetApm( self ) : os.lseek( self.apmFd, 0, 0 ) apm = os.read( self.apmFd, 512 ) return apm def SetSlowCharge( self, btn ) : os.write( self.forceFd, "100" ) def SetMedCharge( self, btn ) : os.write( self.forceFd, "500" ) def SetFastCharge( self, btn ) : os.write( self.forceFd, "1000" ) def __init__(self): self.apmFd = os.open( "/proc/apm", os.O_RDONLY ) self.forceFd = os.open( "/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous", os.O_RDWR ) apm = self.GetApm() chg = self.GetCharger() # Add a timer callback to update the value of the progress bar self.timer = gobject.timeout_add( 5000, self.ApmTimeout, self ) # print "apm : " , apm self.apmStrings = self.ParseApm( apm ) self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_border_width(10) self.window.set_size_request(400, 300) self.window.set_title( "Power Center" ) self.scrolled_window = gtk.ScrolledWindow() self.scrolled_window.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) hbox = gtk.HBox( False, 1 ) batPercent = int( self.apmStrings[6].split( "%" )[0] ) self.powerBar = gtk.ProgressBar() self.powerBar.set_fraction( batPercent/100.0 ) self.powerBar.set_text( self.apmStrings[6] ) self.powerBar.set_orientation( gtk.PROGRESS_BOTTOM_TO_TOP ) vbox = gtk.VBox( False, 1 ) self.powerTime = gtk.Label( self.apmStrings[7] + " " + self.apmStrings[8] ) vbox.pack_start( self.powerBar, True, True, 5 ) vbox.pack_start( self.powerTime, False, False, 0 ) hbox.pack_start( vbox, True, False, 0 ) vbox.show() self.powerBar.show() self.powerTime.show() vbox = gtk.VBox( False, 1 ) hbox.pack_start( vbox, True, False, 0 ) self.chgLabel = gtk.Label( chg ) vbox.pack_start( self.chgLabel, True, False, 0 ) button = gtk.Button("Slow 100mA") button.connect("clicked", self.SetSlowCharge ) button.show() vbox.pack_start(button, True, False, 0) button = gtk.Button("Medium 500mA") button.connect("clicked", self.SetMedCharge ) button.show() if not os.path.exists( "/home/root/allow_force_500" ) : button.set_sensitive( False ) vbox.pack_start(button, True, False, 0) button = gtk.Button("Fast 1000mA") button.connect("clicked", self.SetFastCharge ) button.show() if not os.path.exists( "/home/root/allow_force_1000" ) : button.set_sensitive( False ) vbox.pack_start(button, True, False, 0) vbox.show() hbox.show() self.window.add( self.scrolled_window ) self.scrolled_window.add_with_viewport( hbox ) self.chgLabel.show() self.scrolled_window.show() self.window.show() def main(self): gtk.main() run = Main() run.main()