graphics_plat/guestvideodriver_api/inc/guestvideodriver.h
author Faisal Memon <faisal.memon@nokia.com>
Fri, 20 Aug 2010 16:18:46 +0100
branchbug235_bringup_0
changeset 153 d8f29c307082
parent 146 4d1fe4a7ce83
child 185 c4bff43bf8eb
permissions -rwxr-xr-x
Add export of def files, add requesthandlerextension import library, and fix files to to unix line ending

// 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__