psmservices/psmserver/src/client/psmsettingsimpl.cpp
author William Roberts <williamr@symbian.org>
Thu, 06 May 2010 14:58:25 +0100
branchRCL_3
changeset 18 36a7e6c28b62
parent 0 4e1aa6a622a0
permissions -rw-r--r--
Remove references to deleted bld.inf files, to fix Bug 2631

/*
* Copyright (c) 2007 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:  Power save mode client class
*
*/



#include <psmsrvdomaincrkeys.h>
#include <centralrepository.h>
#include "psmsettingsimpl.h"
#include "psmtrace.h"

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::~CPsmSettingsImpl
// Constructor.
// -----------------------------------------------------------------------------
//
CPsmSettingsImpl::~CPsmSettingsImpl()
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::~CPsmSettingsImpl()" ) ) );
    if ( iOwnSession )
        {
        iPsmServer.Close();
        }

    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::~CPsmSettingsImpl() - return" ) ) );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::CPsmSettingsImpl
// Constructor.
// -----------------------------------------------------------------------------
//
CPsmSettingsImpl::CPsmSettingsImpl()
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::CPsmSettingsImpl()" ) ) );
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::CPsmSettingsImpl() - return" ) ) );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::ConstructL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
void CPsmSettingsImpl::ConstructL()
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::ConstructL()" ) ) );
    User::LeaveIfError( iPsmServer.Connect() );
    iOwnSession = ETrue;

    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::ConstructL - return" ) ) );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::CPsmSettingsImpl
// Constructor.
// -----------------------------------------------------------------------------
//
CPsmSettingsImpl::CPsmSettingsImpl( RPsmServer& aPsmServer ) :
    iPsmServer( aPsmServer )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::CPsmSettingsImpl()" ) ) );
    iOwnSession = EFalse;
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::CPsmSettingsImpl() - return" ) ) );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::BackupAndGetSettings
// -----------------------------------------------------------------------------
//
TInt CPsmSettingsImpl::BackupAndGetSettings( 
    RConfigInfoArray& aPsmConfigArray, const TUint32 aRepository )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::BackupAndGetSettings()" ) ) );
    return HandleSettingsRequest( aPsmConfigArray, aRepository, EPsmServerChangeSettings );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::GetSettings
// -----------------------------------------------------------------------------
//
TInt CPsmSettingsImpl::GetSettings( 
    RConfigInfoArray& aPsmConfigArray, const TUint32 aRepository )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::GetSettings()" ) ) );
    return HandleSettingsRequest( aPsmConfigArray, aRepository, EPsmServerGetSettings );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::BackupSettings
// -----------------------------------------------------------------------------
//
TInt CPsmSettingsImpl::BackupSettings( 
    RConfigInfoArray& aPsmConfigArray, const TUint32 aRepository )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::BackupSettings()" ) ) );
    return HandleSettingsRequest( aPsmConfigArray, aRepository, EPsmServerBackupSettings );
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::GetCurrentMode
// -----------------------------------------------------------------------------
//
TInt CPsmSettingsImpl::GetCurrentMode( TInt& aMode )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::GetCurrentMode()" ) ) );
    
    TInt errorCode( KErrNone );
    CRepository* cenrep = NULL;

    TRAP_IGNORE( cenrep = CRepository::NewL( KCRUidPowerSaveMode ) );
    
    if ( cenrep )
        {
        errorCode = cenrep->Get( KPsmCurrentMode, aMode );
        delete cenrep;
        cenrep = NULL;
        }
    else
        {
        errorCode = KErrNoMemory;
        }
    
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::GetCurrentMode - Mode: %i" ), aMode ) );
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::GetCurrentMode - return: %i" ), errorCode ) );
    return errorCode;
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::HandleSettingsRequest
// -----------------------------------------------------------------------------
//
TInt CPsmSettingsImpl::HandleSettingsRequest( 
    RConfigInfoArray& aPsmConfigArray, 
    const TUint32 aRepository,
    const TPsmServerRequest aRequest )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::HandleSettingsRequest()" ) ) );

    TInt configCount( aPsmConfigArray.Count() );
    TInt err( KErrNone );

    RConfigInfoArray configArray;

    TRAP( err, 
    for( TInt i = 0; i < configCount; i++ )
        {
        // RArray::Append might not work correctly, have to use AppendL
        configArray.AppendL( aPsmConfigArray[i] );
        } ); // End of TRAP

    if ( KErrNone == err )
        {
        TInt arraySize( configCount * sizeof( TPsmsrvConfigInfo ) );
    	TPtr8 arrayPtr( ( TUint8* ) &configArray[0], arraySize, arraySize );

        // Create IPC arguments. First is array, second is item count in array and third is repository
    	TIpcArgs args = TIpcArgs( &arrayPtr, configCount, aRepository );

        // Send message to server side
        err = iPsmServer.SendReceiveSync( aRequest, args );

        if ( err == KErrNone && EPsmServerBackupSettings != aRequest )  // Copy configs info to aPsmConfigArray
            {
            // Same configs already exists in both arrays, just update values
            UpdateConfigArray( aPsmConfigArray, configArray );
            }
        }

    configArray.Reset();
    configArray.Close();

    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::HandleSettingsRequest - return: %i" ), err ) );
    return err;
    }

// -----------------------------------------------------------------------------
// CPsmSettingsImpl::UpdateConfigArray
// -----------------------------------------------------------------------------
//
void CPsmSettingsImpl::UpdateConfigArray( RConfigInfoArray& aTargetArray, 
                                          RConfigInfoArray& aSourceArray )
    {
    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::UpdateConfigArray()" ) ) );

    for ( TInt i = 0; aTargetArray.Count() != i; i++ )
        {
        TBool found = EFalse;
        TPsmsrvConfigInfo& targetInfo = aTargetArray[i];

        for ( TInt a = 0; !found && aSourceArray.Count() != a; a++ )
            {
            TPsmsrvConfigInfo& sourceInfo = aSourceArray[a];

            // check keys
            if ( sourceInfo.iConfigId == targetInfo.iConfigId &&
                 sourceInfo.iConfigType == targetInfo.iConfigType )
                {
                // Add blocked information
                targetInfo.iBlocked = sourceInfo.iBlocked;

                // correct config found, update value
                switch ( targetInfo.iConfigType )
                    {
                    case EConfigTypeInt:
                        {
                        targetInfo.iIntValue = sourceInfo.iIntValue;
                        break;
                        }
                    case EConfigTypeReal:
                        {
                        targetInfo.iRealValue = sourceInfo.iRealValue;
                        break;
                        }
                    case EConfigTypeBuf:
                        {
                        targetInfo.iDesValue.Copy( sourceInfo.iDesValue );
                        break;
                        }
                    default:
                        {
                        COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::UpdateConfigArray() - Unknown type" ) ) );
                        }
                    }
                // No need to loop config array anymore with this set element
                found = ETrue;
                }
            }
        }

    COMPONENT_TRACE( ( _L( "PSM Client - CPsmSettingsImpl::UpdateConfigArray() - return" ) ) );
    }
    
// End of file