def gather(self): reasons = readFromFile( self.__class__.SYSFS_RESUME_REASON_PATH).split('\n') for line in reasons: if line.startswith("*"): reason = line[2:] break else: print "nope" logger.info("No resume reason marked in %s" % self.__class__.SYSFS_RESUME_REASON_PATH) return "unknown" if reason == "EINT09_PMU": logger.debug("PMU resume reason marked in %s" % self.__class__.SYSFS_RESUME_REASON_PATH) value = readFromFile(self.__class__.SYSFS_RESUME_SUBREASON_PATH) try: subreason = self._intmap2[value] except KeyError: logger.debug("Unknown subreason for PMU resume") return "PMU" else: return subreason else: return self._intmap1.get(reason, "unknown")
def __init__( self, bus, index, node ): self.interface = self.DBUS_INTERFACE self.path = DBUS_PATH_PREFIX + "/Display/%s" % cleanObjectName( node.split('/')[-1] ) dbus.service.Object.__init__( self, bus, self.path ) logger.info( "%s %s initialized. Serving %s at %s" % ( self.__class__.__name__, __version__, self.interface, self.path ) ) self.node = node self.max = int( readFromFile( "%s/max_brightness" % self.node ) ) self.current = int( readFromFile( "%s/actual_brightness" % self.node ) ) logger.debug( "current brightness %d, max brightness %d" % ( self.current, self.max ) ) self.fbblank = config.getBool( MODULE_NAME, "fb_blank", True ) logger.info( "framebuffer blanking %s" % ( "enabled" if self.fbblank else "disabled" ) ) # also register object under an incremental path self.path2 = DBUS_PATH_PREFIX + "/Display/%d" % self.__class__.OBJECT_PATH_COUNTER self.add_to_connection( self._connection, self.path2 ) self.__class__.OBJECT_PATH_COUNTER += 1
def GetInfo( self ): # AC/BATs differ in lots of nodes. Do we want additional methods for present / online ? keys = [ key for key in os.listdir( self.node ) if key != "uevent" if os.path.isfile( "%s/%s" % ( self.node, key ) ) ] dict = {} for key in keys: dict[key] = readFromFile( "%s/%s" % ( self.node, key ) ) return dict
def readCapacity( self ): if not self.isBattery: return 100 if not self.isPresent(): return -1 data = readFromFile( "%s/capacity" % self.node ) try: capacity = int( data ) except ValueError: 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: return capacity
def GetCpuInfo(self): cpuinfo = readFromFile("/proc/cpuinfo").split('\n') d = {} for line in cpuinfo: try: key, value = line.split(':') except ValueError: # no valid line continue d[key.strip()] = value.strip() return d
def __init__( self, bus, index, node ): self.interface = self.DBUS_INTERFACE self.path = DBUS_PATH_PREFIX + "/LED/%s" % cleanObjectName( node.split('/')[-1] ) dbus.service.Object.__init__( self, bus, self.path ) logger.info( "%s %s initialized. Serving %s at %s" % ( self.__class__.__name__, __version__, self.interface, self.path ) ) self.node = node # initial status = off self.SetBrightness( 0 ) # store available triggers for later self.triggers = readFromFile( "%s/trigger" % self.node ).split() logger.debug( "available triggers %s" % self.triggers )
def prepareDaemonConfigurationForInterface( iface ): #============================================================================# name = iface.name() address = iface.ipAddress4() nameservers = "" resolv_conf = readFromFile( ETC_RESOLV_CONF ).split( '\n' ) for line in resolv.conf: if line.startswith( "nameserver" ): nameservers += ( line.strip().split( ' ' ) ) nameservers += " " conf_file = daemon_conf_file_template % ( name, nameservers, address ) writeToFile( ETC_RESOLV_CONF, conf_file )
def prepareDaemonConfigurationForInterface(iface): #============================================================================# name = iface.name() address = iface.ipAddress4() nameservers = "" resolv_conf = readFromFile(ETC_RESOLV_CONF).split('\n') for line in resolv_conf: if line.startswith("nameserver"): nameserver = line.strip().split(' ')[1] nameservers += nameserver nameservers += " " conf_file = daemon_conf_file_template % (name, nameservers, address) writeToFile(ETC_UDHCPD_CONF, conf_file)
def __init__( self, bus, index, node ): self.interface = self.DBUS_INTERFACE self.path = DBUS_PATH_PREFIX + "/PowerSupply/%s" % cleanObjectName( node.split('/')[-1] ) dbus.service.Object.__init__( self, bus, self.path ) logger.info( "%s %s initialized. Serving %s at %s" % ( self.__class__.__name__, __version__, self.interface, self.path ) ) self.node = node self.powerStatus = "unknown" self.online = False self.capacity = -1 self.type_ = readFromFile( "%s/type" % self.node ).lower() self.isBattery = ( self.type_ == "battery" ) # get polling-free battery notifications via kobject/uevent if self.isBattery: KObjectDispatcher.addMatch( "change", "/class/power_supply/%s" % node.split('/')[-1], self.handlePropertyChange ) capacityCheckTimeout = config.getInt( MODULE_NAME, "capacity_check_timeout", 60*5 ) self.capacityWatch = gobject.timeout_add_seconds( capacityCheckTimeout, self.onCapacityCheck ) # FIXME should this rather be handled globally (controller issuing a coldstart on every subsystem)? Yes! gobject.idle_add( self.onColdstart )
def GetCurrentTime( self ): """Return seconds since epoch (UTC)""" return int( readFromFile( "%s/since_epoch" % self.node ) )
def getPower(self): return int(readFromFile(self.powernode))
def onColdstart( self ): data = readFromFile( "%s/uevent" % self.node ) parts = data.split( '\n' ) d = dict( [ x.split('=') for x in parts if '=' in x ] ) self.handlePropertyChange( "coldplug", "<this-battery>", **d ) return False # mainloop: don't call me again
def theType( self ): return readFromFile( "%s/type" % self.node )
def isPresent( self ): toRead = "%s/present" if self.isBattery else "%s/online" present = readFromFile( toRead % self.node ) return ( present == "1" )
def getPower( self ): return readFromFile( self.powernode ).startswith( "status:\t\tenabled" )
def GetBacklightPower( self ): return readFromFile( "%s/bl_power" % self.node ) == "0"
def GetBrightness( self ): value = readFromFile( "%s/actual_brightness" % self.node ) return self._valueToPercent( value )