camerauis/cameraapp/generic/src/cameracontroller/CamCameraCallback.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/CamCameraCallback.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,294 @@
+/*
+* 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:  Emualtor support for CCamCameraController part of cameraapp*
+*/
+
+
+
+#include "CamCameraCallback.h"
+#include "CameraappTestBitmapManager.h"
+#include <ecam.h>
+#include <AknIconUtils.h>
+#include <fbs.h>
+
+_LIT(KImageFile, "c:\\private\\101F857A\\capture.jpg");
+
+
+/*
+* CCamCameraCallBack* CCamCameraCallBack::NewL
+*/
+CCamCameraCallBack* CCamCameraCallBack::NewL( 
+                            MCameraObserver& aController )
+    {
+    CCamCameraCallBack* self = new( ELeave ) CCamCameraCallBack( aController );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+/*
+* CCamCameraCallBack::CCamCameraCallBack
+*/
+CCamCameraCallBack::CCamCameraCallBack( 
+                            MCameraObserver& aController )
+    : CActive( EPriorityLow ),
+      iController( aController )
+    {
+    }
+
+/*
+* CCamCameraCallBack::ConstructL()
+*/    
+void CCamCameraCallBack::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iBitmapManager = CCameraappTestBitmapManager::NewL();
+    }
+
+/*
+* CCamCameraCallBack::DoCancel
+*/
+void CCamCameraCallBack::DoCancel()
+    {
+    // Status update flags
+    iViewFinderFrame = EFalse;
+    iStillPrepareComplete = EFalse;
+    iReserveComplete = EFalse;
+    iPowerOnComplete = EFalse;
+    iCaptureImage = EFalse;
+    
+    // Error status associated with each request
+    iReserveError = KErrNone;
+    iPowerOnError = KErrNone;
+    }
+
+/*
+* CCamCameraCallBack::~CCamCameraCallBack
+*/
+CCamCameraCallBack::~CCamCameraCallBack()
+    {  
+    delete iBitmapManager;
+    Cancel();
+    }
+
+/*
+* CCamCameraCallBack::Cancel
+*/
+/*
+void CCamCameraCallBack::Cancel()
+    {
+    CActive::Cancel();
+    DoCancel();
+    }
+*/
+
+/*
+* CCamCameraCallBack::RunL
+*/
+void CCamCameraCallBack::RunL()
+    {
+    if ( iStillPrepareComplete )
+        {
+        DoStillPrepareComplete();
+        }
+    else if ( iReserveComplete )
+        {
+        DoReserveComplete();
+        }
+    else if ( iPowerOnComplete )
+        {
+        DoPowerOnComplete();
+        }
+    else if ( iCaptureImage )
+        {
+        DoCaptureImageL();
+        }
+    else
+        {
+        }
+    if ( iViewFinderFrame )
+        {
+        DoViewFinderFrame();
+        }
+    }
+
+/*
+* CCamCameraCallBack::SetActiveAndCompleteRequest
+*/
+void CCamCameraCallBack::SetActiveAndCompleteRequest()
+    {
+    SetActive();
+    TRequestStatus* statusPtr = &iStatus;
+    User::RequestComplete( statusPtr, KErrNone );
+    }
+
+
+/*
+* CCamCameraCallBack::ReserveCompleteRequest
+*/
+void 
+CCamCameraCallBack::ReserveCompleteRequest( const TInt aError )
+    {
+    iReserveError = aError;
+    iReserveComplete = ETrue;
+    if ( !IsActive() )
+        {
+        SetActiveAndCompleteRequest();    
+        }    
+    }
+
+/*
+* CCamCameraCallBack::PowerOnCompleteRequest
+*/
+void 
+CCamCameraCallBack::PowerOnCompleteRequest( const TInt aError )
+    {
+    iPowerOnError = aError;
+    iPowerOnComplete = ETrue;
+    if ( !IsActive() )
+        {
+        SetActiveAndCompleteRequest();    
+        }    
+    }
+    
+
+/*
+* CCamCameraCallBack::StillPrepareComplete
+*/
+void CCamCameraCallBack::StillPrepareComplete()
+    {
+    iStillPrepareComplete = ETrue;
+    if ( !IsActive() )
+        {
+        SetActiveAndCompleteRequest();
+        }
+    }
+
+/*
+* CCamCameraCallBack::SendViewFinderFrames
+*/ 
+void CCamCameraCallBack::SendViewFinderFrames()
+    {
+    iViewFinderFrame = ETrue;
+    if ( !IsActive() )
+        {
+        SetActiveAndCompleteRequest();
+        }
+    }
+
+/*
+* CCamCameraCallBack::StopViewFinderFrames
+*/    
+void CCamCameraCallBack::StopViewFinderFrames()
+	{
+	iViewFinderFrame = EFalse;
+	}
+
+/*
+* CCamCameraCallBack::RequestCaptureImage
+*/
+void CCamCameraCallBack::RequestCaptureImage()
+    {
+    iCaptureImage = ETrue;
+    if ( !IsActive() )
+        {
+        SetActiveAndCompleteRequest();
+        }
+    }
+
+/*
+* CCamCameraCallBack::DoReserveComplete
+*/
+void CCamCameraCallBack::DoReserveComplete()
+    {
+    iController.ReserveComplete( iReserveError );
+    iReserveComplete = EFalse;
+    }
+
+/*
+* CCamCameraCallBack::DoPowerOnComplete
+*/
+void CCamCameraCallBack::DoPowerOnComplete()
+    {
+    iController.PowerOnComplete( iPowerOnError );
+    iPowerOnComplete = EFalse;
+    }
+
+
+/*
+* CCamCameraCallBack::DoStillPrepareComplete
+*/
+void CCamCameraCallBack::DoStillPrepareComplete()
+    {
+    iStillPrepareComplete = EFalse;
+    }
+
+
+/*
+* CCamCameraCallBack::DoViewFinderFrame
+*/
+void CCamCameraCallBack::DoViewFinderFrame()
+    {
+    iController.ViewFinderFrameReady( iBitmapManager->NextBitmap() ); 
+    
+    if ( iViewFinderFrame )
+        {
+        if ( !IsActive() )
+            {
+            SetActiveAndCompleteRequest();
+            }
+        }
+    
+    }
+
+/*
+* CCamCameraCallBack::DoCaptureImageL
+*/
+void CCamCameraCallBack::DoCaptureImageL()
+    {
+    iCaptureImage = EFalse;
+    TInt imageIndex = 0;
+    
+    // Connect to fs
+    RFs fs;
+    User::LeaveIfError( fs.Connect() );
+    CleanupClosePushL( fs );
+    
+    // Open file and get size
+    RFile file;
+    TInt size = 0;
+    User::LeaveIfError( file.Open( fs, KImageFile, EFileRead ) );
+    CleanupClosePushL( file );    
+    User::LeaveIfError( file.Size( size ) );
+    
+    // Allocate memory
+    HBufC8* data = HBufC8::NewL( size );
+    TPtr8 dataDes = data->Des();    
+    
+    
+    // Read file content    
+    TInt read = file.Read( dataDes, size );
+    
+    // Clean up
+    CleanupStack::PopAndDestroy( &file );
+    CleanupStack::PopAndDestroy( &fs );
+    
+    // Give data to controller
+    iController.ImageReady( NULL, data, KErrNone );       
+    }
+
+
+//  End of File