diff -r b7e5ed8c1342 -r e71858845f73 systemswstubs/examplecommonisc/IscDataTransmissionBase/src/IscBufferQueue.cpp --- a/systemswstubs/examplecommonisc/IscDataTransmissionBase/src/IscBufferQueue.cpp Tue Sep 07 08:19:48 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,263 +0,0 @@ -/* -* Copyright (c) 2007 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: Implementation of DIscBufferQueue class -* -*/ - - - -// INCLUDE FILES - -#include -#include "IscBufferQueue.h" -#include "IscQueue.h" -#include "IscTrace.h" - -#ifdef __WINS__ -#include -#endif - -// EXTERNAL DATA STRUCTURES -#ifdef __WINS__ -extern CRITICAL_SECTION g_IscDTBCriticalSection; -#endif - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS -const TInt KIscInterruptLevelTwo( 2 ); - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::DIscBufferQueue -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -DIscBufferQueue::DIscBufferQueue() - : iCount( NULL ), - iBuffers( NULL ), - iBuffersQueue( NULL ) - { - } - - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::Construct -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -TInt DIscBufferQueue::Construct( - TUint16 aSize, - TUint16 aCount, - TUint8* &aCurrentAddress ) - { - C_TRACE( ( _T( "DIscBufferQueue::Construct(0x%x, 0x%x, 0x%x) 0x%x, 0x%x" ), aSize, aCount, &aCurrentAddress, iBuffers, iBuffersQueue ) ); - - TInt r = KErrNone; - if ( aSize == 0 || aCount == 0 ) - return KErrArgument; - - iCount = aCount; - iBuffers = new TUint32*[aCount]; - ASSERT_RESET_ALWAYS( iBuffers, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); - iBuffersQueue = new DIscQueue( iBuffers, aCount ); - ASSERT_RESET_ALWAYS( iBuffersQueue, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); - - for ( TInt i = 0; i < aCount; i++ ) - { - TPtr8* pTmp; -#ifndef __WINS__ - pTmp = new TPtr8 ( ( TUint8* )aCurrentAddress, aSize ); - ASSERT_RESET_ALWAYS( pTmp, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); -#else - TAny* ptr = Kern::Alloc( aSize ); - ASSERT_RESET_ALWAYS( ptr, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); - pTmp = new TPtr8( ( TUint8* )ptr, 0, aSize ); - ASSERT_RESET_ALWAYS( pTmp, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); -#endif // __WINS__ - - // Put the buffer into RX resource queue. - r = iBuffersQueue->Add( pTmp ); - - aCurrentAddress += aSize; - } - - C_TRACE( ( _T( "DIscBufferQueue::Construct - return 0x%x" ),r ) ); - - return r; - } - - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::New -// Construct a new queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -DIscBufferQueue* DIscBufferQueue::New( - TUint16 aSize, - TUint16 aCount, - TUint8*& aCurrentAddress ) - { - C_TRACE( ( _T( "DIscBufferQueue::New(0x%x, 0x%x, 0x%x)" ), aSize, aCount, aCurrentAddress) ); - - DIscBufferQueue* self = new DIscBufferQueue(); - ASSERT_RESET_ALWAYS( self, "ISCDataTransmissionBase",EIscMemoryAllocationFailure ); - if ( self->Construct( aSize, aCount, aCurrentAddress ) != KErrNone ) - { - delete self; - self = NULL; - } - else - { - } - - C_TRACE( ( _T( "DIscBufferQueue::New - return 0x%x" ),self ) ); - return self; - } - - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::~DIscBufferQueue -// Destructor -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -DIscBufferQueue::~DIscBufferQueue() - { - C_TRACE( ( _T( "DIscBufferQueue::~DIscBufferQueue()" ) ) ); - if ( iBuffersQueue ) - { - /* release all buffers */ - for ( TInt i = 0; i < iBuffersQueue->Count(); i++ ) - { - // destroy allocated buffer - TPtr8* delBuf = ( TPtr8* )iBuffersQueue->RemoveFirst(); - - if ( delBuf ) - { -#ifdef __WINS__ - Kern::Free( ( TAny* )delBuf->Ptr() ); - delete delBuf; -#else - delete delBuf; -#endif - } - else - { - } - } - delete iBuffersQueue; - delete []iBuffers; - } - C_TRACE( ( _T( "DIscBufferQueue::~DIscBufferQueue - return void" ) ) ); - } - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::Reserve -// Reserves first element from the queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -TDes8* DIscBufferQueue::Reserve() - { - - if ( iBuffersQueue ) - { - TDes8* temp = ( TDes8* )iBuffersQueue->RemoveFirst(); - if ( temp ) - { - TInt irqLevel = DisableIrqs(); - iCount--; - RestoreIrqs( irqLevel ); - } - return temp; - } - else - { - return NULL; - } - - } - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::Release -// Releases element from the queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -void DIscBufferQueue::Release( - TDes8* aPtr ) - { - - if ( iBuffersQueue ) - { - aPtr->Zero(); - TInt err = iBuffersQueue->Add( aPtr ); - ASSERT_RESET_ALWAYS( err == KErrNone, "ISCDataTransmissionBase",EIscBufferAllocationFailure ); - TInt irqLevel = DisableIrqs(); - iCount++; - RestoreIrqs( irqLevel ); - } - - } - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::DisableIrqs -// Function to disable interrupts -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -TInt DIscBufferQueue::DisableIrqs() - { -#ifndef __WINS__ - return NKern::DisableInterrupts( KIscInterruptLevelTwo ); -#else //__WINS__ - EnterCriticalSection( &g_IscDTBCriticalSection ); - return KErrNone; -#endif//__WINS__ - } - -// ----------------------------------------------------------------------------- -// DIscBufferQueue::RestoreIrqs -// Function to restore interrupts -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// - -#ifndef __WINS__ -void DIscBufferQueue::RestoreIrqs( - TInt aLevel ) - { - NKern::RestoreInterrupts( aLevel ); -#else //__WINS__ -void DIscBufferQueue::RestoreIrqs( - TInt ) - { - LeaveCriticalSection( &g_IscDTBCriticalSection ); -#endif//__WINS__ - } -// End of File