telephonyserverplugins/simtsy/inc/CSimCall.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /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 <e32base.h>
+#include <etelmm.h>
+#include <et_phone.h>
+#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.
+						// <stores the call duration (since connected)
+	TNotifyData iNotifyDurationChange;
+	};
+	
+class CSimCallRemotePartyInfoChange : public CBase, MTimerCallBack
+	{
+public:
+	static CSimCallRemotePartyInfoChange* NewL(CSimCall* aCall);
+	CSimCallRemotePartyInfoChange(CSimCall* aCall);
+	~CSimCallRemotePartyInfoChange();
+	void TimerCallBack(TInt aId);
+	void Start();
+private:
+	void ConstructL();
+public:
+
+	RMobileCall::TMobileCallRemotePartyInfoV1 iRemotePartyInfoV1;
+	TNotifyData iNotifyRemotePartyInfo;
+	CSimTimer* iRemoteInfoTimer;
+	TInt iDelay;	
+	CSimCall* iCall;	
+	};
+
+#endif // CSIMCALL_H__