--- a/bsptemplate/asspandvariant/template_variant/camerasc/camerasc_plat.h Thu Aug 19 11:14:22 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__ */