remotecontrol/avrcp/remconbeareravrcp/inc/controlbearer.h
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) 2008-2010 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
#ifndef CONTROLBEARER_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
#define CONTROLBEARER_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
@file
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
@internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
#include <avctpservices.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
#include <btsdp.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
#include <e32std.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
#include <remcon/clientid.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
#include <remcon/remconbearerinterface.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
#include <remcon/remconbearerplugin.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
#include <remcon/avrcpspec.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
#include <remcon/messagetype.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
#include <remcon/playertype.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
#include "avrcpbearerinterface.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
#include "remconcommandinterface.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
class CControlCommand;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
class CRcpRemoteDevice;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
class CControlRouter;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
class TBTDevAddr;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
class CBrowseCommand;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
class CAvrcpPlayerInfoManager;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
class CAvrcpBulkBearer;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
NONSHARABLE_CLASS(CRemConBearerAvrcp) : public CRemConBearerPlugin, public MRemConBearerInterfaceV3,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
	public MAvrcpBearer, public MRemConControlCommandInterface
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
public:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
	static CRemConBearerAvrcp* NewL(TBearerParams& aParams);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
	virtual ~CRemConBearerAvrcp();	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
public:	// Interface to command handlers, from MRemConCommandInterface
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
	void MrcciNewCommand(CAvrcpCommand& aCommand);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
	void MrcciNewCommand(CAvrcpCommand& aCommand, const TRemConClientId& aClientId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
	void MrccciNewNotifyCommand(CAvrcpCommand& aCommand);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
	void MrccciNewNotifyCommand(CAvrcpCommand& aCommand, const TRemConClientId& aClientId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
	void MrccciNewResponse(CAvrcpCommand& aCommand);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
	void MrccciNewNotifyResponse(CControlCommand& aCommand);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
	TUint MrcciNewTransactionId();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
    void MrcciCommandExpired(TUint aTransactionId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
    
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
	void MrccciSetAddressedClient(const TRemConClientId& aClient);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
	void MrccciRegisterForLocalAddressedClientUpdates();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
	void MrccciUnregisterForLocalAddressedClientUpdates();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
private: // MRemConBearerInterfaceV3 functions called from RemCon
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
	virtual TInt GetResponse(TUid& aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
		TUint& aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
		TUint& aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
		RBuf8& aCommandData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
		TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
			
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
	virtual TInt SendCommand(TUid aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
		TUint aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
		TUint aId,  
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
		RBuf8& aData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
		const TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	virtual TInt GetCommand(TUid& aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
		TUint& aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
		TUint& aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
		RBuf8& aCommandData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
		TRemConAddress& aAddr);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
	virtual TInt GetNotifyCommand(TUid& aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
		TUint& aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
		TUint& aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
		RBuf8& aCommandData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
		TRemConAddress& aAddr);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
			
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
	virtual CAvrcpCommand* GetFirstCommand(TDblQue<CAvrcpCommand>& aQue,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
		TUid& aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
		TUint& aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
		TUint& aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
		RBuf8& aCommandData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
		TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	virtual TInt SendResponse(TUid aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
		TUint aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
		TUint aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
		RBuf8& aData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
		const TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
	virtual void SendReject(TUid aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
			TUint aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
			TUint aTransactionId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
			const TRemConAddress& aAddr); 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
	virtual void ConnectRequest(const TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
	virtual void DisconnectRequest(const TRemConAddress& aAddr);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
	virtual TSecurityPolicy SecurityPolicy() const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   114
	void ClientStatus(TBool aControllerPresent, TBool aTargetPresent);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   115
	virtual void ClientAvailable(TRemConClientId& aId, TPlayerType aClientType, TPlayerSubType aClientSubType, const TDesC8& aName);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   116
	virtual void ClientNotAvailable(TRemConClientId& aId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   117
	virtual void ControllerFeaturesUpdated(RArray<TUid>& aSupportedInterfaces);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   118
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   119
	virtual TInt SetLocalAddressedClient(TRemConClientId& aId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   120
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   121
	virtual void TargetFeaturesUpdated(const TRemConClientId& aId, TPlayerType aPlayerType, TPlayerSubType aPlayerSubType, const TDesC8& aName);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   122
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   123
private: // from CRemConBearerPlugin
20ac952a623c 201040_02
hgs
parents:
diff changeset
   124
	TAny* GetInterface(TUid aUid);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   125
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   126
private:	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   127
	// from MAvrcpBearer called from router
20ac952a623c 201040_02
hgs
parents:
diff changeset
   128
	void ConnectIndicate(const TBTDevAddr& aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   129
	void ConnectConfirm(const TBTDevAddr& aBTDevice, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   130
	void DisconnectIndicate(const TBTDevAddr& aBTDevice);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   131
	void DisconnectConfirm(const TBTDevAddr& aBTDevice, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   132
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   133
	MIncomingCommandHandler* IncomingHandler(const TBTDevAddr& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   134
	MOutgoingCommandHandler* OutgoingHandler(const TBTDevAddr& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   135
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   136
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
   137
	// MRemConBearerInterfaceV3 plugin functions called from RemCon
20ac952a623c 201040_02
hgs
parents:
diff changeset
   138
	virtual TInt SendNotifyCommand(TUid aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   139
			TUint aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   140
			TUint aId,  
20ac952a623c 201040_02
hgs
parents:
diff changeset
   141
			RBuf8& aData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   142
			const TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   143
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   144
	virtual TInt GetNotifyResponse(TUid& aInterfaceUid, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   145
			TUint& aId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   146
			TUint& aOperationId, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   147
			RBuf8& aCommandData, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   148
			TRemConAddress& aAddr,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   149
			TRemConMessageSubType& aSubMessageType);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   150
20ac952a623c 201040_02
hgs
parents:
diff changeset
   151
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
   152
	enum TAvrcpRecordType
20ac952a623c 201040_02
hgs
parents:
diff changeset
   153
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   154
		EAvrcpRemoteControlRecord,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   155
		EAvrcpRemoteControlTargetRecord,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   156
		};
20ac952a623c 201040_02
hgs
parents:
diff changeset
   157
20ac952a623c 201040_02
hgs
parents:
diff changeset
   158
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
   159
	CRemConBearerAvrcp(TBearerParams& aParams);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   160
	void ConstructL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   161
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   162
	// utility functions
20ac952a623c 201040_02
hgs
parents:
diff changeset
   163
	CRcpRemoteDevice* RemoteDevice(const TBTDevAddr& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   164
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   165
	void UpdateServiceRecordL(RSdpDatabase& aSdpDatabase,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   166
		TBool aController,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   167
		TBool aTarget);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   168
	void RegisterServiceRecordL(RSdpDatabase& aSdpDatabase,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   169
		TAvrcpRecordType aType);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   170
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   171
	void HandleUndeliveredCommand(CAvrcpCommand& aCommand, const TRemConAddress& aAddr);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   172
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   173
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
   174
	TDblQue<CRcpRemoteDevice>	iRemotes;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   175
	TDblQue<CAvrcpCommand>		iReadyCommands;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   176
	TDblQue<CAvrcpCommand>		iReadyResponses;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   177
	TDblQue<CControlCommand>	iReadyNotifyResponses;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   178
	TDblQue<CAvrcpCommand>		iReadyNotifyCommands;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   179
	CControlRouter*				iRouter;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   180
	CDeltaTimer*				iTimer;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   181
	RSdp						iSdp;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   182
	TSdpServRecordHandle		iControllerSdpRecordHandle;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   183
	TSdpServRecordHandle		iTargetSdpRecordHandle;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   184
	TBool						iConstructionComplete;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   185
	CAvrcpPlayerInfoManager*	iPlayerInfoManager;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   186
	MIncomingCommandHandler*	iInternalHandler;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   187
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   188
	CAvrcpBulkBearer*			iBulkBearer;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   189
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   190
	RAvctp						iAvctp;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   191
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   192
	TInt						iRemotesInterestedInLocalAddressedClient;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   193
	};
20ac952a623c 201040_02
hgs
parents:
diff changeset
   194
20ac952a623c 201040_02
hgs
parents:
diff changeset
   195
#endif //CONTROLBEARER_H