vtengines/videoteleng/Src/Commands/CVtEngOperation.cpp
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtengines/videoteleng/Src/Commands/CVtEngOperation.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,333 @@
+/*
+* 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:  Operation base class implementation.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CVtEngOperation.h"
+#include    "CVtEngCommandHandler.h"
+#include    "TVtEngOperationUtils.h"
+#include    "VtEngUtils.h"
+#include    "cvtengmdtrcommandsender.h"
+#include    "cvtlogger.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::NewL
+// Symbian two-phase constructor
+//
+// -----------------------------------------------------------------------------
+//
+CVtEngOperation* CVtEngOperation::NewL(
+    TVtEngCommandId aCommandId,
+    CVtEngHandlerContainer& aHandlers,
+    MVtEngOperationObserver& aObserver,
+    TBool aDelete )
+    {
+    CVtEngOperation* self = new ( ELeave )
+    CVtEngOperation( aCommandId, aHandlers, aObserver, aDelete );
+    
+    CleanupStack::PushL( self );
+    self->iAsyncCallback = new ( ELeave )
+        CAsyncCallBack( CActive::EPriorityStandard );
+    self->iAsyncCallback->Set( TCallBack( ASyncHandleOpComplete, self ) );
+
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::CVtEngOperation
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CVtEngOperation::CVtEngOperation(
+    TVtEngCommandId aCommandId,
+    CVtEngHandlerContainer& aHandlers,
+    MVtEngOperationObserver& aObserver,
+    TBool aDelete ) :
+    iCommand( aCommandId ),
+    iHandlers( aHandlers ),
+    iObserver( aObserver ),
+    iDelete( aDelete )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::~CVtEngOperation
+// Destructor
+//
+// -----------------------------------------------------------------------------
+//
+CVtEngOperation::~CVtEngOperation()
+    {
+    Cancel();
+    delete iAsyncCallback;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::HandleOpCompleteL
+// Destructor
+//
+// -----------------------------------------------------------------------------
+//
+void CVtEngOperation::HandleOpComplete( const TInt aResult )
+    {
+    __VTPRINTENTER( "EngOp.HandleOpComplete" )
+    iObserver.SetOperation( NULL );
+    CVtEngMdtrCommandSender& mediatorSender = 
+        CVtEngUtility::EngineUtils()->MediatorCommands();
+    switch( iCommand )
+        {
+    case KVtEngTerminateSession:
+        // send mediator command to telephony for call release        
+        mediatorSender.EndCall();
+        break;
+    case KVtEngMuteOutgoingAudio:
+    case KVtEngUnmuteOutgoingAudio:
+        // notify telephony subsystems about new microphone state
+        mediatorSender.NotifyOutgoingAudioState( 
+            iCommand == KVtEngUnmuteOutgoingAudio );
+        break;   
+    default:
+        break;
+    }
+#ifdef VTDEBUG
+    TRAPD( err, iObserver.CommandCompleteL( iCommand, aResult ) );
+    __VTPRINT2( DEBUG_GEN, "EngOp.Complete err=", err )
+#else
+    TRAP_IGNORE( iObserver.CommandCompleteL( iCommand, aResult ) );
+#endif // VTDEBUG
+    if ( iDelete )
+        {
+        delete this;
+        }
+    __VTPRINTEXITR( "EngOp.HandleOpComplete %d", aResult )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::ASyncHandleOpComplete
+// Destructor
+//
+// -----------------------------------------------------------------------------
+//
+TInt CVtEngOperation::ASyncHandleOpComplete( TAny* aPtr )
+    {
+    __VTPRINTENTER( "EngOp.ASyncHandleOpComplete" )
+    CVtEngOperation* self = reinterpret_cast< CVtEngOperation* >( aPtr );
+    TInt error( self->iAsyncErr );
+    self->iAsyncErr = KErrNone;
+    self->HandleOpComplete( error );
+    __VTPRINTEXIT( "EngOp.ASyncHandleOpComplete" )
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::ExecuteL
+// Destructor
+//
+// -----------------------------------------------------------------------------
+//
+TBool CVtEngOperation::ExecuteL( TDesC8* aParams )
+    {
+    __VTPRINTENTER( "EngOp.ExecuteL" )
+    TBool complete( EFalse );
+        
+    // Offer for synchronous handling.
+    TRAPD( err, complete = OfferExecuteSyncL( aParams ) );
+#ifdef VTDEBUG
+    if ( err < KErrNone )
+        {
+        __VTPRINT2( DEBUG_GEN, "EngOp.ExecuteL LEAVE = %d", err )
+        }
+#endif
+    User::LeaveIfError( err );
+    if ( !complete )
+        {
+        // async request
+        switch ( iCommand )
+            {
+            case KVtEngResetEngine:
+            case KVtEngInitializeEngine:
+            case KVtEngInitializeEngineTest:
+            case KVtEngInitializeEngineDiag:
+            case KVtEngTerminateSession:
+            case KVtEngSwitchToVoice:
+                TVtEngEngineInitUtil::HandleL( *this, iHandlers );
+                break;
+
+            case KVtEngSetSource:
+            case KVtEngPrepareCamera:
+            case KVtEngStartViewFinder:
+            case KVtEngPauseViewFinder:
+            case KVtEngStopViewFinder:
+            case KVtEngStartRenderRemote:
+            case KVtEngStopRenderRemote:
+            case KVtEngHandleLayoutChange:
+            case KVtEngUnfreeze:
+
+            // Media object sharing
+            case KVtEngStopShareImage:
+                TVtEngRenderUtil::HandleL( *this, iHandlers );
+                break;
+
+            // Media object sharing
+            // These two commands must be trapped and completed without leave
+            // because Application UI has to be able to act according to error.
+            case KVtEngInitializeShareImage:
+            case KVtEngStartShareImage:
+                TRAP( err, TVtEngRenderUtil::HandleL( *this, iHandlers ) );
+                break;
+
+            case KVtEngSetAudioRouting:
+                TVtEngAudioRoutingUtil::HandleL( *this );
+                break;
+
+            case KVtEngSetAudioVolume:
+            case KVtEngMuteOutgoingAudio:
+            case KVtEngUnmuteOutgoingAudio:
+                TVtEngAudioPlaybackUtil::HandleL( *this, iHandlers );
+                break;
+            default:
+                __VTPRINT( DEBUG_GEN, "EngOp.ExecuteL not handled" )
+                break;
+            }
+
+        iObserver.SetOperation( this );
+
+        if ( err != KErrNone )
+            {
+            __VTPRINT2( DEBUG_GEN, "EngOp.ExecuteL completing command %d", err )
+            iAsyncErr = err;
+            iAsyncCallback->CallBack();
+            }
+        }
+    else if ( iDelete )
+        {
+        delete this;
+        }
+    __VTPRINTEXITR( "EngOp.ExecuteL %d", complete )
+    return complete;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::Cancel
+// Cancels operation.
+//
+// -----------------------------------------------------------------------------
+//
+TBool CVtEngOperation::Cancel()
+    {
+    __VTPRINTENTER( "EngOp.Cancel")
+    __VTPRINT2( DEBUG_GEN, "Command id = %d", iCommand)
+    switch ( iCommand )
+        {
+        case KVtEngInitializeEngine:
+            //TVtEngEngineInitUtil::Cancel( *this );
+            break;
+        case KVtEngInitializeShareImage:
+            TVtEngRenderUtil::Cancel( *this ,iHandlers);
+            break;
+        default:
+            break;
+        }
+    __VTPRINTEXIT( "EngOp.Cancel" )
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngOperation::OfferExecuteSyncL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TBool CVtEngOperation::OfferExecuteSyncL( TDesC8* aParams )
+    {
+    __VTPRINTENTER( "EngOp.OfferExecuteSyncL" )
+    TBool complete( EFalse );
+    iParams = aParams; // reset back to null in ExecuteL
+    // test
+
+    switch ( iCommand )
+        {
+        case KVtEngIncreaseAudioVolume:
+        case KVtEngDecreaseAudioVolume:
+            TVtEngAudioPlaybackUtil::HandleL( *this, iHandlers );
+            complete = ETrue;
+            break;
+        case KVtEngPrepareViewFinder:
+        case KVtEngPrepareViewFinderDSA:
+        case KVtEngPrepareViewFinderDP:
+        case KVtEngStartViewFinder:
+        case KVtEngPauseViewFinder:
+        case KVtEngStopViewFinder:
+        case KVtEngPrepareRemoteRenderDSA:
+        case KVtEngPrepareRemoteRenderDP:
+        case KVtEngPrepareRemoteRenderNGA:
+        case KVtEngStartRenderRemote:
+        case KVtEngStopRenderRemote:
+        case KVtEngPauseRenderRemote:
+        case KVtEngSetZoomStep:
+        case KVtEngFreeze:
+            TVtEngViewFinderConfigureUtil::HandleL( *this, iHandlers );
+            complete = ETrue;
+            break;
+        case KVtEngPrepareRemoteRender:
+            break;
+        case KVtEngStartDtmfTone:
+        case KVtEngStopDtmfTone:
+            // Handling of different UIIs, support is there
+        case KVtEngSetUIIDtmfSupport:
+        case KVtEngSetUIIBasicStringSupport:
+        case KVtEngSetUIIIA5StringSupport:
+        case KVtEngSetUIIGeneralStringSupport:
+
+             TVtEngMediaTransportUtil::HandleL( *this, iHandlers );
+             complete = ETrue;
+            break;
+
+        case KVtEngSetUIForeground:
+        case KVtEngSetVideoQuality:
+        case KVtEngRequestLastRemoteFrame:
+            TVtEngRenderUtil::HandleL( *this, iHandlers );
+            complete = ETrue;
+            break;
+
+            // Extension commands
+        case KVtEngSetContrast:
+        case KVtEngSetBrightness:
+        case KVtEngSetWhiteBalance:
+        case KVtEngSetColorTone:
+#if defined ( RD_VT_RTF )
+        case KVtEngStartRecord:
+        case KVtEngStopRecord:
+#endif
+            TVtEngExtensionUtil::HandleL( *this );
+            complete = ETrue;
+            break;
+
+        default:
+            __VTPRINT( DEBUG_GEN, "EngOp.ExecuteL not handled sync" )
+            break;
+        }
+    __VTPRINTEXITR( "EngOp.OfferExecuteSyncL %d", complete )
+    return complete;
+    }
+
+//  End of File