epoc32/include/hwrmpower.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     2
// All rights reserved.
williamr@4
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@4
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     7
//
williamr@4
     8
// Initial Contributors:
williamr@4
     9
// Nokia Corporation - initial contribution.
williamr@4
    10
//
williamr@4
    11
// Contributors:
williamr@4
    12
//
williamr@4
    13
// Description:
williamr@4
    14
//
williamr@4
    15
williamr@4
    16
#ifndef HWRMPOWER_H_
williamr@4
    17
#define HWRMPOWER_H_
williamr@4
    18
williamr@4
    19
// INCLUDES
williamr@4
    20
#include <e32base.h>
williamr@4
    21
#include <e32cmn.h> 
williamr@4
    22
williamr@4
    23
// CONSTANTS
williamr@4
    24
williamr@4
    25
// FORWARD DECLARATIONS
williamr@4
    26
williamr@4
    27
class CHWRMPowerImpl;
williamr@4
    28
class MHWRMBatteryPowerObserver;
williamr@4
    29
williamr@4
    30
#ifdef SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
    31
class MHWRMBatteryChargingStatusObserver;
williamr@4
    32
class MHWRMBatteryChargingCurrentObserver;
williamr@4
    33
class MHWRMBatteryFullChargingTimeObserver;
williamr@4
    34
#endif //SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
    35
williamr@4
    36
/**
williamr@4
    37
* HW Resource Manager Power API is a library API providing the 
williamr@4
    38
* ability to request detailed information regarding the battery 
williamr@4
    39
* capacity, voltage and current consumption.
williamr@4
    40
*
williamr@4
    41
* The API consists of the classes CHWRMPower, MHWRMBatteryConsumptionObserver
williamr@4
    42
* and MHWRMBatteryVoltageObserver. If the client requires periodical measurements
williamr@4
    43
* of the Average Voltage and/or Average Consumption, it should also provide callback pointer
williamr@4
    44
* of the MHWRMBatteryConsumptionObserver and/or MHWRMBatteryVoltageObserver
williamr@4
    45
* implementing class for the NewL() method.
williamr@4
    46
*
williamr@4
    47
* Usage:
williamr@4
    48
*
williamr@4
    49
* @code
williamr@4
    50
* #include <hwrmpower.h> 
williamr@4
    51
*
williamr@4
    52
* // A CHWRMPower instance can be created by using NewL() or NewLC() methods. 
williamr@4
    53
* // Periodical measurements are required so callbacks are provided. Assume 
williamr@4
    54
* // the calling object implements  both interfaces.
williamr@4
    55
* CHWRMPower* power = CHWRMPower::NewL(this, this);
williamr@4
    56
*
williamr@4
    57
* // Get battery info.
williamr@4
    58
* TRequestStatus& status;
williamr@4
    59
* TBatteryConsumptionData batteryConsumptionData;
williamr@4
    60
* power->GetBatteryInfo(status, batteryConsumptionData); 
williamr@4
    61
* 
williamr@4
    62
* User::WaitForRequest(status);
williamr@4
    63
* User::LeaveIfError(status.Int());
williamr@4
    64
* 
williamr@4
    65
* // Start receiving periodical voltage measurements.
williamr@4
    66
* TRequestStatus& statusStart;
williamr@4
    67
* TIntervalMultiple intervalMultiple = EThreeTimesBaseTimeInterval;
williamr@4
    68
* power->StartAverageVoltageReporting(statusStart, intervalMultiple);
williamr@4
    69
*  
williamr@4
    70
* User::WaitForRequest(statusStart);
williamr@4
    71
* User::LeaveIfError(statusStart.Int());
williamr@4
    72
* 
williamr@4
    73
* // Measurements are being when the ProcessVoltageMeasurement() method 
williamr@4
    74
* // of the MHWRMBatteryVoltageObserver interface is called.
williamr@4
    75
*  
williamr@4
    76
* // Stop receiving measurements when done
williamr@4
    77
* power->StopAverageVoltageReportingL(); 
williamr@4
    78
*
williamr@4
    79
* // To clean up, delete the created object:
williamr@4
    80
* delete power;
williamr@4
    81
* @endcode
williamr@4
    82
*
williamr@4
    83
* @publishedAll
williamr@4
    84
* @released
williamr@4
    85
*/
williamr@4
    86
NONSHARABLE_CLASS(CHWRMPower) : public CBase
williamr@4
    87
    {            
williamr@4
    88
public:
williamr@4
    89
	
williamr@4
    90
	/**
williamr@4
    91
	* Data structure used to retreive data from a call to GetBatteryVoltageInfo
williamr@4
    92
	*/ 
williamr@4
    93
	struct TBatteryVoltageData 
williamr@4
    94
		{
williamr@4
    95
		TInt iRemainingVoltage;
williamr@4
    96
		TInt iMaximumVoltage;
williamr@4
    97
		TInt iMinimumVoltage;
williamr@4
    98
		};
williamr@4
    99
		
williamr@4
   100
	/**
williamr@4
   101
	* Data structure used to retreive data from a call to GetBatteryInfo
williamr@4
   102
	*/ 
williamr@4
   103
    struct TBatteryConsumptionData 
williamr@4
   104
	 	{
williamr@4
   105
	 	TInt iNominalCapacity;
williamr@4
   106
	 	TInt iRemainingCapacity;
williamr@4
   107
	 	TInt iRemainingPercentageCapacity;
williamr@4
   108
	 	};
williamr@4
   109
    
williamr@4
   110
    /**
williamr@4
   111
    	* Data structure used to retreive data from a call to GetBatteryInfo
williamr@4
   112
    	*/
williamr@4
   113
    struct TBatteryPowerMeasurementData 
williamr@4
   114
        {
williamr@4
   115
        TInt iAverageVoltage;
williamr@4
   116
        TInt iAverageCurrent;
williamr@4
   117
        };  
williamr@4
   118
williamr@4
   119
williamr@4
   120
#ifdef SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
   121
williamr@4
   122
    /* The type of charger connected to the device.*/
williamr@4
   123
    enum TBatteryChargerType 
williamr@4
   124
        { 
williamr@4
   125
        EBatteryChargerUnKnown = 0, 
williamr@4
   126
        EBatteryChargerDedicated = 1, 
williamr@4
   127
        EBatteryChargerUsbDedicated = 2,
williamr@4
   128
        EBatteryChargerUsbHost = 3 
williamr@4
   129
        };
williamr@4
   130
williamr@4
   131
    /* The current charging status of the device. */
williamr@4
   132
    enum TBatteryChargingStatus
williamr@4
   133
        {
williamr@4
   134
        EChargingStatusError              = -1, 
williamr@4
   135
        EChargingStatusNotConnected       = 0,  
williamr@4
   136
        EChargingStatusCharging           = 1,  
williamr@4
   137
        EChargingStatusNotCharging        = 2,  
williamr@4
   138
        EChargingStatusAlmostComplete     = 3,  
williamr@4
   139
        EChargingStatusChargingComplete   = 4,  
williamr@4
   140
        EChargingStatusChargingContinued  = 5  
williamr@4
   141
        };
williamr@4
   142
williamr@4
   143
    /* Used to stop the ongoing charging notification. 
williamr@4
   144
     * EChargingNotifierAll used to stop charging current and charging 
williamr@4
   145
     * time notifications. */
williamr@4
   146
     
williamr@4
   147
    enum TBatteryChargingNotifier
williamr@4
   148
        {
williamr@4
   149
        EChargingNotifierAll = 0,
williamr@4
   150
        EChargingNotifierChargingCurrent = 1,
williamr@4
   151
        EChargingNotifierBatteryFullChargingTime = 2
williamr@4
   152
        };
williamr@4
   153
williamr@4
   154
#endif //SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
   155
williamr@4
   156
public:	
williamr@4
   157
williamr@4
   158
    IMPORT_C ~CHWRMPower();
williamr@4
   159
    IMPORT_C static CHWRMPower* NewL();
williamr@4
   160
    IMPORT_C static CHWRMPower* NewLC();
williamr@4
   161
     
williamr@4
   162
public: // New functions
williamr@4
   163
williamr@4
   164
	IMPORT_C void GetBatteryInfo(TRequestStatus& aStatus, TBatteryConsumptionData& aBatteryConsumptionData);
williamr@4
   165
    IMPORT_C void GetBatteryVoltageInfo(TRequestStatus& aStatus, TBatteryVoltageData& aBatteryVoltageData);
williamr@4
   166
    IMPORT_C void GetBaseTimeIntervalL(TInt &aBaseTimeInterval);
williamr@4
   167
    IMPORT_C TInt SetPowerReportObserver(MHWRMBatteryPowerObserver* aPowerReportCallback);
williamr@4
   168
    IMPORT_C TInt StartAveragePowerReporting(TRequestStatus& aStatus, const TUint& aInterval);
williamr@4
   169
    IMPORT_C void StopAveragePowerReportingL(); 
williamr@4
   170
    
williamr@4
   171
#ifdef SYMBIAN_HWRM_EXTPOWERINFO 
williamr@4
   172
    
williamr@4
   173
    IMPORT_C TInt GetBatteryChargerType(TBatteryChargerType& aChargerType);
williamr@4
   174
    IMPORT_C TInt GetBatteryChargingStatus(TBatteryChargingStatus& aChargingStatus);
williamr@4
   175
    IMPORT_C TInt SetBatteryChargingObserver(
williamr@4
   176
             MHWRMBatteryChargingStatusObserver*   aChargingStatusCallback,
williamr@4
   177
             MHWRMBatteryChargingCurrentObserver*     aChrgCurrentCallback,
williamr@4
   178
             MHWRMBatteryFullChargingTimeObserver* aChrgTimeCallback);
williamr@4
   179
    IMPORT_C TInt NotifyAverageChargingCurrent(TRequestStatus& aStatus, const TUint& aInterval);
williamr@4
   180
    IMPORT_C TInt NotifyBatteryFullChargingTime(TRequestStatus& aStatus);
williamr@4
   181
    IMPORT_C void StopChargingNotificationL(TBatteryChargingNotifier aNotifier);
williamr@4
   182
#endif //SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
   183
    
williamr@4
   184
private:
williamr@4
   185
williamr@4
   186
	void ConstructL();
williamr@4
   187
	
williamr@4
   188
private:
williamr@4
   189
williamr@4
   190
	CHWRMPowerImpl* iPowerImpl;	
williamr@4
   191
    };
williamr@4
   192
williamr@4
   193
/**
williamr@4
   194
* A callback interface for power measurements reporting.
williamr@4
   195
*
williamr@4
   196
* If the client requires periodical measurements of the Average Power,
williamr@4
   197
* it needs to derive a class from the MHWRMBatteryPowerObserver interface
williamr@4
   198
* and implement the PowerMeasurement() method. 
williamr@4
   199
* 
williamr@4
   200
* A callback object header example:
williamr@4
   201
*
williamr@4
   202
* @code 
williamr@4
   203
* // INCLUDES
williamr@4
   204
* #include <hwrmpower.h> // Link against HWRMPowerClient.lib.
williamr@4
   205
*
williamr@4
   206
* class CTest : public CBase, 
williamr@4
   207
*               public MHWRMBatteryPowerObserver    
williamr@4
   208
*    {
williamr@4
   209
*    public:
williamr@4
   210
*        CTest();
williamr@4
   211
*        ~CTest();
williamr@4
   212
*                       
williamr@4
   213
*        void ConstructL();
williamr@4
   214
*        static CTest* NewL();
williamr@4
   215
*                
williamr@4
   216
*        // from MHWRMBatteryPowerObserver
williamr@4
   217
*        virtual void PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement);
williamr@4
   218
*
williamr@4
   219
*    private:
williamr@4
   220
*        CHWRMPower* iPower;
williamr@4
   221
*    };
williamr@4
   222
* @endcode
williamr@4
   223
*
williamr@4
   224
* A callback method implementation example:
williamr@4
   225
*
williamr@4
   226
* @code
williamr@4
   227
* void CTest::PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement);
williamr@4
   228
*    {
williamr@4
   229
*  	 if (aErrorCode == KErrNone)
williamr@4
   230
*	 	{
williamr@4
   231
*		INFO_PRINTF2(_L("INFO: Power Measurement Received, averageVolatge=%d, averageCurrent=%d"),aMeasurement.iAverageVoltage, aMeasurement.iAverageCurrent);
williamr@4
   232
*		}
williamr@4
   233
*	 else
williamr@4
   234
*		{
williamr@4
   235
*		INFO_PRINTF2(_L("INFO: Power Measurement Measurement Error, error=%d"),aErr);
williamr@4
   236
*		}
williamr@4
   237
*    }
williamr@4
   238
* @endcode
williamr@4
   239
*
williamr@4
   240
* @publishedAll
williamr@4
   241
* @released
williamr@4
   242
*/
williamr@4
   243
williamr@4
   244
class MHWRMBatteryPowerObserver
williamr@4
   245
    {
williamr@4
   246
public:
williamr@4
   247
    /** 
williamr@4
   248
    * Called when a Power(Voltage and Current) consumption measurement value is received.
williamr@4
   249
    *
williamr@4
   250
    * @param aErr Error code. 
williamr@4
   251
    * @param aMeasurement The Average Power value calculated by the plugin. Valid only when aErr == KErrNone.
williamr@4
   252
    */
williamr@4
   253
williamr@4
   254
    virtual void PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement)=0;   
williamr@4
   255
    };
williamr@4
   256
williamr@4
   257
williamr@4
   258
#ifdef SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
   259
/**
williamr@4
   260
* A callback interface for charging status change.
williamr@4
   261
*
williamr@4
   262
* If the client requires charging status change notofication,
williamr@4
   263
* it needs to derive a class from the MHWRMBatteryChargingStatusObserver interface
williamr@4
   264
* and implement the ChargingStatusChange() method. 
williamr@4
   265
* 
williamr@4
   266
* A callback object header example:
williamr@4
   267
*
williamr@4
   268
* @code 
williamr@4
   269
* // INCLUDES
williamr@4
   270
class CTest : public CBase, 
williamr@4
   271
              public MHWRMBatteryChargingStatusObserver
williamr@4
   272
   {
williamr@4
   273
    public:
williamr@4
   274
        CTest();
williamr@4
   275
        ~CTest();
williamr@4
   276
                       
williamr@4
   277
        void ConstructL();
williamr@4
   278
        static CTest* NewL();
williamr@4
   279
                
williamr@4
   280
        // from MHWRMBatteryChargingStatusObserver
williamr@4
   281
        virtual void ChargingStatusChange( Tint aErrCode,
williamr@4
   282
                   CHWRMPower::TBatteryChargingStatus aChrgStatus);
williamr@4
   283
   };
williamr@4
   284
* @endcode   
williamr@4
   285
* A callback method implementation example:
williamr@4
   286
*
williamr@4
   287
* @code
williamr@4
   288
williamr@4
   289
void CTest:: ChargingStatusChange(TInt aErrorCode,
williamr@4
   290
                          CHWRMPower::TBatteryChargingStatus aChrgStatus);
williamr@4
   291
   {
williamr@4
   292
      if (aErrorCode == KErrNone)
williamr@4
   293
      {
williamr@4
   294
      INFO_PRINTF2(_L("Charging status = %d"), aChrgStatus);
williamr@4
   295
      }
williamr@4
   296
     else
williamr@4
   297
      {
williamr@4
   298
      INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
williamr@4
   299
      }
williamr@4
   300
   }
williamr@4
   301
* @endcode  
williamr@4
   302
*
williamr@4
   303
* @publishedAll
williamr@4
   304
* @released
williamr@4
   305
*/
williamr@4
   306
class MHWRMBatteryChargingStatusObserver
williamr@4
   307
    {
williamr@4
   308
public:
williamr@4
   309
    /** 
williamr@4
   310
    * Called when a charging status is changed.
williamr@4
   311
    *
williamr@4
   312
    * @param aErrCode Error code. 
williamr@4
   313
    * @param aChrgStatus Charging status.
williamr@4
   314
    */
williamr@4
   315
williamr@4
   316
    virtual void ChargingStatusChange( TInt aErrCode,
williamr@4
   317
                                      CHWRMPower::TBatteryChargingStatus aChrgStatus)=0;
williamr@4
   318
};
williamr@4
   319
williamr@4
   320
/**
williamr@4
   321
* A callback interface for charging current measurements reporting.
williamr@4
   322
*
williamr@4
   323
* If the client requires periodical measurements of the charging current measurements,
williamr@4
   324
* it needs to derive a class from the MHWRMBatteryChargingCurrentObserver interface
williamr@4
   325
* and implement the AverageChargingCurrentChange() method. 
williamr@4
   326
* 
williamr@4
   327
* A callback object header example:
williamr@4
   328
*
williamr@4
   329
* @code 
williamr@4
   330
* // INCLUDES
williamr@4
   331
class CTest : public CBase, 
williamr@4
   332
              public MHWRMBatteryChargingStatusObserver
williamr@4
   333
   {
williamr@4
   334
    public:
williamr@4
   335
        CTest();
williamr@4
   336
        ~CTest();
williamr@4
   337
                       
williamr@4
   338
        void ConstructL();
williamr@4
   339
        static CTest* NewL();
williamr@4
   340
                
williamr@4
   341
        // from MHWRMBatteryChargingStatusObserver
williamr@4
   342
        virtual void AverageChargingCurrentRateChange(
williamr@4
   343
                           TInt aErrCode, TInt aMeasurement);
williamr@4
   344
williamr@4
   345
   };
williamr@4
   346
* @endcode   
williamr@4
   347
* A callback method implementation example:
williamr@4
   348
*
williamr@4
   349
* @code
williamr@4
   350
williamr@4
   351
// Notification handler
williamr@4
   352
void CTest::ChargingCurrentChange(
williamr@4
   353
                           TInt aErrorCode, TInt aMeasurement)
williamr@4
   354
  {
williamr@4
   355
      if (aErrorCode == KErrNone)
williamr@4
   356
      {
williamr@4
   357
      INFO_PRINTF2(_L("Charging current = %d"), aMeasurement);
williamr@4
   358
      }
williamr@4
   359
     else
williamr@4
   360
      {
williamr@4
   361
      INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
williamr@4
   362
      }
williamr@4
   363
   }
williamr@4
   364
williamr@4
   365
williamr@4
   366
* @endcode  
williamr@4
   367
*
williamr@4
   368
* @publishedAll
williamr@4
   369
* @released
williamr@4
   370
*/
williamr@4
   371
williamr@4
   372
class MHWRMBatteryChargingCurrentObserver
williamr@4
   373
    {
williamr@4
   374
   /** 
williamr@4
   375
    * Called when a charging current measurement value is received.
williamr@4
   376
    *
williamr@4
   377
    * @param aErrCode Error code. 
williamr@4
   378
    * @param aMeasurement The Average Charging current value calculated by the plugin.
williamr@4
   379
             Valid only when aErr == KErrNone.
williamr@4
   380
    */
williamr@4
   381
    public:
williamr@4
   382
        virtual void AverageChargingCurrentChange(TInt aErrCode, TInt aMeasurement)=0;
williamr@4
   383
    };
williamr@4
   384
williamr@4
   385
/**
williamr@4
   386
* A callback interface for remaining charging time notification.
williamr@4
   387
*
williamr@4
   388
* If the client requires remaining charging time notification,
williamr@4
   389
* it needs to derive a class from the MHWRMBatteryFullChargingTimeObserver interface
williamr@4
   390
* and implement the BatteryFullChargingTimeChange() method. 
williamr@4
   391
* 
williamr@4
   392
* A callback object header example:
williamr@4
   393
*
williamr@4
   394
* @code 
williamr@4
   395
* // INCLUDES
williamr@4
   396
class CTest : public CBase, 
williamr@4
   397
              public MHWRMBatteryFullChargingTimeObserver
williamr@4
   398
   {
williamr@4
   399
    public:
williamr@4
   400
        CTest();
williamr@4
   401
        ~CTest();
williamr@4
   402
                       
williamr@4
   403
        void ConstructL();
williamr@4
   404
        static CTest* NewL();
williamr@4
   405
                
williamr@4
   406
        // from MHWRMBatteryChargingStatusObserver
williamr@4
   407
        virtual void BatteryFullChargingTimeChange(
williamr@4
   408
                           TInt aErrCode, TInt aMeasurement);
williamr@4
   409
williamr@4
   410
   };
williamr@4
   411
* @endcode   
williamr@4
   412
* A callback method implementation example:
williamr@4
   413
*
williamr@4
   414
* @code
williamr@4
   415
williamr@4
   416
// Notification handler
williamr@4
   417
void CTest::BatteryFullChargingTimeChange(
williamr@4
   418
                              TInt aErrorCode, TUint aTime)
williamr@4
   419
   {
williamr@4
   420
      if (aErrorCode == KErrNone)
williamr@4
   421
      {
williamr@4
   422
      INFO_PRINTF2(_L("Remaining charging time = %d"), aTime);
williamr@4
   423
      }
williamr@4
   424
     else
williamr@4
   425
      {
williamr@4
   426
      INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
williamr@4
   427
      }
williamr@4
   428
   }
williamr@4
   429
williamr@4
   430
williamr@4
   431
* @endcode  
williamr@4
   432
*
williamr@4
   433
* @publishedAll
williamr@4
   434
* @released
williamr@4
   435
*/
williamr@4
   436
williamr@4
   437
class MHWRMBatteryFullChargingTimeObserver
williamr@4
   438
    {
williamr@4
   439
   /** 
williamr@4
   440
    * Called when a full charging current time measurement value is received.
williamr@4
   441
    *
williamr@4
   442
    * @param aErrCode Error code. 
williamr@4
   443
    * @param aTime Time required for full charging of Battery.
williamr@4
   444
             Valid only when aErrCode == KErrNone.
williamr@4
   445
    */
williamr@4
   446
williamr@4
   447
    public:
williamr@4
   448
        virtual void BatteryFullChargingTimeChange(TInt aErrCode, TUint aTime)=0;
williamr@4
   449
    };
williamr@4
   450
#endif //SYMBIAN_HWRM_EXTPOWERINFO
williamr@4
   451
williamr@4
   452
#endif /*HWRMPOWER_H_*/
williamr@4
   453
// End of File