upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp
changeset 0 7f85d04be362
child 38 5360b7ddc251
--- /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