phonesrv_plat/converged_call_engine_api/inc/mccecall.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006 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:  Interface for CCE call object
*
*/


#ifndef MCCECALL_H
#define MCCECALL_H

#include <e32base.h>
#include <e32std.h> // TTimeIntervalSeconds
#include <e32cmn.h> // TName
#include <badesca.h>

#include "ccpdefs.h"
#include "mccecallobserver.h"
#include "mccecscall.h"
#include "mccetransferinterface.h"
#include "mcceforwardinterface.h"
#include "mcceextensioninterface.h"
#include "cccecallparameters.h" // For CCCECallParameters

#include <ccpdefs.h>
#include <mccpcall.h> // For CCCPCallParameters




/**
 *  CCE call interface
 *  @lib cce.dll
 *  @since S60 v3.2
 */
class MCCECall : public MCCETransferInterface,
                 public MCCEForwardInterface,
                 public MCCECSCall
    {
public:




	/**
    * Set new MCCECallObserver observer to MCCECall object.
    * Called in case of incoming call. In that case call has no observer yet when it 
    * is created. In MO case observer is set when call is created. Repleces current observer 
    * if called at any other time.
    * @since S60 v3.2
    * @param aCallObserver New observer. TODO const
    * @return none
    */
    virtual void SetObserver( const MCCECallObserver& aObserver ) = 0;

/************************************************************************/
/*                             Basic call functions                     */
/************************************************************************/
   
    /**
    * Attempts to establish a connection using the address/number given .
    * in CCCE::OpenNewCallL.
    * @since S60 v3.2
    * @param aCallParams The call parameters used by the TSY (a TCallParamsPckg object. 
    * CS call specific). 
    * @return KErrNone if request was started succesfully. 
    * @return KErrNotReady if call is not in idle state
    * @return KErrNotSupported If call is not mobile originated
    * @pre Call state is MCCECallObserver::EStateIdle and call type is MO
    */
    virtual TInt Dial( const TDesC8& aDialParams ) = 0;

    /**
    * Puts a call on hold.
    * Operation results will come via MCCECallObserver. 
    * @since S60 v3.2
    * @param none
    * @return KErrNone if request was started succesfully. 
    * @return KErrNotReady if call is not in connected state
    * @return KErrAlreadyExists if call is already on hold
    * @pre Call state is MCCECallObserver::EStateConnected or MCCECallObserver::ECCPStateTransferring
    * Transferring state is allowed only if previous state before transferring state was on-hold.
    */
    virtual TInt Hold() = 0;

    /**
    * Resumes the call that is on hold.
    * Operation results will come via MCCECallObserver. 
    * @since S60 v3.2
    * @param none
    * @return KErrNone if request was started succesfully. 
    * @return KErrAlreadyExists if call is already on connected state
    * @return KErrNotReady if call is not in on-hold state
    * @pre Call state is MCCECallObserver::EStateHold 
    */
    virtual TInt Resume() = 0;
    
    /**
    * Swaps a connected call to holded state and resumes held call.
    * Currently called only for active call. 
    * For CS call calls Swap in CCP interface. 
    * For other calls holds the call first and then resumes the other call.
    * @since S60 v3.2
    * @param none
    * @return KErrNone if request was started succesfully. 
    * @return KErrNotReady if call is not on in connected state.
    * @pre Call is in connected state.
    * @pre Active and held call exist.
    */
    virtual TInt Swap() = 0;
    
    /**
    * Terminates a call.
    *
    * @since S60 v3.2
    * @param none
    * @return KErrNone if request was started succesfully. 
    * @return KErrAlreadyExists if call is already in idle state
    * @pre Call state is not MCCECallObserver::EStateIdle
    */
    virtual TInt HangUp() = 0;

    /**
    * Answer an incoming call
    *
    * @since S60 v3.2
    * @param none
    * @return KErrNone if request was started succesfully.
    * @return KErrNotReady if call is not in ringing or queued state.
    * @return KErrInUse connected and held call already exist.
    * @pre Call state is MCCECallObserver::EStateRinging or MCCECallObserver::EStateQueued
    */
    virtual TInt Answer() = 0;

    /**
    * Releases the call object.
    * This must be called to free all the resources reserved for the call.
    * After this call PE MUST not be access the call objectanymore and observer 
    * for the class must not be used in CCE.
    * This operation MUST always succeed. Client has to be sure call is  
    * cleared from the system and all resuorces are returned to the state before calling 
    * CCCE::OpenNewCallL.
    * It is CCE's internal issue how it handles the actual call resources etc, and no 
    * notification will result back from this operation to client. The operation means the same 
    * as deleting an object pointer in code from PE point of view.
    * @since S60 v3.2
    * @param none
    * @return KErrNone
    * @pre None, can always be called.
    * @post CCE must quarantee all resources for the call will be cleaned up. Call MUST not 
    * be referenced anymore from PE and CCE must not call MCCECallObserver after this call!
    */
    virtual TInt Release() = 0;

    /**
    * Replaces active call with incoming call
    * @since S60 3.2
    * @param none
    * @return KErrNone if request was started succesfully.
    * @return KErrNotSupported in case when request could not be executed
    */
    virtual TInt ReplaceActive() = 0;

/************************************************************************/
/*                             Util                                    */
/************************************************************************/
    /**
    * Returns the service-id used for the call.
    * @since S60 3.2
    * @param none
    * @return TUint32 Service-id
    */
    virtual TUint32 ServiceId() const = 0;

    /**
    * Returns duration of a call. 
    * CCE will count duration from connected state to idle state.
    *
    * @since S60 v3.2
    * @param none
    * @return On return contains the call duration in seconds.
    */
    virtual TTimeIntervalSeconds CallDuration() const = 0;

    /**
    * Returns start time of the call.
    *
    * @since S60 v3.2
    * @param none
    * @return On return contains the call start time.
    */
    virtual TDateTime StartTime() const = 0;
    
    /**
    * Return call control capabilities defined in MCCECallObserver::TCCECallControlCaps.
    *
    * @since S60 v3.2
    * @param none
    * @return Call control capabilities
    */
    virtual MCCECallObserver::TCCECallControlCaps Caps() const = 0;

    /**
    * Return current call state.
    *
    * @since S60 v3.2
    * @param none
    * @return Current call state
    */
    virtual CCPCall::TCallState State() const = 0;

    /**
    * Return if call secure status is specified or not.
    * @since Series 60 5.0
    * @param None.
    * @return TBool ETrue if security is specified, else EFalse.
    */
    virtual TBool SecureSpecified() const = 0;

    /**
    * Get call's secure status.
    * @since Series 60 3.2
    * @param None.
    * @return TBool ETrue if security is enabled, else EFalse.
    */
    virtual TBool IsSecured() const = 0;

    /**
    * Returns if call is an emergency call or not.
    * @since Series 60 3.2
    * @param None.
    * @return TBool ETrue call is emergency call else EFalse.
    */
    virtual TBool IsEmergency() const = 0;

    /**
    * Returns the remote party number or address of the call. 
    * In case returned remote party value is KNullDesC it means the remote party is
    * regarded as anonymous.
    * Can be different than returned from MCCECall::DialledParty().
    * @since S60 3.2
    * @param None
    * @return Remote party address or number
    */
    virtual const TDesC& RemoteParty() const = 0;

    /**
    * Returns the remote party name of the call. 
    * @since S60 5.0
    * @param None
    * @return Remote party name. KNullDesC if not available.
    */
    virtual const TDesC& RemotePartyName() const = 0;

    /**
    * Returns the original dialled party. The original number (e.g. including DTMF) dialled 
    * for an outgoing call.
    * Can be different than returned from MCCECall::RemoteParty().
    * @since S60 3.2
    * @param None
    * @return Dialled party,
    */
    virtual const TDesC& DialledParty() const = 0;

    /**
	* Set call parameters.
	* @since S60 3.2
	* @param aNewParams New call paramater information.
	* @return none
	*/
    virtual void SetParameters( const CCCECallParameters& aNewParams ) = 0;

    /**
	* Get call parameters.
	* @since S60 3.2
	* @param None
	* @return Current call paramater information.
	*/
    virtual const CCCPCallParameters& Parameters() const = 0;

    /**
    * Returns the inband tone associated to an error condition or a state transition of a call.
	* See defenition for TCCPTone.
    * @since S60 3.2
    * @param None.
    * @return TCCPTone Used tone.
    */
    virtual TCCPTone Tone() const = 0;

   /**
	* Get call information. NOTE: will be removed shortly. Stop using this call use relevant getters instead!
	* TODO this needs to be rechecked if params are to be defined in CCE as a struct for example and to return that!
	* @since S60 3.2
	* @param aCallInfo TMobileCallInfoV3 - TODO check this
	* @return none
	*/
	virtual void GetMobileCallInfo( TDes8& aCallInfo ) const = 0;
 
/************************************************************************/
/*                             Emergency call                           */
/************************************************************************/
    /**
    * Places an emergency call request. When starting the request firrst terminates 
    * all but ringing and queued calls.
    * @since S60 v3.2
    * @param aNumber The emergency number / address
    * @return none
    */
    virtual void DialEmergencyCall( const TDesC& aNumber ) = 0;
    
    /**
     * Returns the call index of the call. The call index is valid
     * only for calls, which are in non idle states.
     * @since S60 5.2
     * @return Call index
     */
     virtual TInt CallIndex() const = 0;
    };

#endif // MCCECALL_H