diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/plugins/alftranseffect/alftfxserverplugin/src/alftransitionserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftfxserverplugin/src/alftransitionserver.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,1226 @@ +/* +* Copyright (c) 2006 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 is the implementation of the API used by theme server +* to control transition appearance. +* +*/ + + + +#include +#include +#include + +#include +#include +#include "alftfxserverdef.h" +#include "alftransitionserver.h" +#include "alflogger.h" + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CAlfTransitionServerClient::CAlfTransitionServerClient(): +iPluginImplementation( TUid::Null() ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::CAlfTransitionServerClient - starting"); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CAlfTransitionServerClient::~CAlfTransitionServerClient() + { + // We don't unload plugin here, we let CGfxTransAdapterTfx keep it. + // Maybe CGfxTransAdapterTfx should not unload it either? + // We assume that when two clients tell RAlfTfxClient to load the plugin, + // we always get the same instance of the plugin as it is loaded in the + // server side and runs in the server thread. + __ALFFXLOGSTRING("CAlfTransitionServerClient::~CAlfTransitionServerClient >>"); + iTfxServer.Close(); + iConnected = EFalse; + iHasPlugin = EFalse; + delete iTransferBuffer; + delete iReturnBuffer; + iFs.Close(); + __ALFFXLOGSTRING("CAlfTransitionServerClient::~CAlfTransitionServerClient <<"); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::Connect() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::Connect >>"); + TInt err = KErrNone; + TInt fsErr = KErrNone; + if ( !iTransferBuffer ) + { + iTransferBuffer = HBufC8::New( 1024 ); + } + if ( !iReturnBuffer ) + { + // This is actually not used for anything + iReturnBuffer = HBufC8::New( 10 ); + } + + if ( !iTransferBuffer || !iReturnBuffer ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::Connect - return KErrNoMemory"); + return KErrNoMemory; + } + + if ( iPluginImplementation == TUid::Null() ) + { + RImplInfoPtrArray pluginArray; + TRAP( err, REComSession::ListImplementationsL( KAlfGfxPluginInterfaceUId, pluginArray ) ); + if ( pluginArray.Count() > 0 ) + { + iPluginImplementation = pluginArray[0]->ImplementationUid(); + } + } + + if( !iConnected ) + { + err = iTfxServer.Open(); + if ( err == KErrNone ) + { + iConnected = ETrue; + } + } + + if ( iConnected && !iHasPlugin ) + { + if( iPluginImplementation != TUid::Null() ) + { + err = iTfxServer.LoadTfxPlugin( iPluginImplementation ); + // + if ( err == KErrNone || err == KErrAlreadyExists ) + { + iHasPlugin = ETrue; + err = KErrNone; + // RFs is needed only to allow replacing drive given in manifest file + fsErr = iFs.Connect(); + } + __ALFFXLOGSTRING("CAlfTransitionServerClient Has Plugin!"); + } + } + // We lie about the result. + // At the time being starting alf is taking way too long. + // We must retry later. + // We only return error if all is well except we cannot connect to the file server + + __ALFFXLOGSTRING1("CAlfTransitionServerClient::Connect - return %d ", fsErr); + return fsErr; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CAlfTransitionServerClient::Disconnect() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::Disconnect >>"); + iTfxServer.Close(); + iConnected = EFalse; + iHasPlugin = EFalse; + __ALFFXLOGSTRING("CAlfTransitionServerClient::Disconnect <<"); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::Shutdown(TThreadId& /*aThreadId*/) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::Shutdown >>"); + // we don't have a separate server to shut down as our server side + // is actually alf. only the plugin could be destroyed. + Disconnect(); + __ALFFXLOGSTRING("CAlfTransitionServerClient::Shutdown <<"); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Checks if the system is connected. +// --------------------------------------------------------------------------- +// +TBool CAlfTransitionServerClient::IsConnected() + { + __ALFFXLOGSTRING1("CAlfTransitionServerClient::IsConnected - return %d", iHasPlugin); + // We are not properly connected unless we also have managed to load the plugin + return iHasPlugin; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterFullscreenKml( TUint aActionID, const TUid& aUid, + const TDesC& aResourceDir, + const TDesC& aFilename ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterFullscreenKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpAddFullscreenKML; + err = FindEffectFile( aResourceDir, aFilename ); + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteUint32L( aActionID ); + inBuf.WriteInt32L( aUid.iUid ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); +// inBuf << aResourceDir; + inBuf << iParse.DriveAndPath(); + inBuf << aFilename; + inBuf.CommitL(); + }); + + inBuf.Release(); + inBuf.Close(); + + if ( err == KErrNone ) + { + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + } + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterFullscreenKml - return %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::UnregisterFullscreenKml(TUint aActionID, const TUid& aUid) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::UnregisterFullscreenKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpRemoveFullscreenKML; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteUint32L( aActionID ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.CommitL(); + }); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::UnregisterFullscreenKml - return %d ", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterListBoxKmlL(const TUid& aUid, + const TListBoxType aListBoxType, const TDesC& aResourceDir, + const TDesC& aBackgroundFilename, const TDesC& aListItemFilename) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterListBoxKmlL >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpListBoxRegisterKML; + err = FindEffectFile( aResourceDir, aBackgroundFilename ); + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); + inBuf.WriteInt32L( ( TInt32 )aListBoxType ); + inBuf << iParse.DriveAndPath(); +// inBuf << aResourceDir; + inBuf << aBackgroundFilename; + inBuf << aListItemFilename; + inBuf.CommitL(); + }); + + inBuf.Release(); + inBuf.Close(); + + if ( err == KErrNone ) + { + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + } + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterListBoxKmlL return: %d ", err); + return err; + } + +TInt CAlfTransitionServerClient::RegisterListBoxKml(const TUid& aUid, + const TListBoxType aListBoxType, const TDesC& aResourceDir, + const TDesC& aBackgroundFilename, const TDesC& aListItemFilename) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterListBoxKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TRAP( err, RegisterListBoxKmlL( aUid, aListBoxType, aResourceDir, + aBackgroundFilename, aListItemFilename ) ); + + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterListBoxKml - return %d ", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::UnregisterListBoxKml(const TUid& aUid, const TListBoxType aListBoxType) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::UnregisterListBoxKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpListBoxUnregisterKML; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.WriteInt32L( ( TInt32 )aListBoxType ); + inBuf.CommitL(); + } ); + + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::UnregisterListBoxKml - return %d ", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetListBoxFrameTime( const TInt aWantedTime ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::SetListBoxFrameTime >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpListBoxSetFrameTime; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aWantedTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetListBoxFrameTime - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetListBoxMinFrameTime( const TInt aMinTime ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::SetListBoxMinFrameTime >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpListBoxSetMinFrameTime; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aMinTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetListBoxMinFrameTime - return: %d <<", err ); + return err; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetControlFrameTime( const TInt aWantedTime ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::SetControlFrameTime >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpControlSetFrameTime; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aWantedTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetControlFrameTime - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetControlMinFrameTime( const TInt aMinTime ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::SetControlMinFrameTime >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpControlSetMinFrameTime; + // These writes cannot leave + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aMinTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetControlMinFrameTime - return: %d <<", err ); + return err; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::BlockFullScreenUid(const TUid& aUid, TBool aBlockFrom, TBool aBlockTo ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::BlockFullScreenUid >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpBlockFullscreenUid; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.WriteInt32L( aBlockFrom ); + inBuf.WriteInt32L( aBlockTo ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::BlockFullScreenUid - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterControlAction( const TUid& aUid, TUint aActionID, + const TDesC& aActionString ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterControlAction >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpControlPolicyUpdate; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.WriteUint32L( aActionID ); + inBuf << aActionString; + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterControlAction - return: %d <<", err); + return err; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::UnregisterControlAction(const TUid& aUid, TUint aActionID ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::UnregisterControlAction >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpControlPolicyRemove; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.WriteUint32L( aActionID ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::UnregisterControlAction - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterControlKml(const TUid& aUid, const TDesC& aResourceDir, + const TDesC& aFilename) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterControlKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + err = FindEffectFile( aResourceDir, aFilename ); + + TRAP( err, + { + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpRegisterControlKml; + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); + inBuf << iParse.DriveAndPath(); +// inBuf << aResourceDir; + inBuf << aFilename; + inBuf.CommitL(); + }); + + inBuf.Release(); + inBuf.Close(); + + if ( err == KErrNone ) + { + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + } + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterControlKml - return: %d <<", err ); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterControlKml(const TUid& aUid, const TDesC& aResourceDir, + const TDesC& aFilename, TInt aWantedTime, + TInt aMinTime) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterControlKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpRegisterControlKmlEx; + err = FindEffectFile( aResourceDir, aFilename ); + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); + inBuf << iParse.DriveAndPath(); +// inBuf << aResourceDir; + inBuf << aFilename; + inBuf.WriteInt32L( aWantedTime ); + inBuf.WriteInt32L( aMinTime ); + inBuf.CommitL(); + }); + + inBuf.Release(); + inBuf.Close(); + + if ( err == KErrNone ) + { + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + } + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::RegisterControlKml - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::UnregisterAllKml() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::UnregisterAllKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + // Out only parameter will be our thread id + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpRemoveAllKml; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::UnregisterAllKml - return: %d <<", err); + return KErrNone; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::UnregisterControlKml(const TUid& aUid) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::UnregisterControlKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpRemoveControlKml; + // These writes cannot leave + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aUid.iUid ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::UnregisterControlKml - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetWantedTime( TInt aTime ) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::SetWantedTime >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpSetWantedTime; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetWantedTime - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::SetMinTime(TInt aTime) + { + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetMinTime - aTime: %d >>", aTime ); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetMinTime - return: %d <<", err); + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpSetMinTime; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.WriteInt32L( aTime ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::SetMinTime - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::RegisterFullscreenKml( TUint aActionID, const TUid& aUid, + const TDesC& aResourceDir, const TDesC& aFilename, + TInt aCachePriority, TInt aWantedTime, + TInt aMinTime) + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterFullscreenKml >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + // Streaming test + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + RThread me; + TInt op = MAlfGfxEffectPlugin::ETfxServerOpAddFullscreenKMLEx; + err = FindEffectFile( aResourceDir, aFilename ); + TRAP( err, + { + inBuf.WriteInt32L( op ); + inBuf.WriteUint32L( aActionID ); + inBuf.WriteInt32L( aUid.iUid ); + TUint64 id = me.Id(); + TUint8* ptr = reinterpret_cast( &id ); + inBuf.WriteL( ptr, 8 ); + inBuf << iParse.DriveAndPath(); +// inBuf << aResourceDir; + inBuf << aFilename; + inBuf.WriteInt32L( aCachePriority ); + inBuf.WriteInt32L( aWantedTime ); + inBuf.WriteInt32L( aMinTime ); + inBuf.CommitL(); + } ); + + inBuf.Release(); + inBuf.Close(); + + if ( err == KErrNone ) + { + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + } + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING("CAlfTransitionServerClient::RegisterFullscreenKml - return KErrNone <<"); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::VerifyConnection() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::VerifyConnection >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerVerifyConnection; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::VerifyConnection - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::FreeRam() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::FreeRam >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpFreeRam; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + // Here the server should actually return something + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::FreeRam - return: %d <<", err); + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfTransitionServerClient::MemoryGood() + { + __ALFFXLOGSTRING("CAlfTransitionServerClient::MemoryGood >>"); + TInt err = KErrNone; + + if ( !iHasPlugin ) + { + err = Connect(); + } + if ( !iHasPlugin || err != KErrNone ) + { + // if we are started too early we just bail out without doing anything + return err; + } + + TPtr8 inPtr = iTransferBuffer->Des(); + inPtr.Zero(); + TPtr8 outPtr = iReturnBuffer->Des(); + outPtr.Zero(); + RDesWriteStream inBuf( inPtr ); + + TInt op = MAlfGfxEffectPlugin::ETfxServerOpMemoryGood; + // These writes cannot leave + TRAP_IGNORE( + { + inBuf.WriteInt32L( op ); + inBuf.CommitL(); + } ); + inBuf.Release(); + inBuf.Close(); + + err = iTfxServer.SendSynchronousData( iPluginImplementation, inPtr, outPtr ); + + // Here the server should actually return something + + inPtr.Zero(); + outPtr.Zero(); + __ALFFXLOGSTRING1("CAlfTransitionServerClient::MemoryGood - return: %d <<", err); + return err; + } + +TInt CAlfTransitionServerClient::FindEffectFile( const TDesC& aResourceDir, const TDesC& aFilename ) + { + __ALFFXLOGSTRING2("CAlfTransitionServerClient::FindEffectFile - Dir: %S File: %S>>", &aResourceDir, &aFilename); + // TODO: + // This function allows an alternative drive for finding effect files + // By default the effect files are in ROM + // To make testing easier, the it is allowed to have them on C-drive in the emulator + // or memory card in the phone. + // If the default memory card in the phone is not letter E, this needs to be adjusted. + // When this testing functionality is not needed any more (should not be present in final release builds) + // modify the function so that iParse always contains the original resource directory. +#ifdef __WINS__ + _LIT( KOptionalDrive, "C:" ); +#else + _LIT( KOptionalDrive, "F:" ); +#endif + + TInt err = KErrNone; + iParse.Set( KOptionalDrive, &aResourceDir, &aFilename ); + + err = iFile.Open( iFs, iParse.FullName(), EFileRead ); + if ( err != KErrNone ) + { + iParse.Set( aResourceDir, NULL, NULL ); + } + else + { + // close the file if we managed to open it + iFile.Close(); + iParse.Set( KOptionalDrive, &aResourceDir, NULL ); + } + + // Now iParse contains the alternative path if the file is found in the alternative + // location, else it contains the original path. + __ALFFXLOGSTRING1("CAlfTransitionServerClient::FindEffectFile - return: %d <<", err); + return err; + } + +// --- EOF --- +