williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // include\mmf\server\mmfdatabuffer.h williamr@2: // williamr@2: // williamr@2: williamr@2: williamr@2: #ifndef __MMF_SERVER_DATABUFFER_H__ williamr@2: #define __MMF_SERVER_DATABUFFER_H__ williamr@2: williamr@2: #include williamr@2: williamr@2: williamr@2: #include williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Default buffer size if none is specified. williamr@2: */ williamr@2: static const TInt KMMFDataBufferDefaultBufferSize = 32; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This class is an abstract class for databuffers that can be presented in the form of a descriptor. williamr@2: A constructor is provided which instantiates a CMMFDescriptorBuffer buffer by default. williamr@2: williamr@2: @see CMMFDescriptorBuffer williamr@2: */ williamr@2: class CMMFDataBuffer : public CMMFBuffer williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CMMFDataBuffer* NewL(); williamr@2: IMPORT_C static CMMFDataBuffer* NewL(TInt aMaxBufferSize); williamr@2: /** williamr@2: Destructor. williamr@2: */ williamr@2: virtual ~CMMFDataBuffer() {}; williamr@2: williamr@2: /** williamr@2: Returns a reference to the data contained in the buffer (non const version). williamr@2: williamr@2: This is a virtual function that each derived class must implement. williamr@2: williamr@2: @return A reference to the buffer. williamr@2: */ williamr@2: virtual TDes8& Data() = 0; williamr@2: williamr@2: /** williamr@2: Returns a reference to the data contained in the buffer (const version). williamr@2: williamr@2: This is a virtual function that each derived class must implement. williamr@2: williamr@2: @return A reference to the buffer. williamr@2: */ williamr@2: virtual const TDesC8& Data() const = 0; williamr@2: williamr@2: /** williamr@2: Returns the buffer size, in bytes. williamr@2: williamr@2: This is a virtual function that each derived class must implement. williamr@2: williamr@2: @return The buffer size in bytes. williamr@2: */ williamr@2: virtual TUint BufferSize() const = 0; williamr@2: williamr@2: /** williamr@2: Sets the request size. williamr@2: williamr@2: Used where a component, such as a data source, williamr@2: may not be able to write to the entire maximum length of the buffer williamr@2: (variable bit rate codecs for example). williamr@2: williamr@2: This is a virtual function that each derived class must implement. williamr@2: williamr@2: @param aSize williamr@2: The requested size, in bytes. williamr@2: */ williamr@2: virtual void SetRequestSizeL(TInt aSize) = 0; williamr@2: protected: williamr@2: /** williamr@2: Protected constructor. williamr@2: */ williamr@2: CMMFDataBuffer(TUid aType): CMMFBuffer(aType) {}; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This class is a wrapper class to give a descriptor the same API as a CMMFDataBuffer. williamr@2: williamr@2: The purpose of this class is that components such as codecs can use CMMFDataBuffers transparently williamr@2: without having to be concerned with whether the buffer is a descriptor buffer williamr@2: or a transfer buffer. williamr@2: */ williamr@2: class CMMFDescriptorBuffer : public CMMFDataBuffer williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CMMFDescriptorBuffer* NewL(); williamr@2: IMPORT_C static CMMFDescriptorBuffer* NewL(TInt aMaxBufferSize); williamr@2: IMPORT_C ~CMMFDescriptorBuffer(); williamr@2: IMPORT_C void ReAllocBufferL(TInt aMaxBufferSize); williamr@2: virtual TDes8& Data(); williamr@2: virtual const TDesC8& Data() const; williamr@2: virtual void SetStatus(TBufferStatus aStatus); williamr@2: virtual void SetRequestSizeL(TInt aSize); williamr@2: virtual TUint BufferSize() const; williamr@2: virtual void SetPosition (TUint aPosition); williamr@2: private: williamr@2: CMMFDescriptorBuffer() : CMMFDataBuffer(KUidMmfDescriptorBuffer), iPtr(0,0,0) {}; williamr@2: void ConstructL(TInt aMaxBufferSize); williamr@2: private: williamr@2: TUint8* iData; williamr@2: TPtr8 iPtr; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This class is a wrapper class to give a transfer buffer/window the same API as a CMMFDataBuffer. williamr@2: The purpose of this class is so that components such as codecs can use CMMFDataBuffers transparently williamr@2: without having to be concerned with whether the buffer is a descriptor buffer williamr@2: or a transfer buffer. williamr@2: williamr@2: The class assumes that a valid RTransferWindow with a RTransferBuffer mapped in already exists. williamr@2: williamr@2: Note: williamr@2: CMMFTransferBuffers are not supported in EKA2. williamr@2: */ williamr@2: williamr@2: williamr@2: class RTransferWindow williamr@2: { williamr@2: // dummy class williamr@2: }; williamr@2: williamr@2: williamr@2: class CMMFTransferBuffer : public CMMFDataBuffer williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C static CMMFTransferBuffer* NewL(RTransferWindow& aTransferWindow, TUint aDataLength = 0); williamr@2: IMPORT_C ~CMMFTransferBuffer(); williamr@2: virtual TDes8& Data(); williamr@2: virtual const TDesC8& Data() const; williamr@2: virtual TUint BufferSize() const; williamr@2: virtual void SetRequestSizeL(TInt aSize); williamr@2: virtual void SetPosition (TUint aPosition); williamr@2: IMPORT_C RTransferWindow& TransferWindow(); williamr@2: IMPORT_C void MapOutBuffer(); williamr@2: IMPORT_C TInt UpdateTransferWindow(RTransferWindow& aTransferWindow, TUint aDataLength = 0); williamr@2: williamr@2: private: williamr@2: /** williamr@2: Private constructor. williamr@2: */ williamr@2: CMMFTransferBuffer() : CMMFDataBuffer(KUidMmfTransferBuffer), iPtr(0,0,0){}; williamr@2: void ConstructL(RTransferWindow& aTransferWindow, TUint aDataLength); williamr@2: williamr@2: private: williamr@2: RTransferWindow iTransferWindow; williamr@2: TBool iTransferWindowMappedInOK; williamr@2: TPtr8 iPtr; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This class is a wrapper class intended to provide support for shared I/O buffers under EKA2 williamr@2: This class, unlike other data buffers does not own memory - rather it contains a pointer to already allocated memory williamr@2: The purpose of this class is that components such as codecs can use CMMFDataBuffers transparently williamr@2: without having to be concerned with whether the buffer is a standard buffer or memory residing in shared I/O williamr@2: williamr@2: Users of this class need to be very careful when using buffers of this type. williamr@2: It cannot be assumed that a buffer of this type can be written/read by any process other than the current one - example - handing CMMFPtrBuffer to the file server may not work since the file server's process may not have access to write data buffer. williamr@2: */ williamr@2: class CMMFPtrBuffer : public CMMFDataBuffer williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CMMFPtrBuffer* NewL(); //unitialised, pointer will be set via SetPtr williamr@2: IMPORT_C static CMMFPtrBuffer* NewL(const TPtr8& aPtr); williamr@2: IMPORT_C ~CMMFPtrBuffer(); williamr@2: IMPORT_C void SetPtr(const TPtr8& aPtr); williamr@2: virtual TDes8& Data(); williamr@2: virtual const TDesC8& Data() const; williamr@2: virtual void SetStatus(TBufferStatus aStatus); williamr@2: virtual void SetRequestSizeL(TInt aSize); williamr@2: virtual TUint BufferSize() const; williamr@2: virtual void SetPosition (TUint aPosition); williamr@2: private: williamr@2: CMMFPtrBuffer() : CMMFDataBuffer(KUidMmfPtrBuffer), iPtr(0,0,0) {}; williamr@2: void ConstructL(const TPtr8& aPtr); williamr@2: private: williamr@2: TPtr8 iPtr; williamr@2: }; williamr@2: williamr@2: #endif