[pkg-fso-commits] [SCM] framworkd debian packageing branch, master, updated. milestone2-110-g76700a0

Michael 'Mickey' Lauer mickey at vanille-media.de
Tue Sep 2 10:34:57 UTC 2008


The following commit has been merged in the master branch:
commit ce06f9f0ecccd4777e05a6dbf23851015460669f
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Wed Aug 27 23:58:21 2008 +0200

    odeviced: kernel26: fix power supply class logic, if not present
    Yay, this now works even if battery is hot-swapped -- even if you change
    from a TH (which has no power supply support yet) to a CC (which has).

diff --git a/framework/subsystems/odeviced/kernel26.py b/framework/subsystems/odeviced/kernel26.py
index 1dee099..49efb05 100644
--- a/framework/subsystems/odeviced/kernel26.py
+++ b/framework/subsystems/odeviced/kernel26.py
@@ -8,7 +8,7 @@ GPLv2 or later
 """
 
 MODULE_NAME = "odeviced.kernel26"
-__version__ = "0.9.3"
+__version__ = "0.9.4"
 
 from helpers import DBUS_INTERFACE_PREFIX, DBUS_PATH_PREFIX, readFromFile, writeToFile, cleanObjectName
 from framework.config import config
@@ -138,7 +138,10 @@ class PowerSupply( dbus.service.Object ):
 
         self.powerStatus = "unknown"
         self.online = False
-        self.capacity = 0
+        self.capacity = -1
+
+    def isPresent( self ):
+        return not ( readFromFile( "%s/present" % self.node ) != '1' )
 
     def onUeventActivity( self, source, condition ):
         data = self.ueventsock.recv( 1024 )
@@ -157,25 +160,40 @@ class PowerSupply( dbus.service.Object ):
         gobject.idle_add( self.handlePropertyChange, dict( [ x.split('=') for x in parts if '=' in x ] ) )
         return False # don't call me again
 
-    def onCapacityCheck( self ):
+    def readCapacity( self ):
+        if not self.isPresent():
+            return -1
         data = readFromFile( "%s/capacity" % self.node )
         try:
             capacity = int( data )
         except ValueError:
-            pass
+            energy_full = readFromFile( "%s/energy_full" % self.node )
+            energy_now = readFromFile( "%s/energy_now" % self.node )
+            if energy_full == "N/A" or energy_now == "N/A":
+                return -1
+            else:
+                return 100 * int(energy_now) / int(energy_full)
         else:
-            self.capacity = capacity # save for later queries
-            if self.online:
-                if capacity > 98:
-                    self.sendPowerStatusIfChanged( "Full" )
-            else: # offline
-                if capacity < 5:
-                    self.sendPowerStatusIfChanged( "Empty" )
-                elif capacity < 10:
-                    self.sendPowerStatusIfChanged( "Critical" )
+            return capacity
+
+    def onCapacityCheck( self ):
+        if not self.isPresent():
+            return True # call me again
+        capacity = self.readCapacity()
+        self.sendCapacityIfChanged( capacity )
+        if self.online:
+            if capacity > 98:
+                self.sendPowerStatusIfChanged( "Full" )
+        else: # offline
+            if capacity <= 5:
+                self.sendPowerStatusIfChanged( "Empty" )
+            elif capacity <= 10:
+                self.sendPowerStatusIfChanged( "Critical" )
         return True # call me again
 
     def handlePropertyChange( self, properties ):
+        if not self.isPresent():
+            return False # don't call me again
         logger.debug( "got property change from uevent socket: %s" % properties )
         try:
             self.online = ( properties["POWER_SUPPLY_ONLINE"] == '1' )
@@ -196,8 +214,12 @@ class PowerSupply( dbus.service.Object ):
         if powerStatus != self.powerStatus:
             self.PowerStatus( powerStatus )
 
+    def sendCapacityIfChanged( self, capacity ):
+        if capacity != self.capacity:
+            self.Capacity( capacity )
+
     #
-    # dbus
+    # dbus methods
     #
     @dbus.service.method( DBUS_INTERFACE, "", "s" )
     def GetName( self ):
@@ -211,28 +233,40 @@ class PowerSupply( dbus.service.Object ):
             dict[key] = readFromFile( "%s/%s" % ( self.node, key ) )
         return dict
 
+    # FIXME deprecated, should be removed
     @dbus.service.method( DBUS_INTERFACE, "", "i" )
     def GetEnergyPercentage( self ):
-        capacity = readFromFile( "%s/capacity" % self.node )
-        if capacity != "N/A":
-            return int(capacity)
+        if self.capacity == -1:
+            self.onCapacityCheck()
+        return self.capacity
 
-        energy_full = readFromFile( "%s/energy_full" % self.node )
-        energy_now = readFromFile( "%s/energy_now" % self.node )
-        if energy_full == "N/A" or energy_now == "N/A":
-            return -1
-        else:
-            return 100 * int(energy_now) / int(energy_full)
+    @dbus.service.method( DBUS_INTERFACE, "", "i" )
+    def GetCapacity( self ):
+        if self.capacity == -1:
+            self.onCapacityCheck()
+        return self.capacity
 
     @dbus.service.method( DBUS_INTERFACE, "", "s" )
     def GetPowerStatus( self ):
         return self.powerStatus
 
+    @dbus.service.method( DBUS_INTERFACE, "", "b" )
+    def IsPresent( self ):
+        return self.isPresent()
+
+    #
+    # dbus signals
+    #
     @dbus.service.signal( DBUS_INTERFACE, "s" )
     def PowerStatus( self, status ):
         self.powerStatus = status
         logger.info( "power status now %s" % status )
 
+    @dbus.service.signal( DBUS_INTERFACE, "i" )
+    def Capacity( self, percent ):
+        self.capacity = percent
+        logger.info( "capacity now %d" % percent )
+
 #----------------------------------------------------------------------------#
 class PowerSupplyApm( dbus.service.Object ):
 #----------------------------------------------------------------------------#

-- 
framworkd debian packageing



More information about the pkg-fso-commits mailing list