diff -r e42293e811d8 -r 6c1dfe4da5dd mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp Tue Aug 31 15:41:40 2010 +0300 @@ -0,0 +1,1109 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: QTMS CS test + * + */ +#include +#include +#include "qtestmains60.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace QTMS; +_LIT8(KRTBeepSequence, "\x00\x11\x0A\x0A\x08\x73\x0A\x40\x28\x0A\xF7\ +\x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B"); +_LIT16(KTestFile1, "c:\\data\\sounds\\digital\\test_8khz.wav"); + +class QTmsCsTest: public QObject +{ +Q_OBJECT +private slots: + void initTestCase(); + void CSCallSetup(); + + void CreateUplink(); + void CreateDnlink(); + void CreateMicSource(); + void AddMicSourceToStream(); + void CreateModemSink(); + void AddModemSinkToStream(); + void CreateModemSource(); + void AddModemSourceToStream(); + void CreateSpeakerSink(); + void AddSpeakerSinkToStream(); + + void CreateStreamVol(); + void CreateStreamGain(); + + void InitUplink(); + void InitDnlink(); + + void StartUplink(); + void StopUplink(); + void StartDnlink(); + + void StreamVol(); + void StreamGain(); + // void StopDnlink(); + + void CreateGlobalVol(); + void CreateGlobalGain(); + void CreateRouting_data(); + void CreateRouting(); + + void CreateInband_data(); + void CreateInband(); + void CreateDnlinkDtmf(); + void CreateUplinkDtmf(); + + void CreateRingTone(); + + void InitRingTonePlayerFromProfiles(); + void PlayRingTone(); + void PauseRingTone(); + void MuteRingTone(); + void StopRingTone(); + void CloseRingTonePlayer(); + + void CloseUplink(); + void CloseDownlink(); + void cleanupTestCase(); +public slots: + //From TMSStreamObserver + void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event); + //From TMSClientSinkObserver + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + //From TMSGlobalRoutingObserver + void GlobalRoutingEvent(const QTMSGlobalRouting& routing, QTMSSignalEvent event, + QTMSAudioOutput output); + //From TMSRingToneObserver + void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event); + //From TMSDTMFObserver + void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event); + //From TMSInbandToneObserver + void InbandToneEvent(const QTMSInbandTone& inbandtone, QTMSSignalEvent event); + +private: + void InitRingToneSequencePlayer(); + void InitRingTonePlayerFromFile(); + void StopDnlink(); + void GetAvailableOutput(); + void DisplayDevice(QTMSAudioOutput device); + +private: + QTMSFactory *m_Factory; + QTMSCall *m_Call; + QTMSDTMF *m_Dnlnkdtmf; + QTMSDTMF *m_Uplnkdtmf; + QTMSStream *m_Dnlink; + QTMSStream *m_Uplink; + QTMSSource *m_MicSource; + QTMSSource *m_ModemSource; + QTMSSink *m_SpeakerSink; + QTMSSink *m_ModemSink; + QTMSEffect *m_Vol; + QTMSEffect *m_Gain; + QTMSEffect *m_GlobalVol; + QTMSEffect *m_GlobalGain; + QTMSGlobalRouting *m_Routing; + QTMSInbandTone *m_InbandTonePlayer; + QTMSRingTone *m_RingTonePlayer; + GString* m_RTStr; + GString* m_TTSStr; + QSignalSpy *m_UplinkSpy; + QSignalSpy *m_DnlinkSpy; + QSignalSpy *m_InbandSpy; + QSignalSpy *m_RoutingSpy; + OutputVector m_Availableoutputs; + +}; + +void QTmsCsTest::initTestCase() +{ + qDebug("Start QTms CS tests"); + + g_setenv("G_SLICE", "always-malloc", 1); + m_Factory = NULL; + m_Call = NULL; + m_Dnlink = NULL; + m_Uplink = NULL; + m_MicSource = NULL; + m_ModemSource = NULL; + m_SpeakerSink = NULL; + m_ModemSink = NULL; + m_Vol = NULL; + m_Gain = NULL; + m_GlobalVol = NULL; + m_GlobalGain = NULL; + m_Routing = NULL; + m_Dnlnkdtmf = NULL; + m_Uplnkdtmf = NULL; + m_InbandTonePlayer = NULL; + m_RingTonePlayer = NULL; + m_UplinkSpy = NULL; + m_DnlinkSpy = NULL; + + QTMSVer *ver(NULL); + gint status; + status = QTMSFactory::CreateFactory(m_Factory, *ver); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qRegisterMetaType ("QTMSSignalEvent"); + qRegisterMetaType ("QTMSAudioOutput"); + +} + +void QTmsCsTest::cleanupTestCase() +{ + qDebug("End QTms tests"); + + StopDnlink(); + + m_Factory->DeleteSource(m_MicSource); + m_Factory->DeleteSource(m_ModemSource); + m_Factory->DeleteSink(m_ModemSink); + m_Factory->DeleteSink(m_SpeakerSink); + + m_Factory->DeleteDTMF(m_Dnlnkdtmf); + m_Factory->DeleteInbandTonePlayer(m_InbandTonePlayer); + m_Factory->DeleteRingTonePlayer(m_RingTonePlayer); + + m_Factory->DeleteEffect(m_Vol); + m_Factory->DeleteEffect(m_Gain); + m_Factory->DeleteEffect(m_GlobalVol); + m_Factory->DeleteEffect(m_GlobalGain); + + m_Factory->DeleteGlobalRouting(m_Routing); + + m_Call->DeleteStream(m_Uplink); + m_Call->DeleteStream(m_Dnlink); + + m_Factory->DeleteCall(m_Call); + + delete m_Factory; + +} + +void QTmsCsTest::CSCallSetup() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_Call) { + gboolean issupported(FALSE); + m_Factory->IsCallTypeSupported(QTMS_CALL_CS, issupported); + QVERIFY(issupported == TRUE); + status = m_Factory->CreateCall(QTMS_CALL_CS, m_Call, 0); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTMSCallType calltype = m_Call->GetCallType(); + QVERIFY(calltype == QTMS_CALL_CS); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::CreateUplink() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) { + status = m_Call->CreateStream(QTMS_STREAM_UPLINK, m_Uplink); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_UplinkSpy = new QSignalSpy(m_Uplink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_UplinkSpy->isValid() ); + + //QCOMPARE(m_UplinkSpy->count(), 0 ); + + + connect(m_Uplink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + } +} + +void QTmsCsTest::CreateDnlink() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) { + status = m_Call->CreateStream(QTMS_STREAM_DOWNLINK, m_Dnlink); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_DnlinkSpy = new QSignalSpy(m_Dnlink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_DnlinkSpy->isValid() ); + + //QCOMPARE(m_DnlinkSpy->count(), 0 ); + + connect(m_Dnlink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + } +} + +void QTmsCsTest::CreateModemSink() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_ModemSink) { + status = m_Factory->CreateSink(QTMS_SINK_MODEM, m_ModemSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::CreateModemSource() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_ModemSource) { + status = m_Factory->CreateSource(QTMS_SOURCE_MODEM, m_ModemSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::AddModemSinkToStream() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_ModemSink) { + status = m_Uplink->AddSink(m_ModemSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::AddModemSourceToStream() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_ModemSource) { + status = m_Dnlink->AddSource(m_ModemSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::CreateMicSource() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_MicSource) { + status = m_Factory->CreateSource(TMS_SOURCE_MIC, m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::AddMicSourceToStream() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_MicSource) { + status = m_Uplink->AddSource(m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::CreateSpeakerSink() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_SpeakerSink) { + status = m_Factory->CreateSink(QTMS_SINK_SPEAKER, m_SpeakerSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::AddSpeakerSinkToStream() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_SpeakerSink) { + status = m_Dnlink->AddSink(m_SpeakerSink); + qDebug("QTMS speaker sink added to stream"); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); +} + +void QTmsCsTest::InitUplink() +{ + QVERIFY(m_Uplink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 1 ); +} + +void QTmsCsTest::InitDnlink() +{ + QVERIFY(m_Dnlink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 1 ); +} + +void QTmsCsTest::StartUplink() +{ + QVERIFY(m_Uplink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 2 ); +} + +void QTmsCsTest::StartDnlink() +{ + QVERIFY(m_Dnlink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 2 ); +} +void QTmsCsTest::StopUplink() +{ + QVERIFY(m_Uplink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 3 ); +} + +void QTmsCsTest::StopDnlink() +{ + QVERIFY(m_Dnlink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 3 ); +} + +void QTmsCsTest::CloseUplink() +{ + m_Uplink->Deinit(); + QTest::qWait(1000); + if (m_Uplink) { + if (m_Gain) { + QVERIFY(m_Uplink->RemoveEffect(m_Gain)== QTMS_RESULT_SUCCESS); + } + if (m_MicSource) { + QVERIFY(m_Uplink->RemoveSource(m_MicSource)== QTMS_RESULT_SUCCESS); + } + if (m_ModemSink) { + QVERIFY(m_Uplink->RemoveSink(m_ModemSink)== QTMS_RESULT_SUCCESS); + } + } +} + +void QTmsCsTest::CloseDownlink() +{ + m_Dnlink->Deinit(); + QTest::qWait(1000); + if (m_Dnlink) { + if (m_Vol) { + QVERIFY(m_Dnlink->RemoveEffect(m_Vol)== QTMS_RESULT_SUCCESS); + } + if (m_ModemSource) { + QVERIFY(m_Dnlink->RemoveSource(m_ModemSource)== QTMS_RESULT_SUCCESS); + } + if (m_SpeakerSink) { + QVERIFY(m_Dnlink->RemoveSink(m_SpeakerSink) == QTMS_RESULT_SUCCESS); + } + } + +} + +void QTmsCsTest::CreateStreamVol() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_Vol) { + status = m_Factory->CreateEffect(QTMS_EFFECT_VOLUME, m_Vol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Vol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + if (m_Dnlink) { + status = m_Dnlink->AddEffect(m_Vol); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + + } +} + +void QTmsCsTest::StreamVol() +{ + gint status(QTMS_RESULT_SUCCESS); + guint maxvol(0); + if (m_Vol) { + status = static_cast (m_Vol)->GetMaxLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + status = static_cast (m_Vol)->SetLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_Vol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(vol,maxvol); + } +} + +void QTmsCsTest::CreateStreamGain() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_Gain) { + status = m_Factory->CreateEffect(QTMS_EFFECT_GAIN, m_Gain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Gain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + if (m_Uplink) { + status = m_Uplink->AddEffect(m_Gain); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } +} + +void QTmsCsTest::StreamGain() +{ + gint status(QTMS_RESULT_SUCCESS); + if (m_Gain) { + guint maxgain(0); + static_cast (m_Gain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + static_cast (m_Gain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast (m_Gain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(gain,maxgain); + } + +} + +void QTmsCsTest::CreateGlobalVol() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalVol) { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, m_GlobalVol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalVol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxvol(0); + status = static_cast (m_GlobalVol)->GetMaxLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + status = static_cast (m_GlobalVol)->SetLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_GlobalVol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(vol,maxvol); + + } +} + +void QTmsCsTest::CreateGlobalGain() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalGain) { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, m_GlobalGain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalGain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxgain(0); + static_cast (m_GlobalGain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + static_cast (m_GlobalGain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast (m_GlobalGain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(gain,maxgain); + + } +} + +void QTmsCsTest::CreateRouting_data() +{ + gint status; + if (m_Factory && !m_Routing) { + status = m_Factory->CreateGlobalRouting(m_Routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_RoutingSpy = new QSignalSpy(m_Routing, + SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent, + QTMSAudioOutput))); + + QVERIFY( m_RoutingSpy->isValid() ); + + // QCOMPARE(m_RoutingSpy->count(), 0 ); + connect(m_Routing, SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent,QTMSAudioOutput)), this, + SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent,QTMSAudioOutput))); + } + + //Populate data and test based on available output + GetAvailableOutput(); +} + +void QTmsCsTest::CreateRouting() +{ + gint status(QTMS_RESULT_SUCCESS); + QFETCH(QTMSAudioOutput, routing); + + if (m_Routing) { + status = m_Routing->SetOutput(routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); +#ifndef __WINSCW__ + QTest::qWait(1000); + // QCOMPARE(m_RoutingSpy->count(), 1 ); +#endif + QTMSAudioOutput current; + status = m_Routing->GetOutput(current); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + QCOMPARE(routing,current); + + QTMSAudioOutput previous; + status = m_Routing->GetPreviousOutput(previous); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("Previous routing:"); + DisplayDevice(previous); + } +} + +void QTmsCsTest::GetAvailableOutput() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Routing) { + status = m_Routing->GetAvailableOutputs(m_Availableoutputs); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qDebug("Available outputs: %d", m_Availableoutputs.size()); + std::vector::iterator iteroutputs = m_Availableoutputs.begin(); + for (; iteroutputs < m_Availableoutputs.end(); iteroutputs++) { + DisplayDevice(*iteroutputs); + } + } +} + +void QTmsCsTest::DisplayDevice(QTMSAudioOutput device) +{ + QTest::addColumn("routing"); + + switch (device) { + case QTMS_AUDIO_OUTPUT_NONE: + { + qDebug("none"); + QTest::newRow("None") << QTMS_AUDIO_OUTPUT_NONE; + } + break; + case QTMS_AUDIO_OUTPUT_PUBLIC: + { + qDebug("Public"); + QTest::newRow("Public") << QTMS_AUDIO_OUTPUT_PUBLIC; + } + break; + case QTMS_AUDIO_OUTPUT_PRIVATE: + { + qDebug("Private"); + QTest::newRow("Private") << QTMS_AUDIO_OUTPUT_PRIVATE; + } + break; + case QTMS_AUDIO_OUTPUT_HANDSET: + { + qDebug("Handset"); + QTest::newRow("Handset") << QTMS_AUDIO_OUTPUT_HANDSET; + } + break; + case QTMS_AUDIO_OUTPUT_LOUDSPEAKER: + { + qDebug("Loudspeaker"); + QTest::newRow("Loud speaker") << QTMS_AUDIO_OUTPUT_LOUDSPEAKER; + } + break; + case QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY: + { + qDebug("Wired accessory"); + QTest::newRow("Wired accessory") << QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY; + } + break; + case QTMS_AUDIO_OUTPUT_ACCESSORY: + { + qDebug("Accessory"); + QTest::newRow("Accessory") << QTMS_AUDIO_OUTPUT_ACCESSORY; + } + break; + case QTMS_AUDIO_OUTPUT_ETTY: + { + qDebug("TTY"); + QTest::newRow("ETTY") << QTMS_AUDIO_OUTPUT_ETTY; + } + break; + default: + break; + } +} + +void QTmsCsTest::CreateDnlinkDtmf() +{ + gint status(QTMS_RESULT_SUCCESS); + GString* dtmfstring(NULL); + + status = m_Factory->CreateDTMF(QTMS_STREAM_DOWNLINK, m_Dnlnkdtmf); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (m_Dnlnkdtmf) { + QSignalSpy dtmfspy(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + QVERIFY( dtmfspy.isValid() ); + + //QCOMPARE(dtmfspy.count(), 0 ); + + connect(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this, + SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + dtmfstring = g_string_new("4723"); + status = m_Dnlnkdtmf->SetTone(dtmfstring); + + m_Dnlnkdtmf->Start(); + QTest::qWait(1000); + g_string_free(dtmfstring, TRUE); + //QCOMPARE(dtmfspy.count(), 1 ); + + status = m_Dnlnkdtmf->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(dtmfspy.count(), 2 ); + + } +} + +void QTmsCsTest::CreateUplinkDtmf() +{ + gint status(QTMS_RESULT_SUCCESS); + GString* dtmfstring(NULL); + + status = m_Factory->CreateDTMF(QTMS_STREAM_UPLINK, m_Uplnkdtmf); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (m_Uplnkdtmf) { + QSignalSpy uplinkdtmfspy(m_Uplnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + QVERIFY( uplinkdtmfspy.isValid() ); + + //QCOMPARE(dtmfspy.count(), 0 ); + + connect(m_Uplnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this, + SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + dtmfstring = g_string_new("4723"); + status = m_Uplnkdtmf->SetTone(dtmfstring); + + m_Uplnkdtmf->Start(); + QTest::qWait(1000); + g_string_free(dtmfstring, TRUE); + //QCOMPARE(dtmfspy.count(), 1 ); + + m_Uplnkdtmf->ContinueDTMFStringSending(FALSE); + + status = m_Uplnkdtmf->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(dtmfspy.count(), 2 ); + + } +} + +void QTmsCsTest::CreateInband_data() +{ + + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_InbandTonePlayer) { + status = m_Factory->CreateInbandTonePlayer(m_InbandTonePlayer); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + m_InbandSpy = new QSignalSpy(m_InbandTonePlayer, + SIGNAL(InbandToneEvent(const QTMSInbandTone&,QTMSSignalEvent))); + + QVERIFY( m_InbandSpy->isValid() ); + + //QCOMPARE(m_InbandSpy->count(), 0 ); + connect(m_InbandTonePlayer, + SIGNAL(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent)), this, + SLOT(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent))); + } + + QTest::addColumn("inbandTone"); + + QTest::newRow("Busy") << QTMS_INBAND_USER_BUSY; + QTest::newRow("Path not avail") << QTMS_INBAND_RADIO_PATH_NOT_AVAIL; + QTest::newRow("Congestion") << QTMS_INBAND_CONGESTION; + QTest::newRow("Special info") << QTMS_INBAND_SPECIAL_INFO; + QTest::newRow("Reorder") << QTMS_INBAND_REORDER; + QTest::newRow("Remote alerting") << QTMS_INBAND_REMOTE_ALEARTING; + QTest::newRow("call waiting") << QTMS_INBAND_CALL_WAITING; + QTest::newRow("data call") << QTMS_INBAND_DATA_CALL; + QTest::newRow("no sequence") << QTMS_INBAND_NO_SEQUENCE; + QTest::newRow("beep sequence") << QTMS_INBAND_BEEP_SEQUENCE; + +} + +void QTmsCsTest::CreateInband() +{ + gint status(QTMS_RESULT_SUCCESS); + QFETCH(QTMSInbandToneType, inbandTone); + + if (m_InbandTonePlayer) { + status = m_InbandTonePlayer->Start(inbandTone); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + // QCOMPARE(m_InbandSpy->count(), 1 ); + + status = m_InbandTonePlayer->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + // QCOMPARE(m_InbandSpy->count(), 2 ); + } +} + +void QTmsCsTest::CreateRingTone() +{ + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory) { + status = m_Factory->CreateRingTonePlayer(m_RingTonePlayer); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(m_RingTonePlayer, SIGNAL(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)), this, + SLOT(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent))); + } + +} + +void QTmsCsTest::InitRingTonePlayerFromProfiles() +{ + if (m_RingTonePlayer) { + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_DEFAULT); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } + +} + +void QTmsCsTest::InitRingTonePlayerFromFile() +{ + if (m_RingTonePlayer) { + TBuf buf(KTestFile1); + m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length() * 2); + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_FILE, m_RTStr); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + g_string_free(m_RTStr, TRUE); + m_RTStr = NULL; + } + +} + +void QTmsCsTest::InitRingToneSequencePlayer() +{ + if (m_RingTonePlayer) { + TBuf8 buf(KRTBeepSequence); + m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length()); + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_SEQUENCE, m_RTStr); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + g_string_free(m_RTStr, TRUE); + } +} + +void QTmsCsTest::PlayRingTone() +{ + if (m_RingTonePlayer) { + gint status = m_RingTonePlayer->Play(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } +} + +void QTmsCsTest::PauseRingTone() +{ + if (m_RingTonePlayer) { + gint status = m_RingTonePlayer->Pause(); //pause audio for video RT only + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } +} + +void QTmsCsTest::StopRingTone() +{ + if (m_RingTonePlayer) { + gint status = m_RingTonePlayer->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } +} + +void QTmsCsTest::MuteRingTone() +{ + if (m_RingTonePlayer) { + m_RingTonePlayer->Mute(); + } +} + +void QTmsCsTest::CloseRingTonePlayer() +{ + if (m_Factory && m_RingTonePlayer) { + m_RingTonePlayer->Deinit(); + m_Factory->DeleteRingTonePlayer(m_RingTonePlayer); + } +} + +void QTmsCsTest::EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event) +{ + QTMSEffectType effecttype; + const_cast (tmseffect).GetType(effecttype); + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + switch (effecttype) { + case TMS_EFFECT_GLOBAL_VOL: + { + switch (event.type) { + case TMS_EVENT_EFFECT_VOL_CHANGED: + qDebug("Global vol effect change"); + break; + default: + break; + } + } + break; + case TMS_EFFECT_GLOBAL_GAIN: + { + switch (event.type) { + case TMS_EVENT_EFFECT_GAIN_CHANGED: + qDebug("Global gain effect change"); + break; + default: + break; + } + } + break; + case TMS_EFFECT_VOLUME: + qDebug("Stream vol effect change"); + break; + case TMS_EFFECT_GAIN: + qDebug("Stream gain effect change"); + break; + default: + break; + } +} + +void QTmsCsTest::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/, QTMSSignalEvent event, + QTMSAudioOutput /*output*/) +{ + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) { + case TMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED: + qDebug("Available outputs changed"); + break; + case TMS_EVENT_ROUTING_OUTPUT_CHANGED: + qDebug("output changed"); + break; + case TMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE: + qDebug("set output complete"); + break; + default: + break; + } + +} + +void QTmsCsTest::TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event) +{ + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + gint streamId; + streamId = const_cast (stream).GetStreamId(); + qDebug("StreamID %d", streamId); + gint state; + state = const_cast (stream).GetState(); + QVERIFY(state == event.curr_state); + + switch (const_cast (stream).GetStreamType()) { + case QTMS_STREAM_UPLINK: + { + switch (event.type) { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) { + case QTMS_STREAM_INITIALIZED: + { + qDebug("Uplink initialized "); + break; + } + case QTMS_STREAM_UNINITIALIZED: + qDebug("Uplink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Uplink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Uplink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + case QTMS_STREAM_DOWNLINK: + { + switch (event.type) { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) { + case QTMS_STREAM_INITIALIZED: + { + qDebug("Downlink initialized "); + break; + } + case QTMS_STREAM_UNINITIALIZED: + qDebug("Downlink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Downlink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Downlink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + default: + break; + } +} + +void QTmsCsTest::RingtoneEvent(const QTMSRingTone& /*rt*/, QTMSSignalEvent event) +{ + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) { + case TMS_EVENT_RINGTONE_OPEN_COMPLETE: + qDebug("RT Open Complete"); + break; + case TMS_EVENT_RINGTONE_PLAY_COMPLETE: + qDebug("RT Play Complete"); + break; + default: + break; + } +} + +void QTmsCsTest::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event) +{ + if (event.reason != QTMS_RESULT_SUCCESS) { + QEXPECT_FAIL("","Need to be in call, expect uplink dtmf to fail", Continue); + } + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + switch (event.type) { + case QTMS_EVENT_DTMF_TONE_STARTED: + qDebug("DTMF Started"); + break; + case QTMS_EVENT_DTMF_TONE_STOPPED: + qDebug("DTMF Stopped"); + break; + default: + break; + } +} + +void QTmsCsTest::InbandToneEvent(const QTMSInbandTone& /*inbandtone*/, QTMSSignalEvent event) +{ + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) { + case QTMS_EVENT_INBAND_TONE_STARTED: + qDebug("Inband Tone Started"); + break; + case QTMS_EVENT_INBAND_TONE_STOPPED: + qDebug("Inband Tone Stopped"); + break; + default: + break; + } +} + +QTEST_MAIN_S60(QTmsCsTest) + +#include "qtmscstest.moc" +