bluetooth/gavdp/test/tavsrc.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/gavdp/test/tavsrc.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,305 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef TAVSRC_H
+#define TAVSRC_H
+
+//only use define CHANNEL_BINDING_DEBUG_CHECK when checking channel binding
+//#define CHANNEL_BINDING_DEBUG_CHECK
+
+#define __PRINT iActiveConsole->Console().Printf
+#define __LOG iLogConsole->Console().Printf /*RDebug::Print*/
+
+#include "tavsrcConsole.h"
+#include "tavsrcStreamerUser.h"
+#include "tavsrcOperations.h"
+
+#include <f32file.h>
+#include <btsdp.h>
+#include <rtp.h>
+#include <gavdp.h>
+#include <remconcoreapitargetobserver.h>
+#include <remcongroupnavigationtarget.h>
+#include <remcongroupnavigationtargetobserver.h>
+
+#include <remconmediainformationtarget.h>
+#include <remconmediainformationtargetobserver.h>
+
+#include <remconbatterytarget.h>
+#include <remconbatterytargetobserver.h>
+
+#include <playerinformationtarget.h>
+#include <playerinformationtargetobserver.h>
+
+#include <remconabsvoltargetobserver.h>
+#include <remcontrackinfotargetobserver.h>
+
+enum TRemConInterfaces
+	{
+	ECoreApiTarget = 1 << 0,
+	ECoreApiController = 1 << 1,
+	EGroupNavigation = 1 << 2,
+	EMediaInformation = 1 << 3,
+	EBatteryStatus = 1 << 4,
+	EAbsoluteVolumeTarget = 1 << 5,
+	EAbsoluteVolumeController = 1 << 6,
+	EPlayerInformation = 1 << 7,
+	ENowPlaying = 1 << 8,
+	EMediaBrowse = 1 << 9,
+	EDatabaseAware = 1 << 10,
+	ESeparateThreadForBrowse = 1 << 11,
+	EVendorTrackInfoTarget = 1 << 12,
+	EVendorAbsoluteVolumeTarget = 1 << 13,
+	};
+
+
+typedef TFixedArray<RSocket, 3> RSocketArray;
+
+class CActivePacketDropIoctl;
+class CActiveSockReader;
+class CActiveSockWriter;
+class CRemMetadataTransferTarget;
+class CAVTestApp;
+class CActiveStreamer;
+class CTavsrcController;
+class CRemConInterfaceSelector;	
+class CRemConCoreApiTarget;
+class CRemConTrackInfoTarget;
+class CRemConAbsVolTarget;
+class CTavsrcMtUpdater;
+class CTavsrcAbsoluteVolume;
+class CAVTestApp : public CBase, public MActiveConsoleNotify,
+						public MGavdpUser, public MBluetoothPhysicalLinksNotifier,
+						public MRemConCoreApiTargetObserver,
+						public MActiveStreamerUser,
+						public MRemConMediaInformationTargetObserver,
+						public MRemConGroupNavigationTargetObserver,
+						public MRemConBatteryTargetObserver,
+						public MRemConTrackInfoTargetObserver,
+						public MRemConAbsVolTargetObserver
+	{
+private:
+	enum TTavsrcServiceCategory
+		{
+		ETavsrcServiceCategoryNull				=0x00,
+		ETavsrcServiceCategoryMediaTransport 	=0x01,
+		ETavsrcServiceCategoryReporting			=0x02,
+		ETavsrcServiceCategoryRecovery			=0x04,
+		ETavsrcServiceCategoryContentProtection	=0x08,
+		ETavsrcServiceCategoryHeaderCompression	=0x10,
+		ETavsrcServiceCategoryMultiplexing		=0x20,
+		ETavsrcServiceCategoryMediaCodec		=0x40,
+		};
+public:
+	static CAVTestApp* NewL();
+	void EchoStorm();
+
+	void StartL();
+	void Stop();
+	~CAVTestApp();
+	void TestMenu();
+
+	void KeyPressed(TChar aKey);
+
+	TInt StartSrc();
+	void StopSrc();
+	void DisconnectSrc();
+
+	// echo test
+	virtual void HandleCreateConnectionCompleteL(TInt aErr);
+	virtual void HandleDisconnectCompleteL(TInt aErr);
+	virtual void HandleDisconnectAllCompleteL(TInt aErr);
+
+private:
+	void PreventLowPowerModes();
+	void AllowLowPowerModes();
+	void CreateBearers();
+	void CloseBearers();
+	void ConfigureSEPL();
+	void Abort();
+	void DiscoverSEPs();
+	void StartStreams();
+	void SuspendStreams();
+	void GetCapabilities();
+	void SendSecurityControl();
+	TSBCCodecCapabilities InteractiveSBCMediaCodecConfig(TSBCCodecCapabilities& caps);
+	
+	void PrintCommandOption(TChar aOperation, TPtrC aDesc);
+	
+	void CreateStreamerL(RSocketArray aSockets);
+	void CreateRemConInterfacesL();
+
+	void Connect();
+	TInt Listen();
+	TInt RegisterSEP();
+	
+	CAVTestApp();
+	void ConstructL();
+
+	//return ETrue if current SEP is sink, EFalse otherwise
+	TBool CurrentSEIDIsSink();
+
+	void DisplayHelp();
+	void ParseCommandLineL();
+	
+private:
+	// GAVDP callbacks
+	virtual void GAVDP_SEPDiscovered(const TAvdtpSEPInfo& aSEP);
+	virtual void GAVDP_SEPDiscoveryComplete();
+	virtual void GAVDP_SEPCapability(TAvdtpServiceCapability* aCapability);	
+	virtual void GAVDP_SEPCapabilityComplete();
+	virtual void GAVDP_AbortStreamConfirm();
+	virtual void GAVDP_StartStreamsConfirm();
+	virtual void GAVDP_SuspendStreamsConfirm();
+	virtual void GAVDP_SecurityControlConfirm(const TDesC8& aResponseData);
+	virtual void GAVDP_ConfigurationConfirm();	// configuration complete and SEP selected *AND* reconfigure confirm
+	virtual void GAVDP_Error(TInt aError, const TDesC8& aErrorData);
+	virtual void GAVDP_ConnectConfirm(const TBTDevAddr& aAddr);
+
+	virtual void GAVDP_ConfigurationStartIndication(TSEID aLocalSEID, TSEID aRemoteSEID);	
+	virtual TInt GAVDP_ConfigurationIndication(TAvdtpServiceCapability* aCapability);
+	virtual TInt GAVDP_ConfigurationEndIndication();
+
+	virtual TInt GAVDP_StartIndication(TSEID aSEID);
+	virtual TInt GAVDP_SuspendIndication(TSEID aSEID);
+	virtual TInt GAVDP_SecurityControlIndication(TSEID aSEID, TDes8& aSecurityData);
+	virtual void GAVDP_AbortIndication(TSEID aSEID);
+	virtual void GAVDP_ReleaseIndication(TSEID aSEID);
+	virtual void GAVDP_BearerReady(RSocket aNewSocket, const TAvdtpSockAddr& aAddr);
+	
+	void PrettyPrint(TAvdtpServiceCapability& aCapability);
+	
+private:
+	// RemConCoreApiTarget callbacks
+	virtual void MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct);
+	virtual void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct);
+
+private:
+	// from MActiveStreamerUser
+	virtual void MediaCodecConfigurationRequired(TSBCCodecCapabilities& aConfig);
+
+	virtual TInt MrcmtcGetElementAttributes(TUint64 aElement, TUint32 aAttribute, HBufC8*& aOutValueOwnershipTransferred);
+
+	// from MRemConGroupNavigationTargetObserver	
+	virtual void MrcgntoNextGroup(TRemConCoreApiButtonAction aButtonAct);
+	virtual void MrcgntoPreviousGroup(TRemConCoreApiButtonAction aButtonAct);
+	virtual void MrcbstoBatteryStatus(TControllerBatteryStatus& aBatteryStatus);
+
+	// from MRemConMediaInformationTargetObserver	
+	virtual void MrcmitoGetCurrentlyPlayingMetadata( TMediaAttributeIter& aAttributeIter );
+
+	virtual void MrcncRegisterPlaybackStatusChangedNotification();
+	virtual void MrcncRegisterTrackChangedNotification();
+	virtual void MrcncRegisterTrackReachedEndNotification();
+	virtual void MrcncRegisterTrackReachedStartNotification();
+	virtual void MrcncRegisterPositionChangedNotification(TUint32 aInterval);
+	virtual void MrcncRegisterBatteryStatusChangedNotification();
+	virtual void MrcncRegisterSystemStatusChangedNotification();
+	virtual void MrcncRegisterPlayerApplicationStatusChangedNotification();
+	
+	virtual void MrcavtoGetAbsoluteVolume();
+	virtual void MrcavtoSetAbsoluteVolume(TUint /*aAbsVol*/, TUint /*aMaxVol*/);
+	
+	virtual void MrctitoGetTrackName();
+	virtual void MrctitoGetArtist();
+	virtual void MrctitoGetTrackDuration();
+
+private:
+	CActiveConsole* iActiveConsole;
+	CActiveConsole* iLogConsole;
+	CTavsrcMtUpdater*			iMtUpdater;
+		
+	RSocketServ iSockServ;
+	
+#ifdef CHANNEL_BINDING_DEBUG_CHECK
+	CActiveSockReader* iRepReader;
+	CActiveSockWriter* iRepWriter;
+	CActiveSockReader* iRecvReader;
+	CActiveSockWriter* iRecvWriter;
+#endif
+	
+	CActivePacketDropIoctl* iPacketDropIoctl;
+
+	RGavdp iGavdp;	
+	
+	TSEID iCurrentSEID; // Current Remote SEID
+	TSEID iCurrentLocalSEID; // Current Local SEID
+
+	RPointerArray<TAvdtpServiceCapability> iSEPCapabilities; // only held for one SEP at a time in this test code
+
+	RArray<TSEID> iShortlistedSEIDs;	// for finding good remote SEP
+	TBool iChosenSEP;
+	
+	RArray<TAvdtpSEPInfo> iLocallyRegisteredSEPs;
+	TBool iRegisteringLocalSEP;
+	
+	CActiveStreamer* iStreamer;
+	RSocketArray iPendingSockets;
+	
+	CRemConInterfaceSelector* iRemConInterfaceSelector;
+	CRemConCoreApiTarget* iRemConTarget;
+	CRemConGroupNavigationApiTarget* iGroupNavigation;
+	CRemConMediaInformationTarget* iMediaInformation;
+	CRemConBatteryApiTarget* iBatteryStatus;
+	CRemConTrackInfoTarget* iTrackInfo;
+	CRemConAbsVolTarget* iAbsoluteVolume;
+	CTavsrcAbsoluteVolume* iTavsrcAbsoluteVolume;
+
+	RSdp iSdp;
+	RSdpDatabase iSdpDB;
+	TSdpServRecordHandle iSrcHandle;
+	TSdpServRecordHandle iSnkHandle;
+	
+	TBool iAutoStream;
+	
+	enum TGavdpState
+		{
+		ENoClientOpen,
+		EIdle,
+		ESigConnected,
+		EOpen,
+		ESuspended,
+		ERemoteReconfiguring,
+		};
+
+	enum TStreamState
+		{
+		EClosed,
+		EStreaming,
+		EPaused,
+		EStopped,
+		};
+		
+	TGavdpState iGavdpState;
+	TStreamState iStreamState;
+	
+	TSBCCodecCapabilities iReconfigInfo;
+	TBool iLocalReconfigure;
+	
+	TUint iDisplayMode;
+	TBool iPreloadFile;
+	
+	CTavsrcController* iController;
+	TBTDevAddr iDevAddr;
+
+	CTavsrcOperations* iOperations;
+	
+	RBuf iFilename;
+	RBTPhysicalLinkAdapter iPhy;
+		
+	TUint iRemConInterfaces;
+	};
+
+#endif // TAVSRC_H