wlan_bearer/wlannwif/etherpkt/receiver_hw.cpp
branchRCL_3
changeset 17 a828660c511c
parent 0 c40eb8fe8501
child 18 d3d7683d16f5
equal deleted inserted replaced
16:5fb7af913dfd 17:a828660c511c
    14 * Description:  Implements receiver class for target
    14 * Description:  Implements receiver class for target
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 /*
    18 /*
    19 * %version: 12 %
    19 * %version: 13 %
    20 */
    20 */
    21 
    21 
    22 #include <nifmbuf.h>
    22 #include <nifmbuf.h>
    23 #include "am_debug.h"
    23 #include "am_debug.h"
    24 #include "receiver_hw.h"
    24 #include "receiver_hw.h"
    29 // CReceiver::CReceiver()
    29 // CReceiver::CReceiver()
    30 // ---------------------------------------------------------
    30 // ---------------------------------------------------------
    31 //
    31 //
    32 CReceiver::CReceiver( CPcCardPktDrv* aParent ) : 
    32 CReceiver::CReceiver( CPcCardPktDrv* aParent ) : 
    33     CActive(EPriorityStandard),
    33     CActive(EPriorityStandard),
    34     iParent(aParent)
    34     iParent(aParent),
       
    35     iFrameToFree( NULL )
    35     {
    36     {
    36     }
    37     }
    37 
    38 
    38 // ---------------------------------------------------------
    39 // ---------------------------------------------------------
    39 // CReceiver::ConstructL()
    40 // CReceiver::ConstructL()
    65 //
    66 //
    66 CReceiver::~CReceiver()
    67 CReceiver::~CReceiver()
    67     {
    68     {
    68     DEBUG("CReceiver::~CReceiver()");
    69     DEBUG("CReceiver::~CReceiver()");
    69     Cancel();
    70     Cancel();
       
    71     iFrameToFree = NULL;
    70     }
    72     }
    71 
    73 
    72 // ---------------------------------------------------------
    74 // ---------------------------------------------------------
    73 // CReceiver::DoCancel()
    75 // CReceiver::DoCancel()
    74 // ---------------------------------------------------------
    76 // ---------------------------------------------------------
    96 //
    98 //
    97 void CReceiver::RunL()
    99 void CReceiver::RunL()
    98     {
   100     {
    99     DEBUG("CReceiver::RunL()" );
   101     DEBUG("CReceiver::RunL()" );
   100 
   102 
   101     while( iParent->iFrameXferBlock->GetNextRxDataBuffer( iDataBuffer ) )
   103     TUint rxCount( 0 );
       
   104     const TUint KMaxRxCount( 4 );
       
   105     
       
   106     while( ( rxCount < KMaxRxCount ) &&
       
   107            ( iDataBuffer = iParent->iCard.GetRxFrame( iFrameToFree ) ) != NULL )
   102         {
   108         {
   103         TUint8* buf = iDataBuffer->GetBuffer();
   109         TUint8* buf = iDataBuffer->GetBuffer();
   104         TUint32 len = iDataBuffer->GetLength();
   110         TUint32 len = iDataBuffer->GetLength();
   105 
   111 
   106         //Save the original buf value which points 
   112         //Save the original buf value which points 
   124                 pFrame.Pack(); 
   130                 pFrame.Pack(); 
   125             
   131             
   126                 iParent->iParent->Process( pFrame, bufOrig, iDataBuffer->UserPriority() );
   132                 iParent->iParent->Process( pFrame, bufOrig, iDataBuffer->UserPriority() );
   127                 }
   133                 }
   128             }
   134             }
       
   135             
       
   136         iFrameToFree = iDataBuffer;
       
   137         ++rxCount;
       
   138 		DEBUG1("CReceiver::RunL() - %u packet(s) processed", rxCount );
   129         }
   139         }
   130 
   140 
   131     if( iParent->CardOpen() )
   141     if ( rxCount == KMaxRxCount )
   132         {
   142         {
   133         QueueRead();
   143 		DEBUG("CReceiver::RunL() - yield");
       
   144 		
       
   145         SetActive();
       
   146         TRequestStatus* status = &iStatus;
       
   147         User::RequestComplete( status, KErrNone );
       
   148         }
       
   149     else
       
   150         {
       
   151         iFrameToFree = NULL;
       
   152             
       
   153         if( iParent->CardOpen() )
       
   154             {
       
   155             QueueRead();
       
   156             }
   134         }
   157         }
   135     }
   158     }