Update contrib.
1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
17 #include "MmfAudioPolicyServer.h"
18 #include "MmfAudioPolicyStart.h"
19 #include "MmfAudioPolicySession.h"
22 #if defined(_DEBUG) && defined(__WINS__)
23 const TInt KTimeOutInterval =2*1000000; // 2 seconds
25 const TInt KTimeOutInterval =1000000; // 1 second
28 CMMFAudioPolicyServer* CMMFAudioPolicyServer::NewL()
30 CMMFAudioPolicyServer* s = new(ELeave) CMMFAudioPolicyServer();
31 CleanupStack::PushL(s);
37 CMMFAudioPolicyServer::CMMFAudioPolicyServer() :
38 CMmfIpcServer(EPriorityStandard)
42 void CMMFAudioPolicyServer::ConstructL()
44 // Create AudioPolicy singleton
45 iAudioPolicy = CAudioPolicy::NewL(this);
46 TCallBack callBack(SendNotification,this);
47 iNotificationTimer = CNotificationTimer::NewL(callBack);
48 // Call base class to Start server
52 CMMFAudioPolicyServer::~CMMFAudioPolicyServer()
54 if(iNotificationTimer != NULL)
56 StopNotificationTimer();
59 delete iNotificationTimer;
62 CMmfIpcSession* CMMFAudioPolicyServer::NewSessionL(const TVersion& aVersion) const
64 TVersion v(KMMFAudioPolicyVersion,KMMFAudioPolicyMinorVersionNumber,KMMFAudioPolicyBuildVersionNumber);
65 if(!User::QueryVersionSupported(v, aVersion))
66 User::Leave(KErrNotSupported);
68 CMMFAudioPolicySession* aAudioPolicySession = CMMFAudioPolicySession::NewL();
69 return aAudioPolicySession;
72 void CMMFAudioPolicyServer::IncrementSessionId()
77 void CMMFAudioPolicyServer::SendEventToClient(TInt aSessionToAlert, const TMMFAudioPolicyEvent& aEvent)
79 // For the session requested, send event to client
80 iSessionIter.SetToFirst();
81 CMMFAudioPolicySession* session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
82 ASSERT(session != NULL);
85 if (session->PolicySessionId() == aSessionToAlert)
87 session->SendEventToClient(aEvent);
90 session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
91 } while (session != NULL);
92 ASSERT(EFalse); // invalid session Id
95 void CMMFAudioPolicyServer::LaunchRequest(TInt aSessionId,const TMMFAudioPolicyEvent& aEvent)
97 SendEventToClient(aSessionId, aEvent);
100 void CMMFAudioPolicyServer::IncrementSessionCount()
102 iPolicySessionCount++;
105 CMMFAudioPolicyServer::CNotificationTimer *CMMFAudioPolicyServer::CNotificationTimer::NewL(TCallBack aCallBack)
107 CNotificationTimer* self = new(ELeave) CNotificationTimer(aCallBack);
108 CleanupStack::PushL(self);
110 CleanupStack::Pop(); // self
114 CMMFAudioPolicyServer::CNotificationTimer::CNotificationTimer(TCallBack aCallBack)
115 : CTimer(EPriorityHigh),iCallBack(aCallBack)
117 CActiveScheduler::Add(this);
120 void CMMFAudioPolicyServer::CNotificationTimer::RunL()
122 iCallBack.CallBack();
125 void CMMFAudioPolicyServer::DecrementSessionCount()
127 iPolicySessionCount--;
130 TInt CMMFAudioPolicyServer::PolicySessionCount()
132 return iPolicySessionCount;
135 void CMMFAudioPolicyServer::StartNotificationTimer(TBool aZeroDelay)
137 iNotificationTimer->After(aZeroDelay? 0 : KTimeOutInterval);
140 void CMMFAudioPolicyServer::StopNotificationTimer()
142 iNotificationTimer->Cancel();
145 TInt CMMFAudioPolicyServer::SendNotification(TAny* aAny)
147 CMMFAudioPolicyServer* policyServer = reinterpret_cast<CMMFAudioPolicyServer*>(aAny);
148 policyServer->iAudioPolicy->NotifyNextClient();
152 TBool CMMFAudioPolicyServer::IsTimerActive() const
154 return iNotificationTimer->IsActive();