--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -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