--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,791 @@
+/*
+* Copyright (c) 2006 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: AO for rendering commands
+*
+*/
+
+
+
+
+
+
+#include "upnpavrenderingactive.h"
+
+#include "upnpavcontrollerclient.h"
+#include "upnpavrenderingsessionimpl.h"
+#include "upnpavrequest.h"
+
+_LIT( KComponentLogfile, "upnpavcontrollerclient.txt");
+#include "upnplog.h"
+
+const TInt KPositionInfoSize = 15;
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::NewL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive* CUPnPAVRenderingActive::NewL(
+ RUPnPAVControllerClient& aServer, TInt aId )
+ {
+ CUPnPAVRenderingActive* self = new (ELeave) CUPnPAVRenderingActive(
+ aServer, aId );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::CUPnPAVRenderingActive
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive::CUPnPAVRenderingActive(
+ RUPnPAVControllerClient& aServer, TInt aId ):
+ CActive( EPriorityStandard ),
+ iServer( aServer ),
+ iId( aId ),
+ iBufferPtr( 0, 0 ),
+ iBufferPtr2( 0, 0 ),
+ iRespBufSizePkg( iRespBufSize )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::~CUPnPAVRenderingActive
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive::~CUPnPAVRenderingActive()
+ {
+ __LOG( "CUPnPAVRenderingActive::~CUPnPAVRenderingActive" );
+
+ Cancel();
+
+ delete iBuffer;
+ delete iBuffer2;
+
+ if( iMediaServerResourceReserved )
+ {
+ iServer.ReleaseMediaServer( iId );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ConstructL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ConstructL()
+ {
+ __LOG( "CUPnPAVRenderingActive::ConstructL" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RunL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::RunL()
+ {
+ __LOG( "CUPnPAVRenderingActive::RunL" );
+
+ switch( iPendingOperation )
+ {
+ case ESetURI:
+ {
+ SetURICompleteL();
+ }
+ break;
+
+ case ESetNextURI:
+ {
+ SetNextURICompleteL();
+ }
+ break;
+
+ case EPlay:
+ {
+ PlayCompleteL();
+ }
+ break;
+
+ case EStop:
+ {
+ StopCompleteL();
+ }
+ break;
+
+ case EPause:
+ {
+ PauseCompleteL();
+ }
+ break;
+
+ case ESetVolume:
+ {
+ SetVolumeCompleteL();
+ }
+ break;
+
+ case EGetVolume:
+ {
+ GetVolumeCompleteL();
+ }
+ break;
+
+ case ESetMute:
+ {
+ SetMuteCompleteL();
+ }
+ break;
+
+ case EGetMute:
+ {
+ GetMuteCompleteL();
+ }
+ break;
+
+ case EPositionInfo:
+ {
+ PositionInfoCompleteL();
+ }
+ break;
+
+ case EStartMediaServer:
+ {
+ StartMediaServerCompleteL();
+ }
+ break;
+
+ default:
+ __PANICD( __FILE__, __LINE__ );
+ break;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::DoCancel
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::DoCancel()
+ {
+ __LOG( "CUPnPAVRenderingActive::DoCancel" );
+
+ switch( iPendingOperation )
+ {
+ case ESetURI:
+ {
+ iServer.CancelSetURI( iId );
+ }
+ break;
+
+ case ESetNextURI:
+ {
+ iServer.CancelSetNextURI( iId );
+ }
+ break;
+
+ case EPlay:
+ {
+ iServer.CancelPlay( iId );
+ }
+ break;
+
+ case EStop:
+ {
+ iServer.CancelStop( iId );
+ }
+ break;
+
+ case EPause:
+ {
+ iServer.CancelPause( iId );
+ }
+ break;
+
+ case ESetVolume:
+ {
+ iServer.CancelSetVolume( iId );
+ }
+ break;
+
+ case EGetVolume:
+ {
+ iServer.CancelGetVolume( iId );
+ }
+ break;
+
+ case ESetMute:
+ {
+ iServer.CancelSetMute( iId );
+ }
+ break;
+
+ case EGetMute:
+ {
+ iServer.CancelGetMute( iId );
+ }
+ break;
+
+ case EPositionInfo:
+ {
+ iServer.CancelGetPositionInfo( iId );
+ }
+ break;
+
+ case EStartMediaServer:
+ {
+ iServer.CancelReserveMediaServer( iId );
+ }
+ break;
+
+ default:
+ __PANICD( __FILE__, __LINE__ );
+ break;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RunError
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+TInt CUPnPAVRenderingActive::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetObserver
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetObserver(
+ MUPnPAVRenderingSessionObserver& aObserver )
+ {
+ // Set the observer and make an async request to the server to receive
+ // device callbacks
+ __ASSERTD( !iObserver, __FILE__, __LINE__ );
+
+
+ iObserver = &aObserver;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::Observer
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+MUPnPAVRenderingSessionObserver* CUPnPAVRenderingActive::Observer() const
+ {
+ return iObserver;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RemoveObserver
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::RemoveObserver()
+ {
+ iObserver = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ReserveLocalMSServicesL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ReserveLocalMSServicesL()
+ {
+ __LOG( "CUPnPAVRenderingActive::ReserveLocalMSServicesL" );
+
+ ResetL();
+
+ if( iMediaServerResourceReserved )
+ {
+ if( iObserver )
+ {
+ iObserver->ReserveLocalMSServicesCompleted( KErrNone );
+ }
+ }
+ else
+ {
+ iPendingOperation = EStartMediaServer;
+ iServer.ReserveMediaServer( iId, iStatus );
+ SetActive();
+
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::CancelReserveLocalMSServicesL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::CancelReserveLocalMSServicesL()
+ {
+ __LOG( "CUPnPAVRenderingActive::CancelReserveLocalMSServicesL" );
+
+ if( iPendingOperation == EStartMediaServer )
+ {
+ Cancel();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ReleaseLocalMSServicesL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ReleaseLocalMSServicesL()
+ {
+ __LOG( "CUPnPAVRenderingActive::ReleaseLocalMSServicesL" );
+
+ ResetL();
+
+ if( iMediaServerResourceReserved )
+ {
+ iMediaServerResourceReserved = EFalse;
+
+ User::LeaveIfError( iServer.ReleaseMediaServer( iId ) );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetURIL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetURIL( const TDesC8& aURI,
+ const CUpnpItem& aItem )
+ {
+ __LOG( "CUPnPAVRenderingActive::SetURIL" );
+
+ ResetL();
+
+ CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
+ tempRequest->SetURIL( aURI );
+
+ iBuffer = tempRequest->ToDes8L();
+ iBufferPtr.Set( iBuffer->Des() );
+
+ iBuffer2 = aItem.ToDes8L();
+ iBufferPtr2.Set( iBuffer2->Des() );
+
+ CleanupStack::PopAndDestroy( tempRequest );
+
+ iPendingOperation = ESetURI;
+
+ iServer.SetURI( iId, iBufferPtr, iBufferPtr2, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetNextURIL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetNextURIL( const TDesC8& aURI,
+ const CUpnpItem& aItem )
+ {
+ __LOG( "CUPnPAVRenderingActive::SetNextURIL" );
+
+ ResetL();
+
+ CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
+ tempRequest->SetURIL( aURI );
+
+ iBuffer = tempRequest->ToDes8L();
+ iBufferPtr.Set( iBuffer->Des() );
+
+ iBuffer2 = aItem.ToDes8L();
+ iBufferPtr2.Set( iBuffer2->Des() );
+
+ CleanupStack::PopAndDestroy( tempRequest );
+
+ iPendingOperation = ESetNextURI;
+
+ iServer.SetNextURI( iId, iBufferPtr, iBufferPtr2, iStatus );
+ SetActive();
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PlayL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PlayL()
+ {
+ __LOG( "CUPnPAVRenderingActive::PlayL" );
+
+ ResetL();
+ iPendingOperation = EPlay;
+ iServer.Play( iId, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::StopL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::StopL()
+ {
+ __LOG( "CUPnPAVRenderingActive::StopL" );
+
+ ResetL();
+ iPendingOperation = EStop;
+ iServer.Stop( iId, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PauseL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PauseL()
+ {
+ __LOG( "CUPnPAVRenderingActive::PauseL" );
+
+ ResetL();
+ iPendingOperation = EPause;
+ iServer.Pause( iId, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetVolumeL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetVolumeL( TInt aVolumeLevel )
+ {
+ __LOG( "CUPnPAVRenderingActive::SetVolumeL" );
+
+ ResetL();
+ iPendingOperation = ESetVolume;
+ iServer.SetVolume( iId, aVolumeLevel, iRespBufSizePkg, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetVolumeL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetVolumeL()
+ {
+ __LOG( "CUPnPAVRenderingActive::GetVolumeL" );
+
+ ResetL();
+ iPendingOperation = EGetVolume;
+ iServer.GetVolume( iId, iRespBufSizePkg, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetMuteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetMuteL( TBool aMute )
+ {
+ __LOG( "CUPnPAVRenderingActive::SetMuteL" );
+
+ ResetL();
+ iPendingOperation = ESetMute;
+ iServer.SetMute( iId, aMute, iRespBufSizePkg, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::NewL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetMuteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::GetMuteL" );
+
+ ResetL();
+ iPendingOperation = EGetMute;
+ iServer.GetMute( iId, iRespBufSizePkg, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetPositionInfoL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetPositionInfoL()
+ {
+ __LOG( "CUPnPAVRenderingActive::GetPositionInfoL" );
+
+ ResetL();
+
+ iBuffer = HBufC8::NewL( KPositionInfoSize );
+ iBufferPtr.Set( iBuffer->Des() );
+ iBuffer2 = HBufC8::NewL( KPositionInfoSize );
+ iBufferPtr2.Set( iBuffer2->Des() );
+ iPendingOperation = EPositionInfo;
+ iServer.GetPositionInfo( iId, iBufferPtr, iBufferPtr2, iStatus );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ResetL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ResetL()
+ {
+ __LOG( "CUPnPAVRenderingActive::ResetL" );
+
+ if( IsActive() )
+ {
+ User::Leave( KErrServerBusy );
+ }
+
+ delete iBuffer; iBuffer = NULL;
+ delete iBuffer2; iBuffer2 = NULL;
+ iPendingOperation = ENone;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetURICompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetURICompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::SetURICompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerSetURICompleted )
+ {
+ iObserver->SetURIResult( KErrNone );
+ }
+ else
+ {
+ iObserver->SetURIResult( iStatus.Int() );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetNextURICompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetNextURICompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::SetNextURICompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerSetNextURICompleted )
+ {
+ iObserver->SetNextURIResult( KErrNone );
+ }
+ else
+ {
+ iObserver->SetNextURIResult( iStatus.Int() );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PlayCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PlayCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::PlayCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerPlayCompleted )
+ {
+ iObserver->InteractOperationComplete( KErrNone, EUPnPAVPlay );
+ }
+ else
+ {
+ iObserver->InteractOperationComplete( iStatus.Int(),
+ EUPnPAVPlay );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::StopCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::StopCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::StopCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerStopCompleted )
+ {
+ iObserver->InteractOperationComplete( KErrNone, EUPnPAVStop );
+ }
+ else
+ {
+ iObserver->InteractOperationComplete( iStatus.Int(),
+ EUPnPAVStop );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PauseCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PauseCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::PauseCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerPauseCompleted )
+ {
+ iObserver->InteractOperationComplete( KErrNone,
+ EUPnPAVPause );
+ }
+ else
+ {
+ iObserver->InteractOperationComplete( iStatus.Int(),
+ EUPnPAVPause );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetVolumeCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetVolumeCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::SetVolumeCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerSetVolumeCompleted )
+ {
+ iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );
+ }
+ else
+ {
+ iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetVolumeCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetVolumeCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::GetVolumeCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerGetVolumeCompleted )
+ {
+ iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );
+ }
+ else
+ {
+ iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetMuteCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetMuteCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::SetMuteCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerSetMuteCompleted )
+ {
+ iObserver->MuteResult( KErrNone, (TBool)iRespBufSize, ETrue );
+ }
+ else
+ {
+ iObserver->MuteResult( iStatus.Int(), 0, ETrue );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetMuteCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetMuteCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::GetMuteCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerGetMuteCompleted )
+ {
+ iObserver->MuteResult( KErrNone, iRespBufSize, ETrue );
+ }
+ else
+ {
+ iObserver->MuteResult( iStatus.Int(), 0, ETrue );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PositionInfoCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PositionInfoCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::PositionInfoCompleteL" );
+
+ if( iObserver )
+ {
+ if( iStatus.Int() == EAVControllerPositionInfoCompleted )
+ {
+ iObserver->PositionInfoResult( KErrNone, *iBuffer2, *iBuffer );
+ }
+ else
+ {
+ iObserver->PositionInfoResult( iStatus.Int(),
+ KNullDesC8,
+ KNullDesC8 );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::StartMediaServerCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::StartMediaServerCompleteL()
+ {
+ __LOG( "CUPnPAVRenderingActive::StartMediaServerCompleteL" );
+
+ if( iObserver )
+ {
+
+ if( iStatus.Int() == EAVControllerStartMediaServerCompleted )
+ {
+ iMediaServerResourceReserved = ETrue;
+ iObserver->ReserveLocalMSServicesCompleted( KErrNone );
+ }
+ else
+ {
+ iObserver->ReserveLocalMSServicesCompleted( iStatus.Int() );
+ }
+
+ }
+ }
+// end of file