mmserv/tms/tmsserver/src/tmsrtplayer.cpp
changeset 12 5a06f39ad45b
child 20 b67dd1fc57c5
equal deleted inserted replaced
0:71ca22bcf22a 12:5a06f39ad45b
       
     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 <AudioPreference.h>
       
    20 #include <MProEngTones.h>
       
    21 #include <MProEngToneSettings.h>
       
    22 #include <ProEngFactory.h>
       
    23 #include "tmsshared.h"
       
    24 #include "tmsutility.h"
       
    25 #include "tmsrtplayerobsrv.h"
       
    26 #include "tmsrtcontainer.h"
       
    27 #include "tmsrtplayer.h"
       
    28 
       
    29 using namespace TMS;
       
    30 
       
    31 // CONSTANTS
       
    32 const TInt KTMSMaxRingingWaiting = 3000000;
       
    33 const TInt KTMSTtsAscendingStep = 3000000;
       
    34 const TInt KRTDefaultVolume = 2;
       
    35 //const TInt KTtsVolumeBoost = 9;
       
    36 const TInt KTtsVolumeMin = 2;
       
    37 const TInt KTtsVolumeAscendingRepeat = 4;
       
    38 const TInt KPlayerVolumeAscendingRepeat = 3;
       
    39 const TInt KTtsVolumeAscendingDecrease = 2;
       
    40 
       
    41 // Delays between periods of Text-To-Speech playback
       
    42 // {3000000, 4000000} means the following order of playing:
       
    43 // 3 secs tone, then TTS, then 4 secs of tone, then TTS, then tone forever.
       
    44 const TInt KTMSTtsDelays[] = {3000000, 4000000};
       
    45 // Number of elements in KTMSTtsDelays array.
       
    46 const TInt KTMSTtsDelaysCount = sizeof(KTMSTtsDelays) / sizeof (TInt);
       
    47 const TInt Kkilo = 1024;
       
    48 
       
    49 _LIT(KTMSTtsHeader, "(tts)");
       
    50 
       
    51 #ifdef __WINS__
       
    52 //_LIT(KTMSDefaultSoundFile, "z:\\data\\sounds\\digital\\Nokia_tune.aac");
       
    53 _LIT(KTMSDefaultSoundFile, "Z:\\Data\\Sounds\\Digital\\Nokia tune.aac");
       
    54 //_LIT(KTMSDefaultSoundFile, "c:\\data\\sounds\\digital\\test_8khz.wav");
       
    55 _LIT(KTMSNoSoundSequence,  "z:\\data\\sounds\\digital\\clock.aac");
       
    56 //_LIT(KTMSNoSoundSequence, "c:\\data\\sounds\\digital\\test_8khz.wav");
       
    57 _LIT(KTMSBeepSequence,     "z:\\data\\sounds\\digital\\clock.aac");
       
    58 //_LIT(KTMSBeepSequence, "c:\\data\\sounds\\digital\\test_8khz.wav");
       
    59 _LIT(KTMSUnsecureVoIPCall, "z:\\data\\sounds\\digital\\alarm.aac");
       
    60 //_LIT(KTMSUnsecureVoIPCall, "c:\\data\\sounds\\digital\\test_8khz.wav");
       
    61 #else
       
    62 // DO NOT change these sequences!
       
    63 _LIT(KTMSDefaultSoundFile, "\\System\\Sounds\\Simple\\Nokia tune.wav");
       
    64 _LIT8(KTMSBeepSequence, "\x00\x11\x0A\x0A\x08\x73\x0A\x40\x28\x0A\xF7\x05\
       
    65 \xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B");
       
    66 _LIT8(KTMSNoSoundSequence, "\x00\x11\x0A\x05\xFC\x0A\x08\x40\x32\x0A\xF7\
       
    67 \x40\x64\x06\x0B");
       
    68 _LIT8(KTMSUnsecureVoIPCall, "\x00\x11\x0B\x67\x04\x40\x04\x67\x04\x40\x04\
       
    69 \x6C\x04\x40\x04\x6D\x04\x0B");
       
    70 #endif // __WINS__
       
    71 
       
    72 // -----------------------------------------------------------------------------
       
    73 // TMSRingTonePlayer::NewL
       
    74 // -----------------------------------------------------------------------------
       
    75 //
       
    76 TMSRingTonePlayer* TMSRingTonePlayer::NewL(TMSRtPlayerObsrv& aObserver)
       
    77     {
       
    78     TMSRingTonePlayer* self = new (ELeave) TMSRingTonePlayer(aObserver);
       
    79     CleanupStack::PushL(self);
       
    80     self->ConstructL();
       
    81     CleanupStack::Pop(self);
       
    82     return self;
       
    83     }
       
    84 
       
    85 // -----------------------------------------------------------------------------
       
    86 // TMSRingTonePlayer::TMSRingTonePlayer
       
    87 // -----------------------------------------------------------------------------
       
    88 //
       
    89 TMSRingTonePlayer::TMSRingTonePlayer(TMSRtPlayerObsrv& aObserver) :
       
    90     iRtObserver(aObserver)
       
    91     {
       
    92     }
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // TMSRingTonePlayer::ConstructL
       
    96 // -----------------------------------------------------------------------------
       
    97 //
       
    98 void TMSRingTonePlayer::ConstructL()
       
    99     {
       
   100     TRACE_PRN_FN_ENT;
       
   101 
       
   102     for (TInt i = EPlayerFirst; i <= EPlayerLast; i++)
       
   103         {
       
   104         User::LeaveIfError(iAsyncDeletePlayers.Append(NULL));
       
   105         }
       
   106 
       
   107     // Construct timer.
       
   108     iTimer = TMSTimer::NewL();
       
   109     iTtsDelayTimer = TMSTimer::NewL();
       
   110     iAsyncReqAO = TMSAsyncReqAO::NewL(this);
       
   111 
       
   112     // TODO:
       
   113     // Checks if DRM extend security is needed
       
   114     // Check video player configuration.
       
   115 
       
   116     iEngine =  ProEngFactory::NewEngineL();
       
   117 
       
   118     InitRtParamsL(EPlayerBackup);
       
   119     //CreateDefaultRingToneL();
       
   120     CreateBkpRtPlayerL();
       
   121     //GetMaxToneFileSizeL(iToneFileSizeLimitKB);
       
   122 
       
   123     TRACE_PRN_FN_EXT;
       
   124     }
       
   125 
       
   126 // -----------------------------------------------------------------------------
       
   127 // TMSRingTonePlayer::~TMSRingTonePlayer
       
   128 // -----------------------------------------------------------------------------
       
   129 //
       
   130 TMSRingTonePlayer::~TMSRingTonePlayer()
       
   131     {
       
   132     TRACE_PRN_FN_ENT;
       
   133 
       
   134     iAsyncDeletePlayers.ResetAndDestroy();
       
   135     iAsyncDeletePlayers.Close();
       
   136     if (iProfile)
       
   137         {
       
   138         iProfile->Release();
       
   139         }
       
   140     if (iEngine)
       
   141         {
       
   142         iEngine->Release();
       
   143         }
       
   144     RemovePlayers();
       
   145     delete iBackupPlayer;
       
   146     delete iAsyncReqAO;
       
   147     delete iTimer;
       
   148     delete iTtsDelayTimer;
       
   149     delete iRtContainer;
       
   150 
       
   151     TRACE_PRN_FN_EXT;
       
   152     }
       
   153 
       
   154 // -----------------------------------------------------------------------------
       
   155 // TMSRingTonePlayer::InitRtParamsL
       
   156 // -----------------------------------------------------------------------------
       
   157 //
       
   158 void TMSRingTonePlayer::InitRtParamsL(TRtPlayerType aPlayerType)
       
   159     {
       
   160     TRACE_PRN_FN_ENT;
       
   161 
       
   162     iRtParam.iType = aPlayerType;
       
   163     iRtParam.iPriority = KAudioPriorityPhoneCall;
       
   164     iRtParam.iPreference = KAudioPrefIncomingCall;
       
   165     iRtParam.iRingingType = EProfileRingingTypeRinging;
       
   166     iRtParam.iVolume = KRTDefaultVolume;
       
   167     iRtParam.iTextToSay.Set(KNullDesC());
       
   168 
       
   169     if (aPlayerType == EPlayerUnsecureVoIP)
       
   170         {
       
   171         iRtParam.iPriority = KAudioPrioritySpecialInformationTone;
       
   172         iRtParam.iPreference = KAudioPrefSpecialInformation;
       
   173         }
       
   174 
       
   175     TRACE_PRN_FN_EXT;
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // TMSRingTonePlayer::CreateDefaultPlayerL
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 void TMSRingTonePlayer::CreateDefaultRingToneL()
       
   183     {
       
   184     TRACE_PRN_FN_ENT;
       
   185 
       
   186     InitRtParamsL(EPlayerDefault);
       
   187     LoadProfileRingToneL();
       
   188 
       
   189     TRACE_PRN_FN_EXT;
       
   190     }
       
   191 
       
   192 // -----------------------------------------------------------------------------
       
   193 // TMSRingTonePlayer::LoadActiveProfileSettingsL
       
   194 // -----------------------------------------------------------------------------
       
   195 //
       
   196 void TMSRingTonePlayer::LoadActiveProfileSettingsL()
       
   197     {
       
   198     if (!iEngine)
       
   199         {
       
   200         iEngine =  ProEngFactory::NewEngineL();
       
   201         }
       
   202     if (iProfile)
       
   203         {
       
   204         iProfile->Release();
       
   205         iProfile = NULL;
       
   206         }
       
   207     __ASSERT_DEBUG(iEngine, PANIC(TMS_RESULT_UNINITIALIZED_OBJECT));
       
   208 
       
   209     iProfile = iEngine->ActiveProfileL();
       
   210     MProEngToneSettings& settings = iProfile->ToneSettings();
       
   211     iRtParam.iVolume = settings.RingingVolume();
       
   212     iRtParam.iRingingType = settings.RingingType();
       
   213     iRtParam.iCallerText = settings.TextToSpeech();
       
   214     }
       
   215 
       
   216 // -----------------------------------------------------------------------------
       
   217 // TMSRingTonePlayer::LoadProfileRingToneL
       
   218 // -----------------------------------------------------------------------------
       
   219 //
       
   220 void TMSRingTonePlayer::LoadProfileRingToneL()
       
   221     {
       
   222     TRACE_PRN_FN_ENT;
       
   223 
       
   224     LoadActiveProfileSettingsL();
       
   225     __ASSERT_DEBUG(iProfile, PANIC(TMS_RESULT_UNINITIALIZED_OBJECT));
       
   226 
       
   227     MProEngTones& tones = iProfile->ProfileTones();
       
   228     // Get alternate line RT: tones.RingingTone2()
       
   229     // Get default video RT: tones.VideoCallRingingTone()
       
   230 
       
   231     if (!iRtContainer)
       
   232         {
       
   233         iRtContainer = TMSRtContainer::NewL(tones.RingingTone1());
       
   234         }
       
   235     else
       
   236         {
       
   237         if (tones.RingingTone1().CompareF(iRtContainer->FileName()) != KErrNone)
       
   238             {
       
   239             // Profile changed - update RT
       
   240             iRtContainer->SetFileName(tones.RingingTone1());
       
   241             iRtContainer->RefreshMime();
       
   242             }
       
   243         }
       
   244 
       
   245     TRACE_PRN_FN_EXT;
       
   246     }
       
   247 
       
   248 // -----------------------------------------------------------------------------
       
   249 // TMSRingTonePlayer::CreateBkpRtPlayerL
       
   250 // -----------------------------------------------------------------------------
       
   251 //
       
   252 void TMSRingTonePlayer::CreateBkpRtPlayerL()
       
   253     {
       
   254     TRACE_PRN_FN_ENT;
       
   255 
       
   256     delete iBackupPlayer;
       
   257     iBackupPlayer = NULL;
       
   258     TFileName file(KTMSDefaultSoundFile);
       
   259     iBackupPlayer = TMSRtAudioHdlr::NewL(file, KAudioPriorityPhoneCall,
       
   260             KAudioPrefIncomingCall, *this, EPlayerBackup);
       
   261 
       
   262     TRACE_PRN_FN_EXT;
       
   263     }
       
   264 
       
   265 // -----------------------------------------------------------------------------
       
   266 // TMSRingTonePlayer::CreateDefaultRtPlayerL
       
   267 // -----------------------------------------------------------------------------
       
   268 //
       
   269 void TMSRingTonePlayer::CreateDefaultRtPlayerL()
       
   270     {
       
   271     TRACE_PRN_FN_ENT;
       
   272 
       
   273     // Fresh start for the default tone.
       
   274     CreateDefaultRingToneL();
       
   275 
       
   276     delete iDefaultPlayer;
       
   277     iDefaultPlayer = NULL;
       
   278     iDefaultPlayer = TMSRtAudioHdlr::NewL(*iRtContainer,
       
   279             KAudioPriorityPhoneCall, KAudioPrefIncomingCall, *this,
       
   280             EPlayerDefault, EFalse);
       
   281 
       
   282     TRACE_PRN_FN_EXT;
       
   283     }
       
   284 
       
   285 // -----------------------------------------------------------------------------
       
   286 // TMSRingTonePlayer::CreateAudioPlayerL
       
   287 // -----------------------------------------------------------------------------
       
   288 //
       
   289 void TMSRingTonePlayer::CreateAudioPlayerL()
       
   290     {
       
   291     TRACE_PRN_FN_ENT;
       
   292 
       
   293     delete iAudioPlayer;
       
   294     iAudioPlayer = NULL;
       
   295     iAudioPlayer = TMSRtAudioHdlr::NewL(*iRtContainer, iRtParam.iPriority,
       
   296             iRtParam.iPreference, *this, iRtParam.iType,
       
   297             iRtParam.iType == EPlayerDefault ? EFalse : iExtSecNeeded);
       
   298 
       
   299     TRACE_PRN_FN_EXT;
       
   300     }
       
   301 
       
   302 // -----------------------------------------------------------------------------
       
   303 // TMSRingTonePlayer::CreateRingTonePlayerL
       
   304 // -----------------------------------------------------------------------------
       
   305 //
       
   306 void TMSRingTonePlayer::CreateRingTonePlayerL(const TRtPlayerType aPlayer,
       
   307         const TDesC& aFile)
       
   308     {
       
   309     TRACE_PRN_FN_ENT;
       
   310 
       
   311     TInt len = aFile.Length();
       
   312     if (!len || aPlayer == EPlayerDefault)
       
   313         {
       
   314         CreateDefaultRtPlayerL();
       
   315         }
       
   316     else
       
   317         {
       
   318         if (!iRtContainer)
       
   319             {
       
   320             CreateDefaultRingToneL();
       
   321             }
       
   322         if (len && iRtContainer)
       
   323             {
       
   324             iRtContainer->SetFileName(aFile);
       
   325             iRtContainer->RefreshMime();
       
   326             iRtParam.iType = aPlayer;
       
   327             }
       
   328         CreateAudioPlayerL();
       
   329         }
       
   330 
       
   331     TRACE_PRN_FN_EXT;
       
   332     }
       
   333 
       
   334 // -----------------------------------------------------------------------------
       
   335 // TMSRingTonePlayer::CreateSequencePlayerL
       
   336 // -----------------------------------------------------------------------------
       
   337 //
       
   338 void TMSRingTonePlayer::CreateSequencePlayerL(const TRtPlayerType aPlayer)
       
   339     {
       
   340     TRACE_PRN_FN_ENT;
       
   341 
       
   342     switch (aPlayer)
       
   343         {
       
   344         case EPlayerBeepOnce:
       
   345             CreateBeepOncePlayerL();
       
   346             break;
       
   347         case EPlayerSilent:
       
   348             CreateSilentPlayerL();
       
   349             break;
       
   350         case EPlayerUnsecureVoIP:
       
   351             CreateUnsecureVoipPlayerL();
       
   352             break;
       
   353         default:
       
   354             break;
       
   355         }
       
   356 
       
   357     TRACE_PRN_FN_EXT;
       
   358     }
       
   359 
       
   360 // -----------------------------------------------------------------------------
       
   361 // TMSRingTonePlayer::CreateBeepOncePlayerL
       
   362 // -----------------------------------------------------------------------------
       
   363 //
       
   364 void TMSRingTonePlayer::CreateBeepOncePlayerL()
       
   365     {
       
   366     TRACE_PRN_FN_ENT;
       
   367 
       
   368     delete iBeepOncePlayer;
       
   369     iBeepOncePlayer = NULL;
       
   370 
       
   371 #ifdef __WINS__
       
   372     TParse* fp = new (ELeave) TParse();
       
   373     fp->Set(KTMSBeepSequence, NULL, NULL);
       
   374     TFileName fileName(fp->FullName());
       
   375     delete fp;
       
   376     iBeepOncePlayer = TMSRtAudioHdlr::NewL(fileName, iRtParam.iPriority,
       
   377             iRtParam.iPreference, *this, EPlayerBeepOnce);
       
   378 #else
       
   379     iBeepOncePlayer = TMSRtAudioHdlr::NewSeqL(KTMSBeepSequence(),
       
   380             iRtParam.iPriority, iRtParam.iPreference, *this, EPlayerBeepOnce);
       
   381 #endif // __WINS__
       
   382 
       
   383     iRtParam.iType = EPlayerBeepOnce;
       
   384     TRACE_PRN_FN_EXT;
       
   385     }
       
   386 
       
   387 // -----------------------------------------------------------------------------
       
   388 // TMSRingTonePlayer::CreateSilentPlayerL
       
   389 // -----------------------------------------------------------------------------
       
   390 //
       
   391 void TMSRingTonePlayer::CreateSilentPlayerL()
       
   392     {
       
   393     TRACE_PRN_FN_ENT;
       
   394 
       
   395     iRtParam.iVolume = 0;
       
   396     delete iSilentPlayer;
       
   397     iSilentPlayer = NULL;
       
   398 
       
   399 #ifdef __WINS__
       
   400     TParse* fp = new (ELeave) TParse();
       
   401     fp->Set(KTMSNoSoundSequence, NULL, NULL);
       
   402     TFileName fileName(fp->FullName());
       
   403     delete fp;
       
   404     iSilentPlayer = TMSRtAudioHdlr::NewL(fileName, iRtParam.iPriority,
       
   405             iRtParam.iPreference, *this, EPlayerSilent);
       
   406 #else
       
   407     iSilentPlayer = TMSRtAudioHdlr::NewSeqL(KTMSNoSoundSequence(),
       
   408             iRtParam.iPriority, iRtParam.iPreference, *this, EPlayerSilent);
       
   409 #endif // __WINS__
       
   410 
       
   411     iRtParam.iType = EPlayerSilent;
       
   412     TRACE_PRN_FN_EXT;
       
   413     }
       
   414 
       
   415 // -----------------------------------------------------------------------------
       
   416 // TMSRingTonePlayer::CreateUnsecureVoipPlayerL
       
   417 // -----------------------------------------------------------------------------
       
   418 //
       
   419 void TMSRingTonePlayer::CreateUnsecureVoipPlayerL()
       
   420     {
       
   421     TRACE_PRN_FN_ENT;
       
   422 
       
   423     delete iUnsecureVoIPTonePlayer;
       
   424     iUnsecureVoIPTonePlayer = NULL;
       
   425 
       
   426 #ifdef __WINS__
       
   427     TParse* fp = new (ELeave) TParse();
       
   428     fp->Set(KTMSUnsecureVoIPCall, NULL, NULL);
       
   429     TFileName fileName(fp->FullName());
       
   430     delete fp;
       
   431     iUnsecureVoIPTonePlayer = TMSRtAudioHdlr::NewL(fileName,
       
   432             iRtParam.iPriority, iRtParam.iPreference, *this,
       
   433             EPlayerUnsecureVoIP);
       
   434 #else
       
   435     iUnsecureVoIPTonePlayer = TMSRtAudioHdlr::NewSeqL(KTMSUnsecureVoIPCall(),
       
   436             iRtParam.iPriority, iRtParam.iPreference, *this,
       
   437             EPlayerUnsecureVoIP);
       
   438 #endif // __WINS__
       
   439 
       
   440     iRtParam.iType = EPlayerUnsecureVoIP;
       
   441     TRACE_PRN_FN_EXT;
       
   442     }
       
   443 
       
   444 // -----------------------------------------------------------------------------
       
   445 // TMSRingTonePlayer::CreateCustomSequencePlayerL
       
   446 // -----------------------------------------------------------------------------
       
   447 //
       
   448 void TMSRingTonePlayer::CreateCustomSequencePlayerL(const TDesC8&
       
   449 #ifdef __WINS__
       
   450         /*aSequence*/)
       
   451 #else
       
   452         aSequence)
       
   453 #endif
       
   454     {
       
   455     TRACE_PRN_FN_ENT;
       
   456 
       
   457     delete iSequencePlayer;
       
   458     iSequencePlayer = NULL;
       
   459 
       
   460 #ifdef __WINS__
       
   461     TParse* fp = new (ELeave) TParse();
       
   462     fp->Set(KTMSBeepSequence, NULL, NULL);
       
   463     TFileName fileName(fp->FullName());
       
   464     delete fp;
       
   465     iSequencePlayer = TMSRtAudioHdlr::NewL(fileName, iRtParam.iPriority,
       
   466             iRtParam.iPreference, *this, EPlayerSequence);
       
   467 #else
       
   468     iSequencePlayer = TMSRtAudioHdlr::NewSeqL(aSequence, iRtParam.iPriority,
       
   469             iRtParam.iPreference, *this, EPlayerSequence);
       
   470 #endif // __WINS__
       
   471 
       
   472     iRtParam.iType = EPlayerSequence;
       
   473     TRACE_PRN_FN_EXT;
       
   474     }
       
   475 
       
   476 // -----------------------------------------------------------------------------
       
   477 // TMSRingTonePlayer::CreateTTSPlayerL
       
   478 // -----------------------------------------------------------------------------
       
   479 //
       
   480 void TMSRingTonePlayer::CreateTTSPlayerL(const TDesC& aTextToSay)
       
   481     {
       
   482     TRACE_PRN_FN_ENT;
       
   483 
       
   484     RemoveTTSPlayer();
       
   485     TPtrC ttsHeader(KTMSTtsHeader);
       
   486     HBufC* buf = HBufC::New(aTextToSay.Length() + ttsHeader.Length());
       
   487     if (buf)
       
   488         {
       
   489         TPtr ptr = buf->Des();
       
   490         ptr.Append(ttsHeader);
       
   491         ptr.Append(aTextToSay);
       
   492         TRACE_PRN_N1(_L("TMS->CreateTTSPlayerL: Text:[%S]"), &ptr);
       
   493         TRAPD(err, iTtsPlayer = TMSRtAudioHdlr::NewTtsL(*buf,
       
   494                 KAudioPriorityTextToSpeechCall, KAudioPrefTextToSpeechCall,
       
   495                 *this, EPlayerTts));
       
   496         if (err == TMS_RESULT_SUCCESS)
       
   497             {
       
   498             iTtsToneToBePlayed = ETrue;
       
   499             iRtParam.iTextToSay.Set(aTextToSay);
       
   500             }
       
   501         }
       
   502     delete buf;
       
   503 
       
   504     TRACE_PRN_FN_EXT;
       
   505     }
       
   506 
       
   507 // -----------------------------------------------------------------------------
       
   508 // TMSRingTonePlayer::RemoveTTSPlayer
       
   509 // -----------------------------------------------------------------------------
       
   510 //
       
   511 void TMSRingTonePlayer::RemoveTTSPlayer()
       
   512     {
       
   513     TRACE_PRN_FN_ENT;
       
   514 
       
   515     delete iTtsPlayer;
       
   516     iTtsPlayer = NULL;
       
   517     iTtsToneToBePlayed = EFalse;
       
   518     iRtParam.iTextToSay.Set(KNullDesC());
       
   519 
       
   520     TRACE_PRN_FN_EXT;
       
   521     }
       
   522 
       
   523 // -----------------------------------------------------------------------------
       
   524 // TMSRingTonePlayer::PlayRingToneL
       
   525 // -----------------------------------------------------------------------------
       
   526 //
       
   527 void TMSRingTonePlayer::PlayRingToneL()
       
   528     {
       
   529     TRACE_PRN_FN_ENT;
       
   530 
       
   531     // Check active Profile for any changes since Init()
       
   532     // TODO: To improve perfomrance, instead of polling Profile settings,
       
   533     //       consider subscribing to ProfilEngine P&S keys in CenRep.
       
   534     LoadActiveProfileSettingsL();
       
   535 
       
   536     switch (iRtParam.iType)
       
   537         {
       
   538         case EPlayerAudio:
       
   539             {
       
   540             PlayTtsTone();
       
   541             PlayAudioRingToneL();
       
   542             break;
       
   543             }
       
   544         case EPlayerBeepOnce:
       
   545             BeepOnceL();
       
   546             break;
       
   547         case EPlayerSilent:
       
   548             PlaySilentToneL();
       
   549             break;
       
   550         case EPlayerUnsecureVoIP:
       
   551             PlayUnsecureVoIPToneL();
       
   552             break;
       
   553         case EPlayerDefault:
       
   554             PlayTtsTone();
       
   555             PlayDefaultToneL();
       
   556             break;
       
   557         case EPlayerBackup:
       
   558             PlayBackupToneL();
       
   559             break;
       
   560         case EPlayerSequence:
       
   561             PlaySequenceToneL();
       
   562             break;
       
   563         default:
       
   564             break;
       
   565         }
       
   566     TRACE_PRN_FN_EXT;
       
   567     }
       
   568 
       
   569 // -----------------------------------------------------------------------------
       
   570 // TMSRingTonePlayer::PlayAudioRingToneL
       
   571 // -----------------------------------------------------------------------------
       
   572 //
       
   573 void TMSRingTonePlayer::PlayAudioRingToneL()
       
   574     {
       
   575     TRACE_PRN_FN_ENT;
       
   576 
       
   577     if (!iRtContainer || !CheckAndHandleToneSizeLimit(iRtContainer))
       
   578         {
       
   579         PlayDefaultToneL();
       
   580         }
       
   581     else if (iRtParam.iRingingType == EProfileRingingTypeSilent)
       
   582         {
       
   583         PlaySilentToneL();
       
   584         }
       
   585     else if (iRtParam.iRingingType == EProfileRingingTypeBeepOnce)
       
   586         {
       
   587         BeepOnceL();
       
   588         }
       
   589     else
       
   590         {
       
   591         if (!iAudioPlayer)
       
   592             {
       
   593             CreateAudioPlayerL();
       
   594             if (!iTimer->IsActive())
       
   595                 {
       
   596                 // If InitComplete event doesn't occur within permittable time,
       
   597                 // this will trigger fallback routine.
       
   598                 iTimer->After(KTMSMaxRingingWaiting, this);
       
   599                 }
       
   600             }
       
   601 
       
   602         // Start playing.
       
   603         if (!iAudioPlayer)
       
   604             {
       
   605             iTimer->Cancel();
       
   606             PlayDefaultToneL();
       
   607             }
       
   608         else
       
   609             {
       
   610             iTonePlayingStatus = EAudioTonePlaying;
       
   611             iAudioPlayer->Play(ConvertRingingType(iRtParam.iRingingType),
       
   612                     iRtParam.iVolume, iTtsToneToBePlayed);
       
   613             }
       
   614         }
       
   615 
       
   616     TRACE_PRN_FN_EXT;
       
   617     }
       
   618 
       
   619 // -----------------------------------------------------------------------------
       
   620 // TMSRingTonePlayer::BeepOnceL
       
   621 // -----------------------------------------------------------------------------
       
   622 //
       
   623 void TMSRingTonePlayer::BeepOnceL()
       
   624     {
       
   625     TRACE_PRN_FN_ENT;
       
   626 
       
   627     if (!iBeepOncePlayer)
       
   628         {
       
   629         CreateBeepOncePlayerL();
       
   630         }
       
   631     if (iBeepOncePlayer)
       
   632         {
       
   633         iTonePlayingStatus = EBeepOnce;
       
   634         iBeepOncePlayer->Play(TMSRtAudioHdlr::ETypeRingingOnce,
       
   635                 iRtParam.iVolume, EFalse);
       
   636         }
       
   637     else
       
   638         {
       
   639         PlayDefaultToneL();
       
   640         }
       
   641 
       
   642     TRACE_PRN_FN_EXT;
       
   643     }
       
   644 
       
   645 // -----------------------------------------------------------------------------
       
   646 // TMSRingTonePlayer::PlaySilentToneL
       
   647 // -----------------------------------------------------------------------------
       
   648 //
       
   649 void TMSRingTonePlayer::PlaySilentToneL()
       
   650     {
       
   651     TRACE_PRN_FN_ENT;
       
   652 
       
   653     if (!iSilentPlayer)
       
   654         {
       
   655         CreateSilentPlayerL();
       
   656         }
       
   657     if (iSilentPlayer)
       
   658         {
       
   659         iTonePlayingStatus = ESilentTonePlaying;
       
   660         iSilentPlayer->Play(TMSRtAudioHdlr::ETypeRinging, 0, EFalse);
       
   661         }
       
   662     else
       
   663         {
       
   664         PlayDefaultToneL();
       
   665         }
       
   666 
       
   667     TRACE_PRN_FN_EXT;
       
   668     }
       
   669 
       
   670 // -----------------------------------------------------------------------------
       
   671 // TMSRingTonePlayer::PlayUnsecureVoIPToneL
       
   672 // -----------------------------------------------------------------------------
       
   673 //
       
   674 void TMSRingTonePlayer::PlayUnsecureVoIPToneL()
       
   675     {
       
   676     TRACE_PRN_FN_ENT;
       
   677 
       
   678     if (!iUnsecureVoIPTonePlayer)
       
   679         {
       
   680         CreateUnsecureVoipPlayerL();
       
   681         }
       
   682     if (iUnsecureVoIPTonePlayer)
       
   683         {
       
   684         iTonePlayingStatus = EUnsecureVoIPTonePlaying;
       
   685         iUnsecureVoIPTonePlayer->Play(TMSRtAudioHdlr::ETypeRingingOnce,
       
   686                 KRTDefaultVolume, EFalse);
       
   687         }
       
   688     else
       
   689         {
       
   690         PlayDefaultToneL();
       
   691         }
       
   692 
       
   693     TRACE_PRN_FN_EXT;
       
   694     }
       
   695 
       
   696 // -----------------------------------------------------------------------------
       
   697 // TMSRingTonePlayer::PlaySequenceToneL
       
   698 // -----------------------------------------------------------------------------
       
   699 //
       
   700 void TMSRingTonePlayer::PlaySequenceToneL()
       
   701     {
       
   702     TRACE_PRN_FN_ENT;
       
   703 
       
   704     if (iSequencePlayer)
       
   705         {
       
   706         iTonePlayingStatus = ESequenceTonePlaying;
       
   707         iSequencePlayer->Play(ConvertRingingType(iRtParam.iRingingType),
       
   708                 iRtParam.iVolume, EFalse);
       
   709         }
       
   710     else
       
   711         {
       
   712         PlayDefaultToneL();
       
   713         }
       
   714 
       
   715     TRACE_PRN_FN_EXT;
       
   716     }
       
   717 
       
   718 // -----------------------------------------------------------------------------
       
   719 // TMSRingTonePlayer::PlayTtsTone
       
   720 // Schedule TTS to play, if text has been provided
       
   721 // -----------------------------------------------------------------------------
       
   722 //
       
   723 void TMSRingTonePlayer::PlayTtsTone()
       
   724     {
       
   725     TRACE_PRN_FN_ENT;
       
   726 
       
   727     TInt err = TMS_RESULT_SUCCESS;
       
   728 
       
   729     if (iRtParam.iTextToSay.Length() && !iTtsPlayer)
       
   730         {
       
   731         TRAP(err, CreateTTSPlayerL(iRtParam.iTextToSay));
       
   732         }
       
   733     if (err == TMS_RESULT_SUCCESS && iTtsPlayer && iTtsToneToBePlayed)
       
   734         {
       
   735         iTtsDelayIndex = 0;
       
   736         iTtsDelaysCount = KTMSTtsDelaysCount;
       
   737 
       
   738         // Start TTS timer just before RT
       
   739         if (!iTtsDelayTimer->IsActive())
       
   740             {
       
   741             iTtsDelayTimer->After(KTMSTtsDelays[iTtsDelayIndex],
       
   742                     TCallBack(HandleTtsDelayTimeout, this));
       
   743             }
       
   744         iTtsVolume = iRtParam.iVolume;
       
   745         iTtsRingingType = iRtParam.iRingingType;
       
   746         }
       
   747 
       
   748     TRACE_PRN_FN_EXT;
       
   749     }
       
   750 
       
   751 // -----------------------------------------------------------------------------
       
   752 // TMSRingTonePlayer::PlayBackupToneL
       
   753 // -----------------------------------------------------------------------------
       
   754 //
       
   755 void TMSRingTonePlayer::PlayBackupToneL()
       
   756     {
       
   757     TRACE_PRN_FN_ENT;
       
   758 
       
   759     TInt err = TMS_RESULT_SUCCESS;
       
   760 
       
   761     if (!iBackupPlayer)
       
   762         {
       
   763         TRAP(err, CreateBkpRtPlayerL());
       
   764         }
       
   765 
       
   766     if (iBackupPlayer && err == TMS_RESULT_SUCCESS)
       
   767         {
       
   768         iTonePlayingStatus = EBackupTonePlaying;
       
   769         iTtsToneToBePlayed = EFalse;
       
   770         iTTsTimeOutCounter = 0;
       
   771         iTtsDelayTimer->Cancel();
       
   772         if (iTtsPlayer)
       
   773             {
       
   774             iTtsPlayer->StopPlaying();
       
   775             delete iTtsPlayer;
       
   776             iTtsPlayer = NULL;
       
   777             }
       
   778         iBackupPlayer->Play(ConvertRingingType(iRtParam.iRingingType),
       
   779                 iRtParam.iVolume, EFalse);
       
   780         }
       
   781 
       
   782     TRACE_PRN_FN_EXT;
       
   783     }
       
   784 
       
   785 // -----------------------------------------------------------------------------
       
   786 // TMSRingTonePlayer::PlayDefaultToneL
       
   787 // -----------------------------------------------------------------------------
       
   788 //
       
   789 void TMSRingTonePlayer::PlayDefaultToneL()
       
   790     {
       
   791     TRACE_PRN_FN_ENT;
       
   792 
       
   793     if (iRtParam.iRingingType == EProfileRingingTypeSilent ||
       
   794             iRtParam.iRingingType == EProfileRingingTypeBeepOnce)
       
   795         {
       
   796         return;
       
   797         }
       
   798 
       
   799     if (!iRtContainer)
       
   800         {
       
   801         // Default tone does not exist, play backup.
       
   802         PlayBackupToneL();
       
   803         return;
       
   804         }
       
   805 
       
   806     if (!iDefaultPlayer)
       
   807         {
       
   808         CreateDefaultRtPlayerL();
       
   809         if (!iTimer->IsActive())
       
   810             {
       
   811             // If InitComplete event doesn't occur within permittable time,
       
   812             // this will trigger fallback routine.
       
   813             iTimer->After(KTMSMaxRingingWaiting, this);
       
   814             }
       
   815         }
       
   816 
       
   817     // Start playing.
       
   818     if (!iDefaultPlayer)
       
   819         {
       
   820         // Default player not ready, play backup.
       
   821         iTimer->Cancel();
       
   822         PlayBackupToneL();
       
   823         }
       
   824     else
       
   825         {
       
   826         iTonePlayingStatus = EDefaultTonePlaying;
       
   827         iDefaultPlayer->Play(ConvertRingingType(iRtParam.iRingingType),
       
   828                 iRtParam.iVolume, iTtsToneToBePlayed);
       
   829         }
       
   830 
       
   831     TRACE_PRN_FN_EXT;
       
   832     }
       
   833 
       
   834 // -----------------------------------------------------------------------------
       
   835 // TMSRingTonePlayer::StopPlaying
       
   836 // -----------------------------------------------------------------------------
       
   837 //
       
   838 void TMSRingTonePlayer::StopPlaying()
       
   839     {
       
   840     TRACE_PRN_FN_ENT;
       
   841 
       
   842     iTtsToneToBePlayed = EFalse;
       
   843     iTTsTimeOutCounter = 0;
       
   844     iTtsDelayTimer->Cancel();
       
   845     if (iTtsPlayer)
       
   846         {
       
   847         iTtsPlayer->StopPlaying();
       
   848         delete iTtsPlayer;
       
   849         iTtsPlayer = NULL;
       
   850         }
       
   851     iTimer->Cancel();
       
   852 
       
   853     switch (iTonePlayingStatus)
       
   854         {
       
   855         case EAudioTonePlaying:
       
   856             if (iAudioPlayer)
       
   857                 {
       
   858                 // Commented out to correct screen jamming after
       
   859                 // REComSession::FinalClose(). Audio player will be stopped
       
   860                 // in its destructor. Fixes EKKI-7WYG2G and JKAN-7XNGQU.
       
   861                 // iAudioPlayer->StopPlaying();
       
   862                 delete iAudioPlayer;
       
   863                 iAudioPlayer = NULL;
       
   864                 }
       
   865             break;
       
   866         case EDefaultTonePlaying:
       
   867             if (iDefaultPlayer)
       
   868                 {
       
   869                 iDefaultPlayer->StopPlaying();
       
   870                 delete iDefaultPlayer;
       
   871                 iDefaultPlayer = NULL;
       
   872                 }
       
   873             break;
       
   874         case EBeepOnce:
       
   875             if (iBeepOncePlayer)
       
   876                 {
       
   877                 iBeepOncePlayer->StopPlaying();
       
   878                 delete iBeepOncePlayer;
       
   879                 iBeepOncePlayer = NULL;
       
   880                 }
       
   881             break;
       
   882         case EBackupTonePlaying:
       
   883             if (iBackupPlayer)
       
   884                 {
       
   885                 iBackupPlayer->StopPlaying();
       
   886                 }
       
   887             break;
       
   888         case ESilentTonePlaying:
       
   889             if (iSilentPlayer)
       
   890                 {
       
   891                 iSilentPlayer->StopPlaying();
       
   892                 delete iSilentPlayer;
       
   893                 iSilentPlayer = NULL;
       
   894                 }
       
   895             break;
       
   896         case EUnsecureVoIPTonePlaying:
       
   897             if (iUnsecureVoIPTonePlayer)
       
   898                 {
       
   899                 iUnsecureVoIPTonePlayer->StopPlaying();
       
   900                 delete iUnsecureVoIPTonePlayer;
       
   901                 iUnsecureVoIPTonePlayer = NULL;
       
   902                 }
       
   903             break;
       
   904         case ESequenceTonePlaying:
       
   905             if (iSequencePlayer)
       
   906                 {
       
   907                 iSequencePlayer->StopPlaying();
       
   908                 delete iSequencePlayer;
       
   909                 iSequencePlayer = NULL;
       
   910                 }
       
   911             break;
       
   912         case EVideoTonePlaying: // video ringing tone
       
   913         case EPersonalVideoTonePlaying:
       
   914         case ESilentVideoTonePlaying:
       
   915             if (iBeepOncePlayer != NULL)
       
   916                 {
       
   917                 iBeepOncePlayer->StopPlaying();
       
   918                 delete iBeepOncePlayer;
       
   919                 iBeepOncePlayer = NULL;
       
   920                 }
       
   921             if (iSilentPlayer != NULL)
       
   922                 {
       
   923                 iSilentPlayer->StopPlaying();
       
   924                 delete iSilentPlayer;
       
   925                 iSilentPlayer = NULL;
       
   926                 }
       
   927             if (iRtContainer)
       
   928                 {
       
   929                 delete iRtContainer;
       
   930                 iRtContainer = NULL;
       
   931                 }
       
   932             break;
       
   933         case EIdle:
       
   934             // Do nothing here.
       
   935             return;
       
   936         default:
       
   937             break;
       
   938         }
       
   939 
       
   940     iTonePlayingStatus = EIdle;
       
   941 
       
   942     TRACE_PRN_FN_EXT;
       
   943     }
       
   944 
       
   945 // -----------------------------------------------------------------------------
       
   946 // TMSRingTonePlayer::DeinitRingTonePlayer
       
   947 // -----------------------------------------------------------------------------
       
   948 //
       
   949 void TMSRingTonePlayer::DeinitRingTonePlayer()
       
   950     {
       
   951     StopPlaying();
       
   952     RemovePlayers();
       
   953     }
       
   954 
       
   955 // -----------------------------------------------------------------------------
       
   956 // TMSRingTonePlayer::RemovePlayers
       
   957 // -----------------------------------------------------------------------------
       
   958 //
       
   959 void TMSRingTonePlayer::RemovePlayers()
       
   960     {
       
   961     delete iAudioPlayer;
       
   962     iAudioPlayer = NULL;
       
   963 
       
   964     delete iDefaultPlayer;
       
   965     iDefaultPlayer = NULL;
       
   966 
       
   967     delete iBeepOncePlayer;
       
   968     iBeepOncePlayer = NULL;
       
   969 
       
   970     delete iSilentPlayer;
       
   971     iSilentPlayer = NULL;
       
   972 
       
   973     delete iUnsecureVoIPTonePlayer;
       
   974     iUnsecureVoIPTonePlayer = NULL;
       
   975 
       
   976     delete iSequencePlayer;
       
   977     iSequencePlayer = NULL;
       
   978 
       
   979     delete iTtsPlayer;
       
   980     iTtsPlayer = NULL;
       
   981     }
       
   982 
       
   983 // -----------------------------------------------------------------------------
       
   984 // TMSRingTonePlayer::DeletePlayer
       
   985 // -----------------------------------------------------------------------------
       
   986 //
       
   987 void TMSRingTonePlayer::DeletePlayer()
       
   988     {
       
   989     switch (iTonePlayingStatus)
       
   990         {
       
   991         case EAudioTonePlaying:
       
   992             DeletePlayerAsync(EPlayerAudio);
       
   993             iAudioPlayer = NULL;
       
   994             break;
       
   995         case EDefaultTonePlaying:
       
   996             DeletePlayerAsync(EPlayerDefault);
       
   997             iDefaultPlayer = NULL;
       
   998             break;
       
   999         case ESilentTonePlaying:
       
  1000             DeletePlayerAsync(EPlayerSilent);
       
  1001             iSilentPlayer = NULL;
       
  1002             break;
       
  1003         case EUnsecureVoIPTonePlaying:
       
  1004             DeletePlayerAsync(EPlayerUnsecureVoIP);
       
  1005             iUnsecureVoIPTonePlayer = NULL;
       
  1006             break;
       
  1007         case EBeepOnce:
       
  1008             DeletePlayerAsync(EPlayerBeepOnce);
       
  1009             iBeepOncePlayer = NULL;
       
  1010             break;
       
  1011         case ESequenceTonePlaying:
       
  1012             DeletePlayerAsync(EPlayerSequence);
       
  1013             iSequencePlayer = NULL;
       
  1014             break;
       
  1015         case EBackupTonePlaying:
       
  1016         default:
       
  1017             break;
       
  1018         }
       
  1019     }
       
  1020 
       
  1021 // -----------------------------------------------------------------------------
       
  1022 // TMSRingTonePlayer::DeletePlayerAsync
       
  1023 // -----------------------------------------------------------------------------
       
  1024 //
       
  1025 void TMSRingTonePlayer::DeletePlayerAsync(TRtPlayerType aPlayer)
       
  1026     {
       
  1027     TRACE_PRN_FN_ENT;
       
  1028 
       
  1029     __ASSERT_DEBUG(aPlayer >= EPlayerFirst &&
       
  1030             aPlayer < iAsyncDeletePlayers.Count(),
       
  1031             PANIC(TMS_RESULT_INVALID_ARGUMENT));
       
  1032 
       
  1033     // Player is deleted in HandleAsyncReq.
       
  1034 
       
  1035     if (iAsyncDeletePlayers[aPlayer])
       
  1036         {
       
  1037         delete iAsyncDeletePlayers[aPlayer];
       
  1038         iAsyncDeletePlayers[aPlayer] = NULL;
       
  1039         }
       
  1040 
       
  1041     TMSRtAudioHdlr** players[] = {
       
  1042         &iAudioPlayer,
       
  1043         &iBeepOncePlayer,
       
  1044         &iSilentPlayer,
       
  1045         &iUnsecureVoIPTonePlayer,
       
  1046         &iDefaultPlayer,
       
  1047         &iSequencePlayer,
       
  1048         &iBackupPlayer,
       
  1049         &iTtsPlayer
       
  1050         };
       
  1051 
       
  1052     __ASSERT_DEBUG(iAsyncDeletePlayers.Count() > aPlayer,
       
  1053             PANIC(TMS_RESULT_ILLEGAL_OPERATION));
       
  1054 
       
  1055     iAsyncDeletePlayers[aPlayer] = *(players[aPlayer]);
       
  1056     *(players[aPlayer]) = NULL;
       
  1057     iAsyncReq = ETrue;
       
  1058     if (!iAsyncReqAO->IsActive())
       
  1059         iAsyncReqAO->Start(); //Start async request
       
  1060 
       
  1061     TRACE_PRN_FN_ENT;
       
  1062     }
       
  1063 
       
  1064 // -----------------------------------------------------------------------------
       
  1065 // TMSRingTonePlayer::HandleError
       
  1066 // From TMSAsyncReqObsrv
       
  1067 // -----------------------------------------------------------------------------
       
  1068 //
       
  1069 void TMSRingTonePlayer::HandleError(TInt /*aError*/)
       
  1070     {
       
  1071     // TODO: should we kill/restart a/o?
       
  1072     }
       
  1073 
       
  1074 // -----------------------------------------------------------------------------
       
  1075 // TMSRingTonePlayer::HandleAsyncReq
       
  1076 // From TMSAsyncReqObsrv
       
  1077 // -----------------------------------------------------------------------------
       
  1078 //
       
  1079 void TMSRingTonePlayer::HandleAsyncReq()
       
  1080     {
       
  1081     TRACE_PRN_FN_ENT;
       
  1082 
       
  1083     if (iAsyncReq)
       
  1084         {
       
  1085         for (TInt i = EPlayerFirst; i <= EPlayerLast; i++)
       
  1086             {
       
  1087             delete iAsyncDeletePlayers[i];
       
  1088             iAsyncDeletePlayers[i] = NULL;
       
  1089             }
       
  1090         }
       
  1091     iAsyncReq = EFalse;
       
  1092 
       
  1093     TRACE_PRN_FN_EXT;
       
  1094     }
       
  1095 
       
  1096 // -----------------------------------------------------------------------------
       
  1097 // TMSRingTonePlayer::HandleTtsDelayTimeout
       
  1098 // -----------------------------------------------------------------------------
       
  1099 //
       
  1100 TInt TMSRingTonePlayer::HandleTtsDelayTimeout(TAny* object)
       
  1101     {
       
  1102     static_cast<TMSRingTonePlayer*> (object)->DoHandleTtsDelayTimeout();
       
  1103     return TMS_RESULT_SUCCESS;
       
  1104     }
       
  1105 
       
  1106 // -----------------------------------------------------------------------------
       
  1107 // TMSRingTonePlayer::DoHandleTtsDelayTimeout
       
  1108 // -----------------------------------------------------------------------------
       
  1109 //
       
  1110 void TMSRingTonePlayer::DoHandleTtsDelayTimeout()
       
  1111     {
       
  1112     TRACE_PRN_FN_ENT;
       
  1113 
       
  1114     TMSRtAudioHdlr* currPlayer = NULL;
       
  1115     currPlayer = GetCurrentlyActiveAudioPlayerWithTTS();
       
  1116 
       
  1117     if (!currPlayer)
       
  1118         {
       
  1119         return;
       
  1120         }
       
  1121 
       
  1122     TInt volume(0);
       
  1123 
       
  1124     // Ascending case. TTS player needs to be ascending.
       
  1125     if (iTtsRingingType == EProfileRingingTypeAscending)
       
  1126         {
       
  1127         // Adjust volume for each ascending step
       
  1128         if (!iTTsTimeOutCounter)
       
  1129             {
       
  1130             // Playing caller's name for the first time in ascending mode.
       
  1131             volume = KTtsVolumeMin;
       
  1132             iTtsPlayer->Play(ConvertRingingType(EProfileRingingTypeRingingOnce),
       
  1133                     volume, iTtsToneToBePlayed);
       
  1134             }
       
  1135         else
       
  1136             {
       
  1137             // Checks the case that ringingtone is very quiet. Then do not play
       
  1138             // TTS too loud
       
  1139             volume = iTtsVolume < KTtsVolumeMin ?
       
  1140                 KTtsVolumeMin : KTtsVolumeAscendingRepeat;
       
  1141 
       
  1142             // We are saying callers name for the second time in ascending mode.
       
  1143             // Say callers name by volume level KTtsVolumeAscendingRepeat and
       
  1144             // decrease current players volume
       
  1145             // to KPlayerVolumeAscendingRepeat. RampTime is zero
       
  1146             currPlayer->SetNewVolumeAndRamptime(
       
  1147                     KPlayerVolumeAscendingRepeat, 0);
       
  1148             iTtsPlayer->Play(ConvertRingingType(EProfileRingingTypeRingingOnce),
       
  1149                     volume, iTtsToneToBePlayed);
       
  1150             }
       
  1151         }
       
  1152     else //Normal ringing case.
       
  1153         {
       
  1154         currPlayer->SetNewVolumeAndRamptime(iTtsVolume - 5, 0);
       
  1155         iTtsPlayer->Play(ConvertRingingType(EProfileRingingTypeRingingOnce),
       
  1156                 iTtsVolume, iTtsToneToBePlayed);
       
  1157         }
       
  1158 
       
  1159     iTTsTimeOutCounter++;
       
  1160 
       
  1161     TRACE_PRN_FN_EXT;
       
  1162     }
       
  1163 
       
  1164 // -----------------------------------------------------------------------------
       
  1165 // TMSRingTonePlayer::MuteRingTone
       
  1166 // -----------------------------------------------------------------------------
       
  1167 //
       
  1168 void TMSRingTonePlayer::MuteRingTone()
       
  1169     {
       
  1170     TMSRtAudioHdlr* activePlayer = ActiveAudioPlayer();
       
  1171     if (activePlayer != NULL)
       
  1172         {
       
  1173         activePlayer->MutePlaying();
       
  1174         }
       
  1175     }
       
  1176 
       
  1177 // -----------------------------------------------------------------------------
       
  1178 // TMSRingTonePlayer::RtAudioHdlrEvent
       
  1179 // -----------------------------------------------------------------------------
       
  1180 //
       
  1181 void TMSRingTonePlayer::RtAudioHdlrEvent(TInt aEvent, TInt aError, TInt aPlayer)
       
  1182     {
       
  1183     if (aError == TMS_RESULT_SUCCESS)
       
  1184         {
       
  1185         switch (aEvent)
       
  1186             {
       
  1187             case ECmdRingToneOpenComplete:
       
  1188                 if (aPlayer != EPlayerBackup && aPlayer != EPlayerTts)
       
  1189                     {
       
  1190                     HandleRtAudioInitComplete(aEvent, aError, aPlayer);
       
  1191                     }
       
  1192                 break;
       
  1193             case ECmdRingTonePlayComplete:
       
  1194                 HandleRtAudioPlayComplete(aEvent, aError, aPlayer);
       
  1195                 break;
       
  1196             default:
       
  1197                 //not possible
       
  1198                 break;
       
  1199             }
       
  1200         }
       
  1201      else
       
  1202          {
       
  1203          HandleRtAudioError(aEvent, aError, aPlayer);
       
  1204          }
       
  1205     }
       
  1206 
       
  1207 // -----------------------------------------------------------------------------
       
  1208 // TMSRingTonePlayer::HandleRtAudioError
       
  1209 // -----------------------------------------------------------------------------
       
  1210 //
       
  1211 void TMSRingTonePlayer::HandleRtAudioError(TInt aEvent, TInt aError,
       
  1212         TInt aPlayer)
       
  1213     {
       
  1214     TRACE_PRN_N1(_L("TMS->HandleRtAudioError [%d]"), aError);
       
  1215 
       
  1216     // Backup player events don't need to be propagated
       
  1217     if (aPlayer == EPlayerBackup)
       
  1218         {
       
  1219         return;
       
  1220         }
       
  1221     if (aPlayer == EPlayerTts && aEvent == ECmdRingTonePlayComplete)
       
  1222         {
       
  1223         // Remove TTS and keep playing RT
       
  1224         DeletePlayerAsync(EPlayerTts);
       
  1225         return;
       
  1226         }
       
  1227     const TBool deleteAll = (aError == KErrServerTerminated);
       
  1228     if (deleteAll)
       
  1229         {
       
  1230         // KErrServerTerminated is considered fatal error - delete all.
       
  1231         for (TInt i = EPlayerFirst; i <= EPlayerLast; i++)
       
  1232             {
       
  1233             DeletePlayerAsync(static_cast<TRtPlayerType> (i));
       
  1234             }
       
  1235         // Recreate backup player
       
  1236         TRAPD(ignore, CreateBkpRtPlayerL());
       
  1237         if (ignore) ;
       
  1238         }
       
  1239 
       
  1240     iTimer->Cancel();
       
  1241     DoHandlePlayerError(!deleteAll, EFalse);
       
  1242     iRtObserver.RtPlayerEvent(aEvent, aError);
       
  1243     }
       
  1244 
       
  1245 // -----------------------------------------------------------------------------
       
  1246 // TMSRingTonePlayer::HandleRtAudioInitComplete
       
  1247 // -----------------------------------------------------------------------------
       
  1248 //
       
  1249 void TMSRingTonePlayer::HandleRtAudioInitComplete(TInt aEvent, TInt aError,
       
  1250         TInt aPlayer)
       
  1251     {
       
  1252     if ((iTonePlayingStatus == EAudioTonePlaying && aPlayer == EPlayerAudio) ||
       
  1253             (iTonePlayingStatus == EDefaultTonePlaying &&
       
  1254             aPlayer == EPlayerDefault))
       
  1255         {
       
  1256         iTimer->Cancel();
       
  1257         }
       
  1258     else
       
  1259         {
       
  1260         iRtObserver.RtPlayerEvent(aEvent, aError);
       
  1261         }
       
  1262     }
       
  1263 
       
  1264 // -----------------------------------------------------------------------------
       
  1265 // TMSRingTonePlayer::HandleRtAudioPlayComplete
       
  1266 // -----------------------------------------------------------------------------
       
  1267 //
       
  1268 void TMSRingTonePlayer::HandleRtAudioPlayComplete(TInt aEvent, TInt aError,
       
  1269         TInt aPlayer)
       
  1270     {
       
  1271     TRACE_PRN_N2(_L("TMS->HandleRtAudioPlayComplete: player=[%d], err=[%d]"),
       
  1272             aPlayer, aError);
       
  1273 
       
  1274     if (aPlayer == EPlayerTts)
       
  1275         {
       
  1276         ResumeTTS();
       
  1277         return;
       
  1278         }
       
  1279     // RT playback has completed: ring once and TTS is activated
       
  1280     else if (iRtParam.iRingingType == EProfileRingingTypeRingingOnce &&
       
  1281             iTtsToneToBePlayed)
       
  1282         {
       
  1283         // Ring once and TTS
       
  1284         if (iTtsDelayIndex < iTtsDelaysCount)
       
  1285             {
       
  1286             ReStartRingTonePlayer();
       
  1287             return;
       
  1288             }
       
  1289         }
       
  1290     // RT has completed: ringing and TTS is activated.
       
  1291     // We need to restart RT and new TTS iterations are required.
       
  1292     else if (iRtParam.iRingingType == EProfileRingingTypeRinging &&
       
  1293             iTtsToneToBePlayed)
       
  1294         {
       
  1295         // Ringing and TTS
       
  1296         if (iTtsDelayIndex == iTtsDelaysCount)
       
  1297             {
       
  1298             // Ringingtype is "Ringing". New TTS iterations are required.
       
  1299             // Need to restart TTS sequence TTS has completed its iterations,
       
  1300             // set index to zero.
       
  1301             iTtsDelayIndex = 0;
       
  1302             if (!iTtsDelayTimer->IsActive())
       
  1303                 {
       
  1304                 // Restart TTS sequence
       
  1305                 iTtsDelayTimer->After(KTMSTtsDelays[iTtsDelayIndex],
       
  1306                         TCallBack(HandleTtsDelayTimeout, this));
       
  1307                 }
       
  1308             }
       
  1309 
       
  1310         ReStartRingTonePlayer();
       
  1311         return;
       
  1312         }
       
  1313 
       
  1314     DeletePlayer();
       
  1315     iTonePlayingStatus = EIdle;
       
  1316     iRtObserver.RtPlayerEvent(aEvent, aError);
       
  1317     }
       
  1318 
       
  1319 // -----------------------------------------------------------------------------
       
  1320 // TMSRingTonePlayer::ResumeTTS
       
  1321 // -----------------------------------------------------------------------------
       
  1322 //
       
  1323 void TMSRingTonePlayer::ResumeTTS()
       
  1324     {
       
  1325     // TTS playing complete, normal tone player should volume up.
       
  1326     if ((iTtsToneToBePlayed) && (++iTtsDelayIndex < iTtsDelaysCount))
       
  1327         {
       
  1328         // Resuming after TTS first time
       
  1329         // Caller name is said once. Increase tone player volume.
       
  1330         SolveNewVolumeAndRamptime(ESaidOnce);
       
  1331 
       
  1332         if (!iTtsDelayTimer->IsActive())
       
  1333             {
       
  1334             // There are more TTS iterations to be played.
       
  1335             iTtsDelayTimer->After(KTMSTtsDelays[iTtsDelayIndex],
       
  1336                     TCallBack(HandleTtsDelayTimeout, this));
       
  1337             }
       
  1338         }
       
  1339     else
       
  1340         {
       
  1341         // Resuming after TTS second time.
       
  1342         SolveNewVolumeAndRamptime(ESaidTwice);
       
  1343         }
       
  1344     }
       
  1345 
       
  1346 // -----------------------------------------------------------------------------
       
  1347 // TMSRingTonePlayer::HandleTimeOutL
       
  1348 // -----------------------------------------------------------------------------
       
  1349 //
       
  1350 void TMSRingTonePlayer::HandleTimeOutL()
       
  1351     {
       
  1352     DoHandlePlayerError(ETrue, ETrue);
       
  1353     }
       
  1354 
       
  1355 // -----------------------------------------------------------------------------
       
  1356 // TMSRingTonePlayer::DoHandlePlayerError
       
  1357 // -----------------------------------------------------------------------------
       
  1358 //
       
  1359 void TMSRingTonePlayer::DoHandlePlayerError(TBool aDelete, TBool aSync)
       
  1360     {
       
  1361     switch (iTonePlayingStatus)
       
  1362         {
       
  1363         case EAudioTonePlaying:
       
  1364             {
       
  1365             if (aDelete)
       
  1366                 {
       
  1367                 if (aSync)
       
  1368                     {
       
  1369                     delete iAudioPlayer;
       
  1370                     }
       
  1371                 else
       
  1372                     {
       
  1373                     DeletePlayerAsync(EPlayerAudio);
       
  1374                     }
       
  1375                 iAudioPlayer = NULL;
       
  1376                 }
       
  1377 
       
  1378 #ifdef __WINS__
       
  1379             TRAPD(ignore, PlayAudioRingToneL());
       
  1380             iTonePlayingStatus = EDefaultTonePlaying;
       
  1381 #else
       
  1382             TRAPD(ignore, PlayDefaultToneL());
       
  1383 #endif
       
  1384             if (ignore) ;
       
  1385             break;
       
  1386             }
       
  1387         case EDefaultTonePlaying:
       
  1388             {
       
  1389             if (aDelete)
       
  1390                 {
       
  1391                 if (aSync)
       
  1392                     {
       
  1393                     delete iDefaultPlayer;
       
  1394                     }
       
  1395                 else
       
  1396                     {
       
  1397                     DeletePlayerAsync(EPlayerDefault);
       
  1398                     }
       
  1399                 iDefaultPlayer = NULL;
       
  1400                 }
       
  1401 
       
  1402             TRAPD(ignore, PlayBackupToneL());
       
  1403             if (ignore) ;
       
  1404             break;
       
  1405             }
       
  1406         case ESilentTonePlaying:
       
  1407         case EBeepOnce:
       
  1408         case EBackupTonePlaying:
       
  1409         case EIdle:
       
  1410         default:
       
  1411             break;
       
  1412         }
       
  1413     }
       
  1414 
       
  1415 // -----------------------------------------------------------------------------
       
  1416 // TMSRingTonePlayer::ConvertRingingType
       
  1417 // -----------------------------------------------------------------------------
       
  1418 //
       
  1419 TMSRtAudioHdlr::TRingingType TMSRingTonePlayer::ConvertRingingType(
       
  1420         TProfileRingingType aRingingType)
       
  1421     {
       
  1422     TMSRtAudioHdlr::TRingingType ringingType = TMSRtAudioHdlr::ETypeRinging;
       
  1423     switch (aRingingType)
       
  1424         {
       
  1425         case EProfileRingingTypeRinging:
       
  1426             ringingType = TMSRtAudioHdlr::ETypeRinging;
       
  1427             break;
       
  1428         case EProfileRingingTypeAscending:
       
  1429             ringingType = TMSRtAudioHdlr::ETypeAscending;
       
  1430             break;
       
  1431         case EProfileRingingTypeRingingOnce:
       
  1432             ringingType = TMSRtAudioHdlr::ETypeRingingOnce;
       
  1433             break;
       
  1434         default:
       
  1435             break;
       
  1436         }
       
  1437     return ringingType;
       
  1438     }
       
  1439 
       
  1440 // -----------------------------------------------------------------------------
       
  1441 // TMSRingTonePlayer::ExtendedSecurity
       
  1442 // -----------------------------------------------------------------------------
       
  1443 //
       
  1444 TBool TMSRingTonePlayer::ExtendedSecurity() const
       
  1445     {
       
  1446     return iExtSecNeeded;
       
  1447     }
       
  1448 
       
  1449 // -----------------------------------------------------------------------------
       
  1450 // TMSRingTonePlayer::SolveNewVolumeAndRamptime
       
  1451 // -----------------------------------------------------------------------------
       
  1452 //
       
  1453 void TMSRingTonePlayer::SolveNewVolumeAndRamptime(TTtsStatus aStatus)
       
  1454     {
       
  1455     TMSRtAudioHdlr* currPlayer = NULL;
       
  1456     currPlayer = GetCurrentlyActiveAudioPlayerWithTTS();
       
  1457     if (!currPlayer)
       
  1458         {
       
  1459         return;
       
  1460         }
       
  1461 
       
  1462     TInt ramptime(0);
       
  1463 
       
  1464     // Handle TTS volume. TTS sequence is as follows:
       
  1465     // 3 sec, tone + name + 4 sec, tone + name + the tone until the end.
       
  1466     switch (aStatus)
       
  1467         {
       
  1468         case ESaidOnce:
       
  1469             {
       
  1470             if (iTtsRingingType == EProfileRingingTypeAscending)
       
  1471                 {
       
  1472                 // The ramptime could be (4)* KTMSTtsAscendingStep but now
       
  1473                 // we are setting this to 0 because when caller's name is played
       
  1474                 // for the first time: play ringing tone on level 3 for 4 secs.
       
  1475                 ramptime = 0;
       
  1476                 // Played once ascending
       
  1477                 currPlayer->SetNewVolumeAndRamptime(
       
  1478                         KPlayerVolumeAscendingRepeat, ramptime);
       
  1479                 }
       
  1480             else
       
  1481                 {
       
  1482                 // Normal ringtone case. Adjust volume back to profile level.
       
  1483                 // Played once normal
       
  1484                 currPlayer->SetNewVolumeAndRamptime(iTtsVolume, 0);
       
  1485                 }
       
  1486             break;
       
  1487             }
       
  1488         case ESaidTwice:
       
  1489             {
       
  1490             if (iTtsRingingType == EProfileRingingTypeAscending)
       
  1491                 {
       
  1492                 TInt vol = iTtsVolume;
       
  1493                 if (vol > KPlayerVolumeAscendingRepeat)
       
  1494                     {
       
  1495                     vol = vol - KTtsVolumeAscendingDecrease;
       
  1496                     }
       
  1497 
       
  1498                 // TTS playing complete for the second time. Increase volume.
       
  1499                 ramptime = (vol) * KTMSTtsAscendingStep;
       
  1500                 // Played twice ascending
       
  1501                 currPlayer->SetNewVolumeAndRamptime(iTtsVolume, ramptime);
       
  1502                 }
       
  1503             else
       
  1504                 {
       
  1505                 // Normal ringtone case. Adjust volume back to profile level.
       
  1506                 // Played twice normal
       
  1507                 currPlayer->SetNewVolumeAndRamptime(iTtsVolume, 0);
       
  1508                 }
       
  1509             break;
       
  1510             }
       
  1511         default:
       
  1512             break;
       
  1513         }
       
  1514     }
       
  1515 
       
  1516 // -----------------------------------------------------------------------------
       
  1517 // TMSRingTonePlayer::PlayerType
       
  1518 // -----------------------------------------------------------------------------
       
  1519 //
       
  1520 TRtPlayerType TMSRingTonePlayer::PlayerType() const
       
  1521     {
       
  1522     return iRtParam.iType;
       
  1523     }
       
  1524 
       
  1525 // -----------------------------------------------------------------------------
       
  1526 // TMSRingTonePlayer::GetCurrentlyActiveAudioPlayerWithTTS
       
  1527 // -----------------------------------------------------------------------------
       
  1528 //
       
  1529 TMSRtAudioHdlr* TMSRingTonePlayer::GetCurrentlyActiveAudioPlayerWithTTS()
       
  1530     {
       
  1531     TMSRtAudioHdlr* player = NULL;
       
  1532 
       
  1533     if (iAudioPlayer)
       
  1534         {
       
  1535         player = iAudioPlayer;
       
  1536         }
       
  1537     else if (iDefaultPlayer)
       
  1538         {
       
  1539         player = iDefaultPlayer;
       
  1540         }
       
  1541     else if (iBackupPlayer)
       
  1542         {
       
  1543         player = iBackupPlayer;
       
  1544         }
       
  1545     return player;
       
  1546     }
       
  1547 
       
  1548 // -----------------------------------------------------------------------------
       
  1549 // TMSRingTonePlayer::ReStartRingTonePlayer
       
  1550 // -----------------------------------------------------------------------------
       
  1551 //
       
  1552 void TMSRingTonePlayer::ReStartRingTonePlayer()
       
  1553     {
       
  1554     // Find active player which plays along with TTS.
       
  1555     TMSRtAudioHdlr* currPlayer = NULL;
       
  1556     currPlayer = GetCurrentlyActiveAudioPlayerWithTTS();
       
  1557     if (currPlayer)
       
  1558         {
       
  1559         currPlayer->ReStartPlaying();
       
  1560         }
       
  1561     }
       
  1562 
       
  1563 // -----------------------------------------------------------------------------
       
  1564 // TMSRingTonePlayer::CheckAndHandleToneSizeLimit
       
  1565 // -----------------------------------------------------------------------------
       
  1566 //
       
  1567 TBool TMSRingTonePlayer::CheckAndHandleToneSizeLimit(
       
  1568         TMSRtContainer* aRingingTone)
       
  1569     {
       
  1570     TBool bValidSize = ETrue;
       
  1571 
       
  1572     // If RT size is too large, will play default tone instead.
       
  1573     if (iToneFileSizeLimitKB)
       
  1574         {
       
  1575         if (CheckToneFileSize(aRingingTone->FileName(), iToneFileSizeLimitKB)
       
  1576                 != TMS_RESULT_SUCCESS)
       
  1577             {
       
  1578             bValidSize = EFalse;
       
  1579             }
       
  1580         }
       
  1581     return bValidSize;
       
  1582     }
       
  1583 
       
  1584 // -----------------------------------------------------------------------------
       
  1585 // TMSRingTonePlayer::CheckToneFileSize
       
  1586 // -----------------------------------------------------------------------------
       
  1587 //
       
  1588 TInt TMSRingTonePlayer::CheckToneFileSize(const TDesC& aFile, TInt aSizeLimitKB)
       
  1589     {
       
  1590     // Get file size
       
  1591     TInt size = 0;
       
  1592     TInt error = TMS_RESULT_SUCCESS;
       
  1593 
       
  1594     RFs fs;
       
  1595     fs.Connect();
       
  1596     TEntry entry;
       
  1597     if (TMS_RESULT_SUCCESS == fs.Entry(aFile, entry))
       
  1598         {
       
  1599         size = entry.iSize;
       
  1600         }
       
  1601     fs.Close();
       
  1602 
       
  1603     aSizeLimitKB *= Kkilo;
       
  1604     if (aSizeLimitKB && size > aSizeLimitKB)
       
  1605         {
       
  1606         error = KErrTooBig;
       
  1607         }
       
  1608 
       
  1609     TRACE_PRN_N1(_L("TMS->CheckToneFileSize: [%d]"), size);
       
  1610     return error;
       
  1611     }
       
  1612 
       
  1613 // -----------------------------------------------------------------------------
       
  1614 // TMSRingTonePlayer::GetMaxToneFileSizeL
       
  1615 // -----------------------------------------------------------------------------
       
  1616 //
       
  1617 void TMSRingTonePlayer::GetMaxToneFileSizeL(TInt& /*aMaxSizeKB*/) const
       
  1618     {/*
       
  1619      const TInt error = CPhoneCenRepProxy::Instance()->GetInt(
       
  1620      KCRUidProfileEngine, KProEngRingingToneMaxSize, aMaxSizeKB);
       
  1621 
       
  1622      if (error != TMS_RESULT_SUCCESS)
       
  1623      {
       
  1624      aMaxSizeKB = 0;
       
  1625      }
       
  1626      if (aMaxSizeKB < 0)
       
  1627      {
       
  1628      aMaxSizeKB = 0;
       
  1629      }
       
  1630      */
       
  1631     //TRACE_PRN_N1("TMS->GetMaxToneFileSizeL: [%d]", aMaxSizeKB);
       
  1632     }
       
  1633 
       
  1634 // -----------------------------------------------------------------------------
       
  1635 // TMSRingTonePlayer::ActiveAudioPlayer
       
  1636 // -----------------------------------------------------------------------------
       
  1637 //
       
  1638 TMSRtAudioHdlr* TMSRingTonePlayer::ActiveAudioPlayer()
       
  1639     {
       
  1640     TMSRtAudioHdlr* audioHdlr = NULL;
       
  1641 
       
  1642     switch (iTonePlayingStatus)
       
  1643         {
       
  1644         case EAudioTonePlaying:
       
  1645             {
       
  1646             if (iAudioPlayer != NULL)
       
  1647                 {
       
  1648                 audioHdlr = iAudioPlayer;
       
  1649                 }
       
  1650             break;
       
  1651             }
       
  1652         case EDefaultTonePlaying:
       
  1653             {
       
  1654             if (iDefaultPlayer != NULL)
       
  1655                 {
       
  1656                 audioHdlr = iDefaultPlayer;
       
  1657                 }
       
  1658             break;
       
  1659             }
       
  1660         case EBeepOnce:
       
  1661             {
       
  1662             if (iBeepOncePlayer != NULL)
       
  1663                 {
       
  1664                 audioHdlr = iBeepOncePlayer;
       
  1665                 }
       
  1666             break;
       
  1667             }
       
  1668         case ESequenceTonePlaying:
       
  1669             {
       
  1670             if (iSequencePlayer != NULL)
       
  1671                 {
       
  1672                 audioHdlr = iSequencePlayer;
       
  1673                 }
       
  1674             break;
       
  1675             }
       
  1676          case EBackupTonePlaying:
       
  1677              {
       
  1678             if (iBackupPlayer != NULL)
       
  1679                 {
       
  1680                 audioHdlr = iBackupPlayer;
       
  1681                 }
       
  1682             break;
       
  1683              }
       
  1684         case ESilentTonePlaying:
       
  1685             {
       
  1686             if (iSilentPlayer != NULL)
       
  1687                 {
       
  1688                 audioHdlr = iSilentPlayer;
       
  1689                 }
       
  1690             break;
       
  1691             }
       
  1692         case EUnsecureVoIPTonePlaying:
       
  1693             {
       
  1694             if (iUnsecureVoIPTonePlayer != NULL)
       
  1695                 {
       
  1696                 audioHdlr = iUnsecureVoIPTonePlayer;
       
  1697                 }
       
  1698             break;
       
  1699             }
       
  1700         default:
       
  1701             break;
       
  1702         }
       
  1703 
       
  1704     return audioHdlr;
       
  1705     }
       
  1706 
       
  1707 //  End of File