bluetooth/gavdp/test/tavsrc.h
branchRCL_3
changeset 24 e9b924a62a66
parent 0 29b1cd4cb562
equal deleted inserted replaced
23:5b153be919d4 24:e9b924a62a66
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef TAVSRC_H
       
    17 #define TAVSRC_H
       
    18 
       
    19 //only use define CHANNEL_BINDING_DEBUG_CHECK when checking channel binding
       
    20 //#define CHANNEL_BINDING_DEBUG_CHECK
       
    21 
       
    22 #define __PRINT iActiveConsole->Console().Printf
       
    23 #define __LOG iLogConsole->Console().Printf /*RDebug::Print*/
       
    24 
       
    25 #include "tavsrcConsole.h"
       
    26 #include "tavsrcStreamerUser.h"
       
    27 #include "tavsrcOperations.h"
       
    28 
       
    29 #include <f32file.h>
       
    30 #include <btsdp.h>
       
    31 #include <rtp.h>
       
    32 #include <gavdp.h>
       
    33 #include <remconcoreapitargetobserver.h>
       
    34 #include <remcongroupnavigationtarget.h>
       
    35 #include <remcongroupnavigationtargetobserver.h>
       
    36 
       
    37 #include <remconmediainformationtarget.h>
       
    38 #include <remconmediainformationtargetobserver.h>
       
    39 
       
    40 #include <remconbatterytarget.h>
       
    41 #include <remconbatterytargetobserver.h>
       
    42 
       
    43 #include <playerinformationtarget.h>
       
    44 #include <playerinformationtargetobserver.h>
       
    45 
       
    46 #include <remconabsvoltargetobserver.h>
       
    47 #include <remcontrackinfotargetobserver.h>
       
    48 
       
    49 enum TRemConInterfaces
       
    50 	{
       
    51 	ECoreApiTarget = 1 << 0,
       
    52 	ECoreApiController = 1 << 1,
       
    53 	EGroupNavigation = 1 << 2,
       
    54 	EMediaInformation = 1 << 3,
       
    55 	EBatteryStatus = 1 << 4,
       
    56 	EAbsoluteVolumeTarget = 1 << 5,
       
    57 	EAbsoluteVolumeController = 1 << 6,
       
    58 	EPlayerInformation = 1 << 7,
       
    59 	ENowPlaying = 1 << 8,
       
    60 	EMediaBrowse = 1 << 9,
       
    61 	EDatabaseAware = 1 << 10,
       
    62 	ESeparateThreadForBrowse = 1 << 11,
       
    63 	EVendorTrackInfoTarget = 1 << 12,
       
    64 	EVendorAbsoluteVolumeTarget = 1 << 13,
       
    65 	};
       
    66 
       
    67 
       
    68 typedef TFixedArray<RSocket, 3> RSocketArray;
       
    69 
       
    70 class CActivePacketDropIoctl;
       
    71 class CActiveSockReader;
       
    72 class CActiveSockWriter;
       
    73 class CRemMetadataTransferTarget;
       
    74 class CAVTestApp;
       
    75 class CActiveStreamer;
       
    76 class CTavsrcController;
       
    77 class CRemConInterfaceSelector;	
       
    78 class CRemConCoreApiTarget;
       
    79 class CRemConTrackInfoTarget;
       
    80 class CRemConAbsVolTarget;
       
    81 class CTavsrcMtUpdater;
       
    82 class CTavsrcAbsoluteVolume;
       
    83 class CAVTestApp : public CBase, public MActiveConsoleNotify,
       
    84 						public MGavdpUser, public MBluetoothPhysicalLinksNotifier,
       
    85 						public MRemConCoreApiTargetObserver,
       
    86 						public MActiveStreamerUser,
       
    87 						public MRemConMediaInformationTargetObserver,
       
    88 						public MRemConGroupNavigationTargetObserver,
       
    89 						public MRemConBatteryTargetObserver,
       
    90 						public MRemConTrackInfoTargetObserver,
       
    91 						public MRemConAbsVolTargetObserver
       
    92 	{
       
    93 private:
       
    94 	enum TTavsrcServiceCategory
       
    95 		{
       
    96 		ETavsrcServiceCategoryNull				=0x00,
       
    97 		ETavsrcServiceCategoryMediaTransport 	=0x01,
       
    98 		ETavsrcServiceCategoryReporting			=0x02,
       
    99 		ETavsrcServiceCategoryRecovery			=0x04,
       
   100 		ETavsrcServiceCategoryContentProtection	=0x08,
       
   101 		ETavsrcServiceCategoryHeaderCompression	=0x10,
       
   102 		ETavsrcServiceCategoryMultiplexing		=0x20,
       
   103 		ETavsrcServiceCategoryMediaCodec		=0x40,
       
   104 		};
       
   105 public:
       
   106 	static CAVTestApp* NewL();
       
   107 	void EchoStorm();
       
   108 
       
   109 	void StartL();
       
   110 	void Stop();
       
   111 	~CAVTestApp();
       
   112 	void TestMenu();
       
   113 
       
   114 	void KeyPressed(TChar aKey);
       
   115 
       
   116 	TInt StartSrc();
       
   117 	void StopSrc();
       
   118 	void DisconnectSrc();
       
   119 
       
   120 	// echo test
       
   121 	virtual void HandleCreateConnectionCompleteL(TInt aErr);
       
   122 	virtual void HandleDisconnectCompleteL(TInt aErr);
       
   123 	virtual void HandleDisconnectAllCompleteL(TInt aErr);
       
   124 
       
   125 private:
       
   126 	void PreventLowPowerModes();
       
   127 	void AllowLowPowerModes();
       
   128 	void CreateBearers();
       
   129 	void CloseBearers();
       
   130 	void ConfigureSEPL();
       
   131 	void Abort();
       
   132 	void DiscoverSEPs();
       
   133 	void StartStreams();
       
   134 	void SuspendStreams();
       
   135 	void GetCapabilities();
       
   136 	void SendSecurityControl();
       
   137 	TSBCCodecCapabilities InteractiveSBCMediaCodecConfig(TSBCCodecCapabilities& caps);
       
   138 	
       
   139 	void PrintCommandOption(TChar aOperation, TPtrC aDesc);
       
   140 	
       
   141 	void CreateStreamerL(RSocketArray aSockets);
       
   142 	void CreateRemConInterfacesL();
       
   143 
       
   144 	void Connect();
       
   145 	TInt Listen();
       
   146 	TInt RegisterSEP();
       
   147 	
       
   148 	CAVTestApp();
       
   149 	void ConstructL();
       
   150 
       
   151 	//return ETrue if current SEP is sink, EFalse otherwise
       
   152 	TBool CurrentSEIDIsSink();
       
   153 
       
   154 	void DisplayHelp();
       
   155 	void ParseCommandLineL();
       
   156 	
       
   157 private:
       
   158 	// GAVDP callbacks
       
   159 	virtual void GAVDP_SEPDiscovered(const TAvdtpSEPInfo& aSEP);
       
   160 	virtual void GAVDP_SEPDiscoveryComplete();
       
   161 	virtual void GAVDP_SEPCapability(TAvdtpServiceCapability* aCapability);	
       
   162 	virtual void GAVDP_SEPCapabilityComplete();
       
   163 	virtual void GAVDP_AbortStreamConfirm();
       
   164 	virtual void GAVDP_StartStreamsConfirm();
       
   165 	virtual void GAVDP_SuspendStreamsConfirm();
       
   166 	virtual void GAVDP_SecurityControlConfirm(const TDesC8& aResponseData);
       
   167 	virtual void GAVDP_ConfigurationConfirm();	// configuration complete and SEP selected *AND* reconfigure confirm
       
   168 	virtual void GAVDP_Error(TInt aError, const TDesC8& aErrorData);
       
   169 	virtual void GAVDP_ConnectConfirm(const TBTDevAddr& aAddr);
       
   170 
       
   171 	virtual void GAVDP_ConfigurationStartIndication(TSEID aLocalSEID, TSEID aRemoteSEID);	
       
   172 	virtual TInt GAVDP_ConfigurationIndication(TAvdtpServiceCapability* aCapability);
       
   173 	virtual TInt GAVDP_ConfigurationEndIndication();
       
   174 
       
   175 	virtual TInt GAVDP_StartIndication(TSEID aSEID);
       
   176 	virtual TInt GAVDP_SuspendIndication(TSEID aSEID);
       
   177 	virtual TInt GAVDP_SecurityControlIndication(TSEID aSEID, TDes8& aSecurityData);
       
   178 	virtual void GAVDP_AbortIndication(TSEID aSEID);
       
   179 	virtual void GAVDP_ReleaseIndication(TSEID aSEID);
       
   180 	virtual void GAVDP_BearerReady(RSocket aNewSocket, const TAvdtpSockAddr& aAddr);
       
   181 	
       
   182 	void PrettyPrint(TAvdtpServiceCapability& aCapability);
       
   183 	
       
   184 private:
       
   185 	// RemConCoreApiTarget callbacks
       
   186 	virtual void MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct);
       
   187 	virtual void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct);
       
   188 
       
   189 private:
       
   190 	// from MActiveStreamerUser
       
   191 	virtual void MediaCodecConfigurationRequired(TSBCCodecCapabilities& aConfig);
       
   192 
       
   193 	virtual TInt MrcmtcGetElementAttributes(TUint64 aElement, TUint32 aAttribute, HBufC8*& aOutValueOwnershipTransferred);
       
   194 
       
   195 	// from MRemConGroupNavigationTargetObserver	
       
   196 	virtual void MrcgntoNextGroup(TRemConCoreApiButtonAction aButtonAct);
       
   197 	virtual void MrcgntoPreviousGroup(TRemConCoreApiButtonAction aButtonAct);
       
   198 	virtual void MrcbstoBatteryStatus(TControllerBatteryStatus& aBatteryStatus);
       
   199 
       
   200 	// from MRemConMediaInformationTargetObserver	
       
   201 	virtual void MrcmitoGetCurrentlyPlayingMetadata( TMediaAttributeIter& aAttributeIter );
       
   202 
       
   203 	virtual void MrcncRegisterPlaybackStatusChangedNotification();
       
   204 	virtual void MrcncRegisterTrackChangedNotification();
       
   205 	virtual void MrcncRegisterTrackReachedEndNotification();
       
   206 	virtual void MrcncRegisterTrackReachedStartNotification();
       
   207 	virtual void MrcncRegisterPositionChangedNotification(TUint32 aInterval);
       
   208 	virtual void MrcncRegisterBatteryStatusChangedNotification();
       
   209 	virtual void MrcncRegisterSystemStatusChangedNotification();
       
   210 	virtual void MrcncRegisterPlayerApplicationStatusChangedNotification();
       
   211 	
       
   212 	virtual void MrcavtoGetAbsoluteVolume();
       
   213 	virtual void MrcavtoSetAbsoluteVolume(TUint /*aAbsVol*/, TUint /*aMaxVol*/);
       
   214 	
       
   215 	virtual void MrctitoGetTrackName();
       
   216 	virtual void MrctitoGetArtist();
       
   217 	virtual void MrctitoGetTrackDuration();
       
   218 
       
   219 private:
       
   220 	CActiveConsole* iActiveConsole;
       
   221 	CActiveConsole* iLogConsole;
       
   222 	CTavsrcMtUpdater*			iMtUpdater;
       
   223 		
       
   224 	RSocketServ iSockServ;
       
   225 	
       
   226 #ifdef CHANNEL_BINDING_DEBUG_CHECK
       
   227 	CActiveSockReader* iRepReader;
       
   228 	CActiveSockWriter* iRepWriter;
       
   229 	CActiveSockReader* iRecvReader;
       
   230 	CActiveSockWriter* iRecvWriter;
       
   231 #endif
       
   232 	
       
   233 	CActivePacketDropIoctl* iPacketDropIoctl;
       
   234 
       
   235 	RGavdp iGavdp;	
       
   236 	
       
   237 	TSEID iCurrentSEID; // Current Remote SEID
       
   238 	TSEID iCurrentLocalSEID; // Current Local SEID
       
   239 
       
   240 	RPointerArray<TAvdtpServiceCapability> iSEPCapabilities; // only held for one SEP at a time in this test code
       
   241 
       
   242 	RArray<TSEID> iShortlistedSEIDs;	// for finding good remote SEP
       
   243 	TBool iChosenSEP;
       
   244 	
       
   245 	RArray<TAvdtpSEPInfo> iLocallyRegisteredSEPs;
       
   246 	TBool iRegisteringLocalSEP;
       
   247 	
       
   248 	CActiveStreamer* iStreamer;
       
   249 	RSocketArray iPendingSockets;
       
   250 	
       
   251 	CRemConInterfaceSelector* iRemConInterfaceSelector;
       
   252 	CRemConCoreApiTarget* iRemConTarget;
       
   253 	CRemConGroupNavigationApiTarget* iGroupNavigation;
       
   254 	CRemConMediaInformationTarget* iMediaInformation;
       
   255 	CRemConBatteryApiTarget* iBatteryStatus;
       
   256 	CRemConTrackInfoTarget* iTrackInfo;
       
   257 	CRemConAbsVolTarget* iAbsoluteVolume;
       
   258 	CTavsrcAbsoluteVolume* iTavsrcAbsoluteVolume;
       
   259 
       
   260 	RSdp iSdp;
       
   261 	RSdpDatabase iSdpDB;
       
   262 	TSdpServRecordHandle iSrcHandle;
       
   263 	TSdpServRecordHandle iSnkHandle;
       
   264 	
       
   265 	TBool iAutoStream;
       
   266 	
       
   267 	enum TGavdpState
       
   268 		{
       
   269 		ENoClientOpen,
       
   270 		EIdle,
       
   271 		ESigConnected,
       
   272 		EOpen,
       
   273 		ESuspended,
       
   274 		ERemoteReconfiguring,
       
   275 		};
       
   276 
       
   277 	enum TStreamState
       
   278 		{
       
   279 		EClosed,
       
   280 		EStreaming,
       
   281 		EPaused,
       
   282 		EStopped,
       
   283 		};
       
   284 		
       
   285 	TGavdpState iGavdpState;
       
   286 	TStreamState iStreamState;
       
   287 	
       
   288 	TSBCCodecCapabilities iReconfigInfo;
       
   289 	TBool iLocalReconfigure;
       
   290 	
       
   291 	TUint iDisplayMode;
       
   292 	TBool iPreloadFile;
       
   293 	
       
   294 	CTavsrcController* iController;
       
   295 	TBTDevAddr iDevAddr;
       
   296 
       
   297 	CTavsrcOperations* iOperations;
       
   298 	
       
   299 	RBuf iFilename;
       
   300 	RBTPhysicalLinkAdapter iPhy;
       
   301 		
       
   302 	TUint iRemConInterfaces;
       
   303 	};
       
   304 
       
   305 #endif // TAVSRC_H