--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/csplugin/src/rcsplinecontainer.cpp Fri Mar 19 09:28:42 2010 +0200
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2002-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: Container for ETel line subsessions.
+*
+*/
+
+
+
+// INCLUDES
+#include <rmmcustomapi.h>
+#include <mmtsy_names.h> // tsy and phone names
+#include <cccpcallparameters.h>
+#include <cccecallparameters.h>
+
+#include "rcsplinecontainer.h"
+#include "csppanic.pan"
+#include "csplogger.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Default c++ constructor
+RCSPLineContainer::RCSPLineContainer()
+ {
+ }
+
+// ---------------------------------------------------------
+// RCSPLineContainer::Open
+//
+// ---------------------------------------------------------
+//
+TInt RCSPLineContainer::Open( RMobilePhone& aPhone, TUint32 aServiceId )
+ {
+ CSPLOGSTRING( CSPINT, "RCSPLineContainer::Open" );
+ iServiceId = aServiceId;
+
+ TInt error = iPrimaryLine.Open( aPhone, KMmTsyVoice1LineName);
+ if (error != KErrNone)
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::Open voice ERROR %d", error );
+ return error;
+ }
+
+ // Ignore errors on the rest of the lines - they are non-essential
+ error = iAls2Line.Open( aPhone, KMmTsyVoice2LineName );
+ if ( error )
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::Open voice2 ERROR %d", error );
+ }
+
+ error = iDataLine.Open( aPhone, KMmTsyDataLineName );
+ if ( error )
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::Open data ERROR %d", error );
+ }
+
+ error = iFaxLine.Open( aPhone, KMmTsyFaxLineName );
+ if ( error )
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::Open fax ERROR %d", error );
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// RCSPLineContainer::Close
+//
+// ---------------------------------------------------------
+//
+void RCSPLineContainer::Close()
+ {
+ CSPLOGSTRING( CSPINT, "RCSPLineContainer::Close" );
+ iPrimaryLine.Close();
+ iAls2Line.Close();
+ iDataLine.Close();
+ iFaxLine.Close();
+ }
+
+// ---------------------------------------------------------
+// RCSPLineContainer::LineByType
+//
+// ---------------------------------------------------------
+//
+RMobileLine& RCSPLineContainer::LineByType( TCSPLineId aLine )
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineByType %d", aLine );
+ switch(aLine)
+ {
+ case ECSPLineSpeech:
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineByType Speech %d", aLine );
+ return iPrimaryLine;
+ case ECSPLineAuxSpeech:
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineByType AuxSpeech %d", aLine );
+ return iAls2Line;
+ case ECSPLineData:
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineByType Data %d", aLine );
+ return iDataLine;
+ case ECSPLineFax:
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineByType Fax %d", aLine );
+ return iFaxLine;
+ default:
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::INVALID LINE ID %d", aLine );
+ Panic( ECSPPanicInvalidParameter );
+ return iPrimaryLine;
+ }
+ }
+
+// ---------------------------------------------------------
+// True if the line matching the line id is open.
+// ---------------------------------------------------------
+//
+TBool RCSPLineContainer::LineIsOpen( TCSPLineId aType )
+ {
+ CSPLOGSTRING2( CSPINT, "RCSPLineContainer::LineIsOpen %d", aType );
+ RMobileLine& line = LineByType(aType);
+ return (line.SubSessionHandle() != KNullHandle);
+ }
+
+// ---------------------------------------------------------
+// Resolves line id based on service id, call type and line
+// type.
+// ---------------------------------------------------------
+//
+RCSPLineContainer::TCSPLineId RCSPLineContainer::ResolveLineIdL(
+ const CCCECallParameters& aCallParameters ) const
+ {
+ CSPLOGSTRING(CSPOBJECT, "CSProvider::ResolveLineIdL");
+ RCSPLineContainer::TCSPLineId lineId = RCSPLineContainer::ECSPLineSpeech;
+
+ switch ( aCallParameters.CallType() )
+ {
+ case CCPCall::ECallTypeCSVoice:
+ {
+ if ( aCallParameters.LineType() == CCCECallParameters::ECCELineTypeAux )
+ {
+ lineId = RCSPLineContainer::ECSPLineAuxSpeech;
+ }
+ else if ( aCallParameters.LineType() == CCCECallParameters::ECCELineTypePrimary )
+ {
+ lineId = RCSPLineContainer::ECSPLineSpeech;
+ }
+ else
+ {
+ CSPLOGSTRING(CSPOBJECT, "CSProvider::ResolveLineIdL ERROR: Unknown line type.");
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+ case CCPCall::ECallTypeVideo: // Fall through
+ {
+ lineId = RCSPLineContainer::ECSPLineData;
+ break;
+ }
+
+ default:
+ {
+ CSPLOGSTRING(CSPOBJECT, "CSProvider::ResolveLineIdL ERROR: Unknown call type");
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+ return lineId;
+ }
+
+// ---------------------------------------------------------
+// Resolves call type, service id and line type based on
+// line id.
+// ---------------------------------------------------------
+//
+TInt RCSPLineContainer::ResolveCallInfo( RCSPLineContainer::TCSPLineId aLineId,
+ TUint32& aServiceId,
+ CCPCall::TCallType& aCallType,
+ CCCECallParameters::TCCELineType& aLineType ) const
+
+ {
+ TInt err(KErrNone);
+ aLineType = CCCECallParameters::ECCELineTypePrimary;
+ aServiceId = iServiceId;
+
+ if ( aLineId == RCSPLineContainer::ECSPLineSpeech )
+ {
+ aCallType = CCPCall::ECallTypeCSVoice;
+ }
+ else if ( aLineId == RCSPLineContainer::ECSPLineAuxSpeech )
+ {
+ aCallType = CCPCall::ECallTypeCSVoice;
+ aLineType = CCCECallParameters::ECCELineTypeAux;
+ }
+ else if ( aLineId == RCSPLineContainer::ECSPLineData )
+ {
+ aCallType = CCPCall::ECallTypeVideo;
+ }
+ else
+ {
+ CSPLOGSTRING(CSPOBJECT, "RCSPLineContainer::ResolveCallInfo() ERROR Unknown line id");
+ err = KErrArgument;
+ }
+ CSPLOGSTRING2(CSPINT, "RCSPLineContainer::ResolveCallInfo() aCallType=%d", aCallType );
+ CSPLOGSTRING2(CSPINT, "RCSPLineContainer::ResolveCallInfo() aLineType=%d", aLineType );
+
+ return err;
+ }
+
+
+// End of File
+