camerauis/cameraapp/generic/src/cameracontroller/camflashsimulator.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/cameracontroller/camflashsimulator.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 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:  Simulator for flash recharging
+*
+*/
+
+
+
+// ===========================================================================
+// Includes
+#include <ECam.h>            // TECAMEvent
+#include <ecamadvsettings.h> // ECam event ids
+
+#include "camlogging.h"
+#include "camcameracontroller.h"
+#include "camflashsimulator.h"
+
+
+// ===========================================================================
+// Local constants
+static const TUint KEventInterest = ECamCameraEventClassNone
+                                  | ECamCameraEventClassImage;
+
+
+// ===========================================================================
+// Methods
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::CCamFlashSimulator
+// ---------------------------------------------------------------------------
+//
+CCamFlashSimulator::CCamFlashSimulator( CCamCameraController& aController )
+  : iController   ( aController ),
+    iError        ( KErrNone    ),
+    iFlashRequired( EFalse      ),
+    iFlashReady   ( ETrue       )
+  {
+  }
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::~CCamFlashSimulator
+// ---------------------------------------------------------------------------
+//    
+CCamFlashSimulator::~CCamFlashSimulator()
+  {
+  iController.DetachObserver( this );
+
+  if( iRechargeTimer )
+    {
+    iRechargeTimer->Cancel();
+    delete iRechargeTimer;
+    }
+  // DeleteProperty();
+  }
+    
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::NewL
+// ---------------------------------------------------------------------------
+// 
+CCamFlashSimulator*
+CCamFlashSimulator::NewL( CCamCameraController& aController )
+  {
+  CCamFlashSimulator* self = 
+      new (ELeave) CCamFlashSimulator( aController );
+  CleanupStack::PushL( self );
+  self->ConstructL();
+  CleanupStack::Pop(); // self
+  return self;
+  }
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::ConstructL
+// ---------------------------------------------------------------------------
+//
+void
+CCamFlashSimulator::ConstructL()
+  {
+  iRechargeTimer = CPeriodic::NewL( EPriorityNormal );
+
+  iController.AttachObserverL( this, KEventInterest );
+  }
+    
+
+// ---------------------------------------------------------------------------
+// HandleCameraEventL <<virtual>>
+// ---------------------------------------------------------------------------
+//
+void 
+CCamFlashSimulator::HandleCameraEventL( TInt              aStatus, 
+                                        TCamCameraEventId aEventId, 
+                                        TAny*             aEventData /*=NULL*/ )
+  {
+  switch( aEventId )
+    {
+    case ECamCameraEventImageInit :
+      {
+      StartRecharging();
+      break;
+      }
+    
+    default :
+      {
+      break;
+      }
+    }
+  }
+
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::SetFlashRequired
+// ---------------------------------------------------------------------------
+//
+void
+CCamFlashSimulator::SetFlashRequired( TBool aFlashRequired )
+  {
+  iFlashRequired = aFlashRequired;
+  }
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::SetFlashError
+// ---------------------------------------------------------------------------
+//    
+void
+CCamFlashSimulator::SetFlashError( TBool aFlashError )
+  {
+  iError = aFlashError;
+  }
+    
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::StartRecharging
+// ---------------------------------------------------------------------------
+//    
+void
+CCamFlashSimulator::StartRecharging( TBool aError )
+  {
+  if( iRechargeTimer )
+    {
+    // Empty the flash, and publish the property value
+    iFlashReady = EFalse;  
+    
+    // The possible error shall be published when the recharging is done
+    iError = aError;
+    
+    // Start recharging timer
+    iRechargeTimer->Cancel();
+    iRechargeTimer->Start( KSimulatedChargingTime,
+                           KMaxTInt32,
+                           TCallBack( RechargeTimerCallback, this ) );    
+
+    // Send "flash not ready" event to Camera Controller
+    NotifyController();
+    }
+  }
+
+
+// ---------------------------------------------------------------------------
+// NotifyController
+// ---------------------------------------------------------------------------
+//
+void 
+CCamFlashSimulator::NotifyController()
+  {
+  PRINT2( _L("Camera => CCamFlashSimulator::NotifyController, flash ready:%d, status:%d"), iFlashReady, iError )
+
+  const TUid eventId( iFlashReady 
+                    ? KUidECamEventFlashReady 
+                    : KUidECamEventFlashNotReady );   
+  const TECAMEvent event( eventId, iError );
+
+  iController.HandleEvent( event );
+
+  PRINT ( _L("Camera <= CCamFlashSimulator::NotifyController") );
+  }
+
+// ---------------------------------------------------------------------------
+// CCamFlashSimulator::RechargeTimerCallback
+// ---------------------------------------------------------------------------
+//
+TInt
+CCamFlashSimulator::RechargeTimerCallback( TAny* aSelf )
+  {
+  CCamFlashSimulator* self = static_cast<CCamFlashSimulator*>( aSelf );
+  if( self )
+    {
+    self->iRechargeTimer->Cancel();
+    // Set the flash to ready state and publish value
+    self->iFlashReady = ETrue;
+
+    // Send "flash ready" event to Camera Controller
+    self->NotifyController();
+    }
+  return KErrNone;    
+  }