diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/simtsy/inc/CSimCall.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/simtsy/inc/CSimCall.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,198 @@ +// Copyright (c) 2001-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: +// This file contains the definitions of the Simulator TSY call classes. The call classes +// process the call-based requests made by ETel clients and passed down to the TSY by the +// ETel Server. +// +// + +/** + @file + @internalAll +*/ + +#ifndef __CSIMCALL_H__ +#define __CSIMCALL_H__ + +#include +#include +#include +#include "utils.h" +#include "SimConstants.h" +#include "csimtimer.h" + +/** +* This class 'CSimCall' is the Call class for the Simulator TSY. +* This class is the base classs voice and data calls. It is an abstract class so it will +* not be instantiated. It handles all the call-based ETel requests common to voice and data calls. +* Requests are passed down from the ETel Server through virtual functions. +* Core ETel API requests appear as individual virtual functions, +* while extension API requests are passed through the ExtFunc requests. +*/ +class CSimLine; +class CSimCallDuration; +class CSimCallRemotePartyInfoChange; +class CSimCall : public CCallBase + { +friend class CSimCallDuration; +friend class CSimCallRemotePartyInfoChange; + +public: + enum TCallEvent + { + ECallEventDial, + ECallEventHangUp, + ECallEventAnswerIncoming, + ECallEventIncomingCall, + ECallEventTimeOut, + ECallEventNtRasConnected, + ECallEventHold, + ECallEventResume, + ECallEventSwap, + ECallEventConnectContinue, + ECallEventRemoteHangup + }; + +public: + CSimCall(CSimLine* aLine,const TName& aName, CSimPhone* aPhone); + ~CSimCall(); + void ConstructL(); + virtual void Init(); + virtual TInt RegisterNotification(const TInt aIpc); + virtual TInt DeregisterNotification(const TInt aIpc); + static void CloseCall(TAny* aObj); + virtual CTelObject::TReqMode ReqModeL(const TInt aIpc); + + // MCallBaseTSY pure virtuals + virtual TInt GetInfo(const TTsyReqHandle aTsyReqHandle,RCall::TCallInfo* aCallInfo); + virtual TInt GetCaps(const TTsyReqHandle aTsyReqHandle,RCall::TCaps* aCaps); + virtual TInt NotifyCapsChange(const TTsyReqHandle aTsyReqHandle,RCall::TCaps* aCaps); + virtual TInt NotifyCapsChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt NotifyHookChange(const TTsyReqHandle aTsyReqHandle, RCall::THookStatus* aHookStatus); + virtual TInt NotifyHookChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RCall::TStatus* aStatus); + virtual TInt NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt NotifyDurationChange(const TTsyReqHandle aTsyReqHandle,TTimeIntervalSeconds* aTime); + virtual TInt NotifyDurationChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt RecoverDataPortAndRelinquishOwnership(); + virtual TInt GetStatus(const TTsyReqHandle aTsyReqHandle,RCall::TStatus* aCallStatus); + virtual TInt TransferOwnership(const TTsyReqHandle aTsyReqHandle); + virtual TInt AcquireOwnership(const TTsyReqHandle aTsyReqHandle); + virtual TInt AcquireOwnershipCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt GetCallDuration(const TTsyReqHandle aTsyReqHandle, TTimeIntervalSeconds* aTime); + virtual TInt GetFaxSettings(const TTsyReqHandle aTsyReqHandle,RCall::TFaxSessionSettings* aSettings); + virtual TInt SetFaxSettings(const TTsyReqHandle aTsyReqHandle,const RCall::TFaxSessionSettings* aSettings); + virtual void UpdateNotifiers(); + //MM + virtual TInt GetMobileCallStatus(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallStatus* aCallStatus); + TInt GetMobileCallInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aMobileCallInfo); + virtual TInt NotifyMobileCallStatusChange(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus); + TInt NotifyMobileCallStatusChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt NumberOfSlotsL(const TInt aIpc); + TInt GetMobileCallCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps); + TInt NotifyMobileCallCapsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps); + TInt NotifyMobileCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle); + virtual TInt NotifyRemotePartyInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aRemoteParty); + virtual TInt NotifyRemotePartyInfoChangeCancel(); + + // MTelObjectTSY pure virtuals + virtual CTelObject* OpenNewObjectByNameL(const TDesC&); + virtual CTelObject* OpenNewObjectL(TDes& aNewName); + + TBool Used(); + void SetUsed(); + void SetUnused(); + virtual TInt ActionEvent(TCallEvent aEvent,TInt aStatus); //< The state machine for the calls + TInt ChangeStateL(RMobileCall::TMobileCallStatus aState,TBool aSwap, TBool aNoPropagation); //< Changes the state of the call + void ResetIfRingingL(); + virtual TUint Caps()=0; + +protected: + void GenerateCoreCallCaps(TUint& aCaps); + +private: + RCall::TStatus GetCoreCallStatus(); //< Converts Multimode Line status to Core line status + +public: + TName iName; + RMobileCall::TMobileCallStatus iState; //< Holds the current state of the call + + CSimCallDuration* iCallDurationHandler; // < Pointer to the owned timer class. + +protected: + TNotifyData iAnswerIncomingCall; //< Holds the notification data (a flag, TsyReqHandle and any raw data) + //< for Answer incoming call notifications + TTsyReqHandle iDialRequestHandle; //< Request handle for the Dial request + TTsyReqHandle iHangUpRequestHandle; //< Request handle for the Hang up request + CSimLine* iLine; //< Pointer to the line class + TNotifyData iNotifyStatusChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) for core call status change. + TNotifyData iMobileNotifyStatusChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) for multimode call status change. + //< for the line status + RCall::THookStatus iHookState; //< The current call hook state. + TNotifyData iNotifyHookChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) + //< for the line hook status + TNotifyData iNotifyCapsChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) + //< for the core caps changes + TNotifyData iNotifyMobileCapsChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) + //< for the mobile caps changes + TUint iCaps; //< The capability flags associated with the call. + CSimCallRemotePartyInfoChange* iNotifyRemotePartyInfoTimer; //< active object that similates retrieval of remote party info after certain amount of time. + + CSimPhone* iPhone; + }; + +class CSimCallDuration : public CBase, MTimerCallBack + { +public: + static CSimCallDuration* NewL(CSimCall* aCall); + CSimCallDuration(CSimCall* aCall); + ~CSimCallDuration(); + void StartDuration(); + void StopDuration(); + void StartNotification(TTsyReqHandle aTsyReqHandle, TTimeIntervalSeconds* aTime); + void StopNotification(); + void GetDuration(TTimeIntervalSeconds* aTime); + void TimerCallBack(TInt aId); + TTimeIntervalSeconds iCallDuration; + +private: + void ConstructL(); + +private: + CSimCall* iCall; + CSimTimer* iDurationTimer; // < Pointer to the owned timer class. + //