// 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:
// This file contains the following sections:
// - Command definitions for HWRM Power plugin API
// - Command parameter definitions for HWRM Power plugin API
// - Response parameter definitions for HWRM Power plugin API
// 
//

/**
 @file
 @publishedPartner
 @released
*/

#ifndef HWRMPOWERCOMMANDS_H_
#define HWRMPOWERCOMMANDS_H_


// Include plugin service so that including only this header is necessary to use Power plugin API.
#include <hwrm/hwrmpluginservice.h>

// CONSTANTS

// Identifies the ECom implementation to be used.
_LIT8(KHWRMPowerApiEComMatch, "HWRMPower");


/**
*  Plugin interface class just encapsulates the Power command enumerations.
*  Responsible for defining the command IDs for each message.
*/
namespace HWRMPowerCommand
    {
    /** typedef'd package of TInt containing the error code response. */
    typedef TPckgBuf<TInt> TErrorCodeResponsePackage;

    // Data packages for responses
    
    /**
	*
	* @publishedPartner
	* @released
	*/
	struct TBatteryVoltageResponseData 
		{
		TInt iErrorCode;
		TInt iRemainingVoltage;
		TInt iMaximumVoltage;
		TInt iMinimumVoltage;
		};
	 /** data response package for EGetBatteryVoltageInfoCmdId */
	typedef TPckgBuf<TBatteryVoltageResponseData> TBatteryVoltageResponsePackage;
		
    /**
	*
	* @publishedPartner
	* @released
	*/
	struct TBatteryConsumptionResponseData 
	 	{
		TInt iErrorCode;
	 	TInt iNominalCapacity;
	 	TInt iRemainingCapacity;
	 	TInt iRemainingPercentageCapacity;
	 	};
	/** data response package for EGetBatteryInfoCmdId */
	typedef TPckgBuf<TBatteryConsumptionResponseData> TBatteryConsumptionResponsePackage;

#ifdef SYMBIAN_HWRM_EXTPOWERINFO
    
    enum TBatteryChargerType 
        { 
        EBatteryChargerUnKnown = 0, 
        EBatteryChargerDedicated = 1, 
        EBatteryChargerUsbDedicated = 2,
        EBatteryChargerUsbHost = 3 
        };

    struct TBatteryChargerTypeData
        {
        TInt iErrorCode;
        TBatteryChargerType iChargerType;
        };
    
    typedef TPckgBuf<TBatteryChargerTypeData> TBatteryChargerTypeResponsePackage;
    
#endif //SYMBIAN_HWRM_EXTPOWERINFO
    
	
    /**
    * Power(Current and Voltage) Measurement Report structure.
    * @publishedPartner
    * @released
    */
    struct TBatteryPowerReport 
    {
        TInt iErrorCode;
        TInt iAverageVoltage;
        TInt iAverageCurrent;
    };

    /** data package send for measurements indication EAverageBatteryPowerIndicationId */
    typedef TPckgBuf<TBatteryPowerReport> TBatteryPowerReportPackage;

#ifdef SYMBIAN_HWRM_EXTPOWERINFO
    
    struct TBatteryChargeCurrentReport 
    {
    TInt iErrorCode;
    TInt iChargingCurrent;
    };

    typedef TPckgBuf<TBatteryChargeCurrentReport> TBatteryChargingCurrentReportPackage;

    struct TBatteryFullChargingTimeReport 
    {
    TInt  iErrorCode;
    TUint iChargingTime;
    };

    typedef TPckgBuf<TBatteryFullChargingTimeReport> TBatteryFullChargingTimeReportPackage;
    
#endif //SYMBIAN_HWRM_EXTPOWERINFO
    
 			
    /** data package used for the following requests
    * EStartAverageBatteryPowerReportingCmdId
    * ESetPowerReportingIntervalMultipleCmdId
    */
    typedef TPckgBuf<TUint> TPowerIntervalMultiplePackage;


#ifdef SYMBIAN_HWRM_EXTPOWERINFO
    /** data package used for the following request
    * 
    * EStartAverageBatteryChargeRateReportingCmdId
    * EStopAverageBatteryChargeRateReportingCmdId
    * ESetChargeCurrentIntervalMultipleCmdId
    */
    typedef TPckgBuf<TUint> TChrgCurrentIntervalMultiplePackage;
    
#endif //SYMBIAN_HWRM_EXTPOWERINFO
	
	/**
    * Command definitions
    * All commands contain a command id and a set of parameters. The command ids
    * are defined first and after that parameters for each command.
    *
    * This interface is asynchronous. A command is interpreted of being completed
    * after a response for that command is received.
    *
    * The field input means the parameter for the command.
    * The field output means the parameter for the response.
	*
	* @publishedPartner
	* @released
    */
    enum TPowerCmd
        {
        /**
        * No command. May be used for sanity checks, but 
        * never as an actual command ID.
        *
        * input    None   
        * output   None   
        */
        ENoCommandId = 5000,
        
        /**
        * Get Battery Voltage Info.
        *
        * input   None
        * output  TBatteryVoltageResponsePackage
        *          1. Error code
        *             - KErrNone if operation succeeds.
        *          2. Remaining Voltage, Madximum Voltage, Minimum Voltage
        */
        EGetBatteryVoltageInfoCmdId,
        
        /**
        * Get Battery Info.
        *
        * input   None
        * output  TBatteryConsumptionResponsePackage
        *          1. Error code
        *             - KErrNone if operation succeeds.
        *          2. Nominal Capacity, Remaining Capacity, Remaining Percentage Capacity
        */
        EGetBatteryInfoCmdId,

#ifdef SYMBIAN_HWRM_EXTPOWERINFO
        /**
        * Start Average Charge Current Rate Reporting.
        *
        * input    TUint IntervalMultiple
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStartAverageBatteryChargingCurrentReportingCmdId,

        /**
        * Stop Average Charge Current Rate Reporting.
        *
        * input    None   
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStopAverageBatteryChargingCurrentReportingCmdId,

        /**
        * Update the time interval used for the average charging current 
        * measurements. 
        * input    TChrgCurrentIntervalMultiplePackage   
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */

        ESetChargeCurrentIntervalMultipleCmdId,

        /**
        * Start Battery Full Charging Time Reporting.
        *
        * input    CHWRMPower::TIntervalMultiple
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStartBatteryFullChargingTimeReportingCmdId,

        /**
        * Stop Battery Full Charging Time Reporting.
        *
        * input    None   
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStopBatteryFullChargingTimeReportingCmdId,
        
        
        /**
        * Get Charger Type.
        *
        * input   None
        * output  TBatteryChargerTypeResponsePackage
        *          1. Error code
        *             - KErrNone if operation succeeds.
        *          2. Charger Type
        */        
        EGetBatteryChargerTypeCmdId,
        
#endif //SYMBIAN_HWRM_EXTPOWERINFO
        /**
        * Start Average Battery Power Reporting.
        *
        * input    TUint IntervalMultiple
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStartAverageBatteryPowerReportingCmdId,

        /**
        * Stop Power. 
        *
        * input    None   
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EStopAverageBatteryPowerReportingCmdId,

        /**
        * Update the time interval used for the average battery power measurements. 
        *
        * input    TUint IntervalMultiple   
        * output   TErrorCodeResponsePackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        ESetPowerReportingIntervalMultipleCmdId,
        };
        
        
	/**
	* Power indications definitions
	* All commands contain a indication id and a set of parameters. The indication ids
	* are defined first and after that parameters for each incidcation.
	*
	* These incidcation are used when measurements from the battery are
	* reported through a callback.
	*
	* The field output means the parameter for the response.
	*
	* @publishedPartner
	* @released
	*/
	enum TPowerIndications
    	{        
#ifdef SYMBIAN_HWRM_EXTPOWERINFO
        /**
        * Used by the plugin to send an Average Charging Current Report.
        * 
        * output   TBatteryChargeRateReport   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EAverageBatteryChargingCurrentIndicationId,

        /**
        * Used by the plugin to send an Average Charging Current Report.
        * 
        * output   TBatteryChargeRateReport   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        */
        EBatteryFullChargingTimeIndicationId,
        
#endif //SYMBIAN_HWRM_EXTPOWERINFO

        /**
        * Used by the plugin to send an Average Battery Power Report.
        * 
        * output   TBatteryPowerReportPackage   Error code     
        *    KErrNone if operation succeeds.   
        *    KErrGeneral if there is any problem.
        * 
        */
        EAverageBatteryPowerIndicationId 

    	};
    }

#endif      // HWRMPowerCOMMANDS_H   
            
// End of File
