telephonyserverplugins/common_tsy/commontsy/inc/mmgsmwcdma/cmmcallgsmwcdmaext.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/inc/mmgsmwcdma/cmmcallgsmwcdmaext.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,589 @@
+/*
+* Copyright (c) 2006-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:
+*
+*/
+
+
+
+#ifndef CMMCALLGSMWCDMAEXT_H
+#define CMMCALLGSMWCDMAEXT_H
+
+//  INCLUDES
+#include <featmgr/featurecontrol.h>
+#include "cmmcallextinterface.h"
+#include "CMmPrivateUtility.h"
+
+#include "ctsysystemstatepluginhandler.h"
+
+// FORWARD DECLARATIONS
+class CMmCallTsy;
+class CMmMessageManagerBase;
+
+// CLASS DECLARATION
+
+/**
+*  CMmCallGsmWcdmaExt contains mode-dependent phone functionality for GSM
+*  Calls. Extension request handles are stored in MM Call objects.
+*/
+NONSHARABLE_CLASS( CMmCallGsmWcdmaExt ) : public CMmCallExtInterface, public MCtsySsmPluginCallback
+    {
+    public: // Constructors and destructor
+        
+        /**
+         * Two-phased constructor.
+         *          
+         *
+         * @param aMmCallTsy Pointer to the created object
+         * @param aMmCallMessHandler Pointer to call message handler
+         * @param aMode Call mode
+         * @param aMessageManager Pointer to the Message Manager
+         * @return Pointer to the created object
+         */
+        static CMmCallGsmWcdmaExt* NewL( CMmCallTsy* aMmCallTsy,
+            RMobilePhone::TMobileService aMode, 
+            CMmMessageManagerBase* aMessageManager );
+
+        
+        /**
+         * Destructor.
+         *          
+         *
+         */
+        ~CMmCallGsmWcdmaExt();
+        
+        /**
+         * This method sets RF state
+         *          
+         *
+         * @param aRfState New RF state
+         * @param aSsmPluginCallback pointer to callback interface        
+         */
+        void SetRfState( TRfStateInfo aRfState, MCtsySsmPluginCallback* aSsmPluginCallback, TCtsySsmCallbackData& aCallbackData );
+
+
+        /**
+         * From CMmCallExtInterface Dials a voice call
+         *          
+         *
+         * @param aAlsLineInfo ALS line information
+         * @param aCallParams Call parameters
+         * @param aTelNumber Phone number to be called
+         * @param aExtensionId 
+         * @return KErrNone or error code
+         */
+        TInt DialL( RMobilePhone::TMobileService aAlsLineInfo,
+            const TDesC8* aCallParams,
+            const TDesC* aTelNumber,
+            TInt aExtensionId );
+
+        /**
+         * From CMmCallExtInterface Answer incoming call
+         *          
+         *
+         * @param aCallId Call ID of the call to be answered
+         * @param aExtensionId 
+         * @return KErrNone or error code
+         */
+        TInt AnswerIncomingCallL( TInt aCallId, TInt aExtensionId );
+
+        /**
+         * From CMmCallExtInterface Get GSM specific call parameters
+         *          
+         *
+         * @param aParams Pointer to parameters package
+         */
+        void GetCallParams( TDes8* aParams );
+
+        /**
+         * From CMmCallExtInterface This method is used to hold an active call
+         *
+         * @param aCallId Call Id of the operation's target call
+         * @return KErrNone or error code
+         */
+        TInt HoldL( TInt aCallId );
+
+        /**
+         * From CMmCallExtInterface This method is used to resume a held call
+         *          
+         *
+         * @param aCallId Call Id of the operation's target call
+         * @return  KErrNone or error code
+         */
+        TInt ResumeL( TInt aCallId );
+
+        /**
+         * From CMmCallExtInterface This method is used to swap between active 
+         * and held calls
+         *          
+         *
+         * @param aCallId Call Id of the operation's target call
+         * @return KErrNone or error code
+         */
+        TInt SwapL( TInt aCallId );
+
+        /**
+         * From CMmCallExtInterface This method requests a private communication
+         * to the remote party of one call within a conference call.
+         *          
+         *
+         * @param aCallId Call Id of the operation's target call
+         * @return KErrNone or error code
+         */
+        TInt GoOneToOneL( TInt aCallId );
+
+        /**
+         * From CMmCallExtInterface Dial an emergency call
+         *          
+         *         
+         * @param aCallbackData 
+         * @return KErrNone or error code
+         */
+        TInt DialEmergencyCall(TCtsySsmCallbackData& aCallbackData );  
+       
+
+        /**
+         * From CMmCallExtInterface Deflect an incoming call to another 
+         * destination
+         *          
+         *
+         * @param aData Packaged parameters
+         * @return KErrNone or error code
+         */
+        TInt DeflectL( const TDataPackage& aData );
+
+        /**
+         * From CMmCallExtInterface Informs GSM extension about the current 
+         * status.
+         *          
+         *
+         * @param aCallStatus Current call status
+         * @return KErrNone or error code
+         */
+        TInt CompleteNotifyStatusChange( 
+            RMobileCall::TMobileCallStatus aCallStatus );
+
+         /**
+         * From CMmCallExtInterface Get GSM specific mobile call capabilities.
+         *          
+         *
+         * @param aCallCapsV1: a reference to the parameter object to be filled
+         */
+        void GetMobileCallCapsV1( 
+            RMobileCall::TMobileCallCapsV1& aCallCapsV1 );
+
+
+        /**
+         * From CMmCallExtInterface Set GSM specific mobile call capabilities.
+         *          
+         *
+         * @return aCaps New call capabilities
+         */
+        void SetGSMCallCaps( 
+            const RMobileCall::TMobileCallCapsV1* aCaps );
+
+        /**
+         * From CMmCallExtInterface Adds requested caps to GSM specific mobile 
+         * call capabilities.
+         *          
+         *
+         * @param aCaps Call capabilities to be added
+         */
+        void AddGSMCallCaps( TUint32 aCaps );
+
+        /**
+         * From CMmCallExtInterface Removes requested caps from GSM specific 
+         * mobile call capabilities.
+         *          
+         *
+         * @param aCaps Call capabilities to be removed
+         */
+        void RemoveGSMCallCaps( TUint32 aCaps );
+
+        /**
+         * From CMmCallExtInterface Transfer call to another destination
+         *          
+         *
+         * @return KErrNone or error code
+         */
+        TInt TransferL();
+
+        /**
+         * From CMmCallExtInterface Resets call internal attributes.
+         *          
+         *
+         */
+        void ResetInternalAttributes();
+
+        /**
+         * From CMmCallExtInterface Fill mobile call information in the infoV1 
+         * given as parameter
+         *          
+         *
+         * @return aInfoV1 Current Mobile Call Information
+         * @return KErrNone or error code
+         */
+        TInt FillMobileCallInfo( 
+           RMobileCall::TMobileCallInfoV1* aInfoV1 );
+        	
+
+        /**
+         * From CMmCallExtInterface Fill mobile call information in the infoV3 
+         * given as parameter
+         *          
+         * 
+         * @return aInfoV3 Current Mobile Call Information
+         * @return KErrNone or error code
+         */
+        TInt FillMobileCallInfoV3( 
+            RMobileCall::TMobileCallInfoV3* aInfoV3 );     
+    
+        /**
+         * From CMmCallExtInterface Fill mobile call information in the infoV7 
+         * given as parameter
+         *          
+         * 
+         * @return aInfoV7 Current Mobile Call Information
+         * @return KErrNone or error code
+         */
+        TInt FillMobileCallInfoV7( 
+            RMobileCall::TMobileCallInfoV7* aInfoV7 );    
+        
+        /**
+         * From CMmCallExtInterface Fill mobile call information in the infoV8 
+         * given as parameter
+         *          
+         * 
+         * @return aInfoV8 Current Mobile Call Information
+         * @return KErrNone or error code
+         */        
+        TInt FillMobileCallInfoV8(
+            RMobileCall::TMobileCallInfoV8* aInfoV8);
+
+         /**
+         * From CMmCallExtInterface Fills in the remote party info in the 
+         * infoV1Pckg given as parameter
+         *          
+         *
+         * @return aInfoV1Pckg Current remote party information
+         */
+        TInt GetRemotePartyInfo( 
+            RMobileCall::TMobileCallRemotePartyInfoV1Pckg* aInfoV1Pckg );
+
+        /**
+         * From CMmCallExtInterface Sets mobile call data
+         *          
+         *
+         * @param aDataPackage New mobile call data
+         * @param aCallDirection New call direction
+         */
+        void SetMobileCallData(
+            CMmDataPackage* aDataPackage,
+            RMobileCall::TMobileCallDirection aCallDirection );
+
+        //CSD/HSCSD methods
+
+        /**
+         * Return GSM specific data call capabilities.
+         *          
+         *
+         * @param aCallDataCapsV1: a reference to the parameter object to be filled
+         */
+        void GetMobileDataCallCapsV1( 
+            RMobileCall::TMobileCallDataCapsV1& aCallDataCapsV1 );
+
+        /**
+         * Received GSM specific data call capabilities.
+         *          
+         *
+         * @param aCaps: New data call caps
+         */
+        void ReceivedMobileDataCallCaps(
+            RMobileCall::TMobileCallDataCapsV1* aCaps );
+
+        /**
+         * Set GSM specific dynamic HSCSD parameters.
+         *          
+         *
+         * @param RMobileCall::TMobileCallAiur* aAiur: Wanted rate
+         * @param TInt* aRxTimeslots: Wanted RX timeslots
+         * @return: KErrNone or KErrNotFound
+         */
+        TInt SetDynamicHscsdParamsL(
+            RMobileCall::TMobileCallAiur* aAiur,
+            TInt* aRxTimeslots );
+
+        /** 
+         * Return GSM specific current HSCSD info.
+         *          
+         *
+         * @param  Current HSCSD info
+         * @return KErrNone or KErrETelCallNotActive
+         */
+        TInt GetCurrentHscsdInfo( TDes8* aHSCSDInfo );
+
+        /**
+         * Return GSM specific bearer service info.
+         *          
+         *
+         * @param RCall::TBearerService* aBearerService: Bearer service info
+         * @return : KErrNone
+         */
+        TInt GetBearerServiceInfo( 
+            RCall::TBearerService* aBearerService );
+
+        /**
+         * Dial for data calls.
+         *          
+         *
+         * @parama CallMode: call mode
+         * @parama CallParams: call parameters
+         * @param  aTelNumber: phone number to be called
+         * @return : KErrNone or error code from DP
+         */
+        TInt DialDataCallL(
+            RMobilePhone::TMobileService aCallMode,
+            const TDesC8* aCallParams,
+            const TDesC* aTelNumber );
+
+        /**
+         * From CMmCallExtInterface Answer incoming data call
+         *          
+         *
+         * @param aCallId Call ID of the call to be answered
+         * @return KErrNone or error code
+         */
+        TInt AnswerIncomingDataCallL( TInt aCallId );
+
+        /**
+         * Copy received bearer service info.
+         *          
+         *
+         * @param  Bearer service info
+         */
+        void ReceivedBearerServiceInfo( 
+            RCall::TBearerService aBearerService );
+
+        /**
+         * Sets correct data call attributes.
+         *          
+         *
+         * @param  Call parameters
+         */
+        void Connect( const TDesC8* aCallParams );
+
+        /**
+         * Stores new CALL/CSD parameters.
+         *          
+         *
+         * @param aDataPackage: call parameters
+         */
+        void ReceivedCallParams(
+            const CMmDataPackage* aDataPackage );
+
+        /**
+         * Copies data call parameters to another variable without extension 
+         * id
+         *          
+         *         
+         * @param destination  parameter
+         * @param source parameter
+         */
+        void CopyMobileDataCallParams( 
+            RMobileCall::TMobileDataCallParamsV1& aDestination,
+            const RMobileCall::TMobileDataCallParamsV1& aSource ) const;
+
+        /**
+         * Received extension specific HSCSD info.
+         *          
+         *
+         * @param aDataPackage
+         */
+        void ReceivedHscsdInfo(
+            CMmDataPackage* aDataPackage );
+
+        /**
+         * Received extension specific data call capabilities.
+         *          
+         *
+         * @param New data call capabilities and
+         * data call mode 
+         */
+        void ReceivedMobileDataCallCaps(
+            CMmDataPackage* aDataPackage );
+   
+   public: // Functions from MCtsySsmPluginCallback
+   
+        /** CMmCallGsmWcdmaExt::SsmPluginCallback
+		 * This is callback
+		 * This method is called from System State Manager (or from CMmCallGsmWcdmaExt, if there 
+		 * is no reason to change RF state), after RF state changing      
+         *
+         * @param aResult -- result returned either from SSM
+         */
+         void SsmPluginCallback(TInt aResult, TCtsySsmCallbackData& aCallbackData);    
+
+
+    private: // Constructors and destructor
+
+        /**
+         * C++ default constructor.
+         *          
+         *
+         */
+        CMmCallGsmWcdmaExt();
+
+        /**
+         * Second phase constructor of CMmCallGsmWcdmaExt.
+         *          
+         *
+         */
+        void ConstructL();
+
+        /**
+         * This method updates call capabilities in case that there is only 
+         *  one non-idle call
+         *           
+         *
+         * @param aCallStatus Current status of this call
+         * @return KErrNone or error code
+         */
+        TInt UpdateSingleCallControlCaps( 
+            RMobileCall::TMobileCallStatus aCallStatus );
+
+        /**
+         * This method updates call capabilities in case that there are two
+         * calls in non-idle state and they are not in a conference.
+         *          
+         *
+         * @param aCallStatus Current status of this call
+         * @return KErrNone or error code
+         */
+        TInt UpdateDoubleCallControlCaps( 
+            RMobileCall::TMobileCallStatus aCallStatus );
+
+        /**
+         * This method updates call capabilities in case that conference call
+         * is going on.
+         *          
+         *
+         * @param aCallStatus Current status of this call
+         * @return KErrNone or error code
+         */
+        TInt UpdateMultipleCallControlCaps( 
+            RMobileCall::TMobileCallStatus aCallStatus);
+
+        //CSD/HSCSD methods
+        /**
+         * Sets data call service, protocol and QoS caps in CSD/HSCSD 
+         *          
+         *
+         * @param const  aCallParams: Call parameters
+         * @return KErrNone
+         */
+        void SetDataCaps( const TDesC8* aCallParams );
+        
+
+    private:    // Data
+
+        /**
+         * Pointer to the mode independent call object
+         */
+        CMmCallTsy* iMmCallTsy;
+
+        /**
+         * call mode
+         */
+        RMobilePhone::TMobileService iSymbianCallMode;
+
+        /**
+         * Call parameters
+         */
+        RMobileCall::TMobileCallParamsV7 iCallParams;
+
+        /**
+         * Dynamic call capabilities
+         */
+        RMobileCall::TMobileCallCapsV1 iMobileCallCaps;
+
+        /**
+         * Current mobile call info
+         */
+        RMobileCall::TMobileCallInfoV8 iMobileCallInfo;
+
+        /**
+         * Tells if Join flag should be enabled for this calls when it enters 
+         * the connected state
+         */
+        TBool iEnableJoinFlag;
+
+        /**
+         * pointer to the message manager
+         * Not own.
+         */
+        CMmMessageManagerBase* iMessageManager;
+
+        /**
+         * Data call mode (CSD or HSCSD)
+         */
+        TDataCallMode iDataCallMode;
+
+        /**
+         * Bearer service information for data call
+         */
+        RCall::TBearerService iBearerService;
+
+        /**
+         * Dynamic data call caps
+         */
+        RMobileCall::TMobileCallDataCapsV1* iDataCallCaps;
+
+        /**
+         * CSD parameters
+         */
+        RMobileCall::TMobileDataCallParamsV1* iCSDParams;
+
+        /**
+         * HSCSD parameters
+         */
+        RMobileCall::TMobileHscsdCallParamsV1* iHSCSDParams;
+
+        /**
+         * Current HSCSD call info
+         */
+        RMobileCall::TMobileCallHscsdInfoV8* iCurrentHSCSDInfo;
+
+        /**
+         * Tells if HSCSD info has been received or not
+         */
+        TBool iInformationReceived;
+
+		/**
+		 * Used to query for supported features
+		 */
+		RFeatureControl iFeatureControl;
+
+		/**
+		 * Tells if Feature Manager is available. Will be EFalse if 
+		 * RFeatureControl::Open fails to connect to the Feature Manager
+		 */
+		TBool iUsingFeatureManager;
+		
+		// Pointer to SystemStatePlugin
+		CCtsySystemStatePluginHandler* iSystemStatePluginHandler;
+    };
+
+#endif      // CMMCALLGSMWCDMAEXT_H   
+            
+// End of File