graphics_plat/guestvideodriver_api/inc/guestvideodriver.h
author Faisal Memon <faisal.memon@nokia.com>
Fri, 13 Aug 2010 15:11:40 +0100
branchbug235_bringup_0
changeset 146 4d1fe4a7ce83
child 153 d8f29c307082
permissions -rwxr-xr-x
Support bug 235 by providing interface layers in graphics. First is the surface manager API, to be implemented in graphics.nokia, second is the adptation-to-adaption interface for the guestvideodriver and virtual video hardware. This allows graphics.nokia to provide a syborg version of surface manager driver based upon the guestvideodriver, implemented in the graphics.simulator package. This submission includes a version 2 syntax package definition file purely for those components of interest to bug 235. This makes selective compilation of the graphics package easier. A further submission will prune down the surface manager component in the graphics package.

// Copyright (c) 2010 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:
// Header file for guest video driver

#ifndef __GUESTVIDEODRIVER_H__
#define __GUESTVIDEODRIVER_H__

#include <e32cmn.h>
#include <e32std.h>
#include <babitflags.h>

#include "guestvideodrivercommon.h"

class RemoteFunctionCallData;

//Local request buffering size
const TInt KRequestBufferSize = 20000;

/**
 * Guest video driver user API. One instance exists per process.
 */
NONSHARABLE_CLASS(RGuestVideoDriver) : public RBusLogicalChannel
    {
public:
	// Default constructor
	IMPORT_C RGuestVideoDriver();

	// Destructor
	IMPORT_C ~RGuestVideoDriver();

	/**
	 * Opens this driver handle. Calls RBusLogicalChannel::DoCreate.
	 * 
	 * @return System wide error code
	 */
	IMPORT_C TInt Open();

	/**
	 * Executes a command 
	 * @param aRequestData Remote function call
	 */
	IMPORT_C void ExecuteCommand(RemoteFunctionCallData& aRequestData);

	/**
	 * Flushes any buffered commands.
	 */
	IMPORT_C void Flush();

	IMPORT_C TInt MapToHWAddress( const TInt aChunkHandle, TUint32& aHWAddress );

	IMPORT_C TInt EglGetSgHandles( const TUint64 aId, TUint64 *aSgHandles );

	/**
     * Gets Base Address of Frame Buffer
     * @param aHWAddress	returned Base Address
     *
	 * @note	A base address of 0 is invalid, and indicates a failure to
     *          obtain the base address.
	 */
	IMPORT_C TInt GetFrameBufferBaseAddress( TUint32& aHWAddress );


private:
	/*
	 Buffer, or send if it needs a reply, a command to the virtual video hardware
	 @param aRFC Remote function call to buffer
	 @return ETrue if buffering succeeds, otherwise the aRFC needs to be executed directly
	 */
	TBool BufferCommand( RemoteFunctionCallData& aRFC );

	// Sends buffered commands 
	void SendBuffer();

private:
	TBool     iIsOpen;
	RMutex    iThreadLock;
	/**
	 * Request buffer
	 */
	TUint32                   iProcessId;
	TBuf8<KRequestBufferSize> iBuffer;
    };


#endif // __GUESTVIDEODRIVER_H__