camerauis/cameraapp/generic/src/audioplayer/camtoneplayerwrapper.cpp
changeset 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/audioplayer/camtoneplayerwrapper.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2007-2008 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:  Tone Wrapper implementation
+*
+*/
+
+
+
+#include <mdaaudiotoneplayer.h>
+#include <AudioPreference.h>
+
+#include "CamPanic.h"
+#include "camlogging.h"
+#include "mcamplayerobserver.h"
+#include "camtoneplayerwrapper.h"
+
+
+
+
+// ===========================================================================  
+// public constructors and destructor
+
+// ---------------------------------------------------------------------------
+// NewL <<static>>
+//
+// ---------------------------------------------------------------------------
+//
+CCamTonePlayerWrapper* 
+CCamTonePlayerWrapper::NewL( MCamPlayerObserver& aObserver )
+  {
+  CCamTonePlayerWrapper* self = 
+    new (ELeave) CCamTonePlayerWrapper( aObserver );
+
+  CleanupStack::PushL( self );
+  self->ConstructL();
+  CleanupStack::Pop( self );
+
+  return self;
+  }
+
+// ---------------------------------------------------------------------------
+// destructor <<virtual>>
+//
+// ---------------------------------------------------------------------------
+//
+CCamTonePlayerWrapper::~CCamTonePlayerWrapper()
+  {    
+  CancelPlay();
+
+  delete iTone;
+  iTone = NULL;
+  }
+
+
+// ===========================================================================  
+// from MMdaAudioToneObserver
+  
+// ---------------------------------------------------------------------------
+// MatoPrepareComplete <<virtual>>
+//
+// ---------------------------------------------------------------------------
+//
+void 
+CCamTonePlayerWrapper::MatoPrepareComplete( TInt aStatus )
+  {
+  PRINT( _L("Camera => CCamTonePlayerWrapper::MatoPrepareComplete") );
+  if( KErrNone == aStatus )
+    {
+    iState = CCamTonePlayerWrapper::EPlaying;
+    iTone->Play();
+#ifdef __WINSCW__
+    // The tone player does not give a callback on the emulator.
+    // Emulate a callback here.
+    MatoPlayComplete( KErrNone );
+#endif // __WINSCW__
+    }
+  else if( iCallback )
+    {
+    NotifyPlayComplete( aStatus );
+    }
+  else
+    {
+    // No action
+    }
+
+  PRINT( _L("Camera <= CCamTonePlayerWrapper::MatoPrepareComplete") );
+  }
+
+
+// ---------------------------------------------------------------------------
+// MatoPlayComplete <<virtual>>
+// ---------------------------------------------------------------------------
+//
+void 
+CCamTonePlayerWrapper::MatoPlayComplete( TInt aStatus )
+  {
+  NotifyPlayComplete( aStatus );
+  }
+
+
+
+// ===========================================================================  
+// other public
+
+// ---------------------------------------------------------------------------
+// PlayTone
+// ---------------------------------------------------------------------------
+//
+void 
+CCamTonePlayerWrapper::PlayTone( TInt    aToneInHz, 
+                                 TInt    aLengthInUs, 
+                                 TReal32 aVolumeInPercent,
+                                 TBool   aCallback )
+  {
+  PRINT2( _L("Camera => CCamTonePlayerWrapper::PlayTone, callback:%d iState[%s]"), 
+          aCallback, 
+          KCamTonePlayerWrapperStateNames[iState] );
+
+  iCallback = aCallback;
+
+  switch( iState )
+    {
+    // ---------------------------------
+    case CCamTonePlayerWrapper::EIdle:
+        {
+        iState = CCamTonePlayerWrapper::EInitializing;
+        iTone->SetVolume( aVolumeInPercent * iTone->MaxVolume() ); 
+        iTone->PrepareToPlayTone( aToneInHz, aLengthInUs );
+
+        break;
+        }
+    // ---------------------------------
+    case CCamTonePlayerWrapper::EInitializing:
+    case CCamTonePlayerWrapper::EPlaying:
+        {
+        // Do notification, if asked.
+        // This play request is simply skipped,
+        // as there's tone playing on the way right now.
+        if( aCallback ) 
+          {
+          iObserver.PlayComplete( KErrInUse, -1 );   //iState-1 is another suggestion.
+          }  
+        break;
+        }
+    default:
+      CamPanic( ECamPanicInvalidState );
+      break;
+    // ---------------------------------
+    }
+
+  PRINT( _L("Camera <= CCamAudioPlayerWrapper::Play") );
+  }
+
+
+// ---------------------------------------------------------------------------
+// CancelPlay
+// ---------------------------------------------------------------------------
+//
+void 
+CCamTonePlayerWrapper::CancelPlay()
+  {
+  if( iTone )
+    {
+    switch( iState )
+      {
+      case CCamTonePlayerWrapper::EPlaying:
+        iTone->CancelPlay();
+        // Because of the observer callback function MMdaAudioToneObserver::MatoPrepareComplete() is not called,
+        // so set state to idle directly
+        iState = CCamTonePlayerWrapper::EIdle;
+        break;
+      case CCamTonePlayerWrapper::EInitializing:
+        iTone->CancelPrepare();
+        // Because of the observer callback function MMdaAudioToneObserver::MatoPrepareComplete() is not called,
+        // so set state to idle directly
+        iState = CCamTonePlayerWrapper::EIdle;
+        break;
+      case CCamTonePlayerWrapper::EIdle:
+      default: 
+        break;
+      }
+    }
+  }
+
+
+
+// ===========================================================================  
+// other private
+
+// ---------------------------------------------------------------------------
+// NotifyPlayComplete
+// ---------------------------------------------------------------------------
+//
+void
+CCamTonePlayerWrapper::NotifyPlayComplete( TInt aStatus )
+  {
+  PRINT( _L("Camera => CCamTonePlayerWrapper::NotifyPlayComplete") );
+
+  // Play is complete, return to idle state.
+  iState = CCamTonePlayerWrapper::EIdle;
+
+  // Notify observer received status.
+  // Sound id is not usable here.
+  if( iCallback )
+    iObserver.PlayComplete( aStatus, -1 );
+
+  PRINT( _L("Camera <= CCamTonePlayerWrapper::NotifyPlayComplete") );
+  }
+
+
+
+// ===========================================================================  
+// private constructors
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void 
+CCamTonePlayerWrapper::ConstructL()
+  {
+  iTone = CMdaAudioToneUtility::NewL( 
+            *this, 
+            NULL, 
+            KAudioPriorityCameraTone,
+            TMdaPriorityPreference( KAudioPrefCamera ) );
+  }
+
+
+// ---------------------------------------------------------------------------
+// constructor
+// ---------------------------------------------------------------------------
+//
+CCamTonePlayerWrapper
+::CCamTonePlayerWrapper( MCamPlayerObserver& aObserver )
+  : iObserver     ( aObserver                     ),
+    iTone         ( NULL                          ),
+    iState        ( CCamTonePlayerWrapper::EIdle  ),
+    iCallback     ( EFalse                        )
+  {
+  }
+
+// ===========================================================================  
+// end of file