---
title: IOPMPowerSource
framework: kernel
role: symbol
role_heading: Class
path: kernel/iopmpowersource
---

# IOPMPowerSource

## Declaration

```occ
class IOPMPowerSource : IOService
```

## Overview

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: Subclass IOPMPowerSource Install its own battery change notifications or polling routine that can converse with actual battery hardware. When battery state changes, change the relevant member variables through setCurrentCapacity() style accessors. 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

## Topics

### Miscellaneous

- [powerSource](kernel/iopmpowersource/1809904-powersource.md)
- [setPSProperty](kernel/iopmpowersource/1809917-setpsproperty.md)
- [updateStatus](kernel/iopmpowersource/1809926-updatestatus.md)

### Instance Variables

- [settingsChangedSinceUpdate](kernel/iopmpowersource/settingschangedsinceupdate.md)
- [properties](kernel/iopmpowersource/properties.md)

### Instance Methods

- [adapterInfo](kernel/iopmpowersource/1543712-adapterinfo.md)
- [amperage](kernel/iopmpowersource/1543726-amperage.md)
- [atCriticalLevel](kernel/iopmpowersource/1543768-atcriticallevel.md)
- [atWarnLevel](kernel/iopmpowersource/1543776-atwarnlevel.md)
- [batteryInstalled](kernel/iopmpowersource/1543775-batteryinstalled.md)
- [capacityPercentRemaining](kernel/iopmpowersource/1543736-capacitypercentremaining.md)
- [currentCapacity](kernel/iopmpowersource/1543777-currentcapacity.md)
- [cycleCount](kernel/iopmpowersource/1543711-cyclecount.md)
- [errorCondition](kernel/iopmpowersource/1543760-errorcondition.md)
- [externalChargeCapable](kernel/iopmpowersource/1543708-externalchargecapable.md)
- [externalConnected](kernel/iopmpowersource/1543749-externalconnected.md)
- [free](kernel/iopmpowersource/1543728-free.md)
- [getMetaClass](kernel/iopmpowersource/1543720-getmetaclass.md)
- [getPSProperty](kernel/iopmpowersource/1543772-getpsproperty.md)
- [init](kernel/iopmpowersource/1543771-init.md)
- [isCharging](kernel/iopmpowersource/1543769-ischarging.md)
- [legacyIOBatteryInfo](kernel/iopmpowersource/1543735-legacyiobatteryinfo.md)
- [location](kernel/iopmpowersource/1543759-location.md)
- [manufacturer](kernel/iopmpowersource/1543716-manufacturer.md)
- [maxCapacity](kernel/iopmpowersource/1543724-maxcapacity.md)
- [model](kernel/iopmpowersource/1543766-model.md)
- [serial](kernel/iopmpowersource/1543709-serial.md)
- [setAdapterInfo](kernel/iopmpowersource/1543733-setadapterinfo.md)
- [setAmperage](kernel/iopmpowersource/1543739-setamperage.md)
- [setAtCriticalLevel](kernel/iopmpowersource/1543731-setatcriticallevel.md)
- [setAtWarnLevel](kernel/iopmpowersource/1543755-setatwarnlevel.md)
- [setBatteryInstalled](kernel/iopmpowersource/1543762-setbatteryinstalled.md)
- [setCurrentCapacity](kernel/iopmpowersource/1543706-setcurrentcapacity.md)
- [setCycleCount](kernel/iopmpowersource/1543758-setcyclecount.md)
- [setErrorCondition](kernel/iopmpowersource/1543748-seterrorcondition.md)
- [setExternalChargeCapable](kernel/iopmpowersource/1543743-setexternalchargecapable.md)
- [setExternalConnected](kernel/iopmpowersource/1543764-setexternalconnected.md)
- [setIsCharging](kernel/iopmpowersource/1543734-setischarging.md)
- [setLegacyIOBatteryInfo](kernel/iopmpowersource/1543714-setlegacyiobatteryinfo.md)
- [setLocation](kernel/iopmpowersource/1543722-setlocation.md)
- [setManufacturer](kernel/iopmpowersource/1543729-setmanufacturer.md)
- [setMaxCapacity](kernel/iopmpowersource/1543719-setmaxcapacity.md)
- [setModel](kernel/iopmpowersource/1543773-setmodel.md)
- [setPSProperty](kernel/iopmpowersource/1543767-setpsproperty.md)
- [setSerial](kernel/iopmpowersource/1543747-setserial.md)
- [setTimeRemaining](kernel/iopmpowersource/1543753-settimeremaining.md)
- [setVoltage](kernel/iopmpowersource/1543751-setvoltage.md)
- [timeRemaining](kernel/iopmpowersource/1543738-timeremaining.md)
- [updateStatus](kernel/iopmpowersource/1543745-updatestatus.md)
- [voltage](kernel/iopmpowersource/1543763-voltage.md)

### Type Methods

- [powerSource](kernel/iopmpowersource/1543765-powersource.md)

## Relationships

### Inherits From

- [IOService](kernel/ioservice.md)

## See Also

### Power Management

- [IOACPIPlatformDevice](kernel/ioacpiplatformdevice.md)
- [IOACPIPlatformExpert](kernel/ioacpiplatformexpert.md)
- [IOPMPowerSourceList](kernel/iopmpowersourcelist.md)
- [IOPMrootDomain](kernel/iopmrootdomain.md)
- [IOPowerConnection](kernel/iopowerconnection.md)
- [IOPwrController](kernel/iopwrcontroller.md)
- [IOACPIAddress](kernel/ioacpiaddress.md)
- [IOACPIAddressSpaceDescriptor](kernel/ioacpiaddressspacedescriptor.md)
- [IOACPIAddressSpaceHandler](kernel/ioacpiaddressspacehandler.md)
- [IOACPIAddressSpaceID](kernel/ioacpiaddressspaceid.md)
- [IOPMPowerState](kernel/iopmpowerstate.md)
- [acknowledgeSleepWakeNotification](kernel/1579170-acknowledgesleepwakenotification.md)
- [gIOACPIAddressKey](kernel/gioacpiaddresskey.md)
- [gIOACPIDeviceStatusKey](kernel/gioacpidevicestatuskey.md)
- [gIOACPIHardwareIDKey](kernel/gioacpihardwareidkey.md)
- [gIOACPIPlane](kernel/gioacpiplane.md)
- [gIOACPIUniqueIDKey](kernel/gioacpiuniqueidkey.md)
