systemswstubs/examplecommonisc/IscDriver/src/IscMainRcvBuffer.cpp
changeset 39 65e91466a14b
parent 31 931072794a66
child 40 b7e5ed8c1342
--- a/systemswstubs/examplecommonisc/IscDriver/src/IscMainRcvBuffer.cpp	Tue Jul 06 14:03:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,230 +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 <IscDefinitions.h>
-#include <IscMultiplexerBase.h>
-#include "IscMainRcvBuffer.h"
-#include "IscQueue.h"
-#include "IscDevice.h"
-#include "IscChannel.h"
-#include "IscChannelContainer.h"
-#include "IscTrace.h"
-
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES  
-
-// CONSTANTS
-DIscMainRcvBuffer* DIscMainRcvBuffer::iThisPointer = NULL;
-const TInt KBufferCleanUpDfcPriority( 4 );
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// DIscMainRcvBuffer::DIscMainRcvBuffer
-// C++ default constructor
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-DIscMainRcvBuffer::DIscMainRcvBuffer( DIscDevice *aDevice, TUint16 aIscMainRcvBufferQueueSize )
-    :iDevice ( aDevice ),
-     iDfc( NULL ),
-     iMainRcvBufferQueue( NULL )
-    {
-    iIscMainRcvBufferQueueSize = aIscMainRcvBufferQueueSize;
-    iMainRcvBuffer = new TUint32*[iIscMainRcvBufferQueueSize];
-    ASSERT_RESET_ALWAYS( iMainRcvBuffer, "IscDriver",EIscMemoryAllocationFailure );
-
-    for ( TInt i = 0; i < iIscMainRcvBufferQueueSize; i++ )
-        {
-        iMainRcvBuffer[i] = NULL;
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// DIscMainRcvBuffer::DoCreate
-// Second-phase constructor to complete construction.
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscMainRcvBuffer::DoCreate()
-    {
-    if ( iThisPointer ) //Only one instance of this class is allowed
-        {
-        ASSERT_RESET_ALWAYS( 0,"IscDriver",EIscMainRcvBufferInitialize );
-        }
-
-    iDfc = new TDfc( BufferCleanUp, this, Kern::DfcQue0(), KBufferCleanUpDfcPriority );
-    ASSERT_RESET_ALWAYS( iDfc, "IscDriver",EIscMemoryAllocationFailure );
-    
-    iMainRcvBufferQueue = new DIscQueue( iMainRcvBuffer, iIscMainRcvBufferQueueSize );
-    ASSERT_RESET_ALWAYS( iMainRcvBufferQueue, "IscDriver",EIscMemoryAllocationFailure );
-
-    //Store pointer of this instance that can be used from static functions
-    iThisPointer = this;
-    }
-
-//Destructor
-DIscMainRcvBuffer::~DIscMainRcvBuffer()
-    {
-    delete iDfc;
-    delete iMainRcvBufferQueue;
-    iDfc = NULL;
-    iMainRcvBufferQueue = NULL;
-    iThisPointer = NULL;
-    iDevice = NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// DIscMainRcvBuffer::MsgReceive
-// Function that should be called to store incoming frame
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscMainRcvBuffer::MsgReceive( TDesC8* aData )
-    {    
-    E_TRACE( ( _T( "IMRB:MR(0x%x)" ), aData ) );
-    //Check that instance of this class is created
-    if ( !iThisPointer )
-        {
-        // MainRcvBuffer not initialized -> panic
-        ASSERT_RESET_ALWAYS( 0,"IscDriver",EIscMainRcvBufferInitialize );
-        }
-    
-    TInt r = iThisPointer->iMainRcvBufferQueue->Add( aData );
-    ASSERT_RESET_ALWAYS( r == KErrNone, "IscDriver",EIscMainRcvBufferOverflow );
-    iThisPointer->AddDfc();
-    }
-
-// -----------------------------------------------------------------------------
-// DIscMainRcvBuffer::AddDfc
-// Function for adding Dfc
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscMainRcvBuffer::AddDfc()
-    {    
-#ifndef __WINS__
-    if ( NKern::CurrentContext() == NKern::EInterrupt )
-        {
-        iDfc->Add();
-        }
-    else
-        {
-        iDfc->Enque();
-        }
-#else
-    // Have to do DoEnque since Enque() & Add() cannot be called from pure 
-    // win32 thread context. And this call might come directly in win32 thread
-    // since the implementation of ISC Data Transmission API can do virtually 
-    // anything in WINS
-    iDfc->DoEnque();
-#endif
-    }
-
-// -----------------------------------------------------------------------------
-// DIscMainRcvBuffer::BufferCleanUp
-// Function to empty messages in main buffer
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscMainRcvBuffer::BufferCleanUp( TAny* aPtr )
-    {
-    C_TRACE( ( _T( "DIscMainRcvBuffer::BufferCleanUp(0x%x)" ), aPtr ) );
-    
-    DIscMainRcvBuffer* Buffer = ( DIscMainRcvBuffer* )aPtr;
-    
-    
-    TUint16 rcvChannelId( KIscFrameReceiverNotFound );
-    TAny* channelPtr = NULL;
-    DIscChannel* tempPtr = NULL;
-    TBool channelFound( EFalse );
-
-    TDesC8* ptr = NULL;
-    ptr = ( TDesC8* )Buffer->iMainRcvBufferQueue->RemoveFirst();
-        
-    while ( ptr )
-        {
-        Buffer->iDevice->iIscMultiplexerInterface->GetRcvChannelId( *ptr, rcvChannelId, channelPtr );
-    
-        C_TRACE( ( _T( "DIscMainRcvBuffer::BufferCleanUp channelId (0x%x) channelPtr (0x%x)" ), rcvChannelId, channelPtr ) );
-        if ( rcvChannelId >= KIscFirstChannel &&  rcvChannelId < KIscNumberOfUnits && channelPtr )
-            {
-            channelFound = EFalse;
-            for ( TUint16 i( 0 ); ( i < KIscMaxNumberOfChannelSharers ) && ( !channelFound ); i++ )
-                {
-                tempPtr = IscChannelContainer::Channel( rcvChannelId, i );
-                if ( tempPtr == channelPtr )
-                    {
-                    // correct channel found
-                    ( ( DIscChannel* )channelPtr )->StoreFrame( ptr );
-                    channelFound = ETrue;
-                    }
-                tempPtr = NULL;
-                }
-            if ( !channelFound )
-                {
-                TRACE_ASSERT_ALWAYS;
-                // correct channel was not found -> release frame
-                Buffer->iDevice->ReleaseMemoryBlock( ( TDes8* ) ptr );
-                }
-            }
-        else if ( rcvChannelId == KIscFrameReceiverNotFound )
-            {
-            C_TRACE( ( _T( "DIscMainRcvBuffer::BufferCleanUp Frame Receiver not found!" ) ) );
-            Buffer->iDevice->ReleaseMemoryBlock( ( TDes8* ) ptr );
-            }
-        // Frame going to control channel
-        else if ( rcvChannelId == 0x00 )
-            {
-            Buffer->iDevice->iIscMultiplexerInterface->HandleControlFrame( *ptr );
-            }
-        else
-            {
-            TRACE_ASSERT_ALWAYS;
-            Buffer->iDevice->ReleaseMemoryBlock( ( TDes8* ) ptr );
-            }
-
-        // get the next frame from the queue
-        ptr = ( TDes8* )Buffer->iMainRcvBufferQueue->RemoveFirst();
-        }
-
-    IscChannelContainer::ChannelComplition( NULL );
-
-    C_TRACE( ( _T( "DIscMainRcvBuffer::BufferCleanUp - return 0x%x" ) ) );
-
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-//  End of File