devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingManager/src/TelephonyAudioRoutingManager.cpp
author hgs
Thu, 07 Oct 2010 22:34:12 +0100
changeset 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
* All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
* Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
* Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
* Description:   Methods for CTelephonyAudioRoutingManager class
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
// INCLUDE FILES
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include <e32base.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <e32svr.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include <e32std.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include "TelephonyAudioRoutingManager.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include "TelephonyAudioRoutingClientServer.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#include "TelephonyAudioRoutingServer.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#include "TelephonyAudioRoutingManagerSession.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
const TUid KTelAudRtngServerUid = {0x10207A93};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
const TInt KTelAudRtngServerStackSize=0x2000;			//  8KB
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
const TInt KTelAudRtngServerInitHeapSize=0x1000;		//  4KB
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
const TInt KTelAudRtngServerMaxHeapSize=0x1000000;		// 16MB
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
// ================= MEMBER FUNCTIONS =======================
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
// C++ default constructor can NOT contain any code, that
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
// might leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
CTelephonyAudioRoutingManager::CTelephonyAudioRoutingManager(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
	MTelephonyAudioRoutingPolicyObserver& aObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	: iObserver(aObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
// CAudioOutputProxy::ConstructL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
// Symbian 2nd phase constructor can leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
void CTelephonyAudioRoutingManager::ConstructL(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
const TArray<CTelephonyAudioRouting::TAudioOutput>& aArray)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::ConstructL "));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	User::LeaveIfError(StartServer());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	iMgrSession = new (ELeave)RTelephonyAudioRoutingManagerSession;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	User::LeaveIfError(iMgrSession->Connect(*this, iObserver));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	iMgrSession->SetPolicySessionIdL();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	iMgrSession->MonitorOutputChangeRequest();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	iMgrSession->AvailableOutputsChangedL(aArray); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
// Two-phased constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
EXPORT_C CTelephonyAudioRoutingManager* CTelephonyAudioRoutingManager::NewL(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
MTelephonyAudioRoutingPolicyObserver& aObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
const TArray<CTelephonyAudioRouting::TAudioOutput>& aArray)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	CTelephonyAudioRoutingManager* self = new(ELeave) CTelephonyAudioRoutingManager(aObserver);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	CleanupStack::PushL(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	self->ConstructL(aArray);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	CleanupStack::Pop(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
// Destructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
CTelephonyAudioRoutingManager::~CTelephonyAudioRoutingManager()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
    { 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::~CTelephonyAudioRoutingManager "));    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
    if (iMgrSession) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
        {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
        iMgrSession->Close();        
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
        }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
    delete iMgrSession;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
    iServer.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
// CAudioOutput::OutputChanged
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
// Policy is sending out notification that the output has changed 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
// (a change initiated by policy)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
// (other items were commented in a header).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
EXPORT_C void CTelephonyAudioRoutingManager::OutputChanged(CTelephonyAudioRouting::TAudioOutput aOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::OutputChanged to: %d"), aOutput);	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
    iMgrSession->OutputChanged(aOutput);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
// CAudioOutput::AvailableOutputsChanged
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
// Policy is sending out notification that the available outputs have changed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
// (other items were commented in a header).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
EXPORT_C void CTelephonyAudioRoutingManager::AvailableOutputsChanged(const TArray<CTelephonyAudioRouting::TAudioOutput>& aArray)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::AvailableOutputsChanged "));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
    TRAPD(err,iMgrSession->AvailableOutputsChangedL(aArray));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
   	if (err != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::AvailableOutputsChanged: ERROR from Adaptation: %d "), err);			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
		}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
// CAudioOutput::OutputChangeRequestCompleted
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
// Policy is sending out notification that the request change in output has been completed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
// (other items were commented in a header).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
// ---------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
//	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
EXPORT_C void CTelephonyAudioRoutingManager::OutputChangeRequestCompleted(CTelephonyAudioRouting::TAudioOutput aOutput, TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::OutputChangeRequestCompleted "));	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	if (aError != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::OutputChangeRequestCompleted: ERROR from Adaptation: %d "), aError);			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
    iMgrSession->OutputChangeCompleted(aOutput, aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
// CStartTelephonyAudioRoutingServer::StartServer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
// Start TelephonyAudioRouting Server
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
// (other items were commented in a header).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
//	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
TInt CTelephonyAudioRoutingManager::StartServer()                                                                        
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
    {       
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
    TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingManager::StartServer "));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
    	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
	const TUidType serverUid(KNullUid,KNullUid,KTelAudRtngServerUid);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
	TThreadFunction serverFunc=CTelephonyAudioRoutingServer::StartThreadL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	TInt err(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	TName name(KTelAudRtngServName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	err = iServer.Create(name, serverFunc, KTelAudRtngServerStackSize,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	        	KTelAudRtngServerInitHeapSize, KTelAudRtngServerMaxHeapSize,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	        	/*&start*/ NULL, EOwnerProcess);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	if(err != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
		return err;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
	// Synchronise with the server
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	TRequestStatus reqStatus;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	iServer.Rendezvous(reqStatus);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
	if (reqStatus!=KRequestPending)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
		iServer.Kill(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
		// Start the test harness
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
		iServer.Resume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
		// Server will call the reciprocal static synchronise call	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
	User::WaitForRequest(reqStatus); // wait for start or death
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	if(reqStatus.Int() != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
		iServer.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
		return reqStatus.Int();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	return KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
   	                                                                    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
    }    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
// End of File