internetradio2.0/commandchannelsrc/irctrlcmdobserver.cpp
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/commandchannelsrc/irctrlcmdobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irctrlcmdobserver.h"
+#include "irctrlcommand.h"
+#include "irdebug.h"
+#include "ircontrolparams.h"
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRCtrlCmdObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCtrlCmdObserver* CIRCtrlCmdObserver::NewL
+	(MIRCtrlCmdObserver* aObserver,MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewL" );
+    CIRCtrlCmdObserver* self = CIRCtrlCmdObserver::NewLC(aObserver,aStream);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewL - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIRCtrlCmdObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCtrlCmdObserver* CIRCtrlCmdObserver::NewLC
+	(MIRCtrlCmdObserver* aObserver,MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewLC" );
+    CIRCtrlCmdObserver* self = new (ELeave) CIRCtrlCmdObserver;
+    CleanupStack::PushL(self);
+    self->ConstructL(aObserver,aStream);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewLC - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRCtrlCmdObserver
+//  Default destructor calls Cancel function which cancel the active request 
+// ---------------------------------------------------------------------------
+//
+CIRCtrlCmdObserver::~CIRCtrlCmdObserver()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::~CIRCtrlCmdObserver" );
+    if ( iVolumeTimer->IsActive() )
+        {
+        iVolumeTimer->Cancel();            
+        }
+    delete iVolumeTimer;    
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::~CIRCtrlCmdObserver - Exiting." );
+    }
+    
+// ---------------------------------------------------------------------------
+// Function : SentRequest
+// Function sends request to handle events represented by TIRControlCommmand
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::SentRequest( TIRControlCommmand aCommand, TInt aValue )
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::SentRequest" );
+   if(aCommand==EPlayerChanged)
+	    {
+	    iObserver->PlayerChanged();	
+	    }
+    else
+	    {
+	    iObserver->MCtrlCommand( aCommand, aValue );
+	    }
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::SentRequest - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : FilltheBuffer
+// Function sends request to fill the buffer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::FilltheBuffer(TDes8& aInputBuffer)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FilltheBuffer" );
+    iStream->FilltheBuffer(aInputBuffer);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FilltheBuffer - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : FetchVolume
+// Function sends request to get the current volume index
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRCtrlCmdObserver::FetchVolume()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FetchVolume" );
+    return iObserver->FetchVolume();
+    }
+
+// ---------------------------------------------------------------------------
+// Function : AudioFadeInOut
+// Function is called for audio Fade In Fade Out Effects
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::AudioFadeInOut
+	(TIRControlCommmand& aCommand,TInt aValue)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut" );
+    iPersistentVolume = aValue;    
+    if ( EBufferFadeIn == aCommand )
+        {
+		//Audio Fade In effect
+        if ( iVolumeTimer->IsActive() )
+            {
+			//cancels the previous request if pending
+            iVolumeTimer->Cancel();            
+            }
+        if ( !iVolumeTimer->IsActive() )
+            {
+			//starts the fade in effect
+            iVolumeLevel = 0;            
+            TTimeIntervalMicroSeconds32 interval(KVolumeTime);
+            iVolumeTimer->Start(interval,interval,TCallBack(
+			CIRCtrlCmdObserver::StartAudioFadeIn,this));
+            }
+        }
+    else if ( EBufferFadeOut == aCommand )
+        {
+		//Audio Fade Out effect
+        if ( iVolumeTimer->IsActive() )
+            {
+			//cancels the previous request if pending
+            iVolumeTimer->Cancel();            
+            }
+        if ( !iVolumeTimer->IsActive() )
+            {
+			//starts the fade out effect
+            iVolumeLevel = iPersistentVolume;
+            TTimeIntervalMicroSeconds32 interval(KDownVolumeTime);
+            iVolumeTimer->Start(interval,interval,TCallBack(
+			CIRCtrlCmdObserver::StartAudioFadeOut,this));
+            }
+        }
+    else
+		{
+        IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut - Exiting." );    
+        return;    
+		}        
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut - Exiting." );   
+    }
+
+// ---------------------------------------------------------------------------
+// Function : DoAudioFadeOut
+// Function is used to sent request start audio Fade Out
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::DoAudioFadeOut()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::DoAudioFadeOut" );
+    //requests to start Audio Fade Out
+	iObserver->DoAudioFadeOut();
+    }
+
+// ---------------------------------------------------------------------------
+// Function : ConstructL
+// Function does all the initializations
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRCtrlCmdObserver::ConstructL(MIRCtrlCmdObserver* aObserver,
+    MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::ConstructL" );
+    iObserver = aObserver;
+    iStream = aStream;
+    iVolumeTimer = CPeriodic::NewL(CPeriodic::EPriorityStandard);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : CIRCtrlCmdObserver
+// Function is the default constructor, sets the CActive priority, Line status
+// ---------------------------------------------------------------------------
+//
+CIRCtrlCmdObserver::CIRCtrlCmdObserver()
+    {
+    //No implementation    
+    }    
+    
+// ---------------------------------------------------------------------------
+// Function : StartAudioFadeIn
+// Function Starts audio Fade In effects
+// ---------------------------------------------------------------------------
+//
+TInt CIRCtrlCmdObserver::StartAudioFadeIn(TAny* aPtr)     
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeIn" );
+    CIRCtrlCmdObserver* self = static_cast<CIRCtrlCmdObserver*>(aPtr);
+    if( self )
+		{
+		self->UpdateVolumeInc();
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeIn - Exiting." );
+    return KErrNone;        
+    }
+ 
+// ---------------------------------------------------------------------------
+// Function : StartAudioFadeOut
+// Function Starts audio Fade Out effects
+// ---------------------------------------------------------------------------
+//
+TInt CIRCtrlCmdObserver::StartAudioFadeOut(TAny* aPtr)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeOut" );
+    CIRCtrlCmdObserver* self = static_cast<CIRCtrlCmdObserver*>(aPtr);
+    if( self )
+		{
+		self->UpdateVolumeDec();
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeOut - Exiting." );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : UpdateVolumeInc
+// Function does the Fade In effect
+// ---------------------------------------------------------------------------
+//
+void CIRCtrlCmdObserver::UpdateVolumeInc()     
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeInc" );
+    //less than zero condition check the value will never be less than zero
+	//even when when we start 
+    //primary check is volume becoming greater than equal to current volume 
+	//level stored in iPersistentVolume
+    if ( iVolumeTimer->IsActive()
+		&& ( ( 0 <= iVolumeLevel ) 
+		&& ( iPersistentVolume >= iVolumeLevel ) ) )
+        {
+		//if the time is volume level is not equal to current volume stored in
+		// iPersistentVolume
+		//it will initiates fade in effect
+        iCommand = EBufferFadeIn;
+        iObserver->MCtrlCommand(iCommand,iVolumeLevel);
+        iVolumeLevel++;
+        }
+    else
+        {
+        if ( iVolumeTimer->IsActive() )
+            {
+            iVolumeTimer->Cancel();            
+            }
+        }
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeInc - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : UpdateVolumeDec
+// Function does the Fade In effect 
+// ---------------------------------------------------------------------------
+//
+void  CIRCtrlCmdObserver::UpdateVolumeDec()     
+    {
+	IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeDec" );
+	//primary check is volume becoming lesser than equal to zero level 
+	if ( iVolumeTimer->IsActive()
+		&& ( ( 0 <= iVolumeLevel ) 
+		&& ( iPersistentVolume >= iVolumeLevel ) ) )
+		{
+		//if the time is volume level is not equal to current zero
+		//it will initiates fade out effect
+		iCommand = EBufferFadeOut;
+		iObserver->MCtrlCommand(iCommand,iVolumeLevel);
+		iVolumeLevel--;
+		}
+	else
+		{
+		if ( iVolumeTimer->IsActive() )
+			{
+			iVolumeTimer->Cancel();
+			}
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeDec - Exiting." );    
+    }
+
+