Fixed issue with reading signal level. Updated changelog. Possibly fixed icon in...
[oldschool] / oldschool-0.9.0 / src / opt / oldschool / n900_levels.py
1 #!/usr/bin/env python
2
3 import dbus
4 from PyQt4 import QtCore
5
6 #Thanks to code from http://qt-mobility.blogspot.com/2010/03/getting-n900-battery-level-via-python-d.html
7
8 class LevelReader(QtCore.QObject):
9     #Declare signals
10     battery_change = QtCore.pyqtSignal(int) #Fired when battery level changes
11     signal_change = QtCore.pyqtSignal(int)   #Fired when signal level changes
12     
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
19     phone_net_intf = None
20     
21     def __init__(self):
22         QtCore.QObject.__init__(self)
23         
24         #Need the system bus locally
25         bus = dbus.SystemBus()
26
27         #Set up battery dbus object interface as class-level variable
28         try:
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
36         except Exception,e:
37             print "ERROR: Unknown exception connecting to DBus for battery charge: ",  e
38             self.battery_dev_obj  = None
39         
40         #Set up signal level dbus interface as class-level variable
41         try:
42             phone_net_obj = bus.get_object('com.nokia.phone.net','/com/nokia/phone/net', introspect=False)
43             self.phone_net_intf = dbus.Interface(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
47         except Exception,e:
48             print "ERROR: Unknown exception connecting to DBus for signal level: ",  e
49             self.phone_net_intf = None
50         
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)
55
56     # Read the dbus values
57
58     def get_battery_percentage(self):
59         if self.battery_dev_obj==None:
60             return 0
61         try:
62             prop_value = self.battery_dev_obj.GetProperty('battery.charge_level.percentage')
63             int_value = int(prop_value)
64             return int_value
65         except dbus.DBusException:
66             return 0
67     
68     def get_signal_percentage(self):
69         if self.phone_net_intf==None:
70             return 0
71         try:
72             dbus_return = self.phone_net_intf.get_signal_strength()
73             return int(dbus_return[0])
74         except dbus.DBusException:
75             return 0
76     
77     #Declare my Qt Slots for binding with the timer
78     
79     @QtCore.pyqtSlot()
80     def check_battery_change(self):
81         new_battery_level = self.get_battery_percentage()
82         if new_battery_level==self.battery_level:
83             return
84         self.battery_level = new_battery_level
85         self.battery_change.emit(new_battery_level)
86     
87     @QtCore.pyqtSlot()
88     def check_signal_change(self):
89         new_signal_level = self.get_signal_percentage()
90         if new_signal_level==self.signal_level:
91             return
92         self.signal_level = new_signal_level
93         self.signal_change.emit(new_signal_level)