From b99303cdd9bb20b29d32b66e94fa6707cc44098a Mon Sep 17 00:00:00 2001 From: kriss Date: Mon, 28 Jul 2008 17:17:28 +0000 Subject: [PATCH] FEATURE: Include Battery Monitor from HdR - Thanks (not usable yet, still bug hunting on my part) git-svn-id: http://www.neo1973-germany.de/svn@88 46df4e5c-bc4e-4628-a0fc-830ba316316d --- .../trunk/src/settingsgui/BatteryPanel.py | 210 ++++++++++++++++++ .../src/settingsgui/GlobalConfiguration.py | 3 +- .../trunk/src/settingsgui/SettingsGUI.py | 11 +- 3 files changed, 222 insertions(+), 2 deletions(-) create mode 100644 SettingsGUI/trunk/src/settingsgui/BatteryPanel.py diff --git a/SettingsGUI/trunk/src/settingsgui/BatteryPanel.py b/SettingsGUI/trunk/src/settingsgui/BatteryPanel.py new file mode 100644 index 0000000..c15cdd6 --- /dev/null +++ b/SettingsGUI/trunk/src/settingsgui/BatteryPanel.py @@ -0,0 +1,210 @@ + +""" + * BatteryPanel.py - SettingsGUI - Battery Status + * + * GUI for battery on Neo Freerunner + * written by HdR + * battery status icons made by Kore Nordmann + * start icon from tango icons + * + * ! this script comes with explicit no warranty ! + * License: gpl + * + * + * SettingsGUI is (C) 2007 by Kristian Mueller + * All Rights Reserved + * + * 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 2 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, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +""" + + +import gobject,gtk +import os + +class BatteryPanel(gtk.VBox): + charger_type = "/sys/class/i2c-adapter/i2c-0/0-0073/charger_type" + capacity = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/capacity" + voltage = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/voltage_now" + status = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/status" + image_dir = "/usr/share/settingsgui/battery/" + usb_limit = "/sys/class/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous" + #charger_type = "charger_type" + #capacity = "capacity" + #voltage = "voltage" + #status = "status" + #image_dir = "./" + + # Check the current amperage + def check_type(self): + self.f = open(self.charger_type, 'r') + self.type = self.f.readline().rstrip('\n') + self.f.close() + + try: + self.current = self.type.split(" ")[3] + except: + return False + + if (self.current == '1A'): + self.amperage = 1000; + elif (self.current == '500mA'): + self.amperage = 500; + elif (self.current == '100mA'): + self.amperage = 100; + else: + self.amperage = False; + + return (self.amperage) + + # Check current battery capacity + def check_capacity(self): + try: + self.f = open(self.capacity, 'r') + self.q = self.f.readline().rstrip('\n') + except(IOError): + print "ERROR: could not read capacity!" + self.q = "0" + finally: + self.f.close() + return (int(self.q)) + + # Check current battery voltage + def check_voltage(self): + try: + self.f = open(self.voltage, 'r') + self.q = float(self.f.readline().rstrip('\n')) + except(IOError): + print "ERROR: could not read voltage!" + self.q = "0" + finally: + self.f.close() + self.v = int(self.q)/1000000; + return (self.v) + + # Check current status (Charging/Discharging) + def check_status(self): + self.f = open(self.status, 'r') + self.q = self.f.readline().rstrip('\n') + self.f.close() + return(self.q) + + # Set the load amperage manually + def set_charge_limit(self, button, limit): + if (self.check_type()): + os.system("echo %d > %s" % (limit,self.usb_limit)) + return True + + # Update the capacity label + def update_capacity(self, label, image): + cap = self.check_capacity() + label.set_text ("Battery capacity: %d%%" % cap) + if (cap <= 5): + image.set_from_file(self.image_dir+"battery_stat_00.png") + elif (cap <= 20): + image.set_from_file(self.image_dir+"battery_stat_11.png") + elif (cap <= 38): + image.set_from_file(self.image_dir+"battery_stat_23.png") + elif (cap <= 56): + image.set_from_file(self.image_dir+"battery_stat_42.png") + elif (cap <= 85): + image.set_from_file(self.image_dir+"battery_stat_64.png") + else: + image.set_from_file(self.image_dir+"battery_stat_99.png") + return True + + # Update the charge label + def update_charge(self, label): + rate = self.check_type() + if (rate): + label.set_text ("Battery charging: %d mA" % rate) + else: + label.set_text ("Battery charging: %s" % self.check_status()) + return True + + def update_voltage(self, label): + voltage = self.check_voltage() + label.set_text ("Current voltage: %.2f V" % voltage) + return True + + # Gtk GUI + def __init__(self): + # init main window + self.win = self + #self.win.connect("delete_event", self.delete_event) + + # add a VBox + self.vbox = gtk.VBox(homogeneous=False, spacing=5) + self.win.add(self.vbox) + self.vbox.show() + + # add a HBox + self.hbox0 = gtk.HBox() + self.vbox.pack_start(self.hbox0) + self.hbox0.show() + + # Add a Image + self.stat_image = gtk.Image() + self.stat_image.set_from_file(self.image_dir+"battery_stat_01.png") + self.hbox0.pack_start(self.stat_image) + self.stat_image.show() + + # Add a Vbox for info labels + self.vbox1 = gtk.VBox() + self.hbox0.pack_start(self.vbox1) + self.vbox1.show() + + # Add Capacity label + self.capacity_label = gtk.Label("Battery capacity: checking") + self.vbox1.pack_start(self.capacity_label) + self.capacity_label.show() + gobject.timeout_add (1000, self.update_capacity, self.capacity_label, self.stat_image) + + # Add chargelevel label + self.charge_label = gtk.Label("Battery charging: checking") + self.vbox1.pack_start(self.charge_label) + self.charge_label.show() + gobject.timeout_add (1000, self.update_charge, self.charge_label) + + # Add voltage label + self.voltage_label = gtk.Label("Current voltage: checking") + self.vbox1.pack_start(self.voltage_label) + self.voltage_label.show() + gobject.timeout_add (1000, self.update_voltage, self.voltage_label) + + # Add HBox for buttons + self.hbox1 = gtk.HBox(homogeneous=False, spacing=5) + self.vbox.pack_start(self.hbox1) + self.hbox1.show() + + # Add button for 100mA + self.button_100 = gtk.Button("Charge at\n100mA") + self.hbox1.pack_start(self.button_100) + self.button_100.connect("clicked", self.set_charge_limit, 100) + self.button_100.show() + + # Add button for 500mA + self.button_500 = gtk.Button("Charge at\n500mA") + self.hbox1.pack_start(self.button_500) + self.button_500.connect("clicked", self.set_charge_limit, 500) + self.button_500.show() + + # add button for 1000mA + self.button_1000 = gtk.Button("Charge at\n1000mA") + self.hbox1.pack_start(self.button_1000) + self.button_1000.connect("clicked", self.set_charge_limit, 1000) + self.button_1000.show() + + # show main window + self.win.show() diff --git a/SettingsGUI/trunk/src/settingsgui/GlobalConfiguration.py b/SettingsGUI/trunk/src/settingsgui/GlobalConfiguration.py index 13f3b2e..3773cc6 100644 --- a/SettingsGUI/trunk/src/settingsgui/GlobalConfiguration.py +++ b/SettingsGUI/trunk/src/settingsgui/GlobalConfiguration.py @@ -24,7 +24,8 @@ ################################################################################ #################################### GUI ####################################### ################################################################################ -NOTEBK_PADDING = 6 +#NOTEBK_PADDING = 6 +NOTEBK_PADDING = 0 GSM_Panel_Instance = None ################################################################################ diff --git a/SettingsGUI/trunk/src/settingsgui/SettingsGUI.py b/SettingsGUI/trunk/src/settingsgui/SettingsGUI.py index 02b5348..6ac8095 100644 --- a/SettingsGUI/trunk/src/settingsgui/SettingsGUI.py +++ b/SettingsGUI/trunk/src/settingsgui/SettingsGUI.py @@ -27,6 +27,9 @@ import threading #from settingsgui.GlobalConfiguration import * from GlobalConfiguration import * + +battery_image_dir = "/usr/share/settingsgui/battery/" + class ToggleInterface(threading.Thread): def __init__(self, settings_gui): self.settings_gui = settings_gui @@ -90,6 +93,7 @@ class SettingsGUI: from GPRSPanel import GPRSPanel from BluetoothPanel import BluetoothPanel from MofiPanel import MofiPanel + from BatteryPanel import BatteryPanel print "0.3: %s" %(time.time() - start_time) @@ -117,12 +121,17 @@ class SettingsGUI: self.add_notebook_page(MofiPanel(), "gtk-network") print "7: %s" %(time.time() - start_time) + #battery_image = gtk.Image() + #battery_image.set_from_file(battery_image_dir + "battery.png") + self.add_notebook_page(BatteryPanel(), "gtk-disconnect") + print "8: %s" %(time.time() - start_time) + ## expand page selectors to full width for child in self.notebook.get_children(): self.notebook.child_set_property(child, "tab_expand", True) self.notebook.show() - print "8: %s" %(time.time() - start_time) + print "9: %s" %(time.time() - start_time) #self.main_panel.add(self.notebook)