diff -r 5b153be919d4 -r e9b924a62a66 bluetooth/gavdp/test/tavsrc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/gavdp/test/tavsrc.h Wed Sep 01 12:38:54 2010 +0100 @@ -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 +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +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 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 iSEPCapabilities; // only held for one SEP at a time in this test code + + RArray iShortlistedSEIDs; // for finding good remote SEP + TBool iChosenSEP; + + RArray 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