Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/powerd.py
diff options
context:
space:
mode:
authorRafael Ortiz <rafael@activitycentral.com>2011-03-25 02:10:10 (GMT)
committer Rafael Ortiz <rafael@activitycentral.com>2011-03-25 02:10:10 (GMT)
commitc3c97e4844945fae15a55942af06af185fa1c5d6 (patch)
treed9541befe1c6043108ef629875ec212fbd18600c /powerd.py
parent8afa0a514fc6102e54d8bb27bc5786c52e0b1681 (diff)
Disables idle suspend on XO while any of the stopwatches are
running by James Cameron
Diffstat (limited to 'powerd.py')
-rw-r--r--powerd.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/powerd.py b/powerd.py
new file mode 100644
index 0000000..88b4e84
--- /dev/null
+++ b/powerd.py
@@ -0,0 +1,51 @@
+# Copyright (C) 2011 One Laptop per Child
+#
+# 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 ofwa
+# 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+
+
+def marker():
+ """ filesystem path of per-process inhibit file """
+ return os.path.join('/var/run/powerd-inhibit-suspend', str(os.getpid()))
+
+
+class Suspend():
+ """ control of powerd idle suspend,
+ reference counted,
+ does nothing if powerd is not present """
+
+ def __init__(self):
+ self.references = 0
+
+ def inhibit(self):
+ """ inhibit suspend for this process """
+ if self.references == 0:
+ try:
+ file(marker(), 'w').write('')
+ except:
+ return
+ self.references += 1
+
+ def uninhibit(self):
+ """ uninhibit suspend for this process """
+ self.references -= 1
+ if self.references > 0:
+ return
+ try:
+ os.remove(marker())
+ except:
+ pass
+ self.references = 0