bsptemplate/asspandvariant/template_variant/camerasc/camerasc_plat.h
changeset 247 d8d70de2bd36
parent 201 43365a9b78a3
child 250 ac18961ed598
child 259 57b9594f5772
--- a/bsptemplate/asspandvariant/template_variant/camerasc/camerasc_plat.h	Tue Jul 06 15:50:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,342 +0,0 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "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:
-// template\template_variant\camerasc\camerasc_plat.h
-// Implementation of the Template shared chunk camera physical device driver (PDD).
-// This file is part of the Template Base port
-// 
-//
-
-#ifndef __CAMERASC_PLAT_H__
-#define __CAMERASC_PLAT_H__
-
-#include <drivers/camerasc.h>
-#include <pixelformats.h>
-
-// Comment out the first #define, and uncomment the second #define in order to have debug
-// output for the shared chunk camera driver
-#define __KTRACE_CAM(s)
-//#define __KTRACE_CAM(s) s
-
-/** Total number of image capture requests that can be handled by the sensor at one time */
-const TInt KTotalCameraRequests = 2;
-
-/** NaviEngine specific panics that can be thrown by the shared chunk camera driver */
-enum TTemplateCameraScPddPanic
-	{
-	/** Start() has been called before SetConfig() */
-	ENotConfigured,
-	/** Unable to power down the camera hardware */
-	ECannotPowerDown,
-	/** Buffer passed to DSensorIf::FrameSizeCaps() by LDD is too small */
-	ECapsBufferTooSmall
-	};
-
-/**
-The physical device (factory class) for the NaviEngine shared chunk camera driver.
-
-This class is used by the device driver framework to instantiate one or more shared chunk camera driver
-PDDs.  An instance of one PDD is allowed for each physical sensor on the device.
-*/
-class DTemplateCameraScPddFactory : public DPhysicalDevice
-	{
-public:
-
-	DTemplateCameraScPddFactory();
-	~DTemplateCameraScPddFactory();
-	virtual TInt Install();
-	virtual void GetCaps(TDes8 &aDes) const;
-	virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-	virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-	TBool IsUnitOpen(TInt aUnit);
-	TInt SetUnitOpen(TInt aUnit, TBool aIsOpen);
-
-private:
-
-	/** The DFC queue to be used by both the LDD and the PDD to serialise access to the PDD. */
-	TDynamicDfcQue*	iDfcQ;
-	/** Mask to keep track of which units have a channel open on them. */
-	TUint			iUnitsOpenMask;
-	/** A mutex to protect access to the unit information mask. */
-	NFastMutex		iUnitInfoMutex;
-
-	friend class DTemplateCameraScPdd;
-	};
-
-/**
-Defines the interface for notification of an image being captured.
-
-Used by concrete instances of the DSensorIf abstract base class in order to notify an observer class
-(typically an DCameraScPdd derived class) that an image has been captured for processing.
-*/
-class MSensorObserver
-	{
-public:
-
-	virtual TInt NotifyImageCaptureEvent(TInt aResult, TLinAddr& aLinAddr, TPhysAddr& aPhysAddr) = 0;
-	};
-
-/**
-Defines an abstract base class for implementing concrete classes for camera sensors.
-
-This class provides an abstract interface to the sensor;  one class is derived from this and implemented
-for each sensor available to the camera driver.
-*/
-class DSensorIf : public DBase
-	{
-public:
-
-	/**
-	Second phase constructor for the sensor interface.  Acquires any resources required for communication with the sensor.
-	When this returns, the sensor is ready for use.
-	*/
-	virtual TInt DoCreate() = 0;
-
-	/**
-	Obtains information regarding the frame sizes and frame rates supported for a given combination of capture mode and pixel format.
-	@param	aCaptureMode		The capture mode for which to obtain the information.
-	@param	aUidPixelFormat		The pixel format for which to obtain the information.
-	@param	aFrameSizeCapsBuf	A referenced to an array of packaged SDevCamFrameSize structures into which to place the information.
-	@return	KErrNone if successful, else one of the other system wide error codes.
-	*/
-	virtual TInt FrameSizeCaps(TDevCamCaptureMode aCaptureMode, TUidPixelFormat aUidPixelFormat, TDes8& aFrameSizeCapsBuf) = 0;
-
-	/**
-	Obtains the capabilities of the sensor.  This either interrogates the sensor to find out its capabilities, or hard codes
-	them into aCameraCaps, or a combination of the two.
-	@param	aCameraCaps		A reference to a ptr to the structure into which to place the capabilities of the sensor.
-							This structure is of a variable size and contains the fixed part, followed by an array of
-							SDevCamPixelFormat structures.
-	@return	The size of the variable length structure pointed to by aCameraCaps if successful, else one of the other
-			system wide error codes.
-	*/
-	virtual TInt GetCaps(TCameraCapsV02*& aCameraCaps) = 0;
-
-	/**
-	Powers up the sensor.
-	*/
-	virtual TInt RequestPower() = 0;
-
-	/**
-	Powers down the sensor.
-	*/
-	virtual TInt RelinquishPower() = 0;
-
-	/**
-	Configures the sensor for capture in the configuration previously set by SetConfig(), and begins capture into the
-	address pointed to by aLinAddr and aPhysAddr.  Both of these addresses point to the same buffer;  The address used
-	by the sensor is hardware dependent.
-	@param	aCaptureMode	Whether to capture in video, viewfinder or single image mode.
-	@param	aLinAddr		The virtual address of the buffer into which to capture the image.
-	@param	aPhysAddr		The physical address of the buffer into which to capture the image.
-	@return	KErrNone if successful, otherwise one of the other system wide error codes.
-	@pre	SetConfig() must first have been called.
-	*/
-	virtual TInt Start(TDevCamCaptureMode aCaptureMode, TLinAddr aLinAddr, TPhysAddr aPhysAddr) = 0;
-
-	/**
-	Sets the address of the buffer into which the next image will be captured.  If is common for this to be called by Start() as
-	well as by the class that owns the sensor interface.
-	@param	aLinAddr		The virtual address of the buffer into which to capture the image.
-	@param	aPhysAddr		The physical address of the buffer into which to capture the image.
-	@return	KErrNone if successful, otherwise one of the other system wide error codes.
-	@pre	Start() must first have been called.
-	*/
-	virtual TInt CaptureNextImage(TLinAddr aLinAddr, TPhysAddr aPhysAddr) = 0;
-
-	/**
-	Stops any image capturing that is currently underway.  It is safe to call this without having called Start().
-	@return	KErrNone if successful, otherwise one of the other system wide error codes.
-	*/
-	virtual TInt Stop() = 0;
-
-	/**
-	Saves a configuration specifying such details as dimensions and pixel format in which the sensor should
-	capture images.  The shared implementation of this contains generic code, but this can be overridden by
-	derived classes if desired.
-	@param	aConfig	A TCameraConfigV02 structure containing the settings to be used.
-	@return	KErrNone if successful, otherwise one of the other system wide error codes.
-	*/
-	virtual TInt SetConfig(const TCameraConfigV02& aConfig);
-
-protected:
-
-	/** Pointer to the observer to call when a frame of data is available */
-	MSensorObserver*	iObserver;
-	/** ETrue if capture is under way, else EFalse*/
-	TBool				iEnabled;
-	/** Width of the frames to be captured in pixels */
-	TInt				iWidth;
-	/** Height of the frames to be captured in pixels */
-	TInt				iHeight;
-	/** Number of bytes from the start of one line to the start of the next */
-	TInt				iLineOffset;
-	/** The number of requests setup ready for transfer */
-	TInt				iPendingRequests;
-	/** The next request to be setup ready for transfer */
-	TUint				iNextRequest;
-	/** The configuration in which to capture images */
-	TCameraConfigV02	iConfig;
-	};
-
-/**
-This class provides an abstract interface to the Template sensor.
-*/
-class DTemplateSensorIf : public DSensorIf
-	{
-public:
-
-	DTemplateSensorIf(MSensorObserver& aObserver, TDfcQue* aDFCQueue);
-	TInt DoCreate();
-	~DTemplateSensorIf();
-	TInt BufferDoneCallback(TInt aResult);
-	void FillBuffer(TLinAddr aBuffer);
-	TInt FrameSizeCaps(TDevCamCaptureMode aCaptureMode, TUidPixelFormat aUidPixelFormat, TDes8& aFrameSizeCapsBuf);
-	TInt GetCaps(TCameraCapsV02*& aCameraCaps);
-	TInt RequestPower();
-	TInt RelinquishPower();
-	TInt Start(TDevCamCaptureMode aCaptureMode, TLinAddr aLinAddr, TPhysAddr aPhysAddr);
-	TInt Stop();
-	TInt CaptureNextImage(TLinAddr aLinAddr, TPhysAddr aPhysAddr);
-
-	// Static callbacks for various sensor related asynchronous functions
-	static TInt HostPowerCallback(TAny* aPtr, TAny* aPoweredUp);
-	static TInt SensorClkReqCallback(TAny* aPtr);
-
-private:
-
-	/** X position at which to display the logo */
-	TInt		iX;
-	/** Y position at which to display the logo */
-	TInt		iY;
-	/** Current X direction and speed at which the logo is moving */
-	TInt		iXDirection;
-	/** Current Y direction and speed at which the logo is moving */
-	TInt		iYDirection;
-	/** Number of nanokernel ticks that represent the time to capture one frame */
-	TInt		iImageTimerTicks;
-	/** Timers used for emulating images being captured */
-	NTimer		iImageTimers[KTotalCameraRequests];
-	/** DFC queue used for completing image capture requests */
-	TDfcQue*	iDFCQueue;
-	/** DFCs used for image capture timer callbacks happeing in our DFC thread */
-	TDfc		*iImageTimerDFCs[KTotalCameraRequests];
-    
-    /* Used for cheesy animation effect */
-    TUint8 iCounter;
-    TBool iFlipSwitch;
-	};
-
-/**
-The physical device driver for the NaviEngine shared chunk camera driver.
-
-This is the concrete implementation of the abstract DCameraScPdd base class.  One instance of this
-class will be created by the factory class per physical sensor on the device.  Only one instance
-per sensor can be instantiated at any given time.  Access to the sensor itself is achieved via the
-appropriate DSensorIf derived class.
-*/
-class DTemplateCameraScPdd : public DCameraScPdd, public MSensorObserver
-	{
-private:
-
-	/** States in which the channel can be */
-	enum TState
-		{
-		/** Channel created but not yet configured */
-		EUnconfigured,
-		/** Channel configured but idle and not capturing images */
-		EConfigured,
-		/** Channel capturing images */
-		ECapturing
-		};
-
-public:
-
-	DTemplateCameraScPdd();
-	TInt DoCreate(DTemplateCameraScPddFactory* aPhysicalDevice, TInt aUnit);
-	~DTemplateCameraScPdd();
-	TDfcQue* DfcQ(TInt aUnit);
-	void Caps(TDes8& aCapsBuf) const;
-	void GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo);
-	TInt SetConfig(const TDesC8& aConfigBuf);
-	TInt Start(TDevCamCaptureMode aCaptureMode,TLinAddr aLinAddr, TPhysAddr aPhysAddr);
-	TInt CaptureNextImage(TLinAddr aLinAddr, TPhysAddr aPhysAddr);
-	TInt Stop();
-	void PowerDown();
-	TInt CapsSize();
-	TInt FrameSizeCaps(TDevCamCaptureMode aCaptureMode, TUidPixelFormat aUidPixelFormat, TDes8& aFrameSizeCapsBuf);
-
-	/**
-	Sets the sensor brightness to the desired setting.
-
-	@param aValue A verified brightness setting.
-	@return KErrNone if successful, KErrNotSupported if not supported.
-	*/
-	TInt SetBrightness(TUint aBrightness);
-
-	/**
-	Sets the sensor contrast to the desired setting.
-
-	@param aValue A verified contrast setting.
-	@return KErrNone if successful, KErrNotSupported if not supported.
-	*/
-	TInt SetContrast(TUint aContrast);
-
-	/**
-	Sets the sensor color effect to the desired setting.
-
-	@param aValue A verified color effect setting.
-	@return KErrNone if successful, KErrNotSupported if not supported.
-	*/
-	TInt SetColorEffect(TUint aColorEffect);
-
-private:
-
-	TInt NotifyImageCaptureEvent(TInt aResult, TLinAddr& aLinAddr, TPhysAddr& aPhysAddr);
-
-private:
-
-	/** The unit number of this channel.  The unit number determines the sensor used. */
-	TInt						iUnit;
-	/** A pointer to the PDD factory that created this device. */
-	DTemplateCameraScPddFactory* iPhysicalDevice;
-	/** Ptr to a buffer large enough to hold the variable sized capabilities structure. */
-	TUint8*						iCapsBuffer;
-	/** The size of the variable sized capabilities structure. */
-	TUint						iCapsSize;
-	/** The capabilities of this device. */
-	TCameraCapsV02*				iCaps;
-	/** The current configuration of this device. */
-	TCameraConfigV02			iConfig;
-	/** The current capture mode of the camera. */
-	TDevCamCaptureMode			iCaptureMode;
-	/** Abstracted interface to the sensor */
-	DSensorIf*					iSensor;
-	/** Current state of the channel (configured, capturing etc) */
-	TState						iState;
-	};
-
-/**
-XXX - This structure holds information pertaining to the logo to be rendered in
-"photos" returned by the template camera driver.  This structure is temporary and
-should be removed when changing this template into a "real" camera driver.
-*/
-struct SLogo
-	{
-	TUint	iWidth;
-	TUint	iHeight;
-	TUint8	iPixelData[80 * 61 * 3 + 1];
-    TUint8  iPixelData2[80 * 61 * 3 + 1];
-	};
-
-#endif /* __CAMERASC_PLAT_H__ */