--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelmultimode/CETEL/mm_call.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1499 @@
+// Copyright (c) 1997-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:
+// Contains method implementations for RMobileCall subsession
+//
+//
+
+/**
+ @file
+*/
+
+#include <etelext.h>
+#include <etelmm.h>
+#include <et_clsvr.h>
+#include "mm_hold.h"
+
+/************************************************************************/
+//
+// RMobileCall
+//
+/************************************************************************/
+
+EXPORT_C RMobileCall::RMobileCall()
+ : iMmPtrHolder(NULL)
+/** Default constructor, and is present only to support virtual
+function table export.
+This member is internal and not intended use. */
+ {
+ }
+
+EXPORT_C void RMobileCall::ConstructL()
+ {
+ RCall::ConstructL();
+ __ASSERT_ALWAYS(iMmPtrHolder==NULL,PanicClient(EEtelPanicHandleNotClosed));
+ iMmPtrHolder = CMobileCallPtrHolder::NewL(CMobileCallPtrHolder::EMaxNumberCallPtrSlots,CMobileCallPtrHolder::EMaxNumberCallPtrCSlots);
+ }
+
+EXPORT_C void RMobileCall::Destruct()
+ {
+ RCall::Destruct();
+ delete iMmPtrHolder;
+ iMmPtrHolder = NULL;
+ }
+
+EXPORT_C RMobileCall::TMobileCallParamsV1::TMobileCallParamsV1()
+: RCall::TCallParams(),
+ iIdRestrict(EIdRestrictDefault),
+ iAutoRedial(EFalse)
+ {
+ iCug.iExplicitInvoke = EFalse;
+ iCug.iCugIndex = 0;
+ iCug.iSuppressOA = EFalse;
+ iCug.iSuppressPrefCug = EFalse;
+ iExtensionId = KETelMobileCallParamsV1; //overwrite iExtensionId setup in RCall::TCallParams c'tor
+ }
+
+EXPORT_C RMobileCall::TMobileCallParamsV2::TMobileCallParamsV2()
+: TMobileCallParamsV1(),
+ iBearerMode(EMulticallNotSupported)
+ /** Default constructor. The bearer mode is set to EMulticallNotSupported. */
+ {
+ iExtensionId = KETelMobileCallParamsV2; //overwrite iExtensionId setup in RCall::TCallParams c'tor
+ }
+
+EXPORT_C RMobileCall::TMobileCallParamsV7::TMobileCallParamsV7()
+: TMobileCallParamsV2(),
+ iCallParamOrigin(EOriginatorUnknown),
+ iBCRepeatIndicator(EBCAlternateMode)
+ {
+ iExtensionId = KETelMobileCallParamsV7;
+ iIconId.iQualifier = EIconQualifierNotSet;
+ iIconId.iIdentifier = 0;
+ }
+
+
+/***********************************************************************************/
+//
+// MobileDataCall Functional Unit
+//
+/***********************************************************************************/
+
+EXPORT_C RMobileCall::TMobileCallCugV1::TMobileCallCugV1() :
+ iExplicitInvoke(EFalse),
+ iCugIndex(0),
+ iSuppressOA(EFalse),
+ iSuppressPrefCug(EFalse)
+ /** Default constructor, and is present only to support virtual
+ function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C RMobileCall::TMobileCallDataCapsV1::TMobileCallDataCapsV1() :
+ iSpeedCaps(0),
+ iProtocolCaps(0),
+ iServiceCaps(0),
+ iQoSCaps(0),
+ iHscsdSupport(EFalse),
+ iMClass(0),
+ iMaxRxTimeSlots(0),
+ iMaxTxTimeSlots(0),
+ iTotalRxTxTimeSlots(0),
+ iCodingCaps(0),
+ iAsymmetryCaps(0),
+ iUserInitUpgrade(EFalse),
+ iRLPVersionCaps(0),
+ iV42bisCaps(0)
+ /** Default constructor, and is present only to support virtual
+ function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileCall::GetMobileDataCallCaps(TDes8& aCaps) const
+/** Gets the current data call capabilities. The data capabilities
+provide clients with knowledge of which data call parameter values they can
+then set-up or negotiate for this call.
+
+@param aCaps On completion, contains the current snapshot of the call's circuit
+switched data capabilities. The capabilities will be placed in an instance
+of the TMobileCallDataCapsV1Pckg.
+@return KErrNone if the function member was successful, KErrNotSupported if
+call does not support circuit switched data, KErrNotFound if this
+call is not a data call.
+@capability None
+*/
+ {
+ return Get(EMobileCallGetMobileDataCallCaps,aCaps);
+ }
+
+EXPORT_C void RMobileCall::NotifyMobileDataCallCapsChange(TRequestStatus& aReqStatus, TDes8& aCaps) const
+/** Allows clients to be notified of a change in the call's data capabilities.
+
+The data capabilities of a call can change if the phone changes mode before
+the call moves out of the idle state.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyMobileDataCallCapsChange)
+to cancel a previously placed asynchronous NotifyMobileDataCallCapsChange()
+request.
+
+@param aReqStatus KErrNone if successful, otherwise another of the system-wide
+error codes.
+@param aCaps On completion, contains the current snapshot of the call's circuit
+switched data capabilities. The new capabilities will be placed in an instance
+of the TMobileCallDataCapsV1 type. This class will have been packaged into
+a TMobileCallDataCapsV1Pckg.
+@capability None
+*/
+ {
+ Get(EMobileCallNotifyMobileDataCallCapsChange,aReqStatus,aCaps);
+ }
+
+EXPORT_C RMobileCall::TMobileDataRLPRangesV1::TMobileDataRLPRangesV1() :
+ iIWSMax(0),
+ iIWSMin(0),
+ iMWSMax(0),
+ iMWSMin(0),
+ iT1Max(0),
+ iT1Min(0),
+ iN2Max(0),
+ iN2Min(0),
+ iT4Max(0),
+ iT4Min(0)
+ /** Default constructor, and is present only to support virtual
+ function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C void RMobileCall::GetMobileDataCallRLPRange(TRequestStatus& aReqStatus, TInt aRLPVersion, TDes8& aRLPRange) const
+/** Gets the minimum and maximum RLP parameter ranges supported
+by the phone for the specified RLP version.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallGetMobileDataCallRLPRange)with
+to cancel a previously placed asynchronous GetMobileDataCallRLPRange() request.
+
+@param aReqStatus KErrNone if the function member was successful, KErrNotSupported
+if the phone does not support the RLP version interrogated.
+@param aRLPVersion The requested RLP version.
+@param aRLPRange On completion, a descriptor that will contain the RLP parameter
+ranges. The capabilities will be packaged into a TMobileDataRLPRangesV1Pckg.
+@capability NetworkControl
+@capability ReadDeviceData
+
+@see TMobileDataRLPRangesV1Pckg
+@see TMobileDataRLPRangesV1
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iMmPtrHolder->iRLPVersion = aRLPVersion;
+ TPtrC8& ptr1=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot1GetMobileDataCallRLPRange, iMmPtrHolder->iRLPVersion);
+
+ SetAndGet(EMobileCallGetMobileDataCallRLPRange, aReqStatus, ptr1, aRLPRange);
+ }
+
+EXPORT_C RMobileCall::TMobileDataCallParamsV1::TMobileDataCallParamsV1()
+: TMobileCallParamsV1(),
+ iService(EServiceUnspecified),
+ iSpeed(ESpeedUnspecified),
+ iProtocol(EProtocolUnspecified),
+ iQoS(EQoSUnspecified),
+ iRLPVersion(ERLPNotRequested),
+ iModemToMSWindowSize(0),
+ iMSToModemWindowSize(0),
+ iAckTimer(0),
+ iRetransmissionAttempts(0),
+ iResequencingPeriod(0),
+ iV42bisReq(EV42bisNeitherDirection),
+ iV42bisCodewordsNum(0),
+ iV42bisMaxStringLength(0),
+ iUseEdge(0)
+/**
+Default constructor, and is present only to support virtual
+function table export.
+*/
+ {
+ iExtensionId = KETelMobileDataCallParamsV1; //overwrite iExtensionId setup in TMobileCallParamsV1 c'tor
+ }
+
+EXPORT_C RMobileCall::TMobileDataCallParamsV2::TMobileDataCallParamsV2()
+: TMobileDataCallParamsV1(),
+ iBearerMode(EMulticallNotSupported)
+/** Default constructor. The bearer mode is set to EMulticallNotSupported. */
+ {
+ iExtensionId = KETelMobileDataCallParamsV2; //overwrite iExtensionId setup in TMobileCallParamsV2 c'tor
+ }
+
+EXPORT_C RMobileCall::TMobileDataCallParamsV8::TMobileDataCallParamsV8()
+: TMobileDataCallParamsV2(),
+ iCallParamOrigin(EOriginatorUnknown),
+ iBCRepeatIndicator(EBCAlternateMode)
+/** Default constructor. The call origin is initialized to EOriginatorUnknown. */
+ {
+ iExtensionId = KETelMobileDataCallParamsV8;
+ iIconId.iQualifier = EIconQualifierNotSet;
+ iIconId.iIdentifier = 0;
+ }
+
+EXPORT_C RMobileCall::TMobileHscsdCallParamsV1::TMobileHscsdCallParamsV1()
+: TMobileDataCallParamsV1(),
+ iWantedAiur(EAiurBpsUnspecified),
+ iWantedRxTimeSlots(0),
+ iMaxTimeSlots(0),
+ iCodings(0),
+ iAsymmetry(EAsymmetryNoPreference),
+ iUserInitUpgrade(EFalse)
+/** Default constructor, and is present only to support virtual
+function table export. */
+ {
+ iExtensionId = KETelMobileHscsdCallParamsV1; //overwrite iExtensionId setup in TMobileDataCallParamsV1 c'tor
+ }
+
+
+EXPORT_C RMobileCall::TMobileHscsdCallParamsV2::TMobileHscsdCallParamsV2()
+: TMobileHscsdCallParamsV1(),
+ iBearerMode(EMulticallNotSupported)
+/** Default constructor. The bearer mode defaults to EMulticallNotSupported. */
+ {
+ iExtensionId = KETelMobileHscsdCallParamsV2; //overwrite iExtensionId setup in TMobileDataCallParamsV2 c'tor
+ }
+
+EXPORT_C RMobileCall::TMobileHscsdCallParamsV7::TMobileHscsdCallParamsV7()
+: TMobileHscsdCallParamsV2(),
+ iCallParamOrigin(EOriginatorUnknown)
+/** Default constructor. The call origin is set to EOriginatorUnknown by default. */
+ {
+ iExtensionId = KETelMobileHscsdCallParamsV7;
+ iIconId.iQualifier = EIconQualifierNotSet;
+ iIconId.iIdentifier = 0;
+ }
+EXPORT_C RMobileCall::TMobileHscsdCallParamsV8::TMobileHscsdCallParamsV8()
+: TMobileHscsdCallParamsV7(),
+ iBCRepeatIndicator(EBCAlternateMode)
+/** Default constructor. The BC Repeat Indicator is initialized to EBCAlternateMode. */
+ {
+ iExtensionId = KETelMobileHscsdCallParamsV8;
+ }
+EXPORT_C void RMobileCall::SetDynamicHscsdParams(TRequestStatus& aReqStatus, TMobileCallAiur aAiur, TInt aRxTimeslots) const
+/** Sets the call's dynamic HSCSD parameters.
+
+This request can be used before call set-up starts or during call connection.
+If the call is not a HSCSD call then KErrNotSupported is returned.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallSetDynamicHscsdParams)
+to cancel a previously placed asynchronous SetDynamicHscsdParams() request.
+
+@param aReqStatus KErrNone if the function member was successful, KErrNotSupported
+if the phone does not support the RLP version interrogated.
+@param aAiur Wanted air interface user rate.
+@param aRxTimeslots Wanted number of receive (downlink) timeslots.
+@capability NetworkServices
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iMmPtrHolder->iAiur = aAiur;
+ TPtrC8& ptr1=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot1SetDynamicHscsdParams, iMmPtrHolder->iAiur);
+
+ iMmPtrHolder->iRxTimeslots = aRxTimeslots;
+ TPtrC8& ptr2=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot2SetDynamicHscsdParams, iMmPtrHolder->iRxTimeslots);
+
+ Set(EMobileCallSetDynamicHscsdParams,aReqStatus,ptr1,ptr2);
+ }
+
+EXPORT_C RMobileCall::TMobileCallHscsdInfoV1::TMobileCallHscsdInfoV1() :
+ iAiur(EAiurBpsUnspecified),
+ iRxTimeSlots(0),
+ iTxTimeSlots(0),
+ iCodings(ETchCodingUnspecified)
+/** Default constructor, and is present only to support virtual
+function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C RMobileCall::TMobileCallHscsdInfoV7::TMobileCallHscsdInfoV7() :
+ iCallParamOrigin(EOriginatorUnknown)
+/** Default constructor, and is present only to support virtual
+function table export. */
+ {
+ iExtensionId = KEtelExtMultimodeV7;
+ }
+EXPORT_C RMobileCall::TMobileCallHscsdInfoV8::TMobileCallHscsdInfoV8()
+: iBCRepeatIndicator(EBCAlternateMode)
+/** Default constructor. The BC Repeat Indicator is initialized to EBCAlternateMode. */
+ {
+ iExtensionId = KEtelExtMultimodeV8;
+ }
+
+EXPORT_C TInt RMobileCall::GetCurrentHscsdInfo(TDes8& aHSCSDInfo) const
+/** Gets the current values of the HSCSD parameters of an
+active mobile HSCSD call.
+
+@see TMobileCallHscsdInfoV1
+@see TMobileCallHscsdInfoV7
+
+@param aHSCSDInfo A descriptor that will contain the retrieved HSCSD information.
+
+@return KErrNone if HSCSD information successfully retrieved.
+@return KErrEtelCallNotActive if call is not an active HSCSD call
+@return KErrNotSupported if call does not support HSCSD
+
+@capability None
+*/
+ {
+ return Get(EMobileCallGetCurrentHscsdInfo,aHSCSDInfo);
+ }
+
+EXPORT_C void RMobileCall::NotifyHscsdInfoChange(TRequestStatus& aReqStatus, TDes8& aHSCSDInfo) const
+/** This notification completes when the mobile call's HSCSD parameters change.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyHscsdInfoChange)to
+cancel a previously placed asynchronous NotifyHscsdInfoChange() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aHSCSDInfo A descriptor that will contain the new HSCSD information
+@capability None
+*/
+ {
+ Get(EMobileCallNotifyHscsdInfoChange,aReqStatus,aHSCSDInfo);
+ }
+
+/***********************************************************************************/
+//
+// MobileMultimediaCall functional unit
+//
+/***********************************************************************************/
+
+EXPORT_C void RMobileCall::NotifyVoiceFallback(TRequestStatus& aReqStatus, TName& aCallName) const
+/** Notifies the client if a Multimedia call falls back to
+a voice call due to inability in network or terminating end to comply with
+the Multimedia request.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyVoiceFallback)
+to cancel a previously placed asynchronous NotifyVoiceFallback() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aCallName On Completion, contains the name of a new voice call object
+created by the TSY.
+@capability None
+*/
+ {
+ Get(EMobileCallNotifyVoiceFallback, aReqStatus, aCallName);
+ }
+
+/***********************************************************************************/
+//
+// MobileAlternatingCall functional unit
+//
+/***********************************************************************************/
+
+
+EXPORT_C void RMobileCall::SwitchAlternatingCall(TRequestStatus& aReqStatus) const
+/** Switches an alternating call to its opposite call mode.
+
+Use RTelSubSessionBase::CancelAsyncRequest(TEMobileCallSwitchAlternatingCall)
+to cancel a previously placed asynchronous SwitchAlternatingCall() request.
+
+@param aReqStatus On return, KErrNone if the function member was successful,
+or KErrEtelNoClientInterestedInThisCall if there are no valid clients who
+have called the associated NotifyAlternatingCallSwitch().
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallSwitchAlternatingCall,aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::NotifyAlternatingCallSwitch(TRequestStatus& aReqStatus) const
+/** This notification completes when an alternating call successfully switches
+call mode.
+
+Use: RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyAlternatingCallSwitch)
+to cancel a previously placed asynchronous NotifyAlternatingCallSwitch() request.
+
+@param aReqStatus On return, KErrNone is returned after an alternating call
+successfully switched call mode, KErrMMETelAlternatingCallTerminated is returned
+if the TSY detects that the alternating call has ended while a client is still
+waiting for an alternating call mode switch.
+@capability None
+*/
+ {
+ Blank(EMobileCallNotifyAlternatingCallSwitch,aReqStatus);
+ }
+
+/***********************************************************************************/
+//
+// Call control methods for all calls
+//
+/***********************************************************************************/
+
+EXPORT_C RMobileCall::TMobileCallCapsV1::TMobileCallCapsV1() :
+ iCallControlCaps(0),
+ iCallEventCaps(0)
+ /** Default constructor, and is present only to support virtual
+ function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileCall::GetMobileCallCaps(TDes8& aCaps) const
+/** Gets the mobile call's call control and event capabilities.
+
+@param aCaps On completion, a TMobileCallCapsV1Pckg that will contain the
+call control and event capabilities.
+@return KErrNone
+@capability None
+
+@see TMobileCallCapsV1Pckg
+@see TMobileCallCapsV1
+*/
+ {
+ return Get(EMobileCallGetMobileCallCaps, aCaps);
+ }
+
+EXPORT_C void RMobileCall::NotifyMobileCallCapsChange(TRequestStatus& aReqStatus, TDes8& aCaps) const
+/** This notification completes when the mobile call's call control and event capabilities
+change.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyMobileCallCapsChange)
+to cancel a previously placed asynchronous NotifyMobileCallCapsChange() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aCaps On completion, TMobileCallCapsV1Pckg that will contain the new
+call control and event capabilities.
+@capability None
+
+@see TMobileCallCapsV1Pckg
+@see TMobileCallCapsV1
+*/
+ {
+ Get(EMobileCallNotifyMobileCallCapsChange, aReqStatus, aCaps);
+ }
+
+EXPORT_C TInt RMobileCall::GetMobileCallStatus(TMobileCallStatus& aStatus) const
+/** Gets the current status of a mobile call.
+
+@param aStatus On completion, contains the status of the call.
+@return KErrNone
+@capability None
+*/
+ {
+ TPckg<TMobileCallStatus> ptr1(aStatus);
+ return Get(EMobileCallGetMobileCallStatus, ptr1);
+ }
+
+EXPORT_C void RMobileCall::NotifyMobileCallStatusChange(TRequestStatus& aReqStatus, TMobileCallStatus& aStatus) const
+/** Allows a client to be notified when the call changes state.
+
+The request completes when the call changes state, the new state being passed
+in the aStatus parameter.
+
+Use RTelSubSessionBase::CancelAsyncRequest(TEMobileCallNotifyMobileCallStatusChange)
+to cancel a previously placed asynchronous NotifyMobileCallStatusChange()
+request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aStatus On completion, contains the new call state.
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1=iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1NotifyMobileCallStatusChange, aStatus);
+
+ Get(EMobileCallNotifyMobileCallStatusChange, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileCall::Hold(TRequestStatus& aReqStatus) const
+/** Puts a call on hold.
+
+It will complete when the network confirms that the call is in the hold state.
+It can be called by any client that has a handle on this call (i.e. not necessarily
+the client that first opened and dialed or answered the call). The action
+is only valid if the call is a voice call and if there are no other calls
+already on hold. If call hold is possible then it will be reflected in that
+call's dynamic capabilities, i.e. the KCapsHold bit of TMobileCallControlCaps
+will be set.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallHold) to cancel a previously
+placed asynchronous Hold() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallHold,aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::Resume(TRequestStatus& aReqStatus) const
+/** Resumes a call that is on hold.
+
+It will complete when the network confirms that the call is in the active
+state. It can be called by any client that has a handle on this call (i.e.
+not necessarily the client that first opened and dialed or answered the call).
+This action is only valid if there are no other calls already active. If call
+resume is possible then it will be reflected in that call's dynamic capabilities,
+i.e. the KCapsResume bit of TMobileCallControlCaps will be set.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallResume) to cancel a
+previously placed asynchronous Resume() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallResume, aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::Swap(TRequestStatus& aReqStatus) const
+/** Swaps a connected call to its opposite state, either active
+or on hold.
+
+This function member will complete either when the call has successfully
+moved to the opposite state or if the action failed due to some reason. It
+can be called by any client that has a handle on this call (i.e. not necessarily
+the client that first opened and dialed or answered the call).
+
+This action is possible under two circumstances:
+
+There is just one active or held single call. This implies that there are
+no other calls already in the state to which the client wishes to move this
+call to. The client will call Swap on this call and if it is active it will
+move to the held state and if it is held it will move to the active state.
+
+There are two single calls, one currently active and one on hold. This function
+member therefore swaps the active call with the held call, simultaneously
+placing the active call on hold and resuming the held call.
+
+In the first circumstance, an active call's dynamic capabilities will contain
+the KCapsHold and KCapsSwap bits set. A held calls' dynamic capabilities will
+contain the KCapsResume and KCapsSwap bits set. In the second circumstance,
+both the active and held call's dynamic capabilities will contain just the
+KCapsSwap bit set. The above function member is applicable to both single
+and conference calls. If there is a single call and a conference call then
+the client can call Swap on either the single call or the conference call.
+The action will still move both the single call and the conference call to
+their opposite states.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallSwap) to cancel a previously
+placed asynchronous Swap() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallSwap, aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::Deflect(TRequestStatus& aReqStatus, TMobileCallDeflect aDeflectType, const RMobilePhone::TMobileAddress& aDestination) const
+/** Allows a client to deflect an incoming call that is still
+in the EStatusRinging state.
+
+The destination of the deflected call is determined by the aDeflectType parameter.
+If this parameter equals EDeflectSuppliedNumber then the destination address
+is given in the aDestination parameter. If call deflection is possible then
+it will be reflected in that call's dynamic capabilities, i.e. the KCapsDeflect
+bit of TMobileCallControlCaps will be set.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallDeflect) to cancel a
+previously placed asynchronous Deflect() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aDeflectType Type of call deflection wanted.
+@param aDestination The telephone number (E164) to deflect the call to.
+@capability NetworkServices
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+
+ iMmPtrHolder->iDeflectType = aDeflectType;
+ TPtrC8& ptr1=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot1Deflect, iMmPtrHolder->iDeflectType);
+ TPtrC8& ptr2=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot2Deflect, aDestination);
+
+ Set(EMobileCallDeflect, aReqStatus, ptr1, ptr2);
+ }
+
+EXPORT_C void RMobileCall::Transfer(TRequestStatus& aReqStatus) const
+/** Allows a client to transfer a call so that the remote
+party of one call ends up connected to the remote party of another call while
+this user drops out of both calls. For call transfer to be possible, the phone
+must have one call on hold and another call either connected or still ringing
+at the remote end. If call transfer is possible then it will be reflected
+in the affected call's dynamic capabilities, i.e. the KCapsTransfer bit of
+TMobileCallControlCaps will be set.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallTransfer) to cancel
+a previously placed asynchronous Transfer() request.
+
+@param aReqStatus On return, KErrNone if successful, KErrMMETelWrongMode if
+the transfer is requested for a CDMA call.
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallTransfer,aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::GoOneToOne(TRequestStatus& aReqStatus) const
+/** Requests a private communication to the remote party of
+one call within a conference call. The rest of the conference call will be
+put on hold while the user and the selected remote party go "one-to-one".
+It can be called by any client that has a handle on this call (i.e. not necessarily
+the client that first opened and dialed or answered the call). The action
+is only valid if the MS is in GSM mode, the selected call is a voice call
+and it is a member of an ongoing conference call. If "one-to-one" is possible
+then it will be reflected in that call's dynamic capabilities, i.e. the KCapsOneToOne
+bit of TMobileCallControlCaps will be set.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallGoOneToOne) to cancel
+a previously placed asynchronous GoOneToOne() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@capability NetworkServices
+*/
+ {
+ Blank(EMobileCallGoOneToOne,aReqStatus);
+ }
+
+EXPORT_C void RMobileCall::NotifyCallEvent(TRequestStatus& aReqStatus, TMobileCallEvent& aEvent) const
+/** Allows the client to be notified when various call events occur.
+
+These events may be generated locally (i.e. from within the ME) or remotely
+(by the remote connected party). The request completes when an event occurs.
+Upon completion, the aEvent parameter will return the event type.
+
+The call (and line) status will be changed to reflect any events detected
+locally or remotely.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyCallEvent) to
+cancel a previously placed asynchronous NotifyCallEvent() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aEvent On completion, contains the new call event.
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1=iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1NotifyCallEvent, aEvent);
+
+ Get(EMobileCallNotifyCallEvent, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileCall::DialNoFdnCheck(TRequestStatus& aReqStatus,const TDesC& aTelNumber) const
+/**
+Dials the number specified by aTelNumber.
+
+The number used for dialling is not checked against those in the Fixed
+Dialling Number list even if the FDN service is enabled.
+Null CallParams are applied.
+
+@param aTelNumber Supplies the number to dial.
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ // Confirm that we DO have a number to dial
+ if(aTelNumber.Length()==0)
+ {
+ TRequestStatus* status=&aReqStatus;
+ User::RequestComplete(status, KErrArgument);
+ return;
+ }
+
+ TPtr8 nullptr(NULL,0);
+ TPtrC8& null=iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot1DialNoFdnCheck, nullptr);
+ Set(EMobileCallDialNoFdnCheck, aReqStatus, null, aTelNumber);
+ }
+
+EXPORT_C void RMobileCall::DialNoFdnCheck(TRequestStatus& aReqStatus,const TDesC8& aCallParams,const TDesC& aTelNumber) const
+/**
+Dials the number specified by aTelNumber.
+
+The number used for dialling is not checked against those in the
+Fixed Dialling Number list even if the FDN service is enabled.
+
+@param aCallParams Supplies the call parameters. This should be a packaged RCall::TCallParams derived class.
+@param aTelNumber Supplies the number to dial.
+
+@capability NetworkServices
+@capability NetworkControl
+
+@see TMobileCallParamsV1
+@see TMobileCallParamsV2
+@see TMobileCallParamsV7
+@see TMobileDataCallParamsV1
+@see TMobileDataCallParamsV2
+@see TMobileDataCallParamsV8
+@see TMobileHscsdCallParamsV1
+@see TMobileHscsdCallParamsV2
+@see TMobileHscsdCallParamsV7
+@see TMobileHscsdCallParamsV8
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ // Confirm that we DO have a number to dial
+ if(aTelNumber.Length()==0)
+ {
+ TRequestStatus* status=&aReqStatus;
+ User::RequestComplete(status, KErrArgument);
+ return;
+ }
+
+ Set(EMobileCallDialNoFdnCheck, aReqStatus, aCallParams, aTelNumber);
+ }
+
+EXPORT_C void RMobileCall::DialCallControl(TRequestStatus& aStatus, const TDesC8& aCallParams, const TTelNumberC& aTelNumber) const
+/**
+Dial the number specified in aTelNumber using the call parameters
+specified in aCallParams. This API differs from the standard
+RCall::Dial method to allow the TSY to know that the dial request
+is resulting from Call Control.
+
+When a client wishes to dial a call (using one of the
+other dial APIs such as RCall::Dial) and Call Control is being
+used, the dial request is passed to the Call Control which can
+then modify the call parameters originally specified by the
+client. The SAT engine then issues a second dial request to
+make the actual call using the new modified parameters.
+When making this second request, this API should be used to
+indicate to the TSY that this call results from Call Control.
+Call parameter classes RMobileCall::TMobileCallParamsV7 and
+RMobileCall::TMobileHscsdCallParamsV2 (and in future one of their
+derived classes) allow the call originator to be specified.
+
+The API RMobileCall::GetMobileCallInfo with
+RMobileCall::TMobileCallInfoV7 also allows a client to get
+information regarding the originator of a call.
+
+Error codes returned by this API from the TSY/Etelmm via
+aStatus are:
+
+ - KErrNone if the dial request was successful.
+ - KErrArgument if no number was supplied or an invalid telephone number was passed in aTelNumber.
+ - KErrPermissionDenied if the client does not have the required PlatSec capabilities or the SID of the SAT engine was not provided (see below for more details).
+ - Another error code depending on the failure.
+
+This API is policed by both Platform Security capabilities and SID
+and can only be called by the SAT engine.
+
+On hardware, the API can be called by providing the SID of the SAT
+engine in ETel.iby file found in \epoc32\rom\include
+
+A patchable constant KSatEngineSid is used for defining the SID value
+of the SAT engine.
+
+For example, add the following line to ETel.iby:
+patchdata etel.dll@KSatEngineSid 0x12345678
+
+On emulator, the API can be called by providing the SID of the SAT
+engine in epoc.ini file found at \epoc32\data
+
+To do this, add the following line to \epoc32\data\epoc.ini
+etel_KSatEngineSid <SID>
+
+For example:
+etel_KSatEngineSid 0x12345678
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallDialCallControl) to
+cancel a previously placed asynchronous DialCallControl() request.
+
+@param aCallParams The call parameters. This should be a
+packaged RCall::TCallParams derived class.
+
+@param aTelNumber The number to dial.
+
+@param aStatus On completion aReqStatus contains KErrNone if successful.
+Otherwise, another error code depending on failure.
+
+@see RMobileCall::TMobileCallParamsV7
+@see RMobileCall::TMobileDataCallParamsV1
+@see RMobileCall::TMobileHscsdCallParamsV7
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ // Check that a number to dial has been passed
+ if(aTelNumber.Length()==0)
+ {
+ TRequestStatus* status=&aStatus;
+ User::RequestComplete(status, KErrArgument);
+ return;
+ }
+
+ Set(EMobileCallDialCallControl, aStatus, aCallParams, aTelNumber);
+ }
+
+EXPORT_C RMobileCall::TAudioToneV3::TAudioToneV3() :
+ iEvent(EAudioStop),
+ iTone(ENoTone),
+ iPlayedLocally(EFalse)
+/**
+Default constructor.
+*/
+ {
+ iExtensionId = KETelExtMultimodeV3;
+ }
+
+EXPORT_C void RMobileCall::NotifyAudioToneEvent(TRequestStatus& aReqStatus, TDes8& aToneInfo) const
+/**
+Notification completes when there has been a change of call control audio tone event.
+
+@param aReqStatus returns the result code after the asynchronous call completes.
+@param aToneInfo Will contain the information on whether the tone is to start/stop playing,
+what tone is playing/to be played and whether the tone is to be played locally by the ME.
+This should be a packaged RMobileCall::TAudioToneV3 or derived class.
+
+@capability None
+
+@see TAudioToneV3Pckg
+*/
+ {
+ Get(EMobileCallNotifyAudioToneEvent, aReqStatus, aToneInfo);
+ }
+
+/***********************************************************************************/
+//
+// MobilePrivacy functional unit
+//
+/***********************************************************************************/
+
+
+EXPORT_C TInt RMobileCall::SetPrivacy(RMobilePhone::TMobilePhonePrivacy aPrivacySetting) const
+/** Causes the phone to request a new privacy setting for this call.
+
+This setting will over-ride (for this call only), the phone's default privacy
+setting.
+
+The function member is synchronous for two reasons. Firstly because the phone
+may not be able to request the new setting immediately if the call has not
+started yet. Secondly, the CDMA network only sends confirmation of a successful
+privacy setting and will not respond if it is unable to service the request.
+This means a client needs to request a privacy setting but then not assume
+the setting is active until "notify privacy confirmation" completes.
+
+@leave KErrMMEtelWrongMode if request made during a mode that does not support it
+@param aPrivacySetting Wanted privacy setting (either on or off).
+@return KErrNone if request processed successfully. KErrMMEtelWrongMode if
+request made during a mode that does not support it.
+@capability NetworkServices
+*/
+ {
+ TPckg<RMobilePhone::TMobilePhonePrivacy> ptr1(aPrivacySetting);
+ return Set(EMobileCallSetPrivacy, ptr1);
+ }
+
+EXPORT_C void RMobileCall::NotifyPrivacyConfirmation(TRequestStatus& aReqStatus, RMobilePhone::TMobilePhonePrivacy& aPrivacySetting) const
+/** This notification completes when the network confirms whether privacy is on
+or off for this call.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyPrivacyConfirmation)
+to cancel a previously placed asynchronous NotifyPrivacyConfirmation() request.
+
+@param aReqStatus On return, KErrNone if request processed successfully. KErrMMEtelWrongMode
+if request made during a mode that does not support it.
+@param aPrivacySetting On completion, the confirmed privacy setting (either
+on or off).
+@capability NetworkServices
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1 = iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1NotifyPrivacyConfirmation,aPrivacySetting);
+
+ Get(EMobileCallNotifyPrivacyConfirmation,aReqStatus,ptr1);
+ }
+
+/***********************************************************************************/
+//
+// MobileTrafficChannel Functional Unit
+//
+/***********************************************************************************/
+
+
+
+EXPORT_C TInt RMobileCall::SetTrafficChannel(TMobileCallTch aTchRequest) const
+/** Sets a new value for the traffic channel setting of a mobile call.
+
+The function member is synchronous for two reasons. Firstly because the phone
+may not be able to request the new setting immediately if the call has not
+started yet. Secondly, the CDMA network only sends confirmation of a successful
+traffic channel allocation and will not respond if it is unable to service
+the request. This means a client needs to request a traffic channel type but
+then not assume the channel is allocated until "notify traffic channel confirmation"
+completes.
+
+@leave KErrMMEtelWrongMode if request made during a mode that does not support it
+@param aTchRequest The wanted traffic channel (either analog or digital).
+@return KErrNone if request processed successfully, KErrMMEtelWrongMode if
+request made during a mode that does not support it.
+@capability NetworkServices
+*/
+ {
+ TPckg<TMobileCallTch> ptr1(aTchRequest);
+ return Set(EMobileCallSetTrafficChannel,ptr1);
+ }
+
+EXPORT_C void RMobileCall::NotifyTrafficChannelConfirmation(TRequestStatus& aReqStatus, TMobileCallTch& aTchType) const
+/** Allows the client to be notified when the CDMA network
+has confirmed the traffic channel type requested during call set-up or during
+call connection.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyTrafficChannelConfirmation)
+to cancel a previously placed asynchronous NotifyTrafficChannelConfirmation()
+request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aTchType On completion, the traffic channel type (either analog or digital).
+@capability NetworkServices
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1 = iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1NotifyTrafficChannelConfirmation,aTchType);
+
+ Get(EMobileCallNotifyTrafficChannelConfirmation,aReqStatus,ptr1);
+ }
+
+/***********************************************************************************/
+//
+// Call Information methods for calls of any type
+//
+/***********************************************************************************/
+
+EXPORT_C RMobileCall::TMobileCallInfoV1::TMobileCallInfoV1()
+: iValid(0),
+ iService(RMobilePhone::EServiceUnspecified),
+ iStatus(EStatusUnknown),
+ iCallId(-1),
+ iExitCode(0),
+ iEmergency(EFalse),
+ iForwarded(EFalse),
+ iPrivacy(RMobilePhone::EPrivacyUnspecified),
+ iAlternatingCall(RMobilePhone::EAlternatingModeUnspecified),
+ iDuration(0),
+ iTch(RMobileCall::ETchUnknown)
+ /** Default constructor, and is present only to support virtual
+ function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C RMobileCall::TMobileCallInfoV3::TMobileCallInfoV3()
+ : TMobileCallInfoV1(),
+ iSecurity(RMobilePhone::ECipheringOff)
+/**
+Default constructor.
+*/
+ {
+ iExtensionId = KETelExtMultimodeV3;
+ }
+
+EXPORT_C RMobileCall::TMobileCallInfoV7::TMobileCallInfoV7()
+ : TMobileCallInfoV3(),
+ iCallParamOrigin(EOriginatorUnknown),
+ iParamsCallControlModified(EFalse)
+/**
+Default constructor.
+*/
+ {
+ iExtensionId = KEtelExtMultimodeV7;
+ iIconId.iQualifier = EIconQualifierNotSet;
+ iIconId.iIdentifier = 0;
+ }
+
+EXPORT_C RMobileCall::TMobileCallInfoV8::TMobileCallInfoV8()
+: TMobileCallInfoV7(),
+ iBCRepeatIndicator(EBCAlternateMode)
+/** Default constructor. The BC Repeat Indicator is initialized to EBCAlternateMode. */
+ {
+ iExtensionId = KEtelExtMultimodeV8;
+ }
+
+EXPORT_C TInt RMobileCall::GetMobileCallInfo(TDes8& aCallInfo) const
+/** Retrieves the current snapshot of all information related
+to this call as described in the TMobileCallInfoV1 class.
+@leave KErrNotFound if call information is not available
+@param aCallInfo On completion, a TMobileCallInfoV1Pckg holding
+the call information block.
+@return KErrNone, KErrNotFound if call information is not available
+@capability ReadUserData
+*/
+ {
+ return Get(EMobileCallGetMobileCallInfo, aCallInfo);
+ }
+
+EXPORT_C RMobileCall::TMobileCallRemotePartyInfoV1::TMobileCallRemotePartyInfoV1()
+ : iRemoteIdStatus(ERemoteIdentityUnknown), iDirection(EDirectionUnknown)
+/** Default constructor, and is present only to support virtual
+function table export. */
+ {
+ iExtensionId = KETelExtMultimodeV1;
+ }
+
+EXPORT_C void RMobileCall::NotifyRemotePartyInfoChange(TRequestStatus& aReqStatus, TDes8& aRemotePartyInfo) const
+/** Allows the client to be notified of any change in the remote party information.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyRemotePartyInfoChange)
+to cancel a previously placed asynchronous NotifyRemotePartyInfoChange() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aRemotePartyInfo On completion, the new remote party information in
+a TMobileCallRemotePartyInfoV1Pckg.
+@capability ReadUserData
+*/
+ {
+ Get(EMobileCallNotifyRemotePartyInfoChange, aReqStatus, aRemotePartyInfo);
+ }
+
+/***********************************************************************************/
+//
+// MobileCallEmergency functional unit
+//
+/***********************************************************************************/
+
+EXPORT_C void RMobileCall::DialEmergencyCall(TRequestStatus& aReqStatus, const TDesC& aNumber) const
+/** Places an emergency call request.
+
+It is advised that the client opens a call object during system initialization
+and reserves it for an emergency call. This will guarantee that it will not
+leave with a KErrOutOfMemory, which could happen if the client had to open
+a new call to make the emergency call.
+
+The TSY should make sure that any needed resource for an emergency call is
+created at initialization and set aside in the event of a DialEmergencyCall()
+request. Upon receiving a DialEmergencyCall() request, the TSY should ask
+the ETel server if the client is a priority client, using the following call
+to the server: CCallBase::CheckPriorityClient().
+
+DialEmergencyCall is designated a "priority client" request, which means that
+if a client that is known to the server as a priority client calls this, the
+server will guarantee that it will not leave with KErrOutOfMemory. However,
+a non-priority client may call it without this guarantee.
+
+This function member is similar to the standard Dial() function member in
+that it will initiate a call set-up. The emergency call object will follow
+the standard call states.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallDialEmergencyCall) to
+cancel a previously placed asynchronous DialEmergencyCall() request.
+
+@param aReqStatus On return, KErrNone if the emergency call successfully reaches
+the connected state. If the call set-up fails, the function member will complete
+with whatever error was returned by the network.
+@param aNumber The actual emergency number, which is needed to set up an emergency
+call to a particular emergency centre (e.g. Ambulance, Police, Fire Brigade,
+etc.). The aNumber parameter should be a RMobileENStore::TEmergencyNumber
+buffer.
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ TReqPriorityType type=EIsaEmergencyRequest;
+ Set(EMobileCallDialEmergencyCall, aReqStatus, aNumber, type);
+ }
+
+/***********************************************************************************/
+//
+// MobileCallCompletion functional unit
+//
+/***********************************************************************************/
+
+
+EXPORT_C void RMobileCall::ActivateCCBS(TRequestStatus& aReqStatus, TInt& aIndex) const
+/**
+Activates a CCBS request on a call that has failed due to remote user busy
+It will complete once the activate request has been confirmed by the network
+
+@param aIndex the index of the CCBS call activated
+@capability NetworkServices
+*/
+ {
+ TPtr8& ptr1 = iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1ActivateCcbs, aIndex);
+ Get(EMobileCallActivateCCBS,aReqStatus, ptr1);
+ }
+
+EXPORT_C TInt RMobileCall::RejectCCBS() const
+/** Allows a client to specify that it does not wish to set-up
+a CCBS request on a failed call setup.
+
+When the user is presented with the option of activating a CCBS request to
+a remote busy number, if the user chooses not to bother then this API function
+member can be used by the client application to inform the TSY of this user
+decision.
+
+This enables the TSY to inform the network immediately that the CCBS possibility
+is not going to be used and therefore stop all relevant timers. If the client
+application calls neither ActivateCCBS() or RejectCCBS() when the call control
+capability KCapsCCbsActivate is set, the possibility of activating CCBS will
+eventually time-out and the associated call control capability will disappear.
+
+@leave KErrNotReady if call is not expecting a CCBS rejection
+@return KErrNone
+@capability NetworkServices
+*/
+ {
+ return Blank(EMobileCallRejectCCBS);
+ }
+
+
+/************************************************************************************/
+//
+// MobileUserSignalling functional unit
+//
+/************************************************************************************/
+
+EXPORT_C RMobileCall::TMobileCallUUSRequestV1::TMobileCallUUSRequestV1()
+/** Default constructor, and is present only to support virtual
+function table export. */
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileCall::GetUUSCaps(TUint32& aCaps) const
+/** Gets the current instance of the UUS capabilities of the
+call. This function member can be used before making the call to find out
+which UUS the phone supports, or during the call to find out which UUS are
+active for the current call.
+
+@leave KErrNotSupported if UUS functionality is not supported by the phone/TSY
+@param aCaps On completion, the sum of TMobileCallUUSCaps constants of the
+current UUS capabilities.
+@return KErrNone if the TSY/ME supports any UUS functionality, KErrNotSupported
+if the TSY/ME does not support any UUS functionality.
+@capability None
+*/
+ {
+ TPckg<TUint32> ptr1(aCaps);
+ return Get(EMobileCallGetUUSCaps, ptr1);
+ }
+
+EXPORT_C void RMobileCall::NotifyUUSCapsChange(TRequestStatus& aReqStatus, TUint32& aCaps) const
+/** Notifies the clients of changes to the UUS capabilities
+of the phone.
+
+The UUS capabilities are most likely to change when the call starts.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallNotifyUUSCapsChange)
+to cancel a previously placed asynchronous NotifyUUSCapsChange() request.
+
+@param aReqStatus On return, KErrNone if successful, otherwise another of
+the system-wide error codes.
+@param aCaps On completion, the sum of TMobileCallUUSCaps relating to the new
+UUS capabilities
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1 = iMmPtrHolder->Set(CMobileCallPtrHolder::ESlot1NotifyUUSCapsChange, aCaps);
+
+ Get(EMobileCallNotifyUUSCapsChange, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileCall::ActivateUUS(TRequestStatus& aReqStatus, const TDesC8& aUUSRequest) const
+/** Specifies which User-To-User Signalling service(s) the
+phone should request to activate.
+
+This function member can be used before a call has started or during a call
+(for UUS3 only).
+
+In order to use UUS the calling subscriber must have the UUS supplementary
+service provisioned by the network provider and the network must have the
+capability of supporting the UUS service.
+
+Use of this function member is only applicable to a phone whose UUS caps (TMobileCallUUSCaps)
+are set to support the required UUS service. The KCapsSetupUUS1Implicit flag
+allows the calling user to activate the UUS service implicitly by sending
+the UUI embedded within the call set-up message. The UUS Service 1 can also
+be activated explicitly. The UUS Services 2 and 3 can only be activated by
+means of an explicit request. Service 2 can only be activated when initiating
+an outgoing call, whereas Service 3 can also be activated during the call.
+
+If UUS Service 1 is being requested, then the iUUI field of TMobileCallUUSRequestV1
+will contain any UUI data to send with the call set-up message.
+
+If the call has not started yet, the TSY is expected to save the request information
+until it receives the next Dial request. In this case ActivateUUS should complete
+with KErrNone if the TSY supports the requested UUS or KErrNotSupported if
+the TSY can not fulfill the request for the next Dial. Once the Dial request
+is received, the phone will send the SETUP request to the network and include
+the UUS service activation request. A number of outcomes are possible once
+the phone has sent the SETUP message.
+
+If the network does not support UUS or the caller is not subscribed to UUS
+and the service is mandatory for the call, the network will send a DISCONNECT
+or RELEASE message. The Dial request will complete with the error received
+from the network. (KErrGsmCCResourceNotAvailable or KErrGsmCCRequestedFacilityNotSubscribed).
+
+If the network does not support UUS but the service is not mandatory, the
+network will still proceed with the call but without UUI, and the Dial request
+will complete with KErrNone when the call is connected.
+
+If the network does support UUS then the remote user will be alerted to the
+UUS service activation.
+
+If the remote user accepts the UUS service activation, the network will proceed
+with the call and the Dial request will complete with KErrNone when the call
+is connected.
+
+If the remote user rejects the UUS service activation and the service is mandatory
+for the call, the network will send a DISCONNECT or RELEASE message and the
+Dial request will complete with the error received from the network (KErrGsmCCFacilityRejected).
+
+If the remote user rejects the UUS service activation and the service is not
+mandatory, the network will still proceed with the call and the Dial request
+will complete with KErrNone when the call is connected.
+
+Once the call is connected, clients can check the call's UUS capabilities
+to see which UUS services are active.
+
+If this function member is used to activate the UUS Service 3 during a call
+then the connection with the remote side has already been established. In
+order to use this function member during the call the activating subscriber
+must have the UUS supplementary service 3 provisioned by the network provider
+and the network must have the capability of supporting the UUS service 3.
+Once the ActivateUUS() request is posted, the phone will send the FACILITY
+request to the network and include the UUS service activation request. A number
+of outcomes are possible once the phone has sent the FACILITY message.
+
+If the network does not support UUS the call will remain connected but no
+UUI transmission is possible and the ActivateUUS() request will complete with
+the error returned by the network (KErrGsmCCResourceNotAvailable or
+KErrGsmCCRequestedFacilityNotSubscribed).
+
+If the network does support UUS then the remote user will be alerted to the
+UUS service activation
+
+If the remote user accepts the UUS service activation, the ActivateUUS() request
+will complete with KErrNone and then UUI can be transferred.
+
+If the remote user rejects the UUS service activation, the ActivateUUS() request
+will complete with the error returned by the network (KErrGsmCCFacilityRejected)
+and no UUI can be transferred.
+
+Use: RTelSubSessionBase::CancelAsyncRequest(EMobileCallActivateUUS) to cancel
+a previously placed asynchronous ActivateUUS() request.
+
+@param aReqStatus On return, KErrNone if the UUS request was successful, an
+error message when not.
+@param aUUSRequest A packaged instance of RMobileCall::TMobileCallUUSRequestV1
+and the iServiceReq field will contain the bit-wise sum of all service activation
+requests.
+@capability WriteDeviceData
+@capability NetworkServices
+*/
+ {
+ Set(EMobileCallActivateUUS, aReqStatus, aUUSRequest);
+ }
+
+EXPORT_C void RMobileCall::SendUUI(TRequestStatus& aReqStatus, TBool aMore, const TMobileCallUUI& aUUI) const
+/** Sends a UUI message for UUS2 and UUS3 services to the
+remote user either during the call set-up or during the actual call. The client
+must supply the message data within the aUUI parameter.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallSendUUI) to cancel a
+previously placed asynchronous SendUUI() request.
+
+@leave KErrGsmCCAccessInformationDiscarded if congestion forces the network to
+drop the UUI
+@param aReqStatus On return, KErrNone if the UUI is successfully transferred
+or with a network generated error if the network for some reason fails to
+deliver the message to the remote user. A possible error code is
+KErrGsmCCAccessInformationDiscarded if congestion forces the network to drop the UUI.
+@param aMore Indicator that there is another UUI message to follow containing
+information belonging to the same block.
+@param aUUI The UUI element to send.
+@capability NetworkServices
+@capability WriteUserData
+*/
+ {
+ __ASSERT_ALWAYS(iMmPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iMmPtrHolder->iMoreUUI = aMore;
+ TPtrC8& ptr1 = iMmPtrHolder->SetC(CMobileCallPtrHolder::ESlot2SendUUI, iMmPtrHolder->iMoreUUI);
+
+ Set(EMobileCallSendUUI, aReqStatus, ptr1, aUUI);
+ }
+
+EXPORT_C void RMobileCall::ReceiveUUI(TRequestStatus& aReqStatus, TMobileCallUUI& aUUI) const
+/** Enables the client to receive the next incoming UUI message
+from the remote user.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallReceiveUUI) to cancel
+a previously placed asynchronous ReceiveUUI() request.
+
+@param aReqStatus KErrNone
+@param aUUI On completion, the UUI message data.
+@capability NetworkServices
+@capability ReadUserData
+*/
+ {
+ Get(EMobileCallReceiveUUI, aReqStatus, aUUI);
+ }
+
+EXPORT_C void RMobileCall::HangupWithUUI(TRequestStatus& aReqStatus, const TMobileCallUUI& aUUI) const
+/**
+This overloaded RCall::HangUp() function member enables the client to send
+a UUS1 data at the call release.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallHangupWithUUI) to cancel
+a previously placed asynchronous HangupWithUUI() request.
+
+@param aReqStatus KErrNone
+@param aUUI The UUI message to be send with the release.
+@capability NetworkServices
+@capability WriteUserData
+*/
+ {
+ Set(EMobileCallHangupWithUUI,aReqStatus,aUUI);
+ }
+
+EXPORT_C void RMobileCall::AnswerIncomingCallWithUUI(TRequestStatus& aReqStatus, const TDesC8& aCallParams, const TMobileCallUUI& aUUI) const
+/**
+Enables the client to answer an incoming call and send
+UUI to the calling party at the same time.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EMobileCallAnswerWithUUI) to cancel
+a previously placed asynchronous AnswerIncomingCallWIthUUI() request.
+
+@param aReqStatus On return, KErrNone if the call successfully connects or
+with an error if the call fails to connect for some reason.
+@param aCallParams The data call parameters, can be a packaged instance of
+any of the call parameters classes.
+@param aUUI The UUI element to send to the calling party.
+@capability NetworkServices
+@capability WriteUserData
+*/
+ {
+ Set(EMobileCallAnswerWithUUI,aReqStatus,aCallParams,aUUI);
+ }
+
+EXPORT_C void RMobileCall::DialISV(TRequestStatus& aStatus, const TDesC8& aCallParams, const TTelNumberC& aTelNumber)
+/**
+Attempts to establish a connection using the telephone number specified.
+This is an asynchronous method and is intended for use by the EtelISV API
+
+The mode of the connection, i.e. whether it is a data or fax connection, is
+determined by whether the RCall object has been opened from a data line or
+a fax line.
+
+This method is similar to RCall::Dial(), with two exceptions. Functionally,
+RMobileCall::DialISV() is given lower capabilities than RCall::Dial()'s
+NetworkServices + NetworkControl. The second difference is up to the TSY developer;
+a TSY may chose to distinguish between a CTelephony (i.e. ETel3rdParty)
+RMobileCall::DialISV() and an RCall::Dial() originated dial request. Although
+it would also be correct for a TSY to treat the two in the same way; the choice
+is left to the TSY writer and the use cases they can envisage.
+
+Giving this method a lower PlatSec capability requirement means that it is more
+easily accessible to the third party developers. Also, RCall::Dial() is intended
+for use by the Phone Application alone, thus, the higher RCall capability
+settings may also provide it with some form of protection. Thus, this can be
+viewed as an attempt to restrict RCall::Dial() to the Phone Application.
+
+The two different forms of dialling should be seen as a way of filtering the more
+important calls, requested by the high priority Phone Application/UI, from those
+requested by other applications. The TSY can use this filtering of call requests,
+perhaps to use different or dedicated channels for each IPC, prioritise one over
+the other (e.g. in the case of limited channels), etc..
+
+@param aStatus A variable that indicates the completion status of the request.
+@param aCallParams The call parameters used by the TSY (a TCallParamsPckg object).
+@param aTelNumber The telephone number
+@capability NetworkServices
+*/
+ {
+ if(aTelNumber.Length()==0)
+ {
+ TRequestStatus* status=&aStatus;
+ User::RequestComplete(status,KErrArgument);
+ return;
+ }
+ Set(EMobileCallDialISV, aStatus, aCallParams, aTelNumber);
+ }
+
+
+EXPORT_C void RMobileCall::AnswerIncomingCallISV(TRequestStatus& aStatus,const TDesC8& aCallParams)
+/**
+Waits for an incoming call and answers it when it arrives - asynchronous.
+The function also answers calls which are ringing when it is invoked.
+
+This method is intended to be used by the EtelISV API
+
+@param aStatus A variable that indicates the completion status of the request.
+@param aCallParams The call parameters used by the TSY (a TCallParamsPckg object).
+@capability NetworkServices
+*/
+ {
+ Set(EMobileCallAnswerISV, aStatus, aCallParams);
+ }
+
+
+/************************************************************************************/
+//
+// Multimedia Calls functional unit
+//
+/************************************************************************************/
+
+
+EXPORT_C void RMobileCall::AnswerMultimediaCallAsVoice(TRequestStatus& aReqStatus, const TDesC8& aCallParams, TName& aCallName) const
+/** Rejects an incoming multimedia call, but offers fallback
+to voice. The aCallParams is now the alternative TMobileCallParamsV1, because
+the call is no longer data. The aCallName is now the name of the new voice
+call created to handle the fallback to voice.
+
+This name is used then by the client to open the voice call by name. The TSY
+returns the name of the new voice call object in aName parameter for the Client
+to open.
+
+@param aReqStatus Upon completion this is result code of the asynchronous call
+@param aCallParams Supplies the voice bearer call parameters.
+@param aCallName Supplies the voice call name.
+@capability NetworkServices
+*/
+ {
+ SetAndGet(EMobileCallAnswerMultimediaCallAsVoice,aReqStatus,aCallParams,aCallName);
+ }
+
+EXPORT_C RMobileCall::TEtel3rdPartyMobileCallParamsV1::TEtel3rdPartyMobileCallParamsV1()
+/** Default constructor */
+: RCall::TCallParams(),
+ iIdRestrict(EIdRestrictDefault),
+ iAutoRedial(EFalse)
+ {
+ iExtensionId=KETel3rdPartyCallParamsV1;
+ }
+
+