wlan_bearer/wlannwif/etherpkt/receiver_hw.cpp
changeset 0 c40eb8fe8501
child 17 a828660c511c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlannwif/etherpkt/receiver_hw.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2002-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:  Implements receiver class for target
+*
+*/
+
+/*
+* %version: 12 %
+*/
+
+#include <nifmbuf.h>
+#include "am_debug.h"
+#include "receiver_hw.h"
+#include "WlanProto.h"
+#include "carddrv.h"
+
+// ---------------------------------------------------------
+// CReceiver::CReceiver()
+// ---------------------------------------------------------
+//
+CReceiver::CReceiver( CPcCardPktDrv* aParent ) : 
+    CActive(EPriorityStandard),
+    iParent(aParent)
+    {
+    }
+
+// ---------------------------------------------------------
+// CReceiver::ConstructL()
+// ---------------------------------------------------------
+//
+void CReceiver::ConstructL()
+    {
+    DEBUG("CReceiver::ConstructL()");
+    }
+
+// ---------------------------------------------------------
+// CReceiver::NewL()
+// ---------------------------------------------------------
+//
+CReceiver* CReceiver::NewL( CPcCardPktDrv* aParent )
+    {
+    DEBUG("CReceiver::NewL()");
+    CReceiver* self = new (ELeave) CReceiver( aParent );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CActiveScheduler::Add( self );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CReceiver::~CReceiver()
+// ---------------------------------------------------------
+//
+CReceiver::~CReceiver()
+    {
+    DEBUG("CReceiver::~CReceiver()");
+    Cancel();
+    }
+
+// ---------------------------------------------------------
+// CReceiver::DoCancel()
+// ---------------------------------------------------------
+//
+void CReceiver::DoCancel()
+    {
+    DEBUG("CReceiver::DoCancel()");
+    iParent->iCard.ReadCancel();
+    }
+
+// ---------------------------------------------------------
+// CReceiver::QueueRead()
+// ---------------------------------------------------------
+//
+void CReceiver::QueueRead()
+    {
+    iParent->iCard.RequestFrame( iStatus );
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------
+// CReceiver::RunL()
+// ---------------------------------------------------------
+//
+void CReceiver::RunL()
+    {
+    DEBUG("CReceiver::RunL()" );
+
+    while( iParent->iFrameXferBlock->GetNextRxDataBuffer( iDataBuffer ) )
+        {
+        TUint8* buf = iDataBuffer->GetBuffer();
+        TUint32 len = iDataBuffer->GetLength();
+
+        //Save the original buf value which points 
+        //to the beginning of the Ethernet header
+        TUint8* bufOrig = buf;   
+
+		DEBUG1("CReceiver::RunL() - packet length: %u", len );
+    
+        if( buf && len > 0 && len <= KMaxEthernetFrameLength )
+            {        
+            //Now set buf point to the beginning of the Payload
+            buf = buf + KEtherHeaderSize;
+               
+            len = len - KEtherHeaderSize;
+         
+            TPtrC8 pkt(buf, len);
+            RMBufPacket pFrame; //Payload
+            TRAPD( ret, pFrame.CreateL( pkt ) );
+            if( ret == KErrNone )
+                {
+                pFrame.Pack(); 
+            
+                iParent->iParent->Process( pFrame, bufOrig, iDataBuffer->UserPriority() );
+                }
+            }
+        }
+
+    if( iParent->CardOpen() )
+        {
+        QueueRead();
+        }
+    }