--- /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;
+ }