From fb2b76a90d350e0774ce878b3206cbf9c19a7bea Mon Sep 17 00:00:00 2001 From: Paul Fox Date: Tue, 09 Mar 2010 22:39:52 +0000 Subject: Add support for OLPC Powerd (#1774) --- (limited to 'extensions') diff --git a/extensions/cpsection/power/model.py b/extensions/cpsection/power/model.py index c76035d..48d05de 100644 --- a/extensions/cpsection/power/model.py +++ b/extensions/cpsection/power/model.py @@ -15,22 +15,39 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # +import os from gettext import gettext as _ -import gconf +import logging +import gconf import dbus OHM_SERVICE_NAME = 'org.freedesktop.ohm' OHM_SERVICE_PATH = '/org/freedesktop/ohm/Keystore' OHM_SERVICE_IFACE = 'org.freedesktop.ohm.Keystore' +POWERD_FLAG_DIR = '/etc/powerd/flags' +POWERD_INHIBIT_FLAG = '/etc/powerd/flags/inhibit-suspend' + +_logger = logging.getLogger('ControlPanel - Power') + + class ReadError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) +def using_powerd(): + # directory exists if powerd running, and it's recent + # enough to be controllable. + return os.access(POWERD_FLAG_DIR, os.W_OK) + def get_automatic_pm(): + if using_powerd(): + return not os.access(POWERD_INHIBIT_FLAG, os.R_OK) + + # ohmd client = gconf.client_get_default() return client.get_bool('/desktop/sugar/power/automatic') @@ -40,6 +57,20 @@ def print_automatic_pm(): def set_automatic_pm(enabled): """Automatic suspends on/off.""" + if using_powerd(): + # powerd + if enabled == 'off' or enabled == 0: + try: + fd = open(POWERD_INHIBIT_FLAG, 'w') + except IOError: + _logger.debug('File %s is not writeable' % POWERD_INHIBIT_FLAG) + else: + fd.close() + else: + os.unlink(POWERD_INHIBIT_FLAG) + return + + # ohmd bus = dbus.SystemBus() proxy = bus.get_object(OHM_SERVICE_NAME, OHM_SERVICE_PATH) keystore = dbus.Interface(proxy, OHM_SERVICE_IFACE) @@ -55,7 +86,7 @@ def set_automatic_pm(enabled): client = gconf.client_get_default() client.set_bool('/desktop/sugar/power/automatic', enabled) - return 0 + return def get_extreme_pm(): client = gconf.client_get_default() -- cgit v0.9.1