IOPMPowerSource

Inherits from
IOService
Availability
Available in OS X v10.0 and later.
Declared in
IOPMPowerSource.h

Overview

See IOKit/pwr_mgt/IOPM.h for power source keys relevant to this class. These report-type keys are required for calls to IOPMPowerSource::setReportables(), and they define the IORegistry interface through which data is passed back up to the rest of the system.

A subclassing driver that doesn't want to do anything fancy should:

  1. Subclass IOPMPowerSource

  2. Install its own battery change notifications or polling routine that can converse with actual battery hardware.

  3. When battery state changes, change the relevant member variables through setCurrentCapacity() style accessors.

  4. Call updateStatus() on itself when all such settings have been updated.

The subclass driver should also initially populate its settings and call updateStatus() on launch.

Settings:

 
 ExternalConnected
 Type: bool
 IORegistry Key: kIOPMPSExternalConnectedKey
 True if computer is drawing external power
 
 ExternalChargeCapable
 Type: bool
 IORegistry Key: kIOPMPSExternalChargeCapableKey
 True if external power is capable of charging internal battery
 
 BatteryInstalled
 Type: bool
 IORegistry Key: kIOPMPSBatteryInstalledKey
 True if a battery is present; false if removed
 
 IsCharging
 Type: bool
 IORegistry Key: kIOPMPSIsChargingKey
 True if battery is charging itself from external power
 
 AtWarnLevel
 Type: bool
 IORegistry Key: kIOPMPSAtWarnLevelKey
 True if draining battery capacity and past warn level
 
 AtCriticalLevel
 Type: bool
 IORegistry Key: kIOPMPSAtCriticalLevelKey
 True if draining battery capacity and past critical level
 
 CurrentCapacity
 MaxCapacity
 Type: unsigned int
 IORegistry Key: kIOPMPSCurrentCapacityKey, kIOPMPSMaxCapacityKey
 Capacity measured in mAh
 
 TimeRemaining
 Type: int
 IORegistry Key: kIOPMPSTimeRemainingKey
 Time remaining measured in minutes
 
 Amperage
 Type: int
 IORegistry Key: kIOPMPSAmperageKey
 Current is measured in mA
 
 Voltage
 Type: unsigned int
 IORegistry Key: kIOPMPSVoltageKey
 Voltage measured in mV
 
 CycleCount
 Type: unsigned int
 IORegistry Key: kIOPMPSCycleCountKey
 Number of charge/discharge cycles
 
 AdapterInfo
 Type: int
 IORegistry Key: kIOPMPSAdapterInfoKey
 Power adapter information
 
 Location
 Type: int
 IORegistry Key: kIOPMPSLocationKey
 Clue about battery's location in machine - Left vs. Right
 
 ErrorCondition
 Type: OSSymbol
 IORegistry Key: kIOPMPSErrorConditionKey
 String describing error state of battery
 
 Manufacturer
 Type: OSSymbol
 IORegistry Key: kIOPMPSManufacturerKey
 String describing battery manufacturer
 
 Manufactured Date
 Type: unsigned 16-bit bitfield
 IORegistry Key: kIOPMPSManufactureDateKey
 Date is published in a bitfield per the Smart Battery Data spec rev 1.1
 in section 5.1.26
   Bits 0...4 => day (value 1-31; 5 bits)
   Bits 5...8 => month (value 1-12; 4 bits)
   Bits 9...15 => years since 1980 (value 0-127; 7 bits)
 
 Model
 Type: OSSymbol
 IORegistry Key: kIOPMPSModelKey
 String describing model number
 
 Serial
 Type: OSSymbol
 IORegistry Key: kIOPMPSSerialKey
 String describing serial number or unique info
 The serial number published hear bears no correspondence to the Apple serial
 number printed on each battery. This is a manufacturer serial number with
 no correlation to the printed serial number.
 
 LegacyIOBatteryInfo
 Type: OSDictionary
 IORegistry Key: kIOPMPSLegacyBatteryInfoKey
 Dictionary conforming to the OS X 10.0-10.4
 

Tasks

Miscellaneous

Instance Methods

powerSource

Creates a new IOPMPowerSource nub. Must be attached to IORegistry, and registered by provider.

static IOPMPowerSource *powerSource( void);

setPSProperty

void setPSProperty( const OSSymbol *, OSObject *);
Discussion

All of these methods funnel through the generic accessor method setPSProperty. Caller can pass in any arbitrary OSSymbol key, and that value will be stored in the PM settings dictionary, and relayed onto the IORegistry at update time.

updateStatus

Must be called by physical battery controller when battery state has changed significantly.

virtual void updateStatus( void);
Discussion

The system will not poll this object for battery updates. Rather \ the battery's controller must call updateStatus() every time state changes \ and the settings will be relayed to higher levels of power management. \ The subclassing driver should override this only if the driver needs to add \ new settings to the base class.

Instance Variables

properties

OSDictionary *properties;

Stores power source state

settingsChangedSinceLastUpdate

bool settingsChangedSinceUpdate;

Used by subclasses to determine if any settings have been modified via the accessors below since last call to update(). true is settings have changed; false otherwise.

See Also

settingsChangedSinceUpdate

bool settingsChangedSinceUpdate;

Used by subclasses to determine if any settings have been modified via the accessors below since last call to update(). true is settings have changed; false otherwise.

See Also