vtengines/videoteleng/Src/State/CVtEngStateOpen.cpp
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtengines/videoteleng/Src/State/CVtEngStateOpen.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2006 - 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:  Open state handle interfaces implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include    "CVtEngStateOpen.h"
+#include    "CVtEngOperation.h"
+#include    "CVtEngAudioHandler.h"
+#include    <cvtlogger.h>
+
+#include    "CVtEngExtensions.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::CVtEngStateOpen
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CVtEngStateOpen::CVtEngStateOpen( 
+    CVtEngStateManager& aStateManager,
+    CVtEngEventManager& aEventManager )
+    : CVtEngStateBase( aStateManager, aEventManager )
+    {
+    }
+
+// Destructor
+CVtEngStateOpen::~CVtEngStateOpen()
+    {
+    __VTPRINT( DEBUG_DESTRUCT, "~StateOpen")
+    }
+
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::UpdateL
+// Updates state
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CVtEngStateOpen::UpdateL()
+    {
+    __VTPRINTENTER( "StateOpen.Update" )
+    const MVtCtlCallControl::TVtCtlState bearerstate = 
+        SessionHandler().RealState();
+
+    const MVtProtocolCommand::TVtProtocolState protoState( MediaHandler().ProtoState() );
+    const TBool bearerIdle = ( bearerstate == MVtCtlCallControl::EIdle ||
+        bearerstate == MVtCtlCallControl::EUnknown );
+    const TBool bearerDisconnecting = 
+        ( bearerstate == MVtCtlCallControl::EDisconnecting );
+
+    CVtEngStateBase* newState = NULL;
+
+    if ( protoState == MVtProtocolCommand::ESetup || 
+         protoState == MVtProtocolCommand::EIdle  || 
+         bearerIdle )
+        {
+        newState = NewStateL( MVtEngSessionInfo::EIdle );
+        }
+    else if ( bearerDisconnecting || protoState == MVtProtocolCommand::EDisconnecting ) 
+        {
+        newState = NewStateL( MVtEngSessionInfo::EClearing );
+        }
+    if ( newState )
+        {
+        newState->OpenL( this );
+        }
+    __VTPRINTEXIT( "StateOpen.Update" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::OpenL
+// State transition to open.
+// -----------------------------------------------------------------------------
+//
+void CVtEngStateOpen::DoOpenL()
+    {
+    __VTPRINTENTER( "StateOpen.Open" )
+    
+    // set audio routing (and ouput volume)
+    RouteAudioL( NULL );
+
+    NotifyStateChange( MVtEngSessionInfo::EOpen );
+    __VTPRINTEXIT( "StateOpen.Open" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::ValidateCommand
+// Returns if a command is valid in open state.
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CVtEngStateOpen::ValidateCommand(
+            const TVtEngCommandId aCommandId )
+    {
+    __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateOpen.Validate")
+    TBool okToPerform( EFalse );
+    switch ( aCommandId )
+        {
+        case KVtEngInitializeEngine: // temporary     
+        case KVtEngPrepareCamera:
+        case KVtEngSetZoomStep:
+        case KVtEngStartViewFinder:
+        case KVtEngPauseViewFinder:
+        case KVtEngStopViewFinder:
+        case KVtEngStartRenderRemote: 
+        case KVtEngStopRenderRemote: 
+        case KVtEngPauseRenderRemote:
+        case KVtEngTerminateSession:
+        case KVtEngStartDtmfTone:
+        case KVtEngStopDtmfTone:
+        // Handling of different UIIs, support is there
+        case KVtEngSetUIIDtmfSupport:
+        case KVtEngSetUIIBasicStringSupport:
+        case KVtEngSetUIIIA5StringSupport:
+        case KVtEngSetUIIGeneralStringSupport:
+        case KVtEngSwitchToVoice:
+            okToPerform = ETrue;
+            break;
+
+        // Extension commands
+        case KVtEngSetContrast:
+        case KVtEngSetBrightness:
+        case KVtEngSetWhiteBalance:
+        case KVtEngSetColorTone:
+#if defined ( RD_VT_RTF )
+        case KVtEngStartRecord:
+        case KVtEngStopRecord:
+#endif // RD_VT_RTF
+        	{
+        	// Get extension handle from Utils
+        	__VTPRINT(DEBUG_GEN, "StateOpen extension->ValidateCommand")
+            okToPerform = CVtEngUtility::Extensions()->ValidateCommand(
+            	aCommandId );
+            break;
+        	}
+
+        default:
+            okToPerform = CVtEngStateBase::ValidateCommand( aCommandId );
+            break;
+        }
+    return okToPerform;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::State
+// Returns session state.
+// 
+// -----------------------------------------------------------------------------
+//
+MVtEngSessionInfo::TSessionState CVtEngStateOpen::State() const
+    {
+    return MVtEngSessionInfo::EOpen;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::HandleL
+// Handles an operation when behavior is state dependent.
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CVtEngStateOpen::HandleL( CVtEngOperation& aOp )
+    {
+    __VTPRINTENTER( "StateOpen.HandleL" )
+    TBool handled( CVtEngStateBase::HandleL( aOp ) );
+    switch ( aOp.Command() )
+        {
+        case KVtEngTerminateSession:
+            TerminateSessionL( aOp );
+            handled = ETrue;
+            break;
+      
+        case KVtEngSwitchToVoice:
+            {
+            CVtEngStateBase* newState = 
+                NewStateL( MVtEngSessionInfo::EClearing );
+            CleanupStack::PushL( newState );
+            newState->OpenL( this );        
+            CleanupStack::Pop();
+            // aOp is not passed to media handler because mediator command
+            // sender signals completion, see
+            // CVtEngMdtrCommandSender::HandleVtEventL
+            }
+            break;
+            
+        // Extension commands
+        case KVtEngSetContrast:
+        case KVtEngSetBrightness:
+        case KVtEngSetWhiteBalance:
+        case KVtEngSetColorTone:
+#if defined ( RD_VT_RTF )
+        case KVtEngStartRecord:
+        case KVtEngStopRecord:
+#endif // RD_VT_RTF
+            CallExtensionL( &aOp);
+            break;
+        default:
+            break;
+        }
+    __VTPRINTEXITR( "StateOpen.HandleL %d", handled )
+    return handled;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::RouteAudioL
+// Handles audio routing operation.
+// 
+// -----------------------------------------------------------------------------
+//
+void CVtEngStateOpen::RouteAudioL( 
+    CVtEngOperation* aOp )
+    {
+    __VTPRINTENTER( "StateOpen.RouteAudioL" )
+    CVtEngSettings& settings = CVtEngUtility::Settings();
+    const CVtEngSettings::TVtEngVideoCallConfig& config = settings.Config();
+
+    CVtEngAudioHandler& audioHandler = AudioHandler();
+    MVtEngAudio::TAudioRoutingState routingState( MVtEngAudio::EAudioWiredHeadset );
+    audioHandler.GetRoutingState( routingState );
+
+    TBool routeAudio( ETrue );
+    TInt volume( config.iAudio.iVolume.iHandsfreeVolume );
+    switch ( routingState )
+        {
+        case MVtEngAudio::EAudioWiredHeadset:
+             routeAudio = EFalse;
+             // fall thru
+        case MVtEngAudio::EAudioHandset:
+        case MVtEngAudio::EAudioBT:
+            volume = config.iAudio.iVolume.iHandsetVolume;
+            break;
+        // use default values
+        case MVtEngAudio::EAudioLoudspeaker:
+        default:
+            break;
+        }
+    __VTPRINT3( DEBUG_GEN | DEBUG_DETAIL, 
+        "StateOpen.RouteAudioL route=%d,vol=%d", routeAudio,volume )
+    if ( aOp == NULL || ( aOp && routeAudio ) )
+        {
+        // set volume if state was changed (called from DoOpenL) or
+        // audio routing will be changed
+        __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "StateOpen.RouteAudioL SetVol" )
+        MediaHandler().SetVolume( volume );
+        }
+
+    // *** AUDIO && ( aOp != NULL ) ***
+    if ( routeAudio && ( aOp != NULL ) )
+        {
+        if ( aOp )
+            {
+            audioHandler.HandleL( *aOp );
+            }
+        }
+    __VTPRINTEXIT( "StateOpen.RouteAudioL" )
+    }
+
+    
+// -----------------------------------------------------------------------------
+// CVtEngStateOpen::CallExtensionL
+// Handles extension operations.
+//
+// -----------------------------------------------------------------------------
+//
+void CVtEngStateOpen::CallExtensionL(
+    CVtEngOperation* aOp)
+    {
+    __VTPRINTENTER( "StateOpen.CallExtensionL" )
+    CVtEngUtility::Extensions()->OfferOperationL( aOp );
+    __VTPRINTEXIT( "StateOpen.CallExtensionL" )
+    }
+
+// End of File