telephonyutils/etel3rdpartyapi/inc/TelephonyFunctions.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyutils/etel3rdpartyapi/inc/TelephonyFunctions.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2009 Sony Ericsson Mobile Communications AB
+* 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:
+* Sony Ericsson Mobile Communications AB - initial contribution.
+* Nokia Corporation - additional changes.
+* 
+* Contributors:
+* 
+* Description:
+*
+*/
+
+
+#ifndef TELEPHONYFUNCTIONS_H__
+#define TELEPHONYFUNCTIONS_H__
+
+/** @file
+ *  Definition of CTelephonyFunctions class. Used by CTelephony class.
+ */
+
+#include <e32base.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <e32property.h>
+
+#include <sacls.h>
+
+#include "Etel3rdParty.h"
+
+#include <commsdattypesv1_1.h>
+
+const TInt KTelephonyDllUidValue = 0x1000AA4F;	///< Unique to this Dll
+const TUid KTelephonyDllUid={KTelephonyDllUidValue};	///< Unique to this Dll
+_LIT(KTelephonyCategory, "Telephony");
+
+class CGetPhoneIdAct;
+class CGetSubscriberIdAct;
+class CGetIndicatorAct;
+class CGetBatteryInfoAct;
+class CGetSignalStrengthAct;
+class CGetIccLockInfoAct;
+class CSendDTMFTonesAct;
+class CFlightModeChangeAct;
+class CNotifyIndicatorAct;
+class CNotifyBatteryInfoAct;
+class CNotifySignalStrengthAct;
+class CNotifyIccLockInfoAct;
+class CGetSupplementaryServiceStatusAct;
+class CGetIdentityServiceStatusAct;
+class CNotifyLineStatusAct;
+class CDialNewCallAct;
+class CGetCallDynamicCapsAct;
+class CHoldAct;
+class CResumeAct;
+class CSwapAct;
+class CHangupAct;
+class CAnswerIncomingCallAct;
+class CNotifyCallStatusAct;
+class CNotifyRemotePartyInfoAct;
+class CGetNetworkRegistrationStatusAct;
+class CGetCurrentNetworkInfoAct;
+class CGetCurrentNetworkNameAct;
+class CGetOperatorNameAct;
+class CNotifyNetworkRegistrationStatusAct;
+class CNotifyCurrentNetworkInfoAct;	 
+class CNotifyIncomingCallAct;
+
+class CTelephonyFunctions : public CBase
+/**
+Class which uses Etel.DLL on behalf of CTelephony objects.
+*/
+	{
+
+public:	
+	enum TState	///< State of the CTelephonyFunctions object
+		{
+		EIdle,
+		EDialling,	
+		EAnswering,	
+		EEstablishingDataChannel, 
+		EDataChannelInUse,	
+		ECleaningUp	
+		};
+	
+   
+	enum TOperations	///< Operations of the CTelephonyFunctions object
+		{
+		EGetPhoneId,                      // 0
+		EGetSubscriberId,
+		EGetFlightMode,
+		EGetIndicator,
+		EGetBatteryInfo,
+		EGetSignalStrength,               // 5
+		EGetIccLockInfo,
+		ESendDTMFTones,
+		EDialNewCall,
+		EGetCallDynamicCaps,
+		EGetCallStatus,                   // 10
+		EHold,
+		EResume,
+		ESwap,
+		EHangup,
+		EAnswerIncomingCall,              // 15
+		ENotifyIncomingCall,
+		EGetNetworkRegistrationStatus,
+		EGetCurrentNetworkInfo,
+		EGetCurrentNetworkName,
+		EGetOperatorName,                 // 20
+		EGetCFSupplServicesStatus,
+		EGetCBSupplServicesStatus,
+		EGetCWSupplServicesStatus,
+		EGetIdentityServiceStatus,
+
+		EFlightModeChange,                // 25
+		ENotifyIndicator,
+		ENotifyBatteryInfo,
+		ENotifySignalStrength,
+		ENotifyPin1LockInfo,
+		ENotifyPin2LockInfo,			  // 30
+		ENotifyNetworkRegistrationStatus,
+		ENotifyCurrentNetworkInfo,
+		ENotifyOwnedCall1Status,
+		ENotifyOwnedCall2Status,
+		ENotifyOwnedCall1RemoteInfo,	  // 35
+		ENotifyOwnedCall2RemoteInfo,
+		ENotifyVoiceLineStatus,
+
+		EMaxNumberOperations
+		};
+		
+	enum TCallPoolOperation
+		{
+		EUnset,
+		EAnswer,
+		EDial		
+		};
+		
+	#define KErrTelephonyOutOfSequence (-1)	
+	
+	#define KNoMultimodeTsy (-1)	
+	
+	// Constructors
+	static CTelephonyFunctions* NewLC();
+	static CTelephonyFunctions* NewL();
+		
+	// Destructor - virtual and class not intended
+	// for derivation, so not exported
+	~CTelephonyFunctions();
+	
+	// Phone Functionality
+	TInt GetPhoneIdL(TRequestStatus& aReqStatus, TDes8& aId);
+	TInt GetSubscriberIdL(TRequestStatus& aReqStatus, TDes8& aId);
+	TInt GetFlightMode(TRequestStatus& aReqStatus, TDes8& aMode);
+	TInt GetIndicatorL(TRequestStatus& aReqStatus, TDes8& aIndicator);
+	TInt GetBatteryInfoL(TRequestStatus& aReqStatus, TDes8& aBatteryInfo);
+	TInt GetSignalStrengthL(TRequestStatus& aReqStatus, TDes8& aSignalStrength);
+	TInt GetLockInfoL(TRequestStatus& aReqStatus, const CTelephony::TIccLock& aLock, TDes8& aLockInfo);
+	TInt SendDTMFTonesL(TRequestStatus& aReqStatus, const TDesC& aTones);
+	TInt GetLineStatus(const CTelephony::TPhoneLine& aLine, TDes8& aStatus);
+	TInt GetCallInfoL(TDes8& aCallSelect, TDes8& aCallInfo, TDes8& aRemoteInfo);
+	TInt DialNewCallL(TRequestStatus& aStatus, TDes8& aCallParams, 
+		const CTelephony::TTelNumber& aTelNumber, CTelephony::TCallId& aCallId, const CTelephony::TPhoneLine aLine = CTelephony::EVoiceLine); 
+	TInt GetCallDynamicCaps(const CTelephony::TCallId& aCallId, TDes8& aCallCaps); 
+	TInt GetCallStatusL(const CTelephony::TCallId& aCallId, TDes8& aCallStatus); 
+	TInt HoldL(TRequestStatus& aReqStatus, const CTelephony::TCallId& aCallId);
+	TInt ResumeL(TRequestStatus& aReqStatus, const CTelephony::TCallId& aCallId);
+	TInt SwapL(TRequestStatus& aReqStatus, const CTelephony::TCallId& aCallId1, 
+		const CTelephony::TCallId& aCallId2);
+	TInt HangupL(TRequestStatus& aReqStatus, const CTelephony::TCallId& aCallId);
+	TInt AnswerIncomingCallL(TRequestStatus& aReqStatus, CTelephony::TCallId& aCallId, 
+		const CTelephony::TPhoneLine aLine=CTelephony::EVoiceLine);
+	// Network Functionality
+	TInt GetNetworkRegistrationStatusL(TRequestStatus& aReqStatus, TDes8& aStatus);
+	TInt GetCurrentNetworkInfoL(TRequestStatus& aReqStatus, TDes8& aNetworkInfo);
+	TInt GetCurrentNetworkNameL(TRequestStatus& aReqStatus, TDes8& aNetworkName);
+	TInt GetOperatorNameL(TRequestStatus& aReqStatus, TDes8& aOperator);
+ 	// (Basic) Supplementary Services Functionality
+	TInt GetCFSupplementaryServiceStatusL(TRequestStatus& aRequestStatus, const CTelephony::TCallForwardingCondition aCondition, TDes8& aDes, const CTelephony::TServiceGroup aServiceGroup);
+	TInt GetCBSupplementaryServiceStatusL(TRequestStatus& aRequestStatus, const CTelephony::TCallBarringCondition aCondition, TDes8& aDes, const CTelephony::TServiceGroup aServiceGroup);
+	TInt GetCWSupplementaryServiceStatusL(TRequestStatus& aRequestStatus, TDes8& aDes, const CTelephony::TServiceGroup aServiceGroup);
+ 	TInt GetIdentityServiceStatusL(TRequestStatus& aReqStatus,
+	 	const CTelephony::TIdentityService& aService, TDes8& aStatus);
+  	// Cancel Request Functionality
+	TInt CancelAsync(CTelephony::TCancellationRequest aCancel);
+ 	// Notification Functionality
+	TInt NotifyChangeL(TRequestStatus& aReqStatus, const CTelephony::TNotificationEvent& aEvent, TDes8& aDes);
+	void ResetPendingNotifyRequest(CTelephony::TNotificationEvent aEvent);
+	void CompleteRequest(TOperations aOPeration, TInt aCompleteCode);
+ 	
+	// Deprecated functions
+
+	void CleanUp();		// Close/Free outstanding "Open" objects etc.
+	inline TRequestStatus** RequestStatus();
+	inline RMobileCall* Call();
+	inline RMobileCall* Call(const CTelephony::TCallId aCallId);
+	inline RMobileLine* Line(const CTelephony::TPhoneLine aLine);
+	inline RMobilePhone* Phone();
+	inline RProperty* PhonePowerProperty();
+	TInt GetISVCall(CTelephony::TCallId& aCallId);
+	void CloseAndReset(const CTelephony::TCallId aCallId);
+
+	static void CopyTelAddress(const RMobilePhone::TMobileAddress& aFromAddress, CTelephony::TTelAddress& aToAddress);
+	static void GetCallStatus(const RMobileCall::TMobileCallStatus aMMCallStatus, CTelephony::TCallStatus& aTelCallStatus);
+
+	inline void	SetAsyncRequestOutstandingFalse();
+	inline TRequestStatus** GetRequestStatus(CTelephonyFunctions::TOperations aOp);
+	inline TBool IsRequestPending(CTelephonyFunctions::TOperations aOp);
+	inline void	SetRequestPending(CTelephonyFunctions::TOperations aOp, TBool aBool);
+	
+private:	
+	CTelephonyFunctions();	
+	void ConstructL();	
+	void GetCommDbTSYnameL(TDes& aTableName);	// get TSY name from CommDb
+	void InitialisePhoneL();
+	TBool IsFlightModeOn();
+	TInt NotifyFlightModeL(TRequestStatus& aRequestStatus, TDes8& aDes);
+	TInt NotifyOwnedCall1RemotePartyInfoL(TRequestStatus& aRequestStatus, TDes8& aDes);
+	TInt NotifyOwnedCall2RemotePartyInfoL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifyVoiceLineStatusL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifyOwnedCall1StatusL(TRequestStatus& aRequestStatus,  TDes8& aDes); 
+	TInt NotifyOwnedCall2StatusL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifyIndicatorL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifyPinLockInfoL(TRequestStatus& aRequestStatus, const CTelephony::TNotificationEvent& aEvent, TDes8& aDes); 
+	TInt NotifyBatteryInfoL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifySignalStrengthL(TRequestStatus& aRequestStatus, TDes8& aDes); 
+	TInt NotifyNetworkRegistrationStatusL(TRequestStatus& aRequestStatus, TDes8& aDes);
+	TInt NotifyCurrentNetworkInfoL(TRequestStatus& aRequestStatus, TDes8& aDes);
+	
+private:
+	RTelServer				iTelServer;
+	RMobilePhone			iPhone;	
+	RMobileLine				iLineData;	
+	RMobileLine				iLineFax;	
+	RMobileLine				iLineVoice;	
+	TName					iLineVoiceName;
+	TName					iCallName;		 
+	RProperty				iPhonePowerProperty;
+	//TSAPhoneStatus			iFlightMode;
+	TInt					iTsyVersion;
+	
+	// Active Objects
+	CGetPhoneIdAct*			iGetPhoneId;
+	CGetSubscriberIdAct*	iGetSubscriberId;
+	CGetIndicatorAct*		iGetIndicator;
+	CGetBatteryInfoAct*		iGetBatteryInfo;
+	CGetSignalStrengthAct*	iGetSignalStrength;
+	CGetIccLockInfoAct*		iGetIccLockInfo;
+	CSendDTMFTonesAct*		iSendDTMFTones;	
+	CDialNewCallAct*		iDialNewCall;
+	CHoldAct*				iHold;
+	CResumeAct*				iResume;
+	CSwapAct*				iSwap;
+	CHangupAct*				iHangup;
+	CAnswerIncomingCallAct*	iAnswerIncomingCall;
+	
+	CFlightModeChangeAct*			iFlightModeChange;
+	CNotifyIndicatorAct* 			iNotifyIndicator;
+	CNotifyBatteryInfoAct*			iNotifyBatteryInfo;
+	CNotifySignalStrengthAct*		iNotifySignalStrength;
+	CNotifyIccLockInfoAct*			iNotifyIccLockInfo;
+	CNotifyNetworkRegistrationStatusAct* 	iNotifyNetworkRegStatus;
+	CNotifyCurrentNetworkInfoAct*	iNotifyCurrentNetworkInfo;
+	CNotifyCallStatusAct*			iNotifyOwnedCall1Status;
+	CNotifyCallStatusAct*			iNotifyOwnedCall2Status;
+	CNotifyRemotePartyInfoAct* 		iNotifyOwnedCall1RemoteInfo;
+	CNotifyRemotePartyInfoAct* 		iNotifyOwnedCall2RemoteInfo;
+	
+	// Internal Active Objects
+	CNotifyLineStatusAct* 	iInternalNotifyVoiceLineStatus;
+	CNotifyIncomingCallAct*	iInternalNotifyIncomingCall;
+
+	// Network Functionality
+	CGetNetworkRegistrationStatusAct*	iGetNetworkRegistrationStatus;
+	CGetCurrentNetworkInfoAct*			iGetCurrentNetworkInfo;
+	CGetCurrentNetworkNameAct*			iGetCurrentNetworkName;
+	CGetOperatorNameAct*				iGetOperatorName;
+
+ 	// (Basic) Supplementary Services Functionality
+	CGetSupplementaryServiceStatusAct*	iGetCFSupplementaryServiceStatus;
+	CGetSupplementaryServiceStatusAct*	iGetCWSupplementaryServiceStatus;
+	CGetSupplementaryServiceStatusAct*	iGetCBSupplementaryServiceStatus;
+ 	CGetIdentityServiceStatusAct*		iGetIdentityServiceStatus;
+ 
+	TRequestStatus*			iRequestStatus;
+	RMobileCall				iCall;	
+	RMobileCall				iIncomingCall;	
+
+	TState			iState;	
+	TBool			iTelServerIsOpen;	///< so destructor can Close() if necc.
+	TBool			iPhoneIsOpen;	///< so destructor/CleanUp() can Close() if necc.
+	TBool			iLineIsVoiceOpen;	///< so destructor/CleanUp() can Close() if necc.
+	TBool			iLineIsDataOpen;	///< so destructor/CleanUp() can Close() if necc.
+	TBool			iLineIsFaxOpen;	///< so destructor/CleanUp() can Close() if necc.
+	TBool			iAsyncRequestOutstanding;	///< ETrue if async call in progress.
+	TBool			iCallIsOpen;	///< so destructor/CleanUp() can Close() if necc.
+	
+	RPointerArray<TRequestStatus> iReqStatusTable;
+	RArray<TBool> iReqPendingTable;		
+	RArray<RMobileCall>	iCallPool;	
+	RArray<TCallPoolOperation>	iCallPoolStatus;	
+	}; // class CTelephonyFunctions
+	
+class CAsyncRequestBaseAct : public CActive
+	{
+	
+public:		
+	~CAsyncRequestBaseAct();
+	CAsyncRequestBaseAct();
+protected:	
+	void RunL();	// from CActive
+	virtual void Complete() = 0;
+	};
+
+/**
+Interface implemented by classes which want to be notified when an
+event completes. These objects should register themselves with the 
+relevant active object that handles the event in question using 
+the RegisterObserver() function. 
+The AO will call EventCompleted() when it completes. 
+DeregisterObserver() can be called when the object no longer 
+wishes to be notified.
+
+@see MIncomingCallNameSubject
+*/ 
+class MEventObserver
+	{
+public:
+	virtual void EventCompleted() = 0;
+	};
+	
+/**
+Interface implemented by the CNotifyIncomingCallAct AO
+to allow other objects register themselves to be notified of 
+when an incoming call arrives, obtain the call name and reset
+it when there is no longer an incoming call.
+
+Two AOs currently make use of the methods in this interface:
+CNotifyLineStatusAct resets the call name when the line
+is no longer ringing and CAnswerIncomingCallAct retrieves the 
+call name when there is an incoming call so that the call can be 
+opened.
+*/
+class MIncomingCallNameSubject
+	{
+public:
+ 	virtual void RegisterObserver(MEventObserver* aObserver) = 0;
+	virtual void DeregisterObserver(MEventObserver* aObserver) = 0;
+	virtual void ResetCallName() = 0;
+	virtual TInt CallName(TName&) const = 0;
+	};
+
+#include "TelephonyFunctions.inl"	
+
+#endif	// TELEPHONYFUNCTIONS_H__