qtms/tsrc/qttmstestapp/src/qtmstestengine.cpp
changeset 62 b276843a15ba
equal deleted inserted replaced
58:c76ea6caa649 62:b276843a15ba
       
     1 /*
       
     2  * Copyright (c) 2010 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 - TestApp
       
    15  *
       
    16  */
       
    17 
       
    18 // INCLUDES
       
    19 #include <gstring.h>
       
    20 #include <qtmsclientsink.h>
       
    21 #include <qtmsclientsource.h>
       
    22 #include <qtmspcmformat.h>
       
    23 #include <qtmsamrformat.h>
       
    24 #include <qtmsilbcformat.h>
       
    25 #include <qtmsg711format.h>
       
    26 #include <qtmsg729format.h>
       
    27 #include <qtmsvolumeeffect.h>
       
    28 #include <qtmsgaineffect.h>
       
    29 #include <qtmsglobalvoleffect.h>
       
    30 #include <qtmsglobalgaineffect.h>
       
    31 #include <qtmsglobalrouting.h>
       
    32 #include <qtmsver.h>
       
    33 #include "qtmstestengine.h"
       
    34 
       
    35 #ifdef _DEBUG
       
    36 #include "e32debug.h"
       
    37 #define DEBPRN0(str)       RDebug::Print(str, this)
       
    38 #define DEBPRN1(str, val1) RDebug::Print(str, this, val1)
       
    39 #else
       
    40 #define DEBPRN0(str)
       
    41 #define DEBPRN1(str, val1)
       
    42 #endif //_DEBUG
       
    43 
       
    44 //#define __PROFILING_ENABLED__
       
    45 
       
    46 #ifdef __PROFILING_ENABLED__
       
    47 #include "perfutility.h"
       
    48 #endif //__PROFILING_ENABLED__
       
    49 
       
    50 //#define __TEST_CODE_COVERAGE__
       
    51 
       
    52 // CONSTANTS
       
    53 _LIT8(KRTBeepSequence, "\x00\x11\x0A\x0A\x08\x73\x0A\x40\x28\x0A\xF7\
       
    54 \x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B");
       
    55 _LIT16(KTextToSpeak, "THE PHONE IS RINGING");
       
    56 _LIT16(KTestFile1, "C:\\Data\\Sounds\\Digital\\NokiaTest.aac");
       
    57 
       
    58 #ifdef __RECORD_WAV_TO_FILE__
       
    59 _LIT(KFileName, "c:\\data\\tmsrec.amr");
       
    60 const TUint KFileBufLen = 4096;
       
    61 const TInt KAMRNBHeaderLen = 6;
       
    62 const TUint8 KAMRNBHeader[KAMRNBHeaderLen] = {0x23,0x21,0x41,0x4d,0x52,0x0a};
       
    63 #endif
       
    64 
       
    65 // ----------------------------------------------------------------------------
       
    66 // QTmsTestEngine::QTmsTestEngine()
       
    67 // constructor
       
    68 // ----------------------------------------------------------------------------
       
    69 //
       
    70 QTmsTestEngine::QTmsTestEngine()
       
    71     {
       
    72     // Disable GLib slice allocators; will take care of memory leaks
       
    73     // caused by g_string_free().
       
    74     g_setenv("G_SLICE", "always-malloc", 1);
       
    75     }
       
    76 
       
    77 // ----------------------------------------------------------------------------
       
    78 // QTmsTestEngine::~QTmsTestEngine
       
    79 // destructor
       
    80 // ----------------------------------------------------------------------------
       
    81 //
       
    82 QTmsTestEngine::~QTmsTestEngine()
       
    83     {
       
    84     EndCall();
       
    85     CloseRingTonePlayer();
       
    86 
       
    87     if (iFactory && iGlobalVol)
       
    88         {
       
    89         iFactory->DeleteEffect(iGlobalVol);
       
    90         }
       
    91     if (iFactory && iGlobalGain)
       
    92         {
       
    93         iFactory->DeleteEffect(iGlobalGain);
       
    94         }
       
    95     if (iFactory && iTmsGlobalRouting)
       
    96         {
       
    97         iFactory->DeleteGlobalRouting(iTmsGlobalRouting);
       
    98         }
       
    99     if (iFactory && iInbandTonePlayer)
       
   100         {
       
   101         iFactory->DeleteInbandTonePlayer(iInbandTonePlayer);
       
   102         }
       
   103 
       
   104     delete iFactory;
       
   105 
       
   106 #ifdef __PLAY_WAV_FROM_FILE__
       
   107     iFile.Close();
       
   108     iFs.Close();
       
   109     delete iBuf;
       
   110 #endif
       
   111 #ifdef __RECORD_WAV_TO_FILE__
       
   112     iFile.Close();
       
   113     iFs.Close();
       
   114     delete iWriteBuf;
       
   115 #endif
       
   116     }
       
   117 
       
   118 // ----------------------------------------------------------------------------
       
   119 // QTmsTestEngine::NewL
       
   120 // Symbian constructor.
       
   121 // ----------------------------------------------------------------------------
       
   122 //
       
   123 QTmsTestEngine* QTmsTestEngine::NewL(QTextEdit* statusDisplay)
       
   124     {
       
   125     QTmsTestEngine* self(NULL);
       
   126     self = QTmsTestEngine::NewLC(statusDisplay);
       
   127     return self;
       
   128     }
       
   129 
       
   130 // ----------------------------------------------------------------------------
       
   131 // QTmsTestEngine::NewL
       
   132 // Symbian constructor with self pointer pushed into the cleanup stack.
       
   133 // ----------------------------------------------------------------------------
       
   134 //
       
   135 QTmsTestEngine* QTmsTestEngine::NewLC(QTextEdit* statusDisplay)
       
   136     {
       
   137     QTmsTestEngine* self = new (ELeave) QTmsTestEngine;
       
   138     //CleanupStack::PushL(self);
       
   139     self->ConstructL(statusDisplay);
       
   140     return self;
       
   141     }
       
   142 
       
   143 // ----------------------------------------------------------------------------
       
   144 // QTmsTestEngine::NewL
       
   145 // Standard Symbian 2nd phase constructor
       
   146 // ----------------------------------------------------------------------------
       
   147 //
       
   148 void QTmsTestEngine::ConstructL(QTextEdit* statusDisplay)
       
   149     {
       
   150     DEBPRN0(_L("QTmsTestEngine[0x%x]::ConstructL :>"));
       
   151     iStatusDisplay = statusDisplay;
       
   152 
       
   153 #ifdef __PLAY_WAV_FROM_FILE__
       
   154     iReadSize = KFileBufLen;
       
   155     TInt err = iFs.Connect();
       
   156     if (err == QTMS_RESULT_SUCCESS)
       
   157         {
       
   158         err = iFile.Open(iFs, KTestFile1, EFileShareAny | EFileRead);
       
   159         }
       
   160     if (err == QTMS_RESULT_SUCCESS)
       
   161         {
       
   162         iFile.Size(iFileLen);
       
   163         }
       
   164     iBuf = HBufC8::NewL(iReadSize);
       
   165 #endif
       
   166 
       
   167 #ifdef __RECORD_WAV_TO_FILE__
       
   168     TInt err = iFs.Connect();
       
   169     if (err == TMS_RESULT_SUCCESS)
       
   170         {
       
   171         err = iFile.Replace(iFs, KFileName, EFileWrite);
       
   172 #ifndef __WINSCW__
       
   173         if (err == KErrNone)
       
   174             {
       
   175             // Prefix file with AMR-NB header
       
   176             TBuf8<KAMRNBHeaderLen> buf;
       
   177             buf.Append(KAMRNBHeader, 6);
       
   178             iFile.Write(buf, KAMRNBHeaderLen);
       
   179             }
       
   180 #endif //__WINSCW__
       
   181         }
       
   182     iWriteLen = KFileBufLen;
       
   183     iWriteBuf = HBufC8::NewL(iWriteLen);
       
   184 #endif //__RECORD_WAV_TO_FILE__
       
   185 
       
   186     CreateFactory();
       
   187     CreateGlobalRouting();
       
   188     CreateGlobalVol();
       
   189     CreateGlobalGain();
       
   190     CreateRingTonePlayer();
       
   191 
       
   192     DEBPRN0(_L("QTmsTestEngine[0x%x]::ConstructL :<"));
       
   193     }
       
   194 
       
   195 gint QTmsTestEngine::CreateFactory()
       
   196     {
       
   197     gint status(QTMS_RESULT_SUCCESS);
       
   198     QTMSVer v(10,0,0);
       
   199     status = QTMSFactory::CreateFactory(iFactory, v);
       
   200 
       
   201     if (status != QTMS_RESULT_SUCCESS || !iFactory)
       
   202         {
       
   203         DisplayText("QTms create factory failed: ", status);
       
   204         }
       
   205     else
       
   206         {
       
   207 #ifdef __TEST_CODE_COVERAGE__
       
   208         QTMSBuffer* qtmsbuffer(NULL);
       
   209         QTMSBufferType buftype(QTMS_BUFFER_MEMORY);
       
   210         guint size(100);
       
   211         iFactory->CreateBuffer(QTMS_BUFFER_MEMORY, size, qtmsbuffer);
       
   212         if (qtmsbuffer)
       
   213             {
       
   214             qtmsbuffer->GetType(buftype);
       
   215             qtmsbuffer->GetDataSize(size);
       
   216             qtmsbuffer->SetDataSize(size);
       
   217             guint8* pbuf(NULL);
       
   218             qtmsbuffer->GetDataPtr(pbuf);
       
   219             guint64 ts(0);
       
   220             qtmsbuffer->GetTimeStamp(ts);
       
   221             qtmsbuffer->SetTimeStamp(ts);
       
   222             iFactory->DeleteBuffer(qtmsbuffer);
       
   223             }
       
   224 #endif //__TEST_CODE_COVERAGE__
       
   225 
       
   226         DisplayText("Tms factory created");
       
   227         }
       
   228     return status;
       
   229     }
       
   230 
       
   231 gint QTmsTestEngine::CreateCall(QTMSCallType calltype)
       
   232     {
       
   233     gint status(QTMS_RESULT_SUCCESS);
       
   234     if (iFactory && !iTmsCall)
       
   235         {
       
   236         status = iFactory->CreateCall(calltype, iTmsCall, 0);
       
   237         if (status == QTMS_RESULT_SUCCESS)
       
   238             {
       
   239 #ifdef __TEST_CODE_COVERAGE__
       
   240             guint ctxid;
       
   241             iTmsCall->GetCallContextId(ctxid);
       
   242 #endif //__TEST_CODE_COVERAGE__
       
   243             DisplayText("Tms call created");
       
   244             }
       
   245         else
       
   246             {
       
   247             DisplayText("Tms call create failed: ", status);
       
   248             }
       
   249         }
       
   250     return status;
       
   251     }
       
   252 
       
   253 gint QTmsTestEngine::CreateUplink()
       
   254     {
       
   255     gint status(QTMS_RESULT_SUCCESS);
       
   256 
       
   257     if (iTmsCall)
       
   258         {
       
   259         status = iTmsCall->CreateStream(QTMS_STREAM_UPLINK, iTmsUplink);
       
   260         if (status == QTMS_RESULT_SUCCESS)
       
   261             {
       
   262 #ifdef __TEST_CODE_COVERAGE__
       
   263             guint ctxid;
       
   264             iTmsCall->GetCallContextId(ctxid);
       
   265 #endif //__TEST_CODE_COVERAGE__
       
   266             DisplayText("Connected to uplink signal");
       
   267             connect(iTmsUplink,
       
   268                     SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)),
       
   269                     this,
       
   270                     SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
       
   271             }
       
   272         else
       
   273             {
       
   274             DisplayText("TMS uplink failed: ", status);
       
   275             }
       
   276         }
       
   277     return status;
       
   278     }
       
   279 
       
   280 gint QTmsTestEngine::CreateDownlink()
       
   281     {
       
   282     gint status(QTMS_RESULT_SUCCESS);
       
   283 
       
   284     if (iTmsCall)
       
   285         {
       
   286         status = iTmsCall->CreateStream(QTMS_STREAM_DOWNLINK, iTmsDnlink);
       
   287         if (status == QTMS_RESULT_SUCCESS)
       
   288             {
       
   289             DisplayText("Connected to downlink signal");
       
   290             connect(iTmsDnlink,
       
   291                     SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)),
       
   292                     this,
       
   293                     SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
       
   294             }
       
   295         else
       
   296             {
       
   297             DisplayText("TMS downlink failed: ", status);
       
   298             }
       
   299         }
       
   300     return status;
       
   301     }
       
   302 
       
   303 gint QTmsTestEngine::CreateClientSource()
       
   304     {
       
   305     gint status(QTMS_RESULT_SUCCESS);
       
   306 
       
   307     if (iFactory && !iTmsClientSource)
       
   308         {
       
   309         status = iFactory->CreateSource(QTMS_SOURCE_CLIENT, iTmsClientSource);
       
   310         if (status == QTMS_RESULT_SUCCESS)
       
   311             {
       
   312             DisplayText("TMS clientsource created");
       
   313             }
       
   314         else
       
   315             {
       
   316             DisplayText("TMS clientsource failed: ", status);
       
   317             }
       
   318         }
       
   319     return status;
       
   320     }
       
   321 
       
   322 gint QTmsTestEngine::CreateModemSource()
       
   323     {
       
   324     gint status(QTMS_RESULT_SUCCESS);
       
   325 
       
   326     if (iFactory && !iTmsModemSource)
       
   327         {
       
   328         status = iFactory->CreateSource(QTMS_SOURCE_MODEM, iTmsModemSource);
       
   329         if (status == QTMS_RESULT_SUCCESS)
       
   330             {
       
   331 #ifdef __TEST_CODE_COVERAGE__
       
   332             QTMSSourceType st;
       
   333             iTmsModemSource->GetType(st);
       
   334 #endif //__TEST_CODE_COVERAGE__
       
   335             DisplayText("TMS modemsource created");
       
   336             }
       
   337         else
       
   338             {
       
   339             DisplayText("TMS modemsource failed: ", status);
       
   340             }
       
   341         }
       
   342     return status;
       
   343     }
       
   344 
       
   345 gint QTmsTestEngine::AddClientSourceToStream()
       
   346     {
       
   347     gint status(QTMS_RESULT_SUCCESS);
       
   348     if (iTmsDnlink && iTmsClientSource)
       
   349         {
       
   350         connect(static_cast<QTMSClientSource*> (iTmsClientSource),
       
   351                 SIGNAL(FillBuffer(QTMSBuffer&)), this,
       
   352                 SLOT(FillBuffer(QTMSBuffer&)));
       
   353         status = iTmsDnlink->AddSource(iTmsClientSource);
       
   354 
       
   355 #ifdef __TEST_CODE_COVERAGE__
       
   356         QTMSSourceType st;
       
   357         static_cast<QTMSClientSource*>(iTmsClientSource)->GetType(st);
       
   358         gboolean enqueue(false);
       
   359         static_cast<QTMSClientSource*>(iTmsClientSource)->GetEnqueueMode(enqueue);
       
   360         static_cast<QTMSClientSource*>(iTmsClientSource)->SetEnqueueMode(FALSE);
       
   361         static_cast<QTMSClientSource*>(iTmsClientSource)->Flush();
       
   362 #endif //__TEST_CODE_COVERAGE__
       
   363         }
       
   364     return status;
       
   365     }
       
   366 
       
   367 gint QTmsTestEngine::AddModemSourceToStream()
       
   368     {
       
   369     gint status(QTMS_RESULT_SUCCESS);
       
   370     if (iTmsDnlink && iTmsModemSource)
       
   371         {
       
   372         status = iTmsDnlink->AddSource(iTmsModemSource);
       
   373         }
       
   374     return status;
       
   375     }
       
   376 
       
   377 gint QTmsTestEngine::CreateClientSink()
       
   378     {
       
   379     gint status(QTMS_RESULT_SUCCESS);
       
   380 
       
   381     if (iFactory && !iTmsClientSink)
       
   382         {
       
   383         status = iFactory->CreateSink(QTMS_SINK_CLIENT, iTmsClientSink);
       
   384         if (status == QTMS_RESULT_SUCCESS)
       
   385             {
       
   386             DisplayText("TMS client sink created");
       
   387             }
       
   388         else
       
   389             {
       
   390             DisplayText("TMS client sink failed: ", status);
       
   391             }
       
   392         }
       
   393     return status;
       
   394     }
       
   395 
       
   396 gint QTmsTestEngine::CreateModemSink()
       
   397     {
       
   398     gint status(QTMS_RESULT_SUCCESS);
       
   399 
       
   400     if (iFactory && !iTmsModemSink)
       
   401         {
       
   402         status = iFactory->CreateSink(QTMS_SINK_MODEM, iTmsModemSink);
       
   403         if (status == QTMS_RESULT_SUCCESS)
       
   404             {
       
   405 #ifdef __TEST_CODE_COVERAGE__
       
   406             QTMSSinkType st;
       
   407             iTmsModemSink->GetType(st);
       
   408 #endif  //__TEST_CODE_COVERAGE__
       
   409             DisplayText("TMS modem sink created");
       
   410             }
       
   411         else
       
   412             {
       
   413             DisplayText("TMS modem sink failed: ", status);
       
   414             }
       
   415         }
       
   416     return status;
       
   417     }
       
   418 
       
   419 gint QTmsTestEngine::AddClientSinkToStream()
       
   420     {
       
   421     gint status(QTMS_RESULT_SUCCESS);
       
   422 
       
   423     if (iTmsUplink && iTmsClientSink)
       
   424         {
       
   425         connect(static_cast<QTMSClientSink*> (iTmsClientSink),
       
   426                 SIGNAL(ProcessBuffer(const QTMSBuffer*)), this,
       
   427                 SLOT(ProcessBuffer(const QTMSBuffer*)));
       
   428         status = iTmsUplink->AddSink(iTmsClientSink);
       
   429         }
       
   430     return status;
       
   431     }
       
   432 
       
   433 gint QTmsTestEngine::AddModemSinkToStream()
       
   434     {
       
   435     gint status(QTMS_RESULT_SUCCESS);
       
   436 
       
   437     if (iTmsUplink && iTmsModemSink)
       
   438         {
       
   439         status = iTmsUplink->AddSink(iTmsModemSink);
       
   440         }
       
   441     return status;
       
   442     }
       
   443 
       
   444 gint QTmsTestEngine::CreateMicSource()
       
   445     {
       
   446     gint status(QTMS_RESULT_SUCCESS);
       
   447 
       
   448     if (iFactory && !iTmsMicSource)
       
   449         {
       
   450         status = iFactory->CreateSource(QTMS_SOURCE_MIC, iTmsMicSource);
       
   451         if (status == QTMS_RESULT_SUCCESS)
       
   452             {
       
   453             DisplayText("TMS mic source created");
       
   454             }
       
   455         else
       
   456             {
       
   457             DisplayText("TMS mic source failed: ", status);
       
   458             }
       
   459         }
       
   460     return status;
       
   461     }
       
   462 
       
   463 gint QTmsTestEngine::AddMicSourceToStream()
       
   464     {
       
   465     gint status(QTMS_RESULT_SUCCESS);
       
   466     if (iTmsUplink && iTmsMicSource)
       
   467         {
       
   468         status = iTmsUplink->AddSource(iTmsMicSource);
       
   469         }
       
   470     return status;
       
   471     }
       
   472 
       
   473 gint QTmsTestEngine::CreateSpeakerSink()
       
   474     {
       
   475     gint status(QTMS_RESULT_SUCCESS);
       
   476 
       
   477     if (iFactory && !iTmsSpeakerSink)
       
   478         {
       
   479         status = iFactory->CreateSink(QTMS_SINK_SPEAKER, iTmsSpeakerSink);
       
   480         if (status == QTMS_RESULT_SUCCESS)
       
   481             {
       
   482             DisplayText("TMS speaker sink created");
       
   483             }
       
   484         else
       
   485             {
       
   486             DisplayText("TMS speaker sink failed: ", status);
       
   487             }
       
   488         }
       
   489     return status;
       
   490     }
       
   491 
       
   492 gint QTmsTestEngine::AddSpeakerSinkToStream()
       
   493     {
       
   494     gint status(QTMS_RESULT_SUCCESS);
       
   495     if (iTmsDnlink && iTmsSpeakerSink)
       
   496         {
       
   497         status = iTmsDnlink->AddSink(iTmsSpeakerSink);
       
   498         }
       
   499     return status;
       
   500     }
       
   501 
       
   502 // ----------------------------------------------------------------------------
       
   503 // QTmsTestEngine::SetCallType
       
   504 //
       
   505 // ----------------------------------------------------------------------------
       
   506 //
       
   507 void QTmsTestEngine::SetCallType(QTMSCallType calltype)
       
   508     {
       
   509     gint status(KErrNotFound);
       
   510 
       
   511 #ifdef __PROFILING_ENABLED__
       
   512     TAG_CALLBACK_TIME_PROFILING_START;
       
   513 #endif //__PROFILING_ENABLED__
       
   514 
       
   515     if (iFactory)
       
   516         {
       
   517         iCallType = calltype;
       
   518 
       
   519         if (!iTmsCall)
       
   520             {
       
   521             gboolean issupported(FALSE);
       
   522             iFactory->IsCallTypeSupported(iCallType, issupported);
       
   523             if (issupported)
       
   524                 {
       
   525                 status = iFactory->CreateCall(iCallType, iTmsCall);
       
   526                 }
       
   527             else
       
   528                 {
       
   529                 status = KErrNotSupported;
       
   530                 }
       
   531             }
       
   532 
       
   533         iCallType = iTmsCall->GetCallType();
       
   534 
       
   535         if (status == QTMS_RESULT_SUCCESS)
       
   536             {
       
   537             DisplayText("Tms call created");
       
   538             }
       
   539         else
       
   540             {
       
   541             DisplayText("Tms call creation failed: ", status);
       
   542             }
       
   543         }
       
   544     if (status == QTMS_RESULT_SUCCESS)
       
   545         {
       
   546         status = CreateUplink();
       
   547         }
       
   548     if (status == QTMS_RESULT_SUCCESS)
       
   549         {
       
   550         status = CreateDownlink();
       
   551         }
       
   552     if (iCallType == QTMS_CALL_IP)
       
   553         {
       
   554         if (status == QTMS_RESULT_SUCCESS)
       
   555             {
       
   556             status = CreateMicSource();
       
   557             status |= AddMicSourceToStream();
       
   558             status |= CreateClientSink();
       
   559             status |= AddClientSinkToStream();
       
   560             }
       
   561 
       
   562         if (status == QTMS_RESULT_SUCCESS)
       
   563             {
       
   564             status |= CreateClientSource();
       
   565             status |= AddClientSourceToStream();
       
   566             status |= CreateSpeakerSink();
       
   567             status |= AddSpeakerSinkToStream();
       
   568             }
       
   569         }
       
   570     else if (iCallType == QTMS_CALL_CS)
       
   571         {
       
   572         if (status == QTMS_RESULT_SUCCESS)
       
   573             {
       
   574             status = CreateMicSource();
       
   575             status |= AddMicSourceToStream();
       
   576             status |= CreateModemSink();
       
   577             status |= AddModemSinkToStream();
       
   578             }
       
   579         if (status == QTMS_RESULT_SUCCESS)
       
   580             {
       
   581             status = CreateModemSource();
       
   582             status |= AddModemSourceToStream();
       
   583             status |= CreateSpeakerSink();
       
   584             status |= AddSpeakerSinkToStream();
       
   585             }
       
   586         }
       
   587 
       
   588     if (status == QTMS_RESULT_SUCCESS)
       
   589         {
       
   590         status = CreateVolumeEffect();
       
   591         status |= AddVolumeEffectToStream();
       
   592         status |= CreateGainEffect();
       
   593         status |= AddGainEffectToStream();
       
   594         }
       
   595 
       
   596     //NOTE: CS does not call SetDownlinkFormat/SetUplinkFormat
       
   597     //so it is OK to open downlink and uplink at this point.
       
   598     if (status == QTMS_RESULT_SUCCESS && iCallType == QTMS_CALL_CS)
       
   599         {
       
   600         // To avoid asyc calback racing situation, it may be safer to
       
   601         // start second stream after receiving TMS_STREAM_INITIALIZED event.
       
   602         // But for now, let's try opening both at the same time.
       
   603         OpenDownlink();
       
   604         OpenUplink();
       
   605         }
       
   606     }
       
   607 
       
   608 // ----------------------------------------------------------------------------
       
   609 // QTmsTestEngine::GetSupportedDownlinkFormats
       
   610 //
       
   611 // ----------------------------------------------------------------------------
       
   612 //
       
   613 void QTmsTestEngine::GetSupportedDownlinkFormats(TBool aDisplayList)
       
   614     {
       
   615     gint status(QTMS_RESULT_SUCCESS);
       
   616 
       
   617     if (iFactory)
       
   618         {
       
   619         status = iFactory->GetSupportedFormats(QTMS_STREAM_DOWNLINK,
       
   620                 iDnlCodecs);
       
   621 
       
   622         if (status != QTMS_RESULT_SUCCESS)
       
   623             {
       
   624             DisplayText("DNL Codecs retrieve error: ", status);
       
   625             }
       
   626 
       
   627         if (iDnlCodecs.size() > 0 && aDisplayList)
       
   628             {
       
   629             DisplayText("Supported DNL codecs");
       
   630             std::vector<QTMSFormat*>::iterator itDnlCodecs =
       
   631                     iDnlCodecs.begin();
       
   632             QTMSFormatType fmttype;
       
   633             for (; itDnlCodecs < iDnlCodecs.end(); itDnlCodecs++)
       
   634                 {
       
   635                 (*itDnlCodecs)->GetType(fmttype);
       
   636                 DisplayFormat(fmttype);
       
   637                 }
       
   638             gint size = iDnlCodecs.size();
       
   639             for (gint i = 0; i < size; i++)
       
   640                 {
       
   641                 itDnlCodecs = iDnlCodecs.begin();
       
   642                 iFactory->DeleteFormat(*itDnlCodecs);
       
   643                 iDnlCodecs.erase(itDnlCodecs);
       
   644                 }
       
   645             }
       
   646         }
       
   647     }
       
   648 
       
   649 // ----------------------------------------------------------------------------
       
   650 // QTmsTestEngine::GetSupportedUplinkFormats
       
   651 //
       
   652 // ----------------------------------------------------------------------------
       
   653 //
       
   654 void QTmsTestEngine::GetSupportedUplinkFormats(TBool aDisplayList)
       
   655     {
       
   656     gint status(QTMS_RESULT_SUCCESS);
       
   657 
       
   658     if (iFactory)
       
   659         {
       
   660         status = iFactory->GetSupportedFormats(QTMS_STREAM_UPLINK, iUplCodecs);
       
   661         if (status != QTMS_RESULT_SUCCESS)
       
   662             {
       
   663             DisplayText("UPL Codecs retrieve error: ", status);
       
   664             }
       
   665 
       
   666         if (iUplCodecs.size() > 0 && aDisplayList)
       
   667             {
       
   668             DisplayText("Supported UPL codecs");
       
   669             std::vector<QTMSFormat*>::iterator codecs = iUplCodecs.begin();
       
   670             QTMSFormatType fmttype;
       
   671             for (; codecs < iUplCodecs.end(); codecs++)
       
   672                 {
       
   673                 (*codecs)->GetType(fmttype);
       
   674                 DisplayFormat(fmttype);
       
   675                 }
       
   676             gint size = iUplCodecs.size();
       
   677             for (gint i = 0; i < size; i++)
       
   678                 {
       
   679                 codecs = iUplCodecs.begin();
       
   680                 iFactory->DeleteFormat(*codecs);
       
   681                 iUplCodecs.erase(codecs);
       
   682                 }
       
   683             }
       
   684         }
       
   685     }
       
   686 
       
   687 // ----------------------------------------------------------------------------
       
   688 // QTmsTestEngine::DisplayFormat
       
   689 //
       
   690 // ----------------------------------------------------------------------------
       
   691 //
       
   692 void QTmsTestEngine::DisplayFormat(QTMSFormatType aFormat)
       
   693     {
       
   694     switch (aFormat)
       
   695         {
       
   696         case QTMS_FORMAT_AMR:
       
   697             DisplayText("AMR-NB");
       
   698             break;
       
   699         case QTMS_FORMAT_G711:
       
   700             DisplayText("G.711");
       
   701             break;
       
   702         case QTMS_FORMAT_G729:
       
   703             DisplayText("G.729");
       
   704             break;
       
   705         case QTMS_FORMAT_ILBC:
       
   706             DisplayText("iLBC");
       
   707             break;
       
   708         case QTMS_FORMAT_PCM:
       
   709             DisplayText("PCM-16");
       
   710             break;
       
   711         default:
       
   712             break;
       
   713         }
       
   714     }
       
   715 
       
   716 // ----------------------------------------------------------------------------
       
   717 // QTmsTestEngine::SetDownlinkFormat()
       
   718 //
       
   719 // ----------------------------------------------------------------------------
       
   720 //
       
   721 void QTmsTestEngine::SetDownlinkFormat(QTMSFormatType aCodecFormat)
       
   722     {
       
   723     gint status(QTMS_RESULT_SUCCESS);
       
   724 
       
   725     if (!iTmsCall)
       
   726         {
       
   727         SetCallType(QTMS_CALL_IP);
       
   728         }
       
   729     if (iFactory && iDecFormatIntfc)
       
   730         {
       
   731         iFactory->DeleteFormat(iDecFormatIntfc);
       
   732         }
       
   733 
       
   734     iDnLinkCodec = aCodecFormat;
       
   735 
       
   736     if (iFactory && iTmsDnlink)
       
   737         {
       
   738         status = iFactory->CreateFormat(iDnLinkCodec, iDecFormatIntfc);
       
   739         status |= iTmsDnlink->SetFormat(iDecFormatIntfc);
       
   740         }
       
   741 
       
   742 #ifdef __TEST_CODE_COVERAGE__
       
   743     TMSFormatType ft;
       
   744 #endif //__TEST_CODE_COVERAGE__
       
   745 
       
   746     switch (iDnLinkCodec)
       
   747         {
       
   748         case QTMS_FORMAT_G711:
       
   749             {
       
   750 #ifdef __TEST_CODE_COVERAGE__
       
   751             status = iDecFormatIntfc->GetType(ft);
       
   752             if (ft != QTMS_FORMAT_G711)
       
   753                 {
       
   754                 status = KErrArgument;
       
   755                 }
       
   756 #endif //__TEST_CODE_COVERAGE__
       
   757             DisplayText("G.711 DNL Codec Set");
       
   758             break;
       
   759             }
       
   760         case QTMS_FORMAT_G729:
       
   761             {
       
   762 #ifdef __TEST_CODE_COVERAGE__
       
   763             status = iDecFormatIntfc->GetType(ft);
       
   764             if (ft != QTMS_FORMAT_G729)
       
   765                 {
       
   766                 status = KErrArgument;
       
   767                 }
       
   768 #endif //__TEST_CODE_COVERAGE__
       
   769             DisplayText("G.729 DNL Codec Set");
       
   770             break;
       
   771             }
       
   772         case QTMS_FORMAT_ILBC:
       
   773             {
       
   774 #ifdef __TEST_CODE_COVERAGE__
       
   775             status = iDecFormatIntfc->GetType(ft);
       
   776             if (ft != QTMS_FORMAT_ILBC)
       
   777                 {
       
   778                 status = KErrArgument;
       
   779                 }
       
   780 #endif //__TEST_CODE_COVERAGE__
       
   781             DisplayText("iLBC DNL Codec Set");
       
   782             break;
       
   783             }
       
   784         case QTMS_FORMAT_AMR:
       
   785             {
       
   786 #ifdef __TEST_CODE_COVERAGE__
       
   787             status = iDecFormatIntfc->GetType(ft);
       
   788             if (ft != QTMS_FORMAT_AMR)
       
   789                 {
       
   790                 status = KErrArgument;
       
   791                 }
       
   792 #endif //__TEST_CODE_COVERAGE__
       
   793             DisplayText("AMR-NB DNL Codec Set");
       
   794             break;
       
   795             }
       
   796         case QTMS_FORMAT_PCM:
       
   797             {
       
   798 #ifdef __TEST_CODE_COVERAGE__
       
   799             status = iDecFormatIntfc->GetType(ft);
       
   800             if (ft != QTMS_FORMAT_PCM)
       
   801                 {
       
   802                 status = KErrArgument;
       
   803                 }
       
   804 #endif //__TEST_CODE_COVERAGE__
       
   805             DisplayText("PCM-16 DNL Codec Set");
       
   806             break;
       
   807             }
       
   808         default:
       
   809             {
       
   810             status = KErrNotSupported;
       
   811             }
       
   812         }
       
   813 
       
   814     if (status == QTMS_RESULT_SUCCESS)
       
   815         {
       
   816         OpenDownlink(); //Initialize DNL
       
   817         }
       
   818     }
       
   819 
       
   820 // ----------------------------------------------------------------------------
       
   821 // QTmsTestEngine::OpenDownlink()
       
   822 //
       
   823 // ----------------------------------------------------------------------------
       
   824 //
       
   825 void QTmsTestEngine::OpenDownlink()
       
   826     {
       
   827     gint status(QTMS_RESULT_SUCCESS);
       
   828 
       
   829     if (iTmsDnlink)
       
   830         {
       
   831         status = iTmsDnlink->Init();
       
   832         if (status != QTMS_RESULT_SUCCESS)
       
   833             {
       
   834             DisplayText("DNL init error: ", status);
       
   835             }
       
   836         }
       
   837     }
       
   838 
       
   839 // ----------------------------------------------------------------------------
       
   840 // QTmsTestEngine::StartDownlink()
       
   841 //
       
   842 // ----------------------------------------------------------------------------
       
   843 //
       
   844 void QTmsTestEngine::StartDownlink()
       
   845     {
       
   846     if (iDnLinkStatus == EReady)
       
   847         {
       
   848 #ifdef __TEST_CODE_COVERAGE__
       
   849         ConfigureDecoder();
       
   850         gint id = iTmsDnlink->GetStreamId();
       
   851 #endif //__TEST_CODE_COVERAGE__
       
   852 
       
   853         iTmsDnlink->Start(2); //retry for ~2 sec
       
   854         iDnLinkStatus = EStreaming;
       
   855 #ifdef __WINSCW__
       
   856         iBufIndex = 0;
       
   857 #endif //__WINSCW__
       
   858         }
       
   859     else
       
   860         {
       
   861         DisplayText("DNL not ready");
       
   862         }
       
   863     }
       
   864 
       
   865 // ----------------------------------------------------------------------------
       
   866 // QTmsTestEngine::StopDownlink()
       
   867 //
       
   868 // ----------------------------------------------------------------------------
       
   869 //
       
   870 void QTmsTestEngine::StopDownlink()
       
   871     {
       
   872     if (iDnLinkStatus == EStreaming)
       
   873         {
       
   874 #ifdef __TEST_CODE_COVERAGE__
       
   875         iTmsDnlink->Pause();
       
   876         iTmsDnlink->GetState();
       
   877 #endif //__TEST_CODE_COVERAGE__
       
   878 
       
   879         iTmsDnlink->Stop();
       
   880         iDnLinkStatus = EReady;
       
   881         iOneTouchLoopback = EFalse;
       
   882         DisplayText("DNL stopped");
       
   883         }
       
   884     }
       
   885 
       
   886 // ----------------------------------------------------------------------------
       
   887 // QTmsTestEngine::CloseDownlink()
       
   888 //
       
   889 // ----------------------------------------------------------------------------
       
   890 //
       
   891 void QTmsTestEngine::CloseDownlink()
       
   892     {
       
   893     if (iTmsDnlink && iDnLinkStatus != ENotReady)
       
   894         {
       
   895         if (iTmsDnlinkEffect)
       
   896             {
       
   897             iTmsDnlink->RemoveEffect(iTmsDnlinkEffect);
       
   898             }
       
   899         if (iTmsClientSource)
       
   900             {
       
   901             iTmsDnlink->RemoveSource(iTmsClientSource);
       
   902             }
       
   903         if (iTmsModemSource)
       
   904             {
       
   905             iTmsDnlink->RemoveSource(iTmsModemSource);
       
   906             }
       
   907         if (iTmsSpeakerSink)
       
   908             {
       
   909             iTmsDnlink->RemoveSink(iTmsSpeakerSink);
       
   910             }
       
   911         iTmsDnlink->Deinit();
       
   912         iDnLinkStatus = ENotReady;
       
   913         }
       
   914     iPlayBufReady = EFalse;
       
   915     iOneTouchLoopback = EFalse;
       
   916     }
       
   917 
       
   918 gint QTmsTestEngine::CreateVolumeEffect()
       
   919     {
       
   920     gint status(QTMS_RESULT_SUCCESS);
       
   921 
       
   922     if (iFactory && iTmsDnlink && !iTmsDnlinkEffect)
       
   923         {
       
   924         status = iFactory->CreateEffect(QTMS_EFFECT_VOLUME, iTmsDnlinkEffect);
       
   925         }
       
   926     return status;
       
   927     }
       
   928 
       
   929 gint QTmsTestEngine::AddVolumeEffectToStream()
       
   930     {
       
   931     gint status(QTMS_RESULT_SUCCESS);
       
   932 
       
   933     if (iTmsDnlink && iTmsDnlinkEffect)
       
   934         {
       
   935         status = iTmsDnlink->AddEffect(iTmsDnlinkEffect);
       
   936         }
       
   937     return status;
       
   938     }
       
   939 
       
   940 gint QTmsTestEngine::CreateGainEffect()
       
   941     {
       
   942     gint status(QTMS_RESULT_SUCCESS);
       
   943 
       
   944     if (iFactory && iTmsUplink && !iTmsUplinkEffect)
       
   945         {
       
   946         status = iFactory->CreateEffect(QTMS_EFFECT_GAIN, iTmsUplinkEffect);
       
   947         }
       
   948     return status;
       
   949     }
       
   950 
       
   951 gint QTmsTestEngine::CreateGlobalRouting()
       
   952     {
       
   953     gint status(QTMS_RESULT_SUCCESS);
       
   954 
       
   955     if (iFactory)
       
   956         {
       
   957         status = iFactory->CreateGlobalRouting(iTmsGlobalRouting);
       
   958         if (status == QTMS_RESULT_SUCCESS)
       
   959             {
       
   960             DisplayText("TMS routing created");
       
   961             connect(iTmsGlobalRouting,
       
   962                     SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput)),
       
   963                     this,
       
   964                     SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput)));
       
   965             //   DisplayText("connected to routing signal");
       
   966             }
       
   967         else
       
   968             {
       
   969             DisplayText("Global routing failed: ", status);
       
   970             }
       
   971         }
       
   972     return status;
       
   973     }
       
   974 
       
   975 gint QTmsTestEngine::AddGainEffectToStream()
       
   976     {
       
   977     gint status(QTMS_RESULT_SUCCESS);
       
   978 
       
   979     if (iTmsUplink && iTmsUplinkEffect)
       
   980         {
       
   981         status = iTmsUplink->AddEffect(iTmsUplinkEffect);
       
   982         }
       
   983     return status;
       
   984     }
       
   985 
       
   986 gint QTmsTestEngine::CreateRingTonePlayer()
       
   987     {
       
   988     gint status(QTMS_RESULT_SUCCESS);
       
   989 
       
   990     if (iFactory)
       
   991         {
       
   992         status = iFactory->CreateRingTonePlayer(iTmsRingTonePlayer);
       
   993 
       
   994         if (iTmsRingTonePlayer && status == QTMS_RESULT_SUCCESS)
       
   995             {
       
   996             connect(iTmsRingTonePlayer,
       
   997                     SIGNAL(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)),
       
   998                     this,
       
   999                     SLOT(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)));
       
  1000             DisplayText("RingTone Player created");
       
  1001             }
       
  1002         else
       
  1003             {
       
  1004             DisplayText("RT create failed: ", status);
       
  1005             }
       
  1006         }
       
  1007     return status;
       
  1008     }
       
  1009 
       
  1010 // ----------------------------------------------------------------------------
       
  1011 // QTmsTestEngine::ConfigureDecoder()
       
  1012 //
       
  1013 // ----------------------------------------------------------------------------
       
  1014 //
       
  1015 void QTmsTestEngine::ConfigureDecoder()
       
  1016     {
       
  1017     // NOTE: These calls can ONLY be made when codec is in a STOPPED state.
       
  1018 
       
  1019     switch (iDnLinkCodec)
       
  1020         {
       
  1021         case QTMS_FORMAT_G711:
       
  1022             {
       
  1023             gboolean cng(TRUE);
       
  1024             static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetCNG(cng);
       
  1025             static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetCNG(cng);
       
  1026             gboolean plc(FALSE);
       
  1027             static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetPlc(plc);
       
  1028             static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetPlc(plc);
       
  1029             QTMSG711CodecMode mode(QTMS_G711_CODEC_MODE_ALAW);
       
  1030             static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetMode(mode);
       
  1031             static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetMode(mode);
       
  1032             break;
       
  1033             }
       
  1034         case QTMS_FORMAT_ILBC:
       
  1035             {
       
  1036             gboolean cng(TRUE);
       
  1037             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->SetCNG(cng);
       
  1038             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->GetCNG(cng);
       
  1039             QTMSILBCCodecMode mode(QTMS_ILBC_CODEC_MODE_20MS_FRAME);
       
  1040             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->SetMode(mode);
       
  1041             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->GetMode(mode);
       
  1042             break;
       
  1043             }
       
  1044         case QTMS_FORMAT_G729:
       
  1045         case QTMS_FORMAT_AMR:
       
  1046         case QTMS_FORMAT_PCM:
       
  1047         default:
       
  1048             {
       
  1049             break;
       
  1050             }
       
  1051         }
       
  1052     }
       
  1053 
       
  1054 // ----------------------------------------------------------------------------
       
  1055 // QTmsTestEngine::GetMaxVolume()
       
  1056 //
       
  1057 // ----------------------------------------------------------------------------
       
  1058 //
       
  1059 void QTmsTestEngine::GetMaxVolume()
       
  1060     {
       
  1061     if (iTmsDnlinkEffect)
       
  1062         {
       
  1063         static_cast<QTMSVolumeEffect*> (iTmsDnlinkEffect)->GetMaxLevel(
       
  1064                 iMaxVolume);
       
  1065         }
       
  1066     DisplayText("Max Volume: ", iMaxVolume);
       
  1067     }
       
  1068 
       
  1069 // ----------------------------------------------------------------------------
       
  1070 // QTmsTestEngine::GetVolume
       
  1071 //
       
  1072 // ----------------------------------------------------------------------------
       
  1073 //
       
  1074 void QTmsTestEngine::GetVolume()
       
  1075     {
       
  1076     if (iTmsDnlinkEffect)
       
  1077         {
       
  1078         static_cast<QTMSVolumeEffect*> (iTmsDnlinkEffect)->GetLevel(iVolume);
       
  1079         }
       
  1080     DisplayText("Volume ", iVolume);
       
  1081     }
       
  1082 
       
  1083 // ----------------------------------------------------------------------------
       
  1084 // QTmsTestEngine::MuteSpeaker()
       
  1085 //
       
  1086 // ----------------------------------------------------------------------------
       
  1087 //
       
  1088 void QTmsTestEngine::MuteSpeaker()
       
  1089     {
       
  1090     SetVolume(0);
       
  1091     }
       
  1092 
       
  1093 // ----------------------------------------------------------------------------
       
  1094 // QTmsTestEngine::SetMaxVolume
       
  1095 //
       
  1096 // ----------------------------------------------------------------------------
       
  1097 //
       
  1098 void QTmsTestEngine::SetMaxVolume()
       
  1099     {
       
  1100     SetVolume(iMaxVolume);
       
  1101     }
       
  1102 
       
  1103 // ----------------------------------------------------------------------------
       
  1104 // QTmsTestEngine::SetVolume
       
  1105 //
       
  1106 // ----------------------------------------------------------------------------
       
  1107 //
       
  1108 void QTmsTestEngine::SetVolume(guint aVolume)
       
  1109     {
       
  1110     iVolume = aVolume;
       
  1111 
       
  1112     if (iTmsDnlinkEffect)
       
  1113         {
       
  1114         static_cast<QTMSVolumeEffect*> (iTmsDnlinkEffect)->SetLevel(aVolume);
       
  1115         }
       
  1116     else
       
  1117         {
       
  1118         DisplayText("Create Dnlink VolumeEffect first");
       
  1119         }
       
  1120     }
       
  1121 
       
  1122 // ----------------------------------------------------------------------------
       
  1123 // QTmsTestEngine::VolumeUp()
       
  1124 //
       
  1125 // ----------------------------------------------------------------------------
       
  1126 //
       
  1127 void QTmsTestEngine::VolumeUp()
       
  1128     {
       
  1129     if ((iDnLinkStatus == EReady || iDnLinkStatus == EStreaming)
       
  1130             && iTmsDnlinkEffect)
       
  1131         {
       
  1132         if (iVolume < iMaxVolume)
       
  1133             {
       
  1134             static_cast<QTMSVolumeEffect*> (iTmsDnlinkEffect)->SetLevel(
       
  1135                     ++iVolume);
       
  1136             }
       
  1137         }
       
  1138     else
       
  1139         {
       
  1140         DisplayText("Create DNL first");
       
  1141         }
       
  1142     }
       
  1143 
       
  1144 // ----------------------------------------------------------------------------
       
  1145 // QTmsTestEngine::VolumeDn()
       
  1146 //
       
  1147 // ----------------------------------------------------------------------------
       
  1148 //
       
  1149 void QTmsTestEngine::VolumeDn()
       
  1150     {
       
  1151     if ((iDnLinkStatus == EReady || iDnLinkStatus == EStreaming)
       
  1152             && iTmsDnlinkEffect)
       
  1153         {
       
  1154         if (iVolume > 0)
       
  1155             {
       
  1156             static_cast<QTMSVolumeEffect*> (iTmsDnlinkEffect)->SetLevel(
       
  1157                     --iVolume);
       
  1158             }
       
  1159         }
       
  1160     else
       
  1161         {
       
  1162         DisplayText("Open DNL first");
       
  1163         }
       
  1164     }
       
  1165 
       
  1166 // ----------------------------------------------------------------------------
       
  1167 // QTmsTestEngine::OpenUplink()
       
  1168 //
       
  1169 // ----------------------------------------------------------------------------
       
  1170 //
       
  1171 void QTmsTestEngine::OpenUplink()
       
  1172     {
       
  1173     gint status = QTMS_RESULT_SUCCESS;
       
  1174 
       
  1175     if (iTmsUplink)
       
  1176         {
       
  1177         status = iTmsUplink->Init(3); //retry for ~3 sec
       
  1178         if (status != QTMS_RESULT_SUCCESS)
       
  1179             {
       
  1180             DisplayText("UPL init error: ", status);
       
  1181             }
       
  1182         }
       
  1183     }
       
  1184 
       
  1185 // ----------------------------------------------------------------------------
       
  1186 // QTmsTestEngine::StartUplink()
       
  1187 //
       
  1188 // ----------------------------------------------------------------------------
       
  1189 //
       
  1190 void QTmsTestEngine::StartUplink()
       
  1191     {
       
  1192     if (iUpLinkStatus == EReady)
       
  1193         {
       
  1194 #ifdef __TEST_CODE_COVERAGE__
       
  1195         ConfigureEncoder();
       
  1196         ToggleVad();
       
  1197         GetVad();
       
  1198         GetSupportedBitrates();
       
  1199         SelectMaxBitrate();
       
  1200         GetBitrate();
       
  1201         gint id = iTmsUplink->GetStreamId();
       
  1202 #endif //__TEST_CODE_COVERAGE__
       
  1203 
       
  1204         iTmsUplink->Start(4); //retry for ~4 sec
       
  1205         iUpLinkStatus = EStreaming;
       
  1206         }
       
  1207     else
       
  1208         {
       
  1209         DisplayText("UPL not ready");
       
  1210         }
       
  1211     }
       
  1212 
       
  1213 // ----------------------------------------------------------------------------
       
  1214 // QTmsTestEngine::StopUplink()
       
  1215 //
       
  1216 // ----------------------------------------------------------------------------
       
  1217 //
       
  1218 void QTmsTestEngine::StopUplink()
       
  1219     {
       
  1220     if (iUpLinkStatus == EStreaming)
       
  1221         {
       
  1222         iTmsUplink->Stop();
       
  1223         iUpLinkStatus = EReady;
       
  1224         iOneTouchLoopback = EFalse;
       
  1225         DisplayText("UPL stopped");
       
  1226         }
       
  1227     }
       
  1228 
       
  1229 // ----------------------------------------------------------------------------
       
  1230 // QTmsTestEngine::CloseUplink()
       
  1231 //
       
  1232 // ----------------------------------------------------------------------------
       
  1233 //
       
  1234 void QTmsTestEngine::CloseUplink()
       
  1235     {
       
  1236     iRecBufReady = EFalse;
       
  1237     iOneTouchLoopback = EFalse;
       
  1238 
       
  1239     if (iTmsUplink && iUpLinkStatus != ENotReady)
       
  1240         {
       
  1241         if (iTmsUplinkEffect)
       
  1242             {
       
  1243             iTmsUplink->RemoveEffect(iTmsUplinkEffect);
       
  1244             }
       
  1245         if (iTmsMicSource)
       
  1246             {
       
  1247             iTmsUplink->RemoveSource(iTmsMicSource);
       
  1248             }
       
  1249         if (iTmsClientSink)
       
  1250             {
       
  1251             iTmsUplink->RemoveSink(iTmsClientSink);
       
  1252             }
       
  1253         if (iTmsModemSink)
       
  1254             {
       
  1255             iTmsUplink->RemoveSink(iTmsModemSink);
       
  1256             }
       
  1257         iTmsUplink->Deinit();
       
  1258         iUpLinkStatus = ENotReady;
       
  1259         }
       
  1260     }
       
  1261 
       
  1262 // ----------------------------------------------------------------------------
       
  1263 // QTmsTestEngine::SetUplinkFormat()
       
  1264 //
       
  1265 // ----------------------------------------------------------------------------
       
  1266 //
       
  1267 void QTmsTestEngine::SetUplinkFormat(QTMSFormatType aCodecFormat)
       
  1268     {
       
  1269     gint status(QTMS_RESULT_SUCCESS);
       
  1270 
       
  1271     if (!iTmsCall)
       
  1272         {
       
  1273         SetCallType(QTMS_CALL_IP);
       
  1274         }
       
  1275     if (iFactory && iEncFormatIntfc)
       
  1276         {
       
  1277         iFactory->DeleteFormat(iEncFormatIntfc);
       
  1278         }
       
  1279 
       
  1280     iUpLinkCodec = aCodecFormat;
       
  1281 
       
  1282     if (iFactory && iTmsUplink)
       
  1283         {
       
  1284         status = iFactory->CreateFormat(iUpLinkCodec, iEncFormatIntfc);
       
  1285         status |= iTmsUplink->SetFormat(iEncFormatIntfc);
       
  1286         }
       
  1287 
       
  1288 #ifdef __TEST_CODE_COVERAGE__
       
  1289     TMSFormatType ft;
       
  1290 #endif //__TEST_CODE_COVERAGE__
       
  1291 
       
  1292     switch (iUpLinkCodec)
       
  1293         {
       
  1294         case QTMS_FORMAT_G711:
       
  1295             {
       
  1296 #ifdef __TEST_CODE_COVERAGE__
       
  1297             status = iEncFormatIntfc->GetType(ft);
       
  1298             if (ft != QTMS_FORMAT_G711)
       
  1299                 {
       
  1300                 status = KErrArgument;
       
  1301                 }
       
  1302 #endif //__TEST_CODE_COVERAGE__
       
  1303             DisplayText("G.711 UPL Codec Set");
       
  1304             break;
       
  1305             }
       
  1306         case QTMS_FORMAT_G729:
       
  1307             {
       
  1308 #ifdef __TEST_CODE_COVERAGE__
       
  1309             status = iEncFormatIntfc->GetType(ft);
       
  1310             if (ft != QTMS_FORMAT_G729)
       
  1311                 {
       
  1312                 status = KErrArgument;
       
  1313                 }
       
  1314 #endif //__TEST_CODE_COVERAGE__
       
  1315             DisplayText("G.729 UPL Codec Set");
       
  1316             break;
       
  1317             }
       
  1318         case QTMS_FORMAT_ILBC:
       
  1319             {
       
  1320 #ifdef __TEST_CODE_COVERAGE__
       
  1321             status = iEncFormatIntfc->GetType(ft);
       
  1322             if (ft != QTMS_FORMAT_ILBC)
       
  1323                 {
       
  1324                 status = KErrArgument;
       
  1325                 }
       
  1326 #endif //__TEST_CODE_COVERAGE__
       
  1327             DisplayText("iLBC UPL Codec Set");
       
  1328             break;
       
  1329             }
       
  1330         case QTMS_FORMAT_AMR:
       
  1331             {
       
  1332 #ifdef __TEST_CODE_COVERAGE__
       
  1333             status = iEncFormatIntfc->GetType(ft);
       
  1334             if (ft != QTMS_FORMAT_AMR)
       
  1335                 {
       
  1336                 status = KErrArgument;
       
  1337                 }
       
  1338 #endif //__TEST_CODE_COVERAGE__
       
  1339             DisplayText("AMR-NB UPL Codec Set");
       
  1340             break;
       
  1341             }
       
  1342         case QTMS_FORMAT_PCM:
       
  1343             {
       
  1344 #ifdef __TEST_CODE_COVERAGE__
       
  1345             status = iEncFormatIntfc->GetType(ft);
       
  1346             if (ft != QTMS_FORMAT_PCM)
       
  1347                 {
       
  1348                 status = KErrArgument;
       
  1349                 }
       
  1350 #endif //__TEST_CODE_COVERAGE__
       
  1351             DisplayText("PCM-16 UPL Codec Set");
       
  1352             break;
       
  1353             }
       
  1354         default:
       
  1355             {
       
  1356             status = KErrNotSupported;
       
  1357             }
       
  1358         }
       
  1359 
       
  1360     if (status == QTMS_RESULT_SUCCESS)
       
  1361         {
       
  1362         OpenUplink(); //Initialize UPL
       
  1363         }
       
  1364     }
       
  1365 
       
  1366 // ----------------------------------------------------------------------------
       
  1367 // QTmsTestEngine::ConfigureEncoder()
       
  1368 //
       
  1369 // ----------------------------------------------------------------------------
       
  1370 //
       
  1371 void QTmsTestEngine::ConfigureEncoder()
       
  1372     {
       
  1373     // Any of these calls can ONLY be made when encoder is in a STOPPED state.
       
  1374 
       
  1375     switch (iUpLinkCodec)
       
  1376         {
       
  1377         case QTMS_FORMAT_G711:
       
  1378             {
       
  1379             QTMSG711CodecMode mode(QTMS_G711_CODEC_MODE_ALAW);
       
  1380             static_cast<QTMSG711Format*> (iEncFormatIntfc)->SetMode(mode);
       
  1381             static_cast<QTMSG711Format*> (iEncFormatIntfc)->GetMode(mode);
       
  1382             break;
       
  1383             }
       
  1384         case QTMS_FORMAT_ILBC:
       
  1385             {
       
  1386             QTMSILBCCodecMode mode(QTMS_ILBC_CODEC_MODE_20MS_FRAME);
       
  1387             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->SetMode(mode);
       
  1388             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->GetMode(mode);
       
  1389             break;
       
  1390             }
       
  1391         case QTMS_FORMAT_G729:
       
  1392         case QTMS_FORMAT_AMR:
       
  1393         case QTMS_FORMAT_PCM:
       
  1394         default:
       
  1395             {
       
  1396             break;
       
  1397             }
       
  1398         }
       
  1399     }
       
  1400 
       
  1401 // ----------------------------------------------------------------------------
       
  1402 // QTmsTestEngine::GetMaxGain()
       
  1403 //
       
  1404 // ----------------------------------------------------------------------------
       
  1405 //
       
  1406 void QTmsTestEngine::GetMaxGain()
       
  1407     {
       
  1408     if (iTmsUplinkEffect)
       
  1409         {
       
  1410         static_cast<QTMSGainEffect*> (iTmsUplinkEffect)->GetMaxLevel(iMaxGain);
       
  1411         DisplayText("MaxGain: ", iMaxGain);
       
  1412         }
       
  1413     }
       
  1414 
       
  1415 // ----------------------------------------------------------------------------
       
  1416 // QTmsTestEngine::GetGain()
       
  1417 //
       
  1418 // ----------------------------------------------------------------------------
       
  1419 //
       
  1420 void QTmsTestEngine::GetGain()
       
  1421     {
       
  1422     guint gain;
       
  1423     if (iTmsUplinkEffect)
       
  1424         {
       
  1425         static_cast<QTMSGainEffect*> (iTmsUplinkEffect)->GetLevel(gain);
       
  1426         DisplayText("Gain: ", gain);
       
  1427         }
       
  1428     }
       
  1429 
       
  1430 // ----------------------------------------------------------------------------
       
  1431 // QTmsTestEngine::SetMaxGain()
       
  1432 //
       
  1433 // ----------------------------------------------------------------------------
       
  1434 //
       
  1435 void QTmsTestEngine::SetMaxGain()
       
  1436     {
       
  1437     static_cast<QTMSGainEffect*> (iTmsUplinkEffect)->SetLevel(iMaxGain);
       
  1438     }
       
  1439 
       
  1440 // ----------------------------------------------------------------------------
       
  1441 // QTmsTestEngine::MuteMic()
       
  1442 //
       
  1443 // ----------------------------------------------------------------------------
       
  1444 //
       
  1445 void QTmsTestEngine::MuteMic()
       
  1446     {
       
  1447     static_cast<QTMSGainEffect*> (iTmsUplinkEffect)->SetLevel(0);
       
  1448     }
       
  1449 
       
  1450 // ----------------------------------------------------------------------------
       
  1451 // QTmsTestEngine::GetSupportedBitrates
       
  1452 //
       
  1453 // ----------------------------------------------------------------------------
       
  1454 //
       
  1455 void QTmsTestEngine::GetSupportedBitrates()
       
  1456     {
       
  1457     TInt status = GetSupportedBitrates(iBitratesVector);
       
  1458 
       
  1459     if (status == QTMS_RESULT_SUCCESS)
       
  1460         {
       
  1461         std::vector<guint>::iterator itBitrates = iBitratesVector.begin();
       
  1462         for (; itBitrates < iBitratesVector.end(); itBitrates++)
       
  1463             {
       
  1464             DisplayText("BR ", *itBitrates);
       
  1465             }
       
  1466         }
       
  1467     else
       
  1468         {
       
  1469         DisplayText("BR Error: ", status);
       
  1470         }
       
  1471     }
       
  1472 
       
  1473 // ----------------------------------------------------------------------------
       
  1474 // QTmsTestEngine::GetSupportedBitrates
       
  1475 //
       
  1476 // ----------------------------------------------------------------------------
       
  1477 //
       
  1478 gint QTmsTestEngine::GetSupportedBitrates(BitRateVector& aBrArr)
       
  1479     {
       
  1480     gint status = KErrNotFound;
       
  1481 
       
  1482     switch (iUpLinkCodec)
       
  1483         {
       
  1484         case QTMS_FORMAT_G711:
       
  1485             status = static_cast<QTMSG711Format*>
       
  1486                     (iEncFormatIntfc)->GetSupportedBitRates(aBrArr);
       
  1487             break;
       
  1488         case QTMS_FORMAT_G729:
       
  1489             status = static_cast<QTMSG729Format*>
       
  1490                     (iEncFormatIntfc)->GetSupportedBitRates(aBrArr);
       
  1491             break;
       
  1492         case QTMS_FORMAT_ILBC:
       
  1493             status = static_cast<QTMSILBCFormat*>
       
  1494                     (iEncFormatIntfc)->GetSupportedBitRates(aBrArr);
       
  1495             break;
       
  1496         case QTMS_FORMAT_AMR:
       
  1497             status = static_cast<QTMSAMRFormat*>
       
  1498                     (iEncFormatIntfc)->GetSupportedBitRates(aBrArr);
       
  1499             break;
       
  1500         case QTMS_FORMAT_PCM:
       
  1501         default:
       
  1502             status = KErrNotSupported;
       
  1503             break;
       
  1504         }
       
  1505     return status;
       
  1506     }
       
  1507 
       
  1508 // ----------------------------------------------------------------------------
       
  1509 // QTmsTestEngine::SelectMinBitrate
       
  1510 //
       
  1511 // ----------------------------------------------------------------------------
       
  1512 //
       
  1513 void QTmsTestEngine::SelectMinBitrate()
       
  1514     {
       
  1515     if (iBitratesVector.size() > 0)
       
  1516         {
       
  1517         std::vector<guint>::iterator bitrate = iBitratesVector.begin();
       
  1518         iBitrate = *bitrate;
       
  1519         SetBitrate(iBitrate);
       
  1520         DisplayText("BR set: ", iBitrate);
       
  1521         }
       
  1522     }
       
  1523 
       
  1524 // ----------------------------------------------------------------------------
       
  1525 // QTmsTestEngine::SelectMaxBitrate
       
  1526 //
       
  1527 // ----------------------------------------------------------------------------
       
  1528 //
       
  1529 void QTmsTestEngine::SelectMaxBitrate()
       
  1530     {
       
  1531     if (iBitratesVector.size() > 0)
       
  1532         {
       
  1533         iBitrate = iBitratesVector.back();
       
  1534         SetBitrate(iBitrate);
       
  1535         DisplayText("BR set: ", iBitrate);
       
  1536         }
       
  1537     }
       
  1538 
       
  1539 // ----------------------------------------------------------------------------
       
  1540 // QTmsTestEngine::SetBitrate
       
  1541 //
       
  1542 // ----------------------------------------------------------------------------
       
  1543 //
       
  1544 void QTmsTestEngine::SetBitrate(TUint aBitrate)
       
  1545     {
       
  1546     switch (iUpLinkCodec)
       
  1547         {
       
  1548         case QTMS_FORMAT_G711:
       
  1549             static_cast<QTMSG711Format*> (iEncFormatIntfc)->SetBitRate(
       
  1550                     aBitrate);
       
  1551             DisplayText("Set BR: ", iBitrate);
       
  1552             break;
       
  1553         case QTMS_FORMAT_G729:
       
  1554             static_cast<QTMSG729Format*> (iEncFormatIntfc)->SetBitRate(
       
  1555                     aBitrate);
       
  1556             DisplayText("Set BR: ", iBitrate);
       
  1557             break;
       
  1558         case QTMS_FORMAT_ILBC:
       
  1559             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->SetBitRate(
       
  1560                     aBitrate);
       
  1561             DisplayText("Set BR: ", iBitrate);
       
  1562             break;
       
  1563         case QTMS_FORMAT_AMR:
       
  1564             static_cast<QTMSAMRFormat*> (iEncFormatIntfc)->SetBitRate(
       
  1565                     aBitrate);
       
  1566             DisplayText("Set BR: ", iBitrate);
       
  1567             break;
       
  1568         case QTMS_FORMAT_PCM:
       
  1569         default:
       
  1570             break;
       
  1571         }
       
  1572     }
       
  1573 
       
  1574 // ----------------------------------------------------------------------------
       
  1575 // QTmsTestEngine::GetBitrate
       
  1576 //
       
  1577 // ----------------------------------------------------------------------------
       
  1578 //
       
  1579 void QTmsTestEngine::GetBitrate()
       
  1580     {
       
  1581     if (iUpLinkCodec != QTMS_FORMAT_PCM)
       
  1582         {
       
  1583         GetBitrate(iBitrate);
       
  1584         DisplayText("Current BR: ", iBitrate);
       
  1585         }
       
  1586     }
       
  1587 
       
  1588 // ----------------------------------------------------------------------------
       
  1589 // QTmsTestEngine::GetBitrate
       
  1590 //
       
  1591 // ----------------------------------------------------------------------------
       
  1592 //
       
  1593 void QTmsTestEngine::GetBitrate(TUint& aBitrate)
       
  1594     {
       
  1595     switch (iUpLinkCodec)
       
  1596         {
       
  1597         case QTMS_FORMAT_G711:
       
  1598             static_cast<QTMSG711Format*> (iEncFormatIntfc)->GetBitRate(
       
  1599                     aBitrate);
       
  1600             break;
       
  1601         case QTMS_FORMAT_G729:
       
  1602             static_cast<QTMSG729Format*> (iEncFormatIntfc)->GetBitRate(
       
  1603                     aBitrate);
       
  1604             break;
       
  1605         case QTMS_FORMAT_ILBC:
       
  1606             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->GetBitRate(
       
  1607                     aBitrate);
       
  1608             break;
       
  1609         case QTMS_FORMAT_AMR:
       
  1610             static_cast<QTMSAMRFormat*> (iEncFormatIntfc)->GetBitRate(
       
  1611                     aBitrate);
       
  1612             break;
       
  1613         case QTMS_FORMAT_PCM:
       
  1614         default:
       
  1615             break;
       
  1616         }
       
  1617     }
       
  1618 
       
  1619 // ----------------------------------------------------------------------------
       
  1620 // QTmsTestEngine::ToggleVad
       
  1621 //
       
  1622 // ----------------------------------------------------------------------------
       
  1623 //
       
  1624 void QTmsTestEngine::ToggleVad()
       
  1625     {
       
  1626     iVad = (iVad) ? EFalse : ETrue;
       
  1627 
       
  1628     switch (iUpLinkCodec)
       
  1629         {
       
  1630         case QTMS_FORMAT_G711:
       
  1631             static_cast<QTMSG711Format*> (iEncFormatIntfc)->SetVADMode(iVad);
       
  1632             DisplayText("Set VAD: ", iVad);
       
  1633             break;
       
  1634         case QTMS_FORMAT_G729:
       
  1635             static_cast<QTMSG729Format*> (iEncFormatIntfc)->SetVADMode(iVad);
       
  1636             DisplayText("Set VAD: ", iVad);
       
  1637             break;
       
  1638         case QTMS_FORMAT_ILBC:
       
  1639             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->SetVADMode(iVad);
       
  1640             DisplayText("Set VAD: ", iVad);
       
  1641             break;
       
  1642         case QTMS_FORMAT_AMR:
       
  1643             //static_cast<QTMSAMRFormat*> (iEncFormatIntfc)->SetVADMode(iVad);
       
  1644             //DisplayText("Set VAD: ", iVad);
       
  1645             break;
       
  1646         case QTMS_FORMAT_PCM:
       
  1647         default:
       
  1648             break;
       
  1649         }
       
  1650     }
       
  1651 
       
  1652 // ----------------------------------------------------------------------------
       
  1653 // QTmsTestEngine::GetVad
       
  1654 //
       
  1655 // ----------------------------------------------------------------------------
       
  1656 //
       
  1657 void QTmsTestEngine::GetVad()
       
  1658     {
       
  1659     switch (iUpLinkCodec)
       
  1660         {
       
  1661         case QTMS_FORMAT_G711:
       
  1662             static_cast<QTMSG711Format*> (iEncFormatIntfc)->GetVADMode(iVad);
       
  1663             DisplayText("Current VAD: ", iVad);
       
  1664             break;
       
  1665         case QTMS_FORMAT_G729:
       
  1666             static_cast<QTMSG729Format*> (iEncFormatIntfc)->GetVADMode(iVad);
       
  1667             DisplayText("Current VAD: ", iVad);
       
  1668             break;
       
  1669         case QTMS_FORMAT_ILBC:
       
  1670             static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->GetVADMode(iVad);
       
  1671             DisplayText("Current VAD: ", iVad);
       
  1672             break;
       
  1673         case QTMS_FORMAT_AMR:
       
  1674             //static_cast<QTMSAMRFormat*> (iEncFormatIntfc)->GetVADMode(iVad);
       
  1675             //DisplayText("Current VAD: ", iVad);
       
  1676             break;
       
  1677         case QTMS_FORMAT_PCM:
       
  1678         default:
       
  1679             break;
       
  1680         }
       
  1681     }
       
  1682 
       
  1683 // ----------------------------------------------------------------------------
       
  1684 // QTmsTestEngine::ToggleCng
       
  1685 //
       
  1686 // ----------------------------------------------------------------------------
       
  1687 //
       
  1688 void QTmsTestEngine::ToggleCng()
       
  1689     {
       
  1690     iCng = (iCng) ? EFalse : ETrue;
       
  1691 
       
  1692     switch (iDnLinkCodec)
       
  1693         {
       
  1694         case QTMS_FORMAT_G711:
       
  1695             static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetCNG(iCng);
       
  1696             DisplayText("Set CNG ", iCng);
       
  1697             break;
       
  1698         case QTMS_FORMAT_ILBC:
       
  1699             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->SetCNG(iCng);
       
  1700             DisplayText("Set CNG ", iCng);
       
  1701             break;
       
  1702         default:
       
  1703             break;
       
  1704         }
       
  1705     }
       
  1706 
       
  1707 // ----------------------------------------------------------------------------
       
  1708 // QTmsTestEngine::GetCng
       
  1709 //
       
  1710 // ----------------------------------------------------------------------------
       
  1711 //
       
  1712 void QTmsTestEngine::GetCng()
       
  1713     {
       
  1714     switch (iDnLinkCodec)
       
  1715         {
       
  1716         case QTMS_FORMAT_G711:
       
  1717             static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetCNG(iCng);
       
  1718             DisplayText("Current CNG: ", iCng);
       
  1719             break;
       
  1720         case QTMS_FORMAT_ILBC:
       
  1721             static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->GetCNG(iCng);
       
  1722             DisplayText("Current CNG: ", iCng);
       
  1723             break;
       
  1724         default:
       
  1725             break;
       
  1726         }
       
  1727     }
       
  1728 
       
  1729 // ----------------------------------------------------------------------------
       
  1730 // QTmsTestEngine::TogglePlc
       
  1731 //
       
  1732 // ----------------------------------------------------------------------------
       
  1733 //
       
  1734 void QTmsTestEngine::TogglePlc()
       
  1735     {
       
  1736     iPlc = (iPlc) ? EFalse : ETrue;
       
  1737     if (iDnLinkCodec == QTMS_FORMAT_G711)
       
  1738         {
       
  1739         static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetPlc(iPlc);
       
  1740         DisplayText("Set PLC: ", iPlc);
       
  1741         }
       
  1742     }
       
  1743 
       
  1744 // ----------------------------------------------------------------------------
       
  1745 // QTmsTestEngine::GetPlc
       
  1746 //
       
  1747 // ----------------------------------------------------------------------------
       
  1748 //
       
  1749 void QTmsTestEngine::GetPlc()
       
  1750     {
       
  1751     if (iDnLinkCodec == QTMS_FORMAT_G711)
       
  1752         {
       
  1753         static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetPlc(iPlc);
       
  1754         DisplayText("Current PLC: ", iPlc);
       
  1755         }
       
  1756     }
       
  1757 
       
  1758 // ----------------------------------------------------------------------------
       
  1759 // QTmsTestEngine::SetDnLinkG711ALAW
       
  1760 //
       
  1761 // ----------------------------------------------------------------------------
       
  1762 //
       
  1763 void QTmsTestEngine::SetDnLinkG711ALAW()
       
  1764     {
       
  1765     if (iDnLinkCodec == QTMS_FORMAT_G711)
       
  1766         {
       
  1767         static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetMode(
       
  1768                 QTMS_G711_CODEC_MODE_ALAW);
       
  1769         DisplayText("DNL G.711 Mode Set: [aLaw]");
       
  1770         }
       
  1771     }
       
  1772 
       
  1773 // ----------------------------------------------------------------------------
       
  1774 // QTmsTestEngine::SetDnLinkG711uLAW
       
  1775 //
       
  1776 // ----------------------------------------------------------------------------
       
  1777 //
       
  1778 void QTmsTestEngine::SetDnLinkG711uLAW()
       
  1779     {
       
  1780     if (iDnLinkCodec == QTMS_FORMAT_G711)
       
  1781         {
       
  1782         static_cast<QTMSG711Format*> (iDecFormatIntfc)->SetMode(
       
  1783                 QTMS_G711_CODEC_MODE_MULAW);
       
  1784         DisplayText("DNL G.711 Mode Set: [uLaw]");
       
  1785         }
       
  1786     }
       
  1787 
       
  1788 // ----------------------------------------------------------------------------
       
  1789 // QTmsTestEngine::GetDnLinkG711Mode
       
  1790 //
       
  1791 // ----------------------------------------------------------------------------
       
  1792 //
       
  1793 void QTmsTestEngine::GetDnLinkG711Mode()
       
  1794     {
       
  1795     if (iDnLinkCodec == QTMS_FORMAT_G711)
       
  1796         {
       
  1797         QTMSG711CodecMode mode;
       
  1798         TInt status = static_cast<QTMSG711Format*> (iDecFormatIntfc)->GetMode(
       
  1799                 mode);
       
  1800 
       
  1801         if (status == QTMS_RESULT_SUCCESS)
       
  1802             {
       
  1803             if (mode == QTMS_G711_CODEC_MODE_MULAW)
       
  1804                 {
       
  1805                 DisplayText("DNL G711 Mode: [uLaw]");
       
  1806                 }
       
  1807             else
       
  1808                 {
       
  1809                 DisplayText("DNL G711 Mode: [aLaw]");
       
  1810                 }
       
  1811             }
       
  1812         else
       
  1813             {
       
  1814             DisplayText("DNL G711 GetMode Error: ", status);
       
  1815             }
       
  1816         }
       
  1817     }
       
  1818 
       
  1819 // ----------------------------------------------------------------------------
       
  1820 // QTmsTestEngine::SetDnLinkILBC20MS
       
  1821 //
       
  1822 // ----------------------------------------------------------------------------
       
  1823 //
       
  1824 void QTmsTestEngine::SetDnLinkILBC20MS()
       
  1825     {
       
  1826     if (iDnLinkCodec == QTMS_FORMAT_ILBC)
       
  1827         {
       
  1828         static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->SetMode(
       
  1829                 QTMS_ILBC_CODEC_MODE_20MS_FRAME);
       
  1830         DisplayText("DNL iLBC Mode Set: [20ms]");
       
  1831         }
       
  1832     }
       
  1833 
       
  1834 // ----------------------------------------------------------------------------
       
  1835 // QTmsTestEngine::SetDnLinkILBC30MS
       
  1836 //
       
  1837 // ----------------------------------------------------------------------------
       
  1838 //
       
  1839 void QTmsTestEngine::SetDnLinkILBC30MS()
       
  1840     {
       
  1841     if (iDnLinkCodec == QTMS_FORMAT_ILBC)
       
  1842         {
       
  1843         static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->SetMode(
       
  1844                 QTMS_ILBC_CODEC_MODE_30MS_FRAME);
       
  1845         DisplayText("DNL iLBC Mode Set: [30ms]");
       
  1846         }
       
  1847     }
       
  1848 
       
  1849 // ----------------------------------------------------------------------------
       
  1850 // QTmsTestEngine::GetDnLinkILBCMode
       
  1851 //
       
  1852 // ----------------------------------------------------------------------------
       
  1853 //
       
  1854 void QTmsTestEngine::GetDnLinkILBCMode()
       
  1855     {
       
  1856     if (iDnLinkCodec == QTMS_FORMAT_ILBC)
       
  1857         {
       
  1858         QTMSILBCCodecMode mode;
       
  1859         gint status = static_cast<QTMSILBCFormat*> (iDecFormatIntfc)->GetMode(
       
  1860                 mode);
       
  1861 
       
  1862         if (status == QTMS_RESULT_SUCCESS)
       
  1863             {
       
  1864             if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME)
       
  1865                 {
       
  1866                 DisplayText("DNL iLBC Mode: [30ms]");
       
  1867                 }
       
  1868             else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME)
       
  1869                 {
       
  1870                 DisplayText("DNL iLBC Mode: [20ms]");
       
  1871                 }
       
  1872             }
       
  1873         else
       
  1874             {
       
  1875             DisplayText("DNL iLBC GetMode Error: ", status);
       
  1876             }
       
  1877         }
       
  1878     }
       
  1879 
       
  1880 // ----------------------------------------------------------------------------
       
  1881 // QTmsTestEngine::SetUpLinkG711ALAW
       
  1882 //
       
  1883 // ----------------------------------------------------------------------------
       
  1884 //
       
  1885 void QTmsTestEngine::SetUpLinkG711ALAW()
       
  1886     {
       
  1887     if (iUpLinkCodec == QTMS_FORMAT_G711)
       
  1888         {
       
  1889         static_cast<QTMSG711Format*> (iEncFormatIntfc)->SetMode(
       
  1890                 QTMS_G711_CODEC_MODE_ALAW);
       
  1891         DisplayText("UPL G.711 Mode Set: [aLaw]");
       
  1892         }
       
  1893     }
       
  1894 
       
  1895 // ----------------------------------------------------------------------------
       
  1896 // QTmsTestEngine::SetUpLinkG711uLAW
       
  1897 //
       
  1898 // ----------------------------------------------------------------------------
       
  1899 //
       
  1900 void QTmsTestEngine::SetUpLinkG711uLAW()
       
  1901     {
       
  1902 
       
  1903     if (iUpLinkCodec == QTMS_FORMAT_G711)
       
  1904         {
       
  1905         static_cast<QTMSG711Format*> (iEncFormatIntfc)->SetMode(
       
  1906                 QTMS_G711_CODEC_MODE_MULAW);
       
  1907         DisplayText("UPL G.711 Mode Set: [uLaw]");
       
  1908         }
       
  1909     }
       
  1910 
       
  1911 // ----------------------------------------------------------------------------
       
  1912 // QTmsTestEngine::GetUpLinkG711Mode
       
  1913 //
       
  1914 // ----------------------------------------------------------------------------
       
  1915 //
       
  1916 void QTmsTestEngine::GetUpLinkG711Mode()
       
  1917     {
       
  1918     gint status(QTMS_RESULT_SUCCESS);
       
  1919     if (iUpLinkCodec == QTMS_FORMAT_G711)
       
  1920         {
       
  1921         QTMSG711CodecMode mode;
       
  1922         status = static_cast<QTMSG711Format*> (iEncFormatIntfc)->GetMode(mode);
       
  1923 
       
  1924         if (status == QTMS_RESULT_SUCCESS)
       
  1925             {
       
  1926             if (mode == QTMS_G711_CODEC_MODE_MULAW)
       
  1927                 {
       
  1928                 DisplayText("UPL G.711 Mode: [uLaw]");
       
  1929                 }
       
  1930             else if (mode == QTMS_G711_CODEC_MODE_ALAW)
       
  1931                 {
       
  1932                 DisplayText("UPL G.711 Mode: [aLaw]");
       
  1933                 }
       
  1934             }
       
  1935         else
       
  1936             {
       
  1937             DisplayText("UPL G.711 GetMode Error: ", status);
       
  1938             }
       
  1939         }
       
  1940     }
       
  1941 
       
  1942 // ----------------------------------------------------------------------------
       
  1943 // QTmsTestEngine::SetUpLinkILBC20MS
       
  1944 //
       
  1945 // ----------------------------------------------------------------------------
       
  1946 //
       
  1947 void QTmsTestEngine::SetUpLinkILBC20MS()
       
  1948     {
       
  1949     if (iUpLinkCodec == QTMS_FORMAT_ILBC)
       
  1950         {
       
  1951         static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->SetMode(
       
  1952                 QTMS_ILBC_CODEC_MODE_20MS_FRAME);
       
  1953         DisplayText("UPL iLBC Mode Set: [20ms]");
       
  1954         }
       
  1955     }
       
  1956 
       
  1957 // ----------------------------------------------------------------------------
       
  1958 // QTmsTestEngine::SetUpLinkILBC30MS
       
  1959 //
       
  1960 // ----------------------------------------------------------------------------
       
  1961 //
       
  1962 void QTmsTestEngine::SetUpLinkILBC30MS()
       
  1963     {
       
  1964     if (iUpLinkCodec == QTMS_FORMAT_ILBC)
       
  1965         {
       
  1966         static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->SetMode(
       
  1967                 QTMS_ILBC_CODEC_MODE_30MS_FRAME);
       
  1968         DisplayText("UPL iLBC Mode Set: [30ms]");
       
  1969         }
       
  1970     }
       
  1971 
       
  1972 // ----------------------------------------------------------------------------
       
  1973 // QTmsTestEngine::GetUpLinkILBCMode
       
  1974 //
       
  1975 // ----------------------------------------------------------------------------
       
  1976 //
       
  1977 void QTmsTestEngine::GetUpLinkILBCMode()
       
  1978     {
       
  1979     gint status(QTMS_RESULT_SUCCESS);
       
  1980     if (iUpLinkCodec == QTMS_FORMAT_ILBC)
       
  1981         {
       
  1982         QTMSILBCCodecMode mode;
       
  1983         status = static_cast<QTMSILBCFormat*> (iEncFormatIntfc)->GetMode(mode);
       
  1984 
       
  1985         if (status == QTMS_RESULT_SUCCESS)
       
  1986             {
       
  1987             if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME)
       
  1988                 {
       
  1989                 DisplayText("UPL iLBC Mode: [30ms]");
       
  1990                 }
       
  1991             else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME)
       
  1992                 {
       
  1993                 DisplayText("UPL iLBC Mode: [20ms]");
       
  1994                 }
       
  1995             }
       
  1996         else
       
  1997             {
       
  1998             DisplayText("UPL iLBC GetMode Error: ", status);
       
  1999             }
       
  2000         }
       
  2001     }
       
  2002 
       
  2003 // ----------------------------------------------------------------------------
       
  2004 // QTmsTestEngine::CreateGlobalVol
       
  2005 //
       
  2006 // ----------------------------------------------------------------------------
       
  2007 //
       
  2008 void QTmsTestEngine::CreateGlobalVol()
       
  2009     {
       
  2010     gint status(QTMS_RESULT_SUCCESS);
       
  2011 
       
  2012     if (iFactory && !iGlobalVol)
       
  2013         {
       
  2014         status = iFactory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, iGlobalVol);
       
  2015 
       
  2016         if (status == QTMS_RESULT_SUCCESS)
       
  2017             {
       
  2018             DisplayText("Global Vol Created");
       
  2019             connect(static_cast<QTMSGlobalVolEffect*> (iGlobalVol),
       
  2020                     SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)),
       
  2021                     this,
       
  2022                     SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
       
  2023                 //  DisplayText("connected to global vol signal");
       
  2024             }
       
  2025         else
       
  2026             {
       
  2027             DisplayText("Global Vol failed: ", status);
       
  2028             }
       
  2029         }
       
  2030     }
       
  2031 
       
  2032 // ----------------------------------------------------------------------------
       
  2033 // QTmsTestEngine::CreateGlobalGain
       
  2034 //
       
  2035 // ----------------------------------------------------------------------------
       
  2036 //
       
  2037 void QTmsTestEngine::CreateGlobalGain()
       
  2038     {
       
  2039     gint status(QTMS_RESULT_SUCCESS);
       
  2040 
       
  2041     if (iFactory && !iGlobalGain)
       
  2042         {
       
  2043         status = iFactory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, iGlobalGain);
       
  2044 
       
  2045         if (status == QTMS_RESULT_SUCCESS)
       
  2046             {
       
  2047             DisplayText("Global Gain Created");
       
  2048             connect(static_cast<QTMSGlobalGainEffect*> (iGlobalGain),
       
  2049                     SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)),
       
  2050                     this,
       
  2051                     SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
       
  2052                 //  DisplayText("connected to global gain signal");
       
  2053             }
       
  2054         else
       
  2055             {
       
  2056             DisplayText("Global Gain failed: ", status);
       
  2057             }
       
  2058         }
       
  2059     }
       
  2060 
       
  2061 // ----------------------------------------------------------------------------
       
  2062 // QTmsTestEngine::GetGlobalVol
       
  2063 //
       
  2064 // ----------------------------------------------------------------------------
       
  2065 //
       
  2066 void QTmsTestEngine::GetGlobalVol()
       
  2067     {
       
  2068     if (iGlobalVol)
       
  2069         {
       
  2070         TUint level(0);
       
  2071         static_cast<QTMSGlobalVolEffect*> (iGlobalVol)->GetLevel(level);
       
  2072         DisplayText("Global Vol: ", level);
       
  2073         }
       
  2074     }
       
  2075 
       
  2076 // ----------------------------------------------------------------------------
       
  2077 // QTmsTestEngine::GetGlobalMaxVol
       
  2078 //
       
  2079 // ----------------------------------------------------------------------------
       
  2080 //
       
  2081 void QTmsTestEngine::GetGlobalMaxVol()
       
  2082     {
       
  2083     if (iGlobalVol)
       
  2084         {
       
  2085         TUint level(0);
       
  2086         static_cast<QTMSGlobalVolEffect*> (iGlobalVol)->GetMaxLevel(level);
       
  2087         DisplayText("Global Max Vol: ", level);
       
  2088         }
       
  2089     }
       
  2090 
       
  2091 // ----------------------------------------------------------------------------
       
  2092 // QTmsTestEngine::SetGlobalVol
       
  2093 //
       
  2094 // ----------------------------------------------------------------------------
       
  2095 //
       
  2096 void QTmsTestEngine::SetGlobalVol()
       
  2097     {
       
  2098     TUint level(0);
       
  2099     if (iGlobalVol)
       
  2100         {
       
  2101         static_cast<QTMSGlobalVolEffect*> (iGlobalVol)->GetMaxLevel(level);
       
  2102         static_cast<QTMSGlobalVolEffect*> (iGlobalVol)->SetLevel(level);
       
  2103         }
       
  2104     }
       
  2105 
       
  2106 // ----------------------------------------------------------------------------
       
  2107 // QTmsTestEngine::GetGlobalGain
       
  2108 //
       
  2109 // ----------------------------------------------------------------------------
       
  2110 //
       
  2111 void QTmsTestEngine::GetGlobalGain()
       
  2112     {
       
  2113     if (iGlobalGain)
       
  2114         {
       
  2115         TUint level(0);
       
  2116         static_cast<QTMSGlobalGainEffect*> (iGlobalGain)->GetLevel(level);
       
  2117         DisplayText("Global Gain: ", level);
       
  2118         }
       
  2119     }
       
  2120 
       
  2121 // ----------------------------------------------------------------------------
       
  2122 // QTmsTestEngine::GetGlobalMaxGain
       
  2123 //
       
  2124 // ----------------------------------------------------------------------------
       
  2125 //
       
  2126 void QTmsTestEngine::GetGlobalMaxGain()
       
  2127     {
       
  2128     if (iGlobalGain)
       
  2129         {
       
  2130         TUint level(0);
       
  2131         static_cast<QTMSGlobalGainEffect*> (iGlobalGain)->GetMaxLevel(level);
       
  2132         DisplayText("Global Max gain: ", level);
       
  2133         }
       
  2134     }
       
  2135 
       
  2136 // ----------------------------------------------------------------------------
       
  2137 // QTmsTestEngine::SetGlobalGain
       
  2138 //
       
  2139 // ----------------------------------------------------------------------------
       
  2140 //
       
  2141 void QTmsTestEngine::SetGlobalGain()
       
  2142     {
       
  2143     TUint level(0);
       
  2144     if (iGlobalGain)
       
  2145         {
       
  2146         static_cast<QTMSGlobalGainEffect*> (iGlobalGain)->GetMaxLevel(level);
       
  2147         static_cast<QTMSGlobalGainEffect*> (iGlobalGain)->SetLevel(level);
       
  2148         }
       
  2149     }
       
  2150 
       
  2151 // ----------------------------------------------------------------------------
       
  2152 // QTmsTestEngine::SetOutputDevice
       
  2153 //
       
  2154 // ----------------------------------------------------------------------------
       
  2155 //
       
  2156 void QTmsTestEngine::SetOutputDevice(QTMSAudioOutput device)
       
  2157     {
       
  2158     gint status(QTMS_RESULT_SUCCESS);
       
  2159 
       
  2160     if (iTmsGlobalRouting)
       
  2161         {
       
  2162         switch (device)
       
  2163             {
       
  2164             case QTMS_AUDIO_OUTPUT_NONE:
       
  2165                 status = iTmsGlobalRouting->SetOutput(QTMS_AUDIO_OUTPUT_NONE);
       
  2166                 DisplayText("Routing none");
       
  2167                 break;
       
  2168             case QTMS_AUDIO_OUTPUT_PUBLIC:
       
  2169                 status = iTmsGlobalRouting->SetOutput(QTMS_AUDIO_OUTPUT_PUBLIC);
       
  2170                 DisplayText("Routing public");
       
  2171                 break;
       
  2172             case QTMS_AUDIO_OUTPUT_PRIVATE:
       
  2173                 status = iTmsGlobalRouting->SetOutput(
       
  2174                         QTMS_AUDIO_OUTPUT_PRIVATE);
       
  2175                 DisplayText("Routing private");
       
  2176                 break;
       
  2177             case QTMS_AUDIO_OUTPUT_HANDSET:
       
  2178                 status = iTmsGlobalRouting->SetOutput(
       
  2179                         QTMS_AUDIO_OUTPUT_HANDSET);
       
  2180                 DisplayText("Routing to handset");
       
  2181                 break;
       
  2182             case QTMS_AUDIO_OUTPUT_LOUDSPEAKER:
       
  2183                 status = iTmsGlobalRouting->SetOutput(
       
  2184                         QTMS_AUDIO_OUTPUT_LOUDSPEAKER);
       
  2185                 DisplayText("Routing to Loudspeaker");
       
  2186                 break;
       
  2187             case QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY:
       
  2188                 status = iTmsGlobalRouting->SetOutput(
       
  2189                         QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY);
       
  2190                 DisplayText("Routing to Wired accessory");
       
  2191                 break;
       
  2192             case QTMS_AUDIO_OUTPUT_ACCESSORY:
       
  2193                 status = iTmsGlobalRouting->SetOutput(
       
  2194                         QTMS_AUDIO_OUTPUT_ACCESSORY);
       
  2195                 DisplayText("Routing to BT accessory");
       
  2196                 break;
       
  2197             case QTMS_AUDIO_OUTPUT_ETTY:
       
  2198                 status = iTmsGlobalRouting->SetOutput(QTMS_AUDIO_OUTPUT_ETTY);
       
  2199                 DisplayText("Routing to TTY");
       
  2200                 break;
       
  2201             default: // ENoPreference
       
  2202                 DisplayText("Default Device Routing");
       
  2203                 break;
       
  2204             }
       
  2205         }
       
  2206     if (status != QTMS_RESULT_SUCCESS)
       
  2207         {
       
  2208         DisplayText("Routing failed: ", status);
       
  2209         }
       
  2210     }
       
  2211 
       
  2212 // ----------------------------------------------------------------------------
       
  2213 // QTmsTestEngine::SetHandset
       
  2214 //
       
  2215 // ----------------------------------------------------------------------------
       
  2216 //
       
  2217 void QTmsTestEngine::SetHandset()
       
  2218     {
       
  2219     gint status(QTMS_RESULT_SUCCESS);
       
  2220 
       
  2221     if (iTmsGlobalRouting)
       
  2222         {
       
  2223         status = iTmsGlobalRouting->SetOutput(QTMS_AUDIO_OUTPUT_HANDSET);
       
  2224 
       
  2225         if (status != QTMS_RESULT_SUCCESS)
       
  2226             {
       
  2227             DisplayText("SetHandSet failed: ", status);
       
  2228             }
       
  2229         else
       
  2230             {
       
  2231             DisplayText("SetHandSet");
       
  2232             }
       
  2233         }
       
  2234     }
       
  2235 
       
  2236 // ----------------------------------------------------------------------------
       
  2237 // QTmsTestEngine::SetLoudSpeaker
       
  2238 //
       
  2239 // ----------------------------------------------------------------------------
       
  2240 //
       
  2241 void QTmsTestEngine::SetLoudSpeaker()
       
  2242     {
       
  2243     gint status(QTMS_RESULT_SUCCESS);
       
  2244 
       
  2245     if (iTmsGlobalRouting)
       
  2246         {
       
  2247         status = iTmsGlobalRouting->SetOutput(QTMS_AUDIO_OUTPUT_LOUDSPEAKER);
       
  2248 
       
  2249         if (status != QTMS_RESULT_SUCCESS)
       
  2250             {
       
  2251             DisplayText("SetLoudSpeaker failed: ", status);
       
  2252             }
       
  2253         else
       
  2254             {
       
  2255             DisplayText("SetLoudSpeaker");
       
  2256             }
       
  2257         }
       
  2258     }
       
  2259 
       
  2260 // ----------------------------------------------------------------------------
       
  2261 // QTmsTestEngine::GetAudioDevice
       
  2262 //
       
  2263 // ----------------------------------------------------------------------------
       
  2264 //
       
  2265 void QTmsTestEngine::GetAudioDevice()
       
  2266     {
       
  2267     QTMSAudioOutput device;
       
  2268 
       
  2269     if (iTmsGlobalRouting)
       
  2270         {
       
  2271         iTmsGlobalRouting->GetOutput(device);
       
  2272 #ifdef __TEST_CODE_COVERAGE__
       
  2273         TMSAudioOutput prevdevice;
       
  2274         iTmsGlobalRouting->GetPreviousOutput(prevdevice);
       
  2275 #endif //__TEST_CODE_COVERAGE__
       
  2276 
       
  2277         switch (device)
       
  2278             {
       
  2279             case QTMS_AUDIO_OUTPUT_NONE:
       
  2280                 DisplayText("Routing none");
       
  2281                 break;
       
  2282             case QTMS_AUDIO_OUTPUT_PUBLIC:
       
  2283                 DisplayText("Routing public");
       
  2284                 break;
       
  2285             case QTMS_AUDIO_OUTPUT_PRIVATE:
       
  2286                 DisplayText("Routing private");
       
  2287                 break;
       
  2288             case QTMS_AUDIO_OUTPUT_HANDSET:
       
  2289                 DisplayText("Routing to handset");
       
  2290                 break;
       
  2291             case QTMS_AUDIO_OUTPUT_LOUDSPEAKER:
       
  2292                 DisplayText("Routing to Loudspeaker");
       
  2293                 break;
       
  2294             case QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY:
       
  2295                 DisplayText("Routing to Wired accessory");
       
  2296                 break;
       
  2297             case QTMS_AUDIO_OUTPUT_ACCESSORY:
       
  2298                 DisplayText("Routing to BT accessory");
       
  2299                 break;
       
  2300             case QTMS_AUDIO_OUTPUT_ETTY:
       
  2301                 DisplayText("Routing to TTY");
       
  2302                 break;
       
  2303             default: // ENoPreference
       
  2304                 DisplayText("Default Device Routing");
       
  2305                 break;
       
  2306             }
       
  2307         }
       
  2308     }
       
  2309 
       
  2310 // ----------------------------------------------------------------------------
       
  2311 // QTmsTestEngine::GetAvailableOutput
       
  2312 //
       
  2313 // ----------------------------------------------------------------------------
       
  2314 //
       
  2315 void QTmsTestEngine::GetAvailableOutput()
       
  2316     {
       
  2317     TInt status(QTMS_RESULT_SUCCESS);
       
  2318 
       
  2319     if (iTmsGlobalRouting)
       
  2320         {
       
  2321         status = iTmsGlobalRouting->GetAvailableOutputs(iAvailableoutputs);
       
  2322 
       
  2323         if (status == QTMS_RESULT_SUCCESS)
       
  2324             {
       
  2325             DisplayText("Available outputs: ", iAvailableoutputs.size());
       
  2326             std::vector<guint>::iterator outputs = iAvailableoutputs.begin();
       
  2327             for (; outputs < iAvailableoutputs.end(); outputs++)
       
  2328                 {
       
  2329                 DisplayDevice(*outputs);
       
  2330                 }
       
  2331             }
       
  2332         else
       
  2333             {
       
  2334             DisplayText("Available output error: ", status);
       
  2335             }
       
  2336         }
       
  2337     }
       
  2338 
       
  2339 // ----------------------------------------------------------------------------
       
  2340 // QTmsTestEngine::DisplayDevice
       
  2341 //
       
  2342 // ----------------------------------------------------------------------------
       
  2343 //
       
  2344 void QTmsTestEngine::DisplayDevice(QTMSAudioOutput device)
       
  2345     {
       
  2346     switch (device)
       
  2347         {
       
  2348         case QTMS_AUDIO_OUTPUT_NONE:
       
  2349             DisplayText("none");
       
  2350             break;
       
  2351         case QTMS_AUDIO_OUTPUT_PUBLIC:
       
  2352             DisplayText("Public");
       
  2353             break;
       
  2354         case QTMS_AUDIO_OUTPUT_PRIVATE:
       
  2355             DisplayText("Private");
       
  2356             break;
       
  2357         case QTMS_AUDIO_OUTPUT_HANDSET:
       
  2358             DisplayText("Handset");
       
  2359             break;
       
  2360         case QTMS_AUDIO_OUTPUT_LOUDSPEAKER:
       
  2361             DisplayText("Loudspeaker");
       
  2362             break;
       
  2363         case QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY:
       
  2364             DisplayText("Wired accessory");
       
  2365             break;
       
  2366         case QTMS_AUDIO_OUTPUT_ACCESSORY:
       
  2367             DisplayText("Accessory");
       
  2368             break;
       
  2369         case QTMS_AUDIO_OUTPUT_ETTY:
       
  2370             DisplayText("TTY");
       
  2371             break;
       
  2372         default:
       
  2373             break;
       
  2374         }
       
  2375     }
       
  2376 
       
  2377 // ----------------------------------------------------------------------------
       
  2378 // QTmsTestEngine::InitDTMFTonePlayerDnlink
       
  2379 //
       
  2380 // ----------------------------------------------------------------------------
       
  2381 //
       
  2382 void QTmsTestEngine::InitDTMFTonePlayerDnlink()
       
  2383     {
       
  2384     gint status(QTMS_RESULT_SUCCESS);
       
  2385     if (iFactory)
       
  2386         {
       
  2387         status = iFactory->CreateDTMF(QTMS_STREAM_DOWNLINK, iDTMFTonePlayerDn);
       
  2388         }
       
  2389     if (iDTMFTonePlayerDn && status == QTMS_RESULT_SUCCESS)
       
  2390         {
       
  2391         connect(iDTMFTonePlayerDn,
       
  2392                 SIGNAL(DTMFEvent(QTMSDTMF*,QTMSSignalEvent)), this,
       
  2393                 SLOT(DTMFEvent(QTMSDTMF*,QTMSSignalEvent)));
       
  2394         }
       
  2395     if (status == QTMS_RESULT_SUCCESS)
       
  2396         {
       
  2397         DisplayText("DTMF Downlink OK");
       
  2398         }
       
  2399     else
       
  2400         {
       
  2401         DisplayText("DTMF Downlink failed: ", status);
       
  2402         }
       
  2403     }
       
  2404 
       
  2405 // ----------------------------------------------------------------------------
       
  2406 // QTmsTestEngine::InitDTMFTonePlayerUplink
       
  2407 //
       
  2408 // ----------------------------------------------------------------------------
       
  2409 //
       
  2410 void QTmsTestEngine::InitDTMFTonePlayerUplink()
       
  2411     {
       
  2412     gint status(QTMS_RESULT_SUCCESS);
       
  2413     if (iFactory)
       
  2414         {
       
  2415         status = iFactory->CreateDTMF(QTMS_STREAM_UPLINK, iDTMFTonePlayerUp);
       
  2416         }
       
  2417     if (iDTMFTonePlayerUp && status == QTMS_RESULT_SUCCESS)
       
  2418         {
       
  2419         connect(iDTMFTonePlayerUp,
       
  2420                 SIGNAL(DTMFEvent(QTMSDTMF*,QTMSSignalEvent)), this,
       
  2421                 SLOT(DTMFEvent(QTMSDTMF*,QTMSSignalEvent)));
       
  2422         }
       
  2423     if (status == QTMS_RESULT_SUCCESS)
       
  2424         {
       
  2425         DisplayText("DTMF Uplink OK");
       
  2426         }
       
  2427     else
       
  2428         {
       
  2429         DisplayText("DTMF Uplink failed: ", status);
       
  2430         }
       
  2431     }
       
  2432 
       
  2433 // ----------------------------------------------------------------------------
       
  2434 // QTmsTestEngine::DTMFTonePlayDnlink
       
  2435 //
       
  2436 // ----------------------------------------------------------------------------
       
  2437 //
       
  2438 void QTmsTestEngine::DTMFTonePlayDnlink()
       
  2439     {
       
  2440     GString* dtmfstring;
       
  2441     gint status(QTMS_RESULT_SUCCESS);
       
  2442     if (iDTMFTonePlayerDn)
       
  2443         {
       
  2444         dtmfstring = g_string_new("4723");
       
  2445         status = iDTMFTonePlayerDn->SetTone(dtmfstring);
       
  2446         if (status == QTMS_RESULT_SUCCESS)
       
  2447             {
       
  2448             status = iDTMFTonePlayerDn->Start();
       
  2449             if (status != QTMS_RESULT_SUCCESS)
       
  2450                 {
       
  2451                 DisplayText("DTMF downlink start failed: ", status);
       
  2452                 }
       
  2453             }
       
  2454         else
       
  2455             {
       
  2456             DisplayText("DTMF downlink settone failed: ", status);
       
  2457             }
       
  2458         g_string_free(dtmfstring, TRUE);
       
  2459         }
       
  2460     else
       
  2461         {
       
  2462         DisplayText("Downlink not ready");
       
  2463         }
       
  2464     }
       
  2465 
       
  2466 // ----------------------------------------------------------------------------
       
  2467 // QTmsTestEngine::DTMFTonePlayUplink
       
  2468 //
       
  2469 // ----------------------------------------------------------------------------
       
  2470 //
       
  2471 void QTmsTestEngine::DTMFTonePlayUplink()
       
  2472     {
       
  2473     GString* dtmfstring;
       
  2474     gint status(QTMS_RESULT_SUCCESS);
       
  2475     // Note: uplink must be in the streaming state (disable for testing)
       
  2476     if (iDTMFTonePlayerUp && iUpLinkStatus == EStreaming)
       
  2477         {
       
  2478         dtmfstring = g_string_new("4567890*#123");
       
  2479         //dtmfstring = g_string_append_c(dtmfstring, '4');
       
  2480         status = iDTMFTonePlayerUp->SetTone(dtmfstring);
       
  2481         if (status == QTMS_RESULT_SUCCESS)
       
  2482             {
       
  2483 #ifdef __TEST_CODE_COVERAGE__
       
  2484             // CS call only
       
  2485             iDTMFTonePlayerUp->ContinueDTMFStringSending(TRUE);
       
  2486 #endif //__TEST_CODE_COVERAGE__
       
  2487 
       
  2488             status = iDTMFTonePlayerUp->Start();
       
  2489 
       
  2490             if (status != QTMS_RESULT_SUCCESS)
       
  2491                 {
       
  2492                 DisplayText("DTMF uplink start failed: ", status);
       
  2493                 }
       
  2494             }
       
  2495         else
       
  2496             {
       
  2497             DisplayText("DTMF uplink settone failed: ", status);
       
  2498             }
       
  2499         g_string_free(dtmfstring, TRUE);
       
  2500         }
       
  2501     else
       
  2502         {
       
  2503         DisplayText("Uplink not ready");
       
  2504         }
       
  2505     }
       
  2506 
       
  2507 // ----------------------------------------------------------------------------
       
  2508 // QTmsTestEngine::CloseDTMFPlayerDnlink
       
  2509 //
       
  2510 // ----------------------------------------------------------------------------
       
  2511 //
       
  2512 void QTmsTestEngine::CloseDTMFPlayerDnlink()
       
  2513     {
       
  2514     if (iFactory && iDTMFTonePlayerDn)
       
  2515         {
       
  2516         iDTMFTonePlayerDn->Stop();
       
  2517         iFactory->DeleteDTMF(iDTMFTonePlayerDn);
       
  2518         }
       
  2519     }
       
  2520 
       
  2521 // ----------------------------------------------------------------------------
       
  2522 // QTmsTestEngine::CloseDTMFPlayerUplink
       
  2523 //
       
  2524 // ----------------------------------------------------------------------------
       
  2525 //
       
  2526 void QTmsTestEngine::CloseDTMFPlayerUplink()
       
  2527     {
       
  2528     if (iFactory && iDTMFTonePlayerUp)
       
  2529         {
       
  2530         iDTMFTonePlayerUp->Stop();
       
  2531         iFactory->DeleteDTMF(iDTMFTonePlayerUp);
       
  2532         }
       
  2533     }
       
  2534 
       
  2535 // ----------------------------------------------------------------------------
       
  2536 // QTmsTestEngine::InitRingTonePlayerFromProfiles
       
  2537 //
       
  2538 // ----------------------------------------------------------------------------
       
  2539 //
       
  2540 void QTmsTestEngine::InitRingTonePlayerFromProfiles()
       
  2541     {
       
  2542     if (iTmsRingTonePlayer)
       
  2543         {
       
  2544         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_DEFAULT);
       
  2545         DisplayText("RT Init Profile: ", status);
       
  2546         }
       
  2547     }
       
  2548 
       
  2549 // ----------------------------------------------------------------------------
       
  2550 // QTmsTestEngine::InitRingTonePlayerFromFile
       
  2551 //
       
  2552 // ----------------------------------------------------------------------------
       
  2553 //
       
  2554 void QTmsTestEngine::InitRingTonePlayerFromFile()
       
  2555     {
       
  2556     if (iTmsRingTonePlayer)
       
  2557         {
       
  2558         TBuf<sizeof(KTestFile1)> buf(KTestFile1);
       
  2559         iRTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length() * 2);
       
  2560         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_FILE, iRTStr);
       
  2561         DisplayText("RT Init File: ", status);
       
  2562         g_string_free(iRTStr, TRUE);
       
  2563         iRTStr = NULL;
       
  2564         }
       
  2565     }
       
  2566 
       
  2567 // ----------------------------------------------------------------------------
       
  2568 // QTmsTestEngine::InitRingToneVideoPlayer
       
  2569 //
       
  2570 // ----------------------------------------------------------------------------
       
  2571 //
       
  2572 void QTmsTestEngine::InitRingToneVideoPlayer()
       
  2573     {
       
  2574     }
       
  2575 
       
  2576 // ----------------------------------------------------------------------------
       
  2577 // QTmsTestEngine::InitRingToneSequencePlayer
       
  2578 // Creates sequence player to play custom sequence in descriptor format
       
  2579 // ----------------------------------------------------------------------------
       
  2580 //
       
  2581 void QTmsTestEngine::InitRingToneSequencePlayer()
       
  2582     {
       
  2583     if (iTmsRingTonePlayer)
       
  2584         {
       
  2585         TBuf8<sizeof(KRTBeepSequence)> buf(KRTBeepSequence);
       
  2586         iRTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length());
       
  2587         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_SEQUENCE, iRTStr);
       
  2588         DisplayText("RT Init Sequence: ", status);
       
  2589         g_string_free(iRTStr, TRUE);
       
  2590         }
       
  2591     }
       
  2592 
       
  2593 // ----------------------------------------------------------------------------
       
  2594 // QTmsTestEngine::InitRingToneBeepOnce
       
  2595 // Creates sequence player to play single beep
       
  2596 // ----------------------------------------------------------------------------
       
  2597 //
       
  2598 void QTmsTestEngine::InitRingToneBeepOnce()
       
  2599     {
       
  2600     if (iTmsRingTonePlayer)
       
  2601         {
       
  2602         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_BEEP_ONCE);
       
  2603         DisplayText("RT Init BeepOnce: ", status);
       
  2604         }
       
  2605     }
       
  2606 
       
  2607 // ----------------------------------------------------------------------------
       
  2608 // QTmsTestEngine::InitRingToneSilent
       
  2609 // Creates sequence player to play silent tone
       
  2610 // ----------------------------------------------------------------------------
       
  2611 //
       
  2612 void QTmsTestEngine::InitRingToneSilent()
       
  2613     {
       
  2614     if (iTmsRingTonePlayer)
       
  2615         {
       
  2616         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_SILENT);
       
  2617         DisplayText("RT Init Silent: ", status);
       
  2618         }
       
  2619     }
       
  2620 
       
  2621 // ----------------------------------------------------------------------------
       
  2622 // QTmsTestEngine::InitRingToneUnsecureVoIP
       
  2623 // Creates sequence player to play tone for unsecured VoIP call.
       
  2624 // ----------------------------------------------------------------------------
       
  2625 //
       
  2626 void QTmsTestEngine::InitRingToneUnsecureVoIP()
       
  2627     {
       
  2628     if (iTmsRingTonePlayer)
       
  2629         {
       
  2630 	    gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_UNSECURE_VOIP);
       
  2631         DisplayText("RT Init UnsecVoIP: ", status);
       
  2632         }
       
  2633     }
       
  2634 
       
  2635 // ----------------------------------------------------------------------------
       
  2636 // QTmsTestEngine::InitRingToneWithTTS
       
  2637 // Creates sequence player to play default RT with Text-To-Speech
       
  2638 // ----------------------------------------------------------------------------
       
  2639 //
       
  2640 void QTmsTestEngine::InitRingToneWithTTS()
       
  2641     {
       
  2642     if (iTmsRingTonePlayer)
       
  2643         {
       
  2644         TBuf<sizeof(KTextToSpeak)> buf(KTextToSpeak);
       
  2645         iTTSStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length() * 2);
       
  2646         gint status = iTmsRingTonePlayer->Init(QTMS_RINGTONE_DEFAULT, NULL,
       
  2647                 iTTSStr);
       
  2648         DisplayText("RT Init TTS: ", status);
       
  2649         g_string_free(iTTSStr, TRUE);
       
  2650         }
       
  2651     iTTSStr = NULL;
       
  2652     }
       
  2653 
       
  2654 // ----------------------------------------------------------------------------
       
  2655 // QTmsTestEngine::PlayRingTone
       
  2656 //
       
  2657 // ----------------------------------------------------------------------------
       
  2658 //
       
  2659 void QTmsTestEngine::PlayRingTone()
       
  2660     {
       
  2661     if (iTmsRingTonePlayer)
       
  2662         {
       
  2663         iTmsRingTonePlayer->Play();
       
  2664         }
       
  2665     }
       
  2666 
       
  2667 // ----------------------------------------------------------------------------
       
  2668 // QTmsTestEngine::StopRingTone
       
  2669 //
       
  2670 // ----------------------------------------------------------------------------
       
  2671 //
       
  2672 void QTmsTestEngine::StopRingTone()
       
  2673     {
       
  2674     if (iTmsRingTonePlayer)
       
  2675         {
       
  2676         iTmsRingTonePlayer->Stop();
       
  2677         }
       
  2678     }
       
  2679 
       
  2680 // ----------------------------------------------------------------------------
       
  2681 // QTmsTestEngine::MuteRingTone
       
  2682 //
       
  2683 // ----------------------------------------------------------------------------
       
  2684 //
       
  2685 void QTmsTestEngine::MuteRingTone()
       
  2686     {
       
  2687     if (iTmsRingTonePlayer)
       
  2688         {
       
  2689         iTmsRingTonePlayer->Mute();
       
  2690         }
       
  2691     }
       
  2692 
       
  2693 // ----------------------------------------------------------------------------
       
  2694 // QTmsTestEngine::PauseVideoRingTone
       
  2695 // Pause audio for video RT only
       
  2696 // ----------------------------------------------------------------------------
       
  2697 //
       
  2698 void QTmsTestEngine::PauseVideoRingTone()
       
  2699     {
       
  2700     if (iTmsRingTonePlayer)
       
  2701         {
       
  2702         iTmsRingTonePlayer->Pause();
       
  2703         }
       
  2704     }
       
  2705 
       
  2706 // ----------------------------------------------------------------------------
       
  2707 // QTmsTestEngine::DeinitRingTonePlayer
       
  2708 //
       
  2709 // ----------------------------------------------------------------------------
       
  2710 //
       
  2711 void QTmsTestEngine::DeinitRingTonePlayer()
       
  2712     {
       
  2713     if (iTmsRingTonePlayer)
       
  2714         {
       
  2715         iTmsRingTonePlayer->Deinit();
       
  2716         }
       
  2717     }
       
  2718 
       
  2719 // ----------------------------------------------------------------------------
       
  2720 // CTmsTestEngine::CloseRingTonePlayer
       
  2721 //
       
  2722 // ----------------------------------------------------------------------------
       
  2723 //
       
  2724 void QTmsTestEngine::CloseRingTonePlayer()
       
  2725     {
       
  2726     if (iFactory && iTmsRingTonePlayer)
       
  2727         {
       
  2728         DeinitRingTonePlayer();
       
  2729         iFactory->DeleteRingTonePlayer(iTmsRingTonePlayer);
       
  2730         DisplayText("RT Player Closed");
       
  2731         }
       
  2732     }
       
  2733 
       
  2734 // ----------------------------------------------------------------------------
       
  2735 // QTmsTestEngine::CreateInbandTonePlayer
       
  2736 //
       
  2737 // ----------------------------------------------------------------------------
       
  2738 //
       
  2739 void QTmsTestEngine::CreateInbandTonePlayer()
       
  2740     {
       
  2741     gint status(QTMS_RESULT_SUCCESS);
       
  2742     if (iFactory && !iInbandTonePlayer)
       
  2743         {
       
  2744         status = iFactory->CreateInbandTonePlayer(iInbandTonePlayer);
       
  2745         if (iInbandTonePlayer && status == QTMS_RESULT_SUCCESS)
       
  2746             {
       
  2747             connect(iInbandTonePlayer,
       
  2748                     SIGNAL(InbandToneEvent(QTMSInbandTone*, QTMSSignalEvent)),
       
  2749                     this,
       
  2750                     SLOT(InbandToneEvent(QTMSInbandTone* , QTMSSignalEvent)));
       
  2751             DisplayText("Inband Tone Player created");
       
  2752             }
       
  2753         else
       
  2754             {
       
  2755             DisplayText("Inband Tone Player failed: ", status);
       
  2756             }
       
  2757         }
       
  2758     }
       
  2759 
       
  2760 // ----------------------------------------------------------------------------
       
  2761 // QTmsTestEngine::StartInbandTone
       
  2762 //
       
  2763 // ----------------------------------------------------------------------------
       
  2764 //
       
  2765 void QTmsTestEngine::StartInbandTone(QTMSInbandToneType inbandtone)
       
  2766     {
       
  2767     gint status(QTMS_RESULT_SUCCESS);
       
  2768     CreateInbandTonePlayer();
       
  2769     if (iFactory && iInbandTonePlayer)
       
  2770         {
       
  2771         status = iInbandTonePlayer->Start(inbandtone);
       
  2772         if (status == QTMS_RESULT_SUCCESS)
       
  2773             {
       
  2774             DisplayText("Inband Tone Player Start");
       
  2775             }
       
  2776         else
       
  2777             {
       
  2778             DisplayText("Inband tone failed: ", status);
       
  2779             }
       
  2780         }
       
  2781     }
       
  2782 
       
  2783 // ----------------------------------------------------------------------------
       
  2784 // QTmsTestEngine::StopInbandTone
       
  2785 //
       
  2786 // ----------------------------------------------------------------------------
       
  2787 //
       
  2788 void QTmsTestEngine::StopInbandTone()
       
  2789     {
       
  2790     gint status(QTMS_RESULT_SUCCESS);
       
  2791     if (iFactory && iInbandTonePlayer)
       
  2792         {
       
  2793         status = iInbandTonePlayer->Stop();
       
  2794         if (status == QTMS_RESULT_SUCCESS)
       
  2795             {
       
  2796             DisplayText("Inband Tone Player Stop");
       
  2797             }
       
  2798         else
       
  2799             {
       
  2800             DisplayText("Inband tone failed: ", status);
       
  2801             }
       
  2802         }
       
  2803     }
       
  2804 
       
  2805 // ----------------------------------------------------------------------------
       
  2806 // QTmsTestEngine::OneTouchLoopback
       
  2807 //
       
  2808 // ----------------------------------------------------------------------------
       
  2809 //
       
  2810 void QTmsTestEngine::OneTouchLoopback()
       
  2811     {
       
  2812     iOneTouchLoopback = ETrue;
       
  2813 
       
  2814     // Change between CS and IP call type for testing.
       
  2815     //SetCallType(QTMS_CALL_CS); //will activate streams
       
  2816     SetCallType(QTMS_CALL_IP);
       
  2817 
       
  2818     if (iTmsCall->GetCallType() == QTMS_CALL_IP)
       
  2819         {
       
  2820 #ifdef __WINSCW__
       
  2821         SetDownlinkFormat(QTMS_FORMAT_PCM);
       
  2822         SetUplinkFormat(QTMS_FORMAT_PCM);
       
  2823 #else  //__WINSCW__
       
  2824         SetDownlinkFormat(QTMS_FORMAT_AMR);
       
  2825         SetUplinkFormat(QTMS_FORMAT_AMR);
       
  2826 #endif //__WINSCW__
       
  2827         }
       
  2828     }
       
  2829 
       
  2830 // ----------------------------------------------------------------------------
       
  2831 // QTmsTestEngine::DoLoopback
       
  2832 //
       
  2833 // ----------------------------------------------------------------------------
       
  2834 //
       
  2835 void QTmsTestEngine::DoLoopback()
       
  2836     {
       
  2837     if (iPlayBufReady && iRecBufReady)
       
  2838         {
       
  2839         guint8* srcptr(NULL);
       
  2840         guint8* desptr(NULL);
       
  2841         guint srcsize(0);
       
  2842         guint dessize(0);
       
  2843 
       
  2844         iPlayBuf->GetDataPtr(desptr);
       
  2845         iPlayBuf->GetDataSize(dessize);
       
  2846         iRecBuf->GetDataPtr(srcptr);
       
  2847         iRecBuf->GetDataSize(srcsize);
       
  2848 
       
  2849 #ifdef __WINSCW__
       
  2850         // This is the case when the size of the play buffer is larger than
       
  2851         // the size of the recorded buffer. In WINS, DirectX views partially
       
  2852         // filled buffers as an EOS and throws (-10). So, we will collect
       
  2853         // multiple buffers here.
       
  2854         Mem::Copy(desptr + iBufIndex, srcptr, srcsize);
       
  2855         iBufIndex += srcsize;
       
  2856         if (iBufIndex >= dessize)
       
  2857             {
       
  2858             iPlayBuf->SetDataSize(dessize);
       
  2859             static_cast<QTMSClientSource*> (iTmsClientSource)->BufferFilled(
       
  2860                     *iPlayBuf);
       
  2861             iPlayBufReady = EFalse; // buf filled, ready for next FillBuffer
       
  2862             iBufIndex = 0;
       
  2863             }
       
  2864 #else //__WINSCW__
       
  2865         Mem::Copy(desptr, srcptr, srcsize);
       
  2866         iPlayBuf->SetDataSize(srcsize);
       
  2867         static_cast<QTMSClientSource*> (iTmsClientSource)->BufferFilled(
       
  2868                 *iPlayBuf);
       
  2869         iPlayBufReady = EFalse; // buf filled, ready for FillBuffer
       
  2870 #endif //__WINSCW__
       
  2871         iRecBufReady = EFalse; // buf consumed, ready for next EmptyBuffer
       
  2872         }
       
  2873     }
       
  2874 
       
  2875 // ----------------------------------------------------------------------------
       
  2876 // QTmsTestEngine::EndCall
       
  2877 //
       
  2878 // ----------------------------------------------------------------------------
       
  2879 //
       
  2880 void QTmsTestEngine::EndCall()
       
  2881     {
       
  2882     StopUplink();
       
  2883     StopDownlink();
       
  2884     CloseUplink();
       
  2885     CloseDownlink();
       
  2886     CloseDTMFPlayerUplink();
       
  2887     CloseDTMFPlayerDnlink();
       
  2888 
       
  2889     if (iTmsUplink && iTmsCall)
       
  2890         {
       
  2891         iTmsCall->DeleteStream(iTmsUplink);
       
  2892         }
       
  2893     if (iTmsDnlink && iTmsCall)
       
  2894         {
       
  2895         iTmsCall->DeleteStream(iTmsDnlink);
       
  2896         }
       
  2897     if (iFactory && iTmsCall)
       
  2898         {
       
  2899         iFactory->DeleteCall(iTmsCall);
       
  2900         }
       
  2901     if (iFactory && iTmsClientSource)
       
  2902         {
       
  2903         iFactory->DeleteSource(iTmsClientSource);
       
  2904         }
       
  2905     if (iFactory && iTmsMicSource)
       
  2906         {
       
  2907         iFactory->DeleteSource(iTmsMicSource);
       
  2908         }
       
  2909     if (iFactory && iTmsModemSource)
       
  2910         {
       
  2911         iFactory->DeleteSource(iTmsModemSource);
       
  2912         }
       
  2913     if (iFactory && iTmsClientSink)
       
  2914         {
       
  2915         iFactory->DeleteSink(iTmsClientSink);
       
  2916         }
       
  2917     if (iFactory && iTmsSpeakerSink)
       
  2918         {
       
  2919         iFactory->DeleteSink(iTmsSpeakerSink);
       
  2920         }
       
  2921     if (iFactory && iTmsModemSink)
       
  2922         {
       
  2923         iFactory->DeleteSink(iTmsModemSink);
       
  2924         }
       
  2925     if (iFactory && iTmsDnlinkEffect)
       
  2926         {
       
  2927         iFactory->DeleteEffect(iTmsDnlinkEffect);
       
  2928         }
       
  2929     if (iFactory && iTmsUplinkEffect)
       
  2930         {
       
  2931         iFactory->DeleteEffect(iTmsUplinkEffect);
       
  2932         }
       
  2933     if (iFactory && iEncFormatIntfc)
       
  2934         {
       
  2935         iFactory->DeleteFormat(iEncFormatIntfc);
       
  2936         }
       
  2937     if (iFactory && iDecFormatIntfc)
       
  2938         {
       
  2939         iFactory->DeleteFormat(iDecFormatIntfc);
       
  2940         }
       
  2941     if (iFactory && iDTMFTonePlayerDn)
       
  2942         {
       
  2943         iFactory->DeleteDTMF(iDTMFTonePlayerDn);
       
  2944         }
       
  2945     if (iFactory && iDTMFTonePlayerUp)
       
  2946         {
       
  2947         iFactory->DeleteDTMF(iDTMFTonePlayerUp);
       
  2948         }
       
  2949     }
       
  2950 
       
  2951 #ifdef __RECORD_WAV_TO_FILE__
       
  2952 void CTmsTestEngine::WriteToFile(const guint8* str, const guint len)
       
  2953     {
       
  2954     TPtrC8 ptr(str, len);
       
  2955     TPtr8 p = iWriteBuf->Des();
       
  2956     p.Copy(ptr);
       
  2957     iFile.Write(p);
       
  2958     }
       
  2959 #endif //__RECORD_WAV_TO_FILE__
       
  2960 
       
  2961 // CALLBACKS
       
  2962 
       
  2963 void QTmsTestEngine::TMSStreamEvent(const QTMSStream& stream,
       
  2964         QTMSSignalEvent event)
       
  2965     {
       
  2966     switch (const_cast<QTMSStream&> (stream).GetStreamType())
       
  2967         {
       
  2968         case QTMS_STREAM_UPLINK:
       
  2969             {
       
  2970             switch (event.type)
       
  2971                 {
       
  2972                 case QTMS_EVENT_STREAM_STATE_CHANGED:
       
  2973                     {
       
  2974                     switch (event.curr_state)
       
  2975                         {
       
  2976                         case QTMS_STREAM_INITIALIZED:
       
  2977                             {
       
  2978 #ifdef __PROFILING_ENABLED__
       
  2979                             TAG_CALLBACK_TIME_PROFILING_END;
       
  2980                             PRINT_CALLBACK_TIME_LATENCY;
       
  2981 #endif //__PROFILING_ENABLED__
       
  2982                             iUpLinkStatus = EReady;
       
  2983                             DisplayText("Uplink initialized ");
       
  2984                             if (iOneTouchLoopback)
       
  2985                                 {
       
  2986                                 StartUplink();
       
  2987                                 }
       
  2988                             break;
       
  2989                             }
       
  2990                         case QTMS_STREAM_UNINITIALIZED:
       
  2991                             DisplayText("Uplink uninitialized ");
       
  2992                             break;
       
  2993                         case QTMS_STREAM_PAUSED:
       
  2994                             DisplayText("Uplink paused ");
       
  2995                             break;
       
  2996                         case QTMS_STREAM_STARTED:
       
  2997                             DisplayText("Uplink started ");
       
  2998                             break;
       
  2999                         default:
       
  3000                             break;
       
  3001                         }
       
  3002                     break;
       
  3003                     }
       
  3004                 case QTMS_EVENT_STREAM_STATE_CHANGE_ERROR:
       
  3005                     DisplayText("Uplink Error ", event.reason);
       
  3006                     break;
       
  3007                 default:
       
  3008                     break;
       
  3009                 }
       
  3010             break;
       
  3011             }
       
  3012         case QTMS_STREAM_DOWNLINK:
       
  3013             {
       
  3014             switch (event.type)
       
  3015                 {
       
  3016                 case QTMS_EVENT_STREAM_STATE_CHANGED:
       
  3017                     {
       
  3018                     switch (event.curr_state)
       
  3019                         {
       
  3020                         case QTMS_STREAM_INITIALIZED:
       
  3021                             {
       
  3022 #ifdef __PROFILING_ENABLED__
       
  3023                             TAG_CALLBACK_TIME_PROFILING_END;
       
  3024                             PRINT_CALLBACK_TIME_LATENCY;
       
  3025                             TAG_CALLBACK_TIME_PROFILING_START;
       
  3026 #endif //__PROFILING_ENABLED__
       
  3027                             GetMaxVolume();
       
  3028                             SetVolume(iMaxVolume / 2);
       
  3029                             iDnLinkStatus = EReady;
       
  3030                             DisplayText("Downlink initialized");
       
  3031                             if (iOneTouchLoopback)
       
  3032                                 {
       
  3033 #ifndef __WINSCW__
       
  3034                                 // No audio mixing in WINS - do not start
       
  3035                                 StartDownlink();
       
  3036 #endif //__WINSCW__
       
  3037                                 }
       
  3038                             break;
       
  3039                             }
       
  3040                         case QTMS_STREAM_UNINITIALIZED:
       
  3041                             DisplayText("Downlink uninitialized");
       
  3042                             break;
       
  3043                         case QTMS_STREAM_PAUSED:
       
  3044                             DisplayText("Downlink paused");
       
  3045                             break;
       
  3046                         case QTMS_STREAM_STARTED:
       
  3047                             DisplayText("Downlink started");
       
  3048                             break;
       
  3049                         default:
       
  3050                             break;
       
  3051                         }
       
  3052                     break;
       
  3053                     }
       
  3054                 case QTMS_EVENT_STREAM_STATE_CHANGE_ERROR:
       
  3055                     DisplayText("Downlink Error ", event.reason);
       
  3056                     break;
       
  3057                 default:
       
  3058                     break;
       
  3059                 }
       
  3060             break;
       
  3061             }
       
  3062         default:
       
  3063             break;
       
  3064         }
       
  3065     }
       
  3066 
       
  3067 //From TMSClientSourceObserver
       
  3068 void QTmsTestEngine::FillBuffer(QTMSBuffer& buffer)
       
  3069     {
       
  3070     iPlayBufReady = ETrue;
       
  3071     iPlayBuf = &buffer;
       
  3072 
       
  3073 #ifdef __PLAY_WAV_FROM_FILE__
       
  3074     guint8* gptr(NULL);
       
  3075     iPlayBuf->GetDataPtr(gptr);
       
  3076     guint gsize;
       
  3077     iPlayBuf->GetDataSize(gsize);
       
  3078     if (!iBuf)
       
  3079         {
       
  3080         iBuf = HBufC8::NewL(gsize);
       
  3081         }
       
  3082     TPtr8 p = iBuf->Des();
       
  3083 
       
  3084     if ((iReadPos + gsize) > iFileLen)
       
  3085         {
       
  3086         gsize = iFileLen - iReadPos;
       
  3087         iEOF = ETrue;
       
  3088         }
       
  3089 
       
  3090     iFile.Read(iReadPos, p, gsize);
       
  3091     //  DEBPRN1(_L("CVoIPTestEngine[0x%x]::FillBuffer [%d]"), iReadPos);
       
  3092 
       
  3093     if (!iEOF)
       
  3094         {
       
  3095         iReadPos += gsize;
       
  3096         }
       
  3097     else
       
  3098         {
       
  3099         // start over from the beginning
       
  3100         iReadPos = 0;
       
  3101         iEOF = EFalse;
       
  3102         }
       
  3103 
       
  3104     Mem::Copy(gptr, (TUint8*) iBuf->Ptr(), iBuf->Size());
       
  3105     iPlayBuf->SetDataSize(iBuf->Size());
       
  3106     static_cast<QTMSClientSource*> (iTmsClientSource)->BufferFilled(*iPlayBuf);
       
  3107     User::After(TTimeIntervalMicroSeconds32(100000)); //clears choppy audio
       
  3108 
       
  3109     iPlayBufReady = EFalse; // buf filled, ready for FillBuffer
       
  3110     iRecBufReady = EFalse; // buf consumed, ready for EmptyBuffer
       
  3111 
       
  3112 #else //__PLAY_WAV_FROM_FILE__
       
  3113     if (iDnLinkStatus == EStreaming)
       
  3114         {
       
  3115         DoLoopback();
       
  3116         }
       
  3117 #endif //__PLAY_WAV_FROM_FILE__
       
  3118     }
       
  3119 
       
  3120 //From TMSClientSourceObserver
       
  3121 void QTmsTestEngine::BufferProcessed(const QTMSBuffer* /*buffer*/,
       
  3122         gint /*reason*/)
       
  3123     {
       
  3124     }
       
  3125 
       
  3126 // From TMSClientSinkObserver
       
  3127 void QTmsTestEngine::ProcessBuffer(const QTMSBuffer* buffer)
       
  3128     {
       
  3129     iRecBufReady = ETrue;
       
  3130     iRecBuf = const_cast<QTMSBuffer*> (buffer);
       
  3131 
       
  3132     if (iUpLinkStatus == EStreaming)
       
  3133         {
       
  3134         // Process recorded buffer here.
       
  3135 
       
  3136 #ifdef __RECORD_WAV_TO_FILE__
       
  3137         guint8* p(NULL);
       
  3138         guint len(0);
       
  3139         iRecBuf->GetDataPtr(p);
       
  3140         iRecBuf->GetDataSize(len);
       
  3141         WriteToFile(p, len);
       
  3142 #endif //__RECORD_WAV_TO_FILE__
       
  3143 
       
  3144         DoLoopback();
       
  3145         static_cast<QTMSClientSink*> (iTmsClientSink)->BufferProcessed(
       
  3146                 iRecBuf);
       
  3147         }
       
  3148     }
       
  3149 
       
  3150 // From TMSEffectObserver
       
  3151 void QTmsTestEngine::EffectsEvent(const QTMSEffect& tmseffect,
       
  3152         QTMSSignalEvent event)
       
  3153     {
       
  3154     gint reason = event.reason;
       
  3155 
       
  3156     if (reason == QTMS_RESULT_SUCCESS)
       
  3157         {
       
  3158         QTMSEffectType effecttype;
       
  3159         const_cast<QTMSEffect&> (tmseffect).GetType(effecttype);
       
  3160         switch (effecttype)
       
  3161             {
       
  3162             case QTMS_EFFECT_GLOBAL_VOL:
       
  3163                 {
       
  3164                 switch (event.type)
       
  3165                     {
       
  3166                     case QTMS_EVENT_EFFECT_VOL_CHANGED:
       
  3167                         DisplayText("Global vol effect change");
       
  3168                         QTMSVolumeEventChangeData* vd;
       
  3169                         vd = static_cast<QTMSVolumeEventChangeData*>
       
  3170                                 (event.event_data);
       
  3171                         DisplayText("Volume level: ", vd->level);
       
  3172                         DisplayText("Output device: ", vd->output);
       
  3173                         break;
       
  3174                     default:
       
  3175                         break;
       
  3176                     }
       
  3177                 }
       
  3178                 break;
       
  3179             case QTMS_EFFECT_GLOBAL_GAIN:
       
  3180                 {
       
  3181                 switch (event.type)
       
  3182                     {
       
  3183                     case QTMS_EVENT_EFFECT_GAIN_CHANGED:
       
  3184                         DisplayText("Global gain effect change");
       
  3185                         break;
       
  3186                     default:
       
  3187                         break;
       
  3188                     }
       
  3189                 }
       
  3190                 break;
       
  3191             case QTMS_EFFECT_VOLUME:
       
  3192                 {
       
  3193                 switch (event.type)
       
  3194                     {
       
  3195 	                case QTMS_EVENT_EFFECT_VOL_CHANGED:
       
  3196                         DisplayText("Stream vol effect change");
       
  3197                         break;
       
  3198                     default:
       
  3199                         break;
       
  3200                     }
       
  3201                 }
       
  3202                 break;
       
  3203 	        case QTMS_EFFECT_GAIN:
       
  3204                 {
       
  3205                 switch (event.type)
       
  3206                     {
       
  3207 	                case QTMS_EVENT_EFFECT_GAIN_CHANGED:
       
  3208                         DisplayText("Stream gain effect change");
       
  3209                         break;
       
  3210                     default:
       
  3211                         break;
       
  3212                     }
       
  3213                 }
       
  3214                 break;
       
  3215             default:
       
  3216                 break;
       
  3217             }
       
  3218         }
       
  3219     else
       
  3220         {
       
  3221         DisplayText("Effect failed: ", reason);
       
  3222         }
       
  3223     }
       
  3224 
       
  3225 // From TMSGlobalRoutingObserver
       
  3226 void QTmsTestEngine::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/,
       
  3227         QTMSSignalEvent event, QTMSAudioOutput output)
       
  3228     {
       
  3229     gint reason = event.reason;
       
  3230 
       
  3231     if (reason == QTMS_RESULT_SUCCESS)
       
  3232         {
       
  3233         switch (event.type)
       
  3234             {
       
  3235             case QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED:
       
  3236                 DisplayText("Available outputs changed");
       
  3237                 break;
       
  3238             case QTMS_EVENT_ROUTING_OUTPUT_CHANGED:
       
  3239                 DisplayText("output changed");
       
  3240                 break;
       
  3241             case QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE:
       
  3242                 DisplayText("set output complete");
       
  3243                 break;
       
  3244             default:
       
  3245                 break;
       
  3246             }
       
  3247         DisplayDevice(output);
       
  3248         }
       
  3249     else
       
  3250         {
       
  3251         DisplayText("Routing failed: ", reason);
       
  3252         }
       
  3253     }
       
  3254 
       
  3255 // From TMSRingToneObserver
       
  3256 void QTmsTestEngine::RingtoneEvent(const QTMSRingTone& /*rt*/,
       
  3257         QTMSSignalEvent event)
       
  3258     {
       
  3259     gint reason = event.reason;
       
  3260 
       
  3261     if (reason == QTMS_RESULT_SUCCESS)
       
  3262         {
       
  3263         switch (event.type)
       
  3264             {
       
  3265             case QTMS_EVENT_RINGTONE_OPEN_COMPLETE:
       
  3266                 DisplayText("RT Open Complete");
       
  3267                 break;
       
  3268             case QTMS_EVENT_RINGTONE_PLAY_COMPLETE:
       
  3269                 DisplayText("RT Play Complete");
       
  3270                 break;
       
  3271             case QTMS_EVENT_RINGTONE_DEINIT_COMPLETE:
       
  3272                 DisplayText("RT Deinit Complete");
       
  3273                 break;
       
  3274             default:
       
  3275                 break;
       
  3276             }
       
  3277         }
       
  3278     else
       
  3279         {
       
  3280         DisplayText("Ringtone failed: ", reason);
       
  3281         }
       
  3282     }
       
  3283 
       
  3284 // From TMSDTMFObserver
       
  3285 void QTmsTestEngine::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event)
       
  3286     {
       
  3287     gint reason = event.reason;
       
  3288 
       
  3289     if (reason == QTMS_RESULT_SUCCESS)
       
  3290         {
       
  3291         switch (event.type)
       
  3292             {
       
  3293             case QTMS_EVENT_DTMF_TONE_STARTED:
       
  3294                 DisplayText("DTMF Started");
       
  3295                 break;
       
  3296             case QTMS_EVENT_DTMF_TONE_STOPPED:
       
  3297                 DisplayText("DTMF Stopped");
       
  3298                 break;
       
  3299             default:
       
  3300                 break;
       
  3301             }
       
  3302         }
       
  3303     else
       
  3304         {
       
  3305         DisplayText("DTMF failed: ", reason);
       
  3306         }
       
  3307     }
       
  3308 
       
  3309 // From TMSInbandToneObserver
       
  3310 void QTmsTestEngine::InbandToneEvent(const QTMSInbandTone& /*inbandtone*/,
       
  3311         QTMSSignalEvent event)
       
  3312     {
       
  3313     gint reason = event.reason;
       
  3314 
       
  3315     if (reason == QTMS_RESULT_SUCCESS)
       
  3316         {
       
  3317         switch (event.type)
       
  3318             {
       
  3319             case QTMS_EVENT_INBAND_TONE_STARTED:
       
  3320                 DisplayText("Inband Tone Started");
       
  3321                 break;
       
  3322             case QTMS_EVENT_INBAND_TONE_STOPPED:
       
  3323                 DisplayText("Inband Tone Stopped");
       
  3324                 break;
       
  3325             default:
       
  3326                 break;
       
  3327             }
       
  3328         }
       
  3329     else
       
  3330         {
       
  3331         DisplayText("Inband tone failed: ", reason);
       
  3332         }
       
  3333     }
       
  3334 
       
  3335 // ----------------------------------------------------------------------------
       
  3336 // QTmsTestEngine:://DisplayText
       
  3337 // Print text with status code.
       
  3338 // ----------------------------------------------------------------------------
       
  3339 //
       
  3340 void QTmsTestEngine::DisplayText(const QString& str, const gint num)
       
  3341     {
       
  3342     if (num != 0)
       
  3343         {
       
  3344         iStatusDisplay->append(str + " " + QString::number(num));
       
  3345         }
       
  3346     else
       
  3347         {
       
  3348         iStatusDisplay->append(str);
       
  3349         }
       
  3350     }
       
  3351 
       
  3352 // End of file