mmserv/tms/tmscallserver/src/tmsdtmftoneplayer.cpp
changeset 14 80975da52420
child 20 b67dd1fc57c5
equal deleted inserted replaced
12:5a06f39ad45b 14:80975da52420
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description: Telephony Multimedia Service
       
    15  *
       
    16  */
       
    17 
       
    18 // INCLUDE FILES
       
    19 #include <mdaaudiotoneplayer.h>
       
    20 #include <AudioPreference.h>
       
    21 #include "tmsutility.h"
       
    22 #include "tmsdtmftoneplayer.h"
       
    23 
       
    24 // CONSTANTS
       
    25 const gint KBufSize = 10;
       
    26 const gint KMaxVolumeLevel = 10;
       
    27 
       
    28 _LIT(KPhoneTone_Asterisk, "*+w");
       
    29 
       
    30 //from voip
       
    31 const guint KDTMFToneLengthOn = 250000;
       
    32 const guint KDTMFToneLengthOff = 50000;
       
    33 const guint KDTMFToneLengthPause = 2500000;
       
    34 
       
    35 using namespace TMS;
       
    36 
       
    37 // -----------------------------------------------------------------------------
       
    38 // TMSAudioDtmfTonePlayer::NewL
       
    39 // Two-phased constructor.
       
    40 // -----------------------------------------------------------------------------
       
    41 //
       
    42 TMSAudioDtmfTonePlayer* TMSAudioDtmfTonePlayer::NewL(
       
    43         TMSDTMFTonePlayerObserver& obsrvr, guint aAudioPreference,
       
    44         guint aAudioPriority)
       
    45     {
       
    46     //iObserver = obsrvr;
       
    47     TMSAudioDtmfTonePlayer* self = new (ELeave) TMSAudioDtmfTonePlayer(
       
    48             obsrvr, aAudioPreference, aAudioPriority);
       
    49 
       
    50     CleanupStack::PushL(self);
       
    51     self->ConstructL();
       
    52     CleanupStack::Pop(self);
       
    53     return self;
       
    54     }
       
    55 
       
    56 //Destructor
       
    57 TMSAudioDtmfTonePlayer::~TMSAudioDtmfTonePlayer()
       
    58     {
       
    59     TRACE_PRN_FN_ENT;
       
    60     Cancel();
       
    61     delete iDTMFPlayer;
       
    62     TRACE_PRN_FN_EXT;
       
    63     }
       
    64 
       
    65 // -----------------------------------------------------------------------------
       
    66 // TMSAudioDtmfTonePlayer::TMSAudioDtmfTonePlayer
       
    67 // C++ default constructor can NOT contain any code, that
       
    68 // might leave.
       
    69 // -----------------------------------------------------------------------------
       
    70 //
       
    71 TMSAudioDtmfTonePlayer::TMSAudioDtmfTonePlayer(
       
    72         TMSDTMFTonePlayerObserver& obsrvr, guint aAudioPreference,
       
    73         guint aAudioPriority) :
       
    74     iObserver(obsrvr),
       
    75     iPref(aAudioPreference),
       
    76     iPrior(aAudioPriority)
       
    77     {
       
    78     TRACE_PRN_FN_ENT;
       
    79     TRACE_PRN_FN_EXT;
       
    80     }
       
    81 
       
    82 // -----------------------------------------------------------------------------
       
    83 // TMSAudioDtmfTonePlayer::ConstructL
       
    84 // Symbian 2nd phase constructor can leave.
       
    85 // -----------------------------------------------------------------------------
       
    86 //
       
    87 void TMSAudioDtmfTonePlayer::ConstructL()
       
    88     {
       
    89     TRACE_PRN_FN_ENT;
       
    90 
       
    91     TMMFPrioritySettings dtmfClickPlayerPrioritySettings;
       
    92     iDTMFPlayer = CMMFDevSound::NewL();
       
    93     iDTMFPlayer->InitializeL(*this, EMMFStateTonePlaying);
       
    94 
       
    95     TRACE_PRN_FN_EXT;
       
    96     }
       
    97 
       
    98 // -----------------------------------------------------------------------------
       
    99 // TMSAudioDtmfTonePlayer::SetVolume
       
   100 // Sets the volume level that is used when the dtmf tone is played.
       
   101 // -----------------------------------------------------------------------------
       
   102 //
       
   103 void TMSAudioDtmfTonePlayer::SetVolume(gint aVolume)
       
   104     {
       
   105     TRACE_PRN_FN_ENT;
       
   106     gint vol = ConvertVolume(aVolume);
       
   107 
       
   108     if (vol != iVolume)
       
   109         {
       
   110         iVolume = vol;
       
   111         iDTMFPlayer->SetVolume(iVolume);
       
   112         }
       
   113     TRACE_PRN_FN_EXT;
       
   114     }
       
   115 
       
   116 // -----------------------------------------------------------------------------
       
   117 // TMSAudioDtmfTonePlayer::PlayDtmfTone
       
   118 // Searches the given DTMF tone from iToneArray and calls PlayCurrentTone
       
   119 // member function.
       
   120 // -----------------------------------------------------------------------------
       
   121 //
       
   122 void TMSAudioDtmfTonePlayer::PlayDtmfTone(TDes& aTone)
       
   123     {
       
   124     TRACE_PRN_FN_ENT;
       
   125     Cancel();
       
   126 
       
   127     // DTMF signalling.
       
   128     if (iDTMFPlayer)
       
   129         {
       
   130         TBuf<KBufSize> key;
       
   131         key.Append(aTone);
       
   132         TRAP_IGNORE(iDTMFPlayer->PlayDTMFStringL(aTone));
       
   133         }
       
   134     TRACE_PRN_FN_EXT;
       
   135     }
       
   136 
       
   137 // -----------------------------------------------------------------------------
       
   138 // TMSAudioDtmfTonePlayer::Cancel
       
   139 // Cancels the currently playing tone.
       
   140 // -----------------------------------------------------------------------------
       
   141 //
       
   142 void TMSAudioDtmfTonePlayer::Cancel()
       
   143     {
       
   144     TRACE_PRN_FN_ENT;
       
   145     iDTMFPlayer->Stop();
       
   146     TRACE_PRN_FN_EXT;
       
   147     }
       
   148 
       
   149 // -----------------------------------------------------------------------------
       
   150 // TMSAudioDtmfTonePlayer::Normalize
       
   151 // Lowers case for chars and if its '*','+', or 'w' sets it to asterisk
       
   152 // char ('*').
       
   153 // -----------------------------------------------------------------------------
       
   154 //
       
   155 void TMSAudioDtmfTonePlayer::Normalize(TChar& aTone)
       
   156     {
       
   157     TRACE_PRN_FN_ENT;
       
   158     aTone.LowerCase();
       
   159 
       
   160     TPtrC ast(KPhoneTone_Asterisk);
       
   161 
       
   162     if (ast.Locate(aTone) != KErrNotFound)
       
   163         {
       
   164         aTone = ast[0];
       
   165         }
       
   166     TRACE_PRN_FN_EXT;
       
   167     }
       
   168 
       
   169 // -----------------------------------------------------------------------------
       
   170 // TMSAudioDtmfTonePlayer::InitializeComplete
       
   171 // -----------------------------------------------------------------------------
       
   172 //
       
   173 void TMSAudioDtmfTonePlayer::InitializeComplete(TInt aError)
       
   174     {
       
   175     TRACE_PRN_FN_ENT;
       
   176 
       
   177     if (aError == KErrNone)
       
   178         {
       
   179         TMMFPrioritySettings dtmfPlayerSettings;
       
   180         dtmfPlayerSettings.iPref = (TMdaPriorityPreference) iPref;
       
   181         dtmfPlayerSettings.iPriority = iPrior;
       
   182         dtmfPlayerSettings.iState = EMMFStateTonePlaying;
       
   183         iDTMFPlayer->SetPrioritySettings(dtmfPlayerSettings);
       
   184 
       
   185         TTimeIntervalMicroSeconds32 length(KDTMFToneLengthOn);
       
   186         TTimeIntervalMicroSeconds32 pause(KDTMFToneLengthOff);
       
   187         TTimeIntervalMicroSeconds32 zero(KDTMFToneLengthPause);
       
   188         iDTMFPlayer->SetDTMFLengths(length, pause, zero);
       
   189         iDTMFPlayer->SetVolume(iDTMFPlayer->MaxVolume());
       
   190         }
       
   191 
       
   192     iObserver.DTMFInitCompleted(aError);
       
   193 
       
   194     TRACE_PRN_FN_EXT;
       
   195     }
       
   196 
       
   197 // -----------------------------------------------------------------------------
       
   198 // TMSAudioDtmfTonePlayer::ToneFinished
       
   199 // -----------------------------------------------------------------------------
       
   200 //
       
   201 void TMSAudioDtmfTonePlayer::ToneFinished(TInt aError)
       
   202     {
       
   203     TRACE_PRN_FN_ENT;
       
   204     iObserver.DTMFToneFinished(aError);
       
   205     TRACE_PRN_FN_EXT;
       
   206     }
       
   207 
       
   208 // -----------------------------------------------------------------------------
       
   209 // TMSAudioDtmfTonePlayer::BufferToBeFilled
       
   210 // -----------------------------------------------------------------------------
       
   211 //
       
   212 void TMSAudioDtmfTonePlayer::BufferToBeFilled(CMMFBuffer* /*aBuffer*/)
       
   213     {
       
   214     TRACE_PRN_FN_ENT;
       
   215     TRACE_PRN_FN_EXT;
       
   216     }
       
   217 
       
   218 // -----------------------------------------------------------------------------
       
   219 // TMSAudioDtmfTonePlayer::PlayError
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void TMSAudioDtmfTonePlayer::PlayError(TInt /*aError*/)
       
   223     {
       
   224     TRACE_PRN_FN_ENT;
       
   225     TRACE_PRN_FN_EXT;
       
   226     }
       
   227 
       
   228 // -----------------------------------------------------------------------------
       
   229 // TMSAudioDtmfTonePlayer::BufferToBeEmptied
       
   230 // -----------------------------------------------------------------------------
       
   231 //
       
   232 void TMSAudioDtmfTonePlayer::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/)
       
   233     {
       
   234     TRACE_PRN_FN_ENT;
       
   235     TRACE_PRN_FN_EXT;
       
   236     }
       
   237 
       
   238 // -----------------------------------------------------------------------------
       
   239 // TMSAudioDtmfTonePlayer::RecordError
       
   240 // -----------------------------------------------------------------------------
       
   241 //
       
   242 void TMSAudioDtmfTonePlayer::RecordError(TInt /*aError*/)
       
   243     {
       
   244     TRACE_PRN_FN_ENT;
       
   245     TRACE_PRN_FN_EXT;
       
   246     }
       
   247 
       
   248 // -----------------------------------------------------------------------------
       
   249 // TMSAudioDtmfTonePlayer::ConvertError
       
   250 // -----------------------------------------------------------------------------
       
   251 //
       
   252 void TMSAudioDtmfTonePlayer::ConvertError(TInt /*aError*/)
       
   253     {
       
   254     TRACE_PRN_FN_ENT;
       
   255     TRACE_PRN_FN_EXT;
       
   256     }
       
   257 
       
   258 // -----------------------------------------------------------------------------
       
   259 // TMSAudioDtmfTonePlayer::DeviceMessage
       
   260 // -----------------------------------------------------------------------------
       
   261 //
       
   262 void TMSAudioDtmfTonePlayer::DeviceMessage(TUid /*aMessageType*/,
       
   263         const TDesC8& /*aMsg*/)
       
   264     {
       
   265     TRACE_PRN_FN_ENT;
       
   266     TRACE_PRN_FN_EXT;
       
   267     }
       
   268 
       
   269 // -----------------------------------------------------------------------------
       
   270 // TMSAudioDtmfTonePlayer::ConvertVolume
       
   271 // -----------------------------------------------------------------------------
       
   272 //
       
   273 gint TMSAudioDtmfTonePlayer::ConvertVolume(gint aVolume)
       
   274     {
       
   275     TRACE_PRN_FN_ENT;
       
   276     gint result = iDTMFPlayer->MaxVolume() * aVolume / KMaxVolumeLevel;
       
   277     TRACE_PRN_FN_EXT;
       
   278     return result;
       
   279     }
       
   280 
       
   281 //  End of File