--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/hwrmpower.h Wed Mar 31 12:33:34 2010 +0100
@@ -0,0 +1,453 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef HWRMPOWER_H_
+#define HWRMPOWER_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <e32cmn.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+
+class CHWRMPowerImpl;
+class MHWRMBatteryPowerObserver;
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+class MHWRMBatteryChargingStatusObserver;
+class MHWRMBatteryChargingCurrentObserver;
+class MHWRMBatteryFullChargingTimeObserver;
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+/**
+* HW Resource Manager Power API is a library API providing the
+* ability to request detailed information regarding the battery
+* capacity, voltage and current consumption.
+*
+* The API consists of the classes CHWRMPower, MHWRMBatteryConsumptionObserver
+* and MHWRMBatteryVoltageObserver. If the client requires periodical measurements
+* of the Average Voltage and/or Average Consumption, it should also provide callback pointer
+* of the MHWRMBatteryConsumptionObserver and/or MHWRMBatteryVoltageObserver
+* implementing class for the NewL() method.
+*
+* Usage:
+*
+* @code
+* #include <hwrmpower.h>
+*
+* // A CHWRMPower instance can be created by using NewL() or NewLC() methods.
+* // Periodical measurements are required so callbacks are provided. Assume
+* // the calling object implements both interfaces.
+* CHWRMPower* power = CHWRMPower::NewL(this, this);
+*
+* // Get battery info.
+* TRequestStatus& status;
+* TBatteryConsumptionData batteryConsumptionData;
+* power->GetBatteryInfo(status, batteryConsumptionData);
+*
+* User::WaitForRequest(status);
+* User::LeaveIfError(status.Int());
+*
+* // Start receiving periodical voltage measurements.
+* TRequestStatus& statusStart;
+* TIntervalMultiple intervalMultiple = EThreeTimesBaseTimeInterval;
+* power->StartAverageVoltageReporting(statusStart, intervalMultiple);
+*
+* User::WaitForRequest(statusStart);
+* User::LeaveIfError(statusStart.Int());
+*
+* // Measurements are being when the ProcessVoltageMeasurement() method
+* // of the MHWRMBatteryVoltageObserver interface is called.
+*
+* // Stop receiving measurements when done
+* power->StopAverageVoltageReportingL();
+*
+* // To clean up, delete the created object:
+* delete power;
+* @endcode
+*
+* @publishedAll
+* @released
+*/
+NONSHARABLE_CLASS(CHWRMPower) : public CBase
+ {
+public:
+
+ /**
+ * Data structure used to retreive data from a call to GetBatteryVoltageInfo
+ */
+ struct TBatteryVoltageData
+ {
+ TInt iRemainingVoltage;
+ TInt iMaximumVoltage;
+ TInt iMinimumVoltage;
+ };
+
+ /**
+ * Data structure used to retreive data from a call to GetBatteryInfo
+ */
+ struct TBatteryConsumptionData
+ {
+ TInt iNominalCapacity;
+ TInt iRemainingCapacity;
+ TInt iRemainingPercentageCapacity;
+ };
+
+ /**
+ * Data structure used to retreive data from a call to GetBatteryInfo
+ */
+ struct TBatteryPowerMeasurementData
+ {
+ TInt iAverageVoltage;
+ TInt iAverageCurrent;
+ };
+
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+
+ /* The type of charger connected to the device.*/
+ enum TBatteryChargerType
+ {
+ EBatteryChargerUnKnown = 0,
+ EBatteryChargerDedicated = 1,
+ EBatteryChargerUsbDedicated = 2,
+ EBatteryChargerUsbHost = 3
+ };
+
+ /* The current charging status of the device. */
+ enum TBatteryChargingStatus
+ {
+ EChargingStatusError = -1,
+ EChargingStatusNotConnected = 0,
+ EChargingStatusCharging = 1,
+ EChargingStatusNotCharging = 2,
+ EChargingStatusAlmostComplete = 3,
+ EChargingStatusChargingComplete = 4,
+ EChargingStatusChargingContinued = 5
+ };
+
+ /* Used to stop the ongoing charging notification.
+ * EChargingNotifierAll used to stop charging current and charging
+ * time notifications. */
+
+ enum TBatteryChargingNotifier
+ {
+ EChargingNotifierAll = 0,
+ EChargingNotifierChargingCurrent = 1,
+ EChargingNotifierBatteryFullChargingTime = 2
+ };
+
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+public:
+
+ IMPORT_C ~CHWRMPower();
+ IMPORT_C static CHWRMPower* NewL();
+ IMPORT_C static CHWRMPower* NewLC();
+
+public: // New functions
+
+ IMPORT_C void GetBatteryInfo(TRequestStatus& aStatus, TBatteryConsumptionData& aBatteryConsumptionData);
+ IMPORT_C void GetBatteryVoltageInfo(TRequestStatus& aStatus, TBatteryVoltageData& aBatteryVoltageData);
+ IMPORT_C void GetBaseTimeIntervalL(TInt &aBaseTimeInterval);
+ IMPORT_C TInt SetPowerReportObserver(MHWRMBatteryPowerObserver* aPowerReportCallback);
+ IMPORT_C TInt StartAveragePowerReporting(TRequestStatus& aStatus, const TUint& aInterval);
+ IMPORT_C void StopAveragePowerReportingL();
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+
+ IMPORT_C TInt GetBatteryChargerType(TBatteryChargerType& aChargerType);
+ IMPORT_C TInt GetBatteryChargingStatus(TBatteryChargingStatus& aChargingStatus);
+ IMPORT_C TInt SetBatteryChargingObserver(
+ MHWRMBatteryChargingStatusObserver* aChargingStatusCallback,
+ MHWRMBatteryChargingCurrentObserver* aChrgCurrentCallback,
+ MHWRMBatteryFullChargingTimeObserver* aChrgTimeCallback);
+ IMPORT_C TInt NotifyAverageChargingCurrent(TRequestStatus& aStatus, const TUint& aInterval);
+ IMPORT_C TInt NotifyBatteryFullChargingTime(TRequestStatus& aStatus);
+ IMPORT_C void StopChargingNotificationL(TBatteryChargingNotifier aNotifier);
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+private:
+
+ void ConstructL();
+
+private:
+
+ CHWRMPowerImpl* iPowerImpl;
+ };
+
+/**
+* A callback interface for power measurements reporting.
+*
+* If the client requires periodical measurements of the Average Power,
+* it needs to derive a class from the MHWRMBatteryPowerObserver interface
+* and implement the PowerMeasurement() method.
+*
+* A callback object header example:
+*
+* @code
+* // INCLUDES
+* #include <hwrmpower.h> // Link against HWRMPowerClient.lib.
+*
+* class CTest : public CBase,
+* public MHWRMBatteryPowerObserver
+* {
+* public:
+* CTest();
+* ~CTest();
+*
+* void ConstructL();
+* static CTest* NewL();
+*
+* // from MHWRMBatteryPowerObserver
+* virtual void PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement);
+*
+* private:
+* CHWRMPower* iPower;
+* };
+* @endcode
+*
+* A callback method implementation example:
+*
+* @code
+* void CTest::PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement);
+* {
+* if (aErrorCode == KErrNone)
+* {
+* INFO_PRINTF2(_L("INFO: Power Measurement Received, averageVolatge=%d, averageCurrent=%d"),aMeasurement.iAverageVoltage, aMeasurement.iAverageCurrent);
+* }
+* else
+* {
+* INFO_PRINTF2(_L("INFO: Power Measurement Measurement Error, error=%d"),aErr);
+* }
+* }
+* @endcode
+*
+* @publishedAll
+* @released
+*/
+
+class MHWRMBatteryPowerObserver
+ {
+public:
+ /**
+ * Called when a Power(Voltage and Current) consumption measurement value is received.
+ *
+ * @param aErr Error code.
+ * @param aMeasurement The Average Power value calculated by the plugin. Valid only when aErr == KErrNone.
+ */
+
+ virtual void PowerMeasurement(TInt aErr, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement)=0;
+ };
+
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+/**
+* A callback interface for charging status change.
+*
+* If the client requires charging status change notofication,
+* it needs to derive a class from the MHWRMBatteryChargingStatusObserver interface
+* and implement the ChargingStatusChange() method.
+*
+* A callback object header example:
+*
+* @code
+* // INCLUDES
+class CTest : public CBase,
+ public MHWRMBatteryChargingStatusObserver
+ {
+ public:
+ CTest();
+ ~CTest();
+
+ void ConstructL();
+ static CTest* NewL();
+
+ // from MHWRMBatteryChargingStatusObserver
+ virtual void ChargingStatusChange( Tint aErrCode,
+ CHWRMPower::TBatteryChargingStatus aChrgStatus);
+ };
+* @endcode
+* A callback method implementation example:
+*
+* @code
+
+void CTest:: ChargingStatusChange(TInt aErrorCode,
+ CHWRMPower::TBatteryChargingStatus aChrgStatus);
+ {
+ if (aErrorCode == KErrNone)
+ {
+ INFO_PRINTF2(_L("Charging status = %d"), aChrgStatus);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
+ }
+ }
+* @endcode
+*
+* @publishedAll
+* @released
+*/
+class MHWRMBatteryChargingStatusObserver
+ {
+public:
+ /**
+ * Called when a charging status is changed.
+ *
+ * @param aErrCode Error code.
+ * @param aChrgStatus Charging status.
+ */
+
+ virtual void ChargingStatusChange( TInt aErrCode,
+ CHWRMPower::TBatteryChargingStatus aChrgStatus)=0;
+};
+
+/**
+* A callback interface for charging current measurements reporting.
+*
+* If the client requires periodical measurements of the charging current measurements,
+* it needs to derive a class from the MHWRMBatteryChargingCurrentObserver interface
+* and implement the AverageChargingCurrentChange() method.
+*
+* A callback object header example:
+*
+* @code
+* // INCLUDES
+class CTest : public CBase,
+ public MHWRMBatteryChargingStatusObserver
+ {
+ public:
+ CTest();
+ ~CTest();
+
+ void ConstructL();
+ static CTest* NewL();
+
+ // from MHWRMBatteryChargingStatusObserver
+ virtual void AverageChargingCurrentRateChange(
+ TInt aErrCode, TInt aMeasurement);
+
+ };
+* @endcode
+* A callback method implementation example:
+*
+* @code
+
+// Notification handler
+void CTest::ChargingCurrentChange(
+ TInt aErrorCode, TInt aMeasurement)
+ {
+ if (aErrorCode == KErrNone)
+ {
+ INFO_PRINTF2(_L("Charging current = %d"), aMeasurement);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
+ }
+ }
+
+
+* @endcode
+*
+* @publishedAll
+* @released
+*/
+
+class MHWRMBatteryChargingCurrentObserver
+ {
+ /**
+ * Called when a charging current measurement value is received.
+ *
+ * @param aErrCode Error code.
+ * @param aMeasurement The Average Charging current value calculated by the plugin.
+ Valid only when aErr == KErrNone.
+ */
+ public:
+ virtual void AverageChargingCurrentChange(TInt aErrCode, TInt aMeasurement)=0;
+ };
+
+/**
+* A callback interface for remaining charging time notification.
+*
+* If the client requires remaining charging time notification,
+* it needs to derive a class from the MHWRMBatteryFullChargingTimeObserver interface
+* and implement the BatteryFullChargingTimeChange() method.
+*
+* A callback object header example:
+*
+* @code
+* // INCLUDES
+class CTest : public CBase,
+ public MHWRMBatteryFullChargingTimeObserver
+ {
+ public:
+ CTest();
+ ~CTest();
+
+ void ConstructL();
+ static CTest* NewL();
+
+ // from MHWRMBatteryChargingStatusObserver
+ virtual void BatteryFullChargingTimeChange(
+ TInt aErrCode, TInt aMeasurement);
+
+ };
+* @endcode
+* A callback method implementation example:
+*
+* @code
+
+// Notification handler
+void CTest::BatteryFullChargingTimeChange(
+ TInt aErrorCode, TUint aTime)
+ {
+ if (aErrorCode == KErrNone)
+ {
+ INFO_PRINTF2(_L("Remaining charging time = %d"), aTime);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error, error=%d"),aErrorCode);
+ }
+ }
+
+
+* @endcode
+*
+* @publishedAll
+* @released
+*/
+
+class MHWRMBatteryFullChargingTimeObserver
+ {
+ /**
+ * Called when a full charging current time measurement value is received.
+ *
+ * @param aErrCode Error code.
+ * @param aTime Time required for full charging of Battery.
+ Valid only when aErrCode == KErrNone.
+ */
+
+ public:
+ virtual void BatteryFullChargingTimeChange(TInt aErrCode, TUint aTime)=0;
+ };
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+#endif /*HWRMPOWER_H_*/
+// End of File