bluetoothengine/btmac/src/BTMonoCmdHandler/BTMonoMobileLineCdma.cpp
changeset 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/BTMonoMobileLineCdma.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2005 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:  call status handling. 
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BTMonoMobileLine.h"
+#include "BTMonoCdmaIncomingFlash.h"
+#include "BTMonoEventObserver.h"
+#include "BTMonoCmdHandlerDefs.h"
+#include "Debug.h"
+
+const TInt KMobileLineActiveService = 1;
+const TInt KMobileCallActiveService = 2;
+const TInt KMobileCdmaActiveService = 3;
+
+// -----------------------------------------------------------------------------
+// CBTMonoMobileLine::NewL
+// -----------------------------------------------------------------------------
+CBTMonoMobileLine* CBTMonoMobileLine::NewL(
+    MBTMonoEventObserver& aObserver, RMobilePhone& aPhone, const TDesC& aLineName) 
+    {
+    CBTMonoMobileLine* self = CBTMonoMobileLine::NewLC(aObserver, aPhone, aLineName);
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTMonoMobileLine::NewLC
+// -----------------------------------------------------------------------------
+CBTMonoMobileLine* CBTMonoMobileLine::NewLC(
+    MBTMonoEventObserver& aObserver, RMobilePhone& aPhone, const TDesC& aLineName) 
+    {
+    CBTMonoMobileLine* self = new(ELeave) CBTMonoMobileLine(aObserver, aPhone, aLineName);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTMonoMobileLine::~CBTMonoMobileLine
+// -----------------------------------------------------------------------------
+CBTMonoMobileLine::~CBTMonoMobileLine()
+    {
+	TRACE_FUNC_ENTRY_THIS
+    iCallActives.ResetAndDestroy();
+    iCallActives.Close();
+    iCdmaActives.ResetAndDestroy();
+    iCdmaActives.Close();
+    delete iLineActive;
+    iLine.Close();
+    }
+
+TInt CBTMonoMobileLine::ActiveCallCount() const
+    {
+    TInt count = iCallActives.Count();
+    TInt activecount = 0;
+    RMobileCall::TMobileCallStatus sta;
+    for (TInt i = 0; i < count; i++)
+        {
+        sta = iCallActives[i]->CallStatus();
+        if (sta == RMobileCall::EStatusConnected || sta == RMobileCall::EStatusHold)
+            {
+            activecount++;
+            }
+        }
+    return activecount;
+    }
+
+RMobileCall::TMobileCallStatus CBTMonoMobileLine::CallStatus(const TName& aCallName) const
+    {
+    TInt count = iCallActives.Count();
+    for (TInt i = 0; i < count; i++)
+        {
+        if (iCallActives[i]->CallName().Compare(aCallName) == 0)
+            {
+            return iCallActives[i]->CallStatus();
+            }
+        }
+    return RMobileCall::EStatusUnknown;
+    }
+
+
+void CBTMonoMobileLine::RequestCompletedL(CBTMonoActive& aActive, TInt aErr)
+    {
+    switch (aActive.ServiceId())
+        {
+        case KMobileLineActiveService:
+            {
+            if (aErr == KErrNone)
+        		{
+                CBTMonoCallActive* callActive = CBTMonoCallActive::NewLC(
+                    *this, CActive::EPriorityStandard, KMobileCallActiveService, 
+                    iLine, iName);
+                iCallActives.AppendL(callActive);
+                
+                CBTMonoCdmaIncomingFlash* cdmaActive = CBTMonoCdmaIncomingFlash::NewLC(
+                    *this, CActive::EPriorityStandard, KMobileCdmaActiveService, 
+                    iLine, iName);
+                iCdmaActives.AppendL(cdmaActive);
+                iObserver.HandleMobileCallEventL(iName, callActive->CallStatus());
+                callActive->GoActive();
+                cdmaActive->GoActive();
+                CleanupStack::Pop(callActive);
+                CleanupStack::Pop(cdmaActive);
+        		}
+        	iLine.NotifyCallAdded(aActive.iStatus, iName);
+            aActive.GoActive();
+            break;
+            }
+        case KMobileCallActiveService:
+            {
+    		CBTMonoCallActive& calla = reinterpret_cast<CBTMonoCallActive&>(aActive);
+    	    iObserver.HandleMobileCallEventL(calla.CallName(), calla.CallStatus());
+    	    RMobileCall::TMobileCallStatus status = calla.CallStatus();
+    	    if (status == RMobileCall::EStatusIdle)
+    	        {
+    	        TInt idx = iCallActives.Find(&calla);
+    	        if (idx >= 0)
+    	            {
+    	            delete iCallActives[idx];
+    	            iCallActives.Remove(idx);
+    	            delete iCdmaActives[idx];
+    	            iCdmaActives.Remove(idx);
+    	            }
+    	        }
+    		else
+    		    {
+    		    aActive.GoActive();
+    		    }
+            break;
+            }
+        case KMobileCdmaActiveService:
+            {
+            iObserver.HandleCdmaIncomingFlashEventL();
+            aActive.GoActive();
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+void CBTMonoMobileLine::CancelRequest(TInt aServiceId)
+    {
+    if (aServiceId == KMobileLineActiveService)
+        {
+        iLine.NotifyCallAddedCancel();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CBTMonoMobileLine::CBTMonoMobileLine
+// -----------------------------------------------------------------------------
+CBTMonoMobileLine::CBTMonoMobileLine(
+    MBTMonoEventObserver& aObserver, RMobilePhone& aPhone, const TDesC& aLineName)
+    : iObserver(aObserver), iPhone(aPhone), iLineName(aLineName)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTMonoMobileLine::ConstructL
+// -----------------------------------------------------------------------------
+void CBTMonoMobileLine::ConstructL()
+    {
+    LEAVE_IF_ERROR(iLine.Open(iPhone, iLineName))
+    
+	TInt count = 0;
+	LEAVE_IF_ERROR(iLine.EnumerateCall(count))
+
+	for (TInt i = 0; i < count; i++)
+	    {
+		RLine::TCallInfo info;
+        LEAVE_IF_ERROR(iLine.GetCallInfo(i, info))
+        CBTMonoCallActive* callActive = CBTMonoCallActive::NewLC(
+            *this, CActive::EPriorityStandard, KMobileCallActiveService, 
+            iLine, info.iCallName);
+        iCallActives.AppendL(callActive);
+        
+        CBTMonoCdmaIncomingFlash* cdmaActive = CBTMonoCdmaIncomingFlash::NewLC(
+            *this, CActive::EPriorityStandard, KMobileCdmaActiveService, 
+            iLine, info.iCallName);
+        iCdmaActives.AppendL(cdmaActive);
+        
+        callActive->GoActive();
+        cdmaActive->GoActive();
+        CleanupStack::Pop(callActive);
+        CleanupStack::Pop(cdmaActive);
+        }
+
+    iLineActive = CBTMonoActive::NewL(*this, CActive::EPriorityStandard, KMobileLineActiveService);
+	iLine.NotifyCallAdded(iLineActive->iStatus, iName);
+    iLineActive->GoActive();
+    TRACE_FUNC_THIS
+    }
+    
+// End of file