Package sparked :: Package hardware :: Module power
[hide private]
[frames] | no frames]

Source Code for Module sparked.hardware.power

  1  # Copyright (c) 2010 Arjan Scherpenisse 
  2  # See LICENSE for details. 
  3   
  4  """ 
  5  Power monitor: fires events when AC power becomes (un)available; and 
  6  fires an event when the power becomes critically low. 
  7  """ 
  8   
  9  import dbus 
 10   
 11  from twisted.application import service 
 12  from sparked import events 
 13   
 14   
15 -class PowerService(service.Service):
16 """ 17 A service which monitors the power state of the computer. It fires 18 "available" and "low" events when the power state changes. On the 19 startup of the service, these signals get fired once to ensure a 20 valid system state. 21 """ 22
23 - def __init__(self):
24 self.manager = None
25 26
27 - def startService(self):
28 29 try: 30 bus = dbus.Bus() 31 hal_interface = 'org.freedesktop.PowerManagement' 32 hal_udi = '/org/freedesktop/PowerManagement' 33 34 managerObj = bus.get_object(hal_interface, hal_udi) 35 bus.add_signal_receiver(self.powerEvent, 36 dbus_interface=hal_interface, 37 signal_name='OnBatteryChanged') 38 bus.add_signal_receiver(self.lowpowerEvent, 39 dbus_interface=hal_interface, 40 signal_name='LowBatteryChanged') 41 manager = dbus.Interface(managerObj, hal_interface) 42 43 self.powerEvent(manager.GetOnBattery()) 44 self.lowpowerEvent(manager.GetLowBattery()) 45 46 except dbus.exceptions.DBusException: 47 # not found, try DeviceKit 48 try: 49 bus = dbus.SystemBus() 50 dk_interface = 'org.freedesktop.DeviceKit.Power' 51 dk_udi = '/org/freedesktop/DeviceKit/Power' 52 53 managerObj = bus.get_object(dk_interface, dk_udi) 54 bus.add_signal_receiver(self.dkPowerChanged, 55 dbus_interface=dk_interface, 56 signal_name='Changed') 57 manager = dbus.Interface(managerObj, dk_interface) 58 self.dk_properties = dbus.Interface(managerObj, 'org.freedesktop.DBus.Properties') 59 self.dkPowerChanged() 60 61 except dbus.exceptions.DBusException: 62 # finally, try UPower 63 bus = dbus.SystemBus() 64 dk_interface = 'org.freedesktop.UPower' 65 dk_udi = '/org/freedesktop/UPower' 66 67 managerObj = bus.get_object(dk_interface, dk_udi) 68 bus.add_signal_receiver(self.upPowerChanged, 69 dbus_interface=dk_interface, 70 signal_name='Changed') 71 manager = dbus.Interface(managerObj, dk_interface) 72 self.up_properties = dbus.Interface(managerObj, 'org.freedesktop.DBus.Properties') 73 self.upPowerChanged()
74 75
76 - def upPowerChanged(self):
77 """ 78 Called when UPower signals that something with the power has changed. 79 """ 80 dk_interface = 'org.freedesktop.UPower' 81 self.powerEvent(self.up_properties.Get(dk_interface, "OnBattery")) 82 self.lowpowerEvent(self.up_properties.Get(dk_interface, "OnLowBattery"))
83 84
85 - def dkPowerChanged(self):
86 """ 87 Called when DeviceKit signals that something with the power has changed. 88 """ 89 dk_interface = 'org.freedesktop.DeviceKit.Power' 90 self.powerEvent(self.dk_properties.Get(dk_interface, "on-battery")) 91 self.lowpowerEvent(self.dk_properties.Get(dk_interface, "on-low-battery"))
92 93
94 - def powerEvent(self, onBattery):
95 """ 96 Called when the power state switches between running on battery and 97 running on mains. The 'available' field contains a flag which is True 98 when the computer is running on mains (AC) power. 99 """ 100 powerEvents.dispatch("available", not onBattery)
101 102
103 - def lowpowerEvent(self, low):
104 """ 105 Called when the battery state becomes critically low, or 106 changes from critical back to normal. When the 'low' field of 107 the event is True, the power is critically low. Triggers a 108 'low' event on this module's dispatcher. 109 """ 110 powerEvents.dispatch("low", low)
111 112 113 powerEvents = events.EventDispatcher() 114