diff -r 000000000000 -r bde4ae8d615e os/mm/devsound/sounddevbt/src/server/Policy/MmfBtAudioPolicyServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/mm/devsound/sounddevbt/src/server/Policy/MmfBtAudioPolicyServer.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,163 @@ +// Copyright (c) 2000-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: +// + +#include +#include "MmfBtAudioPolicyServer.h" +#include "MmfBtAudioPolicyStart.h" +#include "MmfBtAudioPolicySession.h" + +const TInt KTimeOutInterval = 1000000; + +CMMFAudioPolicyServer* CMMFAudioPolicyServer::NewL() + { + CMMFAudioPolicyServer* s = new(ELeave) CMMFAudioPolicyServer(); + CleanupStack::PushL(s); + s->ConstructL(); + CleanupStack::Pop(); + return s; + } + +CMMFAudioPolicyServer::CMMFAudioPolicyServer() : + CMmfIpcServer(EPriorityStandard) + { + } + +void CMMFAudioPolicyServer::ConstructL() + { + // Create AudioPolicy singleton + iAudioPolicy = CAudioPolicy::NewL(this); + TCallBack callBack(SendNotification,this); + iNotificationTimer = CNotificationTimer::NewL(callBack); + // Call base class to Start server + StartL(KNullDesC); + } + +CMMFAudioPolicyServer::~CMMFAudioPolicyServer() + { + if(iNotificationTimer != NULL) + { + StopNotificationTimer(); + } + delete iAudioPolicy; + delete iNotificationTimer; + } + +CMmfIpcSession* CMMFAudioPolicyServer::NewSessionL(const TVersion& aVersion) const + { + TVersion v(KMMFAudioPolicyVersion,KMMFAudioPolicyMinorVersionNumber,KMMFAudioPolicyBuildVersionNumber); + if(!User::QueryVersionSupported(v, aVersion)) + User::Leave(KErrNotSupported); + + CMMFAudioPolicySession* aAudioPolicySession = CMMFAudioPolicySession::NewL(); + return aAudioPolicySession; + } + +void CMMFAudioPolicyServer::IncrementSessionId() + { + iPolicySessionId++; + } + +void CMMFAudioPolicyServer::SendEventToClient(TInt aSessionToAlert, TInt /*aSessionToBeLaunched*/, TMMFAudioPolicyEvent& aEvent) + { + TMMFAudioPolicyEvent eventForClient; + eventForClient.iEventType = aEvent.iEventType; + eventForClient.iErrorCode = aEvent.iErrorCode; + eventForClient.iState = aEvent.iState; + + // For the session requested, send event to client + iSessionIter.SetToFirst(); + CMMFAudioPolicySession* session = STATIC_CAST(CMMFAudioPolicySession*, iSessionIter++); + while (session != NULL) + { + if (session->PolicySessionId() == aSessionToAlert) + { + session->SendEventToClient(eventForClient); + break; // Finished + } + session = STATIC_CAST(CMMFAudioPolicySession*, iSessionIter++); + } + } + +void CMMFAudioPolicyServer::LaunchRequest(TInt aSessionId, TMMFAudioPolicyEvent& aEvent) + { + iSessionIter.SetToFirst(); + CMMFAudioPolicySession* session = STATIC_CAST(CMMFAudioPolicySession*, iSessionIter++); + while (session != NULL) + { + if (session->PolicySessionId() == aSessionId) + { + session->SendEventToClient(aEvent); + break; // Finished + } + session = STATIC_CAST(CMMFAudioPolicySession*, iSessionIter++); + } + } + +void CMMFAudioPolicyServer::IncrementSessionCount() + { + iPolicySessionCount++; + } + +CMMFAudioPolicyServer::CNotificationTimer *CMMFAudioPolicyServer::CNotificationTimer::NewL(TCallBack aCallBack) + { + CNotificationTimer* self = new(ELeave) CNotificationTimer(aCallBack); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +CMMFAudioPolicyServer::CNotificationTimer::CNotificationTimer(TCallBack aCallBack) +: CTimer(EPriorityHigh),iCallBack(aCallBack) + { + CActiveScheduler::Add(this); + } + +void CMMFAudioPolicyServer::CNotificationTimer::RunL() + { + iCallBack.CallBack(); + } + +void CMMFAudioPolicyServer::DecrementSessionCount() + { + iPolicySessionCount--; + } + +TInt CMMFAudioPolicyServer::PolicySessionCount() + { + return iPolicySessionCount; + } + +void CMMFAudioPolicyServer::StartNotificationTimer() + { + iNotificationTimer->After(KTimeOutInterval); + } + +void CMMFAudioPolicyServer::StopNotificationTimer() + { + iNotificationTimer->Cancel(); + } + +TInt CMMFAudioPolicyServer::SendNotification(TAny* aAny) + { + CMMFAudioPolicyServer* policyServer = reinterpret_cast(aAny); + policyServer->iAudioPolicy->DoSendNotification(); + return KErrNone; + } + +TBool CMMFAudioPolicyServer::IsTimerActive() const + { + return iNotificationTimer->IsActive(); + }