diff -r 000000000000 -r f63038272f30 bluetoothengine/btmac/src/BTMonoCmdHandler/BTMonoMobileLineCdma.cpp --- /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(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