baseport/syborg/webcamera/webcamera_ldd.h
author Gareth Stockwell <gareth.stockwell@accenture.com>
Wed, 22 Sep 2010 15:40:40 +0100
branchgraphics-phase-3
changeset 111 345f1c88c950
parent 52 0dfaca43d90e
child 124 606eafc6d6a8
permissions -rw-r--r--
Fixes to syborg-graphicswrapper.vcproj These changes allow syborg-graphicswrapper to link against the hostthreadadapter and khronosapiwrapper libraries built by the graphics.simulator component. The .vcproj file uses relative paths, which requires that the following three packages are laid out as follows: os/ graphics adapt/ graphics.simulator qemu

/*
* Copyright (c) 2010 ISB.
* 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:
* ISB - initial contribution.
*
* Contributors:
*
* Description: USB driver for test
*
*/
#ifndef __deviceLDD_H__
#define __deviceLDD_H__

#include <kernel.h>
#include "webcamera_device.h"

#define BUFSIZE  (100*1024)
/**
 *Logical channel class
 *
 */
class DWebcameraLogicalDevice : public DLogicalDevice
	{
public:
	DWebcameraLogicalDevice();
	~DWebcameraLogicalDevice();
    /**
      Second stage constructor for DDriver1Factory.
      This must at least set a name for the driver object.

      @return KErrNone if successful, otherwise one of the other system wide error codes.
    */
    virtual TInt Install();
    /**
      Return the drivers capabilities.
      Called in the response to an RDevice::GetCaps() request.

      @param aDes User-side descriptor to write capabilities information into
    */
    virtual void GetCaps(TDes8& aDes) const;
    /**
      Called by the kernel's device driver framework to create a Logical Channel.
      This is called in the context of the user thread (client) which requested the creation of a Logical Channel
      (E.g. through a call to RBusLogicalChannel::DoCreate)
      The thread is in a critical section.

      @param aChannel Set to point to the created Logical Channel

      @return KErrNone if successful, otherwise one of the other system wide error codes.
    */
    virtual TInt Create(DLogicalChannelBase*& aChannel);
	};

/**
 *
 * 論理チャネルベースクラス
 *
 * 本クラスは、論理チャネル機能を提供する。
 *
 * @
 * @
 *
 */
class DWebcameraLogicalChannel : public DWebcameraLogicalChannelBase
	{
public:
	/**
	  Constructor
	*/
	DWebcameraLogicalChannel();
	/**
	  Destructor
	*/
	~DWebcameraLogicalChannel();
	/**
	  Called when a user thread requests a handle to this channel.
	*/
    virtual TInt RequestUserHandle(DThread* aThread, TOwnerType aType);
    /**
      Second stage constructor called by the kernel's device driver framework.
      This is called in the context of the user thread (client) which requested the creation of a Logical Channel
      The thread is in a critical section.

      @param aUnit The unit argument supplied by the client
      @param aInfo The info argument supplied by the client
      @param aVer The version argument supplied by the client

      @return KErrNone if successful, otherwise one of the other system wide error codes.
    */
	virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
	/**
	  Process a message for this logical channel.
	  This function is called in the context of a DFC thread.

	  @param aMessage The message to process.
	                  The iValue member of this distinguishes the message type:
	                  iValue==ECloseMsg, channel close message
	                  iValue==KMaxTInt, a 'DoCancel' message
	                  iValue>=0, a 'DoControl' message with function number equal to iValue
	                  iValue<0, a 'DoRequest' message with function number equal to ~iValue
	*/
	virtual void HandleMsg(TMessageBase* aMsg);
	/**
	  Process synchronous 'control' requests
	*/
	virtual TInt DoControl(TInt aFunction, TAny* a1, TAny* a2);
	/**
	  Process asynchronous requests.
	*/
	virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
	/**
	  Process cancelling of asynchronous requests.
	*/
	virtual void DoCancel(TUint aMask);
	/**
	  Called by PDD from ISR to indicate that a get oneflame operation has completed.
	*/
    virtual void GetOneFlameComplete(TInt aResult);
    /**
      Called by PDD from ISR to indicate that a get capture image operation has completed.
    */
    virtual void CaptureComplete(TInt aResult);
    /**
      DFC Callback which gets triggered after the PDD has signalled that get oneflame completed.
      This just casts aPtr and calls DoGetOneFlameComplete().
    */
    static  void GetOneFlameDfc(TAny* aPtr);
	/**
	  DFC Callback which gets triggered after the PDD has signalled that getting Capture image completed.
	  This just casts aPtr and calls DoCaptureComplete().
	*/
    static  void CaptureDfc(TAny* aPtr);
    /**
      Called from a DFC after the PDD has signalled that getting oneflame completed.
    */
	virtual void DoGetOneFlameComplete();
	/**
	  Called from a DFC after the PDD has signalled that getting Capture image completed.
	*/
	virtual void DoCaptureComplete();
    
	/**
	  Process a GetConfig control message. This writes the current driver configuration to a
	  RWebcameraDevice::TConfigBuf supplied by the client.
	*/
    TInt GetConfig(TDes8* aConfigBuf);
    /**
      Process a SetConfig control message. This sets the driver configuration using a
      RWebcameraDevice::TConfigBuf supplied by the client.
    */
    TInt SetConfig(const TDesC8* aConfigBuf);
//  void CurrentConfig(RWebcameraDevice::TConfig& aConfig);
    /**
     *Get the point to Physical channel.
     */
    DWebcameraDriverBase* Pdd();
    
private:
    /**
     *point to description sent by user-side.
     */
    TDes8* iReceiveDataDescriptor;
    /**
     *buffer for one flame.
     */
    HBuf8* iReceiveDataBuffer;
    /**
     *the status getting one flame.
     */
	TRequestStatus* iReceiveDataStatus;
    /**
     *DFC for getting one flame.
     */
	TDfc iReceiveDataDfc;
    /**
     *the result of the get oneflame operation.
     */
	TInt iReceiveDataResult;
    /**
     */
	TBool iReceiving;
    /**
     *point to description sent by user-side.
     */
    TDes8* iCaptureDescriptor;
    /**
     *buffer for capture image.
     */
	HBuf8* iCaptureBuffer;
    /**
     *the status getting capture image.
     */
	TRequestStatus* iCaptureStatus;
    /**
     *DFC of capture.
     */
	TDfc iCaptureDfc;
    /**
     *the result of the capture operation.
     */
	TInt iCaptureResult;
    /**
     *the status getting capture image.
     */
	TBool iCaptureing;
    /**
     *the status of request.
     */	
	TBool iRequesting;
    /**
     *point to memory used to save one frame or capture image.
     */
    HBuf8* iComm;
    /**
     *Physical adress of contiguous memory.
     */
	TUint32 iPhysAddr;
    /**
     *the size of buffer used to save one frame or capture image.
     */
	TInt iSize;
    /**
     *chunck.
     */
	DPlatChunkHw* iChunk;
    /**
     *Linear adress of chunck.
     */
	TUint8* iLAdr;
    /**
     *the size of received data.
     */
	TInt iSaveSize;
	};

#endif