--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioToneTestModule/src/TonePlayer.cpp Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,505 @@
+/*
+* Copyright (c) 2002 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: MmfTsTone class member functions
+*
+*/
+
+
+#include "TonePlayer.h"
+#include "TemplateParameters.h"
+#include "DTMFParameters.h"
+
+
+
+const TInt CTonePlayer::KPlayerActionPlay = 1;
+const TInt CTonePlayer::KPlayerActionReportVolume = 2;
+const TInt CTonePlayer::KPlayerActionStop = 3;
+const TInt CTonePlayer::KPlayerActionCancelPrepare = 4;
+
+const TInt CTonePlayer::KPlayerActionPrepareFileSequence = 5;
+const TInt CTonePlayer::KPlayerActionPrepareFixedSequence = 6;
+const TInt CTonePlayer::KPlayerActionPrepareTone = 7;
+const TInt CTonePlayer::KPlayerActionPrepareDualTone = 8;
+const TInt CTonePlayer::KPlayerActionPrepareDTMFSequence = 9;
+const TInt CTonePlayer::KPlayerActionPrepareDesSequence = 10;
+const TInt CTonePlayer::KPlayerActionChangeVolumeToMax = 11;
+const TInt CTonePlayer::KPlayerActionChangeVolumeToAvg = 12;
+const TInt CTonePlayer::KPlayerActionChangeVolumeToZero = 13;
+// Frequency and duration of the tone to be played
+/*
+CTonePlayer::CTonePlayer(CLogger *aLogger)
+ : iSupervisor(0), iId(0), iFinalError(KErrNone), iLogger(aLogger),
+ iLastPrepareError(KErrNone), iPrepareCalledCounter(0),
+ iExitEventTarget(0), iExitEventParameters(0)
+ //, iLastPlayTime(0), iLastStopTime(0)
+ {
+ iFreeToPlay=EFalse;
+ }
+*/
+
+/*
+CTonePlayer* CTonePlayer::NewL(CLogger *aLogger, TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration, TBool aPlayInmediately)
+ {
+ CTonePlayer* self = NewLC(aLogger, aFrequency, aDuration, aPlayInmediately);
+ CleanupStack::Pop(self);
+ return self;
+ }
+*/
+
+/*
+CTonePlayer* CTonePlayer::NewLC(CLogger *aLogger, TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration, TBool aPlayInmediately)
+ {
+ CTonePlayer* self = new(ELeave)CTonePlayer(aLogger);
+ CleanupStack::PushL(self);
+ self->ConstructL(aFrequency, aDuration, aPlayInmediately);
+ return self;
+ }
+*/
+
+void CTonePlayer::ConstructL(TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration, TBool aPlayInmediately)
+ {
+ iFrequency=aFrequency;
+ iDuration=aDuration;
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility = CMdaAudioToneUtility::NewL(*this);
+
+
+
+
+
+ // Configure the audio tone utility to play a single tone
+ if (iMdaAudioToneUtility)
+ {
+ iMdaAudioToneUtility->PrepareToPlayTone(iFrequency, TTimeIntervalMicroSeconds(iDuration));
+
+ // const TUid KUidBassBoostEffect = {0x10203827};
+ // iMdaAudioToneUtility->CustomInterface(KUidBassBoostEffect);
+ }
+ else
+ { //console->Printf(KNotPlayed);
+ }
+ ///console->Printf(KPlayed);
+ }
+
+void CTonePlayer::ConstructL()
+ {
+ iFrequency=0;
+ iDuration=0;
+ iMdaAudioToneUtility = CMdaAudioToneUtility::NewL(*this);
+ }
+
+/*
+CTonePlayer* CTonePlayer::NewL(CLogger *aLogger)
+ {
+ CTonePlayer *_self = NewLC(aLogger);
+ CleanupStack::Pop(_self);
+ return _self;
+ }
+*/
+/*
+CTonePlayer* CTonePlayer::NewLC(CLogger *aLogger)
+ {
+ CTonePlayer *_self = new(ELeave)CTonePlayer(aLogger);
+ CleanupStack::PushL(_self);
+ _self->ConstructL();
+ return _self;
+ }
+*/
+
+// ///////////////////////////////////////////////////
+CTonePlayer::CTonePlayer(COutputPrinter *aOutputPrinter)
+ : iSupervisor(0), iId(0), iFinalError(KErrNone),
+ iLastPrepareError(KErrNone), iPrepareCalledCounter(0),
+ iExitEventTarget(0), iExitEventParameters(0), iOutputPrinter(aOutputPrinter)
+ //, iLastPlayTime(0), iLastStopTime(0)
+ {
+ iFreeToPlay=EFalse;
+ }
+
+CTonePlayer* CTonePlayer::NewL(COutputPrinter *aOutputPrinter, TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration, TBool aPlayInmediately)
+ {
+ CTonePlayer* self = NewLC(aOutputPrinter, aFrequency, aDuration, aPlayInmediately);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CTonePlayer* CTonePlayer::NewLC(COutputPrinter *aOutputPrinter, TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration, TBool aPlayInmediately)
+ {
+ CTonePlayer* self = new(ELeave)CTonePlayer(aOutputPrinter);
+ CleanupStack::PushL(self);
+ self->ConstructL(aFrequency, aDuration, aPlayInmediately);
+ return self;
+ }
+
+CTonePlayer* CTonePlayer::NewL(COutputPrinter *aOutputPrinter)
+ {
+ CTonePlayer *_self = NewLC(aOutputPrinter);
+ CleanupStack::Pop(_self);
+ return _self;
+ }
+CTonePlayer* CTonePlayer::NewLC(COutputPrinter *aOutputPrinter)
+ {
+ CTonePlayer *_self = new(ELeave)CTonePlayer(aOutputPrinter);
+ CleanupStack::PushL(_self);
+ _self->ConstructL();
+ return _self;
+ }
+
+// ///////////////////////////////////////////////////
+CTonePlayer::~CTonePlayer()
+ {
+ delete iMdaAudioToneUtility;
+ iMdaAudioToneUtility = NULL;
+ }
+
+void CTonePlayer::CancelPrepare()
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::CancelPrepare()"), iId);
+ iMdaAudioToneUtility->CancelPrepare();
+ }
+
+TBool CTonePlayer::Play()
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::Play()"), iId);
+ if(iFreeToPlay)
+ {
+ iFreeToPlay = EFalse;
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::Play(), Starting playback"), iId);
+ iLastPlayTime.HomeTime();
+ iLastStopTime.HomeTime();
+ iMdaAudioToneUtility->Play();
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+void CTonePlayer::Stop()
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::Stop()"), iId);
+ iMdaAudioToneUtility->CancelPlay();
+ iLastStopTime.HomeTime();
+ Exit(KErrNone);
+ }
+
+void CTonePlayer::SetVolumeRamp(TTimeIntervalMicroSeconds aRamp) { iMdaAudioToneUtility->SetVolumeRamp(aRamp); }
+
+void CTonePlayer::SetVolume(TInt aVolume) { iOutputPrinter->Printf(_L("%d) CTonePlayer::SetVolume()"), iId);
+iMdaAudioToneUtility->SetVolume(aVolume); }
+
+TInt CTonePlayer::GetVolume() { return iMdaAudioToneUtility->Volume(); }
+
+TInt CTonePlayer::GetMaxVolume() { return iMdaAudioToneUtility->MaxVolume(); }
+
+void CTonePlayer::SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds &aTrailingSilence)
+ {
+ iMdaAudioToneUtility->SetRepeats(aRepeatNumberOfTimes,aTrailingSilence);
+ }
+
+TInt CTonePlayer::GetFixedSequenceCount()
+ {
+ TInt Sequences = iMdaAudioToneUtility->FixedSequenceCount();
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::GetFixedSequenceCount(), Number of fixed sequences: (%d)") , iId, Sequences );
+ return Sequences;
+ }
+
+
+
+const TDesC &CTonePlayer::GetFixedSequenceName(TInt aSequenceNumber)
+ {
+ const TDesC &Name = iMdaAudioToneUtility->FixedSequenceName(aSequenceNumber);
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::GetFixedSequenceName(%d), result: is %S") , iId, aSequenceNumber , &Name );
+ return Name;
+ }
+
+void CTonePlayer::PrepareTone(TInt aFreq, const TTimeIntervalMicroSeconds &aToneDuration, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareTone(%d, %d, %d)") , iId, aFreq, aToneDuration, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayTone(aFreq, aToneDuration);
+ }
+
+void CTonePlayer::PrepareFixedSequence(TInt aSequenceNumber, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareFixedSequence(%d, %d)") , iId, aSequenceNumber, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayFixedSequence(aSequenceNumber);
+ }
+
+void CTonePlayer::PrepareFixedSequenceCustomInterface(TInt aSequenceNumber, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareFixedSequenceCustomInterface(%d, %d)") , iId, aSequenceNumber, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+
+
+ const TUid KUidBassBoostEffect = {0x10203827};
+ iMdaAudioToneUtility->CustomInterface(KUidBassBoostEffect);
+
+ iMdaAudioToneUtility->PrepareToPlayFixedSequence(aSequenceNumber);
+ }
+
+void CTonePlayer::PrepareFileSequence(const TDesC &aFileName , TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareFileSequence(%S, %d)") , iId, &aFileName, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayFileSequence(aFileName);
+ //iMdaAudioToneUtility->PrepareToPlayDTMFString(aFileName);
+ }
+
+
+void CTonePlayer::PrepareRFileSequence(const TDesC &aFileName, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareRFileSequence(%S, %d)") , iId, &aFileName, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+
+ RFs RFsPtr;
+ RFile rfile;
+
+ if( RFsPtr.Connect() == KErrNone )
+ {
+ if( rfile.Open( RFsPtr, aFileName, EFileRead ) == KErrNone )
+ {
+
+ iMdaAudioToneUtility->PrepareToPlayFileSequence(rfile);
+ }
+ }
+
+ rfile.Close();
+ RFsPtr.Close();
+
+ //iMdaAudioToneUtility->PrepareToPlayDTMFString(aFileName);
+ }
+
+
+void CTonePlayer::PrepareDTMFSequence(const TDesC &aSequence, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareDTMFSequence(%S, %d)") , iId, &aSequence, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayDTMFString(aSequence);
+ }
+
+void CTonePlayer::PrepareDesSequence(const TDesC8 &aSequence, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareDesSequence(sequence, %d)") , iId, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayDesSequence(aSequence);
+ }
+
+void CTonePlayer::PrepareDualTone(TInt aFreq1, TInt aFreq2, const TTimeIntervalMicroSeconds &aToneDuration, TBool aPlayInmediately)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::PrepareDualTone(%d, %d, %d, %d)") , iId, aFreq1, aFreq2, aToneDuration, aPlayInmediately);
+ iPlayInmediately=aPlayInmediately;
+ iMdaAudioToneUtility->PrepareToPlayDualTone(aFreq1, aFreq2, aToneDuration);
+ }
+
+void CTonePlayer::SetPriority(TInt aPriority, TMdaPriorityPreference aPref)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::SetPriority(%d, %d)") , iId, aPriority, aPref);
+ iMdaAudioToneUtility->SetPriority(aPriority, aPref);
+ }
+
+void CTonePlayer::SetId(TInt aId) { iId = aId; }
+
+TInt CTonePlayer::GetId() { return iId; }
+
+TInt CTonePlayer::GetFinalError() { return iFinalError; }
+
+TInt CTonePlayer::GetLastPrepareCompleteError() {return iLastPrepareError; }
+
+TInt CTonePlayer::GetPrepareCompleteCallbackCount() {return iPrepareCalledCounter;}
+
+void CTonePlayer::SetSupervisor(TObjectCountDown *aCounter)
+ {
+ iSupervisor = aCounter;
+ iSupervisor->NotifyCreation();
+ }
+
+void CTonePlayer::SetExitCompleteTarget(MEventTarget *aTarget, CParameters *aParameters)
+ {
+ iExitEventTarget = aTarget;
+ iExitEventParameters = aParameters;
+ }
+
+TTimeIntervalMicroSeconds CTonePlayer::GetPlayDuration() { return iLastStopTime.MicroSecondsFrom(iLastPlayTime); }
+
+TTime CTonePlayer::GetPlayStartTime() { return iLastPlayTime; }
+
+TTime CTonePlayer::GetPlayStopTime() { return iLastStopTime; }
+
+TInt CTonePlayer::GetBalanceL()
+ {
+ TInt retVal = iMdaAudioToneUtility->GetBalanceL();
+ return retVal;
+ }
+
+void CTonePlayer::SetBalanceL(TInt aBalance)
+ {
+ iMdaAudioToneUtility->SetBalanceL(aBalance);
+ }
+
+void CTonePlayer::SetDTMFLengths(TTimeIntervalMicroSeconds32 iToneOnLength, TTimeIntervalMicroSeconds32 iToneOffLength, TTimeIntervalMicroSeconds32 iPauseLength)
+ {
+ iMdaAudioToneUtility->SetDTMFLengths(iToneOnLength, iToneOffLength, iPauseLength);
+ }
+
+void CTonePlayer::Exit(TInt aExitCode)
+ {
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::Exit(%d)"), iId, aExitCode);
+ iFinalError = aExitCode;
+ if (iSupervisor)
+ {
+ iSupervisor->NotifyDestruction();
+ iSupervisor=0;
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ if (iExitEventTarget && iExitEventParameters)
+ {
+ iExitEventTarget->ExecuteL(iExitEventParameters) ;
+ }
+ }
+
+
+TInt CTonePlayer::State()
+ {
+ return iMdaAudioToneUtility->State();
+ }
+
+// from MMdaAudioToneObserver
+void CTonePlayer::MatoPrepareComplete(TInt aError)
+ {
+ iLastPrepareError=aError;
+ iPrepareCalledCounter++;
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::MatoPrepareComplete, error (%d)"), iId, aError);
+ if (aError)
+ {
+ Exit(aError);
+ }
+ else
+ {
+ iFreeToPlay = ETrue;
+ if (iPlayInmediately)
+ {
+ Play();
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+ iFinalError=aError;
+ }
+
+// from MMdaAudioToneObserver
+void CTonePlayer::MatoPlayComplete(TInt aError)
+ {
+ iLastStopTime.HomeTime();
+ iOutputPrinter->Printf(_L("%d) CTonePlayer::MatoPlayComplete, error (%d)"), iId, aError);
+ if (aError == KErrNotSupported)
+ {
+ iFinalError = KErrNone;
+ aError = KErrNone;
+ }
+ else
+ {
+ iFinalError=aError;
+ }
+ iFreeToPlay = ETrue;
+ Exit(aError);
+ }
+
+// from MEventTarget
+TInt CTonePlayer::ExecuteL(CParameters *aParams)
+ {
+ switch (aParams->iAction)
+ {
+ case KPlayerActionPlay:
+ Play();
+ break;
+ case KPlayerActionReportVolume:
+ iOutputPrinter->Printf(_L("%d) Retrieving volume: (%d)") , iId, GetVolume());
+ return ETrue;
+ break;
+ case KPlayerActionStop:
+ Stop();
+ break;
+ case KPlayerActionCancelPrepare:
+ CancelPrepare();
+ break;
+ case KPlayerActionPrepareFileSequence:
+ {
+ CTemplateParameters<TFileName> *fn=static_cast< CTemplateParameters<TFileName>* >(aParams);
+ PrepareFileSequence(fn->GetData());
+ //(*fn).GetData();
+ break;
+ }
+
+ case KPlayerActionPrepareFixedSequence:
+ {
+ CTemplateParameters<TInt> *fs=static_cast< CTemplateParameters<TInt>* >(aParams);
+ PrepareFixedSequence(fs->GetData());
+ break;
+ }
+ case KPlayerActionPrepareTone:
+ {
+ CTemplateParameters<TFixedArray<TInt64, 2> > *ToneData = static_cast< CTemplateParameters<TFixedArray<TInt64, 2> >* >(aParams);
+ TFixedArray<TInt64, 2> params = ToneData->GetData();
+ //PrepareTone( params[0].GetTInt() , params[1]);
+ PrepareTone( I64INT(params[0]), params[1]);
+ break;
+ }
+ case KPlayerActionPrepareDualTone:
+ {
+ CTemplateParameters<TFixedArray<TInt64, 4> > *ToneData = static_cast< CTemplateParameters<TFixedArray<TInt64, 4> >* >(aParams);
+ TFixedArray<TInt64, 4> params = ToneData->GetData();
+
+ PrepareDualTone( I64INT(params[0]), I64INT(params[1]), params[2],params[3]);
+ break;
+ }
+ case KPlayerActionPrepareDTMFSequence:
+ {
+ //CTemplateParameters<TBufC<50> > *ToneData = static_cast< CTemplateParameters<TBufC<50> >* >(aParams);
+ CDTMFParameters *params = static_cast<CDTMFParameters*>(aParams);
+
+ PrepareDTMFSequence( *(params->GetDTMFString()) );
+ SetDTMFLengths(params->GetToneDuration(), params->GetToneOffDuration(), params->GetPauseDuration() );
+ break;
+ }
+ case KPlayerActionPrepareDesSequence:
+ CTemplateParameters<HBufC8*> *params =
+ static_cast<CTemplateParameters<HBufC8*> *> (aParams);
+ PrepareDesSequence(*(params->GetData()));
+ break;
+ case KPlayerActionChangeVolumeToMax:
+ {
+ SetVolume( GetMaxVolume());
+ break;
+ }
+ case KPlayerActionChangeVolumeToAvg:
+ {
+ SetVolume(GetMaxVolume() / 2);
+ break;
+ }
+ case KPlayerActionChangeVolumeToZero:
+ {
+ SetVolume(0);
+ break;
+ }
+ }
+ return EFalse;
+ }