vtengines/videoteleng/Src/Base/cvtengmdtrcommandsender.cpp
changeset 18 d9b6a8729acd
parent 4 6dc066157ed4
child 23 c378a0498b84
child 27 dcbddbbaf8fd
--- a/vtengines/videoteleng/Src/Base/cvtengmdtrcommandsender.cpp	Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,460 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Mediator command sender implementation
-*
-*/
-
-
-
-// INCLUDE FILES
-#include    "cvtengmdtrcommandsender.h"
-#include    "CVtEngEventManager.h"
-#include    "VtEngUtils.h"
-#include    "CVtEngSettings.h"
-#include    "CVtEngOperation.h"
-#include    "vtengcommands.h"
-#include    "CVtEngStateManager.h"
-#include    "VtEngPanic.h"
-#include    <mediatorcommandinitiator.h>
-#include    <mediatordomainuids.h> 
-#include    <mediatorcommandstotelephonyapi.h>
-#include    <mediatoraudiocommandstotelephonyapi.h>
-#include    <videoteltophonecommandsapi.h>
-#include    <cvtlogger.h>
-
-
-/**
-* Three state classes for handling audio mute/unmute commands towards mediator when mute state
-* is changed locally faster than mediator gives response.
-
-        
-                                             IDLE <-------------------------|    
-                                               |                            |
-             NotifyOutgoingAudioState( x ) / mediator.Send( x )             |
-                                               |                            |
-                                               v                            |
-    |--------------------------------------> SENDING -- CommandResponseL ---| 
-    |                                           |
-    |                           NotifyOutgoingAudioState( y ) / saveCommand( y )
-    |                                           |
-    |                                           v
-    |- CommandResponseL( x ) / Send( y ) ---- BUFFERED
-                             
-                             
-                             
-  
-*/
-NONSHARABLE_CLASS( TVtMdtrStateIdle ) : public CBase
-{
-    public:  
-        TVtMdtrStateIdle( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator );
-        virtual void SendL( TUid aDomain, TUid aCategory, TInt aCommand );       
-        virtual void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus );
-        
-        TInt DoSend( TUid aDomain, TUid aCategory, TInt aCommand );
-        
-    CVtEngMdtrCommandSender& iSender;
-    CMediatorCommandInitiator& iMediator;
-};
-
-NONSHARABLE_CLASS( TVtMdtrStateSending ) : public TVtMdtrStateIdle
-{
-    public:
-        TVtMdtrStateSending( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator );
-        void SendL( TUid aDomain, TUid aCategory, TInt aCommand );
-        void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus );        
-};
-
-NONSHARABLE_CLASS( TVtMdtrStateBuffered ) : public TVtMdtrStateIdle
-{
-    public:
-        TVtMdtrStateBuffered( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator );
-        void SendL( TUid aDomain, TUid aCategory, TInt aCommand );
-        void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus );
-        
-        TUid iDomain;
-        TUid iCategory;
-        TInt iCommand;
-};
-
-    
-// CONSTANTS
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CVtEngMdtrCommandSender* CVtEngMdtrCommandSender::NewL( CVtEngUtility& aUtils )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.NewL" )
-    CVtEngMdtrCommandSender* self = new ( ELeave )
-        CVtEngMdtrCommandSender( aUtils );
-    CleanupStack::PushL( self );
-    self->ConstructL( );
-    CleanupStack::Pop();
-
-    __VTPRINTEXIT( "CVtEngMdtrCommandSender.NewL" )
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::~CVtEngMdtrCommandSender
-// destructor
-// -----------------------------------------------------------------------------
-//
-CVtEngMdtrCommandSender::~CVtEngMdtrCommandSender()
-    {
-    iUtils.EventManager().RemoveObserver( this );
-    delete iMediatorInitiator;
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::EndCall
-// Sends end call command via Mediator
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::EndCall( )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.EndCall" )
-    const TVersion KTelephonyCmdVersion(
-        KTelephonyCommandsVersionMajor,
-        KTelephonyCommandsVersionMinor,
-        KTelephonyCommandsVersionBuild );
-    const TInt res =
-        iMediatorInitiator->IssueCommand(
-           KMediatorTelephonyDomain,
-           KCatCommandsToTelephony,
-           EPhoneCmdEndActiveCall,
-           KTelephonyCmdVersion,
-           KNullDesC8() );
-    
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.EndCall res=%d", res )
-    }
-    
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::VoiceFallback
-// Sends voice fallback command to telephony via Mediator
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::VoiceFallback()
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.VoiceFallback" )
-    const TVersion KVtToPhoneCmdVersion(
-        KVideoTelToPhoneCmdVersionMajor,
-        KVideoTelToPhoneCmdVersionMinor,
-        KVideoTelToPhoneCmdVersionBuild );
-#ifdef _DEBUG
-    TInt err =
-#endif
-    iMediatorInitiator->IssueCommand(
-        KMediatorTelephonyDomain,
-        KCatVideoTelToPhoneCommands,
-        EVtCmdFallback,
-        KVtToPhoneCmdVersion,
-        KNullDesC8() );
-    // response is not awaited
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.VoiceFallback %d>", err )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::SwitchToVoiceL
-// Sends switch to voice command to telephony via Mediator
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::SwitchToVoiceL( CVtEngOperation& aOperation )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.SwitchToVoiceL" )
-    iOperation = &aOperation;
-    // add this as observer. Mediator command is sent when idle state
-    // is reached (i.e. Protocol has released dataport and it can be recovered
-    // by telephony)
-    iUtils.EventManager().AddObserverL( this );
-    // let current state handle actual request
-    iUtils.StateManager()->HandleOperationL( aOperation );
-    __VTPRINTEXIT( "CVtEngMdtrCommandSender.SwitchToVoiceL" )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::NotifyOutgoingAudioState
-// Sends microphone state to telephony via Mediator
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::NotifyOutgoingAudioState( 
-    const TBool aMicEnabled )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.NotifyOutgoingAudioState" )    
-
-    const TInt command = ( aMicEnabled ) 
-        ? EAudioCmdUnmute : EAudioCmdMute;        
-#ifdef _DEBUG
-    TRAPD( res, iSenderState->SendL(
-            KMediatorTelephonyDomain,
-            KCatAudioCommandsToTelephony,
-            command ) );
-#else 
-    TRAP_IGNORE(iSenderState->SendL(
-            KMediatorTelephonyDomain,
-            KCatAudioCommandsToTelephony,
-            command ) );
-#endif
-            
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.NotifyOutgoingAudioState %d", res )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::SetSenderState
-// sets new mediator sender state for audio command
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::SetSenderState( TVtMdtrStateIdle& aNewState )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.SetSenderState" )
-    __VTPRINT2( DEBUG_GEN, " delete old state %x", (TInt) iSenderState )
-    __ASSERT_DEBUG( iSenderState != &aNewState, 
-        Panic( EVtEngPanicWrongMediatorSenderState ) );
-    delete iSenderState;
-    iSenderState = &aNewState;
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.SetSenderState %x", (TInt) iSenderState )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::CommandResponseL
-// Mediator framework callback
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::CommandResponseL( TUid aDomain,
-    TUid aCategory, 
-    TInt aCommandId,
-    TInt aStatus,
-    const TDesC8& /*aData*/ )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.CommandResponseL" )
-    switch ( aCommandId )
-        {
-    case EAudioCmdUnmute:
-    case EAudioCmdMute:
-        iSenderState->CommandResponseL( aDomain, aCategory, aCommandId, aStatus );
-        break;
-    default:
-        // ignored for other commands (so far)
-        break;
-        }             
-    __VTPRINT2( DEBUG_GEN, " mediator command id=%d", aCommandId )
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.CommandResponseL res=%d", aStatus )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::HandleVtEventL
-// Handles state change event associated with "switch to voice" and "TerminateSession" command
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::HandleVtEventL( TInt aEvent )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.HandleVtEventL" )
-#ifdef _DEBUG
-        TInt err = KErrNone;
-#endif     
-    if ( aEvent == KVtEngSessionStateChanged &&
-         iOperation && iOperation->Command() == KVtEngSwitchToVoice )
-        {
-        const TVersion KVtToPhoneCmdVersion(
-            KVideoTelToPhoneCmdVersionMajor,
-            KVideoTelToPhoneCmdVersionMinor,
-            KVideoTelToPhoneCmdVersionBuild );
-        
-        iUtils.EventManager().RemoveObserver( this );
-        // send command (ignore possible error - no way to recover from it)
-#ifdef _DEBUG
-        err =
-#endif        
-        iMediatorInitiator->IssueCommand(
-            //KMediatorVideoTelephonyDomain,
-            KMediatorTelephonyDomain,
-            KCatVideoTelToPhoneCommands,
-            EVtCmdSwitchToVoice,
-            KVtToPhoneCmdVersion,
-            KNullDesC8() );
-        iOperation->HandleOpComplete( KErrNone );
-        iOperation = NULL;
-        }
-    __VTPRINTEXITR( "CVtEngMdtrCommandSender.HandleVtEventL %d", err )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::
-// c++ constructor
-// -----------------------------------------------------------------------------
-//
-CVtEngMdtrCommandSender::CVtEngMdtrCommandSender( CVtEngUtility& aUtils ) :
-    iUtils( aUtils )
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.CVtEngMdtrCommandSender" )
-    __VTPRINTEXIT( "CVtEngMdtrCommandSender.CVtEngMdtrCommandSender" )
-    }
-    
-// -----------------------------------------------------------------------------
-// CVtEngMdtrCommandListener::ConstructL
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtEngMdtrCommandSender::ConstructL()
-    {
-    __VTPRINTENTER( "CVtEngMdtrCommandSender.ConstructL" )
-    iMediatorInitiator = CMediatorCommandInitiator::NewL( this );
-    
-    // set initial mediator command sender state
-    iSenderState = new ( ELeave ) TVtMdtrStateIdle( *this, *iMediatorInitiator );
-    __VTPRINTEXIT( "CVtEngMdtrCommandSender.ConstructL" )
-    }
-
-TVtMdtrStateIdle::TVtMdtrStateIdle( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ) 
-: iSender( aSender), iMediator( aMediator )
-    {
-    __VTPRINTENTER( "TVtMdtrStateIdle.ctr" )
-    __VTPRINTEXITR( "TVtMdtrStateIdle.ctr %x", (TInt) this )
-    }
-
-void TVtMdtrStateIdle::SendL( TUid aDomain, TUid aCategory, TInt aCommand )
-    {
-    __VTPRINTENTER( "TVtMdtrStateIdle.SendL" )
-    TVtMdtrStateIdle* nextState = NULL;
-    const TInt res = DoSend( aDomain, aCategory, aCommand );
-    if ( res == KErrInUse )
-        {
-        nextState = new ( ELeave ) TVtMdtrStateBuffered( iSender, iMediator );
-        CleanupStack::PushL( nextState );
-        nextState->SendL( aDomain, aCategory, aCommand );
-        CleanupStack::Pop( nextState );
-        }
-    else
-        {
-        nextState = new ( ELeave ) TVtMdtrStateSending( iSender, iMediator );
-        }
-    iSender.SetSenderState( *nextState );            
-    __VTPRINTEXIT( "TVtMdtrStateIdle.SendL" )
-    }
-
-TInt TVtMdtrStateIdle::DoSend( TUid aDomain, TUid aCategory, TInt aCommand )
-    {
-    __VTPRINTENTER( "TVtMdtrStateIdle.DoSend" )
-    const TVersion KVtToPhoneCmdVersion(
-        KVideoTelToPhoneCmdVersionMajor,
-        KVideoTelToPhoneCmdVersionMinor,
-        KVideoTelToPhoneCmdVersionBuild );
-        
-    TInt res = iMediator.IssueCommand(
-        aDomain,
-        aCategory,
-        aCommand,
-        KVtToPhoneCmdVersion,
-        KNullDesC8() );
-    __VTPRINTEXITR( "TVtMdtrStateIdle.DoSend res=%d", res )
-    return res;
-    }
-
-void TVtMdtrStateIdle::CommandResponseL( TUid /*aDomain*/, TUid /*aCategory*/, TInt /*aCommand*/, TInt /*aStatus*/ )
-    {
-    __VTPRINTENTER( "TVtMdtrStateIdle.CommandResponseL" )
-    // base class method should never be possible to call
-    __VTPRINTEXIT( "TVtMdtrStateIdle.CommandResponseL" )
-    }
-
-TVtMdtrStateSending::TVtMdtrStateSending( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator )
-: TVtMdtrStateIdle( aSender, aMediator )
-    {
-    __VTPRINTENTER( "TVtMdtrStateSending.ctr" )
-    __VTPRINTEXITR( "TVtMdtrStateSending.ctr %x", (TInt) this )
-    }
-
-void TVtMdtrStateSending::SendL( TUid aDomain, TUid aCategory, TInt aCommand )
-    { 
-    __VTPRINTENTER( "TVtMdtrStateSending.SendL" )    
-    TVtMdtrStateIdle* buffered = new ( ELeave )TVtMdtrStateBuffered( iSender, iMediator );
-    CleanupStack::PushL( buffered );
-    buffered->SendL( aDomain, aCategory, aCommand );
-    CleanupStack::Pop( buffered );
-    iSender.SetSenderState( *buffered );
-    __VTPRINTEXIT( "TVtMdtrStateSending.SendL" )
-    }
-
-void TVtMdtrStateSending::CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus )
-    {
-    __VTPRINTENTER( "TVtMdtrStateSending.CommandResponseL" )
-    __VTPRINT2( DEBUG_GEN, " command=%d", aCommand )    
-    __VTPRINT2( DEBUG_GEN, " response=%d", aStatus )    
-    TVtMdtrStateIdle* idle = new ( ELeave ) TVtMdtrStateIdle( iSender, iMediator );    
-    iSender.SetSenderState( *idle );
-    __VTPRINTEXIT( "TVtMdtrStateSending.CommandResponseL" )
-    }
-
-TVtMdtrStateBuffered::TVtMdtrStateBuffered( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator )
-: TVtMdtrStateIdle( aSender, aMediator )
-    {
-    __VTPRINTENTER( "TVtMdtrStateBuffered.ctr" )
-    __VTPRINTEXITR( "TVtMdtrStateBuffered.ctr %x", (TInt) this )
-    }
-
-void TVtMdtrStateBuffered::SendL( TUid aDomain, TUid aCategory, TInt aCommand )
-    {
-    __VTPRINTENTER( "TVtMdtrStateBuffered.SendL" )    
-    
-    iDomain = aDomain;
-    iCategory = aCategory;
-    iCommand = aCommand;
-    // iCommand is sent in CommandResponseL
-    __VTPRINTEXIT( "TVtMdtrStateBuffered.SendL" )
-    }
-
-void TVtMdtrStateBuffered::CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus )
-    {
-    __VTPRINTENTER( "TVtMdtrStateBuffered.CommandResponseL" )    
-    const TVersion KVtToPhoneCmdVersion(
-        KVideoTelToPhoneCmdVersionMajor,
-        KVideoTelToPhoneCmdVersionMinor,
-        KVideoTelToPhoneCmdVersionBuild );
-    TBool nextStateIdle = ETrue;
-    TInt res = KErrNone;
-    if ( aCommand != iCommand )    
-        {
-        res = iMediator.IssueCommand(
-            KMediatorTelephonyDomain,
-            KCatAudioCommandsToTelephony,
-            iCommand,
-            KVtToPhoneCmdVersion,
-            KNullDesC8() );
-        if ( res == KErrNone )
-            {    
-            nextStateIdle = EFalse;
-            }        
-        }
-    TVtMdtrStateIdle* nextState = NULL;
-    if ( nextStateIdle )
-        {
-        __VTPRINT2( DEBUG_GEN, " failed to send buffered command with error=%d", res )
-        nextState = new ( ELeave ) TVtMdtrStateIdle( iSender, iMediator );
-        }
-    else
-        {
-        nextState = new ( ELeave ) TVtMdtrStateSending( iSender, iMediator );
-        CleanupStack::PushL( nextState );
-        nextState->SendL( iDomain, iCategory, iCommand );
-        CleanupStack::Pop( nextState );
-        }
-    iSender.SetSenderState( *nextState );    
-    __VTPRINTEXIT( "TVtMdtrStateBuffered.CommandResponseL" )
-    }
-        
-//  End of File