diff -r 000000000000 -r dfb7c4ff071f serialserver/packetloopbackcsy/inc/LoopbackQueue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serialserver/packetloopbackcsy/inc/LoopbackQueue.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,159 @@ +// Copyright (c) 2004-2009 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: +// This file implements a queue for the loopback driver +// +// + +/** + @file +*/ + +#ifndef __LOOPBACK_QUEUE_H__ +#define __LOOPBACK_QUEUE_H__ + +#include +#include "SLOGGER.H" +#include +#include +#include +#include + +#include "LoopbackConfig.h" +#include "LoopbackTimer.h" + +/** + A queue class of descriptors - all of the data for the desctiptors is contained in this class + */ +NONSHARABLE_CLASS(CTPtr8Queue) : CBase + { +public: + static CTPtr8Queue* NewL(TInt aBufferLength, TInt aQueueLength); + ~CTPtr8Queue(); + TPtr8& GetNewBuffer(); + TPtr8& DequeueFirstBuffer(); + const TPtr8& PeekFirstBuffer() const; + TInt QueueLength() const; + TBool IsEmpty() const; + TBool IsFull() const; + void Clear(); +private: + CTPtr8Queue(TInt aQueueLength); + void ConstructL(TInt aBufferLength, TInt aQueueLength); + + /** Index of the first buffer in the queue */ + TInt iFirstBuffer; + /** Index of the next buffer in the queue */ + TInt iNextBuffer; + /** True if the buffer is full (iFirstBuffer should also equal iNextBuffer */ + TBool iQueueFull; + + /** Pointer to the descriptors, each of which represents an element in the queue */ + CArrayFixFlat iDescriptors; + /** Buffer for all of the data in all of the elements of the queue */ + TDesC8 *iBuffer; + }; + +/** + Contains the read and write queues for a given port + */ +NONSHARABLE_CLASS(MLoopbackQueue) + { +public: + virtual ~MLoopbackQueue(); + virtual TPtrC8 PeekNextReadBuffer(TBool& aCompleteIfBufferNotFull) const = 0; + virtual void DiscardNextReadBuffer() = 0; + virtual void AppendToReadBuffer(TDesC8& aSrcData) = 0; + virtual TPtrC8 PeekNextWriteBuffer() const = 0; + virtual void DiscardNextWriteBuffer() = 0; + virtual TPtr8 AppendToWriteBuffer(TInt aLength) = 0; + virtual TBool IsWriteBufferEmpty() const = 0; + virtual TBool IsWriteBufferFull(TInt aLength) const = 0; + virtual TBool IsReadBufferEmpty() const = 0; + virtual TBool IsReadBufferFull(TInt aLength) const = 0; + virtual TInt BufferSize() const = 0; + virtual void Clear() = 0; + }; + +/** + Contains the read and write queues for a given port + */ +NONSHARABLE_CLASS(CPacketBufferQueue) : public CBase, public MLoopbackQueue + { +public: + static CPacketBufferQueue* NewL(TInt aBufferLength, TInt aQueueLength); + ~CPacketBufferQueue(); + void DiscardNextReadBuffer(); + TPtrC8 PeekNextReadBuffer(TBool& aCompleteIfBufferNotFull) const; + TPtr8 AppendToWriteBuffer(TInt aLength); + void DiscardNextWriteBuffer(); + TPtrC8 PeekNextWriteBuffer() const; + void AppendToReadBuffer(TDesC8& aSrcData); + TBool IsWriteBufferEmpty() const; + TBool IsWriteBufferFull(TInt aLength) const; + TBool IsReadBufferEmpty() const; + TBool IsReadBufferFull(TInt aLength) const; + TInt BufferSize() const; + void Clear(); +private: + CPacketBufferQueue(TInt aBufferLength); + void ConstructL(TInt aBufferLength, TInt aQueueLength); + + /** The length of each element in each queue */ + TInt iBufferLength; + + /** The read queue for a port */ + CTPtr8Queue *iReadQueue; + /** The write queue for a port */ + CTPtr8Queue *iWriteQueue; + }; + +/** + Contains the read and write queues for a given port + */ +NONSHARABLE_CLASS(CSerialBufferQueue) : public CBase, public MLoopbackQueue + { +public: + static CSerialBufferQueue* NewL(TInt aBufferLength, TCommConfigV01* aConfig); + ~CSerialBufferQueue(); + void DiscardNextReadBuffer(); + TPtrC8 PeekNextReadBuffer(TBool& aCompleteIfBufferNotFull) const; + void AppendToReadBuffer(TDesC8& aSrcData); + TPtrC8 PeekNextWriteBuffer() const; + void DiscardNextWriteBuffer(); + TPtr8 AppendToWriteBuffer(TInt aLength); + TBool IsWriteBufferEmpty() const; + TBool IsWriteBufferFull(TInt aLength) const; + TBool IsReadBufferEmpty() const; + TBool IsReadBufferFull(TInt aLength) const; + TInt BufferSize() const; + void Clear(); +private: + CSerialBufferQueue(TInt aBufferLength, TCommConfigV01* aConfig); + void ConstructL(TInt aBufferLength); + TPtrC8 NextBuffer(const TPtrC8& aBuffer, TBool& aTerminatorFound) const; + + + /** The length of each element in each queue */ + TInt iBufferLength; + + TCommConfigV01 *iConfig; + + HBufC8* iWriteBuffer; + TPtr8 iWriteData; + HBufC8* iReadBuffer; + TPtr8 iReadData; + }; + +#endif +