]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/pwr_mgt/IOPMPowerSource.h
xnu-4903.221.2.tar.gz
[apple/xnu.git] / iokit / IOKit / pwr_mgt / IOPMPowerSource.h
index a723fbb30944d5a1ca54c87820700f52008ff925..015c70a054777545c5218096a1c50bde4f5444c6 100644 (file)
@@ -1,31 +1,29 @@
 /*
  * Copyright (c) 1998-2005 Apple Computer, Inc. All rights reserved.
  *
 /*
  * Copyright (c) 1998-2005 Apple Computer, Inc. All rights reserved.
  *
- * @APPLE_LICENSE_OSREFERENCE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  * 
- * This file contains Original Code and/or Modifications of Original Code 
- * as defined in and that are subject to the Apple Public Source License 
- * Version 2.0 (the 'License'). You may not use this file except in 
- * compliance with the License.  The rights granted to you under the 
- * License may not be used to create, or enable the creation or 
- * redistribution of, unlawful or unlicensed copies of an Apple operating 
- * system, or to circumvent, violate, or enable the circumvention or 
- * violation of, any terms of an Apple operating system software license 
- * agreement.
- *
- * Please obtain a copy of the License at 
- * http://www.opensource.apple.com/apsl/ and read it before using this 
- * file.
- *
- * The Original Code and all software distributed under the License are 
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
- * Please see the License for the specific language governing rights and 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
+ * 
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
  * limitations under the License.
  * limitations under the License.
- *
- * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
+ * 
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
  
 #ifndef _IOPMPowerSource_h_
  */
  
 #ifndef _IOPMPowerSource_h_
@@ -42,7 +40,8 @@ enum {
     kTenMinutesInSeconds = 600
 };
 
     kTenMinutesInSeconds = 600
 };
 
-/* class IOPMPowerSource
+
+/*! @class IOPMPowerSource
  *
  * 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(),
  *
  * 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(),
@@ -51,18 +50,19 @@ enum {
  *
  * A subclassing driver that doesn't want to do anything fancy should:
  *   1. Subclass IOPMPowerSource
  *
  * A subclassing driver that doesn't want to do anything fancy should:
  *   1. Subclass IOPMPowerSource
- *   3. Install its own battery change notifications or polling routine that can
+ *   2. Install its own battery change notifications or polling routine that can
  *          converse with actual battery hardware.
  *          converse with actual battery hardware.
- *   4. When battery state changes, change the relevant member variables
+ *   3. When battery state changes, change the relevant member variables
  *          through setCurrentCapacity() style accessors.
  *          through setCurrentCapacity() style accessors.
- *   5. Call updateStatus() on itself when all such settings have been updated.
+ *   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.
  *
  *
  *   
  * The subclass driver should also initially populate its settings and call
  * updateStatus() on launch.
  *
  *
- * Settings
+ * Settings:
  *
  *
+ * <pre>
  * ExternalConnected
  * Type: bool
  * IORegistry Key: kIOPMPSExternalConnectedKey
  * ExternalConnected
  * Type: bool
  * IORegistry Key: kIOPMPSExternalConnectedKey
@@ -139,6 +139,15 @@ enum {
  * IORegistry Key: kIOPMPSManufacturerKey
  * String describing battery manufacturer
  *
  * 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
  * Model
  * Type: OSSymbol
  * IORegistry Key: kIOPMPSModelKey
@@ -147,12 +156,16 @@ enum {
  * Serial
  * Type: OSSymbol
  * IORegistry Key: kIOPMPSSerialKey
  * Serial
  * Type: OSSymbol
  * IORegistry Key: kIOPMPSSerialKey
- * String describing serial number  or unique info
+ * 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 
  *
  * LegacyIOBatteryInfo
  * Type: OSDictionary
  * IORegistry Key: kIOPMPSLegacyBatteryInfoKey
  * Dictionary conforming to the OS X 10.0-10.4 
+ * </pre>
  */
 
 class IOPMPowerSource : public IOService
  */
 
 class IOPMPowerSource : public IOService
@@ -162,9 +175,17 @@ class IOPMPowerSource : public IOService
     friend class IOPMPowerSourceList;
 
  protected:
     friend class IOPMPowerSourceList;
 
  protected:
-    // Tracking for IOPMPowerSourceList
-    IOPMPowerSource         *nextInList;
+
+/*! @var settingsChangedSinceLastUpdate
+ * 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.
+ */
+    bool settingsChangedSinceUpdate;
     
     
+/*! @var properties
+ * Stores power source state
+ */
     OSDictionary            *properties;
 
     const OSSymbol *externalConnectedKey;
     OSDictionary            *properties;
 
     const OSSymbol *externalConnectedKey;
@@ -187,6 +208,9 @@ class IOPMPowerSource : public IOService
     const OSSymbol *serialKey;
     const OSSymbol *batteryInfoKey;
 
     const OSSymbol *serialKey;
     const OSSymbol *batteryInfoKey;
 
+    // Tracking for IOPMPowerSourceList
+    IOPMPowerSource         *nextInList;
+
  public:
 
 /*! @function powerSource
  public:
 
 /*! @function powerSource
@@ -195,9 +219,9 @@ class IOPMPowerSource : public IOService
 */
     static IOPMPowerSource *powerSource(void);
 
 */
     static IOPMPowerSource *powerSource(void);
 
-    virtual bool init(void);
+    virtual bool init(void) APPLE_KEXT_OVERRIDE;
     
     
-    virtual void free(void);
+    virtual void free(void) APPLE_KEXT_OVERRIDE;
 
 /*! @function updateStatus
     @abstract Must be called by physical battery controller when battery state
 
 /*! @function updateStatus
     @abstract Must be called by physical battery controller when battery state
@@ -235,7 +259,10 @@ class IOPMPowerSource : public IOService
     OSSymbol *serial(void);
     OSDictionary *legacyIOBatteryInfo(void);
     
     OSSymbol *serial(void);
     OSDictionary *legacyIOBatteryInfo(void);
     
+    OSObject *getPSProperty(const OSSymbol *);
+    
 protected:
 protected:
+
 /* Protected "setter" methods for subclasses
  * Subclasses should use these setters to modify all battery properties.
  * 
 /* Protected "setter" methods for subclasses
  * Subclasses should use these setters to modify all battery properties.
  * 
@@ -264,7 +291,13 @@ protected:
     void setModel(OSSymbol *);
     void setSerial(OSSymbol *);
     void setLegacyIOBatteryInfo(OSDictionary *);
     void setModel(OSSymbol *);
     void setSerial(OSSymbol *);
     void setLegacyIOBatteryInfo(OSDictionary *);
-    
+
+/*! 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.
+ */
+    void setPSProperty(const OSSymbol *, OSObject *);
 };
 
 #endif
 };
 
 #endif