diff -r 000000000000 -r 7f85d04be362 upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp --- /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