remotecontrol/avrcp/remconbeareravrcp/src/avrcprouter.cpp
author hgs
Wed, 13 Oct 2010 16:20:29 +0300
changeset 51 20ac952a623c
permissions -rw-r--r--
201040_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
20ac952a623c 201040_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
20ac952a623c 201040_02
hgs
parents:
diff changeset
     2
// All rights reserved.
20ac952a623c 201040_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
20ac952a623c 201040_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
20ac952a623c 201040_02
hgs
parents:
diff changeset
     7
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    10
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    11
// Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    12
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    13
// Description:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    14
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    15
20ac952a623c 201040_02
hgs
parents:
diff changeset
    16
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
 @file
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
 @internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
 @released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
#include <bluetoothav.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
#include "avrcpcommand.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
#include "avrcplog.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
#include "avrcprouter.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
#include "avrcputils.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
#include "commandhandlerinterface.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
using namespace SymbianAvctp;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
/** Constructor.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
@param aRemotes The list of remote devices known to AVRCP.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
@param aBearer The bearer.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
@return A partially constructed CRcpRouter.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
CRcpRouter::CRcpRouter(MAvrcpBearer& aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
	: iChannel(NULL)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
	, iBearer(aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
	, iSendQueue(_FOFF(CAvrcpCommand, iSendLink))
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
	, iState(EAvrcpRouterCanSend)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
/** Destructor.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
CRcpRouter::~CRcpRouter()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
	// The lifetime of the Router is the same as that of the bearer plugin.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
	// This means that there is no point worrying about the stuff on our
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
	// send queue as we won't be around to pass the results up to RemCon.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
	while (!iSendQueue.IsEmpty())
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
		CAvrcpCommand *command = iSendQueue.First();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
		command->iSendLink.Deque();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
		command->DecrementUsers();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
// Data functions called from command handlers
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
//------------------------------------------------------------------	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
/** Adds command to send queue.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
This message will be sent as soon as the iAvcp becomes
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
free for sending, unless the command is removed before
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
then.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
@param aCommand The command to send.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
@see CRcpRouter::RemoveFromSendQueue
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
void CRcpRouter::AddToSendQueue(CAvrcpCommand& aCommand)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
	__ASSERT_ALWAYS(!aCommand.iSendLink.IsQueued(), AVRCP_PANIC(ECommandAlreadyQueuedForSending));
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
	iSendQueue.AddLast(aCommand);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
	aCommand.IncrementUsers();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
	if(iState == EAvrcpRouterCanSend)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
		Send();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
		}	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
/** Remove command from send queue.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
@param aCommand The command that is not to be sent.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
void CRcpRouter::RemoveFromSendQueue(CAvrcpCommand& aCommand)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
	if(iSendQueue.IsFirst(&aCommand))
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
		// If this is at the front of the queue it's currently being
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
		// sent.  Cancel that and start off the next thing.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
		iChannel->MacCancelSend();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
		aCommand.iSendLink.Deque();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
		iState = EAvrcpRouterCanSend;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
		if(!iSendQueue.IsEmpty())
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
			Send();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
	else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   114
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   115
		// Still waiting to be sent so we can just sneak it out of
20ac952a623c 201040_02
hgs
parents:
diff changeset
   116
		// the queue.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   117
		aCommand.iSendLink.Deque();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   118
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   119
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   120
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   121
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
   122
// Control functions called from bearer
20ac952a623c 201040_02
hgs
parents:
diff changeset
   123
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
   124
20ac952a623c 201040_02
hgs
parents:
diff changeset
   125
/** Try to bring up an explicit connection to a remote.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   126
20ac952a623c 201040_02
hgs
parents:
diff changeset
   127
@param aAddr The address of the remote.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   128
@return System wide error.  KErrNone if this request will be
20ac952a623c 201040_02
hgs
parents:
diff changeset
   129
		attempted, and generate a ConnectConfirm.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   130
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   131
TInt CRcpRouter::ConnectRequest(const TBTDevAddr& aAddr)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   132
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   133
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   134
	return iChannel->MacAttachRequest(aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   135
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   136
20ac952a623c 201040_02
hgs
parents:
diff changeset
   137
/** Try to bring down an explicit connection to a remote.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   138
20ac952a623c 201040_02
hgs
parents:
diff changeset
   139
@param aAddr The address of the remote.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   140
@return System wide error.  KErrNone if the disconnect will be
20ac952a623c 201040_02
hgs
parents:
diff changeset
   141
		attempted, and generate a DisconnectConfirm.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   142
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   143
TInt CRcpRouter::DisconnectRequest(const TBTDevAddr& aAddr)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   144
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   145
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   146
	return iChannel->MacDetachRequest(aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   147
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   148
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   149
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
   150
// MAvctpEventNotify functions called from RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   151
//------------------------------------------------------------------	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   152
20ac952a623c 201040_02
hgs
parents:
diff changeset
   153
/** AVCTP Connection Indicate.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   154
20ac952a623c 201040_02
hgs
parents:
diff changeset
   155
This is called when a remote device has connected 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   156
to us. NB we don't return the configuration status as 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   157
in Appendix A - AVCTP Upper Interface of [R2]. If aAccept 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   158
is not changed the connection will be refused however 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   159
this may not result in the actual disconnection of the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   160
device if another RAvctp client did accept the connection.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   161
20ac952a623c 201040_02
hgs
parents:
diff changeset
   162
@param aBTDevice the address of the device connected to
20ac952a623c 201040_02
hgs
parents:
diff changeset
   163
@param aAccept this parameter is provided so that the client 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   164
	of RAvctp can indicate whether they want to accept the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   165
	connection.  The meaning of a refusal is that you don't 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   166
	care whether or not the connection is there or not.	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   167
@see RAvctp			   
20ac952a623c 201040_02
hgs
parents:
diff changeset
   168
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   169
void CRcpRouter::MaenAttachIndicate(const TBTDevAddr& aBTDevice, TInt aMtu, TBool& aAccept)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   170
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   171
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   172
	aAccept = ETrue;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   173
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   174
	// if we have already received data from this device we will have 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   175
	// informed RemCon about it already, so don't pass up the connection
20ac952a623c 201040_02
hgs
parents:
diff changeset
   176
	// now
20ac952a623c 201040_02
hgs
parents:
diff changeset
   177
	if(!iBearer.IncomingHandler(aBTDevice))
20ac952a623c 201040_02
hgs
parents:
diff changeset
   178
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   179
		iBearer.ConnectIndicate(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   180
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   181
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   182
	MIncomingCommandHandler* handler = iBearer.IncomingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   183
	if(handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   184
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   185
		handler->MaxPacketSize(aMtu);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   186
		aAccept = ETrue;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   187
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   188
	else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   189
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   190
		aAccept = EFalse;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   191
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   192
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   193
20ac952a623c 201040_02
hgs
parents:
diff changeset
   194
/** AVCTP Connection Confirm.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   195
20ac952a623c 201040_02
hgs
parents:
diff changeset
   196
This is a response to RAvctp::ConnectRequest and passes on the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   197
result of the Connection attempt. NB we don't return the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   198
configuration status as in Appendix A - AVCTP Upper 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   199
Interface of [R2]. If the aConnectResult is KErrNone 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   200
then iAvctp is now connected.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   201
20ac952a623c 201040_02
hgs
parents:
diff changeset
   202
@param aBTDevice the address of the device connected to
20ac952a623c 201040_02
hgs
parents:
diff changeset
   203
@param aConnectResult connection result - one of the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   204
					  system-wide error codes. 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   205
@see RAvctp					  
20ac952a623c 201040_02
hgs
parents:
diff changeset
   206
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   207
void CRcpRouter::MaenAttachConfirm(const TBTDevAddr& aBTDevice, TInt aMtu, TInt aConnectResult)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   208
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   209
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   210
	iBearer.ConnectConfirm(aBTDevice, aConnectResult);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   211
20ac952a623c 201040_02
hgs
parents:
diff changeset
   212
	MIncomingCommandHandler* handler = iBearer.IncomingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   213
	if(handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   214
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   215
		handler->MaxPacketSize(aMtu);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   216
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   217
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   218
20ac952a623c 201040_02
hgs
parents:
diff changeset
   219
/** AVCTP Disconnection Indication.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   220
20ac952a623c 201040_02
hgs
parents:
diff changeset
   221
Indicates that a remote device has disconnected from us.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   222
It is only called if the device had been explicitly Connected to.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   223
 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   224
@param aBTDevice the address of the disconnecting device
20ac952a623c 201040_02
hgs
parents:
diff changeset
   225
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   226
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   227
void CRcpRouter::MaenDetachIndicate(const TBTDevAddr& aBTDevice)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   228
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   229
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   230
	iBearer.DisconnectIndicate(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   231
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   232
20ac952a623c 201040_02
hgs
parents:
diff changeset
   233
/** AVCTP Disconnection Confirm.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   234
20ac952a623c 201040_02
hgs
parents:
diff changeset
   235
@param aBTDevice the address of the disconnected device
20ac952a623c 201040_02
hgs
parents:
diff changeset
   236
@param aDisconnectResult will be one of the system-wide 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   237
						 error codes. If KErrTimedOut is 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   238
						 returned then the RAvctp will be 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   239
						 disconnected.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   240
@see RAvctp	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   241
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   242
void CRcpRouter::MaenDetachConfirm(const TBTDevAddr& aBTDevice, TInt aDisconnectResult)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   243
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   244
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   245
	iBearer.DisconnectConfirm(aBTDevice, aDisconnectResult);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   246
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   247
20ac952a623c 201040_02
hgs
parents:
diff changeset
   248
/** AVCTP Message received indication.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   249
20ac952a623c 201040_02
hgs
parents:
diff changeset
   250
This method is called when a message has been received from 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   251
the given device on the RAvctp's PID. 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   252
20ac952a623c 201040_02
hgs
parents:
diff changeset
   253
Note that because AVCTP is a connectionless protocol, it is 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   254
perfectly possible to get a MaenMessageReceivedIndicate event 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   255
from a device that you have not either explicitly connected to.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   256
For instance even if you don't accept a MaenConnectIndicate 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   257
you may still receive messages from that remote device.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   258
20ac952a623c 201040_02
hgs
parents:
diff changeset
   259
@param aBTDevice address of the device sending us an AVCTP message
20ac952a623c 201040_02
hgs
parents:
diff changeset
   260
@param aTransactionLabel message transaction label
20ac952a623c 201040_02
hgs
parents:
diff changeset
   261
@param aType type of message 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   262
@param aIpidBitSet this will be set to true only if a message has been received indicating 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   263
				   that the profile corresponding to the originally sent message is not valid.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   264
				   If RAvctp was used to send the message then this response will have come from
20ac952a623c 201040_02
hgs
parents:
diff changeset
   265
				   the remote device aBTDevice.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   266
@param aMessageInformation contains only the AVCTP Command / Response Message Information and not the whole packet.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   267
                           Ownership transferred to client.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   268
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   269
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   270
void CRcpRouter::MaenMessageReceivedIndicate(const TBTDevAddr& aBTDevice,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   271
		SymbianAvctp::TTransactionLabel aTransactionLabel,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   272
		SymbianAvctp::TMessageType aType,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   273
		TBool aIpidBitSet,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   274
		const TDesC8& aMessageInformation)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   275
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   276
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   277
	AVRCPLOG(aMessageInformation)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   278
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   279
	// Find the right handler
20ac952a623c 201040_02
hgs
parents:
diff changeset
   280
	if(aType == ECommand)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   281
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   282
		MIncomingCommandHandler* handler = iBearer.IncomingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   283
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   284
		if(!handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   285
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   286
			iBearer.ConnectIndicate(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   287
			
20ac952a623c 201040_02
hgs
parents:
diff changeset
   288
			handler = iBearer.IncomingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   289
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   290
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   291
		if(handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   292
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   293
			// If this leaves the handler is rejecting handling this command, just
20ac952a623c 201040_02
hgs
parents:
diff changeset
   294
			// ignore it.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   295
			TRAP_IGNORE(handler->ReceiveCommandL(aMessageInformation, aTransactionLabel, aBTDevice));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   296
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   297
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   298
	else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   299
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   300
		MOutgoingCommandHandler* handler = iBearer.OutgoingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   301
		if(handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   302
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   303
			handler->ReceiveResponse(aMessageInformation, aTransactionLabel, aIpidBitSet);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   304
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   305
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   306
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   307
20ac952a623c 201040_02
hgs
parents:
diff changeset
   308
/** AVCTP Message send complete.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   309
20ac952a623c 201040_02
hgs
parents:
diff changeset
   310
This method is called when a RAvctp has attempted to send 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   311
the message defined by aTransactionLabel and aBTDevice. 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   312
@param aTransactionLabel The transaction label of the message 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   313
						 that has been sent
20ac952a623c 201040_02
hgs
parents:
diff changeset
   314
@param aBTDevice the device to which the send has completed
20ac952a623c 201040_02
hgs
parents:
diff changeset
   315
@param aSendResult KErrNone if the send was successful or one 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   316
				   of the system-wide error codes
20ac952a623c 201040_02
hgs
parents:
diff changeset
   317
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   318
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   319
void CRcpRouter::MaenMessageSendComplete(const TBTDevAddr& aBTDevice, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   320
		       		SymbianAvctp::TTransactionLabel aTransactionLabel,   
20ac952a623c 201040_02
hgs
parents:
diff changeset
   321
					TInt aSendResult)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   322
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   323
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   324
	__ASSERT_ALWAYS(!iSendQueue.IsEmpty(), AvrcpUtils::Panic(EAvrcpNoOutstandingSend));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   325
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   326
	CAvrcpCommand* command = iSendQueue.First();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   327
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   328
	__ASSERT_ALWAYS(command->TransactionLabel() == aTransactionLabel, AvrcpUtils::Panic(EAvrcpUnknownAvctpTransId));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   329
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   330
	MAvrcpCommandHandler* handler = NULL;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   331
	if(command->MessageType() == ECommand)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   332
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   333
		handler = iBearer.OutgoingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   334
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   335
	else 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   336
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   337
		handler = iBearer.IncomingHandler(aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   338
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   339
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   340
	if(handler)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   341
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   342
		handler->MessageSent(*command, aSendResult);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   343
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   344
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   345
	// Deque before calling Decrement because Decrement handling may involve
20ac952a623c 201040_02
hgs
parents:
diff changeset
   346
	// deleting command
20ac952a623c 201040_02
hgs
parents:
diff changeset
   347
	command->iSendLink.Deque();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   348
	command->DecrementUsers();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   349
20ac952a623c 201040_02
hgs
parents:
diff changeset
   350
	// Now able to do another send. Toggle our state and check if there
20ac952a623c 201040_02
hgs
parents:
diff changeset
   351
	// are any commands waiting.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   352
	iState = EAvrcpRouterCanSend;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   353
	if(!iSendQueue.IsEmpty())
20ac952a623c 201040_02
hgs
parents:
diff changeset
   354
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   355
		Send();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   356
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   357
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   358
20ac952a623c 201040_02
hgs
parents:
diff changeset
   359
/** AVCTP Close Complete.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   360
20ac952a623c 201040_02
hgs
parents:
diff changeset
   361
This is the response to the CloseGracefully() that has been
20ac952a623c 201040_02
hgs
parents:
diff changeset
   362
called on a RAvctp object. It is the last event that will be 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   363
called until the RAvctp object is Open()'d again.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   364
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   365
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   366
void CRcpRouter::MaenCloseComplete()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   367
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   368
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   369
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   370
20ac952a623c 201040_02
hgs
parents:
diff changeset
   371
/** AVCTP error notification.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   372
20ac952a623c 201040_02
hgs
parents:
diff changeset
   373
Note an errored device does not indicate that the device has 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   374
been disconnected. If it has then a MaenDisconnectIndicate 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   375
event will be used to indicate this.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   376
20ac952a623c 201040_02
hgs
parents:
diff changeset
   377
@param aBTDevice the remote device associated with the error or TBTDevAddr(0) for a general error
20ac952a623c 201040_02
hgs
parents:
diff changeset
   378
@param aError system wide error
20ac952a623c 201040_02
hgs
parents:
diff changeset
   379
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   380
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   381
void CRcpRouter::MaenErrorNotify(const TBTDevAddr& /*aBTDevice*/, TInt /*aError*/)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   382
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   383
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   384
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   385
20ac952a623c 201040_02
hgs
parents:
diff changeset
   386
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
   387
Returns a null aObject if the extension is not implemented,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   388
or a pointer to another interface if it is.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   389
20ac952a623c 201040_02
hgs
parents:
diff changeset
   390
@param aInterface UID of the interface to return
20ac952a623c 201040_02
hgs
parents:
diff changeset
   391
@param aObject system wide error
20ac952a623c 201040_02
hgs
parents:
diff changeset
   392
@see RAvctp
20ac952a623c 201040_02
hgs
parents:
diff changeset
   393
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   394
void CRcpRouter::MaenExtensionInterfaceL(TUid /*aInterface*/, void*& aObject)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   395
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   396
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   397
	aObject = NULL;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   398
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   399
20ac952a623c 201040_02
hgs
parents:
diff changeset
   400
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
   401
// Utility functions
20ac952a623c 201040_02
hgs
parents:
diff changeset
   402
//------------------------------------------------------------------
20ac952a623c 201040_02
hgs
parents:
diff changeset
   403
20ac952a623c 201040_02
hgs
parents:
diff changeset
   404
/** Issue a send to AVCTP.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   405
20ac952a623c 201040_02
hgs
parents:
diff changeset
   406
This sends the first message on the command queue.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   407
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   408
void CRcpRouter::Send()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   409
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   410
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   411
	__ASSERT_ALWAYS(!iSendQueue.IsEmpty(), AvrcpUtils::Panic(EAvrcpNoOutstandingSend));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   412
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   413
	CAvrcpCommand* command = iSendQueue.First();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   414
20ac952a623c 201040_02
hgs
parents:
diff changeset
   415
#ifdef _DEBUG	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   416
	TInt err = 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   417
#endif // _DEBUG
20ac952a623c 201040_02
hgs
parents:
diff changeset
   418
	iChannel->MacSendMessage(command->RemoteAddress(),
20ac952a623c 201040_02
hgs
parents:
diff changeset
   419
		command->TransactionLabel(),
20ac952a623c 201040_02
hgs
parents:
diff changeset
   420
		command->MessageType(),
20ac952a623c 201040_02
hgs
parents:
diff changeset
   421
		command->Data());
20ac952a623c 201040_02
hgs
parents:
diff changeset
   422
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   423
	__ASSERT_DEBUG(err == KErrNone, AvrcpUtils::Panic(EAvrcpSendingMessageFailed));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   424
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   425
	iState = EAvrcpRouterSending;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   426
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   427
20ac952a623c 201040_02
hgs
parents:
diff changeset
   428
/** Factory funtion.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   429
20ac952a623c 201040_02
hgs
parents:
diff changeset
   430
@param aAvctp An open RAvctp instance.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   431
@param aBearer The bearer.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   432
@return A fully constructed CRcpRouter.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   433
@leave System wide error codes.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   434
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   435
CControlRouter* CControlRouter::NewL(RAvctp& aAvctp, MAvrcpBearer& aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   436
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   437
	LOG_STATIC_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   438
	CControlRouter* router = new(ELeave) CControlRouter(aAvctp, aBearer);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   439
	CleanupStack::PushL(router);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   440
	router->ConstructL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   441
	CleanupStack::Pop(router);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   442
	return router;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   443
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   444
20ac952a623c 201040_02
hgs
parents:
diff changeset
   445
CControlRouter::~CControlRouter()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   446
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   447
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   448
	iAvctp.Close(RAvctp::ENormal);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   449
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   450
20ac952a623c 201040_02
hgs
parents:
diff changeset
   451
CControlRouter::CControlRouter(RAvctp& aAvctp, MAvrcpBearer& aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   452
	: CRcpRouter(aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   453
	, iAvctp(aAvctp)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   454
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   455
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   456
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   457
20ac952a623c 201040_02
hgs
parents:
diff changeset
   458
void CControlRouter::ConstructL()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   459
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   460
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   461
	LEAVEIFERRORL(iAvctp.Open(*this, KAvrcpPid, iChannel));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   462
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   463
20ac952a623c 201040_02
hgs
parents:
diff changeset
   464
/** Factory funtion.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   465
20ac952a623c 201040_02
hgs
parents:
diff changeset
   466
@param aAvctp An open RAvctp instance.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   467
@param aBearer The bearer.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   468
@return A fully constructed CRcpRouter.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   469
@leave System wide error codes.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   470
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   471
CBulkRouter* CBulkRouter::NewL(RAvctp& aAvctp, MAvrcpBearer& aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   472
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   473
	LOG_STATIC_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   474
	CBulkRouter* router = new(ELeave) CBulkRouter(aAvctp, aBearer);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   475
	CleanupStack::PushL(router);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   476
	router->ConstructL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   477
	CleanupStack::Pop(router);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   478
	return router;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   479
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   480
20ac952a623c 201040_02
hgs
parents:
diff changeset
   481
CBulkRouter::~CBulkRouter()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   482
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   483
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   484
	iAvctp.UninstallSecondaryChannel();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   485
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   486
20ac952a623c 201040_02
hgs
parents:
diff changeset
   487
CBulkRouter::CBulkRouter(RAvctp& aAvctp, MAvrcpBearer& aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   488
	: CRcpRouter(aBearer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   489
	, iAvctp(aAvctp)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   490
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   491
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   492
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   493
20ac952a623c 201040_02
hgs
parents:
diff changeset
   494
void CBulkRouter::ConstructL()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   495
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   496
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
   497
	LEAVEIFERRORL(iAvctp.InstallSecondaryChannel(*this, iChannel));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   498
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   499