phoneapp/phoneringingtoneplayer/src/rphonetoneclient.cpp
author hgs
Fri, 15 Oct 2010 12:58:46 +0300
changeset 78 baacf668fe89
permissions -rw-r--r--
201041

/*
* Copyright (c) 2002-2005,2007 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:  Client interface of the phone ringing tone server.
*
*/


// INCLUDE FILES
#include <e32base.h>
#include <e32std.h>
#include <e32svr.h>

#include "rphonetoneclient.h"
#include "cphonetoneserver.h"
#include "tphonecmdparamringtone.h"
#include "phoneringingtonetrace.h"

// LOCAL FUNCTION PROTOTYPES
static TInt StartServer();

// -----------------------------------------------------------------------------
// RPhoneToneClient::RPhoneToneClient
// -----------------------------------------------------------------------------
//
EXPORT_C RPhoneToneClient::RPhoneToneClient() : RSessionBase()
    {
    }

// -----------------------------------------------------------------------------
// RPhoneToneClient::~RPhoneToneClient
// -----------------------------------------------------------------------------
//
EXPORT_C RPhoneToneClient::~RPhoneToneClient()
    {
    Close();
    }

// -----------------------------------------------------------------------------
// RPhoneToneClient::Connect
// -----------------------------------------------------------------------------
//
EXPORT_C TInt RPhoneToneClient::Connect()
    {
    PHONERINGINGTONE_PRINT("RPhoneToneClient::Connect <");  
    
    TBool reConnect( EFalse );
   
    TInt err = CreateSession( KRingingToneServerName, 
            TVersion( KRingingToneSrvVersionMajor,
                      KRingingToneSrvVersionMinor,
                      KRingingToneSrvVersionBuild ) ); 

    if ( KErrNotFound == err )
        {
         err = StartServer();

         if ( !err )
             {
             reConnect = ETrue;
             }
        }

    if ( reConnect )
        {
        err = CreateSession( KRingingToneServerName, 
           TVersion( KRingingToneSrvVersionMajor,
                     KRingingToneSrvVersionMinor,
                     KRingingToneSrvVersionBuild ) );
        }

    PHONERINGINGTONE_PRINTF("RPhoneToneClient::Connect - err(%d)", err);
    PHONERINGINGTONE_PRINT("RPhoneToneClient::Connect >");
    return err;

    }

// -----------------------------------------------------------------------------
// StartServer
// -----------------------------------------------------------------------------
//
TInt StartServer()
    {
    PHONERINGINGTONE_PRINT("RPhoneToneClient - StartServer <");
    // Form thread name
    TTime time;
    time.UniversalTime();

    TFullName threadName;
    threadName.Format( _L("PhoneRingingToneThread%Ld"), time.Int64() );

    // Create thread
    RThread thread;
    TInt err = thread.Create( threadName, 
            CPhoneToneServer::ThreadEntryFunc, 
            0x8000, 
            NULL, 
            NULL );
    
    PHONERINGINGTONE_PRINTF("RPhoneToneClient - StartServer - err(%d)", err);
    if ( err )
        {
        thread.Close();
        return err;
        }

    thread.SetPriority( EPriorityAbsoluteHigh );
    TRequestStatus status;
    thread.Rendezvous( status );

    thread.Resume();

    // Wait for thread start or death
    User::WaitForRequest( status );
    thread.Close();
    PHONERINGINGTONE_PRINT("RPhoneToneClient - StartServer >");
    return status.Int();
    }

// -----------------------------------------------------------------------------
// RPhoneToneClient::PlayRingingToneL
// -----------------------------------------------------------------------------
//
EXPORT_C void RPhoneToneClient::PlayRingingToneL( TPhoneCommandParam *aCommandParam )
    {
    PHONERINGINGTONE_PRINT("RPhoneToneClient::PlayRingingToneL <");
    
    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdRingTone )
        {
        TPhoneCmdParamRingTone* ringToneParam = 
            static_cast<TPhoneCmdParamRingTone*>( aCommandParam );
            
        TIpcArgs args( &( ringToneParam->RingTone() ), 
                ringToneParam->Volume(), 
                ringToneParam->RingingType() );
        User::LeaveIfError( SendReceive( EPlayAudioRingTone, args ) );
        }
    PHONERINGINGTONE_PRINT("RPhoneToneClient::PlayRingingToneL >");
    }

// -----------------------------------------------------------------------------
// RPhoneToneClient::StopPlaying
// -----------------------------------------------------------------------------
//
EXPORT_C void RPhoneToneClient::StopPlayingL()
    {
    PHONERINGINGTONE_PRINT("RPhoneToneClient::StopPlayingL <");    
    User::LeaveIfError( SendReceive( EStopPlaying ) );
    PHONERINGINGTONE_PRINT("RPhoneToneClient::StopPlayingL >"); 
    }

// End of file