phoneengine/audiohandling/src/cpegsmaudiodata.cpp
changeset 37 ba76fc04e6c2
child 51 f39ed5e045e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/audiohandling/src/cpegsmaudiodata.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,311 @@
+/*
+* Copyright (c) 2002-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:  This module contains the implementation of CPEGsmAudioData class 
+*                member functions
+*
+*/
+
+
+// INCLUDE FILES
+#include "cpeaudiodtmftoneplayer.h" 
+#include "cpeaudiofactory.h"    
+#include "cpeaudioinbandtoneplayer.h"   
+#include "cpegsmaudiodata.h"    
+#include <ccpdefs.h>    
+#include <mpeclientinformation.h>   
+#include <mpedatastore.h>   
+#include <mpephonemodelinternal.h>  
+#include <talogger.h>   
+
+// EXTERNAL DATA STRUCTURES
+// None.
+
+// EXTERNAL FUNCTION PROTOTYPES  
+// None.
+
+// CONSTANTS
+// None.
+
+// MACROS
+// None.
+
+// LOCAL CONSTANTS AND MACROS
+// None.
+
+// MODULE DATA STRUCTURES
+// None.
+
+// LOCAL FUNCTION PROTOTYPES
+// None.
+
+// FORWARD DECLARATIONS
+// None.
+
+// ==================== LOCAL FUNCTIONS ====================
+// None.
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::CPEGsmAudioData
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEGsmAudioData::CPEGsmAudioData
+        ( 
+        MPEPhoneModelInternal& aPhoneModel,
+        RFs& aFsSession
+        ) : CPEAudioData( aPhoneModel ),
+            iFsSession( aFsSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPEGsmAudioData::ConstructL( CPEAudioFactory& aAudioFactory )
+    {    
+    CPEAudioData::ConstructL( aAudioFactory );     
+    
+    iInbandTonePlayer = 
+        CPEAudioInbandTonePlayer::NewL( *this, iFsSession, aAudioFactory );
+    TInt volume = iPhoneModel.DataStore()->AudioVolume(); 
+    iInbandTonePlayer->SetVolume( volume );
+    
+    iDtmfTonePlayer = CPEAudioDtmfTonePlayer::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPEGsmAudioData* CPEGsmAudioData::NewL
+        ( 
+        MPEPhoneModelInternal& aPhoneModel,
+        RFs& aFsSession
+        )
+    {
+    CPEGsmAudioData* self = new ( ELeave ) 
+        CPEGsmAudioData ( aPhoneModel, aFsSession );
+    CleanupStack::PushL( self );
+    
+    CPEAudioFactory* factory = CPEAudioFactory::NewLC();
+    self->ConstructL(*factory);
+    CleanupStack::PopAndDestroy( factory );
+    
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::NewL
+// Two-phased constructor for testing purposes.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPEGsmAudioData* CPEGsmAudioData::NewL
+        ( 
+        MPEPhoneModelInternal& aPhoneModel,
+        RFs& aFsSession,
+        CPEAudioFactory& aAudioFactory  
+        )
+    {
+    CPEGsmAudioData* self = new ( ELeave ) 
+        CPEGsmAudioData ( aPhoneModel, aFsSession );
+    CleanupStack::PushL( self );
+    
+    self->ConstructL(aAudioFactory);    
+    CleanupStack::Pop( self );
+    return self;
+    }        
+    
+// Destructor
+EXPORT_C CPEGsmAudioData::~CPEGsmAudioData
+        (
+        // None.
+        )
+    {
+    delete iDtmfTonePlayer;
+    delete iInbandTonePlayer;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::PlayDtmfTone
+// Starts to play the given tone from dtmf player. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEGsmAudioData::PlayDtmfTone
+        ( 
+        const TChar& aTone //DTMF tone to play
+        ) const
+    {
+    TInt volume;  //DTMF tone volume
+    volume = iPhoneModel.DataStore()->KeypadVolume();
+
+    TEFLOGSTRING3( KTAREQIN, 
+        "AUD CPEGsmAudioData::PlayDtmfTone, aTone = %s, volume = %d", 
+        &aTone, 
+        volume );
+
+    iDtmfTonePlayer->SetVolume( volume );
+    iDtmfTonePlayer->PlayDtmfTone( aTone );
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::StopDtmfTonePlay
+// Stops the playing of dtmf tone. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEGsmAudioData::StopDtmfTonePlay
+        (
+        )
+    {
+    TEFLOGSTRING( KTAREQIN, "AUD CPEGsmAudioData::StopDtmfTonePlay" );
+    iDtmfTonePlayer->Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::StopInbandTonePlay
+// Stops the playing of inband tone. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEGsmAudioData::StopInbandTonePlay
+        ( 
+        )
+    {
+    TEFLOGSTRING( KTAREQIN, "AUD CPEGsmAudioData::StopInbandTonePlay" );
+    iInbandTonePlayer->Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::PlayInbandTone
+// Starts to play the given tone from inband player.
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CPEGsmAudioData::PlayInbandTone()
+    {
+    TCCPTone tone = iPhoneModel.DataStore()->InbandTone();
+
+    TEFLOGSTRING2( KTAREQIN, 
+        "AUD CPEGsmAudioData::PlayInbandTone, tone = %d", 
+        tone );
+    iInbandTonePlayer->PlayInbandTone( tone );
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::HandleDtmfEvent
+// From MCCEDtmfObserver.
+// All the occurred DTMF events are notified through this interface.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEGsmAudioData::HandleDTMFEvent( const MCCEDtmfObserver::TCCEDtmfEvent aEvent, 
+                                                const TInt aError, 
+                                                const TChar aTone )
+    {
+    TEFLOGSTRING3( 
+        KTAMESIN, 
+        "AUD CPEGsmAudioData::HandleDtmfEvent: aEvent %d, aError %d", 
+        aEvent, 
+        aError );
+        
+    if( aError == KErrNone )
+        {
+        switch( aEvent )
+            {                
+            case ECCEDtmfManualStart:
+            case ECCEDtmfSequenceStart:
+                if ( DtmfLocalPlayAllowed() )
+                    {
+                    TEFLOGSTRING( KTAINT, "AUD CPEGsmAudioData::HandleDTMFEvent: PlayDtmfTone" );
+                    PlayDtmfTone( aTone );
+                    }
+                else
+                    {
+                    TEFLOGSTRING( KTAERROR, "AUD CPEGSMAUDIODATA::HANDLEDTMFEVENT ! LOCAL PLAY NOT ALLOWED" );
+                    }
+
+                break;
+                
+            case ECCEDtmfManualStop:
+            case ECCEDtmfSequenceStop:
+            case ECCEDtmfManualAbort:
+            case ECCEDtmfSequenceAbort:
+            case ECCEDtmfStopInDtmfString:
+            case ECCEDtmfStringSendingCompleted:
+            default:
+                TEFLOGSTRING( KTAINT, "AUD CPEGsmAudioData::HandleDTMFEvent: StopDtmfTonePlay" );
+                //Stop tone playing
+                StopDtmfTonePlay();
+                break;
+            }
+        }
+    else
+        {
+        TEFLOGSTRING( KTAINT, "AUD CPEGsmAudioData::HandleDTMFEvent: Error case" );
+        //Stop tone playing
+        StopDtmfTonePlay();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::DtmfLocalPlayAllowed
+// Checks if a DTMF tone may be played locally
+// -----------------------------------------------------------------------------
+//
+TBool CPEGsmAudioData::DtmfLocalPlayAllowed() const
+    {
+    TBool localPlayAllowed( ETrue );
+    
+    // Check if dtmf string sending was requested by user
+    if ( iPhoneModel.DataStore()->DtmfString() == KNullDesC )
+        {
+        // No dtmf string was defined - assuming dtmf string sending was initiated
+        // by third party. Proceed to check if a connected SAT originated call exists
+        for( TInt callId = 0; callId < KPEMaximumNumberOfVoiceCalls; callId++ )
+            {
+            if( iPhoneModel.DataStore()->CallOrigin( callId ) == EPECallOriginSAT    
+                && iPhoneModel.DataStore()->CallState( callId ) == EPEStateConnected )
+                {
+                // SAT call is in connected state - prevent dtmf local play
+                localPlayAllowed = EFalse;
+                break;
+                }
+            }
+        }
+
+    return localPlayAllowed;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEGsmAudioData::DoHandleVolumeChange
+// -----------------------------------------------------------------------------
+//
+void CPEGsmAudioData::DoHandleVolumeChange( TInt aVolume, TBool aSendMsg)
+
+    {
+    iInbandTonePlayer->SetVolume( aVolume );
+    CPEAudioData::DoHandleVolumeChange(aVolume , aSendMsg);
+    }
+
+// ================= OTHER EXPORTED FUNCTIONS ===============================
+// None
+
+// End of File