phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp
changeset 37 ba76fc04e6c2
child 46 bc5a64e5bc3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,610 @@
+/*
+* Copyright (c) 2002-2004 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 CPEAudioInbandTonePlayer class 
+*                member functions
+*
+*/
+
+ 
+//  INCLUDE FILES
+#include    "cpeaudiodata.h" // CPEAudioData header
+#include    "cpeaudioinbandtoneplayer.h"
+#include    "cpeaudiofactory.h"
+#include    "cpeaudiotoneutility.h"
+#include    <AudioPreference.h>
+#include    <barsc.h> 
+#include    <barsread.h>
+#include    <data_caging_path_literals.hrh> 
+#include    <defaultbeep.rsg>           
+#include    <pepanic.pan>
+#include    <talogger.h>    
+
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES  
+// None
+
+// CONSTANTS
+const TInt KPhoneInbandVolumeMax = 10;
+const TInt KPhoneInbandVolumeMin = 0;
+const TInt KPhoneInbandToneZero = 0;
+const TInt KPhoneInbandToneNoRepeat = 0;
+const TInt KPhoneInbandToneRepeatOnce = 1;
+
+// Resourcefile destination.
+_LIT( KSystemDefaultbeepRscDrive, "Z:" );
+_LIT( KSystemDefaultbeepRscFile, "DEFAULTBEEP.rSC" );
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+
+// ==================== LOCAL FUNCTIONS ====================
+// None.
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEAudioInbandTonePlayer* CPEAudioInbandTonePlayer::NewL
+    (
+    CPEAudioData& aOwner,     // ref. to class owner
+    RFs& aFsSession,
+    CPEAudioFactory& aAudioFactory
+    )
+    {
+    CPEAudioInbandTonePlayer* self = 
+        new ( ELeave ) CPEAudioInbandTonePlayer( aOwner, aFsSession );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL( aAudioFactory );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+//Destructor
+CPEAudioInbandTonePlayer::~CPEAudioInbandTonePlayer()
+    {
+    delete iPlayBeepSequence;
+    delete iPlayNoSoundSequence;
+    delete iPlayDataSequence;
+    delete iResourceCallWaitingSeq;
+    delete iResourceRingGoingSeq;
+    delete iResourceRadioPathSeq;
+    delete iResourceSpecialSeq;
+    delete iResourceCongestionSeq;
+    delete iResourceReorderSeq;
+    delete iResourceBusySeq;
+    delete iCurrent;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::CPEAudioInbandTonePlayer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEAudioInbandTonePlayer::CPEAudioInbandTonePlayer
+    (
+    CPEAudioData& aOwner,     // ref. to class owner
+    RFs& aFsSession
+    ):iOwner( aOwner ),
+      iFsSession( aFsSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::ConstructL(
+    CPEAudioFactory& aFactory )
+    {
+    TEFLOGSTRING( KTAOBJECT, "AUD CPEAudioInbandTonePlayer::ConstructL()" );
+    iCurrent = aFactory.CreateAudioToneUtilityL( *this );
+
+
+    //Get the inband tone sequences from resource and and store to member variables
+    RResourceFile resourceFile;
+
+    TFileName fileName( KSystemDefaultbeepRscDrive );
+    fileName.Append( KDC_RESOURCE_FILES_DIR );
+    fileName.Append( KSystemDefaultbeepRscFile );
+
+    resourceFile.OpenL( iFsSession, fileName );
+    CleanupClosePushL( resourceFile );
+
+    HBufC8* resourceBusy = resourceFile.AllocReadL( R_NET_BUSY );
+    HBufC8* resourceReorder = resourceFile.AllocReadL( R_NET_REORDER );
+    HBufC8* resourceCongestion = resourceFile.AllocReadL( R_NET_CONGESTION );
+    HBufC8* resourceSpecial = resourceFile.AllocReadL( R_NET_SPECIAL_INFORMATION );
+    HBufC8* resourceRadioPath = resourceFile.AllocReadL( R_NET_RADIO_NOT_AVAILABLE );
+    HBufC8* resourceRingGoing = resourceFile.AllocReadL( R_NET_RING_GOING );
+    HBufC8* resourceCallWaiting = resourceFile.AllocReadL( R_NET_CALL_WAITING );
+    HBufC8* dataCallTone = resourceFile.AllocReadL( R_DATA_CALL_TONE );
+    HBufC8* noSoundSequence = resourceFile.AllocReadL( R_NO_SOUND_SEQUENCE );
+    HBufC8* beepSequence = resourceFile.AllocReadL( R_BEEP_SEQUENCE );
+    
+    CleanupStack::PopAndDestroy( &resourceFile );
+
+    TResourceReader reader;
+    TInt i(0);
+    TInt length(0);
+
+    //SubscriberBusy
+    reader.SetBuffer( resourceBusy );
+    length = reader.ReadInt16();
+    iResourceBusySeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendBusy(iResourceBusySeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendBusy.Append(reader.ReadUint16());
+        }
+    
+    //Reorder
+    reader.SetBuffer( resourceReorder );
+    length = reader.ReadInt16();
+    iResourceReorderSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendReorder(iResourceReorderSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendReorder.Append(reader.ReadUint16());
+        }
+
+    //Congestion
+    reader.SetBuffer( resourceCongestion );
+    length = reader.ReadInt16();
+    iResourceCongestionSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendCongestion(iResourceCongestionSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendCongestion.Append(reader.ReadUint16());
+        }
+    
+    //Special Information
+    reader.SetBuffer( resourceSpecial );
+    length = reader.ReadInt16();
+    iResourceSpecialSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendSpecial(iResourceSpecialSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendSpecial.Append(reader.ReadUint16());
+        }
+    
+    //RadioPathNotAvailable
+    reader.SetBuffer( resourceRadioPath );
+    length = reader.ReadInt16();
+    iResourceRadioPathSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendRadio(iResourceRadioPathSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendRadio.Append(reader.ReadUint16());
+        }
+    
+    //RemoteAlertingTone
+    reader.SetBuffer( resourceRingGoing );
+    length = reader.ReadInt16();
+    iResourceRingGoingSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendRingGoing(iResourceRingGoingSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendRingGoing.Append(reader.ReadUint16());
+        }
+    //CallWaitingTone
+    reader.SetBuffer( resourceCallWaiting );
+    length = reader.ReadInt16();
+    iResourceCallWaitingSeq = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendCallWaiting(iResourceCallWaitingSeq->Des());
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendCallWaiting.Append(reader.ReadUint16());
+        }
+
+    //DataCalTone
+    reader.SetBuffer( dataCallTone );
+    length = reader.ReadInt16();
+    iPlayDataSequence = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendDataCallTone( iPlayDataSequence->Des() );
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendDataCallTone.Append(reader.ReadUint16());
+        }
+
+    //NoSoundSequence
+    reader.SetBuffer( noSoundSequence );
+    length = reader.ReadInt16();
+    iPlayNoSoundSequence = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendNoSoundSequence( iPlayNoSoundSequence->Des() );
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendNoSoundSequence.Append(reader.ReadUint16());
+        }
+
+    //BeepSequence
+    reader.SetBuffer( beepSequence );
+    length = reader.ReadInt16();
+    iPlayBeepSequence = HBufC8::NewL( length );
+    //Tptr modifies member variables (HBufC8) length so it includes the memory edited by Append()
+    TPtr8 appendBeepSequence( iPlayBeepSequence->Des() );
+
+    for( i = 0 ; i < length ; i++ )
+        {
+        appendBeepSequence.Append(reader.ReadUint16());
+        }
+
+    delete dataCallTone;
+    delete noSoundSequence;
+    delete beepSequence;
+    delete resourceBusy;
+    delete resourceReorder;
+    delete resourceCongestion;
+    delete resourceSpecial;
+    delete resourceRadioPath;
+    delete resourceRingGoing;
+    delete resourceCallWaiting;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::PlayInbandTone
+// Searches the given Inband tone from iToneArray and calls PlayCurrentTone -member function.
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::PlayInbandTone( 
+        TCCPTone aTone )
+    {
+    //Stop playing if there is something playing
+    Cancel();
+
+    UpdateTonePlayerVolume();
+    
+    iToneName = aTone;
+
+    TPtr8 resourceBusySeq = iResourceBusySeq -> Des();
+    TPtr8 resourceRadioPathSeq = iResourceRadioPathSeq -> Des();
+    TPtr8 resourceCongestionSeq = iResourceCongestionSeq -> Des();
+    TPtr8 resourceSpecialSeq = iResourceSpecialSeq -> Des();
+    TPtr8 resourceReorderSeq = iResourceReorderSeq->Des();
+    TPtr8 resourceRingGoingSeq = iResourceRingGoingSeq -> Des();
+    TPtr8 resourceCallWaitingSeq = iResourceCallWaitingSeq -> Des();
+
+    TEFLOGSTRING( KTAREQOUT, 
+        "AUD CPEAudioInbandTonePlayer::PlayInbandTone: CMdaAudioToneUtility->PrepareToPlayDesSequence()" );
+    switch( aTone )
+        {
+        case ECCPToneUserBusy:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceBusySeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceBusySeq );
+            break;
+        case ECCPToneRadioPathNotAvailable:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceRadioPathSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceRadioPathSeq );
+            break;
+        case ECCPToneCongestion:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceCongestionSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceCongestionSeq );
+            break;
+        case ECCPToneSpecialInformation:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceSpecialSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceSpecialSeq );
+            break;
+        case ECCPReorder:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceReorderSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceReorderSeq );
+            break;
+        case ECCPRemoteAlerting:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceRingGoingSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceRingGoingSeq );
+            break;
+        case ECCPCallWaiting:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: iResourceCallWaitingSeq" );
+            iCurrent->PrepareToPlayDesSequence( resourceCallWaitingSeq );
+            break;
+        case ECCPNoSoundSequence:
+            TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: called ECCPNoSoundSequence " );
+            break;
+        default:
+            TEFLOGSTRING2( KTAINT, "AUD CPEAudioInbandTonePlayer::PlayInbandTone: No InbandTone defined to play with: %d", aTone );
+            __ASSERT_DEBUG( EFalse, Panic( EPEPanicNotCompleted ) );
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::Cancel
+// Cancels the currently playing tone.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::Cancel()
+    {
+    TEFLOGSTRING( KTAINT, "AUD CPEAudioInbandTonePlayer::Cancel()");
+    if ( iCurrent )
+        {
+        if ( iCurrent->State() == EMdaAudioToneUtilityNotReady )
+            {
+            // Prepare is called, but toneplayer's state is not yet prepare,
+            // then cancel to prepare is needed.
+            TEFLOGSTRING( KTAREQOUT, 
+                "AUD CPEAudioInbandTonePlayer::Cancel: CMdaAudioToneUtility->CancelPrepare");
+            iCurrent->CancelPrepare();
+            }
+        else
+            {
+            TEFLOGSTRING( KTAREQOUT, 
+                "AUD CPEAudioInbandTonePlayer::Cancel: CMdaAudioToneUtility->CancelPlay");
+            iCurrent->CancelPlay();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::PlayCurrentTone
+// Cancels the currently playing tone.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::PlayCurrentTone()
+    {
+    if ( iCurrent )
+        {
+        if ( iCurrent->State() == EMdaAudioToneUtilityPrepared )
+            {
+
+            UpdateTonePlayerVolume();
+
+            TEFLOGSTRING( KTAREQOUT, 
+                "AUD CPEAudioInbandTonePlayer::PlayCurrentTone(): CMdaAudioToneUtility->SetPriority()");
+
+            switch( iToneName )
+                {
+                case ECCPToneUserBusy:
+                     iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefBusy ) );
+                    break;
+                case ECCPToneRadioPathNotAvailable:
+                    iCurrent->SetRepeats( 
+                        KPhoneInbandToneRepeatOnce, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefRadioNotAvailable ) );
+                    break;
+                case ECCPToneCongestion:
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefCongestion ) );
+                    break;
+                case ECCPToneSpecialInformation:
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefSpecialInformation ) );
+                    break;
+                case ECCPReorder:
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefReorder ) );
+                    break;
+                case ECCPRemoteAlerting:
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefRingGoing ) );
+                    break;
+                case ECCPCallWaiting:
+                    iCurrent->SetRepeats( 
+                        KPhoneInbandToneNoRepeat, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityNetMsg,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefCallWaiting ));
+                    break;
+                case ECCPDataCallTone: //EProfileRingingTypeRinging, EProfileRingingTypeAscending, EProfileRingingTypeRingingOnce
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityPhoneCall,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefIncomingDataCall ) );
+                    
+                    if ( iRingingType == EProfileRingingTypeAscending )
+                        {
+                        iCurrent->SetVolumeRamp( 
+                            TTimeIntervalMicroSeconds( KPERingingToneRampDuration ) );
+                        }
+                    else
+                        {
+                        //EProfileRingingTypeRinging, EProfileRingingTypeRingingOnce
+                        iCurrent->SetVolumeRamp( 
+                            TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                        }
+                    if ( iRingingType == EProfileRingingTypeRingingOnce )
+                        {
+                        iCurrent->SetRepeats( 
+                            KPhoneInbandToneNoRepeat, 
+                            TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                        }
+                    break;
+                case ECCPNoSoundSequence:
+                case ECCPBeepSequence:
+                    iCurrent->SetRepeats( 
+                        KMdaAudioToneRepeatForever, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetPriority(
+                        KAudioPriorityPhoneCall,
+                        static_cast < TMdaPriorityPreference > ( KAudioPrefIncomingCall ) );
+                    iCurrent->SetRepeats( 
+                        KPhoneInbandToneNoRepeat, 
+                        TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    iCurrent->SetVolumeRamp( TTimeIntervalMicroSeconds( KPhoneInbandToneZero ) );
+                    break;
+                default:
+                    TEFLOGSTRING2( KTAREQOUT, 
+                        "AUD CPEAudioInbandTonePlayer::PlayCurrentTone: No InbandTone defined to set priority with %d", 
+                        iToneName);
+                    break;
+                }
+
+            #ifdef __WINS__
+                    TEFLOGSTRING( KTAMESINT, 
+                        "AUD CPEAudioInbandTonePlayer::PlayCurrentTone: Ignored call to CMdaAudioToneUtility->Play(), because can't play in WINS");
+            #else
+                    //Play the tone
+                    TEFLOGSTRING( KTAREQOUT, 
+                        "AUD CPEAudioInbandTonePlayer::PlayCurrentTone: CMdaAudioToneUtility->Play() called");
+                    iCurrent->Play();
+            #endif
+            } // State()
+        } //iCurrent
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::MatoPrepareComplete
+// Updates flag values and plays current inbandtone.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::MatoPrepareComplete( TInt aError )
+    {
+
+    if( aError == KErrNone )
+        {
+        PlayCurrentTone();
+        }
+    else
+        {
+        TEFLOGSTRING2( KTAREQIN, 
+            "AUD CPEAudioInbandTonePlayer::MatoPrepareComplete: aError = %d", 
+            aError );
+        }
+
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::SetVolume
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::SetVolume( TInt aVolume )
+    {
+    TInt safeVolume = 
+        Max( Min( aVolume, KPhoneInbandVolumeMax ), KPhoneInbandVolumeMin );
+    
+    TEFLOGSTRING2( KTAREQIN, 
+        "AUD CPEAudioInbandTonePlayer::SetVolume: VOLUME = %d", safeVolume );
+    
+    if ( iCurrent && EMdaAudioToneUtilityNotReady != iCurrent->State() )
+        {
+        TInt mediaServerVolume = CalculateMediaServerVolume( safeVolume );
+        TEFLOGSTRING2( KTAREQIN, 
+            "AUD CPEAudioInbandTonePlayer::SetVolume: MEDIA SERVER VOLUME = %d", 
+            mediaServerVolume );
+        iCurrent->SetVolume( mediaServerVolume );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::MatoPlayComplete
+// -
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::MatoPlayComplete( TInt aError )
+    {
+ 
+    if( aError != KErrNone )
+        {
+        TEFLOGSTRING2( KTAREQIN, 
+            "CPEAudioInbandTonePlayer::MatoPlayComplete: aError = %d",
+            aError );
+        }
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::CalculateMediaServerVolume
+// -----------------------------------------------------------------------------
+//
+TInt CPEAudioInbandTonePlayer::CalculateMediaServerVolume( TInt aVolume ) const
+    {
+    // Our volume level scale is 0...10, media server's can be anything. 
+    // This scales the volume to correct level.
+    return ( iCurrent->MaxVolume() * aVolume ) / 
+        ( KPhoneInbandVolumeMax - KPhoneInbandVolumeMin );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEAudioInbandTonePlayer::UpdateTonePlayerVolume
+// -----------------------------------------------------------------------------
+//
+void CPEAudioInbandTonePlayer::UpdateTonePlayerVolume()
+    {
+    TInt volume( KPhoneInbandVolumeMin );
+    iOwner.GetAudioVolumeSync( volume );
+    SetVolume( volume );
+    }
+
+// End of File