4 from PyQt4 import QtCore
6 #Thanks to code from http://qt-mobility.blogspot.com/2010/03/getting-n900-battery-level-via-python-d.html
8 class LevelReader(QtCore.QObject):
10 battery_change = QtCore.pyqtSignal(int) #Fired when battery level changes
11 signal_change = QtCore.pyqtSignal(int) #Fired when signal level changes
13 #Class level variables
14 battery_level = -666 #initialize to invalid number
15 signal_level = -666 #initialize to invalid number
16 refresh_seconds = 5 #frequency of refresh
17 timer = QtCore.QTimer()
18 battery_dev_obj = None
22 QtCore.QObject.__init__(self)
24 #Need the system bus locally
25 bus = dbus.SystemBus()
27 #Set up battery dbus object interface as class-level variable
29 hal_obj = bus.get_object('org.freedesktop.Hal','/org/freedesktop/Hal/Manager')
30 hal = dbus.Interface(hal_obj,'org.freedesktop.Hal.Manager')
31 uids = hal.FindDeviceByCapability('battery')
32 self.battery_dev_obj = bus.get_object('org.freedesktop.Hal', uids[0])
33 except dbus.DBusException:
34 print "ERROR: Unable to connect to battery charge dbus object"
35 self.battery_dev_obj = None
37 print "ERROR: Unknown exception connecting to DBus for battery charge: ", e
38 self.battery_dev_obj = None
40 #Set up signal level dbus interface as class-level variable
42 phone_net_obj = bus.get_object('com.nokia.phone.net','/com/nokia/phone/net', introspect=False)
43 self.phone_net_intf = dbus.Interface(self.phone_net_obj,'Phone.Net')
44 except dbus.DBusException:
45 print "ERROR: Unable to connect to signal level dbus object"
46 self.phone_net_intf = None
48 print "ERROR: Unknown exception connecting to DBus for signal level: ", e
49 self.phone_net_intf = None
51 #bind my checks to the timer
52 QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("check_battery_change()"))
53 QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("check_signal_change()"))
54 self.timer.start(5 * self.refresh_seconds)
56 # Read the dbus values
58 def get_battery_percentage(self):
59 if self.battery_dev_obj==None:
62 prop_value = self.battery_dev_obj.GetProperty('battery.charge_level.percentage')
63 int_value = int(prop_value)
65 except dbus.DBusException:
68 def get_signal_percentage(self):
69 if self.phone_net_intf==None:
72 dbus_return = self.phone_net_intf.get_signal_strength()
73 return int(dbus_return[0])
74 except dbus.DBusException:
77 #Declare my Qt Slots for binding with the timer
80 def check_battery_change(self):
81 new_battery_level = self.get_battery_percentage()
82 if new_battery_level==self.battery_level:
84 self.battery_level = new_battery_level
85 self.battery_change.emit(new_battery_level)
88 def check_signal_change(self):
89 new_signal_level = self.get_signal_percentage()
90 if new_signal_level==self.signal_level:
92 self.signal_level = new_signal_level
93 self.signal_change.emit(new_signal_level)