systemswstubs/hwrmstubplugins/src/PowerStatePlugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:04:35 +0300
changeset 46 e1758cbb96ac
parent 0 0ce1b5ce9557
permissions -rw-r--r--
Revision: 201039 Kit: 201039

/*
* Copyright (c) 2002-2005 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:  Hardware Resource Manager stub plugins Power State plugin 
*                implementation.
*
*/


#include <hwrmpowerstatesdkpskeys.h>
#include "PowerStatePlugin.h"


//CONSTANTS
#ifdef ENABLE_NOTIFICATIONS
    // Timer begins triggering notifications after this time period
    const TInt KDelay(5000000);      //5 seconds
    // Timer triggers notifications at this time interval
    const TInt KInterval(5000000);   //5 seconds
#endif


CPowerStatePlugin* CPowerStatePlugin::NewL()
    {
    CPowerStatePlugin* self = new(ELeave) CPowerStatePlugin();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

CPowerStatePlugin::~CPowerStatePlugin()
    {
#ifdef ENABLE_NOTIFICATIONS
    delete iPeriodic;
#endif
    }

CPowerStatePlugin::CPowerStatePlugin() : iKey( KHWRMBatteryLevel ),
                                         iKeyValue( EBatteryLevelUnknown )
    {
    }

void CPowerStatePlugin::ConstructL()
    {
    // Only send periodic notifications if flag is defined
#ifdef ENABLE_NOTIFICATIONS
    RDebug::Print( _L("HWRM PowerStatePlugin: Notifications enabled.") );
    // Use CPeriodic to generate state changes
    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
    
    // Start the timer after KDelay and for every KInterval
    iPeriodic->Start( KDelay, KInterval,
                      TCallBack( CPowerStatePlugin::Callback, this ) );
#else
    RDebug::Print( _L("HWRM PowerStatePlugin: Notifications disabled.") );
#endif
    }

TInt CPowerStatePlugin::Callback( TAny* aPtr )
    {
    CPowerStatePlugin* ptr = (CPowerStatePlugin*) aPtr;
    // use callback to call the notification method in the plugin callback
    RDebug::Print( _L("HWRM PowerStatePlugin: Key=%d, Value=%d"), ptr->iKey, ptr->iKeyValue );
    TRAPD( err, ptr->iNotificationCallback->NotifyStateChange(
                                                ptr->iKey, ptr->iKeyValue ) );
    ptr->IncrementKeyAndValue();
    
    return err;
    }

void CPowerStatePlugin::IncrementKeyAndValue()
    {
    switch( iKey )
        {
        case KHWRMBatteryLevel:
            {
            // key has values -1 to 7
            if( iKeyValue == EBatteryLevelLevel7 )
                {
                // last value so set next key
                iKey = KHWRMBatteryStatus;
                iKeyValue = EBatteryStatusUnknown;
                }
            else
                {
                // Otherwise just increment it
                iKeyValue++;
                }
            break;
            }
        case KHWRMBatteryStatus:
            {
            // key has values -1 to 2
            if( iKeyValue == EBatteryStatusEmpty )
                {
                // last value so set next key
                iKey = KHWRMChargingStatus;
                iKeyValue = EChargingStatusError;
                }
            else
                {
                // Otherwise just increment it
                iKeyValue++;
                }
            break;
            }
        case KHWRMChargingStatus:
            {
            // key has values -1 to 5
            if( iKeyValue == EChargingStatusChargingContinued )
                {
                // last value so set next key
                iKey = KHWRMBatteryLevel;
                iKeyValue = EBatteryLevelUnknown;
                }
            else
                {
                // Otherwise just increment it
                iKeyValue++;
                }
            break;
            }
        default:
            break;
        }
    }