devsound/devsoundrefplugin/src/server/Policy/MmfAudioPolicyServer.cpp
author hgs
Wed, 13 Oct 2010 12:08:48 +0100
changeset 3 28bdc4aca325
parent 0 79dd3e2336a0
permissions -rw-r--r--
2010wk42_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
#include <e32math.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#include "MmfAudioPolicyServer.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
#include "MmfAudioPolicyStart.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include "MmfAudioPolicySession.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#if defined(_DEBUG) && defined(__WINS__)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
	const TInt KTimeOutInterval =2*1000000;  // 2 seconds
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
	const TInt KTimeOutInterval =1000000;	// 1 second
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
CMMFAudioPolicyServer* CMMFAudioPolicyServer::NewL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
	CMMFAudioPolicyServer* s = new(ELeave) CMMFAudioPolicyServer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
	CleanupStack::PushL(s);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
	s->ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
	CleanupStack::Pop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
	return s;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
CMMFAudioPolicyServer::CMMFAudioPolicyServer() :
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
	CMmfIpcServer(EPriorityStandard)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
void CMMFAudioPolicyServer::ConstructL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
	// Create AudioPolicy singleton
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
	iAudioPolicy = CAudioPolicy::NewL(this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	TCallBack callBack(SendNotification,this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	iNotificationTimer = CNotificationTimer::NewL(callBack);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	// Call base class to Start server
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
	StartL(KNullDesC);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
CMMFAudioPolicyServer::~CMMFAudioPolicyServer()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
	if(iNotificationTimer != NULL)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
		StopNotificationTimer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	delete iAudioPolicy;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
	delete iNotificationTimer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
CMmfIpcSession* CMMFAudioPolicyServer::NewSessionL(const TVersion& aVersion) const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	TVersion v(KMMFAudioPolicyVersion,KMMFAudioPolicyMinorVersionNumber,KMMFAudioPolicyBuildVersionNumber);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	if(!User::QueryVersionSupported(v, aVersion))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
		User::Leave(KErrNotSupported);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	CMMFAudioPolicySession* aAudioPolicySession = CMMFAudioPolicySession::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	return aAudioPolicySession;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
void CMMFAudioPolicyServer::IncrementSessionId()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	iPolicySessionId++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
void CMMFAudioPolicyServer::SendEventToClient(TInt aSessionToAlert, const TMMFAudioPolicyEvent& aEvent)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
// For the session requested, send event to client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
	iSessionIter.SetToFirst();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	CMMFAudioPolicySession* session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	ASSERT(session != NULL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	do
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
		if (session->PolicySessionId() == aSessionToAlert)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
			session->SendEventToClient(aEvent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
			return;  // Finished
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
		session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
		} while (session != NULL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
	ASSERT(EFalse); // invalid session Id
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
void CMMFAudioPolicyServer::LaunchRequest(TInt aSessionId,const TMMFAudioPolicyEvent& aEvent)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
	SendEventToClient(aSessionId, aEvent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
void CMMFAudioPolicyServer::IncrementSessionCount()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	iPolicySessionCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
CMMFAudioPolicyServer::CNotificationTimer *CMMFAudioPolicyServer::CNotificationTimer::NewL(TCallBack aCallBack)	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	CNotificationTimer* self = new(ELeave) CNotificationTimer(aCallBack);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	CleanupStack::PushL(self);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	self->ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	CleanupStack::Pop(); // self
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	return self;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
CMMFAudioPolicyServer::CNotificationTimer::CNotificationTimer(TCallBack aCallBack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
: CTimer(EPriorityHigh),iCallBack(aCallBack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
	CActiveScheduler::Add(this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
void CMMFAudioPolicyServer::CNotificationTimer::RunL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
	iCallBack.CallBack();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
void CMMFAudioPolicyServer::DecrementSessionCount()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	iPolicySessionCount--;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
TInt CMMFAudioPolicyServer::PolicySessionCount() 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	return iPolicySessionCount;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
void CMMFAudioPolicyServer::StartNotificationTimer(TBool aZeroDelay)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	iNotificationTimer->After(aZeroDelay? 0 : KTimeOutInterval);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
void CMMFAudioPolicyServer::StopNotificationTimer()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	iNotificationTimer->Cancel();			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
TInt CMMFAudioPolicyServer::SendNotification(TAny* aAny)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	CMMFAudioPolicyServer* policyServer = reinterpret_cast<CMMFAudioPolicyServer*>(aAny);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	policyServer->iAudioPolicy->NotifyNextClient();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	return KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
TBool CMMFAudioPolicyServer::IsTimerActive() const 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
	return iNotificationTimer->IsActive();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
	}