--- a/phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp Fri May 14 15:51:57 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,610 +0,0 @@
-/*
-* 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