diff -r 5a06f39ad45b -r 80975da52420 mmserv/tms/tmscallserver/src/tmsdtmftoneplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmsdtmftoneplayer.cpp Mon May 03 12:59:52 2010 +0300 @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2009 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: Telephony Multimedia Service + * + */ + +// INCLUDE FILES +#include +#include +#include "tmsutility.h" +#include "tmsdtmftoneplayer.h" + +// CONSTANTS +const gint KBufSize = 10; +const gint KMaxVolumeLevel = 10; + +_LIT(KPhoneTone_Asterisk, "*+w"); + +//from voip +const guint KDTMFToneLengthOn = 250000; +const guint KDTMFToneLengthOff = 50000; +const guint KDTMFToneLengthPause = 2500000; + +using namespace TMS; + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +TMSAudioDtmfTonePlayer* TMSAudioDtmfTonePlayer::NewL( + TMSDTMFTonePlayerObserver& obsrvr, guint aAudioPreference, + guint aAudioPriority) + { + //iObserver = obsrvr; + TMSAudioDtmfTonePlayer* self = new (ELeave) TMSAudioDtmfTonePlayer( + obsrvr, aAudioPreference, aAudioPriority); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +//Destructor +TMSAudioDtmfTonePlayer::~TMSAudioDtmfTonePlayer() + { + TRACE_PRN_FN_ENT; + Cancel(); + delete iDTMFPlayer; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::TMSAudioDtmfTonePlayer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +TMSAudioDtmfTonePlayer::TMSAudioDtmfTonePlayer( + TMSDTMFTonePlayerObserver& obsrvr, guint aAudioPreference, + guint aAudioPriority) : + iObserver(obsrvr), + iPref(aAudioPreference), + iPrior(aAudioPriority) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::ConstructL() + { + TRACE_PRN_FN_ENT; + + TMMFPrioritySettings dtmfClickPlayerPrioritySettings; + iDTMFPlayer = CMMFDevSound::NewL(); + iDTMFPlayer->InitializeL(*this, EMMFStateTonePlaying); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::SetVolume +// Sets the volume level that is used when the dtmf tone is played. +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::SetVolume(gint aVolume) + { + TRACE_PRN_FN_ENT; + gint vol = ConvertVolume(aVolume); + + if (vol != iVolume) + { + iVolume = vol; + iDTMFPlayer->SetVolume(iVolume); + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::PlayDtmfTone +// Searches the given DTMF tone from iToneArray and calls PlayCurrentTone +// member function. +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::PlayDtmfTone(TDes& aTone) + { + TRACE_PRN_FN_ENT; + Cancel(); + + // DTMF signalling. + if (iDTMFPlayer) + { + TBuf key; + key.Append(aTone); + TRAP_IGNORE(iDTMFPlayer->PlayDTMFStringL(aTone)); + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::Cancel +// Cancels the currently playing tone. +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::Cancel() + { + TRACE_PRN_FN_ENT; + iDTMFPlayer->Stop(); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::Normalize +// Lowers case for chars and if its '*','+', or 'w' sets it to asterisk +// char ('*'). +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::Normalize(TChar& aTone) + { + TRACE_PRN_FN_ENT; + aTone.LowerCase(); + + TPtrC ast(KPhoneTone_Asterisk); + + if (ast.Locate(aTone) != KErrNotFound) + { + aTone = ast[0]; + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::InitializeComplete +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::InitializeComplete(TInt aError) + { + TRACE_PRN_FN_ENT; + + if (aError == KErrNone) + { + TMMFPrioritySettings dtmfPlayerSettings; + dtmfPlayerSettings.iPref = (TMdaPriorityPreference) iPref; + dtmfPlayerSettings.iPriority = iPrior; + dtmfPlayerSettings.iState = EMMFStateTonePlaying; + iDTMFPlayer->SetPrioritySettings(dtmfPlayerSettings); + + TTimeIntervalMicroSeconds32 length(KDTMFToneLengthOn); + TTimeIntervalMicroSeconds32 pause(KDTMFToneLengthOff); + TTimeIntervalMicroSeconds32 zero(KDTMFToneLengthPause); + iDTMFPlayer->SetDTMFLengths(length, pause, zero); + iDTMFPlayer->SetVolume(iDTMFPlayer->MaxVolume()); + } + + iObserver.DTMFInitCompleted(aError); + + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::ToneFinished +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::ToneFinished(TInt aError) + { + TRACE_PRN_FN_ENT; + iObserver.DTMFToneFinished(aError); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::BufferToBeFilled +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::BufferToBeFilled(CMMFBuffer* /*aBuffer*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::PlayError +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::PlayError(TInt /*aError*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::BufferToBeEmptied +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::RecordError +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::RecordError(TInt /*aError*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::ConvertError +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::ConvertError(TInt /*aError*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::DeviceMessage +// ----------------------------------------------------------------------------- +// +void TMSAudioDtmfTonePlayer::DeviceMessage(TUid /*aMessageType*/, + const TDesC8& /*aMsg*/) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSAudioDtmfTonePlayer::ConvertVolume +// ----------------------------------------------------------------------------- +// +gint TMSAudioDtmfTonePlayer::ConvertVolume(gint aVolume) + { + TRACE_PRN_FN_ENT; + gint result = iDTMFPlayer->MaxVolume() * aVolume / KMaxVolumeLevel; + TRACE_PRN_FN_EXT; + return result; + } + +// End of File