devsoundextensions/telephonyaudiorouting/Session/src/TelephonyAudioRoutingRequest.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:   Active object for each asynchronous request in RTelephonyAudioRoutingSession.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
*				 Notifies MTelephonyAudioObserver upon request completion.
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
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
// INCLUDE FILES
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include "TelephonyAudioRoutingRequest.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#include "MTelephonyAudioRoutingObserver.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include "TelephonyAudioRoutingClientServer.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
// ============================ MEMBER FUNCTIONS ===============================
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
// CTelephonyAudioRoutingRequest::CTelephonyAudioRoutingRequest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
// C++ default constructor can NOT contain any code, that
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
// might leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
CTelephonyAudioRoutingRequest::CTelephonyAudioRoutingRequest(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
	RTelephonyAudioRoutingSession& aSession,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
	MTelephonyAudioRoutingObserver& aObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
	CTelephonyAudioRouting& aAudioRouting,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
	TTelAudRtngServRqst aRequest )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
	:	CActive(EPriorityStandard),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
		iSession(aSession),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
		iObserver(aObserver),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
		iAudioRouting(aAudioRouting),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
		iRequestOpcode(aRequest)
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
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
// CTelephonyAudioRoutingRequest::ConstructL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
// Symbian 2nd phase constructor can leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
void CTelephonyAudioRoutingRequest::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest::ConstructL"));    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	CActiveScheduler::Add(this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
// CTelephonyAudioRoutingRequest::NewL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
// Two-phased constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
CTelephonyAudioRoutingRequest* CTelephonyAudioRoutingRequest::NewL(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	RTelephonyAudioRoutingSession& aSession,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	MTelephonyAudioRoutingObserver& aObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	CTelephonyAudioRouting& aAudioRouting,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	TTelAudRtngServRqst aRequest )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	CTelephonyAudioRoutingRequest* self = new( ELeave ) CTelephonyAudioRoutingRequest(aSession, aObserver, aAudioRouting, aRequest);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	CleanupStack::PushL( self );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	self->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	CleanupStack::Pop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
// Destructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
CTelephonyAudioRoutingRequest::~CTelephonyAudioRoutingRequest()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest::~CTelephonyAudioRoutingRequest"));       
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	Cancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
// CTelephonyAudioRoutingRequest::DoCancel
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
void CTelephonyAudioRoutingRequest::DoCancel()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	iSession.CancelRequest(iRequestOpcode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
// CTelephonyAudioRoutingRequest::RunL 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
// -----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
void CTelephonyAudioRoutingRequest::RunL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
    {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
    TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest::RunL with: %d"), iStatus.Int());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	TPckgBuf<TInt> errPkgBuf;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	TInt error = KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	switch( iStatus.Int() )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
	case ETelAudRtngServSetOutputComplete:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
 		TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t RunL: Handling SetOutputComplete"));		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
    	errPkgBuf = iSession.ErrPkg();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
    	error = errPkgBuf(); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
    	if (error != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
    	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
    		TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: SetOutput Completed with an ERROR: %d"),error); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
    		iSession.ResetShowNoteMode(); // don't allow retrieval if errored   		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
    	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
    	else  // Set iSession's showNoteMode if there's no error
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
    	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
    		iSession.SetShowNoteMode();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
    	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
       	TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: Will Call Observer's SetOutputComplete..."));  			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
 		iObserver.SetOutputComplete(iAudioRouting, error );       
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	case ETelAudRtngServOutputChanged:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
		{	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
		TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t RunL: Handling OutputChanged"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
    	iSession.SetShowNoteMode(); // Set flag any time adaptation initiates output change
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
    			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
		TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: Call Observer's OutputChanged..."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
    	iSession.NotifyIfOutputChanged();		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
       	iObserver.OutputChanged(iAudioRouting);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
    	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	case ETelAudRtngServAvailableOutputsChanged:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
		TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: Call Observer's AvailableOutputsChanged..."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
    	iSession.NotifyIfAvailableOutputsChanged();		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
		iObserver.AvailableOutputsChanged(iAudioRouting);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	case KErrPermissionDenied:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
		TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: ERROR: Permission Denied..."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
  		iObserver.SetOutputComplete(iAudioRouting, KErrPermissionDenied );  
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
  	//	User::Leave(KErrPermissionDenied);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
								
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	case KErrCancel:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
    TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest: KErrCancel"));	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
		iObserver.SetOutputComplete(iAudioRouting, KErrCancel );      
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
	default:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	    TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingRequest::RunL: Default - Error Case!! "));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
		User::Panic(_L("TelephonyAudioRouting"), KErrGeneral );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
		break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
    }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
//  End of File
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172