diff -r 37b610eb7fe3 -r b5894bb67e73 systemswstubs/examplecommonisc/IscDriver/src/IscQueue.cpp --- a/systemswstubs/examplecommonisc/IscDriver/src/IscQueue.cpp Thu Aug 19 09:36:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2005 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: An example implementation for ISC Driver Reference -* -*/ - - - -// INCLUDE FILES - -#include -#ifdef __WINS__ -#include -#endif - -#include -#include "IscQueue.h" -#include "IscTrace.h" - - -// EXTERNAL DATA STRUCTURES -#ifdef __WINS__ -extern CRITICAL_SECTION g_IscCriticalSection; -#endif - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS -const TInt KIscInterruptLevelTwo( 2 ); - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// DIscQueue::DIscQueue -// C++ default constructor -// ----------------------------------------------------------------------------- -// -DIscQueue::DIscQueue() - :iHead( 0 ),iTail( 0 ),iCount( 0 ),iSize( 0 ),iQueue( NULL ) - { - } - -// ----------------------------------------------------------------------------- -// DIscQueue::DIscQueue -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -EXPORT_C DIscQueue::DIscQueue( TUint32** aQueue, TUint16 Size ) - :iHead( 0 ),iTail( 0 ),iCount( 0 ),iSize( Size ),iQueue( aQueue ) - { - E_TRACE( ( _T( "IQ:IQ %d 0x%x" ), iSize, iQueue ) ); - } - -// Destructor -EXPORT_C DIscQueue::~DIscQueue() - { - iHead = 0; - iTail = 0; - iCount = 0; - iQueue = NULL; - iSize = 0; - } - - -// ----------------------------------------------------------------------------- -// DIscQueue::Add -// Function to add element to queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt DIscQueue::Add( TAny* anEntry ) - { - E_TRACE( ( _T( "IQ:A %d 0x%x" ), iCount, iQueue ) ); - - TInt irqLevel = DisableIrqs(); - - if ( iCount == iSize || iSize == 0 ) - { - RestoreIrqs( irqLevel ); - return KErrNoMemory;//EFalse; - } - - /* place the buffer into the queue */ - iQueue[ iTail ] = ( TUint32* )( anEntry ); - - if ( iSize > 0 ) - { - /* adjust tail pointer */ - iTail = ++iTail % iSize; - - /* remember the amount of the requests in the queue */ - iCount++; - } - else - { - ASSERT_RESET_ALWAYS( 0, "IscDriver", EIscBufferAllocationFailure ) - } - - RestoreIrqs( irqLevel ); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// DIscQueue::Remove -// Removes first element from the queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C TAny* DIscQueue::RemoveFirst() - { - E_TRACE( ( _T( "IQ:R %d %d" ), iCount, iSize ) ); - - TAny* result = NULL; - TInt irqLevel = DisableIrqs(); - - if ( iCount == 0 || iSize == 0 ) - { - RestoreIrqs( irqLevel ); - return NULL; - } - // Get an element from the queue. - result = ( TAny* )iQueue[ iHead ]; - - iQueue[ iHead ] = NULL; - - // Adjust the head of the queue. - iHead = ++iHead % iSize; - // Decrease counter. - iCount--; - - RestoreIrqs( irqLevel ); - - return result; - - } - -// ----------------------------------------------------------------------------- -// DIscQueue::GetFirst -// Fetches first element from the queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C TAny* DIscQueue::GetFirst() - { - E_TRACE( ( _T( "IQ:G %d %d" ), iCount, iSize ) ); - - TAny* result; - TInt irqLevel = DisableIrqs(); - - if ( iCount == 0 || iSize == 0 ) - { - RestoreIrqs( irqLevel ); - return NULL; - } - // Get an element from the queue. - result = ( TAny* )iQueue[ iHead ]; - - RestoreIrqs( irqLevel ); - - return result; - - } - -// ----------------------------------------------------------------------------- -// DIscQueue::DeleteFirst -// Deletes first element from the queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C void DIscQueue::DeleteFirst() - { - E_TRACE( ( _T( "IQ:D %d %d" ), iCount, iSize ) ); - - TInt irqLevel = DisableIrqs(); - - iQueue[ iHead ] = NULL; - - if ( iSize > 0 ) - { - // Adjust the head of the queue. - iHead = ++iHead % iSize; - // decrease counter. - iCount--; - } - else - { - ASSERT_RESET_ALWAYS( 0, "IscDriver", EIscBufferAllocationFailure ) - } - - RestoreIrqs( irqLevel ); - - } - -// ----------------------------------------------------------------------------- -// DIscQueue::Empty -// Checks if queue is empty -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool DIscQueue::Empty() - { - TInt result; - TInt irqLevel = DisableIrqs(); - result = iCount == 0 ? ETrue : EFalse; - RestoreIrqs( irqLevel ); - - return result; - } - -// ----------------------------------------------------------------------------- -// DIscQueue::NextBufferLenth -// Gets length of next frame in queue -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -EXPORT_C TUint16 DIscQueue::NextBufferLength() - { - TUint16 length; - - TInt irqLevel = DisableIrqs(); - - if ( iCount == 0 ) - { - RestoreIrqs( irqLevel ); - return 0; - } - - length = ( TUint16 )( ( ( TDes8* )iQueue[ iHead ] )->Length() ); - - - RestoreIrqs( irqLevel ); - - return length; - } - -// ----------------------------------------------------------------------------- -// DIscQueue::DisableIrqs -// Function to disable interrupts -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -TInt DIscQueue::DisableIrqs() - { -#ifndef __WINS__ - return NKern::DisableInterrupts( KIscInterruptLevelTwo ); -#else //__WINS__ - EnterCriticalSection( &g_IscCriticalSection ); - return KErrNone; -#endif//__WINS__ - } - -// ----------------------------------------------------------------------------- -// DIscQueue::RestoreIrqs -// Function to restore interrupts -// ( other items were commented in a header ). -// ----------------------------------------------------------------------------- -// -#ifndef __WINS__ -void DIscQueue::RestoreIrqs( - TInt aLevel ) - { - NKern::RestoreInterrupts( aLevel ); -#else //__WINS__ -void DIscQueue::RestoreIrqs( - TInt ) -{ - LeaveCriticalSection( &g_IscCriticalSection ); -#endif//__WINS__ - } - -// End of File